fake_name_generator 0.0.2 → 0.0.3

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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fake_name_generator (0.0.1)
4
+ fake_name_generator (0.0.2)
5
5
  json (>= 1.5.1)
6
6
 
7
7
  GEM
@@ -9,7 +9,7 @@ GEM
9
9
  specs:
10
10
  diff-lcs (1.1.2)
11
11
  fakeweb (1.3.0)
12
- json (1.5.1)
12
+ json (1.5.3)
13
13
  rspec (2.5.0)
14
14
  rspec-core (~> 2.5.0)
15
15
  rspec-expectations (~> 2.5.0)
@@ -52,6 +52,7 @@ I would love some help and pointers on how to make this a better gem.
52
52
  == Authors
53
53
 
54
54
  * Bill Turner <billturner@gmail.com>
55
+ * Jim Meyer <https://github.com/purp/>
55
56
 
56
57
  == License
57
58
 
@@ -50,7 +50,7 @@ class FakeNameGenerator
50
50
 
51
51
  ##
52
52
  # The current version of the gem
53
- VERSION = '0.0.2'
53
+ VERSION = '0.0.3'
54
54
 
55
55
  ##
56
56
  # The current FakeNameGenerator.com API endpoint
@@ -76,42 +76,7 @@ class FakeNameGenerator
76
76
  class APIConnectionError < StandardError; end
77
77
  class APIKeyInvalidError < StandardError; end
78
78
 
79
- attr_reader :country,
80
- :nameset,
81
- :gender,
82
- :data,
83
- :full_name,
84
- :first_name,
85
- :middle_name,
86
- :last_name,
87
- :maiden_name,
88
- :email_address,
89
- :gender_name,
90
- :street1,
91
- :street2,
92
- :street3,
93
- :city,
94
- :state,
95
- :zip,
96
- :country_code,
97
- :phone_number,
98
- :birthday,
99
- :occupation,
100
- :password,
101
- :domain,
102
- :cc_type,
103
- :cc_number,
104
- :cc_exp_month,
105
- :cc_exp_year,
106
- :cc_cvv,
107
- :national_id,
108
- :national_id_type,
109
- :blood_type,
110
- :weight_kilograms,
111
- :weight_pounds,
112
- :height_centimeters,
113
- :height_inches,
114
- :ups_tracking_number
79
+ attr_reader :country, :data, :gender, :nameset
115
80
 
116
81
  # === Parameters
117
82
  # * _api_key_ = API key for accessing the FakeNameGenerator.com API (required)
@@ -119,7 +84,8 @@ class FakeNameGenerator
119
84
  # * _nameset_ = language-related names returned (default: 'us')
120
85
  # * _gender_ = specify whether random, male, or female values returned (default: random)
121
86
  def initialize(options={})
122
- @api_key = options[:api_key] or raise ArgumentError, "No API key provided"
87
+ options[:api_key] || options[:json_data] or raise ArgumentError, "No API key or JSON data provided"
88
+ @api_key = options[:api_key]
123
89
  @country = options[:country] || DEFAULT_COUNTRY
124
90
  @nameset = options[:nameset] || DEFAULT_NAMESET
125
91
  @gender = options[:gender] || DEFAULT_GENDER
@@ -128,21 +94,29 @@ class FakeNameGenerator
128
94
  raise ArgumentError, "Specified nameset parameter is not valid. Please see FakeNameGenerator::VALID_NAMESET_CODES" unless VALID_NAMESET_CODES.include?(@nameset)
129
95
  raise ArgumentError, "Specified gender parameter is not valid. Please see FakeNameGenerator::VALID_GENDER_CODES" unless VALID_GENDER_CODES.include?(@gender)
130
96
 
131
- url = [API_URL, build_params].join('?')
132
- response = Net::HTTP.get_response(URI.parse(url))
133
-
134
- case response.code
135
- when '500' || 500
136
- raise APIConnectionError, "FakeNameGenerator API not working (500 Error)"
137
- when '403' || 403
138
- raise APIKeyInvalidError, "Provided API key is not valid (403 Error)"
139
- when '200' || 200
140
- @data = JSON.parse(response.body)
141
- build_name
97
+ if options[:json_data]
98
+ @data = JSON.parse(options[:json_data])
142
99
  else
143
- raise StandardError, "Unexpected response from FakeNameGenerator.com API"
100
+ url = [API_URL, build_params].join('?')
101
+ response = Net::HTTP.get_response(URI.parse(url))
102
+
103
+ case response.code
104
+ when '500' || 500
105
+ raise APIConnectionError, "FakeNameGenerator API not working (500 Error)"
106
+ when '403' || 403
107
+ raise APIKeyInvalidError, "Provided API key is not valid (403 Error)"
108
+ when '200' || 200
109
+ @data = JSON.parse(response.body)
110
+ else
111
+ raise StandardError, "Unexpected response from FakeNameGenerator.com API"
112
+ end
144
113
  end
114
+ end
145
115
 
