forgery 0.4.3 → 0.8.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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +9 -0
  5. data/Gemfile.lock +35 -0
  6. data/LICENSE +1 -1
  7. data/README.markdown +196 -60
  8. data/Rakefile +10 -54
  9. data/forgery.gemspec +23 -0
  10. data/lib/forgery.rb +0 -1
  11. data/lib/forgery/dictionaries/bics +7 -0
  12. data/lib/forgery/dictionaries/company_names +0 -1
  13. data/lib/forgery/dictionaries/currency_descriptions +2 -2
  14. data/lib/forgery/dictionaries/ibans +61 -0
  15. data/lib/forgery/dictionaries/job_titles +1 -1
  16. data/lib/forgery/dictionaries/zones +1 -2
  17. data/lib/forgery/extend.rb +0 -2
  18. data/lib/forgery/extensions/range.rb +1 -1
  19. data/lib/forgery/file_reader.rb +2 -1
  20. data/lib/forgery/forgery/bank_account.rb +25 -0
  21. data/lib/forgery/forgery/basic.rb +1 -1
  22. data/lib/forgery/forgery/credit_card.rb +71 -0
  23. data/lib/forgery/forgery/geo.rb +54 -0
  24. data/lib/forgery/forgery/internet.rb +7 -0
  25. data/lib/forgery/forgery/lorem_ipsum.rb +4 -4
  26. data/lib/forgery/forgery/russian_tax.rb +57 -0
  27. data/lib/forgery/forgery_railtie.rb +0 -29
  28. data/lib/forgery/formats/phone +1 -1
  29. data/lib/forgery/version.rb +3 -1
  30. data/spec/data/dictionaries/code_names +6 -0
  31. data/spec/data/dictionaries/female_first_names +1 -0
  32. data/spec/data/documents/mock_web_page.html +17 -0
  33. data/spec/data/documents/mock_xml_doc.xml +5 -0
  34. data/spec/dictionaries_spec.rb +35 -0
  35. data/spec/extensions/array_spec.rb +25 -0
  36. data/spec/extensions/range_spec.rb +33 -0
  37. data/spec/extensions/string_spec.rb +29 -0
  38. data/spec/file_reader_spec.rb +32 -0
  39. data/spec/forgery/address_spec.rb +84 -0
  40. data/spec/forgery/bank_account_spec.rb +16 -0
  41. data/spec/forgery/basic_spec.rb +179 -0
  42. data/spec/forgery/credit_card_spec.rb +68 -0
  43. data/spec/forgery/currency_spec.rb +15 -0
  44. data/spec/forgery/date_spec.rb +134 -0
  45. data/spec/forgery/internet_spec.rb +62 -0
  46. data/spec/forgery/lorem_ipsum_spec.rb +132 -0
  47. data/spec/forgery/monetary_spec.rb +14 -0
  48. data/spec/forgery/name_spec.rb +11 -0
  49. data/spec/forgery/personal_spec.rb +15 -0
  50. data/spec/forgery/russian_tax_spec.rb +81 -0
  51. data/spec/forgery/time_spec.rb +7 -0
  52. data/spec/forgery_spec.rb +63 -0
  53. data/spec/formats_spec.rb +35 -0
  54. data/spec/spec_helper.rb +39 -0
  55. metadata +89 -38
  56. data/lib/forgery/file_writer.rb +0 -54
