cells 3.5.4 → 3.5.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.textile CHANGED
@@ -1,4 +1,12 @@
1
- h2. 3.5.3
1
+ h2. 3.5.5
2
+
3
+ h3. Bugfixes
4
+ * The generator now places views of namespaced cells into the correct directory. E.g. `rails g Blog::Post display` puts views to `app/cells/blog/post/display.html.erb`.
5
+
6
+ h3. Changes
7
+ * Gem dependencies changed, we now require @actionpack@ and @railties@ >= 3.0.0 instead of @rails@.
8
+
9
+ h2. 3.5.4
2
10
 
3
11
  h3. Bugfixes
4
12
  * state-args work even if your state method receives optional arguments or default values, like @def show(user, age=18)@.
data/README.rdoc CHANGED
@@ -45,7 +45,7 @@ Now, render your cart. Why not put it in <tt>layouts/application.html.erb</tt> f
45
45
  <div id="header">
46
46
  <%= render_cell :shopping_cart, :display, :user => @current_user %>
47
47
 
48
- Feels like rendering a controller action. As additional encapsulation we pass the current +user+ from outside. Call it knowledge hiding.
48
+ Feels like rendering a controller action. For good encapsulation we pass the current +user+ from outside into the cell - a dependency injection.
49
49
 
50
50
  == Code
51
51
 
@@ -60,12 +60,12 @@ Time to improve our cell code. Let's start with <tt>app/cells/shopping_cart_cell
60
60
  end
61
61
  end
62
62
 
63
- Is that a controller? Hell, yeah. We even got a +render+ method as we know it from the good ol' +ActionController+.
63
+ Is that a controller? Hell, yeah. We even got a +#render+ method as we know it from the good ol' +ActionController+.
64
64
 
65
65
 
66
66
  == Views
67
67
 
68
- Since a plain call to +render+ will start rendering <tt>app/cells/shopping_cart/display.html.haml</tt> we should put some meaningful markup there.
68
+ Since a plain call to +#render+ will start rendering <tt>app/cells/shopping_cart/display.html.haml</tt> we should put some meaningful markup there.
69
69
 
70
70
  #cart
71
71
  You have #{@items.size} items in your shopping cart.
@@ -131,9 +131,9 @@ You can expand the state's cache key - why not use a versioner block to do just
131
131
  options[:items].md5
132
132
  end
133
133
 
134
- The return value is appended to the state key: <tt>"cells/shopping_cart/display/0ecb1360644ce665a4ef"</tt>.
134
+ The block's return value is appended to the state key: <tt>"cells/shopping_cart/display/0ecb1360644ce665a4ef"</tt>.
135
135
 
