forgery 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/.gitignore +3 -0
  2. data/LICENSE +20 -0
  3. data/README.markdown +13 -13
  4. data/Rakefile +50 -0
  5. data/VERSION.yml +3 -2
  6. data/forgery.gemspec +120 -0
  7. data/init.rb +1 -0
  8. data/lib/forgery.rb +14 -28
  9. data/lib/forgery/dictionaries.rb +24 -0
  10. data/lib/{dictionaries → forgery/dictionaries}/cities +0 -0
  11. data/lib/{dictionaries → forgery/dictionaries}/colors +0 -0
  12. data/lib/{dictionaries → forgery/dictionaries}/company_names +0 -0
  13. data/lib/{dictionaries → forgery/dictionaries}/countries +0 -0
  14. data/lib/{dictionaries → forgery/dictionaries}/female_first_names +0 -0
  15. data/lib/{dictionaries → forgery/dictionaries}/frequencies +0 -0
  16. data/lib/{dictionaries → forgery/dictionaries}/genders +0 -0
  17. data/lib/{dictionaries → forgery/dictionaries}/languages +0 -0
  18. data/lib/{dictionaries → forgery/dictionaries}/last_names +0 -0
  19. data/lib/{dictionaries → forgery/dictionaries}/lorem_ipsum +0 -0
  20. data/lib/{dictionaries → forgery/dictionaries}/male_first_names +0 -0
  21. data/lib/{dictionaries → forgery/dictionaries}/name_suffixes +0 -0
  22. data/lib/{dictionaries → forgery/dictionaries}/name_titles +0 -0
  23. data/lib/{dictionaries → forgery/dictionaries}/province_abbrevs +0 -0
  24. data/lib/{dictionaries → forgery/dictionaries}/provinces +0 -0
  25. data/lib/{dictionaries → forgery/dictionaries}/races +0 -0
  26. data/lib/{dictionaries → forgery/dictionaries}/shirt_sizes +0 -0
  27. data/lib/{dictionaries → forgery/dictionaries}/state_abbrevs +0 -0
  28. data/lib/{dictionaries → forgery/dictionaries}/states +0 -0
  29. data/lib/{dictionaries → forgery/dictionaries}/street_suffixes +0 -0
  30. data/lib/{dictionaries → forgery/dictionaries}/streets +0 -0
  31. data/lib/{dictionaries → forgery/dictionaries}/top_level_domains +0 -0
  32. data/lib/{extensions → forgery/extensions}/array.rb +0 -0
  33. data/lib/{extensions → forgery/extensions}/hash.rb +0 -0
  34. data/lib/{extensions → forgery/extensions}/range.rb +0 -0
  35. data/lib/{extensions → forgery/extensions}/string.rb +1 -0
  36. data/lib/forgery/file_reader.rb +69 -0
  37. data/lib/forgery/forgery.rb +23 -0
  38. data/lib/{forgeries/address_forgery.rb → forgery/forgery/address.rb} +27 -25
  39. data/lib/{forgeries/basic_forgery.rb → forgery/forgery/basic.rb} +41 -1
  40. data/lib/{forgeries/internet_forgery.rb → forgery/forgery/internet.rb} +4 -2
  41. data/lib/{forgeries/lorem_ipsum_forgery.rb → forgery/forgery/lorem_ipsum.rb} +1 -2
  42. data/lib/{forgeries/monetary_forgery.rb → forgery/forgery/monetary.rb} +3 -1
  43. data/lib/{forgeries/name_forgery.rb → forgery/forgery/name.rb} +2 -1
  44. data/lib/{forgeries/personal_forgery.rb → forgery/forgery/personal.rb} +2 -1
  45. data/lib/forgery/forgery_api.rb +9 -0
  46. data/lib/forgery/formats.rb +24 -0
  47. data/lib/{formats → forgery/formats}/phone +0 -0
  48. data/lib/{formats → forgery/formats}/street_number +0 -0
  49. data/lib/{formats → forgery/formats}/zip +0 -0
  50. data/spec/dictionaries_spec.rb +4 -4
  51. data/spec/file_reader_spec.rb +3 -3
  52. data/spec/{forgeries/address_forgery_spec.rb → forgery/address_spec.rb} +13 -13
  53. data/spec/{forgeries/basic_forgery_spec.rb → forgery/basic_spec.rb} +51 -51
  54. data/spec/{forgeries/internet_forgery_spec.rb → forgery/internet_spec.rb} +6 -6
  55. data/spec/{forgeries/lorem_ipsum_forgery_spec.rb → forgery/lorem_ipsum_spec.rb} +26 -26
  56. data/spec/{forgeries/monetary_forgery_spec.rb → forgery/monetary_spec.rb} +1 -1
  57. data/spec/{forgeries/name_forgery_spec.rb → forgery/name_spec.rb} +1 -1
  58. data/spec/{forgeries/personal_forgery_spec.rb → forgery/personal_spec.rb} +3 -3
  59. data/spec/forgery_spec.rb +33 -6
  60. data/spec/formats_spec.rb +4 -4
  61. metadata +78 -57
  62. data/lib/dictionaries.rb +0 -24
  63. data/lib/file_reader.rb +0 -53
  64. data/lib/formats.rb +0 -24
