presenters 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: []