activeresource-response 0.3.0 → 0.4.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.
- data/README.rdoc +10 -0
- data/lib/active_resource_response.rb +2 -0
- data/lib/active_resource_response/connection.rb +0 -3
- data/lib/active_resource_response/custom_methods.rb +39 -0
- data/lib/active_resource_response/response_method.rb +5 -5
- data/lib/active_resource_response/version.rb +1 -1
- data/test/active_resource_response_test.rb +13 -12
- data/test/fixtures/country.rb +6 -1
- metadata +10 -30
data/README.rdoc
CHANGED
@@ -87,7 +87,17 @@ Example
|
|
87
87
|
Order.connection.http_response.to_hash
|
88
88
|
# => {"content-type"=>["application/json; charset=utf-8"], "x-ua-compatible"=>["IE=Edge"], "etag"=>["\"573cabd02b2f1f90405f7f4f77995fab\""], "cache-control"=>["max-age=0, private, must-revalidate"], "x-request-id"=>["2911c13a0c781044c474450ed789613d"], "x-runtime"=>["0.071018"], "content-length"=>["260"], "server"=>["WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)"], "date"=>["Sun, 19 Feb 2012 10:21:29 GMT"], "connection"=>["close"]}
|
89
89
|
|
90
|
+
== Custom get method
|
91
|
+
You can access response from result of custom get method
|
92
|
+
Example
|
90
93
|
|
94
|
+
class Country < ActiveResource::Base
|
95
|
+
self.site = 'http://0.0.0.0:3000/'
|
96
|
+
add_response_method :http # our new method
|
97
|
+
end
|
98
|
+
cities = Country.find(1).get(:cities)
|
99
|
+
cities.http #method from Country class is available
|
100
|
+
|
91
101
|
|
92
102
|
== Headers and cookies methods
|
93
103
|
You can get cookies and headers from response
|
@@ -26,8 +26,10 @@ require "active_resource_response/version"
|
|
26
26
|
require "active_resource_response/http_response"
|
27
27
|
require "active_resource_response/connection"
|
28
28
|
require "active_resource_response/response_method"
|
29
|
+
require "active_resource_response/custom_methods"
|
29
30
|
ActiveResource::Connection.send :include, ActiveResourceResponse::Connection
|
30
31
|
ActiveResource::Base.send :include, ActiveResourceResponse::ResponseMethod
|
32
|
+
ActiveResource::Base.send :include, ActiveResourceResponse::CustomMethods
|
31
33
|
if defined? ActiveResource::Response
|
32
34
|
require "active_resource_response/response"
|
33
35
|
ActiveResource::Response.send :include, ActiveResourceResponse::Response
|
@@ -26,14 +26,11 @@ module ActiveResourceResponse
|
|
26
26
|
base.class_eval do
|
27
27
|
alias_method :origin_handle_response, :handle_response
|
28
28
|
def handle_response(response)
|
29
|
-
|
30
29
|
begin
|
31
30
|
origin_handle_response(response)
|
32
31
|
rescue
|
33
|
-
|
34
32
|
raise
|
35
33
|
ensure
|
36
|
-
|
37
34
|
response.extend HttpResponse
|
38
35
|
Thread.current[:ActiveResourceResponse] = response
|
39
36
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2012 Igor Fedoronchuk
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
module ActiveResourceResponse
|
24
|
+
module CustomMethods
|
25
|
+
|
26
|
+
def get(custom_method_name, options = {})
|
27
|
+
result = super(custom_method_name, options)
|
28
|
+
if self.class.http_response_method
|
29
|
+
result.instance_variable_set(:@http_response, connection.http_response)
|
30
|
+
(class << result; self; end).send(:define_method, self.class.http_response_method ) do
|
31
|
+
@http_response
|
32
|
+
end rescue nil
|
33
|
+
end
|
34
|
+
result
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
@@ -27,7 +27,7 @@ module ActiveResourceResponse
|
|
27
27
|
def self.included(base)
|
28
28
|
base.extend ClassMethods
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
module ClassMethods
|
32
32
|
|
33
33
|
def http_response
|
@@ -36,10 +36,10 @@ module ActiveResourceResponse
|
|
36
36
|
|
37
37
|
|
38
38
|
def add_response_method(method_name = :http_response)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
|
40
|
+
class_attribute :http_response_method
|
41
|
+
self.http_response_method = method_name
|
42
|
+
|
43
43
|
remove_response_method if methods.map(&:to_sym).include?(:find_without_http_response)
|
44
44
|
[:find, :get].each do |method|
|
45
45
|
instance_eval <<-EOS
|
@@ -16,16 +16,21 @@ class ActiveResourceResponseTest < Test::Unit::TestCase
|
|
16
16
|
def setup
|
17
17
|
|
18
18
|
@country = {:country => {:id => 1, :name => "Ukraine", :iso=>"UA"}}
|
19
|
-
|
19
|
+
@city = {:city => {:id => 1, :name => "Odessa", :population => 2500000 }}
|
20
20
|
ActiveResource::HttpMock.respond_to do |mock|
|
21
|
+
|
22
|
+
|
21
23
|
mock.get "/countries.json", {}, [@country].to_json, 200, {"X-total"=>'1'}
|
22
24
|
mock.get "/countries/1.json", {}, @country.to_json, 200, {"X-total"=>'1', 'Set-Cookie'=>['path=/; expires=Tue, 20-Jan-2015 15:03:14 GMT, foo=bar, bar=foo']}
|
23
|
-
mock.get "/countries/1/
|
25
|
+
mock.get "/countries/1/population.json", {}, {:count => 45000000}.to_json, 200, {"X-total"=>'1'}
|
24
26
|
mock.post "/countries.json" , {}, @country.to_json, 422, {"X-total"=>'1'}
|
25
|
-
|
27
|
+
mock.get "/countries/1/cities.json", {}, [@city].to_json, 200, {"X-total"=>'1'}
|
26
28
|
end
|
27
29
|
|
28
30
|
|
31
|
+
|
32
|
+
|
33
|
+
|
29
34
|
end
|
30
35
|
|
31
36
|
|
@@ -49,13 +54,15 @@ class ActiveResourceResponseTest < Test::Unit::TestCase
|
|
49
54
|
|
50
55
|
|
51
56
|
def test_get_headers_from_custom_methods
|
52
|
-
count = Country.find(1).get("
|
53
|
-
assert_equal count.to_i,
|
57
|
+
count = Country.find(1).get("population")
|
58
|
+
assert_equal count.to_i, 45000000
|
54
59
|
assert_equal Country.connection.http_response['X-total'].to_i, 1
|
55
60
|
assert_equal Country.connection.http_response.headers[:x_total].to_i, 1
|
56
61
|
assert_equal Country.http_response['X-total'].to_i ,1
|
57
62
|
|
58
|
-
|
63
|
+
cities = Country.find(1).get("cities")
|
64
|
+
assert cities.respond_to?(:http)
|
65
|
+
assert_equal cities.http['X-total'].to_i, 1
|
59
66
|
end
|
60
67
|
|
61
68
|
|
@@ -79,15 +86,9 @@ class ActiveResourceResponseTest < Test::Unit::TestCase
|
|
79
86
|
|
80
87
|
|
81
88
|
def test_get_headers_after_exception
|
82
|
-
|
83
89
|
Country.create(@country[:country])
|
84
|
-
|
85
90
|
assert_equal Country.http_response['X-total'].to_i, 1
|
86
|
-
|
87
91
|
assert_equal Country.http_response.code, 422
|
88
|
-
|
89
|
-
|
90
|
-
|
91
92
|
end
|
92
93
|
|
93
94
|
|
data/test/fixtures/country.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
class
|
1
|
+
class ActiveResourceResponseBase < ActiveResource::Base
|
2
2
|
self.site = "http://37s.sunrise.i:3000"
|
3
|
+
add_response_method :http_response
|
4
|
+
end
|
5
|
+
|
6
|
+
|
7
|
+
class Country < ActiveResourceResponseBase
|
3
8
|
add_response_method :http
|
4
9
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeresource-response
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activeresource
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70242253517800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3.0'
|
24
|
+
version_requirements: *70242253517800
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: test-unit
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70242253516380 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: '0'
|
38
33
|
type: :development
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
35
|
+
version_requirements: *70242253516380
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: rake
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70242253515460 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,12 +43,7 @@ dependencies:
|
|
53
43
|
version: '0'
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
46
|
+
version_requirements: *70242253515460
|
62
47
|
description: ! 'This gem adds possibility to access http response object from result
|
63
48
|
of ActiveResource::Base find method '
|
64
49
|
email:
|
@@ -76,6 +61,7 @@ files:
|
|
76
61
|
- activeresource-response.gemspec
|
77
62
|
- lib/active_resource_response.rb
|
78
63
|
- lib/active_resource_response/connection.rb
|
64
|
+
- lib/active_resource_response/custom_methods.rb
|
79
65
|
- lib/active_resource_response/http_response.rb
|
80
66
|
- lib/active_resource_response/response.rb
|
81
67
|
- lib/active_resource_response/response_method.rb
|
@@ -97,21 +83,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
97
83
|
- - ! '>='
|
98
84
|
- !ruby/object:Gem::Version
|
99
85
|
version: '0'
|
100
|
-
segments:
|
101
|
-
- 0
|
102
|
-
hash: 3062498070536117201
|
103
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
87
|
none: false
|
105
88
|
requirements:
|
106
89
|
- - ! '>='
|
107
90
|
- !ruby/object:Gem::Version
|
108
91
|
version: '0'
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
hash: 3062498070536117201
|
112
92
|
requirements: []
|
113
93
|
rubyforge_project:
|
114
|
-
rubygems_version: 1.8.
|
94
|
+
rubygems_version: 1.8.17
|
115
95
|
signing_key:
|
116
96
|
specification_version: 3
|
117
97
|
summary: activeresource extension
|