rails_presenter 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Rails Presenter
2
2
 
3
- [![Build Status](https://travis-ci.org/dfmonaco/rails_presenter.png?branch=master)](https://travis-ci.org/dfmonaco/rails_presenter)
3
+ ### Code Status
4
+ * [![Build Status](https://travis-ci.org/dfmonaco/rails_presenter.png?branch=master)](https://travis-ci.org/dfmonaco/rails_presenter)
5
+ * [![Coverage Status](https://coveralls.io/repos/dfmonaco/rails_presenter/badge.png?branch=master)](https://coveralls.io/r/dfmonaco/rails_presenter)
4
6
 
5
7
  ##Before:
6
8
 
@@ -146,4 +148,37 @@ class ProductPresenter < RailsPresenter::Base
146
148
  end
147
149
  ```
148
150
 
151
+ ## How does it work?
152
+ Basically there are two main components, the presenter class and the #present helper method.
149
153
 
154
+ ### The presenter class
155
+ You can think of a presenter as a mix between a domain model object and a view template, every method call not defined in the current class will be forwarded to the original domain model object, besides you can access all the view template functionality through the #h method. Also the #target method will get you the unmodified original domain model object.
156
+
157
+ ```ruby
158
+ class ProductPresenter < RailsPresenter::Base
159
+
160
+ def image
161
+ h.link_to(h.image_tag(super), h.product_path(target))
162
+ end
163
+
164
+ end
165
+ ```
166
+
167
+ ### The #present helper method
168
+ The helper method #present it's used to instantiate new presenter objects, it takes any object, an array of objects or an ActiveRecord::Relation and returns the corresponding presenter instances.
169
+
170
+ ```ruby
171
+ present(Customer.new).map(&:class) # => CustomerPresenter
172
+ present([Customer.new, Product.new]).map(&:class) # => [CustomerPresenter, ProductPresenter]
173
+ present(Product.limit(2).order(:name))).map(&:class) # => [ProductPresenter, ProductPresenter]
174
+ ```
175
+ This method determines the name of the presenter class from the target object, for example a Project object would instantiate a ProjectPresenter object. If the assumed presenter class doesn't exist it will return the unmodified target object.
176
+
177
+ You can pass an optional block too:
178
+
179
+ ```ruby
180
+ present(@purchase_order) do |purhase_order_presenter|
181
+ purchase_order_presenter.date
182
+ purchase_order_presenter.number
183
+ end
184
+ ```
@@ -122,10 +122,12 @@ module RailsPresenter
122
122
  @template
123
123
  end
124
124
 
125
- def o
125
+ def target
126
126
  __getobj__
127
127
  end
128
128
 
129
+ alias_method :o, :target
130
+
129
131
  def to_s
130
132
  respond_to?(:name) ? name : super
131
133
  end
@@ -143,7 +145,7 @@ module RailsPresenter
143
145
  h.render partial: 'shared/show_with_attrs', locals: {attrs_hash: attrs_hash}
144
146
  end
145
147
 
146
- def self_location(location = o)
148
+ def self_location(location = target)
147
149
  h.polymorphic_path location
148
150
  end
149
151
 
@@ -162,8 +164,8 @@ module RailsPresenter
162
164
  when /^h_(.*)$/
163
165
  get_iv_from_view($1)
164
166
  when /^get_(.*)$/
165
- return o if o.is_a? $1.camelize.constantize
166
- get_iv_from_view($1) || o.public_send($1)
167
+ return target if target.is_a? $1.camelize.constantize
168
+ get_iv_from_view($1) || target.public_send($1)
167
169
  else
168
170
  super
169
171
  end
@@ -171,7 +173,7 @@ module RailsPresenter
171
173
 
172
174
  private
173
175
  def base_object_name
174
- o.class.to_s.underscore
176
+ target.class.to_s.underscore
175
177
  end
176
178
 
177
179
  def get_iv_from_view(iv_name)
@@ -1,3 +1,3 @@
1
1
  module RailsPresenter
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_presenter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-03 00:00:00.000000000 Z
12
+ date: 2013-04-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 3.2.11
21
+ version: 3.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 3.2.11
29
+ version: 3.2.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: sqlite3
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +75,22 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: coveralls
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
78
94
  description: Presenters for Rails applications
79
95
  email:
80
96
  - dfmonaco@gmail.com
@@ -108,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
124
  version: '0'
109
125
  segments:
110
126
  - 0
111
- hash: 644764051
127
+ hash: 84679471
112
128
  required_rubygems_version: !ruby/object:Gem::Requirement
113
129
  none: false
114
130
  requirements:
@@ -117,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
133
  version: '0'
118
134
  segments:
119
135
  - 0
120
- hash: 644764051
136
+ hash: 84679471
121
137
  requirements: []
122
138
  rubyforge_project:
123
139
  rubygems_version: 1.8.25