nummernkreis 0.1.0 → 0.2.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/.gitignore +1 -0
- data/.gitpod.yml +3 -0
- data/.travis.yml +12 -2
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +12 -1
- data/lib/nummernkreis.rb +56 -16
- data/lib/nummernkreis/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2f141b5c5b18f8429de21a681139b96fa2fa6801c62c1e988bdf352acbca67f
|
4
|
+
data.tar.gz: 61f757543b0b38e9607ccf86c0cfcabd856146649126f5cafb91c6760fdd3f41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfa8f678d3d937931c4b7d92c372fa52221ae46004e19cd3a170014a803b0beee543830548628e31d4949781f8368a45d8ad471a444e6cdb1dcacd8d0499f576
|
7
|
+
data.tar.gz: e81f62edb7fc551161cff38ed5813a3ffda5bbaaada38881ac6a37bdeb52e692cf4893c13b35b85e2d4a75db73f1a05ff2ec0ee9a1891885f8938491a1d8ef37
|
data/.gitignore
CHANGED
data/.gitpod.yml
ADDED
data/.travis.yml
CHANGED
@@ -1,7 +1,17 @@
|
|
1
|
-
---
|
2
1
|
sudo: false
|
3
2
|
language: ruby
|
4
3
|
cache: bundler
|
5
4
|
rvm:
|
6
|
-
|
5
|
+
- 2.0
|
6
|
+
- 2.2
|
7
|
+
- 2.6
|
7
8
|
before_install: gem install bundler -v 1.17.2
|
9
|
+
script: bundle exec rake test
|
10
|
+
deploy:
|
11
|
+
provider: rubygems
|
12
|
+
api_key:
|
13
|
+
secure: Wqs0XtfWzevTGwN+4Zz3oIy2ULpjxmha2h9Kb1mGzzc586g8Mb/ptzQiXHFdZmQYRgVQooBrKnr26H3cEQfX+OHK44/zpbKm8X1bmeEnMCO2+lYycRaraJw0F814yT1QpoSbHY5OHa3yfd2Knudwxirx+Fqohypap/NBG22PFDbVXl9OmP2sdIfESeSoUjVqZrTlLjchl2pQyUPkoFA0+ZM5NQkmAuJ9cEkbv9D0xbENLc76WwXGAmLdYxjdeg/OssHITYxivi2lH/uszpYYSjXz5jG3c5fF47Cn6H1ctLGCmzAsLg5OVXg35j26bedr1hGS+C0TGAWvf7cet7oqEmM8fSA7Tp5vEd2aMAdaLL/XM4fihbT+1IugZ11HNOhGtz1YsYXY1Cm9TA8LcQjGhxxjXnXyWDpPxyavjo1/VG0MO8d3dgV6RcyjQdxfPLjdrOEOX+8+gi6y5jWg/Zh4vEs6KshPJyPxZol/pfnOs3Dj8dl3Pm1T35oTvV7iWr7fY0EdhEzltcSOSFlfSPcTvoO6Xf5+nefs0gTJOCeeI3lZt2hd54kK9RdYWv6I6JumB0FEzHwlliSFmFkmiY2om1JQKhLrQF5ar5GnxcNdC+baOOkHOR+k2KiZxA0v+u1/3h2rOHA3MfY9m9H8lLt2iYOGXHYddDiP9d2f+3GkJMg=
|
14
|
+
gem: nummernkreis
|
15
|
+
on:
|
16
|
+
tags: true
|
17
|
+
repo: frontrunnerio/nummernkreis
|
data/CHANGELOG.md
ADDED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Nummernkreis
|
2
2
|
|
3
|
+
[](https://travis-ci.org/frontrunnerio/nummernkreis)
|
4
|
+
|
3
5
|
This gem implements a number range ("Nummernkreis" in German) which is very common for German documents like invoices where the invoice number is not just a number sequence but also includes date components.
|
4
6
|
|
5
7
|
## Installation
|
@@ -46,6 +48,12 @@ Examples (assuming current date is 2019-04-15):
|
|
46
48
|
|
47
49
|
Nummernkreis.new('yymmdd-##').parse('181231-04').next
|
48
50
|
# '181231-05'
|
51
|
+
|
52
|
+
Nummernkreis.new('yymmdd-##').parse('181231-04').next(now: true)
|
53
|
+
# '190425-01'
|
54
|
+
|
55
|
+
Nummernkreis.new('yymmdd-##').parse('181231-04').next(now: true)
|
56
|
+
# '190425-02'
|
49
57
|
```
|
50
58
|
|
51
59
|
## Development
|
@@ -56,7 +64,10 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
56
64
|
|
57
65
|
## Contributing
|
58
66
|
|
59
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
67
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/frontrunnerio/nummernkreis.
|
68
|
+
You can just use Gitpod and start hacking.
|
69
|
+
|
70
|
+
[](https://gitpod.io#https://github.com/frontrunnerio/nummernkreis)
|
60
71
|
|
61
72
|
## License
|
62
73
|
|
data/lib/nummernkreis.rb
CHANGED
@@ -1,40 +1,81 @@
|
|
1
1
|
require "nummernkreis/version"
|
2
2
|
require 'date'
|
3
3
|
|
4
|
+
# Nummernkreis
|
5
|
+
#
|
6
|
+
# class to generate and increment number ranges based on a simple pattern
|
7
|
+
#
|
8
|
+
# pattern can include:
|
9
|
+
#
|
10
|
+
# yyyy:: year with 4 digit representation (e.g. 2018)
|
11
|
+
# yy:: year with 2 digit representation (e.g. 80 for 1980)
|
12
|
+
# mm:: month with 2 digits (e.g. 03 for March)
|
13
|
+
# dd:: day of the month with 2 digits (e.g. 01 for the first day)
|
14
|
+
# -:: dash separator
|
15
|
+
# #:: placeholder for variable digit part / counter (e.g. 001 as first value for ###)
|
16
|
+
#
|
4
17
|
class Nummernkreis
|
5
18
|
class Error < StandardError; end
|
6
19
|
|
20
|
+
# @param pattern [String] number range pattern
|
7
21
|
def initialize pattern
|
8
22
|
@pattern = pattern
|
9
|
-
@
|
23
|
+
@number_now = PatternParser.new(pattern).sample
|
24
|
+
@number = @number_now
|
10
25
|
end
|
11
26
|
|
27
|
+
# returns the current number range string
|
28
|
+
# @return [String] current number range
|
12
29
|
def to_s
|
13
30
|
@number
|
14
31
|
end
|
15
32
|
|
16
|
-
|
17
|
-
|
18
|
-
|
33
|
+
# increments the digit part of the number range
|
34
|
+
# @param now [Boolean] if the next number should be generated for today
|
35
|
+
# @return [String] next number range
|
36
|
+
def next(now: false)
|
37
|
+
@number = if now && !numbers_equal_without_digits?(@number, @number_now)
|
38
|
+
@number_now
|
39
|
+
else
|
40
|
+
increment_digits_for_number @number
|
41
|
+
end
|
42
|
+
end
|
19
43
|
|
20
|
-
|
21
|
-
|
44
|
+
# "parses" the number range (sets the current number range)
|
45
|
+
# @return [Nummernkreis] instance
|
46
|
+
def parse number
|
47
|
+
@number = number
|
48
|
+
self
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
22
52
|
|
23
|
-
|
24
|
-
|
25
|
-
|
53
|
+
def increment_digits_for_number number
|
54
|
+
digit_count = @pattern.split('').count('#')
|
55
|
+
raise Error.new('only works if pattern has a digit part') if digit_count == 0
|
26
56
|
|
57
|
+
before_digits, digits, after_digits = decompose_number_parts(@number)
|
27
58
|
new_digits = format("%0#{digit_count}d", digits.to_i + 1)
|
28
59
|
|
29
|
-
|
60
|
+
"#{before_digits}#{new_digits}#{after_digits}"
|
30
61
|
end
|
31
62
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
63
|
+
def numbers_equal_without_digits? number1, number2
|
64
|
+
parts1 = decompose_number_parts number1
|
65
|
+
parts2 = decompose_number_parts number2
|
66
|
+
parts1[0] == parts2[0] && parts1[2] == parts2[2]
|
35
67
|
end
|
36
68
|
|
37
|
-
|
69
|
+
def decompose_number_parts number
|
70
|
+
digits_start_at = @pattern.index('#')
|
71
|
+
digits_end_at = @pattern.rindex('#')
|
72
|
+
|
73
|
+
[
|
74
|
+
digits_start_at < 1 ? '' : number[0..digits_start_at-1],
|
75
|
+
number[digits_start_at..digits_end_at],
|
76
|
+
number[digits_end_at+1..number.length]
|
77
|
+
]
|
78
|
+
end
|
38
79
|
|
39
80
|
class PatternParser
|
40
81
|
|
@@ -108,5 +149,4 @@ class Nummernkreis
|
|
108
149
|
end
|
109
150
|
end
|
110
151
|
|
111
|
-
end
|
112
|
-
|
152
|
+
end
|
data/lib/nummernkreis/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nummernkreis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Böhrnsen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -75,7 +75,9 @@ extensions: []
|
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
77
|
- ".gitignore"
|
78
|
+
- ".gitpod.yml"
|
78
79
|
- ".travis.yml"
|
80
|
+
- CHANGELOG.md
|
79
81
|
- Gemfile
|
80
82
|
- Gemfile.lock
|
81
83
|
- LICENSE.txt
|