Skip to content
Browse files

complete transaction creation and payment; missing business logic (va…

…lidations etc.) and unit tests.

routing needs to be limited to precise controller actions; running out of time.
  • Loading branch information...
1 parent 179b535 commit cec822bb0bac1c2a89ac510777cfe40d1cc995db @bsodmike committed Oct 1, 2011
Showing with 521 additions and 40 deletions.
  1. +7 −0 app/controllers/admin/offline_partners_controller.rb
  2. +7 −0 app/controllers/admin/online_shops_controller.rb
  3. +21 −0 app/controllers/admin/payments_controller.rb
  4. +44 −0 app/controllers/admin/transactions_controller.rb
  5. +1 −0 app/controllers/admin_controller.rb
  6. +9 −0 app/controllers/application_controller.rb
  7. +6 −0 app/models/customer.rb
  8. +4 −0 app/models/offline_partner.rb
  9. +3 −0 app/models/online_shop.rb
  10. +12 −0 app/models/payment.rb
  11. +22 −0 app/models/transaction.rb
  12. +25 −2 app/views/admin/dashboard/index.html.erb
  13. +23 −0 app/views/admin/offline_partners/index.html.erb
  14. +24 −0 app/views/admin/online_shops/index.html.erb
  15. +2 −0 app/views/admin/payments/index.html.erb
  16. +21 −0 app/views/admin/payments/new.html.erb
  17. +30 −0 app/views/admin/transactions/index.html.erb
  18. +25 −0 app/views/admin/transactions/new.html.erb
  19. +23 −0 app/views/admin/transactions/show.html.erb
  20. +44 −33 app/views/layouts/application.html.erb
  21. +21 −0 app/views/layouts/pdf.html.erb
  22. +1 −2 app/views/public/index.html.erb
  23. +3 −1 config/application.rb
  24. +3 −0 config/initializers/wicked_pdf.rb
  25. +10 −1 config/routes.rb
  26. +15 −0 db/migrate/20111001101918_create_transactions.rb
  27. +9 −0 db/migrate/20111001102112_create_customers.rb
  28. +9 −0 db/migrate/20111001103818_create_offline_partners.rb
  29. +9 −0 db/migrate/20111001103908_create_online_shops.rb
  30. +10 −0 db/migrate/20111001104641_create_payments.rb
  31. +37 −1 db/schema.rb
  32. +8 −0 lib/email_validator.rb
  33. +8 −0 lib/tasks/app_setup.rake
  34. +5 −0 spec/models/customer_spec.rb
  35. +5 −0 spec/models/offline_partner_spec.rb
  36. +5 −0 spec/models/online_shop_spec.rb
  37. +5 −0 spec/models/payment_spec.rb
  38. +5 −0 spec/models/transaction_spec.rb
