activeresource-response 0.1.0 → 0.2.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 +8 -1
- data/Rakefile +12 -0
- data/activeresource-response.gemspec +3 -2
- data/lib/activeresource-response.rb +6 -1
- data/lib/activeresource-response/active_resource_response.rb +15 -0
- data/lib/activeresource-response/connection.rb +2 -1
- data/lib/activeresource-response/http_response.rb +29 -24
- data/lib/activeresource-response/response_method.rb +1 -1
- data/lib/activeresource-response/version.rb +1 -1
- data/test/active_resource_response_test.rb +73 -0
- data/test/fixtures/country.rb +4 -0
- metadata +41 -4
data/README.rdoc
CHANGED
@@ -23,6 +23,13 @@ You can add method to ActiveResource::Base to use it in all subclasses
|
|
23
23
|
end
|
24
24
|
|
25
25
|
|
26
|
+
You can remove method from ActiveResource subclass
|
27
|
+
|
28
|
+
class Order < ActiveResource::Base
|
29
|
+
remove_response_method
|
30
|
+
end
|
31
|
+
|
32
|
+
|
26
33
|
== Full example of usage with kaminari gem
|
27
34
|
|
28
35
|
Rest Client
|
@@ -112,4 +119,4 @@ http://stackoverflow.com/questions/5972429/active-resource-responses-how-to-get-
|
|
112
119
|
|
113
120
|
|
114
121
|
== Please, feel free to contact me if you have any questions
|
115
|
-
fedoronchuk(at)gmail.com
|
122
|
+
fedoronchuk(at)gmail.com
|
data/Rakefile
CHANGED
@@ -15,11 +15,12 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
s.add_dependency('activeresource', '>= 3.0')
|
17
17
|
|
18
|
-
|
18
|
+
s.add_development_dependency "test-unit"
|
19
|
+
s.add_development_dependency 'rake'
|
19
20
|
|
20
21
|
s.extra_rdoc_files = %w( README.rdoc )
|
21
22
|
s.rdoc_options.concat ['--main', 'README.rdoc']
|
22
|
-
|
23
|
+
|
23
24
|
|
24
25
|
s.files = `git ls-files | sed '/.gitignore/d'`.split("\n")
|
25
26
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
@@ -4,4 +4,9 @@ require "activeresource-response/http_response"
|
|
4
4
|
require "activeresource-response/connection"
|
5
5
|
require "activeresource-response/response_method"
|
6
6
|
ActiveResource::Connection.send :include, ActiveresourceResponse::Connection
|
7
|
-
ActiveResource::Base.send :include, ActiveresourceResponse::ResponseMethod
|
7
|
+
ActiveResource::Base.send :include, ActiveresourceResponse::ResponseMethod
|
8
|
+
if defined? ActiveResource::Response
|
9
|
+
require "activeresource-response/active_resource_response"
|
10
|
+
ActiveResource::Response.send :include, ActiveResourceResponse::Response
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ActiveResourceResponse
|
2
|
+
module Response
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
def to_hash
|
6
|
+
@headers
|
7
|
+
end
|
8
|
+
# to avoid method name conflict with ActiveresourceResponse:HttpResponse:headers
|
9
|
+
def [](key)
|
10
|
+
@headers[key]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -9,7 +9,8 @@ module ActiveresourceResponse
|
|
9
9
|
rescue StandardError => e
|
10
10
|
raise e
|
11
11
|
end
|
12
|
-
response.extend(ActiveresourceResponse::HttpResponse)
|
12
|
+
response.extend(ActiveresourceResponse::HttpResponse)
|
13
|
+
|
13
14
|
Thread.current[:ActiveResourceHttpResponse] = response
|
14
15
|
end
|
15
16
|
def http_response
|
@@ -1,27 +1,32 @@
|
|
1
1
|
module ActiveresourceResponse
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
2
|
+
module HttpResponse
|
3
|
+
|
4
|
+
def headers
|
5
|
+
unless defined? @_active_resource_response_headers
|
6
|
+
@_active_resource_response_headers = symbolize_keys(to_hash)
|
7
|
+
end
|
8
|
+
@_active_resource_response_headers
|
9
|
+
end
|
10
|
+
|
11
|
+
def cookies
|
12
|
+
unless defined? @_active_resource_response_cookies
|
13
|
+
@_active_resource_response_cookies = (self.headers[:set_cookie] || {}).inject({}) do |out, cookie_str|
|
14
|
+
CGI::Cookie::parse(cookie_str).each do |key, cookie|
|
15
|
+
out[key] = cookie.value.first unless ['expires', 'path'].include? key
|
16
|
+
end
|
17
|
+
out
|
18
|
+
end
|
19
|
+
end
|
20
|
+
@_active_resource_response_cookies
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def symbolize_keys(hash)
|
25
|
+
hash.inject({}) do |out, (key, value)|
|
26
|
+
out[key.gsub(/-/, '_').downcase.to_sym] = value
|
27
|
+
out
|
28
|
+
end
|
29
|
+
end
|
17
30
|
|
18
|
-
|
19
|
-
def symbolize_keys(hash)
|
20
|
-
hash.inject({}) do |out, (key, value)|
|
21
|
-
out[key.gsub(/-/, '_').downcase.to_sym] = value
|
22
|
-
out
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
31
|
+
end
|
27
32
|
end
|
@@ -9,7 +9,7 @@ module ActiveresourceResponse
|
|
9
9
|
module ClassMethods
|
10
10
|
def add_response_method(method_name = :http_response)
|
11
11
|
|
12
|
-
remove_response_method if methods.include?(:find_without_http_response)
|
12
|
+
remove_response_method if methods.map(&:to_sym).include?(:find_without_http_response)
|
13
13
|
[:find, :get].each do |method|
|
14
14
|
instance_eval <<-EOS
|
15
15
|
alias #{method}_without_http_response #{method}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
lib = File.expand_path("#{File.dirname(__FILE__)}/../lib")
|
2
|
+
test = File.expand_path("#{File.dirname(__FILE__)}/../test")
|
3
|
+
$:.unshift(lib)
|
4
|
+
$:.unshift(test)
|
5
|
+
|
6
|
+
require 'test/unit'
|
7
|
+
require 'active_resource'
|
8
|
+
require 'active_resource/http_mock'
|
9
|
+
require 'activeresource-response'
|
10
|
+
require "fixtures/country"
|
11
|
+
|
12
|
+
|
13
|
+
class ActiveResourceResponseTest < Test::Unit::TestCase
|
14
|
+
|
15
|
+
|
16
|
+
def setup
|
17
|
+
|
18
|
+
@country = {:country => {:id => 1, :name => "Ukraine", :iso=>"UA"}}
|
19
|
+
ActiveResource::HttpMock.respond_to do |mock|
|
20
|
+
mock.get "/countries.json", {}, [@country].to_json, 200, {"X-total"=>'1'}
|
21
|
+
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']}
|
22
|
+
mock.get "/countries/1/count.json", {}, {:count => 1155}.to_json, 200, {"X-total"=>'1'}
|
23
|
+
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
def test_methods_appeared
|
32
|
+
countries = Country.all
|
33
|
+
assert countries.respond_to?(:http)
|
34
|
+
assert countries.http.respond_to?(:cookies)
|
35
|
+
assert countries.http.respond_to?(:headers)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_get_headers_from_all
|
39
|
+
countries = Country.all
|
40
|
+
assert_kind_of Country, countries.first
|
41
|
+
assert_equal "UA", countries.first.iso
|
42
|
+
|
43
|
+
assert_equal countries.http['X-total'].to_i, 1
|
44
|
+
assert_equal countries.http.headers[:x_total].to_i, 1
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def test_get_headers_from_custom_methods
|
50
|
+
count = Country.find(1).get("count")
|
51
|
+
assert_equal count.to_i, 1155
|
52
|
+
assert_equal Country.connection.http_response['X-total'].to_i, 1
|
53
|
+
assert_equal Country.connection.http_response.headers[:x_total].to_i, 1
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def test_get_headers_from_find
|
59
|
+
country = Country.find(1)
|
60
|
+
assert_equal country.http['X-total'].to_i, 1
|
61
|
+
assert_equal country.http.headers[:x_total].to_i, 1
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
def test_get_cookies
|
67
|
+
country = Country.find(1)
|
68
|
+
assert_equal country.http.cookies['foo'] , 'bar'
|
69
|
+
assert_equal country.http.cookies['bar'] , 'foo'
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
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.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activeresource
|
@@ -27,6 +27,38 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '3.0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: test-unit
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
30
62
|
description: ! 'This gem adds possibility to access http response object from result
|
31
63
|
of ActiveResource::Base find method '
|
32
64
|
email:
|
@@ -42,10 +74,13 @@ files:
|
|
42
74
|
- Rakefile
|
43
75
|
- activeresource-response.gemspec
|
44
76
|
- lib/activeresource-response.rb
|
77
|
+
- lib/activeresource-response/active_resource_response.rb
|
45
78
|
- lib/activeresource-response/connection.rb
|
46
79
|
- lib/activeresource-response/http_response.rb
|
47
80
|
- lib/activeresource-response/response_method.rb
|
48
81
|
- lib/activeresource-response/version.rb
|
82
|
+
- test/active_resource_response_test.rb
|
83
|
+
- test/fixtures/country.rb
|
49
84
|
homepage: http://fivell.github.com/activeresource-response/
|
50
85
|
licenses: []
|
51
86
|
post_install_message:
|
@@ -68,8 +103,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
103
|
version: '0'
|
69
104
|
requirements: []
|
70
105
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.8.
|
106
|
+
rubygems_version: 1.8.24
|
72
107
|
signing_key:
|
73
108
|
specification_version: 3
|
74
109
|
summary: activeresource extension
|
75
|
-
test_files:
|
110
|
+
test_files:
|
111
|
+
- test/active_resource_response_test.rb
|
112
|
+
- test/fixtures/country.rb
|