116
+ ##
117
+ # Return the current fake name attributes as JSON
118
+ def to_json
119
+ @data.to_json
146
120
  end
147
121
 
148
122
  private
@@ -151,46 +125,20 @@ class FakeNameGenerator
151
125
  "wsvKey=#{@api_key}&output=#{DEFAULT_OUTPUT}&c=#{@country}&n=#{@nameset}&gen=#{@gender}"
152
126
  end
153
127
 
154
- def build_name
155
- # name, gender info
156
- @gender_name = data['identity']['gender']['value']
157
- @full_name = data['identity']['full_name']['value']
158
- @first_name = data['identity']['given_name']['value']
159
- @middle_name = data['identity']['middle_name']['value']
160
- @last_name = data['identity']['surname']['value']
161
- @maiden_name = data['identity']['maiden_name']['value']
162
- @email_address = data['identity']['email_address']['value']
163
- # street address
164
- @street1 = data['identity']['street1']['value']
165
- @street2 = data['identity']['street2']['value']
166
- @street3 = data['identity']['street3']['value']
167
- @city = data['identity']['city']['value']
168
- @state = data['identity']['state']['value']
169
- @zip = data['identity']['zip']['value']
170
- @country_code = data['identity']['country_code']['value']
171
- @phone_number = data['identity']['phone_number']['value']
172
- # misc personal info
173
- @birthday = data['identity']['birthday']['value']
174
- @occupation = data['identity']['occupation']['value']
175
- @password = data['identity']['password']['value']
176
- @domain = data['identity']['domain']['value']
177
- # credit card info
178
- @cc_type = data['identity']['cc_type']['value']
179
- @cc_number = data['identity']['cc_number']['value']
180
- @cc_exp_month = data['identity']['cc_exp_month']['value']
181
- @cc_exp_year = data['identity']['cc_exp_year']['value']
182
- @cc_cvv = data['identity']['cc_cvv']['value']
183
- # identifying information
184
- @national_id = data['identity']['national_id']['value']
185
- @national_id_type = data['identity']['national_id_type']['value']
186
- @blood_type = data['identity']['blood_type']['value']
187
- @weight_kilograms = data['identity']['weight_kilograms']['value']
188
- @weight_pounds = data['identity']['weight_pounds']['value']
189
- @height_centimeters = data['identity']['height_centimeters']['value']
190
- @height_inches = data['identity']['height_inches']['value']
191
- @ups_tracking_number = data['identity']['ups_tracking_number']['value']
192
-
128
+ METHOD_ALIASES = {
129
+ :gender_name => :gender,
130
+ :first_name => :given_name,
131
+ :last_name => :surname
132
+ }
133
+
134
+ def method_missing(sym)
135
+ if data['identity'][sym.to_s]
136
+ data['identity'][sym.to_s]['value']
137
+ elsif METHOD_ALIASES[sym]
138
+ data['identity'][METHOD_ALIASES[sym].to_s]['value']
139
+ else
140
+ raise NoMethodError, "undefined method \`#{sym}' for #{self}"
141
+ end
193
142
  end
194
-
195
143
  end
196
144
 
@@ -69,52 +69,66 @@ describe FakeNameGenerator do
69
69
 
70
70
  #end
71
71
 
