presenter_rails 1.0.0 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7369b035085593e7c248402cfc1fba20a1dfb15a
4
- data.tar.gz: 0e785985be1e307d9d88ee6159521fab37b6fdd2
3
+ metadata.gz: 07380e067bc7857407c563571ab083e00232e426
4
+ data.tar.gz: 4b783155f31ff25861d81b4cee5041ae8e40ef0a
5
5
  SHA512:
6
- metadata.gz: 8750fc439086bce43b647378fab34d1f2205a149574f036a3333ab2f7084090710ca431744618d1492a9b56064df1d043b7fca7001192aa17208cefd1c7463ac
7
- data.tar.gz: 51bd7a3ba559607f64f9667a07cc54da40415abb49b862d105e038cbf153f4f3790ae76f99b5c10bb729b4427a689a697cfb4811f365daa0dd6060f2d2ae356f
6
+ metadata.gz: bbb4331e7032230fffdd8d84e7ab8e7f62b14017439b3f3b67633f6636e987799c5bc5da8e4b8e1f913208a6fe20c83cd5da935daf91cb528eb4683c8c09f077
7
+ data.tar.gz: 3ac96ee5bf7174caa128c60ccb1c9d017026eda10beb4ac98f313b5ab073e7852af2d1f29c3ccbf94b7dfd651e2d180d7fc46ec429d451af658f819d579c39d1
data/README.md CHANGED
@@ -1,38 +1,88 @@
1
- Singular Resource
1
+ Presenter
2
2
  =====================
3
3
 
4
- Extracted from decent exposure, attempts to leave the useful parts, and just use `helper_method` to expose your view models.
4
+ Presenter helps you expose view models to your views in a convenient way, while
5
+ still allowing you to define methods with the same name inside your controllers.
5
6
 
6
- ## DOES
7
- Allow you to find or initialize a simple resource, removing the boilerplate from CRUD actions.
7
+ ```ruby
8
+ # app/controllers/person_controller.rb
9
+ class PersonController < ApplicationController
8
10
 
11
+ present :person do
12
+ PersonPresenter.decorate(...)
13
+ end
14
+ end
15
+ ```
9
16
 
10
- ## DOES NOT
11
- Expose the model in any way, scope the query to a collection method if defined, or deal with collections.
17
+ ```haml
18
+ / app/views/people/show.html.haml
19
+ .person
20
+ .person-name= person.name
21
+ .person-info= person.biography
22
+ ```
23
+ If you don't provide a block for present, it will assume that you want to expose a `"#{name}_presenter"` method.
24
+ ```ruby
25
+ # app/controllers/person_controller.rb
26
+ class PersonController < ApplicationController
27
+ present :person, :people
12
28
 
29
+ private
13
30
 
14
- ## Use
15
- It provides a private method that performs a query for the document when invoked, unless the id is not defined (`new`, `create`), in which case it returns an initialized model.
16
- ```ruby
17
- singular_resource :patient
31
+ def person_presenter
32
+ PersonPresenter.decorate(...)
33
+ end
34
+
35
+ def people_presenter
36
+ People.all
37
+ end
38
+ end
18
39
  ```
19
40
 
20
- #### Strategies
21
- Like `decent_exposure`, it's configurable, and provides different strategies.
22
- By default, it uses `StrongParametersStrategy`, which only assigns the attributes if a method name is provided via the `attributes` option.
41
+ ## Background
42
+ Presenter attempts to simplify the exposure of variables to the views. It doesn't really care
43
+ about what you are exposing, although it's specially useful to implement [two-step views](http://martinfowler.com/eaaCatalog/twoStepView.html) while using
44
+ [draper](https://github.com/drapergem/draper) in combination with [resourcerer](https://github.com/ElMassimo/resourcerer).
23
45
 
24
- #### Options
25
- ``` ruby
26
- :optional => "True if shouldn't fail if document does not exist",
46
+ ### How it works
27
47
 
28
- :model => "Class or name of the model class",
48
+ When you provide a block, it defines a `"#{name}_presenter"` private method in your controller the same way you would do manually.
29
49
 
30
- :finder_parameter => "Name of the parameter that has the document's id",
50
+ After that, it creates helper methods for your views, each method calls its `"#{name}_presenter"` counterpart in the controller.
31
51
 
32
- :attributes => "Name of the attributes method name if using strong parameters",
52
+ #### Memoization
53
+ Each presenter method is memoized, so the method is called only once and your views get the same instance every time.
54
+
55
+ #### Corolary
56
+ Since the helper methods defined are only available for the view, you can define methods with the same name in your controller :smiley:.
57
+
58
+ License
59
+ --------
60
+
61
+ Copyright (c) 2014 Máximo Mussini
62
+
63
+ MIT License
64
+
65
+ Permission is hereby granted, free of charge, to any person obtaining
66
+ a copy of this software and associated documentation files (the
67
+ "Software"), to deal in the Software without restriction, including
68
+ without limitation the rights to use, copy, modify, merge, publish,
69
+ distribute, sublicense, and/or sell copies of the Software, and to
70
+ permit persons to whom the Software is furnished to do so, subject to
71
+ the following conditions:
72
+
73
+ The above copyright notice and this permission notice shall be
74
+ included in all copies or substantial portions of the Software.
75
+
76
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
77
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
78
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
79
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
80
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
81
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
82
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33
83
 
34
- :param_key => "Name of the parameter that has the document's attributes"
35
- ```
36
84
 
37
- ### Special Thanks
38
- Singular Resource is a subset of [decent_exposure](https://github.com/voxdolo/decent_exposure).
85
+ Credits
86
+ --------
87
+ Presenter was crafted to use in combination with [resourcerer](https://github.com/ElMassimo/resourcerer) and
88
+ [draper](https://github.com/drapergem/draper).
@@ -1,7 +1,12 @@
1
+ require 'pakiderm'
2
+
1
3
  module PresenterRails
2
4
  module Presenter
3
5
  extend ActiveSupport::Concern
4
- include SimpleMemoizer
6
+
7
+ included do
8
+ extend Pakiderm
9
+ end
5
10
 
6
11
  module ClassMethods
7
12
 
@@ -11,7 +16,7 @@ module PresenterRails
11
16
  define_presenter_method!(presenter_methods, &block) if block_given?
12
17
 
13
18
  expose_presenter *methods
14
- memoize *presenter_methods
19
+ memoize *presenter_methods, assignable: true
15
20
  end
16
21
 
17
22
  # Exposes a presenter method to the view for each provided name
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presenter_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Máximo Mussini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-05 00:00:00.000000000 Z
11
+ date: 2014-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: simple_memoizer
28
+ name: pakiderm
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Presenter helps you expose view models to your views with a declarative
@@ -56,17 +56,17 @@ licenses:
56
56
  metadata: {}
57
57
  post_install_message:
58
58
  rdoc_options:
59
- - --charset=UTF-8
59
+ - "--charset=UTF-8"
60
60
  require_paths:
61
61
  - lib
62
62
  required_ruby_version: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - '>='
64
+ - - ">="
65
65
  - !ruby/object:Gem::Version
66
66
  version: '2.0'
67
67
  required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - '>='
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  requirements: []
@@ -76,3 +76,4 @@ signing_key:
76
76
  specification_version: 4
77
77
  summary: ViewModels had a baby with helper_method
78
78
  test_files: []
79
+ has_rdoc: