decent_decoration 0.0.2 → 0.0.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/.travis.yml +9 -0
- data/README.md +1 -0
- data/Rakefile +5 -1
- data/decent_decoration.gemspec +1 -0
- data/lib/decent_decoration/decorate.rb +13 -6
- data/lib/decent_decoration/version.rb +1 -1
- data/spec/fixtures/controllers.rb +13 -14
- data/spec/fixtures/decorators.rb +11 -0
- data/spec/fixtures/fake_rails_application.rb +6 -0
- data/spec/fixtures/models.rb +31 -0
- data/spec/integration/draper_spec.rb +16 -0
- data/spec/integration/rails_application_spec.rb +1 -2
- metadata +24 -4
data/.travis.yml
ADDED
data/README.md
CHANGED
data/Rakefile
CHANGED
data/decent_decoration.gemspec
CHANGED
@@ -21,4 +21,5 @@ Gem::Specification.new do |gem|
|
|
21
21
|
gem.add_development_dependency 'rspec-rails', '~> 2.7'
|
22
22
|
gem.add_development_dependency 'actionpack', '~> 3.1'
|
23
23
|
gem.add_development_dependency 'activesupport', '~> 3.1'
|
24
|
+
gem.add_development_dependency 'draper', '>= 1.0.0'
|
24
25
|
end
|
@@ -1,14 +1,21 @@
|
|
1
1
|
module DecentDecoration
|
2
2
|
module Decorate
|
3
3
|
def expose_decorated(name, options = {}, &block)
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
options[:model] ||= name
|
5
|
+
original_name = name.to_s
|
6
|
+
plural_name = original_name.pluralize
|
7
|
+
singular_name = original_name.singularize
|
8
|
+
decorator_class = options.delete(:decorator) || "#{options[:model].to_s.classify}Decorator".constantize
|
9
|
+
|
10
|
+
if plural_name == original_name && plural_name != singular_name && decorator_class.respond_to?(:decorate_collection)
|
11
|
+
decorate_method = :decorate_collection
|
12
|
+
else
|
13
|
+
decorate_method = decorator_class.respond_to?(:decorate) ? :decorate : :new
|
14
|
+
end
|
7
15
|
|
8
|
-
|
9
|
-
decorate_method = decorator_class.respond_to?(:decorate) ? :decorate : :new
|
16
|
+
undecorated_name = "undecorated_#{name}".to_sym
|
10
17
|
expose(undecorated_name, options, &block)
|
11
|
-
expose(
|
18
|
+
expose(name) { decorator_class.public_send(decorate_method, public_send(undecorated_name)) }
|
12
19
|
end
|
13
20
|
end
|
14
21
|
end
|
@@ -1,24 +1,23 @@
|
|
1
|
-
|
1
|
+
class ConferencesController < ActionController::Base
|
2
|
+
include Rails.application.routes.url_helpers
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
def
|
7
|
-
|
8
|
-
end
|
9
|
-
def self.find(id)
|
10
|
-
new if id
|
4
|
+
expose_decorated(:conference)
|
5
|
+
expose_decorated(:other_conference, model: Conference, decorator: CoolConferenceDecorator)
|
6
|
+
|
7
|
+
def show
|
8
|
+
render :text => "foo"
|
11
9
|
end
|
12
|
-
|
13
|
-
|
10
|
+
|
11
|
+
def new
|
12
|
+
render :text => "foo"
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
class
|
16
|
+
class AttendeesController < ActionController::Base
|
18
17
|
include Rails.application.routes.url_helpers
|
19
18
|
|
20
|
-
expose_decorated(:
|
21
|
-
expose_decorated(:
|
19
|
+
expose_decorated(:attendee)
|
20
|
+
expose_decorated(:attendees) { [Attendee.new, Attendee.new] }
|
22
21
|
|
23
22
|
def show
|
24
23
|
render :text => "foo"
|
data/spec/fixtures/decorators.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'delegate'
|
2
|
+
require 'draper'
|
2
3
|
|
3
4
|
class ConferenceDecorator < SimpleDelegator
|
4
5
|
def decorated_object
|
@@ -8,3 +9,13 @@ end
|
|
8
9
|
|
9
10
|
class CoolConferenceDecorator < ConferenceDecorator
|
10
11
|
end
|
12
|
+
|
13
|
+
class AttendeeDecorator < Draper::Decorator
|
14
|
+
def full_name
|
15
|
+
"#{first_name} #{last_name}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.find(id)
|
19
|
+
Attendee.find(id)
|
20
|
+
end
|
21
|
+
end
|
@@ -16,6 +16,8 @@ module Rails
|
|
16
16
|
@routes.draw do
|
17
17
|
get '/conferences/new' => "conferences#new"
|
18
18
|
get '/conference/(:id)' => "conferences#show"
|
19
|
+
get '/attendees/new' => "attendees#new"
|
20
|
+
get '/attendee/(:id)' => "attendees#show"
|
19
21
|
end
|
20
22
|
@routes
|
21
23
|
end
|
@@ -27,3 +29,7 @@ module Rails
|
|
27
29
|
@app ||= App.new
|
28
30
|
end
|
29
31
|
end
|
32
|
+
|
33
|
+
require 'fixtures/models'
|
34
|
+
require 'fixtures/decorators'
|
35
|
+
require 'fixtures/controllers'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Model
|
2
|
+
extend ActiveModel::Naming
|
3
|
+
|
4
|
+
def initialize(attrs={})
|
5
|
+
self.attributes = attrs
|
6
|
+
end
|
7
|
+
|
8
|
+
def attributes=(attributes)
|
9
|
+
attributes.each { |k,v| send("#{k}=", v) }
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.included(klass)
|
13
|
+
def klass.find(id)
|
14
|
+
new if id
|
15
|
+
end
|
16
|
+
|
17
|
+
def klass.scoped
|
18
|
+
self
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Conference
|
24
|
+
include Model
|
25
|
+
attr_accessor :name, :location
|
26
|
+
end
|
27
|
+
|
28
|
+
class Attendee
|
29
|
+
include Model
|
30
|
+
attr_accessor :first_name, :last_name
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'fixtures/fake_rails_application'
|
2
|
+
require 'rspec/rails'
|
3
|
+
|
4
|
+
describe AttendeesController, type: :controller do
|
5
|
+
it "should be a decorator" do
|
6
|
+
get '/attendee/dave'
|
7
|
+
controller.attendee.should be_instance_of(AttendeeDecorator)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be a decorator in collection" do
|
11
|
+
get '/attendee/dave'
|
12
|
+
controller.attendees.each do |attendee|
|
13
|
+
attendee.should be_instance_of(AttendeeDecorator)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decent_decoration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: decent_exposure
|
@@ -91,6 +91,22 @@ dependencies:
|
|
91
91
|
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '3.1'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: draper
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.0.0
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 1.0.0
|
94
110
|
description: Use decent_exposure with decorators (e.g. Draper)
|
95
111
|
email:
|
96
112
|
- pewniak747@gmail.com
|
@@ -99,6 +115,7 @@ extensions: []
|
|
99
115
|
extra_rdoc_files: []
|
100
116
|
files:
|
101
117
|
- .gitignore
|
118
|
+
- .travis.yml
|
102
119
|
- Gemfile
|
103
120
|
- LICENSE.txt
|
104
121
|
- README.md
|
@@ -110,6 +127,8 @@ files:
|
|
110
127
|
- spec/fixtures/controllers.rb
|
111
128
|
- spec/fixtures/decorators.rb
|
112
129
|
- spec/fixtures/fake_rails_application.rb
|
130
|
+
- spec/fixtures/models.rb
|
131
|
+
- spec/integration/draper_spec.rb
|
113
132
|
- spec/integration/rails_application_spec.rb
|
114
133
|
homepage: https://github.com/netguru/decent_decoration
|
115
134
|
licenses: []
|
@@ -131,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
150
|
version: '0'
|
132
151
|
requirements: []
|
133
152
|
rubyforge_project:
|
134
|
-
rubygems_version: 1.8.
|
153
|
+
rubygems_version: 1.8.23
|
135
154
|
signing_key:
|
136
155
|
specification_version: 3
|
137
156
|
summary: Use decent_exposure with decorators (e.g. Draper)
|
@@ -139,5 +158,6 @@ test_files:
|
|
139
158
|
- spec/fixtures/controllers.rb
|
140
159
|
- spec/fixtures/decorators.rb
|
141
160
|
- spec/fixtures/fake_rails_application.rb
|
161
|
+
- spec/fixtures/models.rb
|
162
|
+
- spec/integration/draper_spec.rb
|
142
163
|
- spec/integration/rails_application_spec.rb
|
143
|
-
has_rdoc:
|