bourgeois 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +40 -7
- data/bourgeois.gemspec +1 -0
- data/lib/bourgeois/presenter.rb +28 -0
- data/lib/bourgeois/version.rb +1 -1
- data/spec/bourgeois/presenter_spec.rb +126 -0
- data/spec/spec_helper.rb +3 -0
- metadata +27 -31
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c11f36f9736527cc188110608030455134cddba8
|
4
|
+
data.tar.gz: 4c7538b7646ba25cb9bd2507471f3a7c245e25a1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0a5733b31c578036c402e2faf15f80c1c8d3e25e3c97d1974cddd525e86024f0e39b32fd05f779113973b0b235a83e7be38ab38d4a3431c9ca65b0dcab07d7c9
|
7
|
+
data.tar.gz: 47ccaa03c683e442c3c43e23ae0d7bf8aa2024d67db9cdc016fca205e41fa1707cbf0c5a50731cb7190f9b49fa6d83e27d6719df0edf7bc72fc3c7f1aad68827
|
data/README.md
CHANGED
@@ -1,10 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
<p align="center">
|
2
|
+
<a href="https://github.com/mirego/bourgeois">
|
3
|
+
<img src="http://i.imgur.com/Z8ja8Wz.png" alt="Bourgeois" />
|
4
|
+
</a>
|
5
|
+
<br />
|
6
|
+
Bourgeois is a Ruby library that makes using presenters a very simple thing.
|
7
|
+
<br /><br />
|
8
|
+
<a href="https://rubygems.org/gems/bourgeois"><img src="https://badge.fury.io/rb/bourgeois.png" /></a>
|
9
|
+
<a href="https://codeclimate.com/github/mirego/bourgeois"><img src="https://codeclimate.com/github/mirego/bourgeois.png" /></a>
|
10
|
+
<a href='https://coveralls.io/r/mirego/bourgeois?branch=master'><img src='https://coveralls.io/repos/mirego/bourgeois/badge.png?branch=master' /></a>
|
11
|
+
<a href='https://gemnasium.com/mirego/bourgeois'><img src="https://gemnasium.com/mirego/bourgeois.png" /></a>
|
12
|
+
<a href="https://travis-ci.org/mirego/bourgeois"><img src="https://travis-ci.org/mirego/bourgeois.png?branch=master" /></a>
|
13
|
+
</p>
|
14
|
+
|
15
|
+
---
|
8
16
|
|
9
17
|
## Installation
|
10
18
|
|
@@ -55,6 +63,31 @@ class UserPresenter < Bourgeois::Presenter
|
|
55
63
|
end
|
56
64
|
```
|
57
65
|
|
66
|
+
### Custom block helpers
|
67
|
+
|
68
|
+
You can use the simple `helper` DSL to define block helpers that will be executed if certain
|
69
|
+
conditions are matched.
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
class UserPresenter < Bourgeois::Presenter
|
73
|
+
helper :with_profile, if: -> { profile.present? && profile.public? }
|
74
|
+
end
|
75
|
+
|
76
|
+
User.first.new = Profile.create(public: true, title: 'Foo', description: 'Bar')
|
77
|
+
```
|
78
|
+
|
79
|
+
```erb
|
80
|
+
<% present User.first do |user| %>
|
81
|
+
<h1><%= user.full_name %></h1>
|
82
|
+
<% user.with_profile do %>
|
83
|
+
<div class="profile">
|
84
|
+
<h2><%= user.profile.title %></h2>
|
85
|
+
<%= simple_format(user.profile.description) %>
|
86
|
+
</div>
|
87
|
+
<% end %>
|
88
|
+
<% end %>
|
89
|
+
```
|
90
|
+
|
58
91
|
## Inspiration
|
59
92
|
|
60
93
|
Bourgeois was inspired by some code [@rafBM](https://twitter.com/rafBM) wrote for [his OpenCode talk](https://github.com/rafBM/opencode12-rails) on May 28th, 2013.
|
data/bourgeois.gemspec
CHANGED
data/lib/bourgeois/presenter.rb
CHANGED
@@ -26,6 +26,34 @@ module Bourgeois
|
|
26
26
|
klass.human_attribute_name(*args)
|
27
27
|
end
|
28
28
|
|
29
|
+
# Declare a new block helper method
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# class UserPresenter < Bourgeois::Presenter
|
33
|
+
# helper :with_profile, if: -> { profile.present? }
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# presenter = UserPresenter.new(User.new(profile: 'Foo'))
|
37
|
+
# presenter.with_profile do
|
38
|
+
# puts 'User has a profile:'
|
39
|
+
# puts presenter.profile
|
40
|
+
# end
|
41
|
+
def self.helper(name, opts = {})
|
42
|
+
define_method(name) do |&block|
|
43
|
+
execute = true
|
44
|
+
|
45
|
+
if opts[:if]
|
46
|
+
execute = execute && self.instance_exec(&opts[:if])
|
47
|
+
end
|
48
|
+
|
49
|
+
if opts[:unless]
|
50
|
+
execute = execute && !self.instance_exec(&opts[:unless])
|
51
|
+
end
|
52
|
+
|
53
|
+
block.call if execute
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
29
57
|
private
|
30
58
|
|
31
59
|
# Return the view from where the presenter was created
|
data/lib/bourgeois/version.rb
CHANGED
@@ -101,6 +101,132 @@ describe Bourgeois::Presenter do
|
|
101
101
|
end
|
102
102
|
|
103
103
|
describe :ClassMethods do
|
104
|
+
describe :helper do
|
105
|
+
before do
|
106
|
+
class UserPresenter < Bourgeois::Presenter
|
107
|
+
# We need a method to test that our block is executed
|
108
|
+
attr_reader :foo
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
let(:call_it!) do
|
113
|
+
presenter.send(helper) do
|
114
|
+
presenter.foo
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'with helper using only a if condition' do
|
119
|
+
before do
|
120
|
+
class UserPresenter
|
121
|
+
helper :with_profile, if: -> { profile.present? }
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'with matching if condition' do
|
126
|
+
let(:user) { User.new profile: 'Je suis Patrick.' }
|
127
|
+
let(:helper) { :with_profile }
|
128
|
+
|
129
|
+
specify do
|
130
|
+
presenter.should_receive(:foo).once
|
131
|
+
call_it!
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'with non-matching if condition' do
|
136
|
+
let(:user) { User.new profile: nil }
|
137
|
+
let(:helper) { :with_profile }
|
138
|
+
|
139
|
+
specify do
|
140
|
+
presenter.should_receive(:foo).never
|
141
|
+
call_it!
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'with helper using only an unless condition' do
|
147
|
+
let(:helper) { :without_name }
|
148
|
+
before do
|
149
|
+
class UserPresenter
|
150
|
+
helper :without_name, unless: -> { full_name.present? }
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context 'with matching unless condition' do
|
155
|
+
let(:user) { User.new full_name: nil }
|
156
|
+
|
157
|
+
specify do
|
158
|
+
presenter.should_receive(:foo).once
|
159
|
+
call_it!
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
context 'with non-matching unless condition' do
|
164
|
+
let(:user) { User.new full_name: 'Patrick Bourgeois' }
|
165
|
+
|
166
|
+
specify do
|
167
|
+
presenter.should_receive(:foo).never
|
168
|
+
call_it!
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
context 'with helper without if nor unless' do
|
174
|
+
let(:user) { User.new }
|
175
|
+
let(:helper) { :with_something }
|
176
|
+
before do
|
177
|
+
class UserPresenter
|
178
|
+
helper :with_something
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
specify do
|
183
|
+
presenter.should_receive(:foo).once
|
184
|
+
call_it!
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
context 'with helper using both matching and unless conditions' do
|
189
|
+
let(:helper) { :sometimes }
|
190
|
+
before do
|
191
|
+
class UserPresenter
|
192
|
+
helper :sometimes, if: -> { profile.present? }, unless: -> { full_name.present? }
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
context 'with matching if and non-matching unless condition' do
|
197
|
+
let(:user) { User.new(profile: true, full_name: 'Patrick Bourgeois') }
|
198
|
+
specify do
|
199
|
+
presenter.should_receive(:foo).never
|
200
|
+
call_it!
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
context 'with non-matching if and non-matching unless condition' do
|
205
|
+
let(:user) { User.new(profile: false, full_name: 'Patrick Bourgeois') }
|
206
|
+
specify do
|
207
|
+
presenter.should_receive(:foo).never
|
208
|
+
call_it!
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
context 'with matching if and matching unless condition' do
|
213
|
+
let(:user) { User.new(profile: true, full_name: nil) }
|
214
|
+
specify do
|
215
|
+
presenter.should_receive(:foo).once
|
216
|
+
call_it!
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
context 'with non-matching if and matching unless condition' do
|
221
|
+
let(:user) { User.new(profile: false, full_name: 'Patrick Bourgeois') }
|
222
|
+
specify do
|
223
|
+
presenter.should_receive(:foo).never
|
224
|
+
call_it!
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
104
230
|
describe :kind_of? do
|
105
231
|
before do
|
106
232
|
class UserPresenter < Bourgeois::Presenter; end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,52 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bourgeois
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Rémi Prévost
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activemodel
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.0.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.0.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: actionpack
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 3.0.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 3.0.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: bundler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,17 +69,29 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: rake
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: coveralls
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
92
95
|
- !ruby/object:Gem::Version
|
93
96
|
version: '0'
|
94
97
|
description: Bourgeois is a Ruby library that makes using presenters a very simple
|
@@ -121,33 +124,26 @@ files:
|
|
121
124
|
homepage: https://github.com/mirego/bourgeois
|
122
125
|
licenses:
|
123
126
|
- BSD 3-Clause
|
127
|
+
metadata: {}
|
124
128
|
post_install_message:
|
125
129
|
rdoc_options: []
|
126
130
|
require_paths:
|
127
131
|
- lib
|
128
132
|
required_ruby_version: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
133
|
requirements:
|
131
|
-
- -
|
134
|
+
- - '>='
|
132
135
|
- !ruby/object:Gem::Version
|
133
136
|
version: '0'
|
134
|
-
segments:
|
135
|
-
- 0
|
136
|
-
hash: 1321347131962644702
|
137
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
138
|
requirements:
|
140
|
-
- -
|
139
|
+
- - '>='
|
141
140
|
- !ruby/object:Gem::Version
|
142
141
|
version: '0'
|
143
|
-
segments:
|
144
|
-
- 0
|
145
|
-
hash: 1321347131962644702
|
146
142
|
requirements: []
|
147
143
|
rubyforge_project:
|
148
|
-
rubygems_version: 1.
|
144
|
+
rubygems_version: 2.1.0
|
149
145
|
signing_key:
|
150
|
-
specification_version:
|
146
|
+
specification_version: 4
|
151
147
|
summary: Bourgeois is a Ruby library that makes using presenters a very simple thing.
|
152
148
|
test_files:
|
153
149
|
- spec/bourgeois/presenter_spec.rb
|