keepr 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 22676859e13394e7e8c59591b1419b2cd0cb18ed
4
- data.tar.gz: 305b1e01ebb0d82b85b05823c7f48313d276a535
3
+ metadata.gz: 41676e1855dcb2af4b7df3fad8ed257251832317
4
+ data.tar.gz: eb275e943f86edd5efa5cf2b92fe4627ef28d152
5
5
  SHA512:
6
- metadata.gz: f1bf2927bffefa894f91ef505973958195a922d3cb0486974986a65722e81ac6260cb237b18723fdec717517a6b9f987503a9f2ff93553e919e024addaaaa00d
7
- data.tar.gz: 642fc11d40a0ad3cf0a5e9336abaf1d719030851d2d54a10ab259ee15ba28a0cdea9d685441aa4b5657a6162ed41434a5abc838d4dc3a53e43602cf36765decd
6
+ metadata.gz: a491c1d52227749de2aca883072cb6f91ded6a09cc8f51dbee18353a22b3ec12c8150201b269e5f60f361d57b7786959e54afccba7eecf12fb73c5c962db37f9
7
+ data.tar.gz: c1e1703a56d273389ba00bd2dd4360941b933d72f4ddb3778f88d665175b940dfb5da38901996e4763ff82bdb690d27eef41648a0b0b6e6a596d5159494fb584
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
- - 2.1.5
5
- - 2.2.0
4
+ - 2.1.6
5
+ - 2.2.2
6
6
  gemfile:
7
7
  - ci/Gemfile-rails-4-1
8
8
  - ci/Gemfile-rails-4-2
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  This Ruby gem provides a double entry accounting system for use in any Rails application. It stores all the data via ActiveRecord in the SQL database.
4
4
 