@@ -0,0 +1,81 @@
1
+ require 'spec_helper'
2
+
3
+ describe Forgery::RussianTax do
4
+
5
+ it 'bik should be 9 symbols' do
6
+ expect(Forgery::RussianTax.bik.length).to eq 9
7
+ end
8
+
9
+ it "bik should start with 04" do
10
+ expect(Forgery::RussianTax.bik[0,2]).to eq '04'
11
+ end
12
+
13
+ it "bik should have valid last part" do
14
+ expect(Forgery::RussianTax.bik[6,8].to_i).to be > 50
15
+ end
16
+
17
+ it 'bik should be 20 symbols' do
18
+ expect(Forgery::RussianTax.account_number.length).to eq 20
19
+ end
20
+
21
+ context 'legal inn' do
22
+ let(:inn) { Forgery::RussianTax.inn({ :type =>:legal }) }
23
+
24
+ it 'legal inn should be 10 symbols' do
25
+ expect(inn.length).to eq 10
26
+ end
27
+
28
+ it 'leagl inn crc' do
29
+ mask = [2, 4, 10, 3, 5, 9, 4, 6, 8]
30
+ expect((0..(inn.length-2)).inject(0) {|crc, i| crc + inn[i].to_i*mask[i].to_i} % 11 % 10).to eq inn[9].chr.to_i
31
+ end
32
+
33
+ end
34
+
35
+ context 'person inn' do
36
+ let(:inn) { Forgery::RussianTax.inn({ :type => :person }) }
37
+
38
+ it 'person inn should be 12 symbols' do
39
+ expect(inn.length).to eq 12
40
+ end
41
+
42
+ it 'person inn crc 10' do
43
+ mask = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
44
+ expect((0..(inn.length-3)).inject(0) {|crc, i| crc + inn[i].to_i*mask[i].to_i} % 11 % 10).to eq inn[10].chr.to_i
45
+ end
46
+
47
+ it 'person inn crc 11' do
48
+ mask = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]
49
+ expect((0..(inn.length-2)).inject(0) {|crc, i| crc + inn[i].to_i*mask[i].to_i} % 11 % 10).to eq inn[11].chr.to_i
50
+ end
51
+
52
+ end
53
+
54
+ context 'legal ogrn' do
55
+ let(:ogrn) { Forgery::RussianTax.ogrn({ :type => :legal }) }
56
+
57
+ it 'legal ogrn should be 13 symbols' do
58
+ expect(ogrn.length).to eq 13
59
+ end
60
+
61
+ it 'legal ogrn should have valid crc' do
62
+ expect(ogrn[0..-2].to_i%11%10).to eq ogrn[-1].chr.to_i
63
+ end
64
+ end
65
+
66
+ context 'person ogrn' do
67
+ let(:ogrn) { Forgery::RussianTax.ogrn({ :type => :person }) }
68
+
69
+ it 'person ogrn should be 15 symbols' do
70
+ expect(ogrn.length).to eq 15
71
+ end
72
+
73
+ it 'person ogrn should have valid crc' do
74
+ expect(ogrn[0..-2].to_i%13%10).to eq ogrn[-1].chr.to_i
75
+ end
76
+ end
77
+
78
+
79
+
80
+
81
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Forgery::Time do
4
+ it "should return a random timezone" do
5
+ expect(Forgery.dictionaries[:zones]).to include(Forgery::Time.zone)
6
+ end
7
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+ require 'pathname'
3
+
4
+ describe Forgery do
5
+ it 'should load a dictionary when it is requested' do
6
+ Forgery.dictionaries.reset!
7
+
8
+ expect(Forgery.dictionaries).not_to be_loaded(:colors)
9
+
10
+ Forgery.dictionaries[:colors]
11
+
12
+ expect(Forgery.dictionaries).to be_loaded(:colors)
13
+ end
14
+
15
+ it 'should load formats when it is requested' do
16
+ Forgery.formats.reset!
17
+
18
+ expect(Forgery.formats).not_to be_loaded(:phone)
19
+
20
+ Forgery.formats[:phone]
21
+
22
+ expect(Forgery.formats).to be_loaded(:phone)
23
+ end
24
+
25
+ it 'should accept a symbol and return the appropriate forgery class' do
26
+ expect(Forgery(:address)).to eq(Forgery::Address)
27
+ expect(Forgery(:basic)).to eq(Forgery::Basic)
28
+ expect(Forgery(:internet)).to eq(Forgery::Internet)
29
+ end
30
+
31
+ it 'should accept two symbols, finding the right class and calling the appropriate method' do
32
+ expect(Forgery::Address).to receive(:street_name)
33
+ Forgery(:address, :street_name)
34
+
35
+ expect(Forgery::Name).to receive(:full_name)
36
+ Forgery(:name, :full_name)
37
+ end
38
+
39
+ it 'should accept two symbols and arguments, passing them along to the appropriate method' do
40
+ expect(Forgery::LoremIpsum).to receive(:text).with(:sentences, 2)
41
+ Forgery(:lorem_ipsum, :text, :sentences, 2)
42
+ end
43
+
44
+ it 'should return the rails root path as a string if Rails.root is defined' do
45
+ Rails = Object.new
46
+ allow(Rails).to receive(:root).and_return(Pathname.new('/path/from/rails/dot/root'))
47
+ expect(Forgery.rails_root).to eq('/path/from/rails/dot/root')
48
+ Object.instance_eval { remove_const(:Rails) }
49
+ end
50
+
51
+ it 'should return nil when Rails.root and Rails.root are not defined' do
52
+ expect(Forgery.rails_root).to be_nil
53
+ end
54
+
55
+ it 'should not be a rails environment when there is not a rails_root' do
56
+ expect(Forgery.rails?).to be false
57
+ end
58
+
59
+ it 'should be a rails environment when there is a rails_root' do
60
+ allow(Forgery).to receive(:rails?).and_return(true)
61
+ expect(Forgery.rails?).to be true
62
+ end
63
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Forgery::Formats do
4
+ it "should check if the dictionary is loaded" do
5
+ formats = Forgery::Formats.new
6
+
7
+ formats[:phone]
8
+
9
+ expect(formats).to be_loaded(:phone)
10
+ end
11
+
12
+ it "should load a dictionary when called by the key" do
13
+ formats = Forgery::Formats.new
14
+
15
+ formats.reset!
16
+
17
+ expect(formats).not_to be_loaded(:phone)
18
+
19
+ formats[:phone]
20
+
21
+ expect(formats).to be_loaded(:phone)
22
+ end
23
+
24
+ it "should clear the loaded formats when calling reset!" do
25
+ formats = Forgery::Formats.new
26
+
27
+ formats[:phone]
28
+
29
+ expect(formats).to be_loaded(:phone)
30
+
31
+ formats.reset!
32
+
33
+ expect(formats).not_to be_loaded(:phone)
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ require 'rubygems'
5
+ require 'bundler/setup'
6
+ require 'forgery'
7
+ require 'ipaddr'
8
+
9
+ ENV["TESTING_VIA_RSPEC"] = "true"
10
+
11
+ RSpec.configure do |config|
12
+
13
+ end
14
+
15
+ class OnlyContain
16
+ def initialize(*expected)
17
+ @expected = [expected].flatten
18
+ end
19
+
20
+ def matches?(target)
21
+ @target = target.dup
22
+ @expected.each do |e|
23
+ target.gsub!(e, '')
24
+ end
25
+ target.size == 0
26
+ end
27
+
28
+ def failure_message
29
+ "expected #{@target} to only contain #{@expected.join(', ')}"
30
+ end
31
+
32
+ def failure_message
33
+ "expected #{@target} to not only contain #{@expected.join(', ')}"
34
+ end
35
+ end
36
+
37
+ def only_contain(*expected)
38
+ OnlyContain.new(expected)
39
+ end
metadata CHANGED
@@ -1,50 +1,54 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forgery
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
5
- prerelease:
4
+ version: 0.8.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nathan Sutton
9
8
  - Brandon Arbini
