draper 0.12.0 → 0.12.1
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/Gemfile +0 -14
- data/Readme.markdown +8 -16
- data/draper.gemspec +12 -2
- data/lib/draper.rb +3 -1
- data/lib/draper/version.rb +1 -1
- data/lib/generators/decorator/decorator_generator.rb +1 -1
- data/lib/generators/decorator/templates/decorator.rb +1 -1
- data/spec/generators/decorator/decorator_generator_spec.rb +22 -1
- data/spec/spec_helper.rb +1 -0
- metadata +180 -35
data/Gemfile
CHANGED
|
@@ -1,17 +1,3 @@
|
|
|
1
1
|
source :rubygems
|
|
2
2
|
|
|
3
|
-
gem 'rake'
|
|
4
|
-
gem 'rspec', '~> 2.0'
|
|
5
|
-
gem 'activesupport', '~> 3.1.3'
|
|
6
|
-
gem 'actionpack', "~> 3.1.3", :require => 'action_view'
|
|
7
|
-
gem 'ammeter', '~> 0.2.2', :require => 'ammeter/init'
|
|
8
|
-
gem 'guard'
|
|
9
|
-
gem 'guard-rspec'
|
|
10
|
-
gem 'launchy'
|
|
11
|
-
gem 'yard'
|
|
12
|
-
|
|
13
|
-
group :development do
|
|
14
|
-
gem 'redcarpet'
|
|
15
|
-
end
|
|
16
|
-
|
|
17
3
|
gemspec
|
data/Readme.markdown
CHANGED
|
@@ -155,20 +155,12 @@ gem "draper"
|
|
|
155
155
|
|
|
156
156
|
Then run `bundle` from the project directory.
|
|
157
157
|
|
|
158
|
-
### Run the draper:install command
|
|
159
|
-
|
|
160
|
-
This will create the `app/decorators` directory and the `ApplicationDecorator` inside it.
|
|
161
|
-
|
|
162
|
-
```
|
|
163
|
-
rails generate draper:install
|
|
164
|
-
```
|
|
165
|
-
|
|
166
158
|
### Generate the Decorator
|
|
167
159
|
|
|
168
160
|
To decorate a model named `Article`:
|
|
169
161
|
|
|
170
162
|
```
|
|
171
|
-
rails generate
|
|
163
|
+
rails generate decorator article
|
|
172
164
|
```
|
|
173
165
|
|
|
174
166
|
### Writing Methods
|
|
@@ -176,7 +168,7 @@ rails generate draper:decorator article
|
|
|
176
168
|
Open the decorator model (ex: `app/decorators/article_decorator.rb`) and add normal instance methods. To access the wrapped source object, use a method named after the `decorates` argument:
|
|
177
169
|
|
|
178
170
|
```ruby
|
|
179
|
-
class ArticleDecorator <
|
|
171
|
+
class ArticleDecorator < Draper::Base
|
|
180
172
|
decorates :article
|
|
181
173
|
|
|
182
174
|
def author_name
|
|
@@ -190,7 +182,7 @@ end
|
|
|
190
182
|
You probably want to make use of Rails helpers and those defined in your application. Use the `helpers` or `h` method proxy:
|
|
191
183
|
|
|
192
184
|
```ruby
|
|
193
|
-
class ArticleDecorator <
|
|
185
|
+
class ArticleDecorator < Draper::Base
|
|
194
186
|
decorates :article
|
|
195
187
|
|
|
196
188
|
def published_at
|
|
@@ -206,7 +198,7 @@ end
|
|
|
206
198
|
Hate seeing that `h.` proxy all over? Willing to mix a bazillion methods into your decorator? Then try lazy helpers:
|
|
207
199
|
|
|
208
200
|
```ruby
|
|
209
|
-
class ArticleDecorator <
|
|
201
|
+
class ArticleDecorator < Draper::Base
|
|
210
202
|
decorates :article
|
|
211
203
|
include Draper::LazyHelpers
|
|
212
204
|
|
|
@@ -313,7 +305,7 @@ end
|
|
|
313
305
|
Then you need to perform the wrapping in your controller. Here's the simplest method:
|
|
314
306
|
|
|
315
307
|
```ruby
|
|
316
|
-
class ArticlesController <
|
|
308
|
+
class ArticlesController < Draper::Decorator
|
|
317
309
|
def show
|
|
318
310
|
@article = ArticleDecorator.find params[:id]
|
|
319
311
|
end
|
|
@@ -329,7 +321,7 @@ Then within your views you can utilize both the normal data methods and your new
|
|
|
329
321
|
Ta-da! Object-oriented data formatting for your view layer. Below is the complete decorator with extra comments removed:
|
|
330
322
|
|
|
331
323
|
```ruby
|
|
332
|
-
class ArticleDecorator <
|
|
324
|
+
class ArticleDecorator < Draper::Base
|
|
333
325
|
decorates :article
|
|
334
326
|
|
|
335
327
|
def published_at
|
|
@@ -345,12 +337,12 @@ end
|
|
|
345
337
|
Add a `decorates_association :association_name` to gain access to a decorated version of your target association.
|
|
346
338
|
|
|
347
339
|
```ruby
|
|
348
|
-
class ArticleDecorator <
|
|
340
|
+
class ArticleDecorator < Draper::Base
|
|
349
341
|
decorates :article
|
|
350
342
|
decorates_association :author # belongs_to :author association
|
|
351
343
|
end
|
|
352
344
|
|
|
353
|
-
class AuthorDecorator <
|
|
345
|
+
class AuthorDecorator < Draper::Base
|
|
354
346
|
decorates :author
|
|
355
347
|
|
|
356
348
|
def fancy_name
|
data/draper.gemspec
CHANGED
|
@@ -15,6 +15,16 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
17
17
|
s.require_paths = ["lib"]
|
|
18
|
-
|
|
19
|
-
s.
|
|
18
|
+
|
|
19
|
+
s.add_dependency 'activesupport', '>= 2.3.10'
|
|
20
|
+
s.add_dependency 'rake'
|
|
21
|
+
s.add_dependency 'rspec', '~> 2.0'
|
|
22
|
+
s.add_dependency 'activesupport', '~> 3.1.3'
|
|
23
|
+
s.add_dependency 'actionpack', "~> 3.1.3"
|
|
24
|
+
|
|
25
|
+
s.add_development_dependency 'ammeter', '~> 0.2.2'
|
|
26
|
+
s.add_development_dependency 'guard'
|
|
27
|
+
s.add_development_dependency 'guard-rspec'
|
|
28
|
+
s.add_development_dependency 'launchy'
|
|
29
|
+
s.add_development_dependency 'yard'
|
|
20
30
|
end
|
data/lib/draper.rb
CHANGED
data/lib/draper/version.rb
CHANGED
|
@@ -15,7 +15,7 @@ describe Rails::Generators::DecoratorGenerator do
|
|
|
15
15
|
describe 'app/decorators/your_model_decorator.rb' do
|
|
16
16
|
subject { file('app/decorators/your_model_decorator.rb') }
|
|
17
17
|
it { should exist }
|
|
18
|
-
it { should contain "class YourModelDecorator <
|
|
18
|
+
it { should contain "class YourModelDecorator < Draper::Base" }
|
|
19
19
|
it { should contain "decorates :your_model" }
|
|
20
20
|
end
|
|
21
21
|
end
|
|
@@ -30,6 +30,27 @@ describe Rails::Generators::DecoratorGenerator do
|
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
+
context 'parent decorator' do
|
|
34
|
+
describe 'decorator inhereted from Draper::Base' do
|
|
35
|
+
before { run_generator ["YourModel"] }
|
|
36
|
+
|
|
37
|
+
subject { file('app/decorators/your_model_decorator.rb') }
|
|
38
|
+
it { should exist }
|
|
39
|
+
it { should contain "class YourModelDecorator < Draper::Base" }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe "decorator inhereted from ApplicationDecorator if it's present" do
|
|
43
|
+
before do
|
|
44
|
+
class ApplicationDecorator; end
|
|
45
|
+
run_generator ["YourModel"]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
subject { file('app/decorators/your_model_decorator.rb') }
|
|
49
|
+
it { should exist }
|
|
50
|
+
it { should contain "class YourModelDecorator < ApplicationDecorator" }
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
33
54
|
context 'using rspec' do
|
|
34
55
|
before { run_generator ["YourModel", "-t=rspec"] }
|
|
35
56
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,47 +1,183 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: draper
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 45
|
|
5
5
|
prerelease:
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 12
|
|
9
|
+
- 1
|
|
10
|
+
version: 0.12.1
|
|
6
11
|
platform: ruby
|
|
7
|
-
authors:
|
|
12
|
+
authors:
|
|
8
13
|
- Jeff Casimir
|
|
9
14
|
- Steve Klabnik
|
|
10
15
|
autorequire:
|
|
11
16
|
bindir: bin
|
|
12
17
|
cert_chain: []
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
|
|
19
|
+
date: 2012-05-12 00:00:00 Z
|
|
20
|
+
dependencies:
|
|
21
|
+
- !ruby/object:Gem::Dependency
|
|
16
22
|
name: activesupport
|
|
17
|
-
|
|
23
|
+
prerelease: false
|
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
18
25
|
none: false
|
|
19
|
-
requirements:
|
|
20
|
-
- -
|
|
21
|
-
- !ruby/object:Gem::Version
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
hash: 23
|
|
30
|
+
segments:
|
|
31
|
+
- 2
|
|
32
|
+
- 3
|
|
33
|
+
- 10
|
|
22
34
|
version: 2.3.10
|
|
23
35
|
type: :runtime
|
|
36
|
+
version_requirements: *id001
|
|
37
|
+
- !ruby/object:Gem::Dependency
|
|
38
|
+
name: rake
|
|
39
|
+
prerelease: false
|
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ">="
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
hash: 3
|
|
46
|
+
segments:
|
|
47
|
+
- 0
|
|
48
|
+
version: "0"
|
|
49
|
+
type: :runtime
|
|
50
|
+
version_requirements: *id002
|
|
51
|
+
- !ruby/object:Gem::Dependency
|
|
52
|
+
name: rspec
|
|
24
53
|
prerelease: false
|
|
25
|
-
|
|
26
|
-
- !ruby/object:Gem::Dependency
|
|
27
|
-
name: redcarpet
|
|
28
|
-
requirement: &70309298924340 !ruby/object:Gem::Requirement
|
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
29
55
|
none: false
|
|
30
|
-
requirements:
|
|
31
|
-
- -
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
|
|
56
|
+
requirements:
|
|
57
|
+
- - ~>
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
hash: 3
|
|
60
|
+
segments:
|
|
61
|
+
- 2
|
|
62
|
+
- 0
|
|
63
|
+
version: "2.0"
|
|
64
|
+
type: :runtime
|
|
65
|
+
version_requirements: *id003
|
|
66
|
+
- !ruby/object:Gem::Dependency
|
|
67
|
+
name: activesupport
|
|
68
|
+
prerelease: false
|
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
70
|
+
none: false
|
|
71
|
+
requirements:
|
|
72
|
+
- - ~>
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
hash: 5
|
|
75
|
+
segments:
|
|
76
|
+
- 3
|
|
77
|
+
- 1
|
|
78
|
+
- 3
|
|
79
|
+
version: 3.1.3
|
|
80
|
+
type: :runtime
|
|
81
|
+
version_requirements: *id004
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: actionpack
|
|
84
|
+
prerelease: false
|
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
86
|
+
none: false
|
|
87
|
+
requirements:
|
|
88
|
+
- - ~>
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
hash: 5
|
|
91
|
+
segments:
|
|
92
|
+
- 3
|
|
93
|
+
- 1
|
|
94
|
+
- 3
|
|
95
|
+
version: 3.1.3
|
|
96
|
+
type: :runtime
|
|
97
|
+
version_requirements: *id005
|
|
98
|
+
- !ruby/object:Gem::Dependency
|
|
99
|
+
name: ammeter
|
|
100
|
+
prerelease: false
|
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
102
|
+
none: false
|
|
103
|
+
requirements:
|
|
104
|
+
- - ~>
|
|
105
|
+
- !ruby/object:Gem::Version
|
|
106
|
+
hash: 19
|
|
107
|
+
segments:
|
|
108
|
+
- 0
|
|
109
|
+
- 2
|
|
110
|
+
- 2
|
|
111
|
+
version: 0.2.2
|
|
112
|
+
type: :development
|
|
113
|
+
version_requirements: *id006
|
|
114
|
+
- !ruby/object:Gem::Dependency
|
|
115
|
+
name: guard
|
|
116
|
+
prerelease: false
|
|
117
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
118
|
+
none: false
|
|
119
|
+
requirements:
|
|
120
|
+
- - ">="
|
|
121
|
+
- !ruby/object:Gem::Version
|
|
122
|
+
hash: 3
|
|
123
|
+
segments:
|
|
124
|
+
- 0
|
|
125
|
+
version: "0"
|
|
126
|
+
type: :development
|
|
127
|
+
version_requirements: *id007
|
|
128
|
+
- !ruby/object:Gem::Dependency
|
|
129
|
+
name: guard-rspec
|
|
130
|
+
prerelease: false
|
|
131
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
|
132
|
+
none: false
|
|
133
|
+
requirements:
|
|
134
|
+
- - ">="
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
hash: 3
|
|
137
|
+
segments:
|
|
138
|
+
- 0
|
|
139
|
+
version: "0"
|
|
140
|
+
type: :development
|
|
141
|
+
version_requirements: *id008
|
|
142
|
+
- !ruby/object:Gem::Dependency
|
|
143
|
+
name: launchy
|
|
144
|
+
prerelease: false
|
|
145
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
|
146
|
+
none: false
|
|
147
|
+
requirements:
|
|
148
|
+
- - ">="
|
|
149
|
+
- !ruby/object:Gem::Version
|
|
150
|
+
hash: 3
|
|
151
|
+
segments:
|
|
152
|
+
- 0
|
|
153
|
+
version: "0"
|
|
34
154
|
type: :development
|
|
155
|
+
version_requirements: *id009
|
|
156
|
+
- !ruby/object:Gem::Dependency
|
|
157
|
+
name: yard
|
|
35
158
|
prerelease: false
|
|
36
|
-
|
|
159
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
|
160
|
+
none: false
|
|
161
|
+
requirements:
|
|
162
|
+
- - ">="
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
hash: 3
|
|
165
|
+
segments:
|
|
166
|
+
- 0
|
|
167
|
+
version: "0"
|
|
168
|
+
type: :development
|
|
169
|
+
version_requirements: *id010
|
|
37
170
|
description: Draper implements a decorator or presenter pattern for Rails applications.
|
|
38
|
-
email:
|
|
171
|
+
email:
|
|
39
172
|
- jeff@casimircreative.com
|
|
40
173
|
- steve@steveklabnik.com
|
|
41
174
|
executables: []
|
|
175
|
+
|
|
42
176
|
extensions: []
|
|
177
|
+
|
|
43
178
|
extra_rdoc_files: []
|
|
44
|
-
|
|
179
|
+
|
|
180
|
+
files:
|
|
45
181
|
- .gitignore
|
|
46
182
|
- .rspec
|
|
47
183
|
- .travis.yml
|
|
@@ -123,29 +259,38 @@ files:
|
|
|
123
259
|
- spec/support/samples/widget_decorator.rb
|
|
124
260
|
homepage: http://github.com/jcasimir/draper
|
|
125
261
|
licenses: []
|
|
262
|
+
|
|
126
263
|
post_install_message:
|
|
127
264
|
rdoc_options: []
|
|
128
|
-
|
|
265
|
+
|
|
266
|
+
require_paths:
|
|
129
267
|
- lib
|
|
130
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
268
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
269
|
none: false
|
|
132
|
-
requirements:
|
|
133
|
-
- -
|
|
134
|
-
- !ruby/object:Gem::Version
|
|
135
|
-
|
|
136
|
-
|
|
270
|
+
requirements:
|
|
271
|
+
- - ">="
|
|
272
|
+
- !ruby/object:Gem::Version
|
|
273
|
+
hash: 3
|
|
274
|
+
segments:
|
|
275
|
+
- 0
|
|
276
|
+
version: "0"
|
|
277
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
278
|
none: false
|
|
138
|
-
requirements:
|
|
139
|
-
- -
|
|
140
|
-
- !ruby/object:Gem::Version
|
|
141
|
-
|
|
279
|
+
requirements:
|
|
280
|
+
- - ">="
|
|
281
|
+
- !ruby/object:Gem::Version
|
|
282
|
+
hash: 3
|
|
283
|
+
segments:
|
|
284
|
+
- 0
|
|
285
|
+
version: "0"
|
|
142
286
|
requirements: []
|
|
287
|
+
|
|
143
288
|
rubyforge_project: draper
|
|
144
|
-
rubygems_version: 1.8.
|
|
289
|
+
rubygems_version: 1.8.24
|
|
145
290
|
signing_key:
|
|
146
291
|
specification_version: 3
|
|
147
292
|
summary: Decorator pattern implementation for Rails.
|
|
148
|
-
test_files:
|
|
293
|
+
test_files:
|
|
149
294
|
- spec/draper/base_spec.rb
|
|
150
295
|
- spec/draper/helper_support_spec.rb
|
|
151
296
|
- spec/draper/model_support_spec.rb
|