nummernkreis 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/frontrunnerio/nummernkreis.svg?branch=master)](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
|
+
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](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
|