resubject 0.1.0 → 0.1.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/CHANGELOG.md +7 -0
- data/README.md +2 -2
- data/lib/resubject.rb +2 -0
- data/lib/resubject/builder.rb +7 -0
- data/lib/resubject/presenter.rb +6 -0
- data/lib/resubject/version.rb +1 -1
- data/spec/resubject/builder_spec.rb +5 -0
- data/spec/resubject/presenter_spec.rb +6 -0
- metadata +26 -32
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -10,7 +10,7 @@ Uber simple presenters using Ruby's SimpleDelegator.
|
|
10
10
|
Add this line to your application's Gemfile:
|
11
11
|
|
12
12
|
```ruby
|
13
|
-
gem 'resubject', '~> 0.1.
|
13
|
+
gem 'resubject', '~> 0.1.1'
|
14
14
|
```
|
15
15
|
|
16
16
|
And then execute:
|
@@ -113,7 +113,7 @@ class BoxesController < ActionController::Base
|
|
113
113
|
end
|
114
114
|
```
|
115
115
|
|
116
|
-
The `#present`
|
116
|
+
The `#present` method will automatically identify the presenter class by the object's class name. If you want to customize the class:
|
117
117
|
|
118
118
|
```ruby
|
119
119
|
def index
|
data/lib/resubject.rb
CHANGED
data/lib/resubject/builder.rb
CHANGED
@@ -56,9 +56,16 @@ module Resubject
|
|
56
56
|
# Builder.present_one box, context, CustomPresenter # => <CustomPresenter>
|
57
57
|
# Builder.present_one box, context, OnePresenter, TwoPresenter # => <TwoPresenter<OnePresenter>>
|
58
58
|
#
|
59
|
+
# @example Skips nil classes
|
60
|
+
#
|
61
|
+
# Builder.present_one nil
|
62
|
+
# # => nil
|
63
|
+
#
|
59
64
|
# @see .present
|
60
65
|
#
|
61
66
|
def self.present_one(object, template, *presenters)
|
67
|
+
return unless object
|
68
|
+
|
62
69
|
presenters = [Naming.presenter_for(object)] unless presenters.any?
|
63
70
|
|
64
71
|
unless presenters.all? { |p| p.is_a?(Class) && p.ancestors.include?(Resubject::Presenter) }
|
data/lib/resubject/presenter.rb
CHANGED
@@ -70,6 +70,12 @@ module Resubject
|
|
70
70
|
#
|
71
71
|
# BoxPresenter.new(box).name # => <NamePresenter>
|
72
72
|
#
|
73
|
+
# @example When the parent method is nil, it returns nil
|
74
|
+
#
|
75
|
+
# box = BoxPresenter.new Box.new(name: nil)
|
76
|
+
# box.name
|
77
|
+
# # => nil
|
78
|
+
#
|
73
79
|
def self.presents(attribute, *presenters)
|
74
80
|
define_method attribute do
|
75
81
|
present to_model.send(attribute), *presenters
|
data/lib/resubject/version.rb
CHANGED
@@ -10,6 +10,11 @@ describe Resubject::Builder do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
describe '.present_one' do
|
13
|
+
it 'does not attempt to present nil' do
|
14
|
+
presented = Resubject::Builder.present_one nil, template
|
15
|
+
expect(presented).to be_nil
|
16
|
+
end
|
17
|
+
|
13
18
|
it 'presents the object with related class' do
|
14
19
|
presented = Resubject::Builder.present_one Box.new, template
|
15
20
|
expect(presented).to be_a BoxPresenter
|
@@ -54,6 +54,12 @@ describe Resubject::Presenter do
|
|
54
54
|
expect(presenter.new(box).item).to be_a ItemPresenter
|
55
55
|
end
|
56
56
|
|
57
|
+
it 'does not attempt to find a class from nil' do
|
58
|
+
box = stub :box, :item => nil
|
59
|
+
|
60
|
+
expect(presenter.new(box).item).to be_nil
|
61
|
+
end
|
62
|
+
|
57
63
|
it 'presents the attributes with custom presenter' do
|
58
64
|
box = stub :box, :other_item => stub
|
59
65
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resubject
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,72 +10,72 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-01-
|
13
|
+
date: 2013-01-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
type: :runtime
|
17
|
-
version_requirements: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
|
-
requirements:
|
20
|
-
- - ~>
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: '3.2'
|
23
16
|
name: activesupport
|
24
17
|
prerelease: false
|
25
18
|
requirement: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
19
|
requirements:
|
28
20
|
- - ~>
|
29
21
|
- !ruby/object:Gem::Version
|
30
22
|
version: '3.2'
|
31
|
-
- !ruby/object:Gem::Dependency
|
32
|
-
type: :development
|
33
|
-
version_requirements: !ruby/object:Gem::Requirement
|
34
23
|
none: false
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
35
26
|
requirements:
|
36
|
-
- -
|
27
|
+
- - ~>
|
37
28
|
- !ruby/object:Gem::Version
|
38
|
-
version: '
|
29
|
+
version: '3.2'
|
30
|
+
none: false
|
31
|
+
- !ruby/object:Gem::Dependency
|
39
32
|
name: rake
|
40
33
|
prerelease: false
|
41
34
|
requirement: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
35
|
requirements:
|
44
36
|
- - ! '>='
|
45
37
|
- !ruby/object:Gem::Version
|
46
38
|
version: '0'
|
47
|
-
|
39
|
+
none: false
|
48
40
|
type: :development
|
49
41
|
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
42
|
requirements:
|
52
|
-
- -
|
43
|
+
- - ! '>='
|
53
44
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
45
|
+
version: '0'
|
46
|
+
none: false
|
47
|
+
- !ruby/object:Gem::Dependency
|
55
48
|
name: rspec
|
56
49
|
prerelease: false
|
57
50
|
requirement: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
51
|
requirements:
|
60
52
|
- - ~>
|
61
53
|
- !ruby/object:Gem::Version
|
62
54
|
version: 2.12.0
|
63
|
-
|
55
|
+
none: false
|
64
56
|
type: :development
|
65
57
|
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
58
|
requirements:
|
68
59
|
- - ~>
|
69
60
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
61
|
+
version: 2.12.0
|
62
|
+
none: false
|
63
|
+
- !ruby/object:Gem::Dependency
|
71
64
|
name: yard
|
72
65
|
prerelease: false
|
73
66
|
requirement: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.8.3
|
74
71
|
none: false
|
72
|
+
type: :development
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
74
|
requirements:
|
76
75
|
- - ~>
|
77
76
|
- !ruby/object:Gem::Version
|
78
77
|
version: 0.8.3
|
78
|
+
none: false
|
79
79
|
description: Uber simple presenters
|
80
80
|
email:
|
81
81
|
- felipe@applicake.com
|
@@ -117,23 +117,17 @@ rdoc_options: []
|
|
117
117
|
require_paths:
|
118
118
|
- lib
|
119
119
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
-
none: false
|
121
120
|
requirements:
|
122
121
|
- - ! '>='
|
123
122
|
- !ruby/object:Gem::Version
|
124
|
-
segments:
|
125
|
-
- 0
|
126
123
|
version: '0'
|
127
|
-
hash: 1859410703920262887
|
128
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
124
|
none: false
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
126
|
requirements:
|
131
127
|
- - ! '>='
|
132
128
|
- !ruby/object:Gem::Version
|
133
|
-
segments:
|
134
|
-
- 0
|
135
129
|
version: '0'
|
136
|
-
|
130
|
+
none: false
|
137
131
|
requirements: []
|
138
132
|
rubyforge_project:
|
139
133
|
rubygems_version: 1.8.24
|