9
+ - Kamil Kieliszczyk
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-09-05 00:00:00.000000000Z
13
+ date: 2020-07-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: nokogiri
17
- requirement: &70093145962180 !ruby/object:Gem::Requirement
18
- none: false
16
+ name: bundler
17
+ requirement: !ruby/object:Gem::Requirement
19
18
  requirements:
20
- - - ~>
19
+ - - "~>"
21
20
  - !ruby/object:Gem::Version
22
- version: '1.4'
23
- type: :runtime
21
+ version: 2.1.4
22
+ type: :development
24
23
  prerelease: false
25
- version_requirements: *70093145962180
26
- - !ruby/object:Gem::Dependency
27
- name: rspec
28
- requirement: &70093145961760 !ruby/object:Gem::Requirement
29
- none: false
24
+ version_requirements: !ruby/object:Gem::Requirement
30
25
  requirements:
31
- - - ! '>='
26
+ - - "~>"
32
27
  - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: *70093145961760
28
+ version: 2.1.4
37
29
  description: Easy and customizable generation of forged data. Can be used as a gem
38
30
  or a rails plugin. Includes rails generators for creating your own forgeries.
39
31
  email:
40
32
  - nate@zencoder.com
41
- - brandon@zencoder.com
33
+ - b@arbini.dev
34
+ - kamil@kieliszczyk.net
42
35
  executables: []
43
36
  extensions: []
44
37
  extra_rdoc_files: []
45
38
  files:
