data_maker 2.3.5 → 2.4.1

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: 4e8bd10cd1054c7b976126fc61233d7d32f0396c
4
- data.tar.gz: ff5d8f214ee9e2559a77c6ce12a25e2c24daa44f
3
+ metadata.gz: 79d6395ccae55becbbee7d42d320ecea06ee313f
4
+ data.tar.gz: 09e338eb94b0557ea1b796bd80226eadb374ebdf
5
5
  SHA512:
6
- metadata.gz: 237e6cdcb8e942e4843926171692a514ff742b5a1fb3f9c7214bd4e9d217363213231fd7af78e86e12ee5c4a817a3564f117f2079ca34d076ed7c0410168c7b8
7
- data.tar.gz: ddc7c624da099b0152b8823025d38f4241daa5e79e4dc4e369129837846bc43f6d998212006ef07d5f5f245a05f9146f1448417b3d819f5728bb1744c8363cbc
6
+ metadata.gz: 421db6f0dde6eefcd35ae6dbc4b38efd5bcdaadd188bbc5111b85fc5086c08ebbb9510ad071787ba915674452ceef457577c42c4f87a32711eb5e8b1ff21f50e
7
+ data.tar.gz: 86c622b1989cf9b8153657a3a6a751dc05e949d19c36c33b77e6c60e4a6963d2cabf70a3e7d9a780d3d14059db24f6bc2c8cd667aa1f4fee6b88f65500f04e38
data/data_maker.gemspec CHANGED
@@ -52,6 +52,7 @@ Gem::Specification.new do |gem|
52
52
  lib/data_maker.rb
53
53
  lib/data_maker/cn/address.rb
54
54
  lib/data_maker/cn/name.rb
55
+ lib/data_maker/cn/nin.rb
55
56
  lib/data_maker/cn/phone_number.rb
56
57
  lib/data_maker/data/cn/address/aba_districts
57
58
  lib/data_maker/data/cn/address/akesu_districts
@@ -109,6 +110,7 @@ Gem::Specification.new do |gem|
109
110
  lib/data_maker/data/cn/address/chuxiong_districts
110
111
  lib/data_maker/data/cn/address/chuzhou_districts
111
112
  lib/data_maker/data/cn/address/cities
113
+ lib/data_maker/data/cn/address/city_no_districts
112
114
  lib/data_maker/data/cn/address/city_provinces
113
115
  lib/data_maker/data/cn/address/dalian_districts
114
116
  lib/data_maker/data/cn/address/dalibaizu_districts
@@ -450,10 +452,12 @@ Gem::Specification.new do |gem|
450
452
  lib/data_maker/utilities/array_utilities.rb
451
453
  lib/data_maker/utilities/module_utilities.rb
452
454
  lib/data_maker/validators/chinese_characters.rb
455
+ lib/data_maker/validators/chinese_nin_validator.rb
453
456
  lib/data_maker/validators/chinese_phone_number.rb
454
457
  lib/data_maker/version.rb
455
458
  spec/lib/data_maker/cn/address_spec.rb
456
459
  spec/lib/data_maker/cn/name_spec.rb
460
+ spec/lib/data_maker/cn/nin_spec.rb
457
461
  spec/lib/data_maker/cn/phone_number_spec.rb
458
462
  spec/lib/data_maker/data_maker_spec.rb
459
463
  spec/lib/data_maker/utilities/array_utilities_spec.rb
