random_api 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4a074c715909f4eebca52ee9739ff7da2ae1437a
4
- data.tar.gz: 34a296fff2efeb2bba8c1593e102ffb0fe5a32c5
3
+ metadata.gz: 4d6bf80838887ed05b1536adeca9c0bd1b63791b
4
+ data.tar.gz: d19e3a88af30cb4ff35ea4e9bc9752a5d62ed463
5
5
  SHA512:
6
- metadata.gz: 28e32619217dbf35207807defc4e3b1e14023fbb8eb6702c81dd765246b22d2dcbf8efc4980d664c495394b846ada3dc69d8e16e32c96379a7725c247372b508
7
- data.tar.gz: 757cb3917e96b0d7fe84e4bd8b9f7d9b060f94c9ec538aa99bc511ab9e207f97fb517914536916cc39e0ad1d7827cc99241dad04bd3c245504b0118515872e5d
6
+ metadata.gz: 37315d8957036a56aec77b47273de49747e92b5984300114edf4538606823b0d896c61fd4890c2fb499ee0249d055de7af05442e66af51b39cfb564532dd2172
7
+ data.tar.gz: 4a9a8dde5e618e2e2623bd9aa53ac0314b059ccc0623a48c3da730471ce83e4e269c0a71f83da1906d9a75e3e69a3af452e8f6ea5f9e363a0108730a67f3a06f
data/.gitignore CHANGED
@@ -13,4 +13,5 @@
13
13
  *.o
14
14
  *.a
15
15
  mkmf.log
16
- Gemfile.lock
16
+ Gemfile.lock
17
+ *.gem
data/README.md CHANGED
@@ -69,7 +69,7 @@ user.registered # => "1288182167",
69
69
  user.dob # => "146582153",
70
70
  user.phone # => "(555)-942-1322",
71
71
  user.cell # => "(178)-341-1520",
72
- user.SSN # => "137-37-8866",
72
+ user.ssn # => "137-37-8866",
73
73
  user.large_picture # => "http://api.randomuser.me/portraits/women/55.jpg",
74
74
  user.medium_picture # => "http://api.randomuser.me/portraits/med/women/55.jpg",
75
75
  user.thumbnail # => "http://api.randomuser.me/portraits/thumb/women/55.jpg",
@@ -0,0 +1,45 @@
1
+ class JsonAccessor
2
+ attr_accessor :code, :access_methods, :mutator
3
+
4
+ def initialize(code, mutator)
5
+ self.code = code
6
+ self.access_methods = []
7
+ self.mutator = mutator
8
+ build
9
+ end
10
+
11
+ def gen_root_access_lambda
12
+ ->(json) { json }
13
+ end
14
+
15
+ def gen_access_key_lambda(key)
16
+ ->(json) { json[key] }
17
+ end
18
+
19
+ def build
20
+ keys = code.split(".")
21
+ if keys.first == "$"
22
+ access_methods << gen_root_access_lambda
23
+ keys.shift
24
+ end
25
+ keys.each do |key|
26
+ access_methods << gen_access_key_lambda(key)
27
+ end
28
+ end
29
+
30
+ def call(json)
31
+ ret = json
32
+ access_methods.each do |method|
33
+ ret = method.(ret)
34
+ end
35
+ mutate(ret)
36
+ end
37
+
38
+ def mutate(value)
39
+ unless mutator.nil?
40
+ mutator.(value)
41
+ else
42
+ value
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,34 @@
1
+ require "random_api/json_accessor"
2
+
3
+ class JsonObject
4
+ class << self
5
+ def map_method(name, json_path, mutator = nil)
6
+ accessors[name] = JsonAccessor.new(json_path, mutator)
7
+ end
8
+
9
+ def accessors
10
+ @accessors ||= {}
11
+ end
12
+ end
13
+
14
+ attr_accessor :_json
15
+
16
+ def initialize(json)
17
+ self._json = json
18
+ end
19
+
20
+ def respond_to_missing?(name, include_private = false)
21
+ name = name.to_sym
22
+ self.class.accessors.has_key?(name)
23
+ end
24
+
25
+ def method_missing(name, *args)
26
+ name = name.to_sym
27
+ if respond_to_missing?(name)
28
+ accessor = self.class.accessors[name]
29
+ accessor.(self._json)
30
+ else
31
+ super
32
+ end
33
+ end
34
+ end
File without changes
@@ -1,63 +1,33 @@
1
1
  require "random_api/invalid_user_data"
