apipie-bindings 0.0.6 → 0.0.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5699ff9f351b5d069a6426915b9a4c1673ca7318
4
- data.tar.gz: caa65d9c3c386c307085446315c4b21656fd352e
3
+ metadata.gz: 9fbf9178dc6e7698d91a6a0d9f57bb3ca00e6b40
4
+ data.tar.gz: 7ede66362f69586d304590dd6c449bc4fe5e5f26
5
5
  SHA512:
6
- metadata.gz: 7f455309fb404431fdb24355d3e29f5649fb4f2b56295a728964a8c57cb8e56e7e47513d8775d68a8f45b67c386e597c4efaf504dac7a6a313be4d07e6417d54
7
- data.tar.gz: c44b832e460b910b97ece3376e69e2037594d8cf3521c7dffc37ff78dbf3a2b804bd15c5cb51c94006f6e9a4f8c1d095809ee6575e93430fb6cbcaa94ba93fcc
6
+ metadata.gz: 25ba2db8f6dcae59ca171a0309fccca7a1bfb8978dfac0a860d62a5c33e4f62c65cbedd6c0b98d6d79da37196fd10beefb941d69ee26860a6dd9e50fd85008ed
7
+ data.tar.gz: 11194189f412fc4627b2d61abd9472f2a2543c56889c27c99d6c2dc91a92840f1bcfe4789c0f79e117cf4825bc01aba11ca721d47a06895fa7975979f23e78d4
@@ -9,7 +9,7 @@ module ApipieBindings
9
9
 
10
10
  class API
11
11
 
12
- attr_reader :apidoc_cache_name, :fake_responses
12
+ attr_reader :apidoc_cache_name, :fake_responses, :language
13
13
  attr_writer :dry_run
14
14
 
15
15
  # Creates new API bindings instance
@@ -23,7 +23,8 @@ module ApipieBindings
23
23
  # * *:options* (Hash) options passed to OAuth
24
24
  # @option config [Hash] :headers additional headers to send with the requests
25
25
  # @option config [String] :api_version ('1') version of the API
26
- # @option config [String] :apidoc_cache_dir ('/tmp/apipie_bindings/<URI>') where
26
+ # @option config [String] :language prefered locale for the API description
27
+ # @option config [String] :apidoc_cache_dir ('~/.cache/apipie_bindings/<URI>') where
27
28
  # to cache the JSON description of the API
28
29
  # @option config [String] :apidoc_cache_name ('default.json') name of te cache file.
29
30
  # If there is cache in the :apidoc_cache_dir, it is used.
@@ -51,12 +52,12 @@ module ApipieBindings
51
52
  end
52
53
  @uri = config[:uri]
53
54
  @api_version = config[:api_version] || 1
54
- @apidoc_cache_dir = config[:apidoc_cache_dir] || File.join(Dir.tmpdir, 'apipie_bindings', @uri.tr(':/', '_'))
55
+ @language = config[:language]
56
+ @apidoc_cache_dir = config[:apidoc_cache_dir] || File.join(File.expand_path('~/.cache'), 'apipie_bindings', @uri.tr(':/', '_'))
55
57
  @apidoc_cache_name = config[:apidoc_cache_name] || set_default_name
56
58
  @dry_run = config[:dry_run] || false
57
59
  @aggressive_cache_checking = config[:aggressive_cache_checking] || false
58
60
  @fake_responses = config[:fake_responses] || {}
59
-
60
61
  @logger = config[:logger]
61
62
  unless @logger
62
63
  @logger = Logger.new(STDERR)
@@ -69,9 +70,12 @@ module ApipieBindings
69
70
  :content_type => 'application/json',
70
71
  :accept => "application/json;version=#{@api_version}"
71
72
  }
73
+ headers.merge!({ "Accept-Language" => language }) if language
72
74
  headers.merge!(config[:headers]) unless config[:headers].nil?
73
75
  headers.merge!(options.delete(:headers)) unless options[:headers].nil?
74
76
 