@@ -0,0 +1,3 @@
1
+ /coverage
2
+ /doc
3
+ /pkg
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007 Sevenwire LLC
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -15,21 +15,21 @@ plugin includes a generator providing directories to make your own forgeries.
15
15
  Install
16
16
  =======
17
17
 
18
- config.gem "sevenwire-forgery", :lib => "forgery", :source => "http://gems.github.com"
18
+ config.gem 'forgery', :source => 'http://gemcutter.org'
19
19
 
20
20
 
21
21
  Generator
22
22
  =========
23
23
 
24
- ./script/generate forgery
24
+ ruby script/generate forgery
25
25
 
26
26
  In a rails project this generator creates:
27
27
 
28
- * RAILS\_ROOT/lib/forgery
29
- * RAILS\_ROOT/lib/forgery/dictionaries
30
- * RAILS\_ROOT/lib/forgery/extensions
31
- * RAILS\_ROOT/lib/forgery/forgeries
32
- * RAILS\_ROOT/lib/forgery/formats
28
+ * Rails.root/lib/forgery
29
+ * Rails.root/lib/forgery/dictionaries
30
+ * Rails.root/lib/forgery/extensions
31
+ * Rails.root/lib/forgery/forgeries
32
+ * Rails.root/lib/forgery/formats
33
33
 
34
34
  You can then use these directories to write your own dictionaries, class
35
35
  extensions, forgeries, and formats.
@@ -49,13 +49,13 @@ Here I'll supply a few examples of how it works, in general. See each forgery
49
49
  for individual examples.
50
50
 
51
51
  # Traditional syntax
52
- BasicForgery.password # => "wYMYvq"
53
- BasicForgery.password :allow_special => true # => ";Qo^N[T"
54
- BasicForgery.hex_color # => "#f4d841"
52
+ Forgery::Basic.password # => "wYMYvq"
53
+ Forgery::Basic.password :allow_special => true # => ";Qo^N[T"
54
+ Forgery::Basic.hex_color # => "#f4d841"
55
55
 
56
- MonetaryForgery.money # => "8.21"
57
- MonetaryForgery.formatted_money # => "$3.25"
58
- MonetaryForgery.money :min => 100, :max => 1000 # => "848.97"
56
+ Forgery::Monetary.money # => "8.21"
57
+ Forgery::Monetary.formatted_money # => "$3.25"
58
+ Forgery::Monetary.money :min => 100, :max => 1000 # => "848.97"
59
59
 
60
60
  # Alternate syntax
61
61
  Forgery(:basic).password # => "b6qZTQEH"
