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 +4 -4
- data/.gitignore +2 -1
- data/README.md +1 -1
- data/lib/random_api/json_accessor.rb +45 -0
- data/lib/random_api/json_object.rb +34 -0
- data/lib/random_api/untitled +0 -0
- data/lib/random_api/user.rb +31 -61
- data/lib/random_api/version.rb +1 -1
- data/random_api.gemspec +1 -0
- data/spec/random_api/user_spec.rb +9 -3
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d6bf80838887ed05b1536adeca9c0bd1b63791b
|
4
|
+
data.tar.gz: d19e3a88af30cb4ff35ea4e9bc9752a5d62ed463
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37315d8957036a56aec77b47273de49747e92b5984300114edf4538606823b0d896c61fd4890c2fb499ee0249d055de7af05442e66af51b39cfb564532dd2172
|
7
|
+
data.tar.gz: 4a9a8dde5e618e2e2623bd9aa53ac0314b059ccc0623a48c3da730471ce83e4e269c0a71f83da1906d9a75e3e69a3af452e8f6ea5f9e363a0108730a67f3a06f
|
data/.gitignore
CHANGED
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.
|
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
|
data/lib/random_api/user.rb
CHANGED
@@ -1,63 +1,33 @@
|
|
1
1
|
require "random_api/invalid_user_data"
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
data/lib/random_api/version.rb
CHANGED
data/random_api.gemspec
CHANGED
@@ -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,
|
7
|
-
:password, :salt, :md5, :sha1, :sha256,
|
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
|
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:
|
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
|