egn 1.3.1 → 1.3.2

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
  SHA1:
3
- metadata.gz: aaa91f142c103922352ec9dab24a75fe6792d543
4
- data.tar.gz: 143517ba61c8705aae880eb1a5450df57a76e08c
3
+ metadata.gz: 6ece6e3fe8e7fc520d7833f9256610261b9e4622
4
+ data.tar.gz: 5ca30adca2f40f3731eee66d98b3a45e344025cc
5
5
  SHA512:
6
- metadata.gz: a5c8f9beceef676cd25cde8f364cef28a9fe9a0271e0cbdce8372f85baa0e021b29f15f4116301d4394583118b51b8a37bfa5862595ec31f8545928211565fdd
7
- data.tar.gz: 522bd6ab3ea7dc0ba3ea4168ce0a5f14077f4ec2f2e735f522d7f1f3b7e5b0d2b265eb7a501414786c26f7a78ec249527c5dd0bd8796c681617a3b0dc787902f
6
+ metadata.gz: 05ac63f17dc43b25e440243b54da13442795cf7a7c70303537110a0ed5ae4553c360fecc77e51ff16ecaf5a8c91514a30be0837917ddb3577755cbafbae5bcc7
7
+ data.tar.gz: 3f3180fb9357bc264e0a33f341b2316c1806a91cd99b240aa0dba99bb6d166f1c67c767d41a43c0eaf552ba5b5c15ad185b58c60b31b1f72bedb280ebb72dad7
data/README.md CHANGED
@@ -57,13 +57,13 @@ Or install it yourself as:
57
57
  egn.day
58
58
  # => 10
59
59
 
60
- egn.sex
60
+ egn.gender # egn.sex can also be used
61
61
  # => :male
62
62
 
63
- egn.sex(format: :char)
63
+ egn.gender(format: :char)
64
64
  # => 'm'
65
65
 
66
- egn.sex(format: :number)
66
+ egn.gender(format: :number)
67
67
  # => 1
68
68
 
69
69
  egn.valid?
data/lib/egn/generator.rb CHANGED
@@ -15,10 +15,12 @@ module Egn
15
15
  end
16
16
 
17
17
  # The generated EGN will be completely random if no opitons are given.
18
- # options is a hash that may have the following keys: :year, :month and :date
18
+ # options is a hash that may have the following keys: :year, :month, :day, :gender
19
19
  def generate
20
- # YY MM DD REST
21
- egn = format(options[:year]) + format(options[:month]) + format(options[:day]) + format(options[:region], 3)
20
+ egn = format(options[:year]) +
21
+ format(options[:month]) +
22
+ format(options[:day]) +
23
+ format(options[:region], 3)
22
24
 
23
25
  egn + Util.egn_checksum(egn).to_s
24
26
  end
@@ -44,7 +46,7 @@ module Egn
44
46
  raise ArgumentError, "Year out of bounds" if options[:year] && !(1800..2099).include?(options[:year])
45
47
  raise ArgumentError, "Month out of bounds" if options[:month] && !(1..12).include?(options[:month])
46
48
  raise ArgumentError, "Day out of bounds" if options[:day] && !(1..31).include?(options[:day])
47
- raise ArgumentError, "Sex should be one of #{sexes}" if options[:sex] && !sexes.include?(options[:sex])
49
+ raise ArgumentError, "Gender should be one of #{genders}" if options[:gender] && !genders.include?(options[:gender])
48
50
  end
49
51
 
50
52
  # Random defaults
@@ -54,27 +56,27 @@ module Egn
54
56
  year: date.year,
55
57
  month: date.month,
56
58
  day: date.day,
57
- sex: sexes.sample,
59
+ gender: genders.sample,
58
60
  region: Random.rand(0..999)
59
61
  }
60
62
  end
61
63
 
62
64
  def process!
63
- # Get random century, region and sex
65
+ # Get random century, region and gender
64
66
  century = determine_century(options[:year])
65
67
 
66
68
  options[:month] += month_delta(century)
67
69
 
68
- options[:region] += region_delta(options[:sex], options[:region])
70
+ options[:region] += region_delta(options[:gender], options[:region])
69
71
 
70
72
  options[:year] = options[:year] - century
71
73
  end
72
74
 
73
- # Recalculate region based on sex
74
- def region_delta(sex, region)
75
- if sex == :male && region.odd?
75
+ # Recalculate region based on gender
76
+ def region_delta(gender, region)
77
+ if gender == :male && region.odd?
76
78
  -1