@@ -0,0 +1,50 @@
1
+ require 'rake'
2
+ require 'rake/rdoctask'
3
+ require 'spec/rake/spectask'
4
+
5
+ begin
6
+ require 'sdoc_helpers'
7
+ rescue LoadError
8
+ puts "sdoc support not enabled. Please gem install sdoc-helpers."
9
+ end
10
+
11
+
12
+ desc 'Default: run specs with rcov.'
13
+ task :default => :rcov_spec
14
+
15
+ desc 'Run the specs'
16
+ Spec::Rake::SpecTask.new(:spec) do |t|
17
+ t.spec_opts = ['--colour --format progress --loadby mtime --reverse']
18
+ t.spec_files = FileList['spec/**/*_spec.rb']
19
+ end
20
+
21
+ desc 'Run the specs with rcov'
22
+ Spec::Rake::SpecTask.new("rcov_spec") do |t|
23
+ t.spec_files = FileList['spec/**/*_spec.rb']
24
+ t.spec_opts = ['--color']
25
+ t.rcov = true
26
+ t.rcov_opts = ['--exclude', '^spec,/gems/']
27
+ end
28
+
29
+ Rake::RDocTask.new do |t|
30
+ t.rdoc_dir = 'doc'
31
+ t.rdoc_files.include('lib/**/*.rb')
32
+ t.options << '--inline-source'
33
+ t.options << '--all'
34
+ t.options << '--line-numbers'
35
+ end
36
+
37
+ begin
38
+ require 'jeweler'
39
+ Jeweler::Tasks.new do |s|
40
+ s.name = "forgery"
41
+ s.summary = "Easy and customizable generation of forged data."
42
+ s.email = "nate@sevenwire.com"
43
+ s.homepage = "http://github.com/sevenwire/forgery"
44
+ s.description = "Easy and customizable generation of forged data. Can be used as a gem or a rails plugin. Includes rails generators for creating your own forgeries."
45
+ s.authors = ["Nathan Sutton"]
46
+ end
47
+ Jeweler::GemcutterTasks.new
48
+ rescue LoadError
49
+ puts "Jeweler not available. Install it with: gem install jeweler"
50
+ end
@@ -1,4 +1,5 @@
1
1
  ---
2
- :minor: 2
3
- :patch: 2
2
+ :minor: 3
3
+ :patch: 0
4
+ :build:
4
5
  :major: 0
