egn 1.3.1 → 1.3.2

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