136
- API here[http://rdoc.info/gems/cells/Cell/Caching/ClassMethods#cache-instance_method].
136
+ Check the {API to learn more}[http://rdoc.info/gems/cells/Cell/Caching/ClassMethods#cache-instance_method].
137
137
 
138
138
  == Testing
139
139
 
data/cells.gemspec CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency "rails", "~> 3.0.0"
22
+ s.add_dependency "actionpack", "~> 3.0.0"
23
+ s.add_dependency "railties", "~> 3.0.0"
23
24
 
24
25
  s.add_development_dependency "shoulda"
25
26
  s.add_development_dependency "haml"
data/lib/cell/rails.rb CHANGED
@@ -157,35 +157,26 @@ module Cell
157
157
 
158
158
  raise MissingTemplate.new(exception.message, possible_paths)
159
159
  end
160
-
160
+
161
161
  # Renders the view belonging to the given state. Will raise ActionView::MissingTemplate
162
162
  # if it can't find a view.
163
163
  def render_view_for(state, *args)
164
164
  opts = args.first.is_a?(::Hash) ? args.shift : {}
165
165
 
166
166
  return "" if opts[:nothing]
167
-
168
- rails_options = [:text, :inline, :file]
169
- if (opts.keys & rails_options).present?
170
- elsif opts[:state]
171
- opts[:text] = render_state(opts[:state], *args)
172
- else
173
- opts = defaultize_render_options_for(opts, state)
174
- template = find_family_view_for_state(opts[:view])
175
- opts[:template] = template
167
+
168
+ if opts[:state]
169
+ opts[:text] = render_state(opts.delete(:state), *args)
170
+ elsif (opts.keys & [:text, :inline, :file]).blank?
171
+ opts = defaultize_render_options_for(opts, state)
172
+ opts[:template] = find_family_view_for_state(opts.delete(:view))
176
173
  end
177
-
178
- opts = sanitize_render_options(opts)
174
+
179
175
  render_to_string(opts).html_safe # ActionView::Template::Text doesn't do that for us.
180
176
  end
181
-
182
- # Defaultize the passed options from #render.
177
+
183
178
  def defaultize_render_options_for(opts, state)
184
179
  opts.reverse_merge!(:view => state)
185
180
  end
186
-
187
- def sanitize_render_options(opts)
188
- opts.except!(:view, :state)
189
- end
190
181
  end
191
182
  end
data/lib/cells.rb CHANGED
@@ -47,7 +47,7 @@
47
47
  #
48
48
  # == View inheritance
49
49
  #
50
- # Unlike controllers, Cells can form a class hierarchy. Even Views are inherited, which is pretty useful
50
+ # Unlike controllers, Cells can form a class hierarchy. Even views are inherited, which is pretty useful
51
51
  # when overriding only small parts of the view.
52
52
  #
53
53
  # So if you'd need a special "Order!" button with sparkling stars on christmas, your cell would go like this.
data/lib/cells/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cells
2
- VERSION = '3.5.4'
2
+ VERSION = '3.5.5'
3
3
  end
@@ -9,6 +9,11 @@ module Cells
9
9
 
10
10
  argument :actions, :type => :array, :default => [], :banner => "action action"
11
11
  check_class_collision :suffix => "Cell"
12
+
13
+ private
14
+ def base_path
15
+ File.join('app/cells', class_path, file_name)
16
+ end
12
17
  end
13
18
  end
14
19
  end
@@ -1,17 +1,10 @@
1
- require 'generators/cells/base'
1
+ require 'generators/rails/cell_generator'
2
2
 
3
3
  module Cells
4
4
  module Generators
5
- class CellGenerator < ::Cells::Generators::Base
5
+ class CellGenerator < ::Rails::Generators::CellGenerator
6
6
  source_root File.expand_path('../../templates', __FILE__)
7
-
8
- def create_cell_file
9
- template 'cell.rb', File.join('app/cells', class_path, "#{file_name}_cell.rb")
10
- end
11
-
12
- hook_for(:template_engine)
13
- hook_for(:test_framework)
14
-
7
+
15
8
  def say_deprecated
16
9
  say "====> This generator is now DEPRECATED. <====", :red
17
10
  say "Please use:"
@@ -8,7 +8,7 @@ module Erb
8
8
  def create_views
9
9
  for state in actions do
10
10
  @state = state
11
- @path = File.join('app/cells', file_name, "#{state}.html.erb")
11
+ @path = File.join(base_path, "#{state}.html.erb") #base_path defined in Cells::Generators::Base.
12
12
  template "view.erb", @path
13
13
  end
14
14
  end
@@ -8,8 +8,7 @@ module Haml
8
8
  def create_views
9
9
  for state in actions do
10
10
  @state = state
11
- @path = File.join('app/cells', file_name, "#{state}.html.haml")
12
-
11
+ @path = File.join(base_path, "#{state}.html.haml") #base_path defined in Cells::Generators::Base.
13
12
  template "view.haml", @path
14
13
  end
15
14
  end
@@ -6,7 +6,7 @@ module Rails
6
6
  source_root File.expand_path('../../templates', __FILE__)
7
7
 
8
8
  def create_cell_file
9
- template 'cell.rb', File.join('app/cells', class_path, "#{file_name}_cell.rb")
9
+ template 'cell.rb', "#{base_path}_cell.rb"
10
10
  end
11
11
 
12
12
  hook_for(:template_engine)
@@ -1,58 +1,69 @@
1
1
  require 'test_helper'
2
- require 'generators/cells/cell_generator'
2
+ require 'generators/rails/cell_generator'
3
3
 
4
4
  class CellGeneratorTest < Rails::Generators::TestCase
5
5
  destination File.join(Rails.root, "tmp")
6
6
  setup :prepare_destination
7
- tests ::Cells::Generators::CellGenerator
7
+ tests ::Rails::Generators::CellGenerator
8
8
 
9
- context "Running script/generate cell" do
10
- context "Blog post latest" do
9
+ context "CellGenerator" do
10
+ should "create the standard assets" do
11
+ run_generator %w(Blog post latest)
11
12
 
12
- should "create the standard assets" do
13
- run_generator %w(Blog post latest)
13
+ assert_file "app/cells/blog_cell.rb", /class BlogCell < Cell::Rails/
14
+ assert_file "app/cells/blog_cell.rb", /def post/
15
+ assert_file "app/cells/blog_cell.rb", /def latest/
16
+ assert_file "app/cells/blog/post.html.erb", %r(app/cells/blog/post\.html\.erb)
17
+ assert_file "app/cells/blog/post.html.erb", %r(<p>)
18
+ assert_file "app/cells/blog/latest.html.erb", %r(app/cells/blog/latest\.html\.erb)
14
19
 
15
- assert_file "app/cells/blog_cell.rb", /class BlogCell < Cell::Rails/
16
- assert_file "app/cells/blog_cell.rb", /def post/
17
- assert_file "app/cells/blog_cell.rb", /def latest/
18
- assert_file "app/cells/blog/post.html.erb", %r(app/cells/blog/post\.html\.erb)
19
- assert_file "app/cells/blog/post.html.erb", %r(<p>)
20
- assert_file "app/cells/blog/latest.html.erb", %r(app/cells/blog/latest\.html\.erb)
21
20
 
21
+ assert_no_file "app/cells/blog/post.html.haml"
22
+ assert_no_file "app/cells/blog/post.html.haml"
23
+ assert_no_file "app/cells/blog/latest.html.haml"
24
+ end
25
+
26
+ should "work with namespaces" do
27
+ run_generator %w(Blog::Post latest)
22
28
 
23
- assert_no_file "app/cells/blog/post.html.haml"
24
- assert_no_file "app/cells/blog/post.html.haml"
25
- assert_no_file "app/cells/blog/latest.html.haml"
26
- end
29
+ assert_file "app/cells/blog/post_cell.rb", /class Blog::PostCell < Cell::Rails/
30
+ assert_file "app/cells/blog/post_cell.rb", /def latest/
31
+ assert_file "app/cells/blog/post/latest.html.erb", %r(app/cells/blog/post/latest\.html\.erb)
32
+ end
33
+
34
+ should "work with namespaces and haml" do
35
+ run_generator %w(Blog::Post latest -e haml)
27
36
 
28
- should "create haml assets with -e haml" do
29
- run_generator %w(Blog post latest -e haml)
37
+ assert_file "app/cells/blog/post_cell.rb", /class Blog::PostCell < Cell::Rails/
38
+ assert_file "app/cells/blog/post/latest.html.haml", %r(app/cells/blog/post/latest\.html\.haml)
39
+ end
30
40
 
31
- assert_file "app/cells/blog_cell.rb", /class BlogCell < Cell::Rails/
32
- assert_file "app/cells/blog_cell.rb", /def post/
33
- assert_file "app/cells/blog_cell.rb", /def latest/
34
- assert_file "app/cells/blog/post.html.haml", %r(app/cells/blog/post\.html\.haml)
35
- assert_file "app/cells/blog/post.html.haml", %r(%p)
36
- assert_file "app/cells/blog/latest.html.haml", %r(app/cells/blog/latest\.html\.haml)
41
+ should "create haml assets with -e haml" do
42
+ run_generator %w(Blog post latest -e haml)
37
43
 
44
+ assert_file "app/cells/blog_cell.rb", /class BlogCell < Cell::Rails/
45
+ assert_file "app/cells/blog_cell.rb", /def post/
46
+ assert_file "app/cells/blog_cell.rb", /def latest/
47
+ assert_file "app/cells/blog/post.html.haml", %r(app/cells/blog/post\.html\.haml)
48
+ assert_file "app/cells/blog/post.html.haml", %r(%p)
49
+ assert_file "app/cells/blog/latest.html.haml", %r(app/cells/blog/latest\.html\.haml)
38
50
 
39
- assert_no_file "app/cells/blog/post.html.erb"
40
- assert_no_file "app/cells/blog/post.html.erb"
41
- assert_no_file "app/cells/blog/latest.html.erb"
42
- end
43
51
 
44
- should "create test_unit assets with -t test_unit" do
45
- run_generator %w(Blog post latest -t test_unit)
52
+ assert_no_file "app/cells/blog/post.html.erb"
53
+ assert_no_file "app/cells/blog/post.html.erb"
54
+ assert_no_file "app/cells/blog/latest.html.erb"
55
+ end
46
56
 
47
- assert_file "test/cells/blog_cell_test.rb"
48
- end
57
+ should "create test_unit assets with -t test_unit" do
58
+ run_generator %w(Blog post latest -t test_unit)
49
59
 
50
- should "create test_unit assets with -t rspec" do
51
- run_generator %w(Blog post latest -t rspec)
60
+ assert_file "test/cells/blog_cell_test.rb"
61
+ end
52
62
 
53
- assert_no_file "test/cells/blog_cell_test.rb"
54
- end
63
+ should "create test_unit assets with -t rspec" do
64
+ run_generator %w(Blog post latest -t rspec)
55
65
 
66
+ assert_no_file "test/cells/blog_cell_test.rb"
56
67
  end
57
68
  end
58
69
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 3
7
7
  - 5
8
- - 4
9
- version: 3.5.4
8
+ - 5
9
+ version: 3.5.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nick Sutterer
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-20 00:00:00 +01:00
17
+ date: 2011-03-08 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: rails
21
+ name: actionpack
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
@@ -33,9 +33,24 @@ dependencies:
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: shoulda
36
+ name: railties
37
37
  prerelease: false
38
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 3
45
+ - 0
46
+ - 0
47
+ version: 3.0.0
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: shoulda
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
39
54
  none: false
40
55
  requirements:
41
56
  - - ">="
@@ -44,11 +59,11 @@ dependencies:
44
59
  - 0
45
60
  version: "0"
46
61
  type: :development
47
- version_requirements: *id002
62
+ version_requirements: *id003
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: haml
50
65
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
66
+ requirement: &id004 !ruby/object:Gem::Requirement
52
67
  none: false
53
68
  requirements:
54
69
  - - ">="
@@ -57,7 +72,7 @@ dependencies:
57
72
  - 0
58
73
  version: "0"
59
74
  type: :development
60
- version_requirements: *id003
75
+ version_requirements: *id004
61
76
  description: Cells are view components for Rails. They are lightweight controllers, can be rendered in views and thus provide an elegant and fast way for encapsulation and component-orientation.
62
77
  email:
63
78
  - apotonick@gmail.com