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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69f95c182bc6eda82898058fb35217c4d43048ab
4
- data.tar.gz: 23d801295ba2931095867ff4c14c96344f9143ac
3
+ metadata.gz: 5af20d803cdbb814f9343d13d776dd2c74d93d35
4
+ data.tar.gz: ef9146bc38045e313bd7ff49c6952e45b8fdae36
5
5
  SHA512:
6
- metadata.gz: 99fccf469f532451a20525623a4b632a1cbb5c53c025782fc0390f0e61b3309109b32edbc5b21ea686f076118506d7e726448c5833bac6f2d14ddf9af699f9a4
7
- data.tar.gz: 3c2d2291cff69d3c2a69c6bdbab71636cdf17764c36475741c6d08d2e173083a07ec606c0650e40c22c69be5dcde833ab24e8fde80659ad9a2dd559a1b2b669e
6
+ metadata.gz: 949dbc93d43843feb426e732b43b94d6d9106e0c1c83ace79e30cd6fb0c6563628e6a5acd1c1091f9d3ffb73a78ff122ff3000ca454a1050fee6c84f3d7df6bd
7
+ data.tar.gz: 4b87da8367009c19eee08c47a4c37d0020b1f3556e4434c5a5849ab8db7a42f64801956885d6e9409e712c329b1eb9d30786d6aab37f3c790051fa64cfc79b70
data/.travis.yml CHANGED
@@ -2,3 +2,6 @@ language: ruby
2
2
  rvm:
3
3
  - 2.2.2
4
4
  before_install: gem install bundler
5
+ branches:
6
+ only:
7
+ - master
data/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # v0.2.0 / 2015-08-23
2
+
3
+ * Include helpers in Presenter.
4
+ * Add presenter method to ActiveRecord:Base.
5
+ * Add presenters method.
6
+
7
+ # v0.1.0 / 2015-08-23
8
+
9
+ Create project
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Presenters
2
2
 
3
- A simple presenter pattern for ruby. It also can work in rails. This is based on [Presenters in Rails](http://nithinbekal.com/posts/rails-presenters/)
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
+ [![Build Status](https://api.travis-ci.org/emn178/presenters.png)](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
- ```Ruby
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
- ```Ruby
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
- You can use `present` and `present_each` method to wrap objects. It will find presenter class in the same name. (Eq: Post => PostPresenter)
41
- ```Ruby
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
- ```Ruby
58
+ ```
50
59
  You can specify presenter, too.
51
- ```Ruby
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
- ```Ruby
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).
@@ -1,10 +1,7 @@
1
1
  module Presenters
2
2
  module Helper
3
- def present(instance, class_type = nil, &block)
4
- class_type = class_type || Object.const_get("#{instance.class}Presenter")
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
@@ -0,0 +1,8 @@
1
+ module Presenters
2
+ module Model
3
+ def presenter
4
+ @presenter = Helper.present(self) if @presenter.nil?
5
+ @presenter
6
+ end
7
+ end
8
+ end
@@ -1,4 +1,5 @@
1
1
  module Presenters
2
2
  class Presenter < SimpleDelegator
3
+ include Helper
3
4
  end
4
5
  end
@@ -1,3 +1,3 @@
1
1
  module Presenters
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
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 also can work in rails.}
13
- spec.description = %q{A simple presenter pattern for ruby. It also can work in rails.}
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.1.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 also can work in rails.
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 also can work in rails.
113
+ summary: A simple presenter pattern for ruby. It can work in rails.
112
114
  test_files: []