dupe 0.5.3 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -15,39 +15,9 @@ If you want to install this for use in something other than a rails project, sim
15
15
 
16
16
  # gem install dupe
17
17
 
18
- If you're going to use this in a rails (2.3.*) project, add this to your cucumber.rb environment (config/environments/cucumber.rb)
19
-
20
- config.gem 'dupe'
21
-
22
- Then run this rake task to install the gem:
23
-
24
- # rake gems:install RAILS_ENV=cucumber
25
-
26
- Lastly, from your rails project root, run:
27
-
28
- # script/generate dupe
29
-
30
- That last command will create the following directories:
31
-
32
- - RAILS_ROOT/features/dupe
33
- - RAILS_ROOT/features/dupe/definitions
34
- - RAILS_ROOT/features/dupe/custom_mocks
35
-
36
- It will also place example Dupe definitions in RAILS_ROOT/features/dupe/definitions/definitions.rb as well as example custom mocks in RAILS_ROOT/features/dupe/custom_mocks/custom_mocks.rb
37
-
38
- Lastly, it will add a load_dupe.rb file (that loads up the definitions and custom mocks) to RAILS_ROOT/features/support/load_dupe.rb
39
-
40
18
  == Rails 3
41
19
 
42
- {Thorbjørn Hermansen}[http://github.com/thhermansen] has contributed a branch[http://github.com/moonmaster9000/dupe/tree/rails3] for rails 3 compatibility!
43
- If you need Dupe for a rails 3 project, give it a whirl. Simply add something like the following to your bundler file:
44
-
45
- gem 'dupe', :git => 'git://github.com/moonmaster9000/dupe.git', :branch => 'rails3'
46
-
47
- "script/generate dupe" doesn't yet work in Rails3.
48
-
49
- Once Rails3 goes production, we'll be merging this branch into master and only supporting Rails3 from that point on. (Of course, if
50
- anyone at that point still has a need to use Dupe in a rails 2.3 project, they will still be able to use one of the older versions).
20
+ Dupe versions 0.6.0 and greater only work with Rails 3 / ActiveResource 3. If you're working on a Rails 2.* project, use Dupe version 0.5.3.
51
21
 
52
22
  = Tutorial
53
23
 
@@ -8,7 +8,7 @@ module ActiveResource #:nodoc:
8
8
  class Connection #:nodoc:
9
9
  def get(path, headers = {}) #:nodoc:
10
10
  begin
11
- response = request(:get, path, build_request_headers(headers, :get))
11
+ response = request(:get, path, build_request_headers(headers, :get, self.site.merge(path)))
12
12
 
13
13
  # if the request threw an exception
14
14
  rescue
@@ -16,7 +16,7 @@ module ActiveResource #:nodoc:
16
16
  ActiveResource::HttpMock.respond_to do |mock|
17
17
  mock.get(path, {}, mocked_response)
18
18
  end
19
- response = request(:get, path, build_request_headers(headers, :get))
19
+ response = request(:get, path, build_request_headers(headers, :get, self.site.merge(path)))
20
20
  ActiveResource::HttpMock.delete_mock(:get, path)
21
21
  end
22
22
  format.decode(response.body)
@@ -24,7 +24,7 @@ module ActiveResource #:nodoc:
24
24
 
25
25
  def post(path, body = '', headers = {}) #:nodoc:
26
26
  begin
27
- response = request(:post, path, body.to_s, build_request_headers(headers, :post))
27
+ response = request(:post, path, body.to_s, build_request_headers(headers, :post, self.site.merge(path)))
28
28
 
29
29
  # if the request threw an exception
30
30
  rescue
@@ -45,7 +45,7 @@ module ActiveResource #:nodoc:
45
45
  mock.post(path, {}, mocked_response, 201, "Location" => new_path)
46
46
  end
47
47
  end
48
- response = request(:post, path, body.to_s, build_request_headers(headers, :post))
48
+ response = request(:post, path, body.to_s, build_request_headers(headers, :post, self.site.merge(path)))
49
49
  ActiveResource::HttpMock.delete_mock(:post, path)
50
50
  end
51
51
  response
@@ -53,12 +53,14 @@ module ActiveResource #:nodoc:
53
53
 
54
54
  def put(path, body = '', headers = {}) #:nodoc:
55
55
  begin
56
- response = request(:put, path, body.to_s, build_request_headers(headers, :put))
56
+ response = request(:put, path, body.to_s, build_request_headers(headers, :put, self.site.merge(path)))
57
57
 
58
58
  # if the request threw an exception
59
59
  rescue
60
- resource_hash = Hash.from_xml(body)
61
- resource_hash = resource_hash[resource_hash.keys.first]
60
+ unless body.blank?
61
+ resource_hash = Hash.from_xml(body)
62
+ resource_hash = resource_hash[resource_hash.keys.first]
63
+ end
62
64
  resource_hash = {} unless resource_hash.kind_of?(Hash)
63
65
  resource_hash.symbolize_keys!
64
66
 
@@ -76,7 +78,7 @@ module ActiveResource #:nodoc:
76
78
  mock.put(path, {}, mocked_response, 204)
77
79
  end
78
80
  end
79
- response = request(:put, path, body.to_s, build_request_headers(headers, :put))
81
+ response = request(:put, path, body.to_s, build_request_headers(headers, :put, self.site.merge(path)))
80
82
  ActiveResource::HttpMock.delete_mock(:put, path)
81
83
  end
82
84
  response
@@ -88,7 +90,7 @@ module ActiveResource #:nodoc:
88
90
  ActiveResource::HttpMock.respond_to do |mock|
89
91
  mock.delete(path, {}, nil, 200)
90
92
  end