@@ -0,0 +1,120 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{forgery}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Nathan Sutton"]
12
+ s.date = %q{2009-11-13}
13
+ s.description = %q{Easy and customizable generation of forged data. Can be used as a gem or a rails plugin. Includes rails generators for creating your own forgeries.}
14
+ s.email = %q{nate@sevenwire.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README.markdown",
23
+ "Rakefile",
24
+ "VERSION.yml",
25
+ "forgery.gemspec",
26
+ "generators/forgery/USAGE",
27
+ "generators/forgery/forgery_generator.rb",
28
+ "init.rb",
29
+ "lib/forgery.rb",
30
+ "lib/forgery/dictionaries.rb",
31
+ "lib/forgery/dictionaries/cities",
32
+ "lib/forgery/dictionaries/colors",
33
+ "lib/forgery/dictionaries/company_names",
34
+ "lib/forgery/dictionaries/countries",
35
+ "lib/forgery/dictionaries/female_first_names",
36
+ "lib/forgery/dictionaries/frequencies",
37
+ "lib/forgery/dictionaries/genders",
38
+ "lib/forgery/dictionaries/languages",
39
+ "lib/forgery/dictionaries/last_names",
40
+ "lib/forgery/dictionaries/lorem_ipsum",
41
+ "lib/forgery/dictionaries/male_first_names",
42
+ "lib/forgery/dictionaries/name_suffixes",
43
+ "lib/forgery/dictionaries/name_titles",
44
+ "lib/forgery/dictionaries/province_abbrevs",
45
+ "lib/forgery/dictionaries/provinces",
46
+ "lib/forgery/dictionaries/races",
47
+ "lib/forgery/dictionaries/shirt_sizes",
48
+ "lib/forgery/dictionaries/state_abbrevs",
49
+ "lib/forgery/dictionaries/states",
50
+ "lib/forgery/dictionaries/street_suffixes",
51
+ "lib/forgery/dictionaries/streets",
52
+ "lib/forgery/dictionaries/top_level_domains",
53
+ "lib/forgery/extensions/array.rb",
54
+ "lib/forgery/extensions/hash.rb",
55
+ "lib/forgery/extensions/range.rb",
56
+ "lib/forgery/extensions/string.rb",
57
+ "lib/forgery/file_reader.rb",
58
+ "lib/forgery/forgery.rb",
59
+ "lib/forgery/forgery/address.rb",
60
+ "lib/forgery/forgery/basic.rb",
61
+ "lib/forgery/forgery/internet.rb",
62
+ "lib/forgery/forgery/lorem_ipsum.rb",
63
+ "lib/forgery/forgery/monetary.rb",
64
+ "lib/forgery/forgery/name.rb",
65
+ "lib/forgery/forgery/personal.rb",
66
+ "lib/forgery/forgery_api.rb",
67
+ "lib/forgery/formats.rb",
68
+ "lib/forgery/formats/phone",
69
+ "lib/forgery/formats/street_number",
70
+ "lib/forgery/formats/zip",
71
+ "spec/dictionaries_spec.rb",
72
+ "spec/extensions/array_spec.rb",
73
+ "spec/extensions/range_spec.rb",
74
+ "spec/extensions/string_spec.rb",
75
+ "spec/file_reader_spec.rb",
76
+ "spec/forgery/address_spec.rb",
77
+ "spec/forgery/basic_spec.rb",
78
+ "spec/forgery/internet_spec.rb",
79
+ "spec/forgery/lorem_ipsum_spec.rb",
80
+ "spec/forgery/monetary_spec.rb",
81
+ "spec/forgery/name_spec.rb",
82
+ "spec/forgery/personal_spec.rb",
83
+ "spec/forgery_spec.rb",
84
+ "spec/formats_spec.rb",
85
+ "spec/spec_helper.rb"
86
+ ]
87
+ s.homepage = %q{http://github.com/sevenwire/forgery}
88
+ s.rdoc_options = ["--charset=UTF-8"]
89
+ s.require_paths = ["lib"]
90
+ s.rubygems_version = %q{1.3.5}
91
+ s.summary = %q{Easy and customizable generation of forged data.}
92
+ s.test_files = [
93
+ "spec/dictionaries_spec.rb",
94
+ "spec/extensions/array_spec.rb",
95
+ "spec/extensions/range_spec.rb",
96
+ "spec/extensions/string_spec.rb",
97
+ "spec/file_reader_spec.rb",
98
+ "spec/forgery/address_spec.rb",
99
+ "spec/forgery/basic_spec.rb",
100
+ "spec/forgery/internet_spec.rb",
101
+ "spec/forgery/lorem_ipsum_spec.rb",
102
+ "spec/forgery/monetary_spec.rb",
103
+ "spec/forgery/name_spec.rb",
104
+ "spec/forgery/personal_spec.rb",
105
+ "spec/forgery_spec.rb",
106
+ "spec/formats_spec.rb",
107
+ "spec/spec_helper.rb"
108
+ ]
109
+
110
+ if s.respond_to? :specification_version then
111
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
112
+ s.specification_version = 3
113
+
114
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
115
+ else
116
+ end
117
+ else
118
+ end
119
+ end
120
+
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + '/lib/forgery'
@@ -1,47 +1,33 @@
1
1
  # Require forgeries at the bottom of the file so Forgery works as a gem both
2
2
  # within rails and outside of it.
3
3
 
4
+ current_path = File.expand_path(File.dirname(__FILE__))
5
+
4
6
  # Loading forgery helpers.
5
- require File.expand_path(File.dirname(__FILE__) + '/file_reader')
6
- require File.expand_path(File.dirname(__FILE__) + '/dictionaries')
7
- require File.expand_path(File.dirname(__FILE__) + '/formats')
7
+ require current_path + '/forgery/file_reader'
8
+ require current_path + '/forgery/dictionaries'
9
+ require current_path + '/forgery/formats'
8
10
 
9
11
  # Loading class extensions
10
- Dir[File.expand_path(File.dirname(__FILE__) + '/extensions/**/*.rb')].uniq.each do |file|
12
+ Dir[current_path + '/forgery/extensions/**/*.rb'].uniq.each do |file|
11
13
  require file
12
14
  end
13
15
 
14
- class Forgery
15
-
16
- def self.dictionaries
17
- @@dictionaries ||= Dictionaries.new
18
- end
19
-
20
- def self.formats
21
- @@formats ||= Formats.new
22
- end
16
+ # Load the forgery base class
17
+ require current_path + '/forgery/forgery'
23
18
 
24
- end
25
-
26
- # Alternate Forgery api, see spec/forgery_spec.rb for examples.
27
- def Forgery(forgery, method=nil, *args)
28
- klass = "#{forgery.to_s.camelize}Forgery".constantize
29
- if method
30
- klass.send(method, *args)
31
- else
32
- klass
33
- end
34
- end
19
+ # Load the forgery api method
20
+ require current_path + '/forgery/forgery_api'
35
21
 
36
- # Loading the other forgeries AFTER the initial Forgery class is defined.
37
- Dir[File.expand_path(File.dirname(__FILE__) + '/forgeries/**/*.rb')].uniq.each do |file|
22
+ # Loading the other forgeries AFTER the initial forgery class is defined.
23
+ Dir[current_path + '/forgery/forgery/**/*.rb'].uniq.each do |file|
38
24
  require file
39
25
  end
40
26
 
41
27
  # Loading rails forgeries to override current forgery methods and add new
42
28
  # forgeries
43
- if defined?(RAILS_ROOT)
44
- Dir[File.expand_path(RAILS_ROOT + '/lib/forgery/**/*.rb')].uniq.each do |file|
29
+ if Forgery.rails?
30
+ Dir[File.expand_path(Forgery.rails_root + '/lib/forgery/**/*.rb')].uniq.each do |file|
45
31
  require file
46
32
  end
47
33
  end
@@ -0,0 +1,24 @@
1
+ class Forgery
2
+
3
+ class Dictionaries
4
+
5
+ def initialize
6
+ @dictionaries = {}
7
+ end
8
+
9
+ def [](key)
10
+ symbolized_key = key.to_sym
11
+ @dictionaries[symbolized_key] ||= FileReader.read_dictionary(symbolized_key)
12
+ end
13
+
14
+ def loaded?(key)
15
+ @dictionaries.has_key?(key.to_sym)
16
+ end
17
+
18
+ def reset!
19
+ @dictionaries = {}
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -3,6 +3,7 @@ class String
3
3
  self.gsub(/#{replace}/){ Kernel.rand(10) }
4
4
  end
5
5
 
6
+ # Ripped right out of rails
6
7
  if !defined?(RAILS_ROOT)
7
8
  def camelize(first_letter = :upper)
8
9
  case first_letter
@@ -0,0 +1,69 @@
1
+ class Forgery
2
+
3
+ class FileReader
4
+
5
+ # Returns an array of strings containing each line in the dictionary
6
+ def self.read_dictionary(dictionary)
7
+ read_file(path_to_dictionary(dictionary))
8
+ end
9
+
10
+ # Returns an array of strings containing each line in the format
11
+ def self.read_format(format)
12
+ read_file(path_to_format(format))
13
+ end
14
+
15
+ protected
16
+
17
+ # Reads a file while stripping leading and trailing whitespace, including
18
+ # newlines
19
+ def self.read_file(file)
20
+ lines = []
21
+ IO.foreach(file) do |line|
22
+ lines << line.strip unless line.strip == ''
23
+ end
24
+ lines
25
+ end
26
+
27
+ # Returns the path to a format. It will return the external path if the
28
+ # file exists, otherwise it will return the internal path.
29
+ def self.path_to_format(format)
30
+ if external_path_to_format(format) && File.exists?(external_path_to_format(format))
31
+ external_path_to_format(format)
32
+ else
33
+ internal_path_to_format(format)
34
+ end
35
+ end
36
+
37
+ # Returns the path to a format outside of forgery
38
+ def self.external_path_to_format(format)
39
+ Forgery.rails_root + '/lib/forgery/formats/' + format.to_s if Forgery.rails?
40
+ end
41
+
42
+ # Returns the path to a format inside of forgery
43
+ def self.internal_path_to_format(format)
44
+ File.dirname(__FILE__) + '/formats/' + format.to_s
45
+ end
46
+
47
+ # Returns the path to a dictionary. It will return the external path if
48
+ # the file exists, otherwise it will return the internal path.
49
+ def self.path_to_dictionary(dictionary)
50
+ if external_path_to_dictionary(dictionary) && File.exists?(external_path_to_dictionary(dictionary))
51
+ external_path_to_dictionary(dictionary)
52
+ else
53
+ internal_path_to_dictionary(dictionary)
54
+ end
55
+ end
56
+
57
+ # Returns the path to a dictionary outside of forgery
58
+ def self.external_path_to_dictionary(dictionary)
59
+ Forgery.rails_root + '/lib/forgery/dictionaries/' + dictionary.to_s if Forgery.rails?
60
+ end
61
+
62
+ # Returns the path to a dictionary within forgery
63
+ def self.internal_path_to_dictionary(dictionary)
64
+ File.dirname(__FILE__) + '/dictionaries/' + dictionary.to_s
65
+ end
66
+
67
+ end
68
+
69
+ end