46
- - generators/forgery/forgery_generator.rb
39
+ - ".gitignore"
40
+ - ".travis.yml"
41
+ - Gemfile
42
+ - Gemfile.lock
43
+ - LICENSE
44
+ - README.markdown
45
+ - Rakefile
46
+ - forgery.gemspec
47
47
  - generators/forgery/USAGE
48
+ - generators/forgery/forgery_generator.rb
49
+ - lib/forgery.rb
50
+ - lib/forgery/dictionaries.rb
51
+ - lib/forgery/dictionaries/bics
48
52
  - lib/forgery/dictionaries/cities
49
53
  - lib/forgery/dictionaries/colors
50
54
  - lib/forgery/dictionaries/company_names
@@ -56,6 +60,7 @@ files:
56
60
  - lib/forgery/dictionaries/female_first_names
57
61
  - lib/forgery/dictionaries/frequencies
58
62
  - lib/forgery/dictionaries/genders
63
+ - lib/forgery/dictionaries/ibans
59
64
  - lib/forgery/dictionaries/industries
60
65
  - lib/forgery/dictionaries/job_title_suffixes
61
66
  - lib/forgery/dictionaries/job_titles
@@ -76,59 +81,105 @@ files:
76
81
  - lib/forgery/dictionaries/streets
77
82
  - lib/forgery/dictionaries/top_level_domains
78
83
  - lib/forgery/dictionaries/zones
79
- - lib/forgery/dictionaries.rb
80
84
  - lib/forgery/extend.rb
81
85
  - lib/forgery/extensions/array.rb
82
86
  - lib/forgery/extensions/range.rb
83
87
  - lib/forgery/extensions/string.rb
84
88
  - lib/forgery/file_reader.rb
85
- - lib/forgery/file_writer.rb
89
+ - lib/forgery/forgery.rb
86
90
  - lib/forgery/forgery/address.rb
91
+ - lib/forgery/forgery/bank_account.rb
87
92
  - lib/forgery/forgery/basic.rb
93
+ - lib/forgery/forgery/credit_card.rb
88
94
  - lib/forgery/forgery/currency.rb
89
95
  - lib/forgery/forgery/date.rb
90
96
  - lib/forgery/forgery/email.rb
97
+ - lib/forgery/forgery/geo.rb
91
98
  - lib/forgery/forgery/internet.rb
92
99
  - lib/forgery/forgery/lorem_ipsum.rb
93
100
  - lib/forgery/forgery/monetary.rb
94
101
  - lib/forgery/forgery/name.rb
95
102
  - lib/forgery/forgery/personal.rb
103
+ - lib/forgery/forgery/russian_tax.rb
96
104
  - lib/forgery/forgery/time.rb
97
- - lib/forgery/forgery.rb
98
105
  - lib/forgery/forgery_api.rb
99
106
  - lib/forgery/forgery_railtie.rb
107
+ - lib/forgery/formats.rb
100
108
  - lib/forgery/formats/phone
101
109
  - lib/forgery/formats/street_number
102
110
  - lib/forgery/formats/zip
103
- - lib/forgery/formats.rb
104
111
  - lib/forgery/version.rb
105
- - lib/forgery.rb
106
112
  - lib/generators/forgery/forgery_generator.rb
107
- - LICENSE
108
- - README.markdown
109
- - Rakefile
113
+ - spec/data/dictionaries/code_names
114
+ - spec/data/dictionaries/female_first_names
115
+ - spec/data/documents/mock_web_page.html
116
+ - spec/data/documents/mock_xml_doc.xml
117
+ - spec/dictionaries_spec.rb
118
+ - spec/extensions/array_spec.rb
119
+ - spec/extensions/range_spec.rb
120
+ - spec/extensions/string_spec.rb
121
+ - spec/file_reader_spec.rb
122
+ - spec/forgery/address_spec.rb
123
+ - spec/forgery/bank_account_spec.rb
124
+ - spec/forgery/basic_spec.rb
125
+ - spec/forgery/credit_card_spec.rb
126
+ - spec/forgery/currency_spec.rb
127
+ - spec/forgery/date_spec.rb
128
+ - spec/forgery/internet_spec.rb
129
+ - spec/forgery/lorem_ipsum_spec.rb
130
+ - spec/forgery/monetary_spec.rb
131
+ - spec/forgery/name_spec.rb
132
+ - spec/forgery/personal_spec.rb
133
+ - spec/forgery/russian_tax_spec.rb
134
+ - spec/forgery/time_spec.rb
135
+ - spec/forgery_spec.rb
136
+ - spec/formats_spec.rb
137
+ - spec/spec_helper.rb
110
138
  homepage: http://github.com/sevenwire/forgery