2
-
3
- class RandomApi::User
4
- attr_accessor :gender, :title, :first_name, :last_name, :name, :street, :city,
5
- :state, :zip, :email, :username, :password, :salt, :md5, :sha1,
6
- :sha256, :registered, :dob, :phone, :cell, :ssn, :large_picture,
7
- :medium_picture, :thumbnail, :api_version, :seed, :api_response
8
-
9
- def initialize(user_obj)
10
- begin
11
- load_from_api_response(user_obj)
12
- rescue Exception
13
- raise RandomApi::InvalidUserData, "The user data given is not of the correct format to be parsed."
14
- end
15
- end
16
-
17
- def to_s
18
- name
19
- end
20
-
21
- def inspect
22
- "#<RandomApi::User version=#{api_version} \"#{name}\">"
23
- end
24
-
25
- def to_s
26
- name
27
- end
28
-
29
- def inspect
30
- "#<RandomApi::User version=#{api_version} \"#{name}\">"
31
- end
32
-
33
- private
34
-
35
- def load_from_api_response(user_obj)
36
- self.api_response = user_obj
37
- self.seed = user_obj["seed"]
38
- user_data = user_obj["user"]
39
- user_data.each do |key, value|
40
- next if ["name", "dob", "registered"].include?(key)
41
- key = key.to_s.downcase
42
- if respond_to?("#{key}=", true)
43
- send("#{key}=", value)
44
- end
45
- end
46
- self.title = user_data["name"]["title"]
47
- self.title += "." unless title == "miss"
48
- self.title.capitalize!
49
- self.first_name = user_data["name"]["first"].capitalize
50
- self.last_name = user_data["name"]["last"].capitalize
51
- self.name = "#{title} #{first_name} #{last_name}"
52
- self.dob = DateTime.strptime(user_data["dob"], "%s").to_time
53
- self.registered = DateTime.strptime(user_data["registered"], "%s").to_time
54
- self.street = user_data["location"]["street"].split(" ").map(&:capitalize).join(" ")
55
- self.city = user_data["location"]["city"].capitalize
56
- self.state = user_data["location"]["state"].capitalize
57
- self.zip = user_data["location"]["zip"]
58
- self.large_picture = user_data["picture"]["large"]
59
- self.medium_picture = user_data["picture"]["medium"]
60
- self.thumbnail = user_data["picture"]["thumbnail"]
61
- self.api_version = user_data["version"]
62
- end
2
+ require "random_api/json_object"
3
+
4
+ class RandomApi::User < JsonObject
5
+ map_method :seed, "$.seed"
6
+ map_method :gender, "$.user.gender"
7
+ map_method :name, "$.user.name", ->(val) { [val["title"] == "miss" ? val["title"] : val["title"] + ".", val["first"], val["last"]].map(&:capitalize).join(" ") }
8
+ map_method :title, "$.user.name.title", ->(val) { (val == "miss" ? val : val + ".").capitalize }
9
+ map_method :first_name, "$.user.name.first", ->(val) { val.capitalize }
10
+ map_method :last_name, "$.user.name.last", ->(val) { val.capitalize }
11
+ map_method :address, "$.user.location", ->(val) { val.inject({}) { |h, (k, v)| h[k] = v.split(" ").map(&:capitalize).join(" "); h } }
12
+ map_method :street, "$.user.location.street", ->(val) { val.split(" ").map(&:capitalize).join(" ") }
13
+ map_method :city, "$.user.location.city", ->(val) { val.capitalize.split(" ").map(&:capitalize).join(" ") }
14
+ map_method :state, "$.user.location.state", ->(val) {val.capitalize.split(" ").map(&:capitalize).join(" ") }
15
+ map_method :zip, "$.user.location.zip"
16
+ map_method :email, "$.user.email"
17
+ map_method :username, "$.user.username"
18
+ map_method :password, "$.user.password"
19
+ map_method :salt, "$.user.salt"
20
+ map_method :md5, "$.user.md5"
21
+ map_method :sha1, "$.user.sha1"
22
+ map_method :sha256, "$.user.sha256"
23
+ map_method :registered, "$.user.registered", ->(val) { DateTime.strptime(val, "%s").to_time }
24
+ map_method :dob, "$.user.dob", ->(val) { DateTime.strptime(val, "%s").to_time }
25
+ map_method :phone, "$.user.phone"
26
+ map_method :cell, "$.user.cell"
27
+ map_method :ssn, "$.user.SSN"
28
+ map_method :large_picture, "$.user.picture.large"
29
+ map_method :medium_picture, "$.user.picture.medium"
30
+ map_method :thumbnail, "$.user.picture.thumbnail"
31
+ map_method :api_version, "$.user.version"
32
+ map_method :api_response, "$"
63
33
  end
