keepr 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +38 -0
- data/LICENSE.txt +1 -1
- data/README.md +94 -11
- data/ci/{Gemfile-rails-6-0 → Gemfile-rails-6.1} +2 -2
- data/ci/{Gemfile-rails-5-0 → Gemfile-rails-7.0} +3 -3
- data/ci/{Gemfile-rails-4-2 → Gemfile-rails-7.1} +3 -3
- data/keepr.gemspec +3 -3
- data/lib/generators/keepr/migration/migration_generator.rb +12 -1
- data/lib/keepr/version.rb +1 -1
- metadata +15 -17
- data/.travis.yml +0 -21
- data/ci/Gemfile-rails-5-1 +0 -12
- data/ci/Gemfile-rails-5-2 +0 -12
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 52559eefe26a6b165210c72a477351e559f0b936bd098880f134991a981490ce
|
|
4
|
+
data.tar.gz: 448a874a9a03197c51e9df977c523539eb552881cf83a7ff3ddfd37be887d41a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 621ee808cd1ff8e361e7d00e3a67690a24befdbe40b6e35757aee1b260eb9141e155e99f2a4707614b612e5a19c32c2a0d29e8ae042546f49cf7f81525a874c5
|
|
7
|
+
data.tar.gz: 86c1dc8d10841836a66db76393d379b2b57c9d623effcf32e63ba18ee481199ce7b97a2a0736b90100f3c7d0e3d64b7e1a2ddbdd61cd909f53810fba77f04ec8
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on: [ push, pull_request ]
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
build:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
|
|
9
|
+
strategy:
|
|
10
|
+
fail-fast: false
|
|
11
|
+
matrix:
|
|
12
|
+
ruby: ['3.0', '3.1', '3.2']
|
|
13
|
+
rails: ['6.1', '7.0', '7.1']
|
|
14
|
+
|
|
15
|
+
name: Test against Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }}
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- name: Setup System
|
|
21
|
+
run: sudo apt-get install libsqlite3-dev
|
|
22
|
+
|
|
23
|
+
- name: Setup Ruby
|
|
24
|
+
uses: ruby/setup-ruby@v1
|
|
25
|
+
with:
|
|
26
|
+
ruby-version: ${{ matrix.ruby }}
|
|
27
|
+
|
|
28
|
+
- name: Install gems
|
|
29
|
+
env:
|
|
30
|
+
MATRIX_RAILS_VERSION: ${{ matrix.rails }}
|
|
31
|
+
run: |
|
|
32
|
+
export BUNDLE_GEMFILE="${GITHUB_WORKSPACE}/ci/Gemfile-rails-${MATRIX_RAILS_VERSION}"
|
|
33
|
+
bundle install --jobs 4 --retry 3
|
|
34
|
+
|
|
35
|
+
- name: RSpec
|
|
36
|
+
env:
|
|
37
|
+
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
|
38
|
+
run: bundle exec rake
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
|
@@ -2,25 +2,25 @@
|
|
|
2
2
|
|
|
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
|
-
[](https://github.com/ledermann/keepr/actions)
|
|
6
6
|
[](https://codeclimate.com/github/ledermann/keepr)
|
|
7
7
|
[](https://coveralls.io/github/ledermann/keepr?branch=master)
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
|
-
* Journal entries with two or more postings
|
|
11
|
+
* Journal entries with two or more postings follow the [Double Entry](https://www.accountingcoach.com/blog/what-is-the-double-entry-system) principle
|
|
12
12
|
* Accounts (including subaccounts and groups)
|
|
13
|
-
*
|
|
14
|
-
* Cost
|
|
15
|
-
* Balance
|
|
16
|
-
* Profit and loss
|
|
17
|
-
* DATEV
|
|
13
|
+
* Taxes
|
|
14
|
+
* Cost centers
|
|
15
|
+
* Balance sheets
|
|
16
|
+
* Profit and loss statements
|
|
17
|
+
* DATEV exports
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
## Dependencies
|
|
21
21
|
|
|
22
|
-
* Ruby
|
|
23
|
-
* Rails
|
|
22
|
+
* Ruby 3.0+
|
|
23
|
+
* Rails 6.1+ (including Rails 7.1)
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
## Installation
|
|
@@ -38,9 +38,92 @@ Or install it yourself as:
|
|
|
38
38
|
$ gem install keepr
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
## Getting started
|
|
42
|
+
|
|
43
|
+
After installation run the following:
|
|
44
|
+
|
|
45
|
+
rails g keepr:migration
|
|
46
|
+
rails db:migrate
|
|
47
|
+
|
|
48
|
+
This will create the database migration files and add new models.
|
|
49
|
+
|
|
41
50
|
## Usage
|
|
51
|
+
### Account
|
|
52
|
+
All accounting entries are stored inside "accounts", per standard accounting
|
|
53
|
+
principles. To create an account, use the following format:
|
|
54
|
+
|
|
55
|
+
Keepr::Account.create!(number: 27, name: 'Software', kind: :asset)
|
|
56
|
+
|
|
57
|
+
"kind" is one of following values:
|
|
58
|
+
|
|
59
|
+
[asset liability revenue expense forward debtor creditor]
|
|
60
|
+
|
|
61
|
+
Accounts can have "child" accounts. All entries posted in a child account will
|
|
62
|
+
be shown in the "parent" account as well. To create a child account:
|
|
63
|
+
|
|
64
|
+
account_1400 = Keepr::Account.create!(number: 1400, name: 'Software', kind: :expense)
|
|
65
|
+
account_14001 = Keepr::Account.create!(number: 14001, name: 'Rails', parent: account_1400 , kind: :expense)
|
|
66
|
+
|
|
67
|
+
Accounts can be organised inside of groups:
|
|
68
|
+
|
|
69
|
+
group = Keepr::Group.create!(is_result: true, target: :liability, name: 'foo')
|
|
70
|
+
Keepr::Account.create!(number: 100, name: 'Trade payable', kind: :liability, keepr_group: group)
|
|
71
|
+
|
|
72
|
+
Groups also allow a parent/child hierarchy:
|
|
73
|
+
|
|
74
|
+
parent_group = Keepr::Group.create!(is_result: true, target: :liability, name: 'foo')
|
|
75
|
+
child_group = parent_group.children.create! name: 'Bar'
|
|
76
|
+
|
|
77
|
+
### Journal
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
Simple journal:
|
|
81
|
+
|
|
82
|
+
simple_journal = Keepr::Journal.create keepr_postings_attributes: [
|
|
83
|
+
{ keepr_account: account_1000, amount: 100.99, side: 'debit' },
|
|
84
|
+
{ keepr_account: account_1200, amount: 100.99, side: 'credit' }
|
|
85
|
+
]
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
Complex journal:
|
|
89
|
+
|
|
90
|
+
complex_journal = Keepr::Journal.create keepr_postings_attributes: [
|
|
91
|
+
{ keepr_account: account_4920, amount: 8.40, side: 'debit' },
|
|
92
|
+
{ keepr_account: account_1576, amount: 1.60, side: 'debit' },
|
|
93
|
+
{ keepr_account: account_1600, amount: 10.00, side: 'credit' }
|
|
94
|
+
]
|
|
95
|
+
|
|
96
|
+
Entries can be locked for changing data:
|
|
97
|
+
|
|
98
|
+
simple_journal.update! permanent: true
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
### Account balance
|
|
102
|
+
We can get an account balance as follows:
|
|
103
|
+
|
|
104
|
+
account_1000.balance
|
|
105
|
+
|
|
106
|
+
account_1000.balance(Date.today)
|
|
107
|
+
|
|
108
|
+
account_1000.balance(Date.yesterday...Date.today)
|
|
109
|
+
|
|
110
|
+
### Tax account
|
|
111
|
+
|
|
112
|
+
// Create Tax account
|
|
113
|
+
Keepr::Account.create! number: 1776, name: 'Umsatzsteuer 19%', kind: :asset
|
|
114
|
+
|
|
115
|
+
tax = Keepr::Tax.create! name: 'USt19',
|
|
116
|
+
description: 'Umsatzsteuer 19%',
|
|
117
|
+
value: 19.0,
|
|
118
|
+
keepr_account: tax_account
|
|
119
|
+
|
|
120
|
+
// Create a sale account that links to the tax account
|
|
121
|
+
account = Keepr::Account.new number: 8400,
|
|
122
|
+
name: 'Erlöse 19% USt',
|
|
123
|
+
kind: :revenue,
|
|
124
|
+
keepr_tax: tax
|
|
125
|
+
|
|
42
126
|
|
|
43
|
-
TODO: Write usage instructions here
|
|
44
127
|
|
|
45
128
|
|
|
46
129
|
## Contributing
|
|
@@ -64,4 +147,4 @@ TODO: Write usage instructions here
|
|
|
64
147
|
* https://github.com/bigfleet/accountable
|
|
65
148
|
|
|
66
149
|
|
|
67
|
-
Copyright (c) 2013-
|
|
150
|
+
Copyright (c) 2013-2023 [Georg Ledermann](https://ledermann.dev), released under the MIT license
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
|
-
gem 'activerecord', '~> 6.
|
|
3
|
+
gem 'activerecord', '~> 6.1.0'
|
|
4
4
|
gem 'ancestry', '>= 3.1.0'
|
|
5
5
|
gem 'sqlite3', "~> 1.4"
|
|
6
6
|
gem 'rake'
|
|
7
7
|
gem 'rspec'
|
|
8
8
|
gem 'simplecov'
|
|
9
|
-
gem '
|
|
9
|
+
gem 'coveralls_reborn'
|
|
10
10
|
gem 'database_cleaner'
|
|
11
11
|
gem 'factory_bot'
|
|
12
12
|
gem 'datev'
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
|
-
gem 'activerecord', '~>
|
|
3
|
+
gem 'activerecord', '~> 7.0.0'
|
|
4
4
|
gem 'ancestry', '>= 3.1.0'
|
|
5
|
-
gem 'sqlite3',
|
|
5
|
+
gem 'sqlite3', "~> 1.4"
|
|
6
6
|
gem 'rake'
|
|
7
7
|
gem 'rspec'
|
|
8
8
|
gem 'simplecov'
|
|
9
|
-
gem '
|
|
9
|
+
gem 'coveralls_reborn'
|
|
10
10
|
gem 'database_cleaner'
|
|
11
11
|
gem 'factory_bot'
|
|
12
12
|
gem 'datev'
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
|
-
gem 'activerecord', '~>
|
|
3
|
+
gem 'activerecord', '~> 7.1.0'
|
|
4
4
|
gem 'ancestry', '>= 3.1.0'
|
|
5
|
-
gem 'sqlite3',
|
|
5
|
+
gem 'sqlite3', "~> 1.4"
|
|
6
6
|
gem 'rake'
|
|
7
7
|
gem 'rspec'
|
|
8
8
|
gem 'simplecov'
|
|
9
|
-
gem '
|
|
9
|
+
gem 'coveralls_reborn'
|
|
10
10
|
gem 'database_cleaner'
|
|
11
11
|
gem 'factory_bot'
|
|
12
12
|
gem 'datev'
|
data/keepr.gemspec
CHANGED
|
@@ -13,19 +13,19 @@ Gem::Specification.new do |spec|
|
|
|
13
13
|
spec.summary = 'Some basic ActiveRecord models to build a double entry bookkeeping application'
|
|
14
14
|
spec.homepage = 'https://github.com/ledermann/keepr'
|
|
15
15
|
spec.license = 'MIT'
|
|
16
|
-
spec.required_ruby_version = '>=
|
|
16
|
+
spec.required_ruby_version = '>= 3.0'
|
|
17
17
|
|
|
18
18
|
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
|
19
19
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
21
21
|
spec.require_paths = ['lib']
|
|
22
22
|
|
|
23
|
-
spec.add_dependency 'activerecord', '>=
|
|
23
|
+
spec.add_dependency 'activerecord', '>= 6.1'
|
|
24
24
|
spec.add_dependency 'ancestry', '>= 3.1.0'
|
|
25
25
|
spec.add_dependency 'datev', '>= 0.5.0'
|
|
26
26
|
|
|
27
27
|
spec.add_development_dependency 'bundler'
|
|
28
|
-
spec.add_development_dependency '
|
|
28
|
+
spec.add_development_dependency 'coveralls_reborn'
|
|
29
29
|
spec.add_development_dependency 'database_cleaner'
|
|
30
30
|
spec.add_development_dependency 'factory_bot'
|
|
31
31
|
spec.add_development_dependency 'rake'
|
|
@@ -15,11 +15,22 @@ module Keepr
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def self.next_migration_number(dirname)
|
|
18
|
-
if
|
|
18
|
+
if timestamped_migrations?
|
|
19
19
|
Time.now.utc.strftime('%Y%m%d%H%M%S')
|
|
20
20
|
else
|
|
21
21
|
format('%.3d', (current_migration_number(dirname) + 1))
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
|
+
|
|
25
|
+
def self.timestamped_migrations?
|
|
26
|
+
(
|
|
27
|
+
ActiveRecord::Base.respond_to?(:timestamped_migrations) &&
|
|
28
|
+
ActiveRecord::Base.timestamped_migrations
|
|
29
|
+
) ||
|
|
30
|
+
(
|
|
31
|
+
ActiveRecord.respond_to?(:timestamped_migrations) &&
|
|
32
|
+
ActiveRecord.timestamped_migrations
|
|
33
|
+
)
|
|
34
|
+
end
|
|
24
35
|
end
|
|
25
36
|
end
|
data/lib/keepr/version.rb
CHANGED
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.
|
|
4
|
+
version: 0.8.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:
|
|
11
|
+
date: 2023-12-20 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '6.1'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '6.1'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: ancestry
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,19 +67,19 @@ dependencies:
|
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: coveralls_reborn
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - "
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0
|
|
75
|
+
version: '0'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - "
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0
|
|
82
|
+
version: '0'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: database_cleaner
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -170,17 +170,15 @@ executables: []
|
|
|
170
170
|
extensions: []
|
|
171
171
|
extra_rdoc_files: []
|
|
172
172
|
files:
|
|
173
|
+
- ".github/workflows/main.yml"
|
|
173
174
|
- ".gitignore"
|
|
174
|
-
- ".travis.yml"
|
|
175
175
|
- Gemfile
|
|
176
176
|
- LICENSE.txt
|
|
177
177
|
- README.md
|
|
178
178
|
- Rakefile
|
|
179
|
-
- ci/Gemfile-rails-
|
|
180
|
-
- ci/Gemfile-rails-
|
|
181
|
-
- ci/Gemfile-rails-
|
|
182
|
-
- ci/Gemfile-rails-5-2
|
|
183
|
-
- ci/Gemfile-rails-6-0
|
|
179
|
+
- ci/Gemfile-rails-6.1
|
|
180
|
+
- ci/Gemfile-rails-7.0
|
|
181
|
+
- ci/Gemfile-rails-7.1
|
|
184
182
|
- keepr.gemspec
|
|
185
183
|
- lib/generators/keepr/migration/migration_generator.rb
|
|
186
184
|
- lib/generators/keepr/migration/templates/migration.rb
|
|
@@ -239,14 +237,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
239
237
|
requirements:
|
|
240
238
|
- - ">="
|
|
241
239
|
- !ruby/object:Gem::Version
|
|
242
|
-
version: '
|
|
240
|
+
version: '3.0'
|
|
243
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
244
242
|
requirements:
|
|
245
243
|
- - ">="
|
|
246
244
|
- !ruby/object:Gem::Version
|
|
247
245
|
version: '0'
|
|
248
246
|
requirements: []
|
|
249
|
-
rubygems_version: 3.1
|
|
247
|
+
rubygems_version: 3.5.1
|
|
250
248
|
signing_key:
|
|
251
249
|
specification_version: 4
|
|
252
250
|
summary: Some basic ActiveRecord models to build a double entry bookkeeping application
|
data/.travis.yml
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
os: linux
|
|
2
|
-
dist: xenial
|
|
3
|
-
language: ruby
|
|
4
|
-
rvm:
|
|
5
|
-
- 2.5.8
|
|
6
|
-
- 2.6.6
|
|
7
|
-
- 2.7.2
|
|
8
|
-
gemfile:
|
|
9
|
-
- ci/Gemfile-rails-4-2
|
|
10
|
-
- ci/Gemfile-rails-5-0
|
|
11
|
-
- ci/Gemfile-rails-5-1
|
|
12
|
-
- ci/Gemfile-rails-5-2
|
|
13
|
-
- ci/Gemfile-rails-6-0
|
|
14
|
-
matrix:
|
|
15
|
-
exclude:
|
|
16
|
-
- rvm: 2.7.2
|
|
17
|
-
gemfile: ci/Gemfile-rails-4-2
|
|
18
|
-
script:
|
|
19
|
-
- bundle exec rake
|
|
20
|
-
before_install:
|
|
21
|
-
- gem update bundler
|
data/ci/Gemfile-rails-5-1
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
source 'https://rubygems.org'
|
|
2
|
-
|
|
3
|
-
gem 'activerecord', '~> 5.1.7'
|
|
4
|
-
gem 'ancestry', '>= 3.1.0'
|
|
5
|
-
gem "sqlite3", "~> 1.3", ">= 1.3.6"
|
|
6
|
-
gem 'rake'
|
|
7
|
-
gem 'rspec'
|
|
8
|
-
gem 'simplecov'
|
|
9
|
-
gem 'coveralls', '~> 0.8'
|
|
10
|
-
gem 'database_cleaner'
|
|
11
|
-
gem 'factory_bot'
|
|
12
|
-
gem 'datev'
|
data/ci/Gemfile-rails-5-2
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
source 'https://rubygems.org'
|
|
2
|
-
|
|
3
|
-
gem 'activerecord', '~> 5.2.3'
|
|
4
|
-
gem 'ancestry', '>= 3.1.0'
|
|
5
|
-
gem "sqlite3", "~> 1.3", ">= 1.3.6"
|
|
6
|
-
gem 'rake'
|
|
7
|
-
gem 'rspec'
|
|
8
|
-
gem 'simplecov'
|
|
9
|
-
gem 'coveralls', '~> 0.8'
|
|
10
|
-
gem 'database_cleaner'
|
|
11
|
-
gem 'factory_bot'
|
|
12
|
-
gem 'datev'
|