tyche 0.14
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +23 -0
- data/README.markdown +392 -0
- data/Rakefile +11 -0
- data/app/assets/javascripts/plutus/application.js +16 -0
- data/app/assets/javascripts/plutus/reports.js +5 -0
- data/app/assets/stylesheets/bootstrap-theme.min.css +5 -0
- data/app/assets/stylesheets/bootstrap.min.css +5 -0
- data/app/assets/stylesheets/plutus/application.css +19 -0
- data/app/controllers/plutus/accounts_controller.rb +30 -0
- data/app/controllers/plutus/application_controller.rb +4 -0
- data/app/controllers/plutus/entries_controller.rb +34 -0
- data/app/controllers/plutus/reports_controller.rb +40 -0
- data/app/models/plutus/account.rb +172 -0
- data/app/models/plutus/amount.rb +24 -0
- data/app/models/plutus/amounts_extension.rb +42 -0
- data/app/models/plutus/asset.rb +56 -0
- data/app/models/plutus/balance_finders/base_balance_finder.rb +13 -0
- data/app/models/plutus/credit_amount.rb +10 -0
- data/app/models/plutus/debit_amount.rb +10 -0
- data/app/models/plutus/entry.rb +77 -0
- data/app/models/plutus/equity.rb +56 -0
- data/app/models/plutus/expense.rb +56 -0
- data/app/models/plutus/liability.rb +56 -0
- data/app/models/plutus/no_tenancy.rb +9 -0
- data/app/models/plutus/revenue.rb +56 -0
- data/app/models/plutus/tenancy.rb +15 -0
- data/app/views/layouts/plutus/_messages.html.erb +9 -0
- data/app/views/layouts/plutus/_navigation.html.erb +19 -0
- data/app/views/layouts/plutus/_navigation_links.html.erb +5 -0
- data/app/views/layouts/plutus/application.html.erb +19 -0
- data/app/views/plutus/accounts/index.html.erb +26 -0
- data/app/views/plutus/entries/index.html.erb +59 -0
- data/app/views/plutus/reports/_account.html.erb +28 -0
- data/app/views/plutus/reports/balance_sheet.html.erb +21 -0
- data/app/views/plutus/reports/income_statement.html.erb +24 -0
- data/config/backtrace_silencers.rb +7 -0
- data/config/database.yml +5 -0
- data/config/inflections.rb +10 -0
- data/config/mime_types.rb +5 -0
- data/config/routes.rb +9 -0
- data/config/secret_token.rb +7 -0
- data/config/session_store.rb +8 -0
- data/db/migrate/20160422010135_create_plutus_tables.rb +35 -0
- data/lib/generators/plutus/USAGE +22 -0
- data/lib/generators/plutus/add_date_upgrade_generator.rb +11 -0
- data/lib/generators/plutus/base_generator.rb +19 -0
- data/lib/generators/plutus/plutus_generator.rb +12 -0
- data/lib/generators/plutus/templates/tenant_migration.rb +6 -0
- data/lib/generators/plutus/tenancy_generator.rb +12 -0
- data/lib/generators/plutus/upgrade_plutus_generator.rb +12 -0
- data/lib/plutus.rb +20 -0
- data/lib/plutus/engine.rb +5 -0
- data/lib/plutus/version.rb +3 -0
- data/spec/controllers/accounts_controller_spec.rb +19 -0
- data/spec/controllers/entries_controller_spec.rb +19 -0
- data/spec/controllers/reports_controller_spec.rb +24 -0
- data/spec/factories/account_factory.rb +35 -0
- data/spec/factories/amount_factory.rb +20 -0
- data/spec/factories/entry_factory.rb +11 -0
- data/spec/lib/plutus_spec.rb +0 -0
- data/spec/models/account_spec.rb +133 -0
- data/spec/models/amount_spec.rb +13 -0
- data/spec/models/asset_spec.rb +7 -0
- data/spec/models/credit_amount_spec.rb +7 -0
- data/spec/models/debit_amount_spec.rb +7 -0
- data/spec/models/entry_spec.rb +182 -0
- data/spec/models/equity_spec.rb +7 -0
- data/spec/models/expense_spec.rb +7 -0
- data/spec/models/liability_spec.rb +7 -0
- data/spec/models/revenue_spec.rb +7 -0
- data/spec/models/tenancy_spec.rb +45 -0
- data/spec/rcov.opts +2 -0
- data/spec/routing/accounts_routing_spec.rb +13 -0
- data/spec/routing/entries_routing_spec.rb +13 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/support/account_shared_examples.rb +62 -0
- data/spec/support/active_support_helpers.rb +13 -0
- data/spec/support/amount_shared_examples.rb +21 -0
- data/spec/support/factory_girl_helpers.rb +8 -0
- data/spec/support/shoulda_matchers.rb +8 -0
- metadata +240 -0
@@ -0,0 +1,59 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<center>
|
3
|
+
<h1>Journal</h1>
|
4
|
+
<br>
|
5
|
+
<%= form_tag({:action => 'index'}, {:method => :get, :class => 'form-inline'}) do%>
|
6
|
+
<div class="form-group">
|
7
|
+
Per page: <%= select_tag :limit, options_for_select([25, 100, 200, 300], selected: params[:limit]), class: 'form-control' %>
|
8
|
+
Order: <%= select_tag :order, options_for_select(['descending', 'ascending'], selected: params[:order]), class: 'form-control' %>
|
9
|
+
</div>
|
10
|
+
<button type="submit" class="btn btn-default">Refresh</button>
|
11
|
+
<% end %>
|
12
|
+
</center>
|
13
|
+
|
14
|
+
<table class="table table-striped table-hover">
|
15
|
+
<thead>
|
16
|
+
<tr>
|
17
|
+
<th>Description</th>
|
18
|
+
<th>Debits</th>
|
19
|
+
<th>Credits</th>
|
20
|
+
<th>Date</th>
|
21
|
+
</tr>
|
22
|
+
</thead>
|
23
|
+
<tbody>
|
24
|
+
<% @entries.each do |entry| %>
|
25
|
+
<tr class="<%= cycle("even", "odd") -%>">
|
26
|
+
<td><%=h entry.description %></td>
|
27
|
+
<td></td>
|
28
|
+
<td></td>
|
29
|
+
<td><%=h entry.created_at %></td>
|
30
|
+
</tr>
|
31
|
+
<% entry.debit_amounts.each do |debit_amount| %>
|
32
|
+
<tr class="<%= cycle("odd", "odd") -%>">
|
33
|
+
<td> <%=h "#{debit_amount.account.name}" %></td>
|
34
|
+
<td><%=h debit_amount.amount.round(2) %></td>
|
35
|
+
<td></td>
|
36
|
+
<td></td>
|
37
|
+
</tr>
|
38
|
+
<% end %>
|
39
|
+
<% entry.credit_amounts.each do |credit_amount| %>
|
40
|
+
<tr class="<%= cycle("odd", "odd") -%>">
|
41
|
+
<td> <%=h "#{credit_amount.account.name}" %></td>
|
42
|
+
<td></td>
|
43
|
+
<td><%=h credit_amount.amount.round(2) %></td>
|
44
|
+
<td></td>
|
45
|
+
</tr>
|
46
|
+
<% end %>
|
47
|
+
<tr class="<%= cycle("odd", "odd") -%>">
|
48
|
+
<td></td>
|
49
|
+
<td></td>
|
50
|
+
<td></td>
|
51
|
+
<td></td>
|
52
|
+
</tr>
|
53
|
+
<% end %>
|
54
|
+
</tbody>
|
55
|
+
</table>
|
56
|
+
|
57
|
+
<%= paginate @entries %>
|
58
|
+
|
59
|
+
</div>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<table class="table table-striped table-hover">
|
2
|
+
<caption class="text-left"><b><%=name%></b></caption>
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th></th>
|
6
|
+
<th></th>
|
7
|
+
</tr>
|
8
|
+
</thead>
|
9
|
+
<% if accounts.count > 0%>
|
10
|
+
<tbody>
|
11
|
+
<% running_total = 0 %>
|
12
|
+
<% accounts.each do |account| %>
|
13
|
+
<% balance = account.balance(:from_date => @from_date, :to_date => @to_date) %>
|
14
|
+
<tr class="<%= cycle("even", "odd") -%>">
|
15
|
+
<td><%=h account.name %></td>
|
16
|
+
<td><%=h balance.round(2) %></td>
|
17
|
+
<% running_total += balance %>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
<tr class="<%= cycle("even", "odd") -%>">
|
21
|
+
<strong>
|
22
|
+
<td>Total <%= name %></td>
|
23
|
+
<td><%= running_total.round(2) %></td>
|
24
|
+
</strong>
|
25
|
+
</tr>
|
26
|
+
</tbody>
|
27
|
+
<% end %>
|
28
|
+
</table>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<center>
|
3
|
+
<h1>Balance Sheet</h1>
|
4
|
+
|
5
|
+
<%= form_tag({:action => 'balance_sheet'}, {:method => :get, :class => 'form-inline'}) do%>
|
6
|
+
<div class="form-group">
|
7
|
+
<%= label_tag :date, nil, class: 'sr-only'%>
|
8
|
+
<%= text_field_tag :date, @to_date, :class => 'datepicker form-control' %>
|
9
|
+
</div>
|
10
|
+
<button type="submit" class="btn btn-default">Get Report</button>
|
11
|
+
<% end %>
|
12
|
+
</center>
|
13
|
+
|
14
|
+
<br>
|
15
|
+
|
16
|
+
<%= render 'account', :name => "Assets", :accounts => @assets %>
|
17
|
+
<%= render 'account', :name => "Liabilities", :accounts => @liabilities %>
|
18
|
+
<%= render 'account', :name => "Equity", :accounts => @equity %>
|
19
|
+
|
20
|
+
|
21
|
+
</div>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<center>
|
3
|
+
<h1>Income Statement</h1>
|
4
|
+
|
5
|
+
<%= form_tag({:action => 'income_statement'}, {:method => :get, :class => 'form-inline'}) do%>
|
6
|
+
<div class="form-group">
|
7
|
+
<%= label_tag :from_date, nil, class: 'sr-only'%>
|
8
|
+
<%= text_field_tag :from_date, @from_date, :class => 'datepicker form-control', :placeholder => "Date" %>
|
9
|
+
</div>
|
10
|
+
<div class="form-group">
|
11
|
+
<%= label_tag :to_date, nil, class: 'sr-only'%>
|
12
|
+
<%= text_field_tag :to_date, @to_date, :class => 'datepicker form-control', :placeholder => "Date" %>
|
13
|
+
</div>
|
14
|
+
<button type="submit" class="btn btn-default">Get Report</button>
|
15
|
+
<% end %>
|
16
|
+
</center>
|
17
|
+
|
18
|
+
<br>
|
19
|
+
|
20
|
+
<%= render 'account', :name => "Revenues", :accounts => @revenues %>
|
21
|
+
<%= render 'account', :name => "Expenses", :accounts => @expenses %>
|
22
|
+
|
23
|
+
|
24
|
+
</div>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
4
|
+
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
5
|
+
|
6
|
+
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
7
|
+
# Rails.backtrace_cleaner.remove_silencers!
|
data/config/database.yml
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Add new inflection rules using the following format
|
4
|
+
# (all these examples are active by default):
|
5
|
+
# ActiveSupport::Inflector.inflections do |inflect|
|
6
|
+
# inflect.plural /^(ox)$/i, '\1en'
|
7
|
+
# inflect.singular /^(ox)en/i, '\1'
|
8
|
+
# inflect.irregular 'person', 'people'
|
9
|
+
# inflect.uncountable %w( fish sheep )
|
10
|
+
# end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
Plutus::Engine.routes.draw do
|
2
|
+
root :to => 'reports#balance_sheet'
|
3
|
+
|
4
|
+
get 'reports/balance_sheet' => 'reports#balance_sheet'
|
5
|
+
get 'reports/income_statement' => 'reports#income_statement'
|
6
|
+
|
7
|
+
resources :accounts, only: [:index]
|
8
|
+
resources :entries, only: [:index]
|
9
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
# Make sure the secret is at least 30 characters and all random,
|
6
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
7
|
+
Plutus::Application.config.secret_token = 'f6b9c48aaf200fda4bbcf1642319084d5e5cda2bd95ac0a43220aab19f4ee240f9cdab08b77c3284b3a6396b13b1fe8be12a227af04fc5f5a8b7a52b626c4fdd'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
Plutus::Application.config.session_store :cookie_store, :key => '_plutus_session'
|
4
|
+
|
5
|
+
# Use the database for sessions instead of the cookie-based default,
|
6
|
+
# which shouldn't be used to store highly confidential information
|
7
|
+
# (create the session table with "rails generate session_migration")
|
8
|
+
# Testtest::Application.config.session_store :active_record_store
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class CreatePlutusTables < ActiveRecord::Migration[4.2]
|
2
|
+
def change
|
3
|
+
create_table :plutus_accounts do |t|
|
4
|
+
t.string :name
|
5
|
+
t.string :type
|
6
|
+
t.boolean :contra, default: false
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :plutus_accounts, [:name, :type]
|
11
|
+
|
12
|
+
create_table :plutus_entries do |t|
|
13
|
+
t.string :description
|
14
|
+
t.date :date
|
15
|
+
t.integer :commercial_document_id
|
16
|
+
t.string :commercial_document_type
|
17
|
+
|
18
|
+
t.timestamps
|
19
|
+
end
|
20
|
+
add_index :plutus_entries, :date
|
21
|
+
add_index :plutus_entries, [:commercial_document_id, :commercial_document_type], :name => "index_entries_on_commercial_doc"
|
22
|
+
|
23
|
+
create_table :plutus_amounts do |t|
|
24
|
+
t.string :type
|
25
|
+
t.references :account
|
26
|
+
t.references :entry
|
27
|
+
t.decimal :amount, :precision => 20, :scale => 10
|
28
|
+
|
29
|
+
t.timestamps
|
30
|
+
end
|
31
|
+
add_index :plutus_amounts, :type
|
32
|
+
add_index :plutus_amounts, [:account_id, :entry_id]
|
33
|
+
add_index :plutus_amounts, [:entry_id, :account_id]
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Description:
|
2
|
+
Generator for Plutus Plugin
|
3
|
+
|
4
|
+
Installation:
|
5
|
+
rails g plutus
|
6
|
+
|
7
|
+
This will:
|
8
|
+
Create a migration in the application for the "Account",
|
9
|
+
"Entry" and "Amount" tables.
|
10
|
+
|
11
|
+
Once generated, simply run:
|
12
|
+
rake db:migrate
|
13
|
+
|
14
|
+
Upgrade < 0.8 -> 0.9+:
|
15
|
+
rails g plutus:upgrade_plutus
|
16
|
+
|
17
|
+
This will:
|
18
|
+
Create a migration in the application for renaming the
|
19
|
+
"Transaction" table, columns and indexes to "Entry" tables.
|
20
|
+
|
21
|
+
Once generated, simply run:
|
22
|
+
rake db:migrate
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
require_relative 'base_generator'
|
4
|
+
|
5
|
+
module Plutus
|
6
|
+
class AddDateUpgradeGenerator < BaseGenerator
|
7
|
+
def create_migration_file
|
8
|
+
migration_template 'add_date_migration.rb', 'db/migrate/add_date_to_plutus_entries.rb'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Plutus
|
2
|
+
class BaseGenerator < Rails::Generators::Base
|
3
|
+
include Rails::Generators::Migration
|
4
|
+
|
5
|
+
def self.source_root
|
6
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
7
|
+
end
|
8
|
+
|
9
|
+
# Implement the required interface for Rails::Generators::Migration.
|
10
|
+
# See http://apidock.com/rails/ActiveRecord/Generators/Base/next_migration_number/class
|
11
|
+
def self.next_migration_number(dirname)
|
12
|
+
if ActiveRecord::Base.timestamped_migrations
|
13
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
14
|
+
else
|
15
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# lib/generators/plutus/plutus_generator.rb
|
2
|
+
require 'rails/generators'
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
require_relative 'base_generator'
|
5
|
+
|
6
|
+
module Plutus
|
7
|
+
class PlutusGenerator < BaseGenerator
|
8
|
+
def create_migration_file
|
9
|
+
migration_template 'migration.rb', 'db/migrate/create_plutus_tables.rb'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# lib/generators/plutus/plutus_generator.rb
|
2
|
+
require 'rails/generators'
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
require_relative 'base_generator'
|
5
|
+
|
6
|
+
module Plutus
|
7
|
+
class TenancyGenerator < BaseGenerator
|
8
|
+
def create_migration_file
|
9
|
+
migration_template 'tenant_migration.rb', 'db/migrate/tenant_plutus_tables.rb'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# lib/generators/plutus/plutus_generator.rb
|
2
|
+
require 'rails/generators'
|
3
|
+
require 'rails/generators/migration'
|
4
|
+
require_relative 'base_generator'
|
5
|
+
|
6
|
+
module Plutus
|
7
|
+
class UpgradePlutusGenerator < BaseGenerator
|
8
|
+
def create_migration_file
|
9
|
+
migration_template 'update_migration.rb', 'db/migrate/update_plutus_tables.rb'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/plutus.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Plutus
|
2
|
+
require "rails"
|
3
|
+
|
4
|
+
module Plutus
|
5
|
+
# ------------------------------ tenancy ------------------------------
|
6
|
+
# configuration to enable or disable tenancy
|
7
|
+
mattr_accessor :enable_tenancy
|
8
|
+
enable_tenancy = false
|
9
|
+
|
10
|
+
mattr_accessor :tenant_class
|
11
|
+
tenant_class = nil
|
12
|
+
|
13
|
+
|
14
|
+
# provide hook to configure attributes
|
15
|
+
def self.config
|
16
|
+
yield(self)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
require "plutus/engine"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Plutus
|
4
|
+
describe AccountsController do
|
5
|
+
routes { Plutus::Engine.routes }
|
6
|
+
|
7
|
+
def mock_account(stubs={})
|
8
|
+
@mock_account ||= FactoryBot.create(:asset)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "GET index" do
|
12
|
+
it "assigns all accounts as @accounts" do
|
13
|
+
allow(Account).to receive(:all).and_return([mock_account])
|
14
|
+
get :index
|
15
|
+
expect(assigns[:accounts]).to eq([mock_account])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Plutus
|
4
|
+
describe EntriesController do
|
5
|
+
routes { Plutus::Engine.routes }
|
6
|
+
|
7
|
+
def mock_entry(stubs={})
|
8
|
+
@mock_entry ||= FactoryBot.create(:entry_with_credit_and_debit)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "GET index" do
|
12
|
+
it "assigns all entries as @entries" do
|
13
|
+
allow(Entry).to receive_message_chain(:per, :order).and_return([mock_entry])
|
14
|
+
get :index
|
15
|
+
expect(assigns[:entries]).to eq([mock_entry])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Plutus
|
4
|
+
describe ReportsController do
|
5
|
+
routes { Plutus::Engine.routes }
|
6
|
+
|
7
|
+
def mock_entry(stubs={})
|
8
|
+
@mock_entry ||= FactoryBot.create(:entry_with_credit_and_debit)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "GET balance_sheet" do
|
12
|
+
it "renders when one entry exists" do
|
13
|
+
allow(Entry).to receive_message_chain(:order).and_return([mock_entry])
|
14
|
+
get :balance_sheet
|
15
|
+
expect(response).to be_success
|
16
|
+
end
|
17
|
+
it "renders when no entries exist" do
|
18
|
+
allow(Entry).to receive_message_chain(:order).and_return([])
|
19
|
+
get :balance_sheet
|
20
|
+
expect(response).to be_success
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :account, :class => Plutus::Account do |account|
|
3
|
+
account.name
|
4
|
+
account.contra false
|
5
|
+
end
|
6
|
+
|
7
|
+
factory :asset, :class => Plutus::Asset do |account|
|
8
|
+
account.name
|
9
|
+
account.contra false
|
10
|
+
end
|
11
|
+
|
12
|
+
factory :equity, :class => Plutus::Equity do |account|
|
13
|
+
account.name
|
14
|
+
account.contra false
|
15
|
+
end
|
16
|
+
|
17
|
+
factory :expense, :class => Plutus::Expense do |account|
|
18
|
+
account.name
|
19
|
+
account.contra false
|
20
|
+
end
|
21
|
+
|
22
|
+
factory :liability, :class => Plutus::Liability do |account|
|
23
|
+
account.name
|
24
|
+
account.contra false
|
25
|
+
end
|
26
|
+
|
27
|
+
factory :revenue, :class => Plutus::Revenue do |account|
|
28
|
+
account.name
|
29
|
+
account.contra false
|
30
|
+
end
|
31
|
+
|
32
|
+
sequence :name do |n|
|
33
|
+
"Factory Name #{n}"
|
34
|
+
end
|
35
|
+
end
|