g5_foundation_client 0.0.3 → 0.0.4
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.
- data/README.md +2 -2
- data/g5_foundation_client.gemspec +2 -1
- data/lib/g5_foundation_client.rb +5 -0
- data/lib/g5_foundation_client/deserializers/client.rb +25 -0
- data/lib/g5_foundation_client/deserializers/location.rb +30 -7
- data/lib/g5_foundation_client/deserializers/safe_access.rb +12 -0
- data/lib/g5_foundation_client/models/client.rb +16 -0
- data/lib/g5_foundation_client/models/findable_by_uid.rb +7 -0
- data/lib/g5_foundation_client/models/location.rb +18 -6
- data/lib/g5_foundation_client/rspec.rb +11 -0
- data/lib/g5_foundation_client/rspec/factories.rb +4 -0
- data/lib/g5_foundation_client/version.rb +1 -1
- data/spec/fixtures/client_detail.html +150 -0
- data/spec/fixtures/empty_hcard.html +8 -0
- data/spec/fixtures/location_detail.html +59 -6
- data/spec/lib/g5_foundation_client/deserializers/client_spec.rb +31 -0
- data/spec/lib/g5_foundation_client/deserializers/location_spec.rb +27 -6
- data/spec/lib/g5_foundation_client/models/client_spec.rb +58 -0
- data/spec/lib/g5_foundation_client/models/location_spec.rb +29 -3
- metadata +62 -30
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -38,7 +38,7 @@ require 'g5_foundation_client/rspec'
|
|
38
38
|
|
39
39
|
If your environment includes FactoryGirl, this will also require some factory definitions. You probably want this.
|
40
40
|
|
41
|
-
This will give you a method to stub finding a `G5FoundationClient::Location`. Basic example:
|
41
|
+
This will give you a method to stub finding a `G5FoundationClient::Location` and `G5FoundationClient::Client`. Basic example:
|
42
42
|
```ruby
|
43
43
|
stub_location_for_uid(
|
44
44
|
"http://example.com/location_uid",
|
@@ -46,7 +46,7 @@ stub_location_for_uid(
|
|
46
46
|
)
|
47
47
|
```
|
48
48
|
|
49
|
-
If you have FactoryGirl, you can omit the second argument and it will build one for you. The `stub_location_for_uid` method will return the built
|
49
|
+
If you have FactoryGirl, you can omit the second argument and it will build one for you. The `stub_location_for_uid` method (as well as its counterpart for clients) will return the built model, which can pair nicely with a `let!` call to both build and stub in one shot.
|
50
50
|
|
51
51
|
### Contributing
|
52
52
|
|
@@ -25,7 +25,8 @@ Gem::Specification.new do |spec|
|
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.5"
|
27
27
|
spec.add_development_dependency "rake"
|
28
|
-
|
28
|
+
# 2.99+ is a release to help with upgrading, which... thanks, but not now.
|
29
|
+
spec.add_development_dependency "rspec", "< 2.99"
|
29
30
|
spec.add_development_dependency "webmock"
|
30
31
|
spec.add_development_dependency "pry"
|
31
32
|
end
|
data/lib/g5_foundation_client.rb
CHANGED
@@ -19,5 +19,10 @@ end
|
|
19
19
|
|
20
20
|
require 'g5_foundation_client/fetcher'
|
21
21
|
|
22
|
+
require 'g5_foundation_client/models/findable_by_uid'
|
22
23
|
require 'g5_foundation_client/models/location'
|
24
|
+
require 'g5_foundation_client/models/client'
|
25
|
+
|
26
|
+
require 'g5_foundation_client/deserializers/safe_access'
|
23
27
|
require 'g5_foundation_client/deserializers/location'
|
28
|
+
require 'g5_foundation_client/deserializers/client'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module G5FoundationClient::Deserializers
|
2
|
+
module Client
|
3
|
+
extend SafeAccess
|
4
|
+
|
5
|
+
def self.from_markup(markup)
|
6
|
+
h = Microformats2.parse(markup).cards.first
|
7
|
+
client = G5FoundationClient::Client.new(
|
8
|
+
uid: with_safe_access { h.uid },
|
9
|
+
urn: with_safe_access { h.g5_urn },
|
10
|
+
name: with_safe_access { h.name },
|
11
|
+
vertical: with_safe_access { h.g5_vertical },
|
12
|
+
domain: with_safe_access { h.g5_domain },
|
13
|
+
domain_type: with_safe_access { h.g5_domain_type }
|
14
|
+
)
|
15
|
+
|
16
|
+
location_formats = with_safe_access(stringify: false) { h.orgs.map(&:format) }
|
17
|
+
location_formats ||= []
|
18
|
+
location_formats.each do |hcard|
|
19
|
+
client.locations << G5FoundationClient::Deserializers::Location.from_hcard(hcard)
|
20
|
+
end
|
21
|
+
|
22
|
+
client
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,14 +1,37 @@
|
|
1
1
|
module G5FoundationClient::Deserializers
|
2
2
|
module Location
|
3
|
+
extend SafeAccess
|
4
|
+
|
3
5
|
def self.from_markup(markup)
|
4
6
|
hcard = Microformats2.parse(markup).cards.first
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
from_hcard(hcard)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.from_hcard(hcard)
|
11
|
+
G5FoundationClient::Location.new(hcard_to_hash(hcard))
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.hcard_to_hash(h)
|
15
|
+
{
|
16
|
+
uid: with_safe_access { h.uid },
|
17
|
+
urn: with_safe_access { h.g5_urn },
|
18
|
+
client_uid: with_safe_access { h.org.format.uid.to_s},
|
19
|
+
name: with_safe_access { h.name },
|
20
|
+
phone: with_safe_access { h.adr.format.tel },
|
21
|
+
domain: with_safe_access { h.g5_domain },
|
22
|
+
corporate: with_safe_access { h.g5_corporate },
|
23
|
+
floor_plans: with_safe_access { h.g5_floorplan },
|
24
|
+
primary_amenity: with_safe_access { h.g5_aparment_amenity_1 },
|
25
|
+
qualifier: with_safe_access { h.g5_aparment_feature_1 },
|
26
|
+
primary_landmark: with_safe_access { h.g5_landmark_1 },
|
27
|
+
ga_tracking_id: with_safe_access { h.ga_tracking_id },
|
28
|
+
ga_profile_id: with_safe_access { h.ga_profile_id },
|
29
|
+
neighborhood: with_safe_access { h.adr.format.g5_neighborhood },
|
30
|
+
street_address: with_safe_access { h.adr.format.street_address },
|
31
|
+
region: with_safe_access { h.adr.format.region },
|
32
|
+
locality: with_safe_access { h.adr.format.locality },
|
33
|
+
postal_code: with_safe_access { h.adr.format.postal_code }
|
34
|
+
}
|
12
35
|
end
|
13
36
|
end
|
14
37
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module G5FoundationClient::Deserializers
|
2
|
+
module SafeAccess
|
3
|
+
def with_safe_access(options = {}, &block)
|
4
|
+
options[:stringify] = true if options[:stringify] == nil
|
5
|
+
|
6
|
+
result = block.call
|
7
|
+
options[:stringify] ? result.to_s : result
|
8
|
+
rescue NoMethodError
|
9
|
+
nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class G5FoundationClient::Client
|
2
|
+
include Virtus.model
|
3
|
+
extend G5FoundationClient::FindableByUid
|
4
|
+
|
5
|
+
def self.deserializer_class
|
6
|
+
G5FoundationClient::Deserializers::Client
|
7
|
+
end
|
8
|
+
|
9
|
+
attribute :locations, Array[G5FoundationClient::Location]
|
10
|
+
attribute :uid, String
|
11
|
+
attribute :urn, String
|
12
|
+
attribute :name, String
|
13
|
+
attribute :vertical, String
|
14
|
+
attribute :domain, String
|
15
|
+
attribute :domain_type, String
|
16
|
+
end
|
@@ -1,15 +1,27 @@
|
|
1
1
|
class G5FoundationClient::Location
|
2
2
|
include Virtus.model
|
3
|
+
extend G5FoundationClient::FindableByUid
|
4
|
+
|
5
|
+
def self.deserializer_class
|
6
|
+
G5FoundationClient::Deserializers::Location
|
7
|
+
end
|
3
8
|
|
4
9
|
attribute :uid, String
|
10
|
+
attribute :urn, String
|
11
|
+
attribute :client_uid, String
|
5
12
|
attribute :name, String
|
6
13
|
attribute :phone, String
|
14
|
+
attribute :domain, String
|
15
|
+
attribute :corporate, Boolean
|
16
|
+
attribute :floor_plans, String
|
17
|
+
attribute :primary_amenity, String
|
18
|
+
attribute :qualifier, String
|
19
|
+
attribute :primary_landmark, String
|
7
20
|
attribute :ga_tracking_id, String
|
8
21
|
attribute :ga_profile_id, String
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
22
|
+
attribute :neighborhood, String
|
23
|
+
attribute :street_address, String
|
24
|
+
attribute :region, String
|
25
|
+
attribute :locality, String
|
26
|
+
attribute :postal_code, String
|
15
27
|
end
|
@@ -9,6 +9,17 @@ module G5FoundationClient::RspecHelpers
|
|
9
9
|
|
10
10
|
location
|
11
11
|
end
|
12
|
+
|
13
|
+
def stub_client_for_uid(uid, client = nil)
|
14
|
+
client ||= FactoryGirl.build(:g5_client)
|
15
|
+
|
16
|
+
G5FoundationClient::Client.
|
17
|
+
stub(:find_by_uid).
|
18
|
+
with(uid).
|
19
|
+
and_return(client)
|
20
|
+
|
21
|
+
client
|
22
|
+
end
|
12
23
|
end
|
13
24
|
|
14
25
|
RSpec.configure do |config|
|
@@ -0,0 +1,150 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head></head>
|
4
|
+
<body>
|
5
|
+
<article>
|
6
|
+
<div class="h-card">
|
7
|
+
<h2>
|
8
|
+
<a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
|
9
|
+
<small class="p-g5-vertical">Apartments</small> |
|
10
|
+
<small class="u-g5-domain">http://example.com/</small> |
|
11
|
+
<small class="p-g5-domain-type">MultiDomainClient</small>
|
12
|
+
<small class="p-g5-urn">g5-c-1234-client</small>
|
13
|
+
</h2>
|
14
|
+
<p class="p-adr h-adr">
|
15
|
+
<span class="p-street-address">
|
16
|
+
455 NW Franklin
|
17
|
+
|
18
|
+
</span>
|
19
|
+
<span>
|
20
|
+
<span class="p-locality">Bend</span>
|
21
|
+
<span class="p-region">OR</span>
|
22
|
+
<span class="p-postal-code">97701</span>
|
23
|
+
</span>
|
24
|
+
<span class="p-tel p-fax"></span>
|
25
|
+
<span class="u-email"></span>
|
26
|
+
</p>
|
27
|
+
<div>
|
28
|
+
<h4>Locations</h4>
|
29
|
+
<ul class="list-unstyled">
|
30
|
+
<li class="p-org h-card">
|
31
|
+
<a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location">Test Location 1</a>
|
32
|
+
<a class="u-url u-g5-domain" href="http://www.salidadelsolapartments.com">http://www.salidadelsolapartments.com</a>
|
33
|
+
<p class="p-adr h-adr">
|
34
|
+
<span class="p-street-address">
|
35
|
+
1125 Sunrise Blvd.
|
36
|
+
|
37
|
+
</span>
|
38
|
+
<span class="p-g5-neighborhood">West</span>
|
39
|
+
<span>
|
40
|
+
<span class="p-locality">Ventura</span>
|
41
|
+
<span class="p-region">CA</span>
|
42
|
+
<span class="p-postal-code">93001</span>
|
43
|
+
</span>
|
44
|
+
<span class="p-tel">805-798-1256</span>
|
45
|
+
<span class="p-tel p-fax"></span>
|
46
|
+
<span class="u-email">info@salidadelsolapts.com</span>
|
47
|
+
</p>
|
48
|
+
<p>
|
49
|
+
<strong>Corporate:</strong>
|
50
|
+
<br />
|
51
|
+
<span class="p-g5-corporate">false</span>
|
52
|
+
</p>
|
53
|
+
<p>
|
54
|
+
<strong>Floor Plans:</strong>
|
55
|
+
<br />
|
56
|
+
<span class="p-g5-floorplan">1, 2, 3, studio Apartments</span>
|
57
|
+
</p>
|
58
|
+
<p>
|
59
|
+
<strong>Landmarks:</strong>
|
60
|
+
<br />
|
61
|
+
<span class="p-g5-landmark-1">Venture Marina</span>
|
62
|
+
<br />
|
63
|
+
<span class="p-g5-landmark-2">River Ridge Golf Course</span>
|
64
|
+
</p>
|
65
|
+
<p>
|
66
|
+
<strong>Property Features or Qualifiers:</strong>
|
67
|
+
<br />
|
68
|
+
<span class="p-g5-aparment-feature-1">Luxury</span>
|
69
|
+
<br />
|
70
|
+
<span class="p-g5-aparment-feature-2">Gated</span>
|
71
|
+
<br />
|
72
|
+
<span class="p-g5-aparment-feature-3"></span>
|
73
|
+
</p>
|
74
|
+
<p>
|
75
|
+
<strong>Primary Amenities:</strong>
|
76
|
+
<br />
|
77
|
+
<span class="p-g5-aparment-amenity-1">Stainless Steel Appliances</span>
|
78
|
+
<br />
|
79
|
+
<span class="p-g5-community-amenity-1">Fitness Center</span>
|
80
|
+
</p>
|
81
|
+
|
82
|
+
<h4>Client</h4>
|
83
|
+
<p class="p-org h-card">
|
84
|
+
<a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
|
85
|
+
</p>
|
86
|
+
</li>
|
87
|
+
<li class="p-org h-card">
|
88
|
+
<a class="p-name u-uid u-url" href="http://g5-hub.herokuapp.com/clients/g5-c-1servrzr-luxe-apartment-company/locations/g5-cl-1servrzz-depot-17">Depot 17</a>
|
89
|
+
<a class="u-url u-g5-domain" href="http://www.depot17apartments.com">http://www.depot17apartments.com</a>
|
90
|
+
<p class="p-adr h-adr">
|
91
|
+
<span class="p-street-address">
|
92
|
+
2675 Station St.
|
93
|
+
|
94
|
+
</span>
|
95
|
+
<span class="p-g5-neighborhood">Park Slope</span>
|
96
|
+
<span>
|
97
|
+
<span class="p-locality">Brooklyn</span>
|
98
|
+
<span class="p-region">NY</span>
|
99
|
+
<span class="p-postal-code">11215</span>
|
100
|
+
</span>
|
101
|
+
<span class="p-tel">718-639-3915</span>
|
102
|
+
<span class="p-tel p-fax"></span>
|
103
|
+
<span class="u-email">info@depot17.com</span>
|
104
|
+
</p>
|
105
|
+
<p>
|
106
|
+
<strong>Corporate:</strong>
|
107
|
+
<br />
|
108
|
+
<span class="p-g5-corporate">false</span>
|
109
|
+
</p>
|
110
|
+
<p>
|
111
|
+
<strong>Floor Plans:</strong>
|
112
|
+
<br />
|
113
|
+
<span class="p-g5-floorplan"> Apartments</span>
|
114
|
+
</p>
|
115
|
+
<p>
|
116
|
+
<strong>Landmarks:</strong>
|
117
|
+
<br />
|
118
|
+
<span class="p-g5-landmark-1"></span>
|
119
|
+
<br />
|
120
|
+
<span class="p-g5-landmark-2"></span>
|
121
|
+
</p>
|
122
|
+
<p>
|
123
|
+
<strong>Property Features or Qualifiers:</strong>
|
124
|
+
<br />
|
125
|
+
<span class="p-g5-aparment-feature-1"></span>
|
126
|
+
<br />
|
127
|
+
<span class="p-g5-aparment-feature-2"></span>
|
128
|
+
<br />
|
129
|
+
<span class="p-g5-aparment-feature-3"></span>
|
130
|
+
</p>
|
131
|
+
<p>
|
132
|
+
<strong>Primary Amenities:</strong>
|
133
|
+
<br />
|
134
|
+
<span class="p-g5-aparment-amenity-1"></span>
|
135
|
+
<br />
|
136
|
+
<span class="p-g5-community-amenity-1"></span>
|
137
|
+
</p>
|
138
|
+
|
139
|
+
<h4>Client</h4>
|
140
|
+
<p class="p-org h-card">
|
141
|
+
<a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
|
142
|
+
</p>
|
143
|
+
</li>
|
144
|
+
</ul>
|
145
|
+
</div>
|
146
|
+
</div>
|
147
|
+
|
148
|
+
</article>
|
149
|
+
</body>
|
150
|
+
</html>
|
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
<!DOCTYPE html>
|
3
2
|
<html>
|
4
3
|
<head></head>
|
@@ -6,24 +5,66 @@
|
|
6
5
|
<section class="h-card">
|
7
6
|
<h2>
|
8
7
|
<a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location">Test Location</a>
|
8
|
+
<small class="p-g5-urn">g5-cl-1234-location</small>
|
9
9
|
</h2>
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
<h4>Domain</h4>
|
12
|
+
<a class="u-url u-g5-domain" href="http://example.com/">http://example.com/</a>
|
13
13
|
|
14
14
|
<h4>Address</h4>
|
15
15
|
<p class="p-adr h-adr">
|
16
16
|
<span class="p-street-address">
|
17
17
|
123 Test Way
|
18
|
+
|
18
19
|
</span>
|
20
|
+
<span class="p-g5-neighborhood">West</span>
|
19
21
|
<span>
|
20
22
|
<span class="p-locality">Testville</span>
|
21
|
-
<span class="p-region">
|
22
|
-
<span class="p-postal-code">
|
23
|
+
<span class="p-region">TK</span>
|
24
|
+
<span class="p-postal-code">31324</span>
|
23
25
|
</span>
|
24
26
|
<span class="p-tel">123-123-1234</span>
|
25
27
|
<span class="p-tel p-fax"></span>
|
26
|
-
<span class="u-email"
|
28
|
+
<span class="u-email">info@salidadelsolapts.com</span>
|
29
|
+
</p>
|
30
|
+
|
31
|
+
<p>
|
32
|
+
<strong>Corporate:</strong>
|
33
|
+
<br />
|
34
|
+
<span class="p-g5-corporate">true</span>
|
35
|
+
</p>
|
36
|
+
<p>
|
37
|
+
<strong>Hours:</strong>
|
38
|
+
<br />
|
39
|
+
<pre class="p-g5-hour">Mon-Fri: 7am - 6pm, Sat: 8am - 3pm, Sunday: Closed</pre>
|
40
|
+
</p>
|
41
|
+
<p>
|
42
|
+
<strong>Floor Plans:</strong>
|
43
|
+
<br />
|
44
|
+
<span class="p-g5-floorplan">1, 2, 3, studio apartments</span>
|
45
|
+
</p>
|
46
|
+
<p>
|
47
|
+
<strong>Landmarks:</strong>
|
48
|
+
<br />
|
49
|
+
<span class="p-g5-landmark-1">Venture Marina</span>
|
50
|
+
<br />
|
51
|
+
<span class="p-g5-landmark-2">River Ridge Golf Course</span>
|
52
|
+
</p>
|
53
|
+
<p>
|
54
|
+
<strong>Property Features or Qualifiers:</strong>
|
55
|
+
<br />
|
56
|
+
<span class="p-g5-aparment-feature-1">Luxury</span>
|
57
|
+
<br />
|
58
|
+
<span class="p-g5-aparment-feature-2">Gated</span>
|
59
|
+
<br />
|
60
|
+
<span class="p-g5-aparment-feature-3"></span>
|
61
|
+
</p>
|
62
|
+
<p>
|
63
|
+
<strong>Primary Amenities:</strong>
|
64
|
+
<br />
|
65
|
+
<span class="p-g5-aparment-amenity-1">Stainless Steel Appliances</span>
|
66
|
+
<br />
|
67
|
+
<span class="p-g5-community-amenity-1">Fitness Center</span>
|
27
68
|
</p>
|
28
69
|
|
29
70
|
<h4>Google Analytics</h4>
|
@@ -35,10 +76,22 @@
|
|
35
76
|
<dd class="p-ga-profile-id">ga:1234</dd>
|
36
77
|
</dl>
|
37
78
|
|
79
|
+
<dl>
|
80
|
+
<dt>Twitter</dt>
|
81
|
+
<dd class="p-nickname p-g5-nickname-twitter">G5Platform</dd>
|
82
|
+
<dt>Facebook</dt>
|
83
|
+
<dd class="p-nickname p-g5-nickname-facebook">GetG5</dd>
|
84
|
+
<dt>Yelp</dt>
|
85
|
+
<dd class="p-nickname p-g5-nickname-yelp">g5-bend</dd>
|
86
|
+
<dt>Foursquare</dt>
|
87
|
+
<dd class="p-nickname p-g5-nickname-foursquare">https://foursquare.com/v/g5-search-marketing/4b720385f964a5201b6a2de3</dd>
|
88
|
+
</dl>
|
89
|
+
|
38
90
|
<h4>Client</h4>
|
39
91
|
<p class="p-org h-card">
|
40
92
|
<a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
|
41
93
|
</p>
|
42
94
|
</section>
|
95
|
+
|
43
96
|
</body>
|
44
97
|
</html>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe G5FoundationClient::Deserializers::Client do
|
4
|
+
describe ".from_markup" do
|
5
|
+
subject(:client) { G5FoundationClient::Deserializers::Client.from_markup(markup) }
|
6
|
+
|
7
|
+
context "with many fields provided" do
|
8
|
+
let(:markup) { fixture("client_detail.html") }
|
9
|
+
|
10
|
+
its(:uid) { should eq("http://example.com/clients/g5-c-1234-client") }
|
11
|
+
its(:urn) { should eq("g5-c-1234-client") }
|
12
|
+
its(:name) { should eq("Test Client") }
|
13
|
+
its(:vertical) { should eq("Apartments") }
|
14
|
+
its(:domain) { should eq("http://example.com/") }
|
15
|
+
its(:domain_type) { should eq("MultiDomainClient") }
|
16
|
+
|
17
|
+
describe "#locations" do
|
18
|
+
it "instantiates associated Locations" do
|
19
|
+
expect(client.locations.length).to eq(2)
|
20
|
+
expect(client.locations.first.name).to eq("Test Location 1")
|
21
|
+
expect(client.locations.first.uid).to eq("http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "missing many fields" do
|
27
|
+
let(:markup) { fixture("empty_hcard.html") }
|
28
|
+
its(:uid) { should be_nil }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -2,13 +2,34 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe G5FoundationClient::Deserializers::Location do
|
4
4
|
describe ".from_markup" do
|
5
|
-
let(:markup) { fixture("location_detail.html") }
|
6
5
|
subject { G5FoundationClient::Deserializers::Location.from_markup(markup) }
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
context "with many fields provided" do
|
8
|
+
let(:markup) { fixture("location_detail.html") }
|
9
|
+
|
10
|
+
its(:uid) { should eq("http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location") }
|
11
|
+
its(:urn) { should eq("g5-cl-1234-location") }
|
12
|
+
its(:client_uid) { should eq("http://example.com/clients/g5-c-1234-client") }
|
13
|
+
its(:name) { should eq("Test Location") }
|
14
|
+
its(:phone) { should eq("123-123-1234") }
|
15
|
+
its(:domain) { should eq("http://example.com/") }
|
16
|
+
its(:corporate) { should be_true }
|
17
|
+
its(:floor_plans) { should eq("1, 2, 3, studio apartments") }
|
18
|
+
its(:primary_amenity) { should eq("Stainless Steel Appliances") }
|
19
|
+
its(:qualifier) { should eq("Luxury") }
|
20
|
+
its(:primary_landmark) { should eq("Venture Marina") }
|
21
|
+
its(:ga_tracking_id) { should eq("UA-1234-1") }
|
22
|
+
its(:ga_profile_id) { should eq("ga:1234") }
|
23
|
+
its(:neighborhood) { should eq("West") }
|
24
|
+
its(:street_address) { should eq("123 Test Way") }
|
25
|
+
its(:locality) { should eq("Testville") }
|
26
|
+
its(:region) { should eq("TK") }
|
27
|
+
its(:postal_code) { should eq("31324") }
|
28
|
+
end
|
29
|
+
|
30
|
+
context "missing many fields" do
|
31
|
+
let(:markup) { fixture("empty_hcard.html") }
|
32
|
+
its(:uid) { should be_nil }
|
33
|
+
end
|
13
34
|
end
|
14
35
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe G5FoundationClient::Client do
|
4
|
+
before { G5FoundationClient.access_token = "token" }
|
5
|
+
|
6
|
+
describe "instantiating with a hash" do
|
7
|
+
subject do
|
8
|
+
G5FoundationClient::Client.new(
|
9
|
+
uid: "http://example.com/urn",
|
10
|
+
urn: "urn",
|
11
|
+
name: "Test Name",
|
12
|
+
vertical: "Senior",
|
13
|
+
domain: "example.com",
|
14
|
+
domain_type: "MultiDomainClient"
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
its(:uid) { should eql("http://example.com/urn") }
|
19
|
+
its(:urn) { should eql("urn") }
|
20
|
+
its(:name) { should eql("Test Name") }
|
21
|
+
its(:vertical) { should eql("Senior") }
|
22
|
+
its(:domain) { should eql("example.com") }
|
23
|
+
its(:domain_type) { should eql("MultiDomainClient") }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "instantiating with nested hash of Locations" do
|
27
|
+
subject(:client) { G5FoundationClient::Client.new(attributes) }
|
28
|
+
|
29
|
+
context "when the nested parameters are correct" do
|
30
|
+
let(:attributes) do
|
31
|
+
{
|
32
|
+
name: "Client Name",
|
33
|
+
locations: [
|
34
|
+
{ name: "Location 1" },
|
35
|
+
{ name: "Location 2" }
|
36
|
+
]
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
its(:name) { should eq("Client Name") }
|
41
|
+
|
42
|
+
it "instantiates associated Locations" do
|
43
|
+
expect(client.locations.length).to eq(2)
|
44
|
+
expect(client.locations.all? { |l| l.is_a?(G5FoundationClient::Location) }).to be_true
|
45
|
+
expect(client.locations.map(&:name)).to eq([ "Location 1", "Location 2" ])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ".find_by_uid" do
|
51
|
+
let(:uid) { "http://example.com/clients/g5-c-1234-client" }
|
52
|
+
let(:response) { fixture("client_detail.html") }
|
53
|
+
before { stub_json(uid + "?access_token=token", response) }
|
54
|
+
subject(:find) { G5FoundationClient::Client.find_by_uid(uid) }
|
55
|
+
|
56
|
+
its(:name) { should eq("Test Client") }
|
57
|
+
end
|
58
|
+
end
|
@@ -6,19 +6,45 @@ describe G5FoundationClient::Location do
|
|
6
6
|
describe "instantiating with a hash" do
|
7
7
|
subject do
|
8
8
|
G5FoundationClient::Location.new(
|
9
|
-
uid: "http://example.com/
|
9
|
+
uid: "http://example.com/urn",
|
10
|
+
urn: "urn",
|
11
|
+
client_uid: "http://example.com/client_uid",
|
10
12
|
name: "Test Name",
|
11
13
|
phone: "123-123-1234",
|
14
|
+
domain: "example.com",
|
15
|
+
corporate: "true",
|
16
|
+
floor_plans: "Apartments",
|
17
|
+
primary_amenity: "Pony Rides",
|
18
|
+
primary_landmark: "An enormous bust of Brett Favre",
|
19
|
+
qualifier: "I have no idea what a qualifier is",
|
12
20
|
ga_tracking_id: "UA-1234-5",
|
13
|
-
ga_profile_id: "ga:1234"
|
21
|
+
ga_profile_id: "ga:1234",
|
22
|
+
neighborhood: "Wrong side of the tracks",
|
23
|
+
street_address: "123 Test Way",
|
24
|
+
region: "South Testakota",
|
25
|
+
locality: "Testville",
|
26
|
+
postal_code: "31337"
|
14
27
|
)
|
15
28
|
end
|
16
29
|
|
17
|
-
its(:uid) { should eql("http://example.com/
|
30
|
+
its(:uid) { should eql("http://example.com/urn") }
|
31
|
+
its(:urn) { should eql("urn") }
|
32
|
+
its(:client_uid) { should eql("http://example.com/client_uid") }
|
18
33
|
its(:name) { should eql("Test Name") }
|
19
34
|
its(:phone) { should eql("123-123-1234") }
|
35
|
+
its(:domain) { should eql("example.com") }
|
36
|
+
its(:corporate) { should be_true }
|
37
|
+
its(:floor_plans) { should eql("Apartments") }
|
38
|
+
its(:primary_amenity) { should eql("Pony Rides") }
|
39
|
+
its(:primary_landmark) { should eql("An enormous bust of Brett Favre") }
|
40
|
+
its(:qualifier) { should eql("I have no idea what a qualifier is") }
|
20
41
|
its(:ga_tracking_id) { should eql("UA-1234-5") }
|
21
42
|
its(:ga_profile_id) { should eql("ga:1234") }
|
43
|
+
its(:neighborhood) { should eql("Wrong side of the tracks") }
|
44
|
+
its(:street_address) { should eql("123 Test Way") }
|
45
|
+
its(:region) { should eql("South Testakota") }
|
46
|
+
its(:locality) { should eql("Testville") }
|
47
|
+
its(:postal_code) { should eql("31337") }
|
22
48
|
end
|
23
49
|
|
24
50
|
describe ".find_by_uid" do
|
metadata
CHANGED
@@ -1,139 +1,158 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: g5_foundation_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Don Petersen
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-07-10 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: virtus
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '0'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '0'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: httparty
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :runtime
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: microformats2
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: g5_authentication_client
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- -
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: '0.2'
|
62
70
|
type: :runtime
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- -
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: '0.2'
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: bundler
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- -
|
83
|
+
- - ~>
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '1.5'
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- -
|
91
|
+
- - ~>
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '1.5'
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: rake
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- -
|
99
|
+
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0'
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- -
|
107
|
+
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: '0'
|
97
110
|
- !ruby/object:Gem::Dependency
|
98
111
|
name: rspec
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - <
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '2.99'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
107
122
|
requirements:
|
108
|
-
- -
|
123
|
+
- - <
|
109
124
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
125
|
+
version: '2.99'
|
111
126
|
- !ruby/object:Gem::Dependency
|
112
127
|
name: webmock
|
113
128
|
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
114
130
|
requirements:
|
115
|
-
- -
|
131
|
+
- - ! '>='
|
116
132
|
- !ruby/object:Gem::Version
|
117
133
|
version: '0'
|
118
134
|
type: :development
|
119
135
|
prerelease: false
|
120
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
121
138
|
requirements:
|
122
|
-
- -
|
139
|
+
- - ! '>='
|
123
140
|
- !ruby/object:Gem::Version
|
124
141
|
version: '0'
|
125
142
|
- !ruby/object:Gem::Dependency
|
126
143
|
name: pry
|
127
144
|
requirement: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
128
146
|
requirements:
|
129
|
-
- -
|
147
|
+
- - ! '>='
|
130
148
|
- !ruby/object:Gem::Version
|
131
149
|
version: '0'
|
132
150
|
type: :development
|
133
151
|
prerelease: false
|
134
152
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
135
154
|
requirements:
|
136
|
-
- -
|
155
|
+
- - ! '>='
|
137
156
|
- !ruby/object:Gem::Version
|
138
157
|
version: '0'
|
139
158
|
description: Client gem to interact with G5 services.
|
@@ -143,56 +162,69 @@ executables: []
|
|
143
162
|
extensions: []
|
144
163
|
extra_rdoc_files: []
|
145
164
|
files:
|
146
|
-
-
|
147
|
-
-
|
148
|
-
-
|
165
|
+
- .gitignore
|
166
|
+
- .rspec
|
167
|
+
- .travis.yml
|
149
168
|
- Gemfile
|
150
169
|
- LICENSE.txt
|
151
170
|
- README.md
|
152
171
|
- Rakefile
|
153
172
|
- g5_foundation_client.gemspec
|
154
173
|
- lib/g5_foundation_client.rb
|
174
|
+
- lib/g5_foundation_client/deserializers/client.rb
|
155
175
|
- lib/g5_foundation_client/deserializers/location.rb
|
176
|
+
- lib/g5_foundation_client/deserializers/safe_access.rb
|
156
177
|
- lib/g5_foundation_client/fetcher.rb
|
178
|
+
- lib/g5_foundation_client/models/client.rb
|
179
|
+
- lib/g5_foundation_client/models/findable_by_uid.rb
|
157
180
|
- lib/g5_foundation_client/models/location.rb
|
158
181
|
- lib/g5_foundation_client/record_not_found_exception.rb
|
159
182
|
- lib/g5_foundation_client/rspec.rb
|
160
183
|
- lib/g5_foundation_client/rspec/factories.rb
|
161
184
|
- lib/g5_foundation_client/version.rb
|
185
|
+
- spec/fixtures/client_detail.html
|
186
|
+
- spec/fixtures/empty_hcard.html
|
162
187
|
- spec/fixtures/location_detail.html
|
188
|
+
- spec/lib/g5_foundation_client/deserializers/client_spec.rb
|
163
189
|
- spec/lib/g5_foundation_client/deserializers/location_spec.rb
|
164
190
|
- spec/lib/g5_foundation_client/fetcher_spec.rb
|
191
|
+
- spec/lib/g5_foundation_client/models/client_spec.rb
|
165
192
|
- spec/lib/g5_foundation_client/models/location_spec.rb
|
166
193
|
- spec/lib/g5_foundation_client_spec.rb
|
167
194
|
- spec/spec_helper.rb
|
168
195
|
homepage: https://github.com/g5/g5_foundation_client
|
169
196
|
licenses:
|
170
197
|
- MIT
|
171
|
-
metadata: {}
|
172
198
|
post_install_message:
|
173
199
|
rdoc_options: []
|
174
200
|
require_paths:
|
175
201
|
- lib
|
176
202
|
required_ruby_version: !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
177
204
|
requirements:
|
178
|
-
- -
|
205
|
+
- - ! '>='
|
179
206
|
- !ruby/object:Gem::Version
|
180
207
|
version: '0'
|
181
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
|
+
none: false
|
182
210
|
requirements:
|
183
|
-
- -
|
211
|
+
- - ! '>='
|
184
212
|
- !ruby/object:Gem::Version
|
185
213
|
version: '0'
|
186
214
|
requirements: []
|
187
215
|
rubyforge_project:
|
188
|
-
rubygems_version:
|
216
|
+
rubygems_version: 1.8.23
|
189
217
|
signing_key:
|
190
|
-
specification_version:
|
218
|
+
specification_version: 3
|
191
219
|
summary: Client gem to interact with G5 services.
|
192
220
|
test_files:
|
221
|
+
- spec/fixtures/client_detail.html
|
222
|
+
- spec/fixtures/empty_hcard.html
|
193
223
|
- spec/fixtures/location_detail.html
|
224
|
+
- spec/lib/g5_foundation_client/deserializers/client_spec.rb
|
194
225
|
- spec/lib/g5_foundation_client/deserializers/location_spec.rb
|
195
226
|
- spec/lib/g5_foundation_client/fetcher_spec.rb
|
227
|
+
- spec/lib/g5_foundation_client/models/client_spec.rb
|
196
228
|
- spec/lib/g5_foundation_client/models/location_spec.rb
|
197
229
|
- spec/lib/g5_foundation_client_spec.rb
|
198
230
|
- spec/spec_helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 9d3b6df46834c3a8f1250528ac377b77a36f4cd1
|
4
|
-
data.tar.gz: ab362282521fbdba9361ee9a231fe734034f2bbf
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 7c2f61ee0703f0abf6807391e4c6a63966e6008b3dccd1fa290b0388d0bdbae400fe0849a1ab2b733aaf9b23425872da390d867922ee2274d82c821e619b1dd3
|
7
|
-
data.tar.gz: 308ca96c321105771c4239f897ce9213dc2946506f02f50b4c6547ec4ee71eb77d117ed1811d25f1667492a993f94117376f7732e9557a9ce03387b301675a05
|