citygrid_api 0.0.1 → 0.0.2
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/VERSION +1 -1
- data/citygrid_api.gemspec +12 -10
- data/lib/citygrid/abstraction/collection.rb +15 -0
- data/lib/citygrid/abstraction/item.rb +11 -0
- data/lib/citygrid/abstraction/requestable.rb +38 -0
- data/lib/citygrid/abstraction/super_array.rb +22 -0
- data/lib/citygrid/abstraction/super_hash.rb +26 -0
- data/lib/citygrid/abstraction.rb +3 -0
- data/lib/citygrid/api/base.rb +18 -2
- data/lib/citygrid/api/content/places/search.rb +0 -30
- data/lib/citygrid/api/response.rb +3 -5
- data/lib/citygrid/details.rb +17 -0
- data/lib/citygrid/listing.rb +11 -14
- data/lib/citygrid/offers.rb +13 -0
- data/lib/citygrid/reviews.rb +17 -0
- data/lib/citygrid/search.rb +15 -0
- data/lib/citygrid.rb +15 -9
- data/test/test_super_hash.rb +6 -6
- metadata +14 -12
- data/lib/citygrid/listing/details.rb +0 -21
- data/lib/citygrid/listing/extend/attribute.rb +0 -18
- data/lib/citygrid/listing/extend/attributes.rb +0 -22
- data/lib/citygrid/listing/extend/requestable.rb +0 -51
- data/lib/citygrid/listing/extend.rb +0 -3
- data/lib/citygrid/listing/offers.rb +0 -17
- data/lib/citygrid/listing/reviews.rb +0 -21
- data/lib/citygrid/super_hash.rb +0 -23
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/citygrid_api.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{citygrid_api}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Elpizo Choi"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-07-14}
|
13
13
|
s.description = %q{Ruby wrapper for CityGrid APIs}
|
14
14
|
s.email = %q{fu7iin@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,6 +26,12 @@ Gem::Specification.new do |s|
|
|
26
26
|
"VERSION",
|
27
27
|
"citygrid_api.gemspec",
|
28
28
|
"lib/citygrid.rb",
|
29
|
+
"lib/citygrid/abstraction.rb",
|
30
|
+
"lib/citygrid/abstraction/collection.rb",
|
31
|
+
"lib/citygrid/abstraction/item.rb",
|
32
|
+
"lib/citygrid/abstraction/requestable.rb",
|
33
|
+
"lib/citygrid/abstraction/super_array.rb",
|
34
|
+
"lib/citygrid/abstraction/super_hash.rb",
|
29
35
|
"lib/citygrid/api.rb",
|
30
36
|
"lib/citygrid/api/base.rb",
|
31
37
|
"lib/citygrid/api/content.rb",
|
@@ -35,15 +41,11 @@ Gem::Specification.new do |s|
|
|
35
41
|
"lib/citygrid/api/content/places/search.rb",
|
36
42
|
"lib/citygrid/api/content/reviews.rb",
|
37
43
|
"lib/citygrid/api/response.rb",
|
44
|
+
"lib/citygrid/details.rb",
|
38
45
|
"lib/citygrid/listing.rb",
|
39
|
-
"lib/citygrid/
|
40
|
-
"lib/citygrid/
|
41
|
-
"lib/citygrid/
|
42
|
-
"lib/citygrid/listing/extend/attributes.rb",
|
43
|
-
"lib/citygrid/listing/extend/requestable.rb",
|
44
|
-
"lib/citygrid/listing/offers.rb",
|
45
|
-
"lib/citygrid/listing/reviews.rb",
|
46
|
-
"lib/citygrid/super_hash.rb",
|
46
|
+
"lib/citygrid/offers.rb",
|
47
|
+
"lib/citygrid/reviews.rb",
|
48
|
+
"lib/citygrid/search.rb",
|
47
49
|
"lib/citygrid_api.rb",
|
48
50
|
"test/helper.rb",
|
49
51
|
"test/publisher_helper.rb.sample",
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class CityGrid
|
2
|
+
module Abstraction
|
3
|
+
module Requestable
|
4
|
+
def self.included base
|
5
|
+
base.instance_eval do
|
6
|
+
attr_reader :raw
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def api
|
11
|
+
# set corresponding API here
|
12
|
+
end
|
13
|
+
|
14
|
+
def request opts = {}
|
15
|
+
api.request opts
|
16
|
+
end
|
17
|
+
|
18
|
+
# Run request, preprocess, and update.
|
19
|
+
# Write an update method if it doesn't already exist
|
20
|
+
#
|
21
|
+
# def update
|
22
|
+
#
|
23
|
+
# end
|
24
|
+
def request_and_update opts = {}
|
25
|
+
@raw = request opts
|
26
|
+
update preprocess(@raw)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# Preprocess request.
|
32
|
+
# Overwrite this method to preprocess request before updating.
|
33
|
+
def preprocess response
|
34
|
+
response
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Extend Array to provide following features:
|
2
|
+
# - creates SuperHash for hashes
|
3
|
+
# - creates SuperArray for arrays
|
4
|
+
# ------------------------------- #
|
5
|
+
class CityGrid
|
6
|
+
module Abstraction
|
7
|
+
class SuperArray < Array
|
8
|
+
def self.new objs
|
9
|
+
array = self.[] objects
|
10
|
+
array.map! do |obj|
|
11
|
+
if obj.class == Hash
|
12
|
+
SuperHash.new obj
|
13
|
+
elsif obj.class == Array
|
14
|
+
new obj
|
15
|
+
else
|
16
|
+
obj
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Extend Hash to provide following features:
|
2
|
+
# - create by SuperHash.new(<hash>)
|
3
|
+
# - can access values by method, instead of []
|
4
|
+
# -------------------------------------------- #
|
5
|
+
class CityGrid
|
6
|
+
module Abstraction
|
7
|
+
class SuperHash < Hash
|
8
|
+
def self.new attrs
|
9
|
+
self[attrs]
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing sym, *args, &block
|
13
|
+
val = self[sym] || self[sym.to_s]
|
14
|
+
|
15
|
+
# create new SuperHash if value is hash
|
16
|
+
if val.is_a? Hash
|
17
|
+
SuperHash.new val
|
18
|
+
elsif keys.include?(sym) || keys.include?(sym.to_s)
|
19
|
+
val
|
20
|
+
else
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/citygrid/api/base.rb
CHANGED
@@ -24,9 +24,14 @@ class CityGrid
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def request options = {}
|
27
|
-
query
|
27
|
+
query = options.merge :publisher => publisher, :format => "json"
|
28
28
|
response = get endpoint, :query => query
|
29
|
-
|
29
|
+
|
30
|
+
if response["errors"].empty?
|
31
|
+
CityGrid::API::Response.new response
|
32
|
+
else
|
33
|
+
raise Error.new response["errors"], response
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
private
|
@@ -40,5 +45,16 @@ class CityGrid
|
|
40
45
|
end
|
41
46
|
end
|
42
47
|
end
|
48
|
+
|
49
|
+
# Throws error with message from API
|
50
|
+
# HTTParty response is available if this class is rescued
|
51
|
+
class Error < StandardError
|
52
|
+
attr_reader :httparty
|
53
|
+
|
54
|
+
def initialize errors, response = nil
|
55
|
+
@httparty = response
|
56
|
+
super errors.first["error"]
|
57
|
+
end
|
58
|
+
end
|
43
59
|
end
|
44
60
|
end
|
@@ -9,36 +9,6 @@ class CityGrid
|
|
9
9
|
def endpoint
|
10
10
|
"/places/v2/search/where"
|
11
11
|
end
|
12
|
-
|
13
|
-
# Overwrite to return Search::Response
|
14
|
-
def request options
|
15
|
-
query = options.merge :publisher => publisher, :format => "json"
|
16
|
-
response = get endpoint, :query => query
|
17
|
-
Response.new response
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
# Holds array of Listings.
|
22
|
-
# HTTParty response can be accessed by #response
|
23
|
-
# ---------------------------------------------- #
|
24
|
-
class Response < Array
|
25
|
-
attr_reader :response, :errors
|
26
|
-
|
27
|
-
def self.new httparty_response
|
28
|
-
resp = httparty_response.parsed_response
|
29
|
-
|
30
|
-
if resp["errors"]
|
31
|
-
array = self.[]
|
32
|
-
array.instance_variable_set "@errors", resp["errors"]
|
33
|
-
else
|
34
|
-
array = self.[] *resp["results"]["locations"]
|
35
|
-
array.map! do |result|
|
36
|
-
CityGrid::Listing.new result
|
37
|
-
end
|
38
|
-
end
|
39
|
-
array.instance_variable_set "@response", httparty_response
|
40
|
-
array
|
41
|
-
end
|
42
12
|
end
|
43
13
|
end
|
44
14
|
end
|
@@ -1,16 +1,14 @@
|
|
1
|
-
require "citygrid/super_hash"
|
2
|
-
|
3
1
|
class CityGrid
|
4
2
|
module API
|
5
3
|
# Creates SuperHash from parsed_response
|
6
4
|
# Stores response object in @response.
|
7
5
|
# ------------------------------------ #
|
8
|
-
class Response < CityGrid::SuperHash
|
9
|
-
attr_reader :
|
6
|
+
class Response < CityGrid::Abstraction::SuperHash
|
7
|
+
attr_reader :httparty
|
10
8
|
|
11
9
|
def self.new httparty_response
|
12
10
|
resp = super httparty_response.parsed_response
|
13
|
-
resp.instance_variable_set "@
|
11
|
+
resp.instance_variable_set "@httparty", httparty_response
|
14
12
|
resp
|
15
13
|
end
|
16
14
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CityGrid
|
2
|
+
class Details < Abstraction::Item
|
3
|
+
def api
|
4
|
+
CityGrid::API::Content::Places::Detail
|
5
|
+
end
|
6
|
+
|
7
|
+
def request opts = {}
|
8
|
+
api.request opts.merge(:client_ip => "192.168.0.1")
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def preprocess response
|
14
|
+
response.locations.first
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/citygrid/listing.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
|
-
require "citygrid/super_hash"
|
2
|
-
require "citygrid/listing/extend"
|
3
|
-
require "citygrid/listing/details"
|
4
|
-
require "citygrid/listing/offers"
|
5
|
-
require "citygrid/listing/reviews"
|
6
|
-
|
7
1
|
class CityGrid
|
8
|
-
class Listing < SuperHash
|
2
|
+
class Listing < Abstraction::SuperHash
|
9
3
|
|
10
4
|
def method_missing meth, *args, &block
|
11
5
|
load unless @loaded
|
@@ -18,6 +12,7 @@ class CityGrid
|
|
18
12
|
extend LoadedMethods
|
19
13
|
update_details
|
20
14
|
@loaded = true
|
15
|
+
self
|
21
16
|
end
|
22
17
|
|
23
18
|
module LoadedMethods
|
@@ -44,7 +39,7 @@ class CityGrid
|
|
44
39
|
end
|
45
40
|
|
46
41
|
def categories
|
47
|
-
@categories ||= extract_categories
|
42
|
+
@categories ||= extract_categories self["categories"]
|
48
43
|
end
|
49
44
|
|
50
45
|
def special_features
|
@@ -56,31 +51,33 @@ class CityGrid
|
|
56
51
|
end
|
57
52
|
|
58
53
|
def attributes
|
59
|
-
@attributes ||= extract_attributes
|
54
|
+
@attributes ||= extract_attributes self["attributes"]
|
60
55
|
end
|
61
56
|
|
62
57
|
# Details
|
63
58
|
# ---------------- #
|
64
59
|
def update_details
|
65
|
-
update Details.new listing_id
|
60
|
+
update Details.new :listing_id => listing_id
|
66
61
|
end
|
67
62
|
|
68
63
|
# Offers
|
69
64
|
# -------------- #
|
70
65
|
def offers opts = {}
|
71
|
-
|
72
|
-
@offers.update_options opts
|
66
|
+
Offers.new listing_options(opts)
|
73
67
|
end
|
74
68
|
|
75
69
|
# Reviews
|
76
70
|
# -------------- #
|
77
71
|
def reviews opts = {}
|
78
|
-
|
79
|
-
@reviews.update_options opts
|
72
|
+
Reviews.new listing_options(opts)
|
80
73
|
end
|
81
74
|
|
82
75
|
private
|
83
76
|
|
77
|
+
def listing_options opts
|
78
|
+
{:listing_id => listing_id}.merge(opts)
|
79
|
+
end
|
80
|
+
|
84
81
|
# Group categories by their group names
|
85
82
|
def extract_categories cats
|
86
83
|
cats.inject Hash.new do |hash, tag|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CityGrid
|
2
|
+
class Reviews < Abstraction::Collection
|
3
|
+
def api
|
4
|
+
CityGrid::API::Content::Reviews
|
5
|
+
end
|
6
|
+
|
7
|
+
def total_hits
|
8
|
+
raw["results"]["total_hits"]
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def preprocess response
|
14
|
+
response.results.reviews
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/citygrid.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
-
require "citygrid/
|
1
|
+
require "citygrid/abstraction"
|
2
2
|
require "citygrid/api"
|
3
3
|
|
4
|
+
require "citygrid/search"
|
5
|
+
require "citygrid/reviews"
|
6
|
+
require "citygrid/offers"
|
7
|
+
require "citygrid/details"
|
8
|
+
require "citygrid/listing"
|
9
|
+
|
4
10
|
class CityGrid
|
5
11
|
class << self
|
6
12
|
def publisher= code
|
@@ -12,20 +18,20 @@ class CityGrid
|
|
12
18
|
@@publisher
|
13
19
|
end
|
14
20
|
|
15
|
-
def
|
16
|
-
|
21
|
+
def search opts = {}
|
22
|
+
Search.new opts
|
17
23
|
end
|
18
24
|
|
19
|
-
def
|
20
|
-
|
25
|
+
def find listing_id
|
26
|
+
Listing.new("id" => listing_id).send(:load)
|
21
27
|
end
|
22
28
|
|
23
|
-
def
|
24
|
-
|
29
|
+
def offers opts
|
30
|
+
Offers.new opts
|
25
31
|
end
|
26
32
|
|
27
|
-
def
|
28
|
-
|
33
|
+
def reviews opts
|
34
|
+
Reviews.new opts
|
29
35
|
end
|
30
36
|
end
|
31
37
|
|
data/test/test_super_hash.rb
CHANGED
@@ -5,7 +5,7 @@ context "A SuperHash" do
|
|
5
5
|
# ------------------------ #
|
6
6
|
context "created from #new" do
|
7
7
|
context "and given a hash" do
|
8
|
-
setup { CityGrid::SuperHash.new(:test => "wassup") }
|
8
|
+
setup { CityGrid::Abstraction::SuperHash.new(:test => "wassup") }
|
9
9
|
should("return a hash") { topic.is_a? Hash }
|
10
10
|
should("its value can be accessible through its key") { topic[:test] == "wassup"}
|
11
11
|
end
|
@@ -15,19 +15,19 @@ context "A SuperHash" do
|
|
15
15
|
# ------------------------ #
|
16
16
|
context "that's single level" do
|
17
17
|
context "with symbol as key" do
|
18
|
-
setup { CityGrid::SuperHash.new(:test => "wassup") }
|
18
|
+
setup { CityGrid::Abstraction::SuperHash.new(:test => "wassup") }
|
19
19
|
should("can access key as method") { topic.test }
|
20
20
|
end
|
21
21
|
|
22
22
|
context "with string as key" do
|
23
|
-
setup { CityGrid::SuperHash.new("test" => "wasssup") }
|
24
|
-
should("can access key as method"){
|
23
|
+
setup { CityGrid::Abstraction::SuperHash.new("test" => "wasssup") }
|
24
|
+
should("can access key as method"){ topic.test }
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
context "that has a subhash" do
|
29
|
-
setup { CityGrid::SuperHash.new(:test => {:wassup => "hows it going?"}) }
|
30
|
-
should("return another SuperHash") { topic.test.is_a? CityGrid::SuperHash }
|
29
|
+
setup { CityGrid::Abstraction::SuperHash.new(:test => {:wassup => "hows it going?"}) }
|
30
|
+
should("return another SuperHash") { topic.test.is_a? CityGrid::Abstraction::SuperHash }
|
31
31
|
should("return correct hash") { topic.test.wassup == "hows it going?" }
|
32
32
|
end
|
33
33
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: citygrid_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Elpizo Choi
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-07-14 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
type: :runtime
|
@@ -130,6 +130,12 @@ files:
|
|
130
130
|
- VERSION
|
131
131
|
- citygrid_api.gemspec
|
132
132
|
- lib/citygrid.rb
|
133
|
+
- lib/citygrid/abstraction.rb
|
134
|
+
- lib/citygrid/abstraction/collection.rb
|
135
|
+
- lib/citygrid/abstraction/item.rb
|
136
|
+
- lib/citygrid/abstraction/requestable.rb
|
137
|
+
- lib/citygrid/abstraction/super_array.rb
|
138
|
+
- lib/citygrid/abstraction/super_hash.rb
|
133
139
|
- lib/citygrid/api.rb
|
134
140
|
- lib/citygrid/api/base.rb
|
135
141
|
- lib/citygrid/api/content.rb
|
@@ -139,15 +145,11 @@ files:
|
|
139
145
|
- lib/citygrid/api/content/places/search.rb
|
140
146
|
- lib/citygrid/api/content/reviews.rb
|
141
147
|
- lib/citygrid/api/response.rb
|
148
|
+
- lib/citygrid/details.rb
|
142
149
|
- lib/citygrid/listing.rb
|
143
|
-
- lib/citygrid/
|
144
|
-
- lib/citygrid/
|
145
|
-
- lib/citygrid/
|
146
|
-
- lib/citygrid/listing/extend/attributes.rb
|
147
|
-
- lib/citygrid/listing/extend/requestable.rb
|
148
|
-
- lib/citygrid/listing/offers.rb
|
149
|
-
- lib/citygrid/listing/reviews.rb
|
150
|
-
- lib/citygrid/super_hash.rb
|
150
|
+
- lib/citygrid/offers.rb
|
151
|
+
- lib/citygrid/reviews.rb
|
152
|
+
- lib/citygrid/search.rb
|
151
153
|
- lib/citygrid_api.rb
|
152
154
|
- test/helper.rb
|
153
155
|
- test/publisher_helper.rb.sample
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "citygrid/listing/extend"
|
2
|
-
|
3
|
-
class CityGrid
|
4
|
-
class Listing < SuperHash
|
5
|
-
class Details < Extend::Attribute
|
6
|
-
def api
|
7
|
-
CityGrid::API::Content::Places::Detail
|
8
|
-
end
|
9
|
-
|
10
|
-
def request
|
11
|
-
api.request listing_options.merge(:client_ip => "192.168.0.1")
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def preprocess req
|
17
|
-
req.locations.first
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "citygrid/listing/extend/requestable"
|
2
|
-
|
3
|
-
class CityGrid
|
4
|
-
class Listing < SuperHash
|
5
|
-
module Extend
|
6
|
-
class Attribute < CityGrid::SuperHash
|
7
|
-
include Requestable
|
8
|
-
|
9
|
-
def self.new listing_id, opts = {}
|
10
|
-
hash = self[{}]
|
11
|
-
hash.instance_variable_set "@listing_id", listing_id
|
12
|
-
hash.instance_variable_set "@options", opts
|
13
|
-
hash.request_and_update
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require "citygrid/listing/extend/requestable"
|
2
|
-
|
3
|
-
class CityGrid
|
4
|
-
class Listing < SuperHash
|
5
|
-
module Extend
|
6
|
-
class Attributes < Array
|
7
|
-
include Requestable
|
8
|
-
|
9
|
-
def self.new listing_id, opts = {}
|
10
|
-
hash = self[]
|
11
|
-
hash.instance_variable_set "@listing_id", listing_id
|
12
|
-
hash.instance_variable_set "@options", opts
|
13
|
-
hash.request_and_update
|
14
|
-
end
|
15
|
-
|
16
|
-
def update array
|
17
|
-
replace array
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
class CityGrid
|
2
|
-
class Listing < SuperHash
|
3
|
-
module Extend
|
4
|
-
module Requestable
|
5
|
-
def self.included base
|
6
|
-
base.instance_eval do
|
7
|
-
attr_accessor :options
|
8
|
-
attr_reader :listing_id, :raw
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def api
|
13
|
-
# set corresponding API here
|
14
|
-
end
|
15
|
-
|
16
|
-
def request
|
17
|
-
api.request listing_options
|
18
|
-
end
|
19
|
-
|
20
|
-
# Run request, preprocess, and update.
|
21
|
-
# Write an update method if it doesn't already exist
|
22
|
-
#
|
23
|
-
# def update
|
24
|
-
#
|
25
|
-
# end
|
26
|
-
def request_and_update
|
27
|
-
@raw = request
|
28
|
-
update preprocess(@raw)
|
29
|
-
end
|
30
|
-
|
31
|
-
def listing_options
|
32
|
-
options.merge :listing_id => listing_id
|
33
|
-
end
|
34
|
-
|
35
|
-
def update_options opts
|
36
|
-
return self if opts == @options
|
37
|
-
@options = opts
|
38
|
-
request_and_update
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
# Preprocess request.
|
44
|
-
# Overwrite this method to preprocess request before updating.
|
45
|
-
def preprocess req
|
46
|
-
req
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require "citygrid/listing/extend"
|
2
|
-
|
3
|
-
class CityGrid
|
4
|
-
class Listing < SuperHash
|
5
|
-
class Offers < Extend::Attributes
|
6
|
-
def api
|
7
|
-
CityGrid::API::Content::Offers
|
8
|
-
end
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
def preprocess req
|
13
|
-
req.results.offers
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require "citygrid/listing/extend"
|
2
|
-
|
3
|
-
class CityGrid
|
4
|
-
class Listing < SuperHash
|
5
|
-
class Reviews < Extend::Attributes
|
6
|
-
def api
|
7
|
-
CityGrid::API::Content::Reviews
|
8
|
-
end
|
9
|
-
|
10
|
-
def total_hits
|
11
|
-
raw["results"]["total_hits"]
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def preprocess req
|
17
|
-
req.results.reviews
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/citygrid/super_hash.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
class CityGrid
|
2
|
-
|
3
|
-
# Subset of Hash that provides following features:
|
4
|
-
# - create by SuperHash.new(<hash>)
|
5
|
-
# - can access values by method, instead of []
|
6
|
-
# -------------------------------------------- #
|
7
|
-
class SuperHash < Hash
|
8
|
-
def self.new attrs
|
9
|
-
self[attrs]
|
10
|
-
end
|
11
|
-
|
12
|
-
def method_missing sym, *args, &block
|
13
|
-
val = self[sym] || self[sym.to_s]
|
14
|
-
|
15
|
-
# create new SuperHash if value is hash
|
16
|
-
if val.is_a? Hash
|
17
|
-
SuperHash.new val
|
18
|
-
else
|
19
|
-
val || super
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|