easy-api 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d40b6123390053de3f071e4f6165a17be784a6bb
4
- data.tar.gz: 83f13e03a1719a0a8dd588053a0c170f9bec1337
3
+ metadata.gz: e7a7b501b68e2d27078a346db4d2e9ccd369c227
4
+ data.tar.gz: 4c9343aac20833e366a9e62d213457f9c1e76e47
5
5
  SHA512:
6
- metadata.gz: bb38bf79de2f57ccfdc344f0da6d2783fb340bca834f64104b2aa41b7a2ad6f27a4aaed8c4121c137679d18f3c9296651293015a50a5d2ee22b3c121bbf03d73
7
- data.tar.gz: 2f77205504310db22339ab5b0f51d177c043ee4ad4d7e439568cbc88f60bc0cacfbc60f565faeb462a3b8e9179eb7f1d6a416a5e21ef6b2f2246135502191fe0
6
+ metadata.gz: 24a3a204a78387f1571f66f832c4b343b5c1b5786b3fac965449b514da09bab49ae71a9bb0d35e1c7cf56e9ebb12d2663be60545501e34bcc0a95d983a7a2f85
7
+ data.tar.gz: e98d3bc861219153d22ef088100079c1346e75dd7273b14ba2a5a12a9abf6de6bdb5e6971d4f53df7a1a9673e8f3d10431ec3fbdb8891799ee72ecfdc7e85842
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # EasyAPI 0.2.3 (August 28, 2015) #
2
+
3
+ * Allow Easy::Api:Error.codes and Easy::Api:Error.messages to be added to
4
+
5
+ # EasyAPI 0.2.2 (August 15, 2014) #
6
+
7
+ * Reintroduce default formatting options when rendering xml
8
+
1
9
  # EasyAPI 0.2.1 (July 30, 2014) #
2
10
 
3
11
  * Auto-load without the need for a require statement
@@ -14,4 +22,4 @@
14
22
  # EasyAPI 0.1.2 (March 11, 2013) #
15
23
 
16
24
  * Genericize error messages
17
- * Add support for Ruby 1.8.7
25
+ * Add support for Ruby 1.8.7
data/README.md CHANGED
@@ -36,6 +36,11 @@ If you want to override the default error message, pass in a custom message, e.g
36
36
 
37
37
  Easy::Api::Error objects have a code (e.g. 404) and a message (e.g. 'Resource not found')
38
38
 
39
+ You can also define you own error types. Add the following to `initializers/easy_api.rb`
40
+
41
+ Easy::Api::Error.codes[:rate_limited] = 429
42
+ Easy::Api::Error.messages[:rate_limited] = 'Rate limited'
43
+
39
44
  ### Using Easy::Api
40
45
 
41
46
  Add the following line to all Api Controllers:
@@ -72,7 +77,9 @@ Then render the result
72
77
 
73
78
  api.render_result(format: params[:format])
74
79
 
75
- If your API supports callbacks these can also be passed
80
+ ### Support for JSONP
81
+
82
+ If your API supports callbacks (JSONP) these can also be passed. The returned content_type header will change to `application/javascript` in this case.
76
83
 
77
84
  api.render_result(format: params[:format], callback: params[:callback])
78
85
 
@@ -25,10 +25,16 @@ module Easy::Api::BlockWrapper
25
25
  # use the controller to render the response
26
26
  def render_result(render_params)
27
27
  format = (render_params[:format] || 'json').try(:to_sym)
28
+ formatted_result = if format == :xml
29
+ @result.to_xml(render_params[:options] || {})
30
+ else
31
+ @result
32
+ end
33
+
28
34
  if render_params[:callback].blank?
29
- @controller.render(format => @result, :status => @result.status_code)
35
+ @controller.render(format => formatted_result, :status => @result.status_code)
30
36
  else
31
- @controller.render(format => @result, :status => @result.status_code, :callback => render_params[:callback], :content_type => 'application/javascript')
37
+ @controller.render(format => formatted_result, :status => @result.status_code, :callback => render_params[:callback], :content_type => 'application/javascript')
32
38
  end
33
39
  end
34
40
 
@@ -4,7 +4,7 @@ module Easy::Api
4
4
  attr_reader :code, :message
5
5
 
6
6
  def self.codes
