simple_presenter 0.1.3 → 0.2.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.
- data/.gitignore +1 -0
- data/Gemfile.lock +18 -23
- data/README.rdoc +4 -0
- data/lib/simple_presenter/base.rb +12 -1
- data/lib/simple_presenter/namespace.rb +3 -3
- data/lib/simple_presenter/rails.rb +15 -11
- data/lib/simple_presenter/url_methods.rb +9 -0
- data/lib/simple_presenter/version.rb +2 -2
- data/simple_presenter.gemspec +1 -1
- data/spec/base_spec.rb +30 -6
- data/spec/simple_presenter_spec.rb +1 -1
- metadata +28 -26
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,33 +1,28 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simple_presenter (0.1
|
4
|
+
simple_presenter (0.2.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
-
coderay (0.
|
9
|
+
coderay (1.0.8)
|
10
10
|
diff-lcs (1.1.3)
|
11
|
-
method_source (0.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
rspec-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
rspec-
|
25
|
-
|
26
|
-
rspec-mocks (2.8.0)
|
27
|
-
ruby_parser (2.3.1)
|
28
|
-
sexp_processor (~> 3.0)
|
29
|
-
sexp_processor (3.0.10)
|
30
|
-
slop (2.1.0)
|
11
|
+
method_source (0.8.1)
|
12
|
+
pry (0.9.11.1)
|
13
|
+
coderay (~> 1.0.5)
|
14
|
+
method_source (~> 0.8)
|
15
|
+
slop (~> 3.4)
|
16
|
+
rake (10.0.3)
|
17
|
+
rspec (2.12.0)
|
18
|
+
rspec-core (~> 2.12.0)
|
19
|
+
rspec-expectations (~> 2.12.0)
|
20
|
+
rspec-mocks (~> 2.12.0)
|
21
|
+
rspec-core (2.12.2)
|
22
|
+
rspec-expectations (2.12.1)
|
23
|
+
diff-lcs (~> 1.1.3)
|
24
|
+
rspec-mocks (2.12.1)
|
25
|
+
slop (3.4.3)
|
31
26
|
|
32
27
|
PLATFORMS
|
33
28
|
ruby
|
@@ -35,5 +30,5 @@ PLATFORMS
|
|
35
30
|
DEPENDENCIES
|
36
31
|
pry
|
37
32
|
rake
|
38
|
-
rspec
|
33
|
+
rspec
|
39
34
|
simple_presenter!
|
data/README.rdoc
CHANGED
@@ -25,6 +25,10 @@ If you're using Simple Presenter within Rails, presenters also have access to:
|
|
25
25
|
* view helpers: just use the <tt>helpers</tt> or <tt>h</tt> methods
|
26
26
|
* I18n methods: just use the <tt>translate</tt>, <tt>t</tt>, <tt>localize</tt> or <tt>l</tt> methods
|
27
27
|
|
28
|
+
If you want to to use <tt>*_url</tt> route methods, make sure you set the <tt>default_url_options</tt> option. You can use the <tt>config.simple_presenter.default_url_options</tt> method, which defaults to <tt>config.action_mailer.default_url_options</tt>. You can add something like the following to your <tt>config/environments/development.rb</tt>, for instance:
|
29
|
+
|
30
|
+
config.simple_presenter.default_url_options = {:host => "localhost:3000"}
|
31
|
+
|
28
32
|
For additional usage, check the specs.
|
29
33
|
|
30
34
|
== TO-DO
|
@@ -12,9 +12,20 @@ module SimplePresenter
|
|
12
12
|
# expose :title, :with => :post # will expose post.title through CommentPresenter#post_title
|
13
13
|
# end
|
14
14
|
#
|
15
|
+
# Subjects can be accessed by a private name with the same name.
|
16
|
+
# So the above subjects can be accessed internally by the methods +comment+ and +post+.
|
17
|
+
#
|
18
|
+
# If you're not setting any special name, then you can access it using the +subject+ method.
|
19
|
+
#
|
15
20
|
def self.subjects(*names)
|
16
21
|
@subjects ||= [:subject]
|
17
|
-
|
22
|
+
|
23
|
+
unless names.empty?
|
24
|
+
@subjects = names
|
25
|
+
attr_reader *names
|
26
|
+
private *names
|
27
|
+
end
|
28
|
+
|
18
29
|
@subjects
|
19
30
|
end
|
20
31
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module SimplePresenter
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
require "simple_presenter/base"
|
3
|
+
require "simple_presenter/version"
|
4
|
+
require "simple_presenter/url_methods"
|
5
5
|
require "simple_presenter/rails" if defined?(Rails)
|
6
6
|
end
|
@@ -1,28 +1,32 @@
|
|
1
1
|
module SimplePresenter
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
config.simple_presenter = ActiveSupport::OrderedOptions.new
|
4
|
+
end
|
5
|
+
|
2
6
|
class Base
|
7
|
+
delegate :translate, :t, :localize, :l, :to => :helpers
|
8
|
+
private :translate, :t, :localize, :l
|
9
|
+
|
3
10
|
private
|
4
|
-
def
|
5
|
-
|
11
|
+
def self.routes_module
|
12
|
+
@routes_module ||= Module.new do
|
13
|
+
include Rails.application.routes.url_helpers
|
14
|
+
include UrlMethods
|
15
|
+
end
|
6
16
|
end
|
7
17
|
|
8
|
-
|
9
|
-
|
10
|
-
def localize(*args, &block)
|
11
|
-
I18n.l(*args, &block)
|
18
|
+
def self.routes
|
19
|
+
@routes ||= Object.new.extend(routes_module)
|
12
20
|
end
|
13
21
|
|
14
|
-
alias_method :l, :localize
|
15
|
-
|
16
22
|
def routes
|
17
|
-
|
23
|
+
self.class.routes
|
18
24
|
end
|
19
|
-
|
20
25
|
alias_method :r, :routes
|
21
26
|
|
22
27
|
def helpers
|
23
28
|
ApplicationController.helpers
|
24
29
|
end
|
25
|
-
|
26
30
|
alias_method :h, :helpers
|
27
31
|
end
|
28
32
|
end
|
data/simple_presenter.gemspec
CHANGED
data/spec/base_spec.rb
CHANGED
@@ -25,7 +25,7 @@ describe SimplePresenter::Base do
|
|
25
25
|
it "uses provided block" do
|
26
26
|
numbers = []
|
27
27
|
subject.each {|n| numbers << n}
|
28
|
-
numbers.
|
28
|
+
expect(numbers).to eql([1, 2, 3])
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -57,7 +57,7 @@ describe SimplePresenter::Base do
|
|
57
57
|
presenter_class.subject :thing
|
58
58
|
presenter = presenter_class.new(thing)
|
59
59
|
|
60
|
-
presenter.instance_variable_get("@thing").
|
60
|
+
expect(presenter.instance_variable_get("@thing")).to eql(thing)
|
61
61
|
end
|
62
62
|
|
63
63
|
context "using defaults" do
|
@@ -66,6 +66,14 @@ describe SimplePresenter::Base do
|
|
66
66
|
|
67
67
|
its(:name) { should == "John Doe" }
|
68
68
|
its(:email) { should == "john@doe.com" }
|
69
|
+
|
70
|
+
it "responds to private subject method" do
|
71
|
+
expect(subject.private_methods).to include(:subject)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "returns subject" do
|
75
|
+
expect(subject.send(:subject)).to eql(user)
|
76
|
+
end
|
69
77
|
end
|
70
78
|
|
71
79
|
context "specifying several subjects" do
|
@@ -77,6 +85,22 @@ describe SimplePresenter::Base do
|
|
77
85
|
its(:body) { should == "Some comment" }
|
78
86
|
its(:post_title) { should == "Some post" }
|
79
87
|
its(:user_name) { should == "John Doe" }
|
88
|
+
|
89
|
+
it "responds to private comment method" do
|
90
|
+
expect(subject.private_methods).to include(:comment)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "responds to private post method" do
|
94
|
+
expect(subject.private_methods).to include(:post)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "returns comment subject" do
|
98
|
+
expect(subject.send(:comment)).to eql(comment)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "returns post subject" do
|
102
|
+
expect(subject.send(:post)).to eql(post)
|
103
|
+
end
|
80
104
|
end
|
81
105
|
|
82
106
|
context "when subjects are nil" do
|
@@ -113,7 +137,7 @@ describe SimplePresenter::Base do
|
|
113
137
|
subject { UserPresenter.new(user) }
|
114
138
|
|
115
139
|
it "assigns the subject" do
|
116
|
-
subject.instance_variable_get("@subject").
|
140
|
+
expect(subject.instance_variable_get("@subject")).to eql(user)
|
117
141
|
end
|
118
142
|
end
|
119
143
|
|
@@ -123,9 +147,9 @@ describe SimplePresenter::Base do
|
|
123
147
|
context "subjects" do
|
124
148
|
subject { presenter.subjects }
|
125
149
|
|
126
|
-
specify { subject.
|
127
|
-
specify { subject.first.
|
128
|
-
specify { subject.last.
|
150
|
+
specify { expect(subject).to have(2).items }
|
151
|
+
specify { expect(subject.first).to eql(:comment) }
|
152
|
+
specify { expect(subject.last).to eql(:post) }
|
129
153
|
end
|
130
154
|
|
131
155
|
context "attributes" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_presenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,21 +21,31 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rspec
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
|
-
- -
|
35
|
+
- - ! '>='
|
31
36
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
37
|
+
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: pry
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,7 +53,12 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
description: A simple presenter/facade/decorator/whatever implementation.
|
48
63
|
email:
|
49
64
|
- fnando.vieira@gmail.com
|
@@ -61,6 +76,7 @@ files:
|
|
61
76
|
- lib/simple_presenter/base.rb
|
62
77
|
- lib/simple_presenter/namespace.rb
|
63
78
|
- lib/simple_presenter/rails.rb
|
79
|
+
- lib/simple_presenter/url_methods.rb
|
64
80
|
- lib/simple_presenter/version.rb
|
65
81
|
- simple_presenter.gemspec
|
66
82
|
- spec/base_spec.rb
|
@@ -83,30 +99,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
99
|
- - ! '>='
|
84
100
|
- !ruby/object:Gem::Version
|
85
101
|
version: '0'
|
86
|
-
segments:
|
87
|
-
- 0
|
88
|
-
hash: 3392146763706068876
|
89
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
103
|
none: false
|
91
104
|
requirements:
|
92
105
|
- - ! '>='
|
93
106
|
- !ruby/object:Gem::Version
|
94
107
|
version: '0'
|
95
|
-
segments:
|
96
|
-
- 0
|
97
|
-
hash: 3392146763706068876
|
98
108
|
requirements: []
|
99
109
|
rubyforge_project:
|
100
|
-
rubygems_version: 1.8.
|
110
|
+
rubygems_version: 1.8.24
|
101
111
|
signing_key:
|
102
112
|
specification_version: 3
|
103
113
|
summary: A simple presenter/facade/decorator/whatever implementation.
|
104
|
-
test_files:
|
105
|
-
- spec/base_spec.rb
|
106
|
-
- spec/simple_presenter_spec.rb
|
107
|
-
- spec/spec_helper.rb
|
108
|
-
- spec/support/comment.rb
|
109
|
-
- spec/support/comment_presenter.rb
|
110
|
-
- spec/support/iterator_presenter.rb
|
111
|
-
- spec/support/user.rb
|
112
|
-
- spec/support/user_presenter.rb
|
114
|
+
test_files: []
|