5
5
  [![Build Status](https://travis-ci.org/ledermann/keepr.svg?branch=master)](https://travis-ci.org/ledermann/keepr)
6
-
6
+ [![Coverage Status](https://coveralls.io/repos/ledermann/keepr/badge.svg?branch=master)](https://coveralls.io/r/ledermann/keepr?branch=master)
7
7
 
8
8
  ## Features
9
9
 
data/ci/Gemfile-rails-4-1 CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'activerecord', '~> 4.1.0'
3
+ gem 'activerecord', '~> 4.1.10'
4
4
  gem 'ancestry'
5
5
  gem 'sqlite3'
6
6
  gem 'rake'
@@ -9,3 +9,4 @@ gem 'simplecov'
9
9
  gem 'coveralls'
10
10
  gem 'database_cleaner'
11
11
  gem 'factory_girl'
12
+ gem 'coveralls'
data/ci/Gemfile-rails-4-2 CHANGED
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'activerecord', '~> 4.2.0'
3
+ gem 'activerecord', '~> 4.2.1'
4
4
  gem 'ancestry'
5
5
  gem 'sqlite3'
6
6
  gem 'rake'
@@ -9,3 +9,4 @@ gem 'simplecov'
9
9
  gem 'coveralls'
10
10
  gem 'database_cleaner'
11
11
  gem 'factory_girl'
12
+ gem 'coveralls'
data/keepr.gemspec CHANGED
@@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'rspec'
29
29
  spec.add_development_dependency 'database_cleaner'
30
30
  spec.add_development_dependency 'factory_girl'
31
+ spec.add_development_dependency 'coveralls'
31
32
  end
@@ -46,6 +46,7 @@ class KeeprMigration < ActiveRecord::Migration
46
46
  t.string :subject
47
47
  t.references :accountable, :polymorphic => true
48
48
  t.text :note
49
+ t.boolean :permanent, :null => false, :default => false
49
50
  t.datetime :created_at
50
51
  t.datetime :updated_at
51
52
  end
data/lib/keepr/account.rb CHANGED
@@ -3,7 +3,7 @@ class Keepr::Account < ActiveRecord::Base
3
3
 
4
4
  has_ancestry :orphan_strategy => :restrict
5
5
 
6
- enum :kind => [ :asset, :liability, :revenue, :expense, :neutral ]
6
+ enum :kind => [ :asset, :liability, :revenue, :expense, :neutral, :debtor, :creditor ]
7
7
 
8
8
  validates_presence_of :number, :name
9
9
  validates_uniqueness_of :number
@@ -19,14 +19,21 @@ class Keepr::Account < ActiveRecord::Base
19
19
 
20
20
  default_scope { order(:number) }
21
21
 
22
- def self.with_sums(date=nil)
22
+ def self.with_sums(options={})
23
+ raise ArgumentError unless options.is_a?(Hash)
24
+
23
25
  scope = select('keepr_accounts.*, SUM(amount) AS sum_amount').
24
26
  group('keepr_accounts.id').
25
27
  joins('LEFT JOIN keepr_postings ON keepr_postings.keepr_account_id = keepr_accounts.id')
26
28
 
27
- if date
29
+ date = options[:date]
30
+ permanent_only = options[:permanent_only]
31
+
32
+ if date || permanent_only
28
33
  scope = scope.joins('LEFT JOIN keepr_journals ON keepr_journals.id = keepr_postings.keepr_journal_id')
34
+ end
29
35
 
36
+ if date
30
37
  if date.is_a?(Date)
31
38
  scope = scope.where("keepr_journals.id IS NULL OR keepr_journals.date <= '#{date.to_s(:db)}'")
32
39
  elsif date.is_a?(Range)
@@ -36,22 +43,24 @@ class Keepr::Account < ActiveRecord::Base
36
43
  end
37
44
  end
38
45
 
46
+ if permanent_only
47
+ scope = scope.where("keepr_journals.id IS NULL OR keepr_journals.permanent = #{connection.quoted_true}")
48
+ end
49
+
39
50
  scope
40
51
  end
41
52
 
42
- def self.merged_with_sums(date=nil)
43
- accounts = with_sums(date).to_a
53
+ def self.merged_with_sums(options={})
54
+ accounts = with_sums(options).to_a
44
55
 
45
56
  # Sum up child accounts to parent
46
57
  position = 0
47
58
  while account = accounts[position] do
48
- if account.parent_id
59
+ if account.parent_id && account.sum_amount
49
60
  if parent_account = accounts.find { |a| a.id == account.parent_id }
50
61
  parent_account.sum_amount ||= 0
51
62
  parent_account.sum_amount += account.sum_amount
52
63
  accounts.delete_at(position)
53
- else
54
- raise
55
64
  end
56
65
  else
57
66
  position += 1
@@ -101,11 +110,11 @@ private
101
110
  def group_validation
102
111
  if keepr_group.present?
103
112
  if asset?
104
- errors.add(:kind, 'does match group') unless keepr_group.asset?
113
+ errors.add(:kind, 'does not match group') unless keepr_group.asset?
105
114
  elsif liability?
106
- errors.add(:kind, 'does match group') unless keepr_group.liability?
115
+ errors.add(:kind, 'does not match group') unless keepr_group.liability?
107
116
  elsif profit_and_loss?
108
- errors.add(:kind, 'does match group') unless keepr_group.profit_and_loss?
117
+ errors.add(:kind, 'does not match group') unless keepr_group.profit_and_loss?
109
118
  else
110
119
  errors.add(:kind, 'conflicts with group')
111
120
  end
@@ -4,8 +4,14 @@ module Keepr::ActiveRecordExtension
4
4
  end
5
5
 
6
6
  module ClassMethods
7
- def has_keepr_account
7
+ def has_one_keepr_account
8
8
  has_one :keepr_account, :class_name => 'Keepr::Account', :as => :accountable
9
+ has_many :keepr_postings, :class_name => 'Keepr::Posting', :through => :keepr_account
10
+ end
11
+
12
+ def has_many_keepr_accounts
13
+ has_many :keepr_accounts, :class_name => 'Keepr::Account', :as => :accountable
14
+ has_many :keepr_postings, :class_name => 'Keepr::Posting', :through => :keepr_accounts
9
15
  end
10
16
 
11
17
  def is_keepr_accountable
data/lib/keepr/group.rb CHANGED
@@ -11,6 +11,8 @@ class Keepr::Group < ActiveRecord::Base
11
11
 
12
12
  before_validation :get_from_parent
13
13
 
14
+ validate :check_result_and_target
15
+
14
16
  def self.result
15
17
  where(:is_result => true).first
16
18
  end
@@ -30,4 +32,10 @@ private
30
32
  self.target = self.parent.target
31
33
  end
32
34
  end
35
+
36
+ def check_result_and_target
37
+ if is_result
38
+ errors.add(:base, 'is_result allowed for liability target only') unless liability?
39
+ end
40
+ end
33
41
  end
@@ -1,6 +1,8 @@
1
1
  # encoding: utf-8
2
2
  class Keepr::GroupsCreator
3
3
  def initialize(target)
4
+ raise ArgumentError unless [ :balance, :profit_and_loss ].include?(target)
5
+
4
6
  @target = target
5
7
  end
6
8
 
@@ -11,8 +13,6 @@ class Keepr::GroupsCreator
11
13
  load 'liability.txt', :target => :liability
12
14
  when :profit_and_loss
13
15
  load 'profit_and_loss.txt', :target => :profit_and_loss
14
- else
15
- raise ArgumentError
16
16
  end
17
17
  end
18
18
 
data/lib/keepr/journal.rb CHANGED
@@ -28,6 +28,8 @@ class Keepr::Journal < ActiveRecord::Base
28
28
  end
29
29
 
30
30
  after_initialize :set_defaults
31
+ before_update :check_permanent
32
+ before_destroy :check_permanent
31
33
 
32
34
  private
33
35
  def existing_postings
@@ -45,4 +47,11 @@ private
45
47
  errors.add(:base, 'Debit does not match credit!')
46
48
  end
47
49
  end
50
+
51
+ def check_permanent
52
+ if self.permanent_was
53
+ errors.add(:base, 'Is permanent and cannot be changed!')
54
+ false
55
+ end
56
+ end
48
57
  end
data/lib/keepr/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Keepr
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
data/spec/account_spec.rb CHANGED
@@ -28,6 +28,7 @@ describe Keepr::Account do
28
28
 
29
29
  before :each do
30
30
  Keepr::Journal.create! :date => Date.yesterday,
31
+ :permanent => true,
31
32
  :keepr_postings_attributes => [
32
33
  { :keepr_account => account_1000, :amount => 20, :side => 'debit' },
33
34
  { :keepr_account => account_1200, :amount => 20, :side => 'credit' }
@@ -52,20 +53,38 @@ describe Keepr::Account do
52
53
  ]
53
54
  end
54
55
 
55
- describe "with group" do
56
- let!(:result_group) { FactoryGirl.create(:group, :is_result => true) }
57
- let!(:normal_group) { FactoryGirl.create(:group, :is_result => false) }
56
+ describe 'validations' do
57
+ let!(:result_group) { FactoryGirl.create(:group, :target => :liability, :is_result => true) }
58
+ let!(:liability_group) { FactoryGirl.create(:group, :target => :liability) }
59
+ let!(:asset_group) { FactoryGirl.create(:group, :target => :asset) }
58
60
 
59
- it "should not be assigned to result group" do
60
- account = FactoryGirl.build(:account, :number => 123, :keepr_group => result_group)
61
+ it "should not allow assigning to result group" do
62
+ account = FactoryGirl.build(:account, :keepr_group => result_group)
61
63
  expect(account).to_not be_valid
62
- expect(account.errors[:keepr_group_id]).to be_present
64
+ expect(account.errors[:keepr_group_id]).to include('is a result group')
63
65
  end
64
66
 
65
- it "should be assigned to normal group" do
66
- account = FactoryGirl.build(:account, :number => 123, :keepr_group => normal_group)
67
+ it "should not allow assigning asset account to liability group" do
68
+ account = FactoryGirl.build(:account, :kind => :asset, :keepr_group => liability_group)
69
+ expect(account).to_not be_valid
70
+ expect(account.errors[:kind]).to include('does not match group')
71
+ end
72
+
73
+ it "should not allow assigning liability account to asset group" do
74
+ account = FactoryGirl.build(:account, :kind => :liability, :keepr_group => asset_group)
75
+ expect(account).to_not be_valid
76
+ expect(account.errors[:kind]).to include('does not match group')
77
+ end
78
+
79
+ it "should not allow assigning neutral account to asset group" do
80
+ account = FactoryGirl.build(:account, :kind => :neutral, :keepr_group => asset_group)
81
+ expect(account).to_not be_valid
82
+ expect(account.errors[:kind]).to include('conflicts with group')
83
+ end
84
+
85
+ it "should allow target match" do
86
+ account = FactoryGirl.build(:account, :kind => :asset, :keepr_group => asset_group)
67
87
  expect(account).to be_valid
68
- expect(account.errors[:keepr_group_id]).to be_blank
69
88
  end
70
89
  end
71
90
 
@@ -99,37 +118,58 @@ describe Keepr::Account do
99
118
  end
100
119
 
101
120
  describe :with_sums do
102
- it 'should work without param' do
103
- account1, account2 = Keepr::Account.with_sums.having('sum_amount <> 0')
121
+ context 'without param' do
122
+ it 'should work' do
123
+ account1, account2 = Keepr::Account.with_sums
104
124
 
105
- expect(account1.number).to eq(1000)
106
- expect(account1.balance).to eq(110)
107
- expect(account2.number).to eq(1200)
108
- expect(account2.balance).to eq(-110)
125
+ expect(account1.number).to eq(1000)
126
+ expect(account1.balance).to eq(110)
127
+ expect(account2.number).to eq(1200)
128
+ expect(account2.balance).to eq(-110)
129
+ end
109
130
  end
110
131
 
111
- it 'should work with Date' do
112
- account1, account2 = Keepr::Account.with_sums(Date.yesterday).having('sum_amount <> 0')
132
+ context 'with date option' do
133
+ it 'should work with Date' do
134
+ account1, account2 = Keepr::Account.with_sums(:date => Date.yesterday)
135
+
136
+ expect(account1.number).to eq(1000)
137
+ expect(account1.sum_amount).to eq(10)
138
+ expect(account2.number).to eq(1200)
139
+ expect(account2.sum_amount).to eq(-10)
140
+ end
141
+
142
+ it 'should work with Range' do
143
+ account1, account2 = Keepr::Account.with_sums(:date => Date.today..Date.tomorrow)
144
+
145
+ expect(account1.number).to eq(1000)
146
+ expect(account1.sum_amount).to eq(100)
147
+ expect(account2.number).to eq(1200)
148
+ expect(account2.sum_amount).to eq(-100)
149
+ end
113
150
 
114
- expect(account1.number).to eq(1000)
115
- expect(account1.sum_amount).to eq(10)
116
- expect(account2.number).to eq(1200)
117
- expect(account2.sum_amount).to eq(-10)
151
+ it 'should raise for other class' do
152
+ expect { Keepr::Account.with_sums(:date => Time.current) }.to raise_error(ArgumentError)
153
+ expect { Keepr::Account.with_sums(:date => :foo) }.to raise_error(ArgumentError)
154
+ end
118
155
  end
119
156
 
120
- it 'should work with Range' do
121
- account1, account2 = Keepr::Account.with_sums(Date.today..Date.tomorrow).having('sum_amount <> 0')
157
+ context 'with permanent_only option' do
158
+ it 'should filter the permanent journals' do
159
+ account1, account2 = Keepr::Account.with_sums(:permanent_only => true)
122
160
 
123
- expect(account1.number).to eq(1000)
124
- expect(account1.sum_amount).to eq(100)
125
- expect(account2.number).to eq(1200)
126
- expect(account2.sum_amount).to eq(-100)
161
+ expect(account1.number).to eq(1000)
162
+ expect(account1.sum_amount).to eq(20)
163
+ expect(account2.number).to eq(1200)
164
+ expect(account2.sum_amount).to eq(-20)
165
+ end
127
166
  end
128
167
 
129
- it 'should raise for other param' do
130
- expect { Keepr::Account.with_sums(Time.current) }.to raise_error(ArgumentError)
131
- expect { Keepr::Account.with_sums(0) }.to raise_error(ArgumentError)
132
- expect { Keepr::Account.with_sums(:foo) }.to raise_error(ArgumentError)
168
+ context 'with non-hash param' do
169
+ it 'should raise' do
170
+ expect { Keepr::Account.with_sums(0) }.to raise_error(ArgumentError)
171
+ expect { Keepr::Account.with_sums(:foo) }.to raise_error(ArgumentError)
172
+ end
133
173
  end
134
174
  end
135
175
  end
@@ -137,6 +177,7 @@ end
137
177
  describe Keepr::Account, 'with subaccounts' do
138
178
  let!(:account_1400) { FactoryGirl.create(:account, :number => 1400) }
139
179
  let!(:account_10000) { FactoryGirl.create(:account, :number => 10000, :parent => account_1400) }
180
+ let!(:account_10001) { FactoryGirl.create(:account, :number => 10001, :parent => account_1400) }
140
181
  let!(:account_8400) { FactoryGirl.create(:account, :number => 8400) }
141
182
 
142
183
  before :each do
@@ -200,7 +241,7 @@ describe Keepr::Account, 'with tax' do
200
241
  :name => 'Erlöse 19% USt',
201
242
  :kind => :revenue,
202
243
  :keepr_tax => tax
203
- expect(tax_account).to be_valid
244
+ expect(account).to be_valid
204
245
  end
205
246
 
206
247
  it "should avoid circular reference" do
@@ -1,17 +1,54 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Keepr::ActiveRecordExtension do
4
- let!(:account_1000) { FactoryGirl.create(:account, :number => 1000, :kind => :asset) }
5
- let!(:account_1200) { FactoryGirl.create(:account, :number => 1200, :kind => :asset) }
4
+ let(:account_1000) { FactoryGirl.create(:account, :number => 1000, :kind => :asset) }
5
+ let(:account_1200) { FactoryGirl.create(:account, :number => 1200, :kind => :asset) }
6
6
 
7
7
  describe 'ledger with associated account' do
8
- subject do
9
- ledger = Ledger.create! :bank_name => 'Sparkasse'
10
- account_1200.update_attributes! :accountable => ledger
11
- ledger
8
+ let(:ledger) { Ledger.create! :bank_name => 'Sparkasse' }
9
+ let!(:account) { ledger.create_keepr_account! :number => '1250', :kind => :asset, :name => 'Girokonto' }
10
+
11
+ it 'has keepr_account' do
12
+ expect(ledger.keepr_account).to eq(account)
13
+ end
14
+
15
+ it 'has keepr_postings' do
16
+ journal = Keepr::Journal.create! :keepr_postings_attributes => [
17
+ { :keepr_account => account, :amount => 30, :side => 'debit' },
18
+ { :keepr_account => account_1200, :amount => 30, :side => 'credit' }
19
+ ]
20
+ other_journal = Keepr::Journal.create! :keepr_postings_attributes => [
21
+ { :keepr_account => account_1000, :amount => 20, :side => 'debit' },
22
+ { :keepr_account => account_1200, :amount => 20, :side => 'credit' }
23
+ ]
24
+
25
+ expect(ledger.keepr_postings.count).to eq(1)
26
+ expect(ledger.keepr_postings.first.amount).to eq(30)
12
27
  end
28
+ end
13
29
 
14
- it { expect(subject.keepr_account).to be_present }
30
+ describe 'contact with multiple associated accounts' do
31
+ let(:contact) { Contact.create! :name => 'John Doe' }
32
+ let(:account1) { contact.keepr_accounts.create! :number => '70001', :kind => :debtor, :name => "Doe's main account" }
33
+ let(:account2) { contact.keepr_accounts.create! :number => '70002', :kind => :debtor, :name => "Doe's second account" }
34
+
35
+ it 'has multiple keepr_accounts' do
36
+ expect(contact.keepr_accounts).to eq([account1, account2])
37
+ end
38
+
39
+ it 'has keepr_postings' do
40
+ journal = Keepr::Journal.create! :keepr_postings_attributes => [
41
+ { :keepr_account => account1, :amount => 30, :side => 'debit' },
42
+ { :keepr_account => account_1200, :amount => 30, :side => 'credit' }
43
+ ]
44
+ other_journal = Keepr::Journal.create! :keepr_postings_attributes => [
45
+ { :keepr_account => account_1000, :amount => 20, :side => 'debit' },
46
+ { :keepr_account => account_1200, :amount => 20, :side => 'credit' }
47
+ ]
48
+
49
+ expect(contact.keepr_postings.count).to eq(1)
50
+ expect(contact.keepr_postings.first.amount).to eq(30)
51
+ end
15
52
  end
16
53
 
17
54
  describe 'Document with associated journal' do
@@ -1,6 +1,6 @@
1
1
  FactoryGirl.define do
2
2
  factory :account, class: Keepr::Account do
3
- number 1000
3
+ number 12345
4
4
  kind :asset
5
5
  name 'Foo'
6
6
  end
data/spec/group_spec.rb CHANGED
@@ -1,6 +1,21 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Keepr::Group do
4
+ describe 'validations' do
5
+ it "should allow is_result for liability" do
6
+ group = Keepr::Group.new(:is_result => true, :target => :liability, :name => 'foo')
7
+ expect(group.valid?).to eq(true)
8
+ end
9
+
10
+ [ :asset, :profit_and_loss ].each do |target|
11
+ it "should not allow is_result for #{target}" do
12
+ group = Keepr::Group.new(:is_result => true, :target => target, :name => 'foo')
13
+ expect(group.valid?).to eq(false)
14
+ expect(group.errors[:base]).to include('is_result allowed for liability target only')
15
+ end
16
+ end
17
+ end
18
+
4
19
  describe :get_from_parent do
5
20
  it 'should preset parent' do
6
21
  root = FactoryGirl.create :group, :target => :asset
data/spec/journal_spec.rb CHANGED
@@ -76,6 +76,22 @@ describe Keepr::Journal do
76
76
  end
77
77
  end
78
78
 
79
+ describe :permanent do
80
+ before :each do
81
+ simple_journal.update_attributes! :permanent => true
82
+ end
83
+
84
+ it "should not allow update" do
85
+ expect(simple_journal.update_attributes :subject => 'foo').to eq(false)
86
+ expect(simple_journal.errors[:base]).to include('Is permanent and cannot be changed!')
87
+ end
88
+
89
+ it "should not allow destroy" do
90
+ expect(simple_journal.destroy).to eq(false)
91
+ expect(simple_journal.errors[:base]).to include('Is permanent and cannot be changed!')
92
+ end
93
+ end
94
+
79
95
  describe :postings do
80
96
  it 'should return postings' do
81
97
  expect(simple_journal.keepr_postings.size).to eq(2)
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,14 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start do
9
+ add_filter '/spec/'
10
+ end
11
+
1
12
  require 'active_record'
2
13
  require 'database_cleaner'
3
14
  require 'keepr'
@@ -31,6 +42,11 @@ RSpec.configure do |config|
31
42
  DatabaseCleaner.clean_with(:truncation)
32
43
  end
33
44
 
45
+ config.after(:suite) do
46
+ KeeprMigration.down
47
+ SpecMigration.down
48
+ end
49
+
34
50
  config.before(:each) do
35
51
  DatabaseCleaner.start
36
52
  end
@@ -0,0 +1,3 @@
1
+ class Contact < ActiveRecord::Base
2
+ has_many_keepr_accounts
3
+ end
@@ -1,3 +1,3 @@
1
1
  class Ledger < ActiveRecord::Base
2
- has_keepr_account
2
+ has_one_keepr_account
3
3
  end
@@ -1,5 +1,9 @@
1
1
  class SpecMigration < ActiveRecord::Migration
2
2
  def self.up
3
+ create_table :contacts, force: true do |t|
4
+ t.string :name
5
+ end
6
+
3
7
  create_table :ledgers, force: true do |t|
4
8
  t.string :bank_name
5
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keepr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Ledermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-20 00:00:00.000000000 Z
11
+ date: 2015-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: coveralls
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  description: Double entry bookkeeping with Rails
126
140
  email: mail@georg-ledermann.de
127
141
  executables: []
@@ -165,6 +179,7 @@ files:
165
179
  - spec/journal_spec.rb
166
180
  - spec/posting_spec.rb
167
181
  - spec/spec_helper.rb
182
+ - spec/support/contact.rb
168
183
  - spec/support/document.rb
169
184
  - spec/support/ledger.rb
170
185
  - spec/support/spec_migration.rb
@@ -189,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
189
204
  version: '0'
190
205
  requirements: []
191
206
  rubyforge_project:
192
- rubygems_version: 2.4.5
207
+ rubygems_version: 2.4.6
193
208
  signing_key:
194
209
  specification_version: 4
195
210
  summary: Some basic ActiveRecord models to build a double entry bookkeeping application
@@ -207,6 +222,7 @@ test_files:
207
222
  - spec/journal_spec.rb
208
223
  - spec/posting_spec.rb
209
224
  - spec/spec_helper.rb
225
+ - spec/support/contact.rb
210
226
  - spec/support/document.rb
211
227
  - spec/support/ledger.rb
212
228
  - spec/support/spec_migration.rb