111
139
  licenses: []
140
+ metadata: {}
112
141
  post_install_message:
113
142
  rdoc_options: []
114
143
  require_paths:
115
144
  - lib
116
145
  required_ruby_version: !ruby/object:Gem::Requirement
117
- none: false
118
146
  requirements:
119
- - - ! '>='
147
+ - - ">="
120
148
  - !ruby/object:Gem::Version
121
149
  version: '0'
122
150
  required_rubygems_version: !ruby/object:Gem::Requirement
123
- none: false
124
151
  requirements:
125
- - - ! '>='
152
+ - - ">="
126
153
  - !ruby/object:Gem::Version
127
- version: '0'
154
+ version: 1.3.6
128
155
  requirements: []
129
- rubyforge_project: forgery
130
- rubygems_version: 1.8.10
156
+ rubygems_version: 3.1.2
131
157
  signing_key:
132
- specification_version: 3
158
+ specification_version: 4
133
159
  summary: Easy and customizable generation of forged data.
134
- test_files: []
160
+ test_files:
161
+ - spec/data/dictionaries/code_names
162
+ - spec/data/dictionaries/female_first_names
163
+ - spec/data/documents/mock_web_page.html
164
+ - spec/data/documents/mock_xml_doc.xml
165
+ - spec/dictionaries_spec.rb
166
+ - spec/extensions/array_spec.rb
167
+ - spec/extensions/range_spec.rb
168
+ - spec/extensions/string_spec.rb
169
+ - spec/file_reader_spec.rb
170
+ - spec/forgery/address_spec.rb
171
+ - spec/forgery/bank_account_spec.rb
172
+ - spec/forgery/basic_spec.rb
173
+ - spec/forgery/credit_card_spec.rb
174
+ - spec/forgery/currency_spec.rb
175
+ - spec/forgery/date_spec.rb
176
+ - spec/forgery/internet_spec.rb
177
+ - spec/forgery/lorem_ipsum_spec.rb
178
+ - spec/forgery/monetary_spec.rb
179
+ - spec/forgery/name_spec.rb
180
+ - spec/forgery/personal_spec.rb
181
+ - spec/forgery/russian_tax_spec.rb
182
+ - spec/forgery/time_spec.rb
183
+ - spec/forgery_spec.rb
184
+ - spec/formats_spec.rb
185
+ - spec/spec_helper.rb
@@ -1,54 +0,0 @@
1
- require 'rubygems'
2
- require 'nokogiri'
3
- require 'open-uri'
4
- class Forgery
5
-
6
- class FileWriter
7
-
8
- # Creates a dictionary file with data from a web page
9
- def self.create_dictionary(dictionary_name, source_url, *css_or_xpath)
10
- doc = open_page(source_url)
11
- lines = []
12
- doc.search(*css_or_xpath).each do |node|
13
- lines << node.content
14
- end
15
- raise empty_msg if lines.empty?
16
- create_file(dictionary_name, lines)
17
- end
18
-
19
- # Path to which new dictionaries will be written
20
- # '${GEM_HOME}/lib/forgery/dictionaries' by default
21
- def self.write_path
22
- @@write_path
23
- end
24
-
25
- # Sets path to which new dictionaries will be written
26
- def self.write_to!(path)
27
- @@write_path = File.expand_path path
28
- end
29
-
30
- private
31
- # Creates file with a line for each item in the supplied array
32
- def self.create_file(name, lines)
33
- file_path = File.join(write_path, name)
34
- File.open(file_path, "w") do |f|
35
- lines.each do |line|
36
- stripped_line = line.strip
37
- f.puts stripped_line unless stripped_line.empty?
38
- end
39
- end
40
- puts "Created file #{name} in #{write_path}" unless ENV["TESTING_VIA_RSPEC"]
41
- file_path
42
- end
43
-
44
- # opens url and parses document
45
- def self.open_page(url)
46
- Nokogiri.parse(open url)
47
- end
48
-
49
- def self.empty_msg
50
- msg = %q{No items found. Please double check your css or xpath selectors
51
- and ensure that the site you are trying to reach does not block scripts. }
52
- end
53
- end
54
- end