draper 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -22,8 +22,9 @@
22
22
 
23
23
  ## What's New
24
24
 
25
- ### Version 0.9.2
25
+ ### Version 0.9.3
26
26
 
27
+ * Helpers are available from the decorator class level, so you could call `ArticleDecorator.new_article_link`
27
28
  * Automatically generate a named accessor for the wrapped object, so now inside of `ArticleDecorator` you can use `article` instead of just `model`
28
29
  * Removed the `lazy_helpers` method to favor using `include Draper::LazyHelpers`
29
30
  * Refactored how methods are selected for delegation to the wrapped model
@@ -4,5 +4,6 @@ require 'draper/base'
4
4
  require 'draper/lazy_helpers'
5
5
  require 'draper/model_support'
6
6
  require 'draper/view_context'
7
+ require 'draper/decorated_enumerable_proxy'
7
8
 
8
9
  Draper::System.setup
@@ -21,7 +21,6 @@ module Draper
21
21
  # @param [Object] context (optional)
22
22
  def initialize(input, context = {})
23
23
  input.inspect # forces evaluation of a lazy query from AR
24
- input.inspect
25
24
  self.class.model_class = input.class if model_class.nil?
26
25
  @model = input
27
26
  self.context = context
@@ -94,7 +93,7 @@ module Draper
94
93
  # @param [Object] instance(s) to wrap
95
94
  # @param [Object] context (optional)
96
95
  def self.decorate(input, context = {})
97
- input.respond_to?(:each) ? DecoratedEnumerableProxy.new(input, self, context) : new(input, context)
96
+ input.respond_to?(:each) ? Draper::DecoratedEnumerableProxy.new(input, self, context) : new(input, context)
98
97
  end
99
98
 
100
99
  # Access the helpers proxy to call built-in and user-defined
@@ -102,10 +101,21 @@ module Draper
102
101
  #
103
102
  # @return [Object] proxy
104
103
  def helpers
105
- Thread.current[:current_view_context]
104
+ self.class.helpers
106
105
  end
107
106
  alias :h :helpers
108
107
 
108
+ # Access the helpers proxy to call built-in and user-defined
109
+ # Rails helpers from a class context.
110
+ #
111
+ # @return [Object] proxy
112
+ class << self
113
+ def helpers
114
+ Thread.current[:current_view_context]
115
+ end
116
+ alias :h :helpers
117
+ end
118
+
109
119
  # Fetch the original wrapped model.
110
120
  #
111
121
  # @return [Object] original_model
@@ -147,33 +157,6 @@ module Draper
147
157
  private
148
158
  def allow?(method)
149
159
  (!allowed? || allowed.include?(method) || FORCED_PROXY.include?(method)) && !denied.include?(method)
150
- end
151
-
152
- class DecoratedEnumerableProxy
153
- include Enumerable
154
-
155
- def initialize(collection, klass, context)
156
- @wrapped_collection, @klass, @context = collection, klass, context
157
- end
158
-
159
- # Implementation of Enumerable#each that proxyes to the wrapped collection
160
- def each(&block)
161
- @wrapped_collection.each { |member| block.call(@klass.new(member, @context)) }
162
- end
163
-
164
- # Implement to_arry so that render @decorated_collection is happy
165
- def to_ary
166
- @wrapped_collection.to_ary
167
- end
168
-
169
- def method_missing (meth, *args, &block)
170
- @wrapped_collection.send(meth, *args, &block)
171
- end
172
-
173
- def to_s
174
- "#<DecoratedEnumerableProxy of #{@klass} for #{@wrapped_collection.inspect}>"
175
- end
176
- end
177
-
160
+ end
178
161
  end
179
162
  end
@@ -0,0 +1,27 @@
1
+ module Draper
2
+ class DecoratedEnumerableProxy
3
+ include Enumerable
4
+
5
+ def initialize(collection, klass, context)
6
+ @wrapped_collection, @klass, @context = collection, klass, context
7
+ end
8
+
9
+ # Implementation of Enumerable#each that proxyes to the wrapped collection
10
+ def each(&block)
11
+ @wrapped_collection.each { |member| block.call(@klass.new(member, @context)) }
12
+ end
13
+
14
+ # Implement to_arry so that render @decorated_collection is happy
15
+ def to_ary
16
+ @wrapped_collection.to_ary
17
+ end
18
+
19
+ def method_missing (meth, *args, &block)
20
+ @wrapped_collection.send(meth, *args, &block)
21
+ end
22
+
23
+ def to_s
24
+ "#<DecoratedEnumerableProxy of #{@klass} for #{@wrapped_collection.inspect}>"
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module Draper
2
- VERSION = "0.9.2"
2
+ VERSION = "0.9.3"
3
3
  end
@@ -23,8 +23,22 @@ describe Draper::Base do
23
23
  context(".helpers") do
24
24
  it "should have a valid view_context" do
25
25
  subject.helpers.should be
26
+ end
27
+
28
+ it "should be aliased to .h" do
29
+ subject.h.should == subject.helpers
26
30
  end
27
31
  end
32
+
33
+ context("#helpers") do
34
+ it "should have a valid view_context" do
35
+ Decorator.helpers.should be
36
+ end
37
+
38
+ it "should be aliased to #h" do
39
+ Decorator.h.should == Decorator.helpers
40
+ end
41
+ end
28
42
 
29
43
  context(".decorates") do
30
44
  it "sets the model class for the decorator" do
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.2
4
+ version: 0.9.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -50,6 +50,7 @@ files:
50
50
  - draper.gemspec
51
51
  - lib/draper.rb
52
52
  - lib/draper/base.rb
53
+ - lib/draper/decorated_enumerable_proxy.rb
53
54
  - lib/draper/lazy_helpers.rb
54
55
  - lib/draper/model_support.rb
55
56
  - lib/draper/system.rb