@@ -1,3 +1,3 @@
1
1
  module RandomApi
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
data/random_api.gemspec CHANGED
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "bundler", "~> 1.7"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
25
  spec.add_development_dependency "rspec", "~> 3.1"
26
+ spec.add_development_dependency "pry", "~> 0.10"
26
27
  end
@@ -3,9 +3,9 @@ require "spec_helper"
3
3
  describe RandomApi::User do
4
4
  subject { RandomApi::User.new(stub_user_return) }
5
5
  it { should respond_to(:gender, :title, :first_name, :last_name, :name,
6
- :street, :city, :state, :zip, :email, :username,
7
- :password, :salt, :md5, :sha1, :sha256, :registered,
8
- :dob, :phone, :cell, :ssn, :large_picture,
6
+ :address, :street, :city, :state, :zip, :email,
7
+ :username, :password, :salt, :md5, :sha1, :sha256,
8
+ :registered, :dob, :phone, :cell, :ssn, :large_picture,
9
9
  :medium_picture, :thumbnail, :api_version, :seed,
10
10
  :api_response) }
11
11
 
@@ -19,6 +19,12 @@ describe RandomApi::User do
19
19
  expect(user.title).to eq("Ms.")
20
20
  expect(user.first_name).to eq("Lois")
21
21
  expect(user.last_name).to eq("Williams")
22
+ expect(user.address).to eq({
23
+ "street" => "1969 Elgin St",
24
+ "city" => "Frederick",
25
+ "state" => "Delaware",
26
+ "zip" => "56298"
27
+ })
22
28
  expect(user.street).to eq("1969 Elgin St")
23
29
  expect(user.city).to eq("Frederick")
24
30
  expect(user.state).to eq("Delaware")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: random_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-12 00:00:00.000000000 Z
11
+ date: 2015-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
69
83
  description: Provide a ruby interface for pulling data from the Random API, fetching
70
84
  random user data.
71
85
  email:
@@ -82,7 +96,10 @@ files:
82
96
  - Rakefile
83
97
  - lib/random_api.rb
84
98
  - lib/random_api/invalid_user_data.rb
99
+ - lib/random_api/json_accessor.rb
100
+ - lib/random_api/json_object.rb
85
101
  - lib/random_api/service.rb
102
+ - lib/random_api/untitled
86
103
  - lib/random_api/user.rb
87
104
  - lib/random_api/version.rb
88
105
  - random_api.gemspec