77
- elsif sex == :female && region.even?
79
+ elsif gender == :female && region.even?
78
80
  1
79
81
  else
80
82
  0
@@ -95,7 +97,7 @@ module Egn
95
97
  year - (year % 100)
96
98
  end
97
99
 
98
- def sexes
100
+ def genders
99
101
  [:male, :female]
100
102
  end
101
103
 
data/lib/egn/util.rb CHANGED
@@ -3,12 +3,12 @@ module Egn
3
3
  module Util
4
4
  WEIGHTS = [2,4,8,5,10,9,7,3,6]
5
5
 
6
- # The EGN can have three different formats depending on the century. It can
6
+ # The EGN can have three different formats depending on the century. It can
7
7
  # be determined by examining the month.
8
8
  # The rules are as follows:
9
9
  # * For people born in 1900..1999 the month does not change
10
- # * For people born in 1800..1899 the month is +20 (e.g January is 21)
11
- # * For people born in 2000..2099 the month is +40 (e.g December is 52)
10
+ # * For people born in 1800..1899 the month increases by 20 (e.g January is 21)
11
+ # * For people born in 2000..2099 the month increases by 40 (e.g December is 52)
12
12
  def self.determine_date(year, month)
13
13
  case month
14
14
  when (1..12)
@@ -24,9 +24,9 @@ module Egn
24
24
  [year.to_i, month]
25
25
  end
26
26
 
27
- # The checksum is calculated from the first 9 digits.
27
+ # More information on the formula: http://www.grao.bg/esgraon.html
28
28
  def self.egn_checksum(egn)
29
- sum = egn.split('').map(&:to_i).zip(WEIGHTS).map { |n| n.reduce(:*) }.reduce(:+)
29
+ sum = egn.chars.map(&:to_i).zip(WEIGHTS).map { |n| n.reduce(:*) }.reduce(:+)
30
30
 
31
31
  rest = sum % 11
32
32
  rest < 10 ? rest : 0
data/lib/egn/validator.rb CHANGED
@@ -2,7 +2,7 @@ module Egn
2
2
  class Validator
3
3
  attr_reader :egn
4
4
 
5
- # Convinience method
5
+ # Convenience method
6
6
  def self.validate(egn)
7
7
  Validator.new(egn).validate
8
8
  end
data/lib/egn/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Egn
2
- VERSION = "1.3.1"
2
+ VERSION = "1.3.2"
3
3
  end
@@ -22,7 +22,7 @@ describe Egn::Generator do
22
22
 
23
23
  context "invoked with arguments" do
24
24
  it "generates a new EGN considering the given options" do
25
- number = Egn::Generator.generate(year: 1990, month: 12, day: 30, sex: :male)
25
+ number = Egn::Generator.generate(year: 1990, month: 12, day: 30, gender: :male)
26
26
  egn = Egn::Egn.new(number)
27
27
 
28
28
  expect(egn).to be_valid
@@ -58,22 +58,22 @@ describe Egn::Generator do
58
58
  end
59
59
 
60
60
  it "generates female EGNs" do
61
- number = Egn::Generator.generate(sex: :female)
61
+ number = Egn::Generator.generate(gender: :female)
62
62
  egn = Egn::Egn.new(number)
63
63
 
64
- expect(egn.sex).to eq(:female)
64
+ expect(egn.gender).to eq(:female)
65
65
  end
66
66
 
67
67
  it "generates male EGNs" do
68
- number = Egn::Generator.generate(sex: :male)
68
+ number = Egn::Generator.generate(gender: :male)
69
69
  egn = Egn::Egn.new(number)
70
70
 
71
- expect(egn.sex).to eq(:male)
71
+ expect(egn.gender).to eq(:male)
72
72
  end
73
73
 
74
74
  it "validates the options" do
75
75
 
76
- options = {year: 1960, month: 6, day: 3, sex: :male, region: 333}
76
+ options = {year: 1960, month: 6, day: 3, gender: :male, region: 333}
77
77
 
78
78
  Egn::Generator.any_instance.should_receive(:validate!)
79
79
 
@@ -103,9 +103,9 @@ describe Egn::Generator do
103
103
  }.to raise_error ArgumentError
104
104
  end
105
105
 
106
- it "raises an exception if invalid sex is given" do
106
+ it "raises an exception if invalid gender is given" do
107
107
  expect{
108
- Egn::Generator.generate(sex: :none)
108
+ Egn::Generator.generate(gender: :none)
109
109
  }.to raise_error ArgumentError
110
110
  end
111
111
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: egn
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - gmitrev