bourgeois 0.1 → 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/.rspec +1 -0
- data/.travis.yml +7 -0
- data/Gemfile +0 -2
- data/README.md +6 -2
- data/Rakefile +8 -0
- data/bourgeois.gemspec +4 -3
- data/lib/bourgeois/presenter.rb +9 -1
- data/lib/bourgeois/version.rb +1 -1
- data/lib/bourgeois.rb +3 -0
- data/spec/bourgeois/presenter_spec.rb +111 -0
- data/spec/spec_helper.rb +8 -0
- metadata +47 -25
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Bourgeois
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/bourgeois)
|
4
|
+
[](https://travis-ci.org/mirego/bourgeois)
|
5
|
+
|
3
6
|
Bourgeois is a Ruby library that makes using presenters a very simple thing.
|
4
7
|
|
5
8
|
## Installation
|
@@ -50,5 +53,6 @@ Bourgeois was inspired by some code [@rafBM](https://twitter.com/rafBM) wrote fo
|
|
50
53
|
|
51
54
|
## About Mirego
|
52
55
|
|
53
|
-
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun.
|
54
|
-
|
56
|
+
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We proudly build mobile applications for [iPhone](http://mirego.com/en/iphone-app-development/ "iPhone application development"), [iPad](http://mirego.com/en/ipad-app-development/ "iPad application development"), [Android](http://mirego.com/en/android-app-development/ "Android application development"), [Blackberry](http://mirego.com/en/blackberry-app-development/ "Blackberry application development"), [Windows Phone](http://mirego.com/en/windows-phone-app-development/ "Windows Phone application development") and [Windows 8](http://mirego.com/en/windows-8-app-development/ "Windows 8 application development") in beautiful Quebec City.
|
57
|
+
|
58
|
+
We also love [open-source software](http://open.mirego.com/) and we try to extract as much code as possible from our projects to give back to the community.
|
data/Rakefile
CHANGED
data/bourgeois.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency 'bundler', '~> 1.3'
|
22
|
-
spec.add_development_dependency 'rake'
|
23
|
-
|
24
21
|
spec.add_dependency 'activemodel', '>= 3.0.0'
|
25
22
|
spec.add_dependency 'actionpack', '>= 3.0.0'
|
23
|
+
|
24
|
+
spec.add_development_dependency 'rspec', '~> 2.13'
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
|
+
spec.add_development_dependency 'rake'
|
26
27
|
end
|
data/lib/bourgeois/presenter.rb
CHANGED
@@ -1,32 +1,40 @@
|
|
1
1
|
module Bourgeois
|
2
2
|
class Presenter < ::SimpleDelegator
|
3
|
-
def initialize(object, view)
|
3
|
+
def initialize(object, view = nil)
|
4
4
|
@view = view
|
5
5
|
super(@object = object)
|
6
6
|
end
|
7
7
|
|
8
|
+
# Return a String representation of the presenter + the original object
|
8
9
|
def inspect
|
9
10
|
"#<#{self.class} object=#{@object.inspect}>"
|
10
11
|
end
|
11
12
|
|
13
|
+
# We need to explicitely define this method because it's not
|
14
|
+
# catched by the delegator
|
12
15
|
def kind_of?(mod)
|
13
16
|
@object.kind_of?(mod)
|
14
17
|
end
|
15
18
|
|
19
|
+
# ActionView::Helpers::FormBuilder needs this
|
16
20
|
def self.model_name
|
17
21
|
klass.model_name
|
18
22
|
end
|
19
23
|
|
24
|
+
# ActionView::Helpers::FormBuilder needs this too
|
20
25
|
def self.human_attribute_name(*args)
|
21
26
|
klass.human_attribute_name(*args)
|
22
27
|
end
|
23
28
|
|
24
29
|
private
|
25
30
|
|
31
|
+
# Return the view from where the presenter was created
|
26
32
|
def view
|
27
33
|
@view
|
28
34
|
end
|
29
35
|
|
36
|
+
# Return the original object class based on the presenter class name
|
37
|
+
# We would be able to use `@object.class` but we need this in class methods
|
30
38
|
def self.klass
|
31
39
|
@klass ||= self.name.split(/Presenter$/).first.constantize
|
32
40
|
end
|
data/lib/bourgeois/version.rb
CHANGED
data/lib/bourgeois.rb
CHANGED
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bourgeois::Presenter do
|
4
|
+
let(:user) { User.new first_name: 'Patrick', last_name: 'Bourgeois' }
|
5
|
+
let(:view) { ActionView::Base.new }
|
6
|
+
let(:presenter) { UserPresenter.new(user, view) }
|
7
|
+
|
8
|
+
describe :DelegatedMethods do
|
9
|
+
before do
|
10
|
+
class UserPresenter < Bourgeois::Presenter
|
11
|
+
def formatted_name
|
12
|
+
"#{first_name} #{last_name}".strip
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class User < OpenStruct
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it { expect(presenter.formatted_name).to eql 'Patrick Bourgeois' }
|
21
|
+
it { expect(presenter.first_name).to eql 'Patrick' }
|
22
|
+
it { expect(presenter.last_name).to eql 'Bourgeois' }
|
23
|
+
end
|
24
|
+
|
25
|
+
describe :InstanceMethods do
|
26
|
+
describe :initialize do
|
27
|
+
before do
|
28
|
+
class UserPresenter < Bourgeois::Presenter; end
|
29
|
+
class User < OpenStruct; end
|
30
|
+
end
|
31
|
+
|
32
|
+
it { expect{ UserPresenter.new(user) }.to_not raise_error }
|
33
|
+
end
|
34
|
+
|
35
|
+
describe :view do
|
36
|
+
context 'with present view' do
|
37
|
+
before do
|
38
|
+
class UserPresenter < Bourgeois::Presenter
|
39
|
+
def local_name
|
40
|
+
view.t('users.attributes.local_name')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class ActionView::Base
|
45
|
+
def t(*args)
|
46
|
+
"Fancy translated string from #{args.join(', ')}"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class User < OpenStruct; end
|
51
|
+
end
|
52
|
+
|
53
|
+
it { expect(presenter.local_name).to eql 'Fancy translated string from users.attributes.local_name' }
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with blank view' do
|
57
|
+
before do
|
58
|
+
class UserPresenter < Bourgeois::Presenter; end
|
59
|
+
class User < OpenStruct; end
|
60
|
+
end
|
61
|
+
|
62
|
+
let(:presenter) { UserPresenter.new(user) }
|
63
|
+
|
64
|
+
it { expect(presenter.instance_variable_get(:@view)).to be_nil }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe :inspect do
|
69
|
+
before do
|
70
|
+
class UserPresenter < Bourgeois::Presenter; end
|
71
|
+
class User < OpenStruct; end
|
72
|
+
end
|
73
|
+
let(:user) { User.new foo: 'bar' }
|
74
|
+
|
75
|
+
it { expect(presenter.inspect).to eql '#<UserPresenter object=#<User foo="bar">>' }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe :ClassMethods do
|
80
|
+
describe :kind_of? do
|
81
|
+
before do
|
82
|
+
class UserPresenter < Bourgeois::Presenter; end
|
83
|
+
class User < OpenStruct; end
|
84
|
+
end
|
85
|
+
|
86
|
+
it { expect(presenter).to be_kind_of(User) }
|
87
|
+
end
|
88
|
+
|
89
|
+
describe :model_name do
|
90
|
+
before do
|
91
|
+
class UserPresenter < Bourgeois::Presenter; end
|
92
|
+
class User < OpenStruct; end
|
93
|
+
|
94
|
+
User.should_receive(:model_name).and_return(:foo)
|
95
|
+
end
|
96
|
+
|
97
|
+
it { expect(UserPresenter.model_name).to eql :foo }
|
98
|
+
end
|
99
|
+
|
100
|
+
describe :human_attribute_name do
|
101
|
+
before do
|
102
|
+
class UserPresenter < Bourgeois::Presenter; end
|
103
|
+
class User < OpenStruct; end
|
104
|
+
|
105
|
+
User.should_receive(:human_attribute_name).and_return(:foo)
|
106
|
+
end
|
107
|
+
|
108
|
+
it { expect(UserPresenter.human_attribute_name).to eql :foo }
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bourgeois
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,72 +9,88 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: activemodel
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
-
type: :
|
21
|
+
version: 3.0.0
|
22
|
+
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 3.0.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: actionpack
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
38
|
-
type: :
|
37
|
+
version: 3.0.0
|
38
|
+
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: 3.0.0
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: rspec
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
54
|
-
type: :
|
53
|
+
version: '2.13'
|
54
|
+
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '2.13'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: bundler
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.3'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.3'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rake
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
65
81
|
none: false
|
66
82
|
requirements:
|
67
83
|
- - ! '>='
|
68
84
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
70
|
-
type: :
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
71
87
|
prerelease: false
|
72
88
|
version_requirements: !ruby/object:Gem::Requirement
|
73
89
|
none: false
|
74
90
|
requirements:
|
75
91
|
- - ! '>='
|
76
92
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
93
|
+
version: '0'
|
78
94
|
description: Bourgeois is a Ruby library that makes using presenters a very simple
|
79
95
|
thing.
|
80
96
|
email:
|
@@ -84,6 +100,8 @@ extensions: []
|
|
84
100
|
extra_rdoc_files: []
|
85
101
|
files:
|
86
102
|
- .gitignore
|
103
|
+
- .rspec
|
104
|
+
- .travis.yml
|
87
105
|
- Gemfile
|
88
106
|
- LICENSE.md
|
89
107
|
- README.md
|
@@ -94,6 +112,8 @@ files:
|
|
94
112
|
- lib/bourgeois/railtie.rb
|
95
113
|
- lib/bourgeois/version.rb
|
96
114
|
- lib/bourgeois/view_helper.rb
|
115
|
+
- spec/bourgeois/presenter_spec.rb
|
116
|
+
- spec/spec_helper.rb
|
97
117
|
homepage: https://github.com/mirego/bourgeois
|
98
118
|
licenses:
|
99
119
|
- BSD 3-Clause
|
@@ -109,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
109
129
|
version: '0'
|
110
130
|
segments:
|
111
131
|
- 0
|
112
|
-
hash: -
|
132
|
+
hash: -4422150060977082943
|
113
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
134
|
none: false
|
115
135
|
requirements:
|
@@ -118,11 +138,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
138
|
version: '0'
|
119
139
|
segments:
|
120
140
|
- 0
|
121
|
-
hash: -
|
141
|
+
hash: -4422150060977082943
|
122
142
|
requirements: []
|
123
143
|
rubyforge_project:
|
124
144
|
rubygems_version: 1.8.23
|
125
145
|
signing_key:
|
126
146
|
specification_version: 3
|
127
147
|
summary: Bourgeois is a Ruby library that makes using presenters a very simple thing.
|
128
|
-
test_files:
|
148
|
+
test_files:
|
149
|
+
- spec/bourgeois/presenter_spec.rb
|
150
|
+
- spec/spec_helper.rb
|