pres 1.0.0 → 1.1.0

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +27 -32
  3. data/lib/pres/version.rb +1 -1
  4. metadata +7 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38f3df21d4a8eec7d64db8e94ea4b032811c5af4
4
- data.tar.gz: 3bb195b7290f4c41b96ac063e1ed2e49344d61cb
3
+ metadata.gz: 6c26aeb59d5a25f1249d32e9b31c52dd40c55262
4
+ data.tar.gz: fe9fb9d51ac9010b57d95cff1c7f00e55d04752d
5
5
  SHA512:
6
- metadata.gz: ed39b6d60be0ac37a431a4b5d0921b6ed7bd11e3ba1d8f95c2e2a157d3d889ac08e60c6d8ca9807f1f1fe2b2e495ebecf20eba07cdfa31fce07bd8210d9dc80c
7
- data.tar.gz: d007458b744e863ea1ab9db627236032930121ec89cf3d2686516748d7b0c43932ebbff90c3d14b11913db13a9c4799e4f0bc8eb2486527dc15b6d9e408bab83
6
+ metadata.gz: e315003283e6fed583e5f8b7399a3640a99b9177a9da67c0eb9adf1e94cdee6d06821979cecb824fef5fc26288177eea5dfd4aa71e8885636ec92afb9769e6b0
7
+ data.tar.gz: d47003fd1650d6800cf0b1380b5cd48aeb48279a52f1cfe28bf7bf0e264db2b6b396a1268751b1b9ee58ae2d87053eb3e9cdcd30f92af11b13d780be209f685e
data/README.md CHANGED
@@ -5,10 +5,8 @@
5
5
 
6
6
  ## What?
7
7
 
8
- A Presenter is a rendering class that wraps a model. Presenters are an
9
- alternative to an unorganized mass of helper methods in your Rails application.
10
-
11
- The `pres` gem is a lightweight presenter solution.
8
+ A Presenter is a rendering class. Presenters are an alternative to an unorganized mass of helper
9
+ methods in your Rails application. The `pres` gem is a lightweight presenter solution.
12
10
 
13
11
  ## How and Why?
14
12
 
@@ -17,11 +15,10 @@ Rails' `ViewContext` contains convenience methods for views, such as `link_to`,
17
15
  Rails views nice to work with.
18
16
 
19
17
  Other presenter libraries mix in all the methods from the Rails `ViewContext` to
20
- make it easy to call those methods in the Presenter class. This causes method
21
- bloat. `pres` instead injects the `ViewContext` as a dependency into the
22
- Presenter class, and uses `method_missing` to delegate to `ViewContext` methods.
23
- So `pres` produces small classes that contain and delegate to an existing object
24
- that handles server-side rendering.
18
+ make it easy to call those methods in the Presenter class. `pres` instead injects
19
+ the `ViewContext` as a dependency into the Presenter class, and uses `method_missing`
20
+ to delegate to `ViewContext` methods. `pres` produces small classes that contain and
21
+ delegate to an existing object that handles server-side rendering.
25
22
 
26
23
  ## Install
27
24
 
@@ -104,7 +101,7 @@ Use the presenter object in `doges/show.haml.html`
104
101
  .meme-link= doge.know_your_meme_link
105
102
  ```
106
103
 
107
- #### Collection Example
104
+ #### Collections
108
105
 
109
106
  Create a presenter class in `app/presenters`:
110
107
 
@@ -114,7 +111,7 @@ class DogePresenter < Pres::Presenter
114
111
  end
115
112
  ```
116
113
 
117
- Wrap your model object in your controller with `present`:
114
+ Wrap your model objects in your controller with `present`:
118
115
 
119
116
  ```ruby
120
117
  class DogesController
@@ -148,11 +145,10 @@ Or use each:
148
145
 
149
146
  #### Present with options
150
147
 
151
- Use keyword arguments (or an options hash) to pass additional options to a
152
- Presenter:
148
+ Pass additional options to a Presenter as a hash:
153
149
 
154
150
  ```ruby
