refreshingmenus_api 0.0.4 → 0.0.5
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 +21 -6
- data/lib/refreshingmenus_api.rb +84 -24
- data/lib/refreshingmenus_api/version.rb +1 -1
- data/refreshingmenus_api.gemspec +3 -2
- metadata +4 -16
data/README.md
CHANGED
@@ -19,10 +19,14 @@ Or install it yourself as:
|
|
19
19
|
## Usage
|
20
20
|
|
21
21
|
api = RefreshingmenusApi::Client.new(:auth_token => 'your_auth_token_here')
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
result.
|
22
|
+
|
23
|
+
### Places
|
24
|
+
|
25
|
+
result = api.places(:q => "o'pazzo") # Returns Array of RefreshingmenusApi::Place objects
|
26
|
+
result.first.name # => "O'Pazzo Pizzeria"
|
27
|
+
result.first.guid # => "194ebdcc-fcd9-11e1-b4ac-5254006b3bb5"
|
28
|
+
result.first.menus_count # => 2
|
29
|
+
result.first.menus.first.title # => "Pizzeria Kaart"
|
26
30
|
|
27
31
|
A query to match businesses / venues / places based on a phone number:
|
28
32
|
|
@@ -30,8 +34,8 @@ A query to match businesses / venues / places based on a phone number:
|
|
30
34
|
:phone => '+31-(0)-10-2065151',
|
31
35
|
:country_code => 'NL'
|
32
36
|
)
|
33
|
-
result.first
|
34
|
-
result.first
|
37
|
+
result.first.normalized_phone # => "31102065151"
|
38
|
+
result.first.guid # => "194e9016-fcd9-11e1-b4ac-5254006b3bb5"
|
35
39
|
|
36
40
|
This phone number is normalized based on the country_code passed. So '010-2065151' and '+31-(0)-10-2065151' with country_code 'NL' will be normalized to '31102065151'.
|
37
41
|
|
@@ -46,6 +50,17 @@ Because sometimes multiple places have the same phone number we can do more spec
|
|
46
50
|
:phone => place.phone_number # Eg. '010-12341234'.
|
47
51
|
)
|
48
52
|
|
53
|
+
### Menus
|
54
|
+
|
55
|
+
result = api.places(:q => "o'pazzo")
|
56
|
+
result.first.menus.first # => RefreshingmenusApi::Menu
|
57
|
+
menu1 = result.first.menus.first.fetch!(api) # Pass api client to fetch all Menu info
|
58
|
+
menu1.title # => "Pizzeria Kaart"
|
59
|
+
menu1.entries.first.title # => "ANTIPASTI"
|
60
|
+
|
61
|
+
A Menu is a tree of Entries. An Entry is either a Section (eg. 'Starters') or an Item (eg. 'Hamburger').
|
62
|
+
Both Sections and Items can have multiple Prices.
|
63
|
+
|
49
64
|
## Widget usage
|
50
65
|
|
51
66
|
RefreshingmenusApi::Widget.script_tag(:place_id => 'some_place_id', :widget_token => 'some_token')
|
data/lib/refreshingmenus_api.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'refreshingmenus_api/version'
|
2
2
|
require 'refreshingmenus_api/widget'
|
3
3
|
|
4
|
-
require '
|
5
|
-
require 'active_support/core_ext'
|
6
|
-
require 'active_support/core_ext/hash'
|
4
|
+
require 'api_smith'
|
7
5
|
|
8
6
|
module RefreshingmenusApi
|
9
7
|
|
@@ -14,6 +12,64 @@ module RefreshingmenusApi
|
|
14
12
|
class UnprocessableEntityError < ApiError;
|
15
13
|
end
|
16
14
|
|
15
|
+
class Menu < APISmith::Smash
|
16
|
+
|
17
|
+
class Entry < APISmith::Smash
|
18
|
+
|
19
|
+
class Price < APISmith::Smash
|
20
|
+
property :position
|
21
|
+
property :title
|
22
|
+
property :price
|
23
|
+
property :unit
|
24
|
+
property :currency
|
25
|
+
end
|
26
|
+
|
27
|
+
property :type
|
28
|
+
property :position
|
29
|
+
property :title
|
30
|
+
property :desc
|
31
|
+
|
32
|
+
# Item specific
|
33
|
+
property :restrictions
|
34
|
+
property :spiciness
|
35
|
+
|
36
|
+
# Price info
|
37
|
+
property :prices, :transformer => Entry::Price
|
38
|
+
|
39
|
+
# Sub-Entries
|
40
|
+
property :entries, :transformer => Entry
|
41
|
+
end
|
42
|
+
|
43
|
+
property :guid, :from => :id
|
44
|
+
property :title
|
45
|
+
property :desc
|
46
|
+
property :position
|
47
|
+
property :entries, :transformer => Menu::Entry
|
48
|
+
|
49
|
+
# FIXME: What is the proper way to do this?
|
50
|
+
def fetch!(client)
|
51
|
+
client.menu(self.guid)
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
class Place < APISmith::Smash
|
57
|
+
property :guid, :from => :id
|
58
|
+
property :name
|
59
|
+
property :street
|
60
|
+
property :zip
|
61
|
+
property :country_code
|
62
|
+
property :lat
|
63
|
+
property :lng
|
64
|
+
property :normalized_phone
|
65
|
+
property :menus_count
|
66
|
+
property :menus, :transformer => Menu
|
67
|
+
end
|
68
|
+
|
69
|
+
# class PlaceCollection < APISmith::Smash
|
70
|
+
# property :dates, :transformer => lambda { |c| c.map { |v| TallyStat.call(v['items']) }.flatten }
|
71
|
+
# end
|
72
|
+
|
17
73
|
# Usage:
|
18
74
|
# api = RefreshingmenusApi::Client.new(:auth_token => 'your_auth_token_here')
|
19
75
|
# api.places(:q => 'some query')
|
@@ -25,47 +81,51 @@ module RefreshingmenusApi
|
|
25
81
|
}
|
26
82
|
ERRORS.default = ApiError
|
27
83
|
|
28
|
-
include
|
84
|
+
include APISmith::Client
|
29
85
|
|
30
|
-
attr_reader :auth_token, :version, :
|
86
|
+
attr_reader :auth_token, :version, :locale
|
31
87
|
|
32
88
|
# Options:
|
33
89
|
# * :auth_token - Your RefreshingMenus Authentication token (API)
|
34
90
|
# * :version - Version (defaults to 1)
|
91
|
+
# * :locale - The language (defaults to 'nl')
|
35
92
|
def initialize(options = {})
|
36
93
|
@auth_token = options[:auth_token]
|
37
94
|
@version = options[:version] || '1'
|
95
|
+
@locale = options[:locale] || 'nl'
|
96
|
+
|
38
97
|
self.class.base_uri(options[:base_uri] || 'www.refreshingmenus.com')
|
98
|
+
self.class.endpoint("api/v#{version}")
|
99
|
+
|
100
|
+
add_query_options!(:auth_token => auth_token)
|
101
|
+
add_query_options!(:locale => locale)
|
39
102
|
end
|
40
103
|
|
41
104
|
def places(options)
|
42
|
-
|
105
|
+
raise ArgumentError, "Expected options to be a Hash, got #{options.inspect}." if not options.is_a?(Hash)
|
106
|
+
get('places.json', :extra_query => options, :transform => Place)
|
43
107
|
end
|
44
108
|
|
45
|
-
def
|
46
|
-
|
109
|
+
def menu(guid)
|
110
|
+
raise ArgumentError, "Expected guid to be a String, got #(guid.inspect}." if not guid.is_a?(String)
|
111
|
+
get("menus/#{guid}.json", :transform => Menu)
|
47
112
|
end
|
48
113
|
|
49
114
|
private
|
50
|
-
|
51
|
-
def
|
52
|
-
options[:query] ||= {}
|
53
|
-
options[:query][:auth_token] ||= auth_token
|
54
|
-
path = File.join("/api/v#{version}", path)
|
55
|
-
response = self.class.send(method, path, options)
|
56
|
-
|
115
|
+
|
116
|
+
def check_response_errors(response)
|
57
117
|
# In 2XX range is success otherwise it's probably error (3XX redirects range is handled by HTTParty).
|
58
118
|
# In case of error we lookup error class or default to ApiError.
|
59
|
-
|
60
|
-
|
61
|
-
result = response.parsed_response
|
62
|
-
result = result.collect {|r| r.is_a?(Hash) ? r.with_indifferent_access : r} if result.is_a?(Array)
|
63
|
-
return result
|
64
|
-
else
|
65
|
-
raise ERRORS[response.code], "Got HTTP code #{response.code} (#{response.message}) from API.\nPath: #{path} #{options.inspect}\nAuthToken: #{auth_token}"
|
119
|
+
if not (200..299).include?(response.code)
|
120
|
+
raise ERRORS[response.code], "Got HTTP code #{response.code} (#{response.message}) from API."
|
66
121
|
end
|
67
|
-
end
|
68
122
|
|
69
|
-
|
123
|
+
# # TODO: Check JSON for error
|
124
|
+
# if response.first.is_a?(Hash) and (error = response.first['error'])
|
125
|
+
# raise Error.new(error)
|
126
|
+
# end
|
127
|
+
end
|
128
|
+
|
129
|
+
end # Client
|
70
130
|
|
71
131
|
end
|
data/refreshingmenus_api.gemspec
CHANGED
@@ -15,6 +15,7 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.require_paths = ["lib"]
|
16
16
|
gem.version = RefreshingmenusApi::VERSION
|
17
17
|
|
18
|
-
gem.add_dependency('httparty')
|
19
|
-
gem.add_dependency('activesupport')
|
18
|
+
# gem.add_dependency('httparty')
|
19
|
+
# gem.add_dependency('activesupport')
|
20
|
+
gem.add_dependency('api_smith')
|
20
21
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 5
|
9
|
+
version: 0.0.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Joost Hietbrink
|
@@ -14,11 +14,11 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-09-
|
17
|
+
date: 2012-09-18 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: api_smith
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
@@ -29,18 +29,6 @@ dependencies:
|
|
29
29
|
version: "0"
|
30
30
|
type: :runtime
|
31
31
|
version_requirements: *id001
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: activesupport
|
34
|
-
prerelease: false
|
35
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
segments:
|
40
|
-
- 0
|
41
|
-
version: "0"
|
42
|
-
type: :runtime
|
43
|
-
version_requirements: *id002
|
44
32
|
description: Ruby API to use the Refreshing Menus REST API.
|
45
33
|
email:
|
46
34
|
- joost@joopp.com
|