draper 1.4.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -15
- data/CHANGELOG.md +26 -11
- data/Gemfile +1 -1
- data/draper.gemspec +1 -3
- data/gemfiles/4.0.gemfile +1 -1
- data/gemfiles/4.1.gemfile +3 -2
- data/gemfiles/4.2.gemfile +3 -0
- data/lib/draper/collection_decorator.rb +3 -3
- data/lib/draper/helper_proxy.rb +6 -0
- data/lib/draper/railtie.rb +3 -1
- data/lib/draper/version.rb +1 -1
- data/spec/draper/collection_decorator_spec.rb +14 -5
- data/spec/draper/decoratable_spec.rb +13 -13
- data/spec/draper/decorated_association_spec.rb +1 -1
- data/spec/draper/decorator_spec.rb +20 -19
- data/spec/draper/helper_proxy_spec.rb +11 -3
- data/spec/draper/lazy_helpers_spec.rb +2 -2
- data/spec/draper/view_context_spec.rb +2 -2
- data/spec/dummy/app/decorators/post_decorator.rb +4 -0
- data/spec/dummy/fast_spec/post_decorator_spec.rb +0 -1
- data/spec/dummy/spec/decorators/active_model_serializers_spec.rb +6 -1
- data/spec/dummy/spec/decorators/spec_type_spec.rb +1 -1
- data/spec/dummy/spec/shared_examples/decoratable.rb +2 -2
- data/spec/generators/decorator/decorator_generator_spec.rb +2 -42
- data/spec/spec_helper.rb +4 -0
- data/spec/support/shared_examples/decoratable_equality.rb +7 -7
- metadata +6 -36
- data/gemfiles/3.0.gemfile +0 -2
- data/gemfiles/3.1.gemfile +0 -3
- data/gemfiles/3.2.gemfile +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c47812d7403dd6f95f65a8ba4ff8065de00aaabd
|
4
|
+
data.tar.gz: 4c365d791003670fe44e5609f14de4126c74e8fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a439210f626b0cffe6afcfe8d1b7c6cc9991a7fbaf1209b22ffc7470e25ab282e8953214736b1c6335091cf250203dc85d8273a6e4baaba301d638b9a5359da
|
7
|
+
data.tar.gz: 02a4b232c025ab87b83fd18ae33c91b6e58bdca92df60439291a1a37b56123054a1cd6793377e883492fb0696ebbb5eae586232a12753c556f1677237b263d97
|
data/.travis.yml
CHANGED
@@ -4,22 +4,10 @@ services:
|
|
4
4
|
- mongodb
|
5
5
|
|
6
6
|
rvm:
|
7
|
-
- 1.
|
8
|
-
- 2.1
|
9
|
-
- jruby-19mode
|
10
|
-
- rbx-2
|
11
|
-
- ruby-head
|
12
|
-
- jruby-head
|
7
|
+
- 2.1.5
|
8
|
+
- 2.2.1
|
13
9
|
|
14
10
|
env:
|
15
11
|
- "RAILS_VERSION=4.0"
|
16
|
-
- "RAILS_VERSION=3.2"
|
17
|
-
- "RAILS_VERSION=3.1"
|
18
|
-
- "RAILS_VERSION=3.0"
|
19
12
|
- "RAILS_VERSION=4.1"
|
20
|
-
|
21
|
-
matrix:
|
22
|
-
allow_failures:
|
23
|
-
- env: "RAILS_VERSION=4.1"
|
24
|
-
- rvm: ruby-head
|
25
|
-
- rvm: jruby-head
|
13
|
+
- "RAILS_VERSION=4.2"
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
# Draper Changelog
|
2
2
|
|
3
|
-
##
|
3
|
+
## 2.0.0 - 2015-03-26
|
4
|
+
|
5
|
+
Working to breathe new life into the project by shedding baggage.
|
6
|
+
|
7
|
+
* Rails 3.2 support dropped
|
8
|
+
* Ruby 1.9.3 and 2.0 support dropped
|
9
|
+
* Add support for Rails 4.2 and Ruby 2.2
|
10
|
+
* Rewrite tests to get over RSpec deprecations
|
11
|
+
* Get RSpec up to 3.2
|
12
|
+
* Try to un-screw the challenges of ActiveModelSerializers
|
13
|
+
|
14
|
+
Due to the breakages of dropping legacy support, we've bumped the major version. From here,
|
15
|
+
development effort will likely focus on a version 3.0 that removes features and simplifies
|
16
|
+
usage of the library.
|
17
|
+
|
18
|
+
## 1.3.0 - 2013-10-26
|
4
19
|
|
5
20
|
[30 commits by 11 authors](https://github.com/drapergem/draper/compare/v1.2.1...v1.3.0)
|
6
21
|
|
@@ -14,7 +29,7 @@
|
|
14
29
|
|
15
30
|
* [Delegate `to_s` method to the object](https://github.com/drapergem/draper/commit/58b8181050c2a9a86f54660e7bb6bfefa5fd0b64)
|
16
31
|
|
17
|
-
## 1.2.1
|
32
|
+
## 1.2.1 - 2013-05-05
|
18
33
|
|
19
34
|
[28 commits by 4 authors](https://github.com/drapergem/draper/compare/v1.2.0...v1.2.1)
|
20
35
|
|
@@ -24,7 +39,7 @@
|
|
24
39
|
|
25
40
|
Various bugfixes, as always.
|
26
41
|
|
27
|
-
## 1.2.0
|
42
|
+
## 1.2.0 - 2013-04-01
|
28
43
|
|
29
44
|
[78 commits by 14 authors](https://github.com/drapergem/draper/compare/v1.1.0...v1.2.0)
|
30
45
|
|
@@ -58,7 +73,7 @@ Various bugfixes, as always.
|
|
58
73
|
|
59
74
|
* [Avoid using #extend in Decorator#== for performance reasons](https://github.com/drapergem/draper/commit/205a0d43b4141f7b1756fe2b44b877545eb37517)
|
60
75
|
|
61
|
-
## 1.1.0
|
76
|
+
## 1.1.0 - 2013-01-28
|
62
77
|
|
63
78
|
[44 commits by 6 authors](https://github.com/drapergem/draper/compare/v1.0.0...v1.1.0)
|
64
79
|
|
@@ -88,7 +103,7 @@ Various bugfixes, as always.
|
|
88
103
|
* Our specs now use the new RSpec `expect( ).to` syntax.
|
89
104
|
[9a3b319](https://github.com/drapergem/draper/commit/9a3b319d6d54cd78fb2654a94bbe893e36359754)
|
90
105
|
|
91
|
-
## 1.0.0
|
106
|
+
## 1.0.0 - 2013-01-14
|
92
107
|
|
93
108
|
[249 commits by 19 authors](https://github.com/drapergem/draper/compare/v0.18.0...v1.0.0)
|
94
109
|
|
@@ -113,7 +128,7 @@ Major changes are described [in the upgrade guide](https://github.com/drapergem/
|
|
113
128
|
* Test against edge rails.
|
114
129
|
[e9b71e3](https://github.com/drapergem/draper/commit/e9b71e3cf55a800b48c083ff257a7c1cbe1b601b)
|
115
130
|
|
116
|
-
### 1.0.0.beta6
|
131
|
+
### 1.0.0.beta6 - 2012-12-31
|
117
132
|
|
118
133
|
* Fix up README to include changes made.
|
119
134
|
[5e6e4d1](https://github.com/drapergem/draper/commit/5e6e4d11b1e0c07c12b6b1e87053bc3f50ef2ab6)
|
@@ -125,7 +140,7 @@ Major changes are described [in the upgrade guide](https://github.com/drapergem/
|
|
125
140
|
* Ensure we coerce to an array in the right place.
|
126
141
|
[9eb9fc9](https://github.com/drapergem/draper/commit/9eb9fc909c372ea1c2392d05594fa75a5c08b095)
|
127
142
|
|
128
|
-
### 1.0.0.beta5
|
143
|
+
### 1.0.0.beta5 - 2012-12-27
|
129
144
|
|
130
145
|
* Change CollectionDecorator to freeze its collection.
|
131
146
|
[04d7796](https://github.com/drapergem/draper/commit/04d779615c43580409083a71661489e1bbf91ad4)
|
@@ -134,7 +149,7 @@ Major changes are described [in the upgrade guide](https://github.com/drapergem/
|
|
134
149
|
* Upgrade `request_store` dependency to take advantage of a bugfix.
|
135
150
|
[9f17212](https://github.com/drapergem/draper/commit/9f17212fd1fb656ef1314327d60fe45e0acf60a2)
|
136
151
|
|
137
|
-
### 1.0.0.beta4
|
152
|
+
### 1.0.0.beta4 - 2012-12-18
|
138
153
|
|
139
154
|
* Fixed a race condition with capybara integration.
|
140
155
|
[e794649](https://github.com/drapergem/draper/commit/e79464931e7b98c85ed5d78ed9ca38d51f43006e)
|
@@ -153,12 +168,12 @@ Major changes are described [in the upgrade guide](https://github.com/drapergem/
|
|
153
168
|
* Integrate RequestStore for per-request storage.
|
154
169
|
[fde1cde](https://github.com/drapergem/draper/commit/fde1cde9adfb856750c1f616d8b62d221ef97fc6)
|
155
170
|
|
156
|
-
### 1.0.0.beta3
|
171
|
+
### 1.0.0.beta3 - 2012-12-03
|
157
172
|
|
158
173
|
* Relaxed Rails version requirement to 3.0. Support for < 3.2 should be
|
159
174
|
considered experimental. Please file bug reports.
|
160
175
|
|
161
|
-
### 1.0.0.beta2
|
176
|
+
### 1.0.0.beta2 - 2012-12-03
|
162
177
|
|
163
178
|
* `has_finders` is now `decorates_finders`.
|
164
179
|
[33f18aa](https://github.com/drapergem/draper/commit/33f18aa062e0d3848443dbd81047f20d5665579f)
|
@@ -172,7 +187,7 @@ Major changes are described [in the upgrade guide](https://github.com/drapergem/
|
|
172
187
|
* Rails versioning relaxed to support Rails 4.
|
173
188
|
[8bfd393](https://github.com/drapergem/draper/commit/8bfd393b5baa7aa1488076a5e2cb88648efaa815)
|
174
189
|
|
175
|
-
### 1.0.0.beta1
|
190
|
+
### 1.0.0.beta1 - 2012-11-30
|
176
191
|
|
177
192
|
* Renaming `Draper::Base` to `Draper::Decorator`. This is the most significant
|
178
193
|
change you'll need to upgrade your application.
|
data/Gemfile
CHANGED
data/draper.gemspec
CHANGED
@@ -24,9 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
|
25
25
|
s.add_development_dependency 'ammeter'
|
26
26
|
s.add_development_dependency 'rake', '>= 0.9.2'
|
27
|
-
s.add_development_dependency 'rspec', '~> 2
|
28
|
-
s.add_development_dependency 'rspec-mocks', '>= 2.12.1'
|
29
|
-
s.add_development_dependency 'rspec-rails', '~> 2.12'
|
27
|
+
s.add_development_dependency 'rspec-rails', '~> 3.2'
|
30
28
|
s.add_development_dependency 'minitest-rails', '>= 1.0'
|
31
29
|
s.add_development_dependency 'capybara'
|
32
30
|
s.add_development_dependency 'active_model_serializers'
|
data/gemfiles/4.0.gemfile
CHANGED
data/gemfiles/4.1.gemfile
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
gem "rails",
|
2
|
-
gem "
|
1
|
+
gem "rails", "~> 4.1.0"
|
2
|
+
gem "mongoid", "~> 4.0"
|
3
|
+
gem "devise", "~> 3.2"
|
@@ -4,6 +4,9 @@ module Draper
|
|
4
4
|
include Draper::ViewHelpers
|
5
5
|
extend Draper::Delegation
|
6
6
|
|
7
|
+
# @return the collection being decorated.
|
8
|
+
attr_reader :object
|
9
|
+
|
7
10
|
# @return [Class] the decorator class used to decorate each item, as set by
|
8
11
|
# {#initialize}.
|
9
12
|
attr_reader :decorator_class
|
@@ -79,9 +82,6 @@ module Draper
|
|
79
82
|
|
80
83
|
protected
|
81
84
|
|
82
|
-
# @return the collection being decorated.
|
83
|
-
attr_reader :object
|
84
|
-
|
85
85
|
# Decorates the given item.
|
86
86
|
def decorate_item(item)
|
87
87
|
item_decorator.call(item, context: context)
|
data/lib/draper/helper_proxy.rb
CHANGED
@@ -16,6 +16,12 @@ module Draper
|
|
16
16
|
send(method, *args, &block)
|
17
17
|
end
|
18
18
|
|
19
|
+
# Checks if the context responds to an instance method, or is able to
|
20
|
+
# proxy it to the view context.
|
21
|
+
def respond_to_missing?(method, include_private = false)
|
22
|
+
super || view_context.respond_to?(method)
|
23
|
+
end
|
24
|
+
|
19
25
|
delegate :capture, to: :view_context
|
20
26
|
|
21
27
|
protected
|
data/lib/draper/railtie.rb
CHANGED
@@ -45,7 +45,9 @@ module Draper
|
|
45
45
|
|
46
46
|
initializer "draper.setup_active_model_serializers" do |app|
|
47
47
|
ActiveSupport.on_load :active_model_serializers do
|
48
|
-
|
48
|
+
if defined?(ActiveModel::ArraySerializerSupport)
|
49
|
+
Draper::CollectionDecorator.send :include, ActiveModel::ArraySerializerSupport
|
50
|
+
end
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
data/lib/draper/version.rb
CHANGED
@@ -168,7 +168,7 @@ module Draper
|
|
168
168
|
decorator = CollectionDecorator.new(object)
|
169
169
|
other = ProductsDecorator.new(object)
|
170
170
|
|
171
|
-
expect(decorator == other).to
|
171
|
+
expect(decorator == other).to be_truthy
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
@@ -177,7 +177,7 @@ module Draper
|
|
177
177
|
decorator = CollectionDecorator.new([Product.new, Product.new])
|
178
178
|
other = ProductsDecorator.new([Product.new, Product.new])
|
179
179
|
|
180
|
-
expect(decorator == other).to
|
180
|
+
expect(decorator == other).to be_falsey
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
@@ -187,7 +187,7 @@ module Draper
|
|
187
187
|
decorator = CollectionDecorator.new(object)
|
188
188
|
other = object.dup
|
189
189
|
|
190
|
-
expect(decorator == other).to
|
190
|
+
expect(decorator == other).to be_truthy
|
191
191
|
end
|
192
192
|
end
|
193
193
|
|
@@ -196,7 +196,7 @@ module Draper
|
|
196
196
|
decorator = CollectionDecorator.new([Product.new, Product.new])
|
197
197
|
other = [Product.new, Product.new]
|
198
198
|
|
199
|
-
expect(decorator == other).to
|
199
|
+
expect(decorator == other).to be_falsey
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
@@ -207,7 +207,7 @@ module Draper
|
|
207
207
|
other = object.dup
|
208
208
|
|
209
209
|
decorator << Product.new.decorate
|
210
|
-
expect(decorator == other).to
|
210
|
+
expect(decorator == other).to be_falsey
|
211
211
|
end
|
212
212
|
end
|
213
213
|
end
|
@@ -238,6 +238,15 @@ module Draper
|
|
238
238
|
end
|
239
239
|
end
|
240
240
|
|
241
|
+
describe '#object' do
|
242
|
+
it 'returns the underlying collection' do
|
243
|
+
collection = [Product.new]
|
244
|
+
decorator = ProductsDecorator.new(collection)
|
245
|
+
|
246
|
+
expect(decorator.object).to eq collection
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
241
250
|
describe '#decorated?' do
|
242
251
|
it 'returns true' do
|
243
252
|
decorator = ProductsDecorator.new([Product.new])
|
@@ -48,21 +48,21 @@ module Draper
|
|
48
48
|
|
49
49
|
describe "#decorator_class?" do
|
50
50
|
it "returns true for decoratable model" do
|
51
|
-
expect(Product.new.decorator_class?).to
|
51
|
+
expect(Product.new.decorator_class?).to be_truthy
|
52
52
|
end
|
53
53
|
|
54
54
|
it "returns false for non-decoratable model" do
|
55
|
-
expect(Model.new.decorator_class?).to
|
55
|
+
expect(Model.new.decorator_class?).to be_falsey
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
describe ".decorator_class?" do
|
60
60
|
it "returns true for decoratable model" do
|
61
|
-
expect(Product.decorator_class?).to
|
61
|
+
expect(Product.decorator_class?).to be_truthy
|
62
62
|
end
|
63
63
|
|
64
64
|
it "returns false for non-decoratable model" do
|
65
|
-
expect(Model.decorator_class?).to
|
65
|
+
expect(Model.decorator_class?).to be_falsey
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
@@ -84,46 +84,46 @@ module Draper
|
|
84
84
|
product = Product.new
|
85
85
|
|
86
86
|
product.should_receive(:==).and_return(true)
|
87
|
-
expect(product === :anything).to
|
87
|
+
expect(product === :anything).to be_truthy
|
88
88
|
end
|
89
89
|
|
90
90
|
it "is false when #== is false" do
|
91
91
|
product = Product.new
|
92
92
|
|
93
93
|
product.should_receive(:==).and_return(false)
|
94
|
-
expect(product === :anything).to
|
94
|
+
expect(product === :anything).to be_falsey
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
98
|
describe ".====" do
|
99
99
|
it "is true for an instance" do
|
100
|
-
expect(Product === Product.new).to
|
100
|
+
expect(Product === Product.new).to be_truthy
|
101
101
|
end
|
102
102
|
|
103
103
|
it "is true for a derived instance" do
|
104
|
-
expect(Product === Class.new(Product).new).to
|
104
|
+
expect(Product === Class.new(Product).new).to be_truthy
|
105
105
|
end
|
106
106
|
|
107
107
|
it "is false for an unrelated instance" do
|
108
|
-
expect(Product === Model.new).to
|
108
|
+
expect(Product === Model.new).to be_falsey
|
109
109
|
end
|
110
110
|
|
111
111
|
it "is true for a decorated instance" do
|
112
112
|
decorator = double(object: Product.new)
|
113
113
|
|
114
|
-
expect(Product === decorator).to
|
114
|
+
expect(Product === decorator).to be_truthy
|
115
115
|
end
|
116
116
|
|
117
117
|
it "is true for a decorated derived instance" do
|
118
118
|
decorator = double(object: Class.new(Product).new)
|
119
119
|
|
120
|
-
expect(Product === decorator).to
|
120
|
+
expect(Product === decorator).to be_truthy
|
121
121
|
end
|
122
122
|
|
123
123
|
it "is false for a decorated unrelated instance" do
|
124
124
|
decorator = double(object: Model.new)
|
125
125
|
|
126
|
-
expect(Product === decorator).to
|
126
|
+
expect(Product === decorator).to be_falsey
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
@@ -192,7 +192,7 @@ module Draper
|
|
192
192
|
|
193
193
|
context "when an unrelated NameError is thrown" do
|
194
194
|
it "re-raises that error" do
|
195
|
-
String.any_instance.stub(:constantize)
|
195
|
+
String.any_instance.stub(:constantize) { Draper::Base }
|
196
196
|
expect{Product.decorator_class}.to raise_error NameError, /Draper::Base/
|
197
197
|
end
|
198
198
|
end
|
@@ -29,7 +29,7 @@ module Draper
|
|
29
29
|
|
30
30
|
describe ":context option" do
|
31
31
|
it "defaults to the identity function" do
|
32
|
-
Factory.should_receive(:new)
|
32
|
+
Factory.should_receive(:new) do |options|
|
33
33
|
options[:context].call(:anything) == :anything
|
34
34
|
end
|
35
35
|
DecoratedAssociation.new(double, :association, {})
|
@@ -73,7 +73,7 @@ module Draper
|
|
73
73
|
decorated = OtherDecorator.new(Decorator.new(Model.new))
|
74
74
|
|
75
75
|
warning_message = nil
|
76
|
-
Object.any_instance.stub(:warn) {|message| warning_message = message }
|
76
|
+
Object.any_instance.stub(:warn) { |instance, message| warning_message = message }
|
77
77
|
|
78
78
|
expect{Decorator.new(decorated)}.to change{warning_message}
|
79
79
|
expect(warning_message).to start_with "Reapplying Draper::Decorator"
|
@@ -148,7 +148,7 @@ module Draper
|
|
148
148
|
|
149
149
|
context "when a NameError is thrown" do
|
150
150
|
it "re-raises that error" do
|
151
|
-
String.any_instance.stub(:constantize)
|
151
|
+
String.any_instance.stub(:constantize) { Draper::DecoratedEnumerableProxy }
|
152
152
|
expect{ProductDecorator.decorate_collection([])}.to raise_error NameError, /Draper::DecoratedEnumerableProxy/
|
153
153
|
end
|
154
154
|
end
|
@@ -190,6 +190,7 @@ module Draper
|
|
190
190
|
end
|
191
191
|
|
192
192
|
it "raises an UninferrableSourceError for a decorator without a model" do
|
193
|
+
skip
|
193
194
|
expect{OtherDecorator.object_class}.to raise_error UninferrableSourceError
|
194
195
|
end
|
195
196
|
|
@@ -207,7 +208,7 @@ module Draper
|
|
207
208
|
|
208
209
|
context "when an unrelated NameError is thrown" do
|
209
210
|
it "re-raises that error" do
|
210
|
-
String.any_instance.stub(:constantize)
|
211
|
+
String.any_instance.stub(:constantize) { SomethingThatDoesntExist }
|
211
212
|
expect{ProductDecorator.object_class}.to raise_error NameError, /SomethingThatDoesntExist/
|
212
213
|
end
|
213
214
|
end
|
@@ -222,19 +223,19 @@ module Draper
|
|
222
223
|
it "returns truthy when .object_class is set" do
|
223
224
|
Decorator.stub(:object_class).and_return(Model)
|
224
225
|
|
225
|
-
expect(Decorator.object_class?).to
|
226
|
+
expect(Decorator.object_class?).to be_truthy
|
226
227
|
end
|
227
228
|
|
228
229
|
it "returns false when .object_class is not inferrable" do
|
229
230
|
Decorator.stub(:object_class).and_raise(UninferrableSourceError.new(Decorator))
|
230
231
|
|
231
|
-
expect(Decorator.object_class?).to
|
232
|
+
expect(Decorator.object_class?).to be_falsey
|
232
233
|
end
|
233
234
|
|
234
235
|
it "is aliased to .source_class?" do
|
235
236
|
Decorator.stub(:object_class).and_return(Model)
|
236
237
|
|
237
|
-
expect(Decorator.source_class?).to
|
238
|
+
expect(Decorator.source_class?).to be_truthy
|
238
239
|
end
|
239
240
|
end
|
240
241
|
|
@@ -514,7 +515,7 @@ module Draper
|
|
514
515
|
other = double(object: Model.new)
|
515
516
|
|
516
517
|
object.should_receive(:==).with(other).and_return(true)
|
517
|
-
expect(decorator == other).to
|
518
|
+
expect(decorator == other).to be_truthy
|
518
519
|
end
|
519
520
|
|
520
521
|
it "is false when object #== is false" do
|
@@ -523,7 +524,7 @@ module Draper
|
|
523
524
|
other = double(object: Model.new)
|
524
525
|
|
525
526
|
object.should_receive(:==).with(other).and_return(false)
|
526
|
-
expect(decorator == other).to
|
527
|
+
expect(decorator == other).to be_falsey
|
527
528
|
end
|
528
529
|
|
529
530
|
end
|
@@ -533,14 +534,14 @@ module Draper
|
|
533
534
|
decorator = Decorator.new(Model.new)
|
534
535
|
decorator.stub(:==).with(:anything).and_return(true)
|
535
536
|
|
536
|
-
expect(decorator === :anything).to
|
537
|
+
expect(decorator === :anything).to be_truthy
|
537
538
|
end
|
538
539
|
|
539
540
|
it "is false when #== is false" do
|
540
541
|
decorator = Decorator.new(Model.new)
|
541
542
|
decorator.stub(:==).with(:anything).and_return(false)
|
542
543
|
|
543
|
-
expect(decorator === :anything).to
|
544
|
+
expect(decorator === :anything).to be_falsey
|
544
545
|
end
|
545
546
|
end
|
546
547
|
|
@@ -580,7 +581,7 @@ module Draper
|
|
580
581
|
|
581
582
|
it "passes blocks to delegated methods" do
|
582
583
|
object = Model.new
|
583
|
-
object.stub(:hello_world)
|
584
|
+
object.stub(:hello_world) { |*args, &block| block.call }
|
584
585
|
decorator = Decorator.new(object)
|
585
586
|
|
586
587
|
expect(decorator.hello_world{:yielded}).to be :yielded
|
@@ -659,14 +660,14 @@ module Draper
|
|
659
660
|
Decorator.class_eval{private; def hello_world; end}
|
660
661
|
decorator = Decorator.new(Model.new)
|
661
662
|
|
662
|
-
expect(decorator.respond_to?(:hello_world, true)).to
|
663
|
+
expect(decorator.respond_to?(:hello_world, true)).to be_truthy
|
663
664
|
end
|
664
665
|
|
665
666
|
it "returns false for the object's private methods" do
|
666
667
|
object = Class.new{private; def hello_world; end}.new
|
667
668
|
decorator = Decorator.new(object)
|
668
669
|
|
669
|
-
expect(decorator.respond_to?(:hello_world, true)).to
|
670
|
+
expect(decorator.respond_to?(:hello_world, true)).to be_falsey
|
670
671
|
end
|
671
672
|
end
|
672
673
|
end
|
@@ -722,27 +723,27 @@ module Draper
|
|
722
723
|
it "pretends to be a kind of the source class" do
|
723
724
|
decorator = Decorator.new(Model.new)
|
724
725
|
|
725
|
-
expect(decorator.kind_of?(Model)).to
|
726
|
-
expect(decorator.is_a?(Model)).to
|
726
|
+
expect(decorator.kind_of?(Model)).to be_truthy
|
727
|
+
expect(decorator.is_a?(Model)).to be_truthy
|
727
728
|
end
|
728
729
|
|
729
730
|
it "is still a kind of its own class" do
|
730
731
|
decorator = Decorator.new(Model.new)
|
731
732
|
|
732
|
-
expect(decorator.kind_of?(Decorator)).to
|
733
|
-
expect(decorator.is_a?(Decorator)).to
|
733
|
+
expect(decorator.kind_of?(Decorator)).to be_truthy
|
734
|
+
expect(decorator.is_a?(Decorator)).to be_truthy
|
734
735
|
end
|
735
736
|
|
736
737
|
it "pretends to be an instance of the source class" do
|
737
738
|
decorator = Decorator.new(Model.new)
|
738
739
|
|
739
|
-
expect(decorator.instance_of?(Model)).to
|
740
|
+
expect(decorator.instance_of?(Model)).to be_truthy
|
740
741
|
end
|
741
742
|
|
742
743
|
it "is still an instance of its own class" do
|
743
744
|
decorator = Decorator.new(Model.new)
|
744
745
|
|
745
|
-
expect(decorator.instance_of?(Decorator)).to
|
746
|
+
expect(decorator.instance_of?(Decorator)).to be_truthy
|
746
747
|
end
|
747
748
|
end
|
748
749
|
|
@@ -18,7 +18,7 @@ module Draper
|
|
18
18
|
view_context = double
|
19
19
|
helper_proxy = HelperProxy.new(view_context)
|
20
20
|
|
21
|
-
view_context.stub(:foo)
|
21
|
+
view_context.stub(:foo) { |arg| arg }
|
22
22
|
expect(helper_proxy.foo(:passed)).to be :passed
|
23
23
|
end
|
24
24
|
|
@@ -26,7 +26,7 @@ module Draper
|
|
26
26
|
view_context = double
|
27
27
|
helper_proxy = HelperProxy.new(view_context)
|
28
28
|
|
29
|
-
view_context.stub(:foo)
|
29
|
+
view_context.stub(:foo) { |&block| block.call }
|
30
30
|
expect(helper_proxy.foo{:yielded}).to be :yielded
|
31
31
|
end
|
32
32
|
|
@@ -39,12 +39,20 @@ module Draper
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
+
describe "#respond_to_missing?" do
|
43
|
+
it "allows #method to be called on the view context" do
|
44
|
+
helper_proxy = HelperProxy.new(double(foo: "bar"))
|
45
|
+
|
46
|
+
expect(helper_proxy.respond_to?(:foo)).to be_truthy
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
42
50
|
describe "proxying methods which are overriding" do
|
43
51
|
it "proxies :capture" do
|
44
52
|
view_context = double
|
45
53
|
helper_proxy = HelperProxy.new(view_context)
|
46
54
|
|
47
|
-
view_context.stub(:capture)
|
55
|
+
view_context.stub(:capture) { |*args, &block| [*args, block.call] }
|
48
56
|
expect(helper_proxy.capture(:first_arg, :second_arg){:yielded}).to \
|
49
57
|
be_eql [:first_arg, :second_arg, :yielded]
|
50
58
|
end
|
@@ -8,12 +8,12 @@ module Draper
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "proxies methods to #helpers" do
|
11
|
-
decorator.helpers.stub(:foo)
|
11
|
+
decorator.helpers.stub(:foo) { |arg| arg }
|
12
12
|
expect(decorator.foo(:passed)).to be :passed
|
13
13
|
end
|
14
14
|
|
15
15
|
it "passes blocks" do
|
16
|
-
decorator.helpers.stub(:foo)
|
16
|
+
decorator.helpers.stub(:foo) { |&block| block.call }
|
17
17
|
expect(decorator.foo{:yielded}).to be :yielded
|
18
18
|
end
|
19
19
|
end
|
@@ -131,7 +131,7 @@ module Draper
|
|
131
131
|
end
|
132
132
|
|
133
133
|
it "passes a block to the strategy" do
|
134
|
-
ViewContext::BuildStrategy::Fast.stub(:new)
|
134
|
+
ViewContext::BuildStrategy::Fast.stub(:new) { |&block| block.call }
|
135
135
|
|
136
136
|
expect(ViewContext.test_strategy(:fast){:passed}).to be :passed
|
137
137
|
end
|
@@ -144,7 +144,7 @@ module Draper
|
|
144
144
|
end
|
145
145
|
|
146
146
|
it "passes a block to the strategy" do
|
147
|
-
ViewContext::BuildStrategy::Full.stub(:new)
|
147
|
+
ViewContext::BuildStrategy::Full.stub(:new) { |&block| block.call }
|
148
148
|
|
149
149
|
expect(ViewContext.test_strategy(:full){:passed}).to be :passed
|
150
150
|
end
|
@@ -4,8 +4,13 @@ describe Draper::CollectionDecorator do
|
|
4
4
|
describe "#active_model_serializer" do
|
5
5
|
it "returns ActiveModel::ArraySerializer" do
|
6
6
|
collection_decorator = Draper::CollectionDecorator.new([])
|
7
|
+
if defined?(ActiveModel::ArraySerializerSupport)
|
8
|
+
collection_serializer = collection_decorator.active_model_serializer
|
9
|
+
else
|
10
|
+
collection_serializer = ActiveModel::Serializer.serializer_for(collection_decorator)
|
11
|
+
end
|
7
12
|
|
8
|
-
expect(
|
13
|
+
expect(collection_serializer).to be ActiveModel::ArraySerializer
|
9
14
|
end
|
10
15
|
end
|
11
16
|
end
|
@@ -4,7 +4,7 @@ shared_examples_for "a decoratable model" do
|
|
4
4
|
described_class.create
|
5
5
|
decorated = described_class.limit(1).decorate
|
6
6
|
|
7
|
-
expect(decorated).to
|
7
|
+
expect(decorated.size).to eq(1)
|
8
8
|
expect(decorated).to be_decorated
|
9
9
|
end
|
10
10
|
end
|
@@ -18,7 +18,7 @@ shared_examples_for "a decoratable model" do
|
|
18
18
|
other = described_class.first
|
19
19
|
|
20
20
|
expect(one).not_to be other
|
21
|
-
expect(one == other.decorate).to
|
21
|
+
expect(one == other.decorate).to be_truthy
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -40,9 +40,8 @@ describe Rails::Generators::DecoratorGenerator do
|
|
40
40
|
|
41
41
|
context "with an ApplicationDecorator" do
|
42
42
|
before do
|
43
|
-
Object.any_instance.stub(:require).with("application_decorator").and_return
|
44
|
-
stub_const "ApplicationDecorator", Class.new
|
45
|
-
end
|
43
|
+
Object.any_instance.stub(:require).with("application_decorator").and_return (
|
44
|
+
stub_const "ApplicationDecorator", Class.new)
|
46
45
|
end
|
47
46
|
|
48
47
|
before { run_generator %w(YourModel) }
|
@@ -89,43 +88,4 @@ describe Rails::Generators::DecoratorGenerator do
|
|
89
88
|
end
|
90
89
|
end
|
91
90
|
end
|
92
|
-
|
93
|
-
context "with -t=mini_test" do
|
94
|
-
describe "the generated test" do
|
95
|
-
subject { file("test/decorators/your_model_decorator_test.rb") }
|
96
|
-
|
97
|
-
describe "naming" do
|
98
|
-
before { run_generator %w(YourModel -t=mini_test) }
|
99
|
-
|
100
|
-
it { should contain "class YourModelDecoratorTest < Draper::TestCase" }
|
101
|
-
end
|
102
|
-
|
103
|
-
describe "namespacing" do
|
104
|
-
subject { file("test/decorators/namespace/your_model_decorator_test.rb") }
|
105
|
-
before { run_generator %w(Namespace::YourModel -t=mini_test) }
|
106
|
-
|
107
|
-
it { should contain "class Namespace::YourModelDecoratorTest < Draper::TestCase" }
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context "with -t=mini_test --spec" do
|
113
|
-
describe "the generated test" do
|
114
|
-
subject { file("test/decorators/your_model_decorator_test.rb") }
|
115
|
-
|
116
|
-
describe "naming" do
|
117
|
-
before { run_generator %w(YourModel -t=mini_test --spec) }
|
118
|
-
|
119
|
-
it { should contain "describe YourModelDecorator" }
|
120
|
-
end
|
121
|
-
|
122
|
-
describe "namespacing" do
|
123
|
-
subject { file("test/decorators/namespace/your_model_decorator_test.rb") }
|
124
|
-
before { run_generator %w(Namespace::YourModel -t=mini_test --spec) }
|
125
|
-
|
126
|
-
it { should contain "describe Namespace::YourModelDecorator" }
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
91
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,12 +8,16 @@ RSpec.configure do |config|
|
|
8
8
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
9
|
config.expect_with(:rspec) {|c| c.syntax = :expect}
|
10
10
|
config.order = :random
|
11
|
+
config.mock_with :rspec do |mocks|
|
12
|
+
mocks.yield_receiver_to_any_instance_implementation_blocks = true
|
13
|
+
end
|
11
14
|
end
|
12
15
|
|
13
16
|
class Model; include Draper::Decoratable; end
|
14
17
|
|
15
18
|
class Product < Model; end
|
16
19
|
class SpecialProduct < Product; end
|
20
|
+
class Other < Model; end
|
17
21
|
class ProductDecorator < Draper::Decorator; end
|
18
22
|
class ProductsDecorator < Draper::CollectionDecorator; end
|
19
23
|
|
@@ -1,40 +1,40 @@
|
|
1
1
|
shared_examples_for "decoration-aware #==" do |subject|
|
2
2
|
it "is true for itself" do
|
3
|
-
expect(subject == subject).to
|
3
|
+
expect(subject == subject).to be_truthy
|
4
4
|
end
|
5
5
|
|
6
6
|
it "is false for another object" do
|
7
|
-
expect(subject == Object.new).to
|
7
|
+
expect(subject == Object.new).to be_falsey
|
8
8
|
end
|
9
9
|
|
10
10
|
it "is true for a decorated version of itself" do
|
11
11
|
decorated = double(object: subject, decorated?: true)
|
12
12
|
|
13
|
-
expect(subject == decorated).to
|
13
|
+
expect(subject == decorated).to be_truthy
|
14
14
|
end
|
15
15
|
|
16
16
|
it "is false for a decorated other object" do
|
17
17
|
decorated = double(object: Object.new, decorated?: true)
|
18
18
|
|
19
|
-
expect(subject == decorated).to
|
19
|
+
expect(subject == decorated).to be_falsey
|
20
20
|
end
|
21
21
|
|
22
22
|
it "is false for a decoratable object with a `object` association" do
|
23
23
|
decoratable = double(object: subject, decorated?: false)
|
24
24
|
|
25
|
-
expect(subject == decoratable).to
|
25
|
+
expect(subject == decoratable).to be_falsey
|
26
26
|
end
|
27
27
|
|
28
28
|
it "is false for an undecoratable object with a `object` association" do
|
29
29
|
undecoratable = double(object: subject)
|
30
30
|
|
31
|
-
expect(subject == undecoratable).to
|
31
|
+
expect(subject == undecoratable).to be_falsey
|
32
32
|
end
|
33
33
|
|
34
34
|
it "is true for a multiply-decorated version of itself" do
|
35
35
|
decorated = double(object: subject, decorated?: true)
|
36
36
|
redecorated = double(object: decorated, decorated?: true)
|
37
37
|
|
38
|
-
expect(subject == redecorated).to
|
38
|
+
expect(subject == redecorated).to be_truthy
|
39
39
|
end
|
40
40
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: draper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Casimir
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -95,48 +95,20 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: 0.9.2
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: rspec
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '2.12'
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '2.12'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: rspec-mocks
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: 2.12.1
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 2.12.1
|
126
98
|
- !ruby/object:Gem::Dependency
|
127
99
|
name: rspec-rails
|
128
100
|
requirement: !ruby/object:Gem::Requirement
|
129
101
|
requirements:
|
130
102
|
- - "~>"
|
131
103
|
- !ruby/object:Gem::Version
|
132
|
-
version: '2
|
104
|
+
version: '3.2'
|
133
105
|
type: :development
|
134
106
|
prerelease: false
|
135
107
|
version_requirements: !ruby/object:Gem::Requirement
|
136
108
|
requirements:
|
137
109
|
- - "~>"
|
138
110
|
- !ruby/object:Gem::Version
|
139
|
-
version: '2
|
111
|
+
version: '3.2'
|
140
112
|
- !ruby/object:Gem::Dependency
|
141
113
|
name: minitest-rails
|
142
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -200,11 +172,9 @@ files:
|
|
200
172
|
- README.md
|
201
173
|
- Rakefile
|
202
174
|
- draper.gemspec
|
203
|
-
- gemfiles/3.0.gemfile
|
204
|
-
- gemfiles/3.1.gemfile
|
205
|
-
- gemfiles/3.2.gemfile
|
206
175
|
- gemfiles/4.0.gemfile
|
207
176
|
- gemfiles/4.1.gemfile
|
177
|
+
- gemfiles/4.2.gemfile
|
208
178
|
- lib/draper.rb
|
209
179
|
- lib/draper/automatic_delegation.rb
|
210
180
|
- lib/draper/collection_decorator.rb
|
@@ -352,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
352
322
|
version: '0'
|
353
323
|
requirements: []
|
354
324
|
rubyforge_project:
|
355
|
-
rubygems_version: 2.
|
325
|
+
rubygems_version: 2.4.6
|
356
326
|
signing_key:
|
357
327
|
specification_version: 4
|
358
328
|
summary: View Models for Rails
|
data/gemfiles/3.0.gemfile
DELETED
data/gemfiles/3.1.gemfile
DELETED
data/gemfiles/3.2.gemfile
DELETED