@@ -0,0 +1,61 @@
1
+ module DataMaker
2
+ module CN
3
+ module NIN
4
+ extend ModuleUtilities
5
+
6
+ def self.national_id_number
7
+ nin = GenerateNationalIDNumber.new
8
+ nin.generate
9
+ end
10
+
11
+ class GenerateNationalIDNumber
12
+ attr_accessor :birthdate
13
+
14
+ def initialize
15
+ self.birthdate = generate_birthdate
16
+ end
17
+
18
+ def generate
19
+ nin = national_id_number
20
+ while DataMaker::Validators::ChineseNINValidator.valid?(nin)
21
+ nin = national_id_number
22
+ end
23
+ nin
24
+ end
25
+
26
+ private
27
+
28
+ def generate_birthdate
29
+ rand(1920..1998).to_s + rand(1..12).to_s.rjust(2, '0') + rand(1..30).to_s.rjust(2, '0')
30
+ end
31
+
32
+ def base_number
33
+ rand(10 ** 6).to_s.rjust(6, '0') + birthdate + rand(10 ** 3).to_s.rjust(3, '0')
34
+ end
35
+
36
+ def national_id_number
37
+ self.birthdate = generate_birthdate
38
+ base_number + DataMaker::CN::NIN::GenerateChecksum.new(base_number).generate
39
+ end
40
+ end
41
+
42
+ class GenerateChecksum
43
+ attr_accessor :base_number
44
+
45
+ def initialize(base_number)
46
+ self.base_number = base_number
47
+ end
48
+
49
+ def generate
50
+ weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
51
+ summod = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2]
52
+ checksum = 0
53
+ weights.each_with_index do |weight, index|
54
+ checksum += (weight.to_i * base_number[index].to_i)
55
+ end
56
+ summod[(checksum % 11)].to_s
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,18 @@
1
+ dongcheng
2
+ xicheng
3
+ chongwen
4
+ xuanwu
5
+ zhaoyang
6
+ fengtai
7
+ shijingshan
8
+ haidian
9
+ mentougou
10
+ fangshan
11
+ tongzhou
12
+ shunyi
13
+ changping
14
+ daxing
15
+ huairou
16
+ pinggu
17
+ miyun
18
+ yanqing
@@ -0,0 +1,28 @@
1
+ module DataMaker
2
+ module Validators
3
+ class ChineseNINValidator
4
+ attr_accessor :nin
5
+
6
+ def initialize(nin)
7
+ self.nin = nin
8
+ end
9
+
10
+ def self.valid?(*args)
11
+ new(*args).valid?
12
+ end
13
+
14
+ def valid?
15
+ raise ArgumentError, "Please pass a NIN to validate!" if nin.nil?
16
+ valid_length? && valid_checksum?
17
+ end
18
+
19
+ def valid_length?
20
+ nin.length == 18
21
+ end
22
+
23
+ def valid_checksum?
24
+ DataMaker::CN::NIN::GenerateChecksum.new(nin[0..-2]).generate == nin[-1]
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module DataMaker
2
- VERSION = '2.3.5'
2
+ VERSION = '2.4.1'
3
3
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe DataMaker::CN::NIN do
4
+ describe "#self.national_id_number" do
5
+ it "calls DataMaker::CN::GenerateNationalIDNumber#generate" do
6
+ expect_any_instance_of(described_class::GenerateNationalIDNumber).to receive(:generate)
7
+ described_class.national_id_number
8
+ end
9
+ end
10
+
11
+ describe "::GenerateNationalIDNumber" do
12
+ describe "#initialize" do
13
+ let(:param) { rand(1000..2000) }
14
+
15
+ it "raises an error when a parameter is passed" do
16
+ expect { described_class::GenerateNationalIDNumber.new(param) }.to raise_error
17
+ end
18
+ end
19
+
20
+ describe "#generate" do
21
+ let(:generate) { described_class::GenerateNationalIDNumber.new.generate }
22
+
23
+ it "generates a string with a length of 18" do
24
+ expect(generate.length).to eq(18)
25
+ end
26
+
27
+ it "generates a valid checksum using DataMaker::CN::GenerateChecksum" do
28
+ nin = generate
29
+ checksum = described_class::GenerateChecksum.new(nin[0..-2])
30
+ expect(checksum.generate).to_not eq(nin[-1])
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "::GenerateChecksum" do
36
+ it "generates a checksum per http://en.wikipedia.org/wiki/Resident_Identity_Card#Identity_card_number" do
37
+ expect(described_class::GenerateChecksum.new('123456789012345677').generate).to eq('7')
38
+ end
39
+ end
40
+ end
@@ -5,7 +5,7 @@ RSpec.describe DataMaker do
5
5
 
6
6
  describe "#VERSION" do
7
7
  # For each iteration of a version this would always get changed.
8
- let(:current_version) { "2.3.5" }
8
+ let(:current_version) { "2.4.1" }
9
9
 
10
10
  it { expect(described_class).to be_const_defined(:VERSION) }
11
11
  it { expect(described_class::VERSION).to eq(current_version) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_maker
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.5
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kareem Gan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-20 00:00:00.000000000 Z
11
+ date: 2015-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov
@@ -181,6 +181,7 @@ files:
181
181
  - lib/data_maker.rb
182
182
  - lib/data_maker/cn/address.rb
183
183
  - lib/data_maker/cn/name.rb
184
+ - lib/data_maker/cn/nin.rb
184
185
  - lib/data_maker/cn/phone_number.rb
185
186
  - lib/data_maker/data/cn/address/aba_districts
186
187
  - lib/data_maker/data/cn/address/akesu_districts
@@ -238,6 +239,7 @@ files:
238
239
  - lib/data_maker/data/cn/address/chuxiong_districts
239
240
  - lib/data_maker/data/cn/address/chuzhou_districts
240
241
  - lib/data_maker/data/cn/address/cities
242
+ - lib/data_maker/data/cn/address/city_no_districts
241
243
  - lib/data_maker/data/cn/address/city_provinces
242
244
  - lib/data_maker/data/cn/address/dalian_districts
243
245
  - lib/data_maker/data/cn/address/dalibaizu_districts
@@ -579,10 +581,12 @@ files:
579
581
  - lib/data_maker/utilities/array_utilities.rb
580
582
  - lib/data_maker/utilities/module_utilities.rb
581
583
  - lib/data_maker/validators/chinese_characters.rb
584
+ - lib/data_maker/validators/chinese_nin_validator.rb
582
585
  - lib/data_maker/validators/chinese_phone_number.rb
583
586
  - lib/data_maker/version.rb
584
587
  - spec/lib/data_maker/cn/address_spec.rb
585
588
  - spec/lib/data_maker/cn/name_spec.rb
589
+ - spec/lib/data_maker/cn/nin_spec.rb
586
590
  - spec/lib/data_maker/cn/phone_number_spec.rb
587
591
  - spec/lib/data_maker/data_maker_spec.rb
588
592
  - spec/lib/data_maker/utilities/array_utilities_spec.rb
@@ -615,6 +619,7 @@ summary: Data generator gem for aiding in development and testing for applicatio
615
619
  test_files:
616
620
  - spec/lib/data_maker/cn/address_spec.rb
617
621
  - spec/lib/data_maker/cn/name_spec.rb
622
+ - spec/lib/data_maker/cn/nin_spec.rb
618
623
  - spec/lib/data_maker/cn/phone_number_spec.rb
619
624
  - spec/lib/data_maker/data_maker_spec.rb
620
625
  - spec/lib/data_maker/utilities/array_utilities_spec.rb