155
- class UserPresenter
151
+ class UserPresenter < Pres::Presenter
156
152
  def initialize(object, view_context, cool: false)
157
153
  super
158
154
  @cool = cool
@@ -167,25 +163,19 @@ present(user, cool: true)
167
163
  #### Render a custom Presenter
168
164
 
169
165
  By default, a presenter class corresponding to the model class name is
170
- constructed. To specify a different class, pass the `presenter:` key, followed
171
- by any additional arguments:
166
+ constructed in `present`. For example, if you present a `User`, a `UserPresenter`
167
+ class is constructed. An error is raised if the presenter class does not exist.
168
+ To specify a different class, use the `presenter:` key.
172
169
 
173
170
  ```ruby
174
171
  user = User.new
175
- present(user, presenter: NiceUserPresenter, cool: true)
176
- => #<NiceUserPresenter object: #<User> ...>
177
- ```
178
-
179
- #### Render a collection
180
-
181
- ```ruby
182
- present(User.first(5))
183
- => [#<UserPresenter object: #<User> ...>]
172
+ present(user, presenter: UserEditPresenter, cool: true)
173
+ => #<UserEditPresenter object: #<User> ...>
184
174
  ```
185
175
 
186
176
  #### Creating presenters in views
187
177
 
188
- You should create presenters in your controllers. If you would like to create
178
+ You should create presenters in your controllers or within other presenters. If you would like to create
189
179
  a presenter in your view code, make the `present` method visible to your views:
190
180
 
191
181
  ```ruby
@@ -195,9 +185,7 @@ class ApplicationController
195
185
  end
196
186
  ```
197
187
 
198
- ### More Goodness
199
-
200
- #### Presenters are objects
188
+ ### Presenters are objects
201
189
 
202
190
  You can mix in common methods.
203
191
 
@@ -208,12 +196,12 @@ module Shared
208
196
  end
209
197
  end
210
198
 
211
- class DogePresenter < Presenter
199
+ class DogePresenter < Pres::Presenter
212
200
  include Shared
213
201
  end
214
202
  ```
215
203
 
216
- You can override methods without resorting to convoluted method names:
204
+ You can override methods as usual:
217
205
 
218
206
  ```ruby
219
207
  class DogePresenter < Pres::Presenter
@@ -228,6 +216,9 @@ end
228
216
 
229
217
  #### Presenters can create other presenters
230
218
 
219
+ If you are awesome, you could have one top-level presenter exposed per controller,
220
+ which can then wrap child objects in presenters of their own.
221
+
231
222
  ```ruby
232
223
  class DogePresenter < Pres::Presenter
233
224
  def cats
@@ -244,7 +235,11 @@ end
244
235
 
245
236
  If you don't want to inherit from `Pres::Presenter`, you can include
246
237
  `Pres::ViewDelegation` and implement your own initializer (so the `present` helper
247
- will work).
238
+ will work).
239
+
240
+ This technique is useful if you would like to delegate all methods in a model
241
+ by default, instead of whitelisting methods on the wrapped model explicitly.
242
+ Delegating everything to the model by default is how the `draper` gem works, for example.
248
243
 
249
244
  ```ruby
250
245
  class DogePresenter < SimpleDelegator
data/lib/pres/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pres
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pres
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tee Parham
@@ -9,20 +9,20 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-01-14 00:00:00.000000000 Z
12
+ date: 2016-09-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '4.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - "~>"
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '4.0'
28
28
  - !ruby/object:Gem::Dependency
@@ -73,14 +73,14 @@ dependencies:
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '10.4'
76
+ version: '11.0'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '10.4'
83
+ version: '11.0'
84
84
  description: A Simple Rails Presenter base class and controller helper
85
85
  email:
86
86
  - tee@neighborland.com
@@ -116,9 +116,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
116
  version: '0'
117
117
  requirements: []
118
118
  rubyforge_project:
119
- rubygems_version: 2.5.1
119
+ rubygems_version: 2.6.6
120
120
  signing_key:
121
121
  specification_version: 4
122
122
  summary: A Simple Rails Presenter
123
123
  test_files: []
124
- has_rdoc: