draper 0.9.3 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Readme.markdown CHANGED
@@ -20,17 +20,28 @@
20
20
  6. Output the instance methods in your view templates
21
21
  ex: `@article_decorator.created_at`
22
22
 
23
- ## What's New
23
+ ## Watch the RailsCast
24
+
25
+ Ryan Bates has put together an excellent RailsCast on Draper based on the 0.8.0 release:
26
+
27
+ [![RailsCast #286](https://img.skitch.com/20111021-dgxmqntq22d37fthky6pttk59n.jpg "RailsCast #286 - Draper")](http://railscasts.com/episodes/286-draper)
24
28
 
25
- ### Version 0.9.3
29
+ ## What's New
26
30
 
27
- * Helpers are available from the decorator class level, so you could call `ArticleDecorator.new_article_link`
28
- * Automatically generate a named accessor for the wrapped object, so now inside of `ArticleDecorator` you can use `article` instead of just `model`
29
- * Removed the `lazy_helpers` method to favor using `include Draper::LazyHelpers`
30
- * Refactored how methods are selected for delegation to the wrapped model
31
- * Fixed how the view context is stored in the `Thread.current` to resolve cross-request issues
32
- * Decorated collections now return a collection proxy instead of an array, which fixes many compatibility issues
33
- * Automatically generate RSpec/Test::Unit stub for decorator class
31
+ ### Version 0.9.X
32
+
33
+ * `.5`: Render the `decorate` helper, passing a source object and a block in a view template to auto-decorate and render the block (ISSUE: see https://github.com/jcasimir/draper/issues/32)
34
+ * `.5`: `ArticleDecorator.first` and `ArticleDecorator.last` will return decorated instances as you'd expect
35
+ * `.5`: Calling `ArticleDecorator.all` will now return a `DecoratedEnumerableProxy` of the objects from `Article.all`
36
+ * `.5`: More love for `DecoratedEnumerableProxy` including better use of `respond_to`, `include?`, and overriding `.all` to return a
37
+ * `.4`: Improved the collection proxy's `respond_to` and `to_ary` to play nicely with Rails' `render`
38
+ * `.3`: Helpers are available from the decorator class level, so you could write a `ArticleDecorator.new_article_link` that uses `h.link_to`
39
+ * `.2`: Automatically generate a named accessor for the wrapped object, so now inside of `ArticleDecorator` you can use `article` instead of just `model`
40
+ * `.2`: Automatically generate RSpec/Test::Unit stub for decorator class
41
+ * `.1`: Removed the `lazy_helpers` method to favor using `include Draper::LazyHelpers`
42
+ * `.1`: Refactored how methods are selected for delegation to the wrapped model
43
+ * `.0`: Fixed how the view context is stored to resolve cross-request issues
44
+ * `.0`: Decorated collections now return a collection proxy instead of an array, which fixes many compatibility issues
34
45
 
35
46
  ## Goals
36
47
 
@@ -222,6 +233,21 @@ Use the new methods in your views like any other model method (ex: `@article.pub
222
233
  <h1><%= @article.title %> <%= @article.published_at %></h1>
223
234
  ```
224
235
 
236
+ ### Using in Mailers
237
+
238
+ To use decorators in mailers that use helpers, you have to call `set_current_view_context` in your
239
+ mailer method:
240
+
241
+ ```ruby
242
+ class ActicleMailer < ActionMailer::Base
243
+ def new_article(article)
244
+ set_current_view_context
245
+ @article_decorator = ArticleDecorator.decorate(article)
246
+ mail(:to => 'come@me.bro', :subject => "New Article: #{@article_decorator.title}")
247
+ end
248
+ end
249
+ ```
250
+
225
251
  ## Possible Decoration Methods
226
252
 
227
253
  Here are some ideas of what you might do in decorator methods:
data/draper.gemspec CHANGED
@@ -8,13 +8,12 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Jeff Casimir"]
9
9
  s.email = ["jeff@casimircreative.com"]
10
10
  s.homepage = "http://github.com/jcasimir/draper"
11
- s.summary = "Decorator pattern implmentation for Rails."
12
- s.description = "Draper reimagines the role of helpers in the view layer of a Rails application, allowing an object-oriented approach rather than procedural."
13
-
11
+ s.summary = "Decorator pattern implementation for Rails."
12
+ s.description = "Draper implements a decorator or presenter pattern for Rails applications."
14
13
  s.rubyforge_project = "draper"
15
-
16
14
  s.files = `git ls-files`.split("\n")
17
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
17
  s.require_paths = ["lib"]
18
+ s.add_dependency('activesupport', '>= 2.3.10')
20
19
  end
data/lib/draper.rb CHANGED
@@ -3,6 +3,7 @@ require 'draper/system'
3
3
  require 'draper/base'
4
4
  require 'draper/lazy_helpers'
5
5
  require 'draper/model_support'
6
+ require 'draper/helper_support'
6
7
  require 'draper/view_context'
7
8
  require 'draper/decorated_enumerable_proxy'
8
9
 
data/lib/draper/base.rb CHANGED
@@ -95,6 +95,22 @@ module Draper
95
95
  def self.decorate(input, context = {})
96
96
  input.respond_to?(:each) ? Draper::DecoratedEnumerableProxy.new(input, self, context) : new(input, context)
97
97
  end
98
+
99
+ # Fetch all instances of the decorated class and decorate them.
100
+ #
101
+ # @param [Object] context (optional)
102
+ # @return [Draper::DecoratedEnumerableProxy]
103
+ def self.all(context = {})
104
+ Draper::DecoratedEnumerableProxy.new(model_class.all, self, context)
105
+ end
106
+
107
+ def self.first(context = {})
108
+ decorate(model_class.first, context)
109
+ end
110
+
111
+ def self.last(context = {})
112
+ decorate(model_class.last, context)
113
+ end
98
114
 
99
115
  # Access the helpers proxy to call built-in and user-defined
100
116
  # Rails helpers. Aliased to `.h` for convinience.
@@ -111,7 +127,7 @@ module Draper
111
127
  # @return [Object] proxy
112
128
  class << self
113
129
  def helpers
114
- Thread.current[:current_view_context]
130
+ Draper::ViewContext.current
115
131
  end
116
132
  alias :h :helpers
117
133
  end
@@ -127,7 +143,7 @@ module Draper
127
143
  #
128
144
  # @return [Boolean] true if other's model == self's model
129
145
  def ==(other)
130
- @model == other.model
146
+ @model == (other.respond_to?(:model) ? other.model : other)
131
147
  end
132
148
 
133
149
  def respond_to?(method, include_private = false)
@@ -6,22 +6,28 @@ module Draper
6
6
  @wrapped_collection, @klass, @context = collection, klass, context
7
7
  end
8
8
 
9
- # Implementation of Enumerable#each that proxyes to the wrapped collection
10
9
  def each(&block)
11
10
  @wrapped_collection.each { |member| block.call(@klass.new(member, @context)) }
12
11
  end
13
12
 
14
- # Implement to_arry so that render @decorated_collection is happy
15
13
  def to_ary
16
- @wrapped_collection.to_ary
14
+ @wrapped_collection.map { |member| @klass.new(member, @context) }
17
15
  end
18
16
 
19
- def method_missing (meth, *args, &block)
20
- @wrapped_collection.send(meth, *args, &block)
17
+ def method_missing (method, *args, &block)
18
+ @wrapped_collection.send(method, *args, &block)
19
+ end
20
+
21
+ def respond_to?(method)
22
+ super || @wrapped_collection.respond_to?(method)
23
+ end
24
+
25
+ def ==(other)
26
+ @wrapped_collection == other
21
27
  end
22
28
 
23
29
  def to_s
24
30
  "#<DecoratedEnumerableProxy of #{@klass} for #{@wrapped_collection.inspect}>"
25
31
  end
26
32
  end
27
- end
33
+ end
@@ -0,0 +1,5 @@
1
+ module Draper::HelperSupport
2
+ def decorate(input, &block)
3
+ capture { block.call(input.decorate) }
4
+ end
5
+ end
@@ -3,4 +3,17 @@ module Draper::ModelSupport
3
3
  @decorator ||= "#{self.class.name}Decorator".constantize.decorate(self)
4
4
  block_given? ? yield(@decorator) : @decorator
5
5
  end
6
+
7
+ alias :decorate :decorator
8
+
9
+ module ClassMethods
10
+ def decorate(context = {})
11
+ @decorator_proxy ||= "#{model_name}Decorator".constantize.decorate(self.scoped)
12
+ block_given? ? yield(@decorator_proxy) : @decorator_proxy
13
+ end
14
+ end
15
+
16
+ def self.included(base)
17
+ base.extend(ClassMethods)
18
+ end
6
19
  end
data/lib/draper/system.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  module Draper
2
- class System
2
+ class System
3
3
  def self.setup
4
- ActionController::Base.send(:include, Draper::ViewContext) if defined?(ActionController::Base)
4
+ ActionController::Base.send(:include, Draper::ViewContextFilter) if defined?(ActionController::Base)
5
+ ActionMailer::Base.send(:include, Draper::ViewContextFilter) if defined?(ActionMailer::Base)
6
+ ActionController::Base.send(:helper, Draper::HelperSupport) if defined?(ActionController::Base)
5
7
  end
6
8
  end
7
- end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Draper
2
- VERSION = "0.9.3"
2
+ VERSION = "0.9.5"
3
3
  end
@@ -1,11 +1,21 @@
1
1
  module Draper
2
2
  module ViewContext
3
+ def self.current
4
+ Thread.current[:current_view_context]
5
+ end
6
+
7
+ def self.current=(input)
8
+ Thread.current[:current_view_context] = input
9
+ end
10
+ end
11
+
12
+ module ViewContextFilter
3
13
  def set_current_view_context
4
- Thread.current[:current_view_context] = self.view_context
14
+ Draper::ViewContext.current = self.view_context
5
15
  end
6
-
16
+
7
17
  def self.included(source)
8
- source.send(:before_filter, :set_current_view_context)
18
+ source.send(:before_filter, :set_current_view_context) if source.respond_to?(:before_filter)
9
19
  end
10
20
  end
11
- end
21
+ end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'draper'
3
2
 
4
3
  describe Draper::Base do
5
4
  before(:each){ ApplicationController.new.set_current_view_context }
@@ -10,11 +9,11 @@ describe Draper::Base do
10
9
  it "should pass missing class method calls on to the wrapped class" do
11
10
  subject.class.sample_class_method.should == "sample class method"
12
11
  end
13
-
12
+
14
13
  it "should respond_to a wrapped class method" do
15
14
  subject.class.should respond_to(:sample_class_method)
16
15
  end
17
-
16
+
18
17
  it "should still respond_to it's own class methods" do
19
18
  subject.class.should respond_to(:own_class_method)
20
19
  end
@@ -24,17 +23,17 @@ describe Draper::Base do
24
23
  it "should have a valid view_context" do
25
24
  subject.helpers.should be
26
25
  end
27
-
26
+
28
27
  it "should be aliased to .h" do
29
28
  subject.h.should == subject.helpers
30
- end
29
+ end
31
30
  end
32
-
31
+
33
32
  context("#helpers") do
34
33
  it "should have a valid view_context" do
35
34
  Decorator.helpers.should be
36
35
  end
37
-
36
+
38
37
  it "should be aliased to #h" do
39
38
  Decorator.h.should == Decorator.helpers
40
39
  end
@@ -44,7 +43,7 @@ describe Draper::Base do
44
43
  it "sets the model class for the decorator" do
45
44
  ProductDecorator.new(source).model_class.should == Product
46
45
  end
47
-
46
+
48
47
  it "should handle plural-like words properly'" do
49
48
  class Business; end
50
49
  expect do
@@ -54,7 +53,7 @@ describe Draper::Base do
54
53
  BusinessDecorator.model_class.should == Business
55
54
  end.should_not raise_error
56
55
  end
57
-
56
+
58
57
  it "creates a named accessor for the wrapped model" do
59
58
  pd = ProductDecorator.new(source)
60
59
  pd.send(:product).should == source
@@ -71,7 +70,7 @@ describe Draper::Base do
71
70
  context("selecting methods") do
72
71
  it "echos the methods of the wrapped class except default exclusions" do
73
72
  source.methods.each do |method|
74
- unless Draper::Base::DEFAULT_DENIED.include?(method)
73
+ unless Draper::Base::DEFAULT_DENIED.include?(method)
75
74
  subject.should respond_to(method.to_sym)
76
75
  end
77
76
  end
@@ -120,7 +119,7 @@ describe Draper::Base do
120
119
  pd.should be_instance_of(ProductDecorator)
121
120
  pd.model.should be_instance_of(Product)
122
121
  end
123
-
122
+
124
123
  it "should accept and store a context" do
125
124
  pd = ProductDecorator.find(1, :admin)
126
125
  pd.context.should == :admin
@@ -176,18 +175,37 @@ describe Draper::Base do
176
175
  subject.should == other
177
176
  end
178
177
  end
178
+
179
+ context 'position accessors' do
180
+ [:first, :last].each do |method|
181
+ context "##{method}" do
182
+ it "should return a decorated instance" do
183
+ ProductDecorator.send(method).should be_instance_of ProductDecorator
184
+ end
185
+
186
+ it "should return the #{method} instance of the wrapped class" do
187
+ ProductDecorator.send(method).model.should == Product.send(method)
188
+ end
189
+
190
+ it "should accept an optional context" do
191
+ ProductDecorator.send(method, :admin).context.should == :admin
192
+ end
193
+ end
194
+ end
195
+ end
179
196
 
180
197
  describe "collection decoration" do
181
-
198
+
182
199
  # Implementation of #decorate that returns an array
183
- # of decorated objects is insufficient to deal with
184
- # situations where the original collection has been
200
+ # of decorated objects is insufficient to deal with
201
+ # situations where the original collection has been
185
202
  # expanded with the use of modules (as often the case
186
- # with paginator gems) or is just more complex then
187
- # an array.
203
+ # with paginator gems) or is just more complex then
204
+ # an array.
188
205
  module Paginator; def page_number; "magic_value"; end; end
189
206
  Array.send(:include, Paginator)
190
207
  let(:paged_array) { [Product.new, Product.new] }
208
+ let(:empty_collection) { [] }
191
209
  subject { ProductDecorator.decorate(paged_array) }
192
210
 
193
211
  it "should proxy all calls to decorated collection" do
@@ -196,10 +214,56 @@ describe Draper::Base do
196
214
  end
197
215
 
198
216
  it "should support Rails partial lookup for a collection" do
199
- # to support Rails render @collection the returned collection
200
- # (or its proxy) should implement #to_ary.
217
+ # to support Rails render @collection the returned collection
218
+ # (or its proxy) should implement #to_ary.
201
219
  subject.respond_to?(:to_ary).should be true
202
- subject.to_a.first.should == ProductDecorator.decorate(paged_array.first)
220
+ subject.to_ary.first.should == ProductDecorator.decorate(paged_array.first)
221
+ end
222
+
223
+ it "should delegate respond_to? to the wrapped collection" do
224
+ decorator = ProductDecorator.decorate(paged_array)
225
+ paged_array.should_receive(:respond_to?).with(:whatever)
226
+ decorator.respond_to?(:whatever)
227
+ end
228
+
229
+ it "should return blank for a decorated empty collection" do
230
+ # This tests that respond_to? is defined for the DecoratedEnumerableProxy
231
+ # since activesupport calls respond_to?(:empty) in #blank
232
+ decorator = ProductDecorator.decorate(empty_collection)
233
+ decorator.should be_blank
234
+ end
235
+
236
+ it "should return whether the member is in the array for a decorated wrapped collection" do
237
+ # This tests that include? is defined for the DecoratedEnumerableProxy
238
+ member = paged_array.first
239
+ subject.respond_to?(:include?)
240
+ subject.include?(member).should == true
241
+ subject.include?(subject.first).should == true
242
+ subject.include?(Product.new).should == false
243
+ end
244
+
245
+ it "should equal each other when decorating the same collection" do
246
+ subject_one = ProductDecorator.decorate(paged_array)
247
+ subject_two = ProductDecorator.decorate(paged_array)
248
+ subject_one.should == subject_two
249
+ end
250
+
251
+ it "should not equal each other when decorating different collections" do
252
+ subject_one = ProductDecorator.decorate(paged_array)
253
+ new_paged_array = paged_array + [Product.new]
254
+ subject_two = ProductDecorator.decorate(new_paged_array)
255
+ subject_one.should_not == subject_two
256
+ end
257
+
258
+ context '#all' do
259
+ it "should return a decorated collection" do
260
+ ProductDecorator.all.first.should be_instance_of ProductDecorator
261
+ end
262
+
263
+ it "should accept a context" do
264
+ collection = ProductDecorator.all(:admin)
265
+ collection.first.context.should == :admin
266
+ end
203
267
  end
204
268
  end
205
269
 
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Draper::HelperSupport do
4
+ before(:each){ @product = Product.new}
5
+
6
+ context '#decorate' do
7
+ it 'renders a block' do
8
+ output = ApplicationController.decorate(@product){|p| p.model.object_id }
9
+ output.should == @product.object_id
10
+ end
11
+
12
+ it 'uses #capture so Rails only renders the content once' do
13
+ ApplicationController.decorate(@product){|p| p.model.object_id }
14
+ ApplicationController.capture_triggered.should be
15
+ end
16
+ end
17
+
18
+ end
@@ -11,5 +11,19 @@ describe Draper::ModelSupport do
11
11
  a = Product.new.decorator { |d| d.awesome_title }
12
12
  a.should eql "Awesome Title"
13
13
  end
14
+
15
+ it 'should be aliased to .decorate' do
16
+ subject.decorator.model.should == subject.decorate.model
17
+ end
18
+ end
19
+
20
+ describe '#decorate - decorate collections of AR objects' do
21
+ subject { Product.limit }
22
+ its(:decorate) { should be_kind_of(Draper::DecoratedEnumerableProxy) }
23
+
24
+ it "should decorate the collection" do
25
+ subject.decorate.size.should == 1
26
+ subject.decorate.to_ary[0].model.should be_a(Product)
27
+ end
14
28
  end
15
29
  end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'draper'
3
2
 
4
3
  describe Draper::ViewContext do
5
4
  let (:app_controller) do
@@ -19,17 +18,7 @@ describe Draper::ViewContext do
19
18
  end
20
19
 
21
20
  it "raises an exception if the view_context is fetched without being set" do
22
- Thread.current[:current_view_context] = nil
21
+ Draper::ViewContext.current = nil
23
22
  expect {app_controller.current_view_context}.should raise_exception(Exception)
24
23
  end
25
-
26
- it "sets view_context every time" do
27
- app_controller_instance.stub(:view_context) { 'first' }
28
- app_controller_instance.set_current_view_context
29
- Thread.current[:current_view_context].should == 'first'
30
-
31
- app_controller_instance.stub(:view_context) { 'second' }
32
- app_controller_instance.set_current_view_context
33
- Thread.current[:current_view_context].should == 'second'
34
- end
35
- end
24
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  Bundler.require
4
- require './spec/samples/application_helper.rb'
5
- Dir.glob(['./spec/samples/*.rb', './spec/support/*.rb']) do |file|
6
- require file
7
- end
4
+
5
+ Dir['./spec/support/**/*.rb'].each {|file| require file }
@@ -1,4 +1,9 @@
1
1
  module ActiveRecord
2
2
  class Base
3
+
4
+ def self.limit
5
+ self
6
+ end
7
+
3
8
  end
4
9
  end
@@ -1,3 +1,5 @@
1
+ require './spec/support/samples/application_helper'
2
+
1
3
  module ActionController
2
4
  class Base
3
5
  @@before_filters = []
@@ -7,6 +9,9 @@ module ActionController
7
9
  def self.before_filter(name)
8
10
  @@before_filters << name
9
11
  end
12
+ def self.helper(mod)
13
+ extend mod
14
+ end
10
15
  end
11
16
  end
12
17
 
@@ -27,6 +32,15 @@ class ApplicationController < ActionController::Base
27
32
  def self.hello
28
33
  "Hello!"
29
34
  end
35
+
36
+ def self.capture(&block)
37
+ @@capture = true
38
+ block.call
39
+ end
40
+
41
+ def self.capture_triggered
42
+ @@capture ||= false
43
+ end
30
44
  end
31
45
 
32
- Draper::System.setup
46
+ Draper::System.setup
File without changes
@@ -1,4 +1,26 @@
1
1
  class Product < ActiveRecord::Base
2
+ include Draper::ModelSupport
3
+
4
+ def self.first
5
+ @@first ||= Product.new
6
+ end
7
+
8
+ def self.last
9
+ @@last ||= Product.new
10
+ end
11
+
12
+ def self.all
13
+ [Product.new, Product.new]
14
+ end
15
+
16
+ def self.scoped
17
+ [Product.new]
18
+ end
19
+
20
+ def self.model_name
21
+ "Product"
22
+ end
23
+
2
24
  def self.find(id)
3
25
  return Product.new
4
26
  end
@@ -22,4 +44,4 @@ class Product < ActiveRecord::Base
22
44
  def block
23
45
  yield
24
46
  end
25
- end
47
+ 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: 0.9.3
4
+ version: 0.9.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,20 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-20 00:00:00.000000000Z
13
- dependencies: []
14
- description: Draper reimagines the role of helpers in the view layer of a Rails application,
15
- allowing an object-oriented approach rather than procedural.
12
+ date: 2011-10-29 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: &70218782393040 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.3.10
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70218782393040
25
+ description: Draper implements a decorator or presenter pattern for Rails applications.
16
26
  email:
17
27
  - jeff@casimircreative.com
18
28
  executables: []
@@ -20,6 +30,7 @@ extensions: []
20
30
  extra_rdoc_files: []
21
31
  files:
22
32
  - .gitignore
33
+ - .rspec
23
34
  - .travis.yml
24
35
  - .yardopts
25
36
  - Gemfile
@@ -51,6 +62,7 @@ files:
51
62
  - lib/draper.rb
52
63
  - lib/draper/base.rb
53
64
  - lib/draper/decorated_enumerable_proxy.rb
65
+ - lib/draper/helper_support.rb
54
66
  - lib/draper/lazy_helpers.rb
55
67
  - lib/draper/model_support.rb
56
68
  - lib/draper/system.rb
@@ -67,22 +79,23 @@ files:
67
79
  - lib/generators/test_unit/decorator_generator.rb
68
80
  - lib/generators/test_unit/templates/application_decorator_test.rb
69
81
  - lib/generators/test_unit/templates/decorator_test.rb
70
- - spec/base_spec.rb
82
+ - spec/draper/base_spec.rb
83
+ - spec/draper/helper_support_spec.rb
71
84
  - spec/draper/model_support_spec.rb
85
+ - spec/draper/view_context_spec.rb
72
86
  - spec/generators/draper/decorator/decorator_generator_spec.rb
73
87
  - spec/generators/rspec/decorator_generator_spec.rb
74
88
  - spec/generators/test_unit/decorator_generator_spec.rb
75
- - spec/samples/active_record.rb
76
- - spec/samples/application_controller.rb
77
- - spec/samples/application_helper.rb
78
- - spec/samples/decorator.rb
79
- - spec/samples/decorator_with_allows.rb
80
- - spec/samples/decorator_with_application_helper.rb
81
- - spec/samples/decorator_with_denies.rb
82
- - spec/samples/product.rb
83
- - spec/samples/product_decorator.rb
84
89
  - spec/spec_helper.rb
85
- - spec/view_context_spec.rb
90
+ - spec/support/samples/active_record.rb
91
+ - spec/support/samples/application_controller.rb
92
+ - spec/support/samples/application_helper.rb
93
+ - spec/support/samples/decorator.rb
94
+ - spec/support/samples/decorator_with_allows.rb
95
+ - spec/support/samples/decorator_with_application_helper.rb
96
+ - spec/support/samples/decorator_with_denies.rb
97
+ - spec/support/samples/product.rb
98
+ - spec/support/samples/product_decorator.rb
86
99
  homepage: http://github.com/jcasimir/draper
87
100
  licenses: []
88
101
  post_install_message:
@@ -106,21 +119,22 @@ rubyforge_project: draper
106
119
  rubygems_version: 1.8.10
107
120
  signing_key:
108
121
  specification_version: 3
109
- summary: Decorator pattern implmentation for Rails.
122
+ summary: Decorator pattern implementation for Rails.
110
123
  test_files:
111
- - spec/base_spec.rb
124
+ - spec/draper/base_spec.rb
125
+ - spec/draper/helper_support_spec.rb
112
126
  - spec/draper/model_support_spec.rb
127
+ - spec/draper/view_context_spec.rb
113
128
  - spec/generators/draper/decorator/decorator_generator_spec.rb
114
129
  - spec/generators/rspec/decorator_generator_spec.rb
115
130
  - spec/generators/test_unit/decorator_generator_spec.rb
116
- - spec/samples/active_record.rb
117
- - spec/samples/application_controller.rb
118
- - spec/samples/application_helper.rb
119
- - spec/samples/decorator.rb
120
- - spec/samples/decorator_with_allows.rb
121
- - spec/samples/decorator_with_application_helper.rb
122
- - spec/samples/decorator_with_denies.rb
123
- - spec/samples/product.rb
124
- - spec/samples/product_decorator.rb
125
131
  - spec/spec_helper.rb
126
- - spec/view_context_spec.rb
132
+ - spec/support/samples/active_record.rb
133
+ - spec/support/samples/application_controller.rb
134
+ - spec/support/samples/application_helper.rb
135
+ - spec/support/samples/decorator.rb
136
+ - spec/support/samples/decorator_with_allows.rb
137
+ - spec/support/samples/decorator_with_application_helper.rb
138
+ - spec/support/samples/decorator_with_denies.rb
139
+ - spec/support/samples/product.rb
140
+ - spec/support/samples/product_decorator.rb