91
- response = request(:delete, path, build_request_headers(headers, :delete))
93
+ response = request(:delete, path, build_request_headers(headers, :delete, self.site.merge(path)))
92
94
 
93
95
  ActiveResource::HttpMock.delete_mock(:delete, path)
94
96
  response
data/lib/dupe.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'dupe/hash_pruner'
2
+ require 'active_support/inflector'
3
+ require 'active_support/core_ext'
2
4
  require 'active_resource'
3
5
  require 'active_resource/http_mock'
6
+ require 'active_resource/version'
4
7
  require 'dupe/singular_plural_detection'
5
8
  require 'dupe/symbol'
6
9
  require 'dupe/string'
@@ -9,7 +9,7 @@ describe ActiveResource::Connection do
9
9
  before do
10
10
  @book = Dupe.create :book, :title => 'Rooby', :label => 'rooby'
11
11
  class Book < ActiveResource::Base
12
- self.site = ''
12
+ self.site = 'http://www.example.com'
13
13
  end
14
14
  end
15
15
 
@@ -32,7 +32,7 @@ describe ActiveResource::Connection do
32
32
  @book = Dupe.create :book, :label => 'rooby', :title => 'Rooby'
33
33
  @book.delete(:id)
34
34
  class Book < ActiveResource::Base
35
- self.site = ''
35
+ self.site = 'http://www.example.com'
36
36
  end
37
37
  end
38
38
 
@@ -56,7 +56,7 @@ describe ActiveResource::Connection do
56
56
 
57
57
  b = Book.create
58
58
  b.new?.should be_true
59
- b.errors.errors.should_not be_empty
59
+ b.errors.should_not be_empty
60
60
  b = Book.create(:title => "hello")
61
61
  b.new?.should be_false
62
62
  b.errors.should be_empty
@@ -67,16 +67,43 @@ describe ActiveResource::Connection do
67
67
  before do
68
68
  @book = Dupe.create :book, :label => 'rooby', :title => 'Rooby'
69
69
  class Book < ActiveResource::Base
70
- self.site = ''
70
+ self.site = 'http://www.example.com'
71
71
  end
72
72
  @ar_book = Book.find(1)
73
73
  end
74
74
 
75
75
  it "should pass a request off to the Dupe network if the original request failed" do
76
- Dupe.network.should_receive(:request).with(:put, '/books/1.xml', Hash.from_xml(@book.merge(:title => "Rails!").to_xml(:root => 'book'))["book"].symbolize_keys!).once
76
+ Dupe.network.should_receive(:request).with(:put, '/books/1.xml', Hash.from_xml(@book.merge(:title => "Rails!").to_xml(:root => 'book'))["book"].symbolize_keys!).once.and_return([nil, '/books/1.xml'])
77
77
  @ar_book.title = 'Rails!'
78
78
  @ar_book.save
79
79
  end
80
+
81
+ context "put methods that return HTTP 204" do
82
+ before(:each) do
83
+ class ExpirableBook < ActiveResource::Base
84
+ self.site = 'http://www.example.com'
85
+ attr_accessor :state
86
+
87
+ def expire_copyrights!
88
+ put(:expire)
89
+ end
90
+ end
91
+
92
+ Put %r{/expirable_books/(\d)+/expire.xml} do |id, body|
93
+ Dupe.find(:expirable_book) { |eb| eb.id == id.to_i }.tap { |book|
94
+ book.state = 'expired'
95
+ }
96
+ end
97
+
98
+ @e = Dupe.create :expirable_book, :title => 'Impermanence', :state => 'active'
99
+ end
100
+
101
+ it "should handle no-content responses" do
102
+ response = ExpirableBook.find(@e.id).expire_copyrights!
103
+ response.body.should be_blank
104
+ response.code.to_s.should == "204"
105
+ end
106
+ end
80
107
 
81
108
  it "should parse the xml and turn the result into active resource objects" do
82
109
  @book.title.should == "Rooby"
@@ -99,7 +126,7 @@ describe ActiveResource::Connection do
99
126
 
100
127
  @ar_book.title = nil
101
128
  @ar_book.save.should == false
102
- @ar_book.errors.on_base.should_not be_empty
129
+ @ar_book.errors[:base].should_not be_empty
103
130
 
104
131
  @ar_book.title = "Rails!"
105
132
  @ar_book.save.should == true
@@ -113,7 +140,7 @@ describe ActiveResource::Connection do
113
140
  before do
114
141
  @book = Dupe.create :book, :label => 'rooby', :title => 'Rooby'
115
142
  class Book < ActiveResource::Base
116
- self.site = ''
143
+ self.site = 'http://www.example.com'
117
144
  end
118
145
  @ar_book = Book.find(1)
119
146
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dupe
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 5
9
- - 3
10
- version: 0.5.3
8
+ - 6
9
+ - 0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matt Parker
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-26 00:00:00 -04:00
18
+ date: 2011-01-08 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,13 +24,15 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ~>
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 5
29
+ hash: -1848230022
30
30
  segments:
31
- - 2
32
31
  - 3
33
- version: "2.3"
32
+ - 0
33
+ - 0
34
+ - beta2
35
+ version: 3.0.0.beta2
34
36
  type: :runtime
35
37
  version_requirements: *id001
36
38
  description: |-
@@ -92,8 +94,8 @@ homepage: http://github.com/moonmaster9000/dupe
92
94
  licenses: []
93
95
 
94
96
  post_install_message:
95
- rdoc_options:
96
- - --charset=UTF-8
97
+ rdoc_options: []
98
+
97
99
  require_paths:
98
100
  - lib
99
101
  required_ruby_version: !ruby/object:Gem::Requirement