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 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