View
7 app/controllers/admin/offline_partners_controller.rb
@@ -0,0 +1,7 @@
+class Admin::OfflinePartnersController < AdminController
+
+ def index
+ @partners = OfflinePartner.all
+ end
+
+end
View
7 app/controllers/admin/online_shops_controller.rb
@@ -0,0 +1,7 @@
+class Admin::OnlineShopsController < AdminController
+
+ def index
+ @shops = OnlineShop.all
+ end
+
+end
View
21 app/controllers/admin/payments_controller.rb
@@ -0,0 +1,21 @@
+class Admin::PaymentsController < ApplicationController
+
+ def new
+ @partner = OfflinePartner.find(params[:offline_partner_id])
+ @payment = @partner.payments.new
+ end
+
+ def create
+ @partner = OfflinePartner.find(params[:offline_partner_id])
+ @payment = @partner.payments.new(params[:payment])
+
+ if @payment.save
+ Transaction.find_by_barcode(@payment.barcode_identifer).update_attribute(:state,"done")
+ flash[:notice] = "Successfully made payment at #{@partner.name}."
+ redirect_to admin_offline_partners_path
+ else
+ render 'new'
+ end
+ end
+
+end
View
44 app/controllers/admin/transactions_controller.rb
@@ -0,0 +1,44 @@
+class Admin::TransactionsController < AdminController
+ def index
+ @shop = OnlineShop.find(params[:online_shop_id])
+ @transactions = Transaction.all
+ end
+
+ def new
+ @shop = OnlineShop.find(params[:online_shop_id])
+ @transaction = @shop.transactions.new
+ end
+
+ def create
+ @shop = OnlineShop.find(params[:online_shop_id])
+ @transaction = @shop.transactions.new(params[:transaction])
+
+ if @transaction.save
+ flash[:notice] = "Successfully created transaction for #{@shop.name}."
+ redirect_to admin_online_shop_transaction_path(@shop, @transaction)
+ else
+ render 'new'
+ end
+ end
+
+ def show
+ @shop = OnlineShop.find(params[:online_shop_id])
+ @transaction = Transaction.find(params[:id])
+
+ respond_to do |format|
+ format.html
+ format.pdf do
+ @example_text = "some text"
+ render :pdf => "file_name",
+ :template => 'layouts/pdf.html.erb',
+ :layout => 'pdf',
+ :footer => {
+ :center => "Center",
+ :left => "Left",
+ :right => "Right"
+ }
+ end
+ end
+ end
+
+end
View
1 app/controllers/admin_controller.rb
@@ -1,6 +1,7 @@
class AdminController < ApplicationController
before_filter :authenticate_user!
before_filter do
+ flash[:error] = "Unauthorised Access Denied!" unless current_user && current_user.admin? && current_user.active?
redirect_to '/' unless current_user && current_user.admin? && current_user.active?
end
View
9 app/controllers/application_controller.rb
@@ -1,3 +1,12 @@
class ApplicationController < ActionController::Base
protect_from_forgery
+
+ helper_method :percentage_transactions
+
+ def percentage_transactions(status)
+ state = Transaction.where(:state => status).count
+ total = Transaction.count
+ percent = 100* (state.to_f/total.to_f)
+ percent.round(2)
+ end
end
View
6 app/models/customer.rb
@@ -0,0 +1,6 @@
+class Customer < ActiveRecord::Base
+ has_many :transactions
+
+ validates :email, :presence => true, :uniqueness => true, :email => true
+
+end
View
4 app/models/offline_partner.rb
@@ -0,0 +1,4 @@
+class OfflinePartner < ActiveRecord::Base
+ has_many :payments
+ has_many :transactions, :through => :payments
+end
View
3 app/models/online_shop.rb
@@ -0,0 +1,3 @@
+class OnlineShop < ActiveRecord::Base
+ has_many :transactions
+end
View
12 app/models/payment.rb
@@ -0,0 +1,12 @@
+class Payment < ActiveRecord::Base
+ before_save :locate_transaction_via_barcode
+
+ belongs_to :offline_partner
+ belongs_to :transaction
+
+ attr_accessor :barcode_identifer
+
+ def locate_transaction_via_barcode
+ self.transaction_id = Transaction.where(:barcode => :barcode_identifer)
+ end
+end
View
22 app/models/transaction.rb
@@ -0,0 +1,22 @@
+class Transaction < ActiveRecord::Base
+ before_save :set_due_date
+ before_save :generate_barcode
+
+ belongs_to :customer
+ belongs_to :online_shop
+
+ def set_due_date
+ self.due_date = 10.days.from_now.to_date
+ end
+
+ def generate_barcode
+ self.barcode = "%013d" % Random.new.rand((10 ** 12)...(10 ** 13)) # save as string in DB
+ end
+
+ private
+ def self.search_transactions(term)
+ term = "%#{term}%"
+ self.where("state like ? or barcode like ?", term, term).select("distinct barcode")
+ end
+
+end
View
27 app/views/admin/dashboard/index.html.erb
@@ -1,2 +1,25 @@
-<h1>Admin::Dashboard#index</h1>
-<p>Find me in app/views/admin/dashboard/index.html.erb</p>
+<h1>Zahlbar Admin Dashboard ~ <%= %w[Willkommen Welcome].sample %>!</h1>
+
+<br/>
+
+<h3>Transactions Status Overview</h3>
+<div class="row">
+ <div class="span6">
+ <table class="zebra-striped">
+ <tbody>
+ <tr>
+ <td>Done</td>
+ <td><%= percentage_transactions("done") %>% (<%= Transaction.where(:state => "done").count %>)</td>
+ </tr>
+ <tr>
+ <td>Pending</td>
+ <td><%= percentage_transactions("pending") %>% (<%= Transaction.where(:state => "pending").count %>)</td>
+ </tr>
+ <tr>
+ <td>Cancelled</td>
+ <td><%= percentage_transactions("cancelled") %>% (<%= Transaction.where(:state => "cancelled").count %>)</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+</div>
View
23 app/views/admin/offline_partners/index.html.erb
@@ -0,0 +1,23 @@
+<h1>Select Offline-Partner to Make a Payment</h1>
+
+<table class="zebra-striped">
+ <thead>
+ <tr>
+ <th>#</th>
+ <th>Offline-Partner Name</th>
+ <th>Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @partners.each do |r| %>
+ <tr>
+ <td><%= r.id %></td>
+ <td><%= r.name %></td>
+ <td>
+ <%= link_to "Make a payment", new_admin_offline_partner_payment_path(r) %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+</table>
+
View
24 app/views/admin/online_shops/index.html.erb
@@ -0,0 +1,24 @@
+<h1>Select Online Shop to Create Transaction</h1>
+
+<table class="zebra-striped">
+ <thead>
+ <tr>
+ <th>#</th>
+ <th>Shop Name</th>
+ <th>Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @shops.each do |r| %>
+ <tr>
+ <td><%= r.id %></td>
+ <td><%= r.name %></td>
+ <td>
+ <%= link_to "Create Transaction", new_admin_online_shop_transaction_path(r) %> |
+ <%= link_to "View Transactions", admin_online_shop_transactions_path(r) %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+</table>
+
View
2 app/views/admin/payments/index.html.erb
@@ -0,0 +1,2 @@
+<h1>Admin::Payments#index</h1>
+<p>Find me in app/views/admin/payments/index.html.erb</p>
View
21 app/views/admin/payments/new.html.erb
@@ -0,0 +1,21 @@
+<h2>Make Payment (Partner: <%= @partner.name %>)</h2>
+
+<br/>
+
+<div class="row">
+ <div class="span8">
+ <%= form_for [:admin, @partner, @payment] do |f| %>
+
+ <%#= render :partial => 'shared/form_errors', :locals => {:entity => @transaction} %>
+
+ <p>
+ <%= f.label :barcode_identifer, "Barcode" %>
+ <%= f.text_field :barcode_identifer %>
+ </p>
+
+ <p>
+ <%= submit_tag "Make Payment" %> or <%= link_to "Cancel", admin_offline_partners_path %>
+ </p>
+ <% end %>
+ </div>
+</div>
View
30 app/views/admin/transactions/index.html.erb
@@ -0,0 +1,30 @@
+<h1><%= @shop.name %>: Transactions</h1>
+
+<br/>
+
+<table class="zebra-striped">
+ <thead>
+ <tr>
+ <th>#</th>
+ <th>Barcode</th>
+ <th>Amount (USD)</th>
+ <th>Customer Email</th>
+ <th>Status</th>
+ <th>Action</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% @transactions.each do |r| %>
+ <tr>
+ <td><%= r.id %></td>
+ <td><%= r.barcode %></td>
+ <td><%= r.amount_cts %></td>
+ <td><%= Customer.where(:id => r.customer_id).last.email %></td>
+ <td><%= r.state %></td>
+ <td><%= link_to "View", admin_online_shop_transaction_path(@shop, r) %></td>
+ </tr>
+ <% end %>
+ </tbody>
+</table>
+
+
View
25 app/views/admin/transactions/new.html.erb
@@ -0,0 +1,25 @@
+<h2>Create Transaction for <%= @shop.name %></h2>
+
+<br/>
+
+<div class="row">
+ <div class="span8">
+ <%= form_for [:admin, @shop, @transaction] do |f| %>
+
+ <%#= render :partial => 'shared/form_errors', :locals => {:entity => @transaction} %>
+
+ <p>
+ <%= f.label :customer_id , "Customer" %>
+ <%= f.select :customer_id, Customer.all.collect {|r| [r.email, r.id]}, {:include_blank => 'Select Customer'} , {:style => "width:220px", :class => "select-box"} %>
+ </p>
+ <p>
+ <%= f.label :amount_cts, "Amount" %>
+ <%= f.text_field :amount_cts %>
+ </p>
+
+ <p>
+ <%= submit_tag "Create" %> or <%= link_to "Cancel", admin_online_shops_path %>
+ </p>
+ <% end %>
+ </div>
+</div>
View
23 app/views/admin/transactions/show.html.erb
@@ -0,0 +1,23 @@
+<h1><%= @shop.name %>: Transaction #<%= @transaction.id %></h1>
+<h3>Customer email: <%= Customer.where(:id => @transaction.customer_id).last.email %></h3>
+
+<br/>
+
+<table class="zebra-striped">
+ <tbody>
+ <tr>
+ <td><strong>Barcode</strong>:</td>
+ <td><%= @transaction.barcode %></td>
+ </tr>
+ <tr>
+ <td><strong>Amount</strong> (USD):</td>
+ <td><%= @transaction.amount_cts %></td>
+ </tr>
+ <tr>
+ <td><strong>Due Date (dd-mm-yyy)</strong>:</td>
+ <td><%= @transaction.due_date.strftime('%d-%m-%Y') %></td>
+ </tr>
+ </tbody>
+</table>
+
+<%= link_to "Download PDF", admin_online_shop_transaction_path(@shop, @transaction, :format => :pdf) %>
View
77 app/views/layouts/application.html.erb
@@ -32,21 +32,28 @@
<div class="topbar" >
<div class="topbar-inner">
<div class="container">
- <a class="brand" href="#">Bootstrap</a>
+ <a class="brand" href="#">Zahlbar</a>
<ul class="nav">
- <li class="active"><a href="#overview">Overview</a></li>
- <li><a href="#about">About</a></li>
- <li><a href="#grid-system">Grid</a></li>
- <li><a href="#layouts">Layouts</a></li>
- <li><a href="#typography">Type</a></li>
- <li><a href="#media">Media</a></li>
- <li><a href="#tables">Tables</a></li>
- <li><a href="#forms">Forms</a></li>
- <li><a href="#navigation">Navigation</a></li>
- <li><a href="#alerts">Alerts</a></li>
- <li><a href="#popovers">Popovers</a></li>
- <li><a href="#javascript">Javascript</a></li>
- <li><a href="#less">Less</a></li>
+ <% if request.env['PATH_INFO'] == "/admin" %>
+ <li class="active">
+ <% else %>
+ <li>
+ <% end %>
+ <%= link_to "Dashboard", admin_root_path %></li>
+
+ <% if request.env['PATH_INFO'] == "/admin/online_shops" %>
+ <li class="active">
+ <% else %>
+ <li>
+ <% end %>
+ <%= link_to "Create Transaction", admin_online_shops_path %></li>
+
+ <% if request.env['PATH_INFO'] == "/admin/offline_partners" %>
+ <li class="active">
+ <% else %>
+ <li>
+ <% end %>
+ <%= link_to "Make a Payment", admin_offline_partners_path %></li>
</ul>
</div>
</div>
@@ -61,9 +68,14 @@
<div class="span4"></div>
<div class="span4">
<p>
- <% if current_user %>
+ <% if current_user && current_user.admin? %>
Logged in as <%= current_user.email %>.<br/>
Not you? <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
+ <% elsif current_user.role == 'visitor' %>
+ <strong>Visitor</strong> Logged in as <%= current_user.email %>.<br/>
+ Not you? <%= link_to "Sign out", destroy_user_session_path, :method => :delete %>
+ <% else %>
+ Authorised Personnel Only<br/><%= link_to "Sign in", admin_root_path %>
<% end %>
</p>
</div>
@@ -72,34 +84,33 @@
</div>
<br/>
-
-<div class="container-fluid">
+<% if current_user && current_user.admin? & current_user.active? %>
+ <div class="container-fluid">
+
<div class="sidebar">
<div class="well">
- <h5>Sidebar</h5>
+ <h3>Online Shops</h3>
<ul>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
+ <li><%= link_to "Create Transaction", admin_online_shops_path %></li>
</ul>
- <h5>Sidebar</h5>
+
+ <h3>Offline-Partners</h3>
<ul>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
+ <li><%= link_to "Make Payment", admin_offline_partners_path %></li>
</ul>
- <h5>Sidebar</h5>
+
+ <h3>Manage Resources</h3>
+ <p>TODO! Currently loaded via rake task</p>
<ul>
- <li><a href="#">Link</a></li>
- <li><a href="#">Link</a></li>
+ <li><%= link_to "Manage Customers", "" %></li>
+ <li><%= link_to "Manage Online Shops", "" %></li>
+ <li><%= link_to "Manage Offline Providers", "" %></li>
</ul>
</div>
</div>
-
+<% else %>
+ <div class="container">
+<% end %>
<div class="content">
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}", :class => "alert-message #{name}" %>
View
21 app/views/layouts/pdf.html.erb
@@ -0,0 +1,21 @@
+<h1><%= @shop.name %>: Transaction #<%= @transaction.id %></h1>
+<h3>Customer email: <%= Customer.where(:id => @transaction.customer_id).last.email %></h3>
+
+<br/>
+
+<table class="zebra-striped">
+ <tbody>
+ <tr>
+ <td><strong>Barcode</strong>:</td>
+ <td><%= @transaction.barcode %></td>
+ </tr>
+ <tr>
+ <td><strong>Amount</strong> (USD):</td>
+ <td><%= @transaction.amount_cts %></td>
+ </tr>
+ <tr>
+ <td><strong>Due Date (dd-mm-yyy)</strong>:</td>
+ <td><%= @transaction.due_date.strftime('%d-%m-%Y') %></td>
+ </tr>
+ </tbody>
+</table>
View
3 app/views/public/index.html.erb
@@ -1,2 +1 @@
-<h1>Public#index</h1>
-<p>Find me in app/views/public/index.html.erb</p>
+<h1>Welcome to the Barzahlen Payment Gateway</h1>
View
4 config/application.rb
@@ -22,7 +22,9 @@ class Application < Rails::Application
# -- all .rb files in that directory are automatically loaded.
# Custom directories with classes and modules you want to be autoloadable.
- # config.autoload_paths += %W(#{config.root}/extras)
+ config.autoload_paths += %W(#{config.root}/extras)
+ config.autoload_paths += %W(#{config.root}/lib)
+ config.autoload_paths += Dir["#{config.root}/lib/**/"]
# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named.
View
3 config/initializers/wicked_pdf.rb
@@ -0,0 +1,3 @@
+WickedPdf.config = {
+ :exe_path => '/usr/local/bin/wkhtmltopdf'
+}
View
11 config/routes.rb
@@ -1,11 +1,20 @@
CoreApp::Application.routes.draw do
+ get "payments/index"
+
+ get "transaction_create/index"
+
root :to => 'public#index'
devise_for :users, :path => "login"
namespace :admin do
root :to => 'dashboard#index'
-
+ resources :online_shops do
+ resources :transactions
+ end
+ resources :offline_partners do
+ resources :payments
+ end
end
end
View
15 db/migrate/20111001101918_create_transactions.rb
@@ -0,0 +1,15 @@
+class CreateTransactions < ActiveRecord::Migration
+ def change
+ create_table :transactions do |t|
+ t.integer :customer_id
+ t.integer :online_shop_id
+ t.integer :amount_cts
+ t.datetime :due_date
+ t.string :state, :default => "pending"
+ t.string :barcode
+
+
+ t.timestamps
+ end
+ end
+end
View
9 db/migrate/20111001102112_create_customers.rb
@@ -0,0 +1,9 @@
+class CreateCustomers < ActiveRecord::Migration
+ def change
+ create_table :customers do |t|
+ t.string :email
+
+ t.timestamps
+ end
+ end
+end
View
9 db/migrate/20111001103818_create_offline_partners.rb
@@ -0,0 +1,9 @@
+class CreateOfflinePartners < ActiveRecord::Migration
+ def change
+ create_table :offline_partners do |t|
+ t.string :name
+
+ t.timestamps
+ end
+ end
+end
View
9 db/migrate/20111001103908_create_online_shops.rb
@@ -0,0 +1,9 @@
+class CreateOnlineShops < ActiveRecord::Migration
+ def change
+ create_table :online_shops do |t|
+ t.string :name
+
+ t.timestamps
+ end
+ end
+end
View
10 db/migrate/20111001104641_create_payments.rb
@@ -0,0 +1,10 @@
+class CreatePayments < ActiveRecord::Migration
+ def change
+ create_table :payments do |t|
+ t.integer :offline_partner_id
+ t.integer :transaction_id
+
+ t.timestamps
+ end
+ end
+end
View
38 db/schema.rb
@@ -11,7 +11,43 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20111001082358) do
+ActiveRecord::Schema.define(:version => 20111001104641) do
+
+ create_table "customers", :force => true do |t|
+ t.string "email"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "offline_partners", :force => true do |t|
+ t.string "name"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "online_shops", :force => true do |t|
+ t.string "name"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "payments", :force => true do |t|
+ t.integer "offline_partner_id"
+ t.integer "transaction_id"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ create_table "transactions", :force => true do |t|
+ t.integer "customer_id"
+ t.integer "online_shop_id"
+ t.integer "amount_cts"
+ t.datetime "due_date"
+ t.string "state", :default => "pending"
+ t.string "barcode"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
create_table "users", :force => true do |t|
t.string "email", :default => "", :null => false
View
8 lib/email_validator.rb
@@ -0,0 +1,8 @@
+class EmailValidator < ActiveModel::EachValidator
+ def validate_each(object, attribute, value)
+ unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
+ object.errors[attribute] << (options[:message] || "is not formatted properly")
+ end
+ end
+end
+
View
8 lib/tasks/app_setup.rake
@@ -0,0 +1,8 @@
+namespace :app do
+ desc "Seed data into db for demonstration"
+ task :setup_seed_data => :environment do
+ ["russel@google.com", "john@doe.net", "bob@parsons.com"].each { |r| Customer.create(:email => "#{r}") }
+ ["Wall-Mart", "McDonalds"].each { |r| OfflinePartner.create(:name => "#{r}") }
+ %w[Paypal Google].each { |r| OnlineShop.create(:name => "#{r}") }
+ end
+end
View
5 spec/models/customer_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe Customer do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
View
5 spec/models/offline_partner_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe OfflinePartner do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
View
5 spec/models/online_shop_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe OnlineShop do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
View
5 spec/models/payment_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe Payment do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
View
5 spec/models/transaction_spec.rb
@@ -0,0 +1,5 @@
+require 'spec_helper'
+
+describe Transaction do
+ pending "add some examples to (or delete) #{__FILE__}"
+end

0 comments on commit cec822b

Please sign in to comment.
Something went wrong with that request. Please try again.