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 +36 -1
- data/lib/rails_presenter/base.rb +7 -5
- data/lib/rails_presenter/version.rb +1 -1
- metadata +22 -6
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Rails Presenter
|
2
2
|
|
3
|
-
|
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
|
+
```
|
data/lib/rails_presenter/base.rb
CHANGED
@@ -122,10 +122,12 @@ module RailsPresenter
|
|
122
122
|
@template
|
123
123
|
end
|
124
124
|
|
125
|
-
def
|
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 =
|
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
|
166
|
-
get_iv_from_view($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
|
-
|
176
|
+
target.class.to_s.underscore
|
175
177
|
end
|
176
178
|
|
177
179
|
def get_iv_from_view(iv_name)
|
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.
|
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-
|
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.
|
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.
|
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:
|
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:
|
136
|
+
hash: 84679471
|
121
137
|
requirements: []
|
122
138
|
rubyforge_project:
|
123
139
|
rubygems_version: 1.8.25
|