72
- context "valid api key" do
73
-
74
- before do
75
- @fake = FakeNameGenerator.new(:api_key => 'VALID_API_KEY')
76
- end
77
-
78
- it "should fill in the name fields" do
79
- @fake.full_name.should_not be_empty
80
- @fake.first_name.should_not be_empty
81
- @fake.middle_name.should_not be_empty
82
- @fake.last_name.should_not be_empty
83
- @fake.maiden_name.should_not be_empty
84
- end
85
-
86
- it "should fill in the address fields" do
87
- @fake.street1.should_not be_empty
88
- @fake.street2.should_not be_empty
89
- @fake.city.should_not be_empty
90
- @fake.state.should_not be_empty
91
- @fake.zip.should_not be_empty
92
- @fake.country_code.should_not be_empty
93
- @fake.phone_number.should_not be_empty
94
- end
95
-
96
- it "should fill in the credit card fields" do
97
- @fake.cc_type.should_not be_empty
98
- @fake.cc_number.should_not be_empty
99
- @fake.cc_exp_month.should_not be_nil
100
- @fake.cc_exp_year.should_not be_nil
101
- @fake.cc_cvv.should_not be_empty
102
- end
103
-
104
- it "should fill in the other random values" do
105
- @fake.gender_name.should_not be_empty
106
- @fake.birthday.should_not be_empty
107
- @fake.occupation.should_not be_empty
108
- @fake.password.should_not be_empty
109
- @fake.domain.should_not be_empty
110
- @fake.national_id.should_not be_empty
111
- @fake.national_id_type.should_not be_empty
112
- @fake.blood_type.should_not be_empty
113
- @fake.weight_kilograms.should_not be_nil
114
- @fake.weight_pounds.should_not be_nil
115
- @fake.height_centimeters.should_not be_nil
116
- @fake.height_inches.should_not be_nil
117
- @fake.ups_tracking_number.should_not be_empty
72
+ describe "validly initialized" do
73
+
74
+ shared_examples_for "a valid instance" do
75
+ it "should fill in the name fields" do
76
+ fake.full_name.should_not be_empty
77
+ fake.first_name.should_not be_empty
78
+ fake.middle_name.should_not be_empty
79
+ fake.last_name.should_not be_empty
80
+ fake.maiden_name.should_not be_empty
81
+ end
82
+
83
+ it "should fill in the address fields" do
84
+ fake.street1.should_not be_empty
85
+ fake.street2.should_not be_empty
86
+ fake.city.should_not be_empty
87
+ fake.state.should_not be_empty
88
+ fake.zip.should_not be_empty
89
+ fake.country_code.should_not be_empty
90
+ fake.phone_number.should_not be_empty
91
+ end
92
+
93
+ it "should fill in the credit card fields" do
94
+ fake.cc_type.should_not be_empty
95
+ fake.cc_number.should_not be_empty
96
+ fake.cc_exp_month.should_not be_nil
97
+ fake.cc_exp_year.should_not be_nil
98
+ fake.cc_cvv.should_not be_empty
99
+ end
100
+
101
+ it "should fill in the other random values" do
102
+ fake.gender_name.should_not be_empty
103
+ fake.birthday.should_not be_empty
104
+ fake.occupation.should_not be_empty
105
+ fake.password.should_not be_empty
106
+ fake.domain.should_not be_empty
107
+ fake.national_id.should_not be_empty
108
+ fake.national_id_type.should_not be_empty
109
+ fake.blood_type.should_not be_empty
110
+ fake.weight_kilograms.should_not be_nil
111
+ fake.weight_pounds.should_not be_nil
112
+ fake.height_centimeters.should_not be_nil
113
+ fake.height_inches.should_not be_nil
114
+ fake.ups_tracking_number.should_not be_empty
115
+ end
116
+
117
+ it "should provide its data in JSON form when converted to_json" do
118
+ fake.to_json.should == fake.data.to_json
119
+ end
120
+ end
121
+
122
+ describe "from the web" do
123
+ it_should_behave_like "a valid instance" do
124
+ let(:fake) { FakeNameGenerator.new(:api_key => 'VALID_API_KEY') }
125
+ end
126
+ end
127
+
128
+ describe "using JSON data" do
129
+ it_should_behave_like "a valid instance" do
130
+ let(:fake) { FakeNameGenerator.new(:json_data => valid_api_body) }
131
+ end
118
132
  end
119
133
 
120
134
  end
@@ -7,12 +7,20 @@ require 'fakeweb'
7
7
 
8
8
  require 'fake_name_generator'
9
9
 
10
- fixtures = File.dirname(File.expand_path(__FILE__)) + "/fixtures"
10
+ FIXTURES = File.dirname(File.expand_path(__FILE__)) + "/fixtures"
11
+
12
+ def valid_api_body
13
+ File.read("#{FIXTURES}/VALID_API_KEY.json")
14
+ end
15
+
16
+ def invalid_api_body
17
+ File.read("#{FIXTURES}/INVALID_API_KEY.xml")
18
+ end
11
19
 
12
20
  FakeWeb.allow_net_connect = false
13
21
 
14
- FakeWeb.register_uri(:get, %r[http://svc\.webservius\.com/v1/CorbanWork/fakename\?(.*&|)wsvKey=VALID_API_KEY]i, :body => File.read("#{fixtures}/VALID_API_KEY.json", :content_type => 'text/json', :status => ['200', 'OK']))
15
- FakeWeb.register_uri(:get, %r[http://svc\.webservius\.com/v1/CorbanWork/fakename\?(.*&|)wsvKey=INVALID_API_KEY]i, :body => File.read("#{fixtures}/INVALID_API_KEY.xml", :content_type => 'application/xml', :status => ["403", "Forbidden"]))
22
+ FakeWeb.register_uri(:get, %r[http://svc\.webservius\.com/v1/CorbanWork/fakename\?(.*&|)wsvKey=VALID_API_KEY]i, :body => valid_api_body, :content_type => 'text/json', :status => ['200', 'OK'])
23
+ FakeWeb.register_uri(:get, %r[http://svc\.webservius\.com/v1/CorbanWork/fakename\?(.*&|)wsvKey=INVALID_API_KEY]i, :body => invalid_api_body, :content_type => 'application/xml', :status => ["403", "Forbidden"])
16
24
 
17
25
  RSpec.configure do |config|
18
26
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: fake_name_generator
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Bill Turner
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-01 00:00:00 -05:00
13
+ date: 2011-06-22 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -104,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  requirements: []
105
105
 
106
106
  rubyforge_project: fake_name_generator
107
- rubygems_version: 1.5.1
107
+ rubygems_version: 1.6.2
108
108
  signing_key:
109
109
  specification_version: 3
110
110
  summary: A simple Ruby wrapper to the FakeNameGenerator.com API