simple_presenter 0.1.2 → 0.1.3
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/Gemfile.lock +9 -9
- data/lib/simple_presenter/base.rb +29 -2
- data/lib/simple_presenter/version.rb +1 -1
- data/spec/base_spec.rb +40 -0
- metadata +10 -10
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
simple_presenter (0.1.
|
4
|
+
simple_presenter (0.1.3)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
@@ -16,17 +16,17 @@ GEM
|
|
16
16
|
ruby_parser (>= 2.3.1)
|
17
17
|
slop (~> 2.1.0)
|
18
18
|
rake (0.9.2.2)
|
19
|
-
rspec (2.
|
20
|
-
rspec-core (~> 2.
|
21
|
-
rspec-expectations (~> 2.
|
22
|
-
rspec-mocks (~> 2.
|
23
|
-
rspec-core (2.
|
24
|
-
rspec-expectations (2.
|
19
|
+
rspec (2.8.0)
|
20
|
+
rspec-core (~> 2.8.0)
|
21
|
+
rspec-expectations (~> 2.8.0)
|
22
|
+
rspec-mocks (~> 2.8.0)
|
23
|
+
rspec-core (2.8.0)
|
24
|
+
rspec-expectations (2.8.0)
|
25
25
|
diff-lcs (~> 1.1.2)
|
26
|
-
rspec-mocks (2.
|
26
|
+
rspec-mocks (2.8.0)
|
27
27
|
ruby_parser (2.3.1)
|
28
28
|
sexp_processor (~> 3.0)
|
29
|
-
sexp_processor (3.0.
|
29
|
+
sexp_processor (3.0.10)
|
30
30
|
slop (2.1.0)
|
31
31
|
|
32
32
|
PLATFORMS
|
@@ -8,8 +8,8 @@ module SimplePresenter
|
|
8
8
|
#
|
9
9
|
# class CommentPresenter < Presenter
|
10
10
|
# subjects :comment, :post
|
11
|
-
# expose :body # will expose comment.body
|
12
|
-
# expose :title, :with => :post # will expose post.title
|
11
|
+
# expose :body # will expose comment.body through CommentPresenter#body
|
12
|
+
# expose :title, :with => :post # will expose post.title through CommentPresenter#post_title
|
13
13
|
# end
|
14
14
|
#
|
15
15
|
def self.subjects(*names)
|
@@ -22,6 +22,32 @@ module SimplePresenter
|
|
22
22
|
alias_method :subject, :subjects
|
23
23
|
end
|
24
24
|
|
25
|
+
# Propagate inherited subjects and attributes.
|
26
|
+
#
|
27
|
+
def self.inherited(child)
|
28
|
+
child.subjects(*subjects)
|
29
|
+
attributes.each_value do |attr_name, options|
|
30
|
+
child.expose(attr_name, options)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Store all attributes and options that have been exposed.
|
35
|
+
#
|
36
|
+
# class UserPresenter < Presenter
|
37
|
+
# expose :name
|
38
|
+
# expose :street, with: "address"
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# UserPresenter.attributes
|
42
|
+
# #=> {
|
43
|
+
# #=> name: [:name, {}],
|
44
|
+
# #=> address_street: [:street, {with: "address"}]
|
45
|
+
# #=> }
|
46
|
+
#
|
47
|
+
def self.attributes
|
48
|
+
@attributes ||= {}
|
49
|
+
end
|
50
|
+
|
25
51
|
# This method will return a presenter for each item of collection.
|
26
52
|
#
|
27
53
|
# users = UserPresenter.map(User.all)
|
@@ -57,6 +83,7 @@ module SimplePresenter
|
|
57
83
|
attrs.each do |attr_name|
|
58
84
|
subject = options.fetch(:with, nil)
|
59
85
|
method_name = [subject, attr_name].compact.join("_")
|
86
|
+
attributes[method_name.to_sym] = [attr_name, options]
|
60
87
|
|
61
88
|
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
62
89
|
def #{method_name}(&block) # def user_name(&block)
|
data/spec/base_spec.rb
CHANGED
@@ -30,6 +30,26 @@ describe SimplePresenter::Base do
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
describe ".attributes" do
|
34
|
+
context "using defaults" do
|
35
|
+
let(:presenter) { UserPresenter }
|
36
|
+
subject { presenter.attributes }
|
37
|
+
|
38
|
+
it { should have(2).items }
|
39
|
+
its([:name]) { should eql([:name, {}]) }
|
40
|
+
its([:email]) { should eql([:email, {}]) }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "using provided options" do
|
44
|
+
let(:presenter) { CommentPresenter }
|
45
|
+
subject { presenter.attributes }
|
46
|
+
|
47
|
+
it { should have(3).items }
|
48
|
+
its([:user_name]) { should eql([:name, {with: :user}]) }
|
49
|
+
its([:post_title]) { should eql([:title, {with: :post}]) }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
33
53
|
describe ".subjects" do
|
34
54
|
it "is aliased as .subject" do
|
35
55
|
thing = mock("Thing")
|
@@ -96,4 +116,24 @@ describe SimplePresenter::Base do
|
|
96
116
|
subject.instance_variable_get("@subject").should == user
|
97
117
|
end
|
98
118
|
end
|
119
|
+
|
120
|
+
describe "inherited presenter" do
|
121
|
+
let(:presenter) { Class.new(CommentPresenter) }
|
122
|
+
|
123
|
+
context "subjects" do
|
124
|
+
subject { presenter.subjects }
|
125
|
+
|
126
|
+
specify { subject.should have(2).items }
|
127
|
+
specify { subject.first.should eql(:comment) }
|
128
|
+
specify { subject.last.should eql(:post) }
|
129
|
+
end
|
130
|
+
|
131
|
+
context "attributes" do
|
132
|
+
subject { presenter.attributes }
|
133
|
+
|
134
|
+
it { should have(3).items }
|
135
|
+
its([:user_name]) { should eql([:name, {with: :user}]) }
|
136
|
+
its([:post_title]) { should eql([:title, {with: :post}]) }
|
137
|
+
end
|
138
|
+
end
|
99
139
|
end
|
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.1.3
|
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: 2012-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70320251210820 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70320251210820
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70320251209440 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '2.7'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70320251209440
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: pry
|
38
|
-
requirement: &
|
38
|
+
requirement: &70320251208760 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70320251208760
|
47
47
|
description: A simple presenter/facade/decorator/whatever implementation.
|
48
48
|
email:
|
49
49
|
- fnando.vieira@gmail.com
|
@@ -85,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
85
|
version: '0'
|
86
86
|
segments:
|
87
87
|
- 0
|
88
|
-
hash:
|
88
|
+
hash: 3392146763706068876
|
89
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
90
|
none: false
|
91
91
|
requirements:
|
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
94
94
|
version: '0'
|
95
95
|
segments:
|
96
96
|
- 0
|
97
|
-
hash:
|
97
|
+
hash: 3392146763706068876
|
98
98
|
requirements: []
|
99
99
|
rubyforge_project:
|
100
100
|
rubygems_version: 1.8.11
|