forgery 0.4.3 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
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