presenters 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +9 -0
- data/README.md +48 -8
- data/lib/presenters/helper.rb +15 -5
- data/lib/presenters/model.rb +8 -0
- data/lib/presenters/presenter.rb +1 -0
- data/lib/presenters/version.rb +1 -1
- data/lib/presenters.rb +3 -1
- data/presenters.gemspec +2 -2
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5af20d803cdbb814f9343d13d776dd2c74d93d35
|
4
|
+
data.tar.gz: ef9146bc38045e313bd7ff49c6952e45b8fdae36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 949dbc93d43843feb426e732b43b94d6d9106e0c1c83ace79e30cd6fb0c6563628e6a5acd1c1091f9d3ffb73a78ff122ff3000ca454a1050fee6c84f3d7df6bd
|
7
|
+
data.tar.gz: 4b87da8367009c19eee08c47a4c37d0020b1f3556e4434c5a5849ab8db7a42f64801956885d6e9409e712c329b1eb9d30786d6aab37f3c790051fa64cfc79b70
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Presenters
|
2
2
|
|
3
|
-
A simple presenter pattern for ruby. It
|
3
|
+
A simple presenter pattern for ruby. It can work in rails. This is based on [Presenters in Rails](http://nithinbekal.com/posts/rails-presenters/)
|
4
|
+
|
5
|
+
[](https://travis-ci.org/emn178/presenters)
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -18,11 +20,17 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
gem install presenters
|
20
22
|
|
23
|
+
For rails, add this config in `config/application.rb`
|
24
|
+
```ruby
|
25
|
+
config.autoload_paths += %W(#{config.root}/presenters)
|
26
|
+
```
|
27
|
+
And you can put presenters in `app/presenters`
|
28
|
+
|
21
29
|
## Usage
|
22
30
|
|
23
31
|
### Create presenter class
|
24
32
|
Assume you have a class named Post, you can create PostPresenter.
|
25
|
-
```
|
33
|
+
```ruby
|
26
34
|
class PostPresenter < Presenter
|
27
35
|
def title
|
28
36
|
super || 'No Title'
|
@@ -30,15 +38,16 @@ class PostPresenter < Presenter
|
|
30
38
|
end
|
31
39
|
```
|
32
40
|
And you can wrap object like this:
|
33
|
-
```
|
41
|
+
```ruby
|
34
42
|
post = Post.new :title => nil, :content => "My Content"
|
35
43
|
presenter = PostPresenter.new post
|
36
44
|
presenter.title # "No Title"
|
37
45
|
# delegate to Post
|
38
46
|
presenter.content # "My Content"
|
39
47
|
```
|
40
|
-
|
41
|
-
|
48
|
+
### Helpers
|
49
|
+
You can use `present` and `present_each` method to wrap objects. It will find presenter class in the prefix. (eg. Post => PostPresenter)
|
50
|
+
```ruby
|
42
51
|
present(@post) do |post|
|
43
52
|
# do something...
|
44
53
|
end
|
@@ -46,9 +55,9 @@ end
|
|
46
55
|
present_each(@posts) do |post|
|
47
56
|
# do something...
|
48
57
|
end
|
49
|
-
```
|
58
|
+
```
|
50
59
|
You can specify presenter, too.
|
51
|
-
```
|
60
|
+
```ruby
|
52
61
|
present(@post, CustomPresenter) do |post|
|
53
62
|
# do something...
|
54
63
|
end
|
@@ -56,9 +65,40 @@ end
|
|
56
65
|
present_each(@posts, CustomPresenter) do |post|
|
57
66
|
# do something...
|
58
67
|
end
|
59
|
-
```
|
68
|
+
```
|
69
|
+
You can use presenters to convert object array to presenters array
|
70
|
+
```ruby
|
71
|
+
presenters(@posts).each_with_index do |post, index|
|
72
|
+
# do something...
|
73
|
+
end
|
74
|
+
```
|
60
75
|
You can use the helper in the view in rails application.
|
61
76
|
|
77
|
+
### Use Presenters in Presenter
|
78
|
+
If you want to use other presenters in the presenter. You can use following methods:
|
79
|
+
```ruby
|
80
|
+
class UserPresenter < Presenter
|
81
|
+
def name
|
82
|
+
super || "Anonymous"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class PostPresenter < Presenter
|
87
|
+
def poster
|
88
|
+
# You want to use UserPresenter and get its name here.
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# method 1
|
93
|
+
present(user).name
|
94
|
+
|
95
|
+
# method 2
|
96
|
+
UserPresenter.new(user).name
|
97
|
+
|
98
|
+
# method 3, if user is a ActiveRecord::Base
|
99
|
+
user.presenter.name
|
100
|
+
```
|
101
|
+
|
62
102
|
## License
|
63
103
|
|
64
104
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/lib/presenters/helper.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
module Presenters
|
2
2
|
module Helper
|
3
|
-
def present(
|
4
|
-
|
5
|
-
presenter = class_type.new(instance)
|
6
|
-
yield(presenter) if block_given?
|
7
|
-
return presenter
|
3
|
+
def present(*args, &block)
|
4
|
+
Helper.present(*args, &block)
|
8
5
|
end
|
9
6
|
|
10
7
|
def present_each(instances, class_type = nil, &block)
|
@@ -12,5 +9,18 @@ module Presenters
|
|
12
9
|
present(instance, class_type, &block)
|
13
10
|
end
|
14
11
|
end
|
12
|
+
|
13
|
+
def presenters(instances, class_type = nil)
|
14
|
+
instances.map do |instance|
|
15
|
+
present(instance)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.present(instance, class_type = nil, &block)
|
20
|
+
class_type = class_type || Object.const_get("#{instance.class}Presenter")
|
21
|
+
presenter = class_type.new(instance)
|
22
|
+
yield(presenter) if block_given?
|
23
|
+
return presenter
|
24
|
+
end
|
15
25
|
end
|
16
26
|
end
|
data/lib/presenters/presenter.rb
CHANGED
data/lib/presenters/version.rb
CHANGED
data/lib/presenters.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "presenters/version"
|
2
|
-
require "presenters/presenter"
|
3
2
|
require "presenters/helper"
|
3
|
+
require "presenters/model"
|
4
|
+
require "presenters/presenter"
|
4
5
|
|
5
6
|
module Presenters
|
6
7
|
if defined?(::Rails::Engine)
|
@@ -11,6 +12,7 @@ module Presenters
|
|
11
12
|
end
|
12
13
|
Presenter.include ActionView::Helpers
|
13
14
|
Presenter.include Rails.application.routes.url_helpers
|
15
|
+
ActiveRecord::Base.include Presenters::Model
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
data/presenters.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Chen Yi-Cyuan"]
|
10
10
|
spec.email = ["emn178@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{A simple presenter pattern for ruby. It
|
13
|
-
spec.description = %q{A simple presenter pattern for ruby. It
|
12
|
+
spec.summary = %q{A simple presenter pattern for ruby. It can work in rails.}
|
13
|
+
spec.description = %q{A simple presenter pattern for ruby. It can work in rails.}
|
14
14
|
spec.homepage = "https://github.com/emn178/presenters"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: presenters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chen Yi-Cyuan
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
description: A simple presenter pattern for ruby. It
|
69
|
+
description: A simple presenter pattern for ruby. It can work in rails.
|
70
70
|
email:
|
71
71
|
- emn178@gmail.com
|
72
72
|
executables: []
|
@@ -76,12 +76,14 @@ files:
|
|
76
76
|
- ".gitignore"
|
77
77
|
- ".rspec"
|
78
78
|
- ".travis.yml"
|
79
|
+
- CHANGELOG.md
|
79
80
|
- Gemfile
|
80
81
|
- LICENSE.txt
|
81
82
|
- README.md
|
82
83
|
- Rakefile
|
83
84
|
- lib/presenters.rb
|
84
85
|
- lib/presenters/helper.rb
|
86
|
+
- lib/presenters/model.rb
|
85
87
|
- lib/presenters/presenter.rb
|
86
88
|
- lib/presenters/version.rb
|
87
89
|
- presenters.gemspec
|
@@ -108,5 +110,5 @@ rubyforge_project:
|
|
108
110
|
rubygems_version: 2.4.5
|
109
111
|
signing_key:
|
110
112
|
specification_version: 4
|
111
|
-
summary: A simple presenter pattern for ruby. It
|
113
|
+
summary: A simple presenter pattern for ruby. It can work in rails.
|
112
114
|
test_files: []
|