random_api 0.0.1 → 0.1.0

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.
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