homeaway-api 1.0.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.
@@ -0,0 +1,81 @@
1
+ # Copyright (c) 2015 HomeAway.com, Inc.
2
+ # All rights reserved. http://www.homeaway.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'oauth2'
17
+
18
+ module HomeAway
19
+ module API
20
+ module Util
21
+ module OAuth
22
+
23
+ # @return [String] the Base64 encoded credentials for the current client
24
+ def credentials
25
+ Base64.strict_encode64 "#{@configuration.client_id}:#{@configuration.client_secret}"
26
+ end
27
+
28
+ # @private
29
+ def auth_url
30
+ oauth_client_strategy.authorize_url
31
+ end
32
+
33
+ # completes the oauth flow
34
+ # @param code [String] service ticket to authenticate
35
+ # @return [Boolean] true if the authentication succeeded, false otherwise
36
+ def oauth_code=(code)
37
+ begin
38
+ auth_code_strategy = oauth_client_strategy
39
+ token = auth_code_strategy.get_token(code, :headers => {'Authorization' => "Basic #{credentials}"})
40
+ @token = token.token
41
+ @token_expires = Time.at token.expires_at
42
+ @mode = :three_legged
43
+ return true
44
+ rescue => _
45
+ raise HomeAway::API::Errors::UnauthorizedError.new
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ def oauth_client
52
+ site = @configuration[:oauth_site] ||= @configuration[:site]
53
+ OAuth2::Client.new(@configuration.client_id,
54
+ @configuration.client_secret,
55
+ :site => site,
56
+ :raise_errors => false
57
+ )
58
+ end
59
+
60
+ def oauth_client_strategy
61
+ client = oauth_client
62
+ client.auth_code
63
+ end
64
+
65
+ def two_legged!
66
+ begin
67
+ client = oauth_client
68
+ client_credentials_strategy = client.client_credentials
69
+ token = client_credentials_strategy.get_token
70
+ @token = token.token
71
+ @token_expires = Time.at token.expires_at
72
+ @mode = :two_legged
73
+ return true
74
+ rescue => _
75
+ raise HomeAway::API::Errors::UnauthorizedError.new
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,118 @@
1
+ # Copyright (c) 2015 HomeAway.com, Inc.
2
+ # All rights reserved. http://www.homeaway.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'cgi'
17
+
18
+ module HomeAway
19
+ module API
20
+ module Util
21
+
22
+ # @private
23
+ module Validators
24
+
25
+ # @private
26
+ def self.uri_encoded(input)
27
+ CGI.escape input
28
+ end
29
+
30
+ # @private
31
+ def self.date(input)
32
+ if input.is_a? String
33
+ input = Chronic.parse(input, :ambiguous_time_range => :none)
34
+ end
35
+ raise ArgumentError.new('dates must be a parseable date string or a Ruby Time object') unless input.is_a? Time
36
+ input.to_time.utc.iso8601
37
+ end
38
+
39
+ # @private
40
+ def self.float(input, min=nil, max=nil)
41
+ begin
42
+ input_s = input.to_s
43
+ !!Float(input_s)
44
+ f = input_s.to_f
45
+ unless min == nil
46
+ raise ArgumentError.new("Supplied argument #{f} must be greater than #{min}") if f < min
47
+ end
48
+ unless max == nil
49
+ raise ArgumentError.new("Supplied argument #{f} must be less than #{max}") if f > max
50
+ end
51
+ return f
52
+ rescue
53
+ raise ArgumentError.new("Supplied argument #{input} must be a valid float value")
54
+ end
55
+ end
56
+
57
+ # @private
58
+ def self.integer(input, min=nil, max=nil)
59
+ begin
60
+ input_s = input.to_s
61
+ !!Integer(input_s)
62
+ i = input_s.to_i
63
+ unless min == nil
64
+ raise ArgumentError.new("Supplied argument #{i} must be greater than #{min}") if i < min
65
+ end
66
+ unless max == nil
67
+ raise ArgumentError.new("Supplied argument #{i} must be less than #{max}") if i > max
68
+ end
69
+ return i
70
+ rescue
71
+ raise ArgumentError.new("Supplied argument #{input} must be a valid integer value")
72
+ end
73
+ end
74
+
75
+ # @private
76
+ def self.boolean(input)
77
+ input_s = input.to_s
78
+ return true if input_s =~ (/^(true)$/i)
79
+ return false if input_s.empty? || input_s =~ (/^(false)$/i)
80
+ raise ArgumentError.new("Supplied argument #{input} must be a valid boolean value")
81
+ end
82
+
83
+ # @private
84
+ def self.camel_case(input)
85
+ input.to_s.camelize(:lower)
86
+ end
87
+
88
+ # @private
89
+ def self.snake_case(input)
90
+ input.to_s.underscore
91
+ end
92
+
93
+ # @private
94
+ def self.query_keys(hash)
95
+ raise ArgumentError.new('arguments must be a hash') unless hash.is_a? Hash
96
+ transformed = {}
97
+ hash.each_key do |key|
98
+ transformed[self.camel_case(key)] = hash[key]
99
+ end
100
+ transformed
101
+ end
102
+
103
+ # @private
104
+ def self.uuid(input)
105
+ uuid_regex = /\A([0-9a-fA-F]{32}|[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\z/
106
+ raise ArgumentError.new("#{uuid.to_s} must be a valid uuid") unless input.to_s =~ uuid_regex
107
+ input.to_s
108
+ end
109
+
110
+ # @private
111
+ def self.array(input)
112
+ return nil if input == nil
113
+ [input].flatten
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,20 @@
1
+ # Copyright (c) 2015 HomeAway.com, Inc.
2
+ # All rights reserved. http://www.homeaway.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ module HomeAway
17
+ module API
18
+ VERSION = '1.0.0'
19
+ end
20
+ end
@@ -0,0 +1,43 @@
1
+ # Copyright (c) 2015 HomeAway.com, Inc.
2
+ # All rights reserved. http://www.homeaway.com
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ require 'homeaway/api/version'
17
+ require 'hashie'
18
+ require 'base64'
19
+ require 'logger'
20
+ require 'rest-client'
21
+ require 'openssl'
22
+ require 'chronic'
23
+ require 'active_support/all'
24
+
25
+ require 'homeaway/api/errors/ha_api_errors'
26
+ require 'homeaway/api/util/validators'
27
+ require 'homeaway/api/util/defaults'
28
+ require 'homeaway/api/util/oauth'
29
+ require 'homeaway/api/paginator'
30
+ require 'homeaway/api/response'
31
+ require 'homeaway/api/client'
32
+ require 'homeaway/api/adapters/faraday'
33
+ require 'homeaway/api/adapters/hurley'
34
+
35
+ require 'homeaway/api/domain/client_includes'
36
+
37
+ module HomeAway
38
+ # The official HomeAway API Ruby SDK
39
+ # @author Charlie Meyer <cmeyer@homeaway.com>
40
+ module API
41
+
42
+ end
43
+ end
metadata ADDED
@@ -0,0 +1,367 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: homeaway-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Charlie Meyer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hashie
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: chronic
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: hurley
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: faraday_middleware
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: json_color
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: mechanize
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: faraday-http-cache
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: oauth2
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: bundler
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.7'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.7'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rake
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '10.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '10.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 3.1.0
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: 3.1.0
209
+ - !ruby/object:Gem::Dependency
210
+ name: vcr
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: json
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: multi_json
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: webmock
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ - !ruby/object:Gem::Dependency
266
+ name: simplecov
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - ">="
270
+ - !ruby/object:Gem::Version
271
+ version: '0'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - ">="
277
+ - !ruby/object:Gem::Version
278
+ version: '0'
279
+ - !ruby/object:Gem::Dependency
280
+ name: faker
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: multi_xml
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
307
+ description: Ruby SDK for interacting with the HomeAway API
308
+ email:
309
+ - cmeyer@homeaway.com
310
+ executables:
311
+ - hacurl
312
+ extensions: []
313
+ extra_rdoc_files: []
314
+ files:
315
+ - Gemfile
316
+ - LICENSE.txt
317
+ - README.md
318
+ - Rakefile
319
+ - bin/hacurl
320
+ - lib/homeaway/api/adapters/faraday.rb
321
+ - lib/homeaway/api/adapters/hurley.rb
322
+ - lib/homeaway/api/client.rb
323
+ - lib/homeaway/api/domain/add_message.rb
324
+ - lib/homeaway/api/domain/client_includes.rb
325
+ - lib/homeaway/api/domain/conversation.rb
326
+ - lib/homeaway/api/domain/listing.rb
327
+ - lib/homeaway/api/domain/listing_reviews.rb
328
+ - lib/homeaway/api/domain/me.rb
329
+ - lib/homeaway/api/domain/my_inbox.rb
330
+ - lib/homeaway/api/domain/my_listings.rb
331
+ - lib/homeaway/api/domain/my_reservations.rb
332
+ - lib/homeaway/api/domain/quote.rb
333
+ - lib/homeaway/api/domain/search.rb
334
+ - lib/homeaway/api/domain/submit_review.rb
335
+ - lib/homeaway/api/errors/ha_api_errors.rb
336
+ - lib/homeaway/api/paginator.rb
337
+ - lib/homeaway/api/response.rb
338
+ - lib/homeaway/api/util/defaults.rb
339
+ - lib/homeaway/api/util/oauth.rb
340
+ - lib/homeaway/api/util/validators.rb
341
+ - lib/homeaway/api/version.rb
342
+ - lib/homeaway_api.rb
343
+ homepage: http://www.homeaway.com/platform/
344
+ licenses:
345
+ - Apache 2.0
346
+ metadata: {}
347
+ post_install_message:
348
+ rdoc_options: []
349
+ require_paths:
350
+ - lib
351
+ required_ruby_version: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - ">="
354
+ - !ruby/object:Gem::Version
355
+ version: '0'
356
+ required_rubygems_version: !ruby/object:Gem::Requirement
357
+ requirements:
358
+ - - ">="
359
+ - !ruby/object:Gem::Version
360
+ version: '0'
361
+ requirements: []
362
+ rubyforge_project:
363
+ rubygems_version: 2.4.5.1
364
+ signing_key:
365
+ specification_version: 4
366
+ summary: Ruby SDK for interacting with the HomeAway API
367
+ test_files: []