77
+ log.debug "Global headers: #{headers.ai}"
78
+
75
79
  resource_config = {
76
80
  :user => config[:username],
77
81
  :password => config[:password],
@@ -84,17 +88,9 @@ module ApipieBindings
84
88
  @config = config
85
89
  end
86
90
 
87
- def set_default_name(default='default')
88
- cache_file = Dir["#{@apidoc_cache_dir}/*.json"].first
89
- if cache_file
90
- File.basename(cache_file, ".json")
91
- else
92
- default
93
- end
94
- end
95
91
 
96
92
  def apidoc_cache_file
97
- File.join(@apidoc_cache_dir, "#{@apidoc_cache_name}.json")
93
+ File.join(@apidoc_cache_dir, "#{@apidoc_cache_name}#{cache_extension}")
98
94
  end
99
95
 
100
96
  def load_apidoc
@@ -166,6 +162,7 @@ module ApipieBindings
166
162
  # @param [Hash] headers extra headers to be sent with the request
167
163
  # @param [Hash] options options to influence the how the call is processed
168
164
  # * *:response* (Symbol) *:raw* - skip parsing JSON in response
165
+ # * *:reduce_response_log* (Bool) - do not show response content in the log.
169
166
  # @example show user data
170
167
  # http_call('get', '/api/users/1')
171
168
  def http_call(http_method, path, params={}, headers={}, options={})
@@ -185,6 +182,7 @@ module ApipieBindings
185
182
 
186
183
  log.info "#{http_method.to_s.upcase} #{path}"
187
184
  log.debug "Params: #{params.ai}"
185
+ log.debug "Headers: #{headers.ai}"
188
186
 
189
187
  args << headers if headers
190
188
 
@@ -193,24 +191,21 @@ module ApipieBindings
193
191
  ex = options[:fake_response ] || empty_response
194
192
  response = RestClient::Response.create(ex.response, ex.status, args)
195
193
  else
196
- response = @client[path].send(*args)
197
- update_cache(response.headers[:apipie_checksum])
194
+ begin
195
+ response = @client[path].send(*args)
196
+ update_cache(response.headers[:apipie_checksum])
197
+ rescue => e
198
+ log.error e.message + "\n" +
199
+ (e.respond_to?(:response) ? process_data(e.response).ai : e.ai)
200
+ raise
201
+ end
198
202
  end
199
203
 
200
204
  result = options[:response] == :raw ? response : process_data(response)
201
- log.debug "Response #{result.ai}"
205
+ log.debug "Response %s" % (options[:reduce_response_log] ? "Received OK" : result.ai)
202
206
  result
203
207
  end
204
208
 
205
- def process_data(response)
206
- data = begin
207
- JSON.parse(response.body)
208
- rescue JSON::ParserError
209
- response.body
210
- end
211
- # logger.debug "Returned data: #{data.inspect}"
212
- return data
213
- end
214
209
 
215
210
  def update_cache(cache_name)
216
211
  if !cache_name.nil? && (cache_name != @apidoc_cache_name)
@@ -222,7 +217,7 @@ module ApipieBindings
222
217
 
223
218
  def clean_cache
224
219
  @apidoc = nil
225
- Dir["#{@apidoc_cache_dir}/*.json"].each { |f| File.delete(f) }
220
+ Dir["#{@apidoc_cache_dir}/*#{cache_extension}"].each { |f| File.delete(f) }
226
221
  end
227
222
 
228
223
  def check_cache
@@ -242,21 +237,37 @@ module ApipieBindings
242
237
 
243
238
  def retrieve_apidoc
244
239
  FileUtils.mkdir_p(@apidoc_cache_dir) unless File.exists?(@apidoc_cache_dir)
245
- path = "/apidoc/v#{@api_version}.json"
246
- begin
247
- response = http_call('get', path, {},
248
- {:accept => "application/json"}, {:response => :raw})
249
- rescue
250
- raise ApipieBindings::DocLoadingError.new(
251
- "Could not load data from #{@uri}#{path}\n"\
252
- " - is your server down?\n"\
253
- " - was rake apipie:cache run when using apipie cache? (typical production settings)")
240
+ if language
241
+ response = retrieve_apidoc_call("/apidoc/v#{@api_version}.#{language}.json", :safe => true)
242
+ language_family = language.split('_').first
243
+ if !response && language_family != language
244
+ response = retrieve_apidoc_call("/apidoc/v#{@api_version}.#{language_family}.json", :safe => true)
245
+ end
246
+ end
247
+ unless response
248
+ begin
249
+ response = retrieve_apidoc_call("/apidoc/v#{@api_version}.json")
250
+ rescue
251
+ raise ApipieBindings::DocLoadingError.new(
252
+ "Could not load data from #{@uri}\n"\
253
+ " - is your server down?\n"\
254
+ " - was rake apipie:cache run when using apipie cache? (typical production settings)")
255
+ end
254
256
  end
255
257
  File.open(apidoc_cache_file, "w") { |f| f.write(response.body) }
256
258
  log.debug "New apidoc loaded from the server"
257
259
  load_apidoc
258
260
  end
259
261
 
262
+ def retrieve_apidoc_call(path, options={})
263
+ begin
264
+ http_call('get', path, {},
265
+ {:accept => "application/json"}, {:response => :raw, :reduce_response_log => true})
266
+ rescue
267
+ raise unless options[:safe]
268
+ end
269
+ end
270
+
260
271
  def find_match(fakes, resource, action, params)
261
272
  resource = fakes[[resource, action]]
262
273
  if resource
@@ -269,6 +280,28 @@ module ApipieBindings
269
280
  return nil
270
281
  end
271
282
 
283
+ def cache_extension
284
+ language ? ".#{language}.json" : ".json"
285
+ end
286
+
287
+ def set_default_name(default='default')
288
+ cache_file = Dir["#{@apidoc_cache_dir}/*#{cache_extension}"].first
289
+ if cache_file
290
+ File.basename(cache_file, cache_extension)
291
+ else
292
+ default
293
+ end
294
+ end
295
+
296
+ def process_data(response)
297
+ data = begin
298
+ JSON.parse(response.body)
299
+ rescue JSON::ParserError
300
+ response.body
301
+ end
302
+ # logger.debug "Returned data: #{data.inspect}"
303
+ return data
304
+ end
272
305
  end
273
306
 
274
307
  end
@@ -1,5 +1,5 @@
1
1
  module ApipieBindings
2
2
  def self.version
3
- @version ||= Gem::Version.new '0.0.6'
3
+ @version ||= Gem::Version.new '0.0.7'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apipie-bindings
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Bačovský
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-21 00:00:00.000000000 Z
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.2.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 1.2.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rest-client
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  version: '0'
135
135
  requirements: []
136
136
  rubyforge_project:
137
- rubygems_version: 2.0.14
137
+ rubygems_version: 2.1.11
138
138
  signing_key:
139
139
  specification_version: 4
140
140
  summary: The Ruby bindings for Apipie documented APIs