7
- {
7
+ @_codes ||= {
8
8
  :invalid => 400,
9
9
  :unauthorized => 401,
10
10
  :not_found => 404,
@@ -13,7 +13,7 @@ module Easy::Api
13
13
  end
14
14
 
15
15
  def self.messages
16
- {
16
+ @_messages ||= {
17
17
  :invalid => "Invalid request",
18
18
  :unauthorized => "Unauthorized request",
19
19
  :not_found => "Resource not found",
@@ -1,4 +1,5 @@
1
1
  require 'ostruct'
2
+ require "active_support/core_ext/hash/conversions"
2
3
 
3
4
  module Easy::Api
4
5
  # Encapsulates the response data of an API call
@@ -42,6 +43,9 @@ module Easy::Api
42
43
  # Will always contain 'success', the error if there is one, and any dynamic attributes.
43
44
  # @return [Hash]
44
45
  def to_xml(options={})
46
+ options = options.dup
47
+ options[:root] ||= 'response'
48
+ options[:skip_types] ||= true
45
49
  convert_to_hash.to_xml(options)
46
50
  end
47
51
 
@@ -1,5 +1,5 @@
1
1
  module Easy
2
2
  module Api
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.3"
4
4
  end
5
5
  end
@@ -28,7 +28,7 @@ RSpec.describe CustomersController, :type => :controller do
28
28
 
29
29
  it "gets the index in xml format" do
30
30
  get :index, :format => 'xml'
31
- expect(response.body).to eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<hash>\n <customers type=\"array\">\n <customer>\n <name>fred</name>\n <age>19</age>\n </customer>\n <customer>\n <name>jackie</name>\n <age>21</age>\n </customer>\n </customers>\n <success type=\"boolean\">true</success>\n</hash>\n")
31
+ expect(response.body).to eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response>\n <customers>\n <customer>\n <name>fred</name>\n <age>19</age>\n </customer>\n <customer>\n <name>jackie</name>\n <age>21</age>\n </customer>\n </customers>\n <success>true</success>\n</response>\n")
32
32
  end
33
33
 
34
34
  end
@@ -47,7 +47,7 @@ RSpec.describe CustomersController, :type => :controller do
47
47
 
48
48
  it "gets show in xml format" do
49
49
  get :show, :format => 'xml', id: 1
50
- expect(response.body).to eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<hash>\n <customer>\n <name>fred</name>\n <age>21</age>\n </customer>\n <success type=\"boolean\">true</success>\n</hash>\n")
50
+ expect(response.body).to eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response>\n <customer>\n <name>fred</name>\n <age>21</age>\n </customer>\n <success>true</success>\n</response>\n")
51
51
  end
52
52
 
53
53
  end
@@ -33,4 +33,18 @@ describe Easy::Api::Error do
33
33
  expect(subject[:message]).to eql message
34
34
  end
35
35
  end
36
+
37
+ describe "#errors" do
38
+ it "should allow the Easy::Api:Error.codes to be altered" do
39
+ Easy::Api::Error.codes[:new_error] = 1010
40
+ expect(Easy::Api::Error.codes[:new_error]).to eq(1010)
41
+ end
42
+ end
43
+
44
+ describe "#messages" do
45
+ it "should allow the Easy::Api:Error.messages to be altered" do
46
+ Easy::Api::Error.messages[:new_error] = 'I am new'
47
+ expect(Easy::Api::Error.messages[:new_error]).to eq('I am new')
48
+ end
49
+ end
36
50
  end
@@ -93,4 +93,38 @@ describe Easy::Api::Result do
93
93
  end
94
94
  end
95
95
  end
96
+
97
+ describe "#to_xml" do
98
+
99
+ let(:result) { Easy::Api::Result.new }
100
+ subject { result.to_xml }
101
+
102
+ context "when result is unsuccessful" do
103
+ let(:api_error) { Easy::Api::Error.new(:unauthorized) }
104
+
105
+ before do
106
+ result.error = api_error
107
+ end
108
+
109
+ it "renders the object as " do
110
+ expect(subject).to eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response>\n <success>false</success>\n <error>\n <code>401</code>\n <message>Unauthorized request</message>\n </error>\n</response>\n")
111
+ end
112
+
113
+ end
114
+
115
+ context "when result is successful" do
116
+
117
+ before do
118
+ result.success = true
119
+ result.customer = "Bob Loblaw"
120
+ end
121
+
122
+ it "renders the object as " do
123
+ expect(subject).to eql("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<response>\n <customer>Bob Loblaw</customer>\n <success>true</success>\n</response>\n")
124
+ end
125
+
126
+ end
127
+
128
+ end
129
+
96
130
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shevaun Coker
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-07-29 00:00:00.000000000 Z
13
+ date: 2015-08-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
@@ -175,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
175
175
  version: '0'
176
176
  requirements: []
177
177
  rubyforge_project:
178
- rubygems_version: 2.0.6
178
+ rubygems_version: 2.2.2
179
179
  signing_key:
180
180
  specification_version: 4
181
181
  summary: Facilitates standard success and error behaviour in API responses