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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a662d8dc677f9cf7f635ee3319ae1fb250f17945024bc714acce3e0a89c7b8d
4
- data.tar.gz: 6abd42f788629f3d5b395dc49ee162dc1d45880de500502bffea0cd3a5c7a7fe
3
+ metadata.gz: c2f141b5c5b18f8429de21a681139b96fa2fa6801c62c1e988bdf352acbca67f
4
+ data.tar.gz: 61f757543b0b38e9607ccf86c0cfcabd856146649126f5cafb91c6760fdd3f41
5
5
  SHA512:
6
- metadata.gz: dd32be40f56ce8428833c7cb05ae5b548b3be0acdbdf9997420adbdaf4125c13addcebed3ac05a8f6158e8ec5ab248585e2dfba03f16c47be2f07b4133694508
7
- data.tar.gz: eeb9242b94ed7fecc4d1f378440e58ec27a4aa1df8803303895d9cfec2a4aa32443e02cbaedec1fe7dd032978d658c3a2c66a85446f3d825bcd380378d1efd8c
6
+ metadata.gz: cfa8f678d3d937931c4b7d92c372fa52221ae46004e19cd3a170014a803b0beee543830548628e31d4949781f8368a45d8ad471a444e6cdb1dcacd8d0499f576
7
+ data.tar.gz: e81f62edb7fc551161cff38ed5813a3ffda5bbaaada38881ac6a37bdeb52e692cf4893c13b35b85e2d4a75db73f1a05ff2ec0ee9a1891885f8938491a1d8ef37
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /vendor/bundle
10
+ /*.gem
data/.gitpod.yml ADDED
@@ -0,0 +1,3 @@
1
+ tasks:
2
+ - before: ./bin/setup
3
+ - command: rake test
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
- - 2.6.2
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
@@ -0,0 +1,3 @@
1
+ # Changes since 0.1.0
2
+
3
+ - add '#next(now: true)' which gives the next number for today.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nummernkreis (0.1.0)
4
+ nummernkreis (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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/deepflame/nummernkreis.
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
- @number = PatternParser.new(pattern).sample
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
- def next
17
- digit_count = @pattern.split('').count('#')
18
- raise Error.new('only works if pattern has a digit part') if digit_count == 0
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
- digits_start_at = @pattern.index('#')
21
- digits_end_at = @pattern.rindex('#')
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
- before_digits = digits_start_at < 1 ? '' : @number[0..digits_start_at-1]
24
- digits = @number[digits_start_at..digits_end_at]
25
- after_digits = @number[digits_end_at+1..@number.length]
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
- @number = "#{before_digits}#{new_digits}#{after_digits}"
60
+ "#{before_digits}#{new_digits}#{after_digits}"
30
61
  end
31
62
 
32
- def parse number
33
- @number = number
34
- self
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
- private
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
@@ -1,3 +1,3 @@
1
1
  class Nummernkreis
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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.1.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-04-25 00:00:00.000000000 Z
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