cells 3.8.0 → 3.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,7 +2,7 @@
2
2
  pkg
3
3
  .*~
4
4
  .bundle
5
- Gemfile.lock
5
+ Gemfile*.lock
6
6
  test/dummy/log/*.log
7
7
  test/dummy/tmp/
8
8
  /.rvmrc
data/.travis.yml CHANGED
@@ -1,3 +1,7 @@
1
1
  rvm: 1.9.2
2
2
  notifications:
3
- irc: "irc.freenode.org#cells"
3
+ irc: "irc.freenode.org#cells"
4
+ gemfile:
5
+ - Gemfile
6
+ - gemfiles/Gemfile.rails3-1
7
+ - gemfiles/Gemfile.rails3-2
data/CHANGES.textile CHANGED
@@ -1,3 +1,7 @@
1
+ h2. 3.8.1
2
+
3
+ * Make it work with Rails 3.2 by removing deprecated stuff.
4
+
1
5
  h2. 3.8.0
2
6
 
3
7
  * @Cell::Base@ got rid of the controller dependency. If you want the @ActionController@ instance around in your cell, use @Cell::Rails@ - this should be the default in a standard Rails setup. However, if you plan on using a Cell in a Rack middleware or don't need the controller, use @Cell::Base@.
data/README.rdoc CHANGED
@@ -175,17 +175,21 @@ To run your specs we got a rake task, too!
175
175
 
176
176
  == Mountable Cells
177
177
 
178
- Cells 3.8 got rid of the ActionController dependency. This essentially means you can mount Cells to routes or use them like a Rack middleware. All you need to do is derive from @Cell::Base@.
178
+ Cells 3.8 got rid of the ActionController dependency. This essentially means you can mount Cells to routes or use them like a Rack middleware. All you need to do is derive from Cell::Base.
179
179
 
180
180
  class PostCell < Cell::Base
181
181
  ..
182
182
 
183
- In your @routes.rb@ file, mount the cell like a Rack app.
183
+ In your <tt>routes.rb</tt> file, mount the cell like a Rack app.
184
184
 
185
185
  match "/posts" => proc { |env|
186
186
  [ 200, {}, [ Cell::Base.render_cell_for(:post, :show) ]]
187
187
  }
188
188
 
189
+ == Cells is Rails::Engine aware!
190
+
191
+ Now <tt>Rails::Engine</tt>s can contribute to Cells view paths. By default, any 'app/cells' found inside any Engine is automatically included into Cells view paths. If you need to, you can customize the view paths changing/appending to the <tt>'app/cell_views'</tt> path configuration. See the @Cell::EngineIntegration@ for more details.
192
+
189
193
  == Rails 2.3 note
190
194
 
191
195
  In order to copy the cells rake tasks to your app, run
data/cells.gemspec CHANGED
@@ -27,5 +27,5 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency "haml"
28
28
  s.add_development_dependency "slim"
29
29
  s.add_development_dependency "tzinfo" # FIXME: why the hell do we need this for 3.1?
30
- s.add_development_dependency "minitest"
30
+ s.add_development_dependency "minitest", ">= 2.8.1"
31
31
  end
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in roar-rails.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'railties', '~> 3.0.11'
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in roar-rails.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'railties', '~> 3.1.0'
@@ -0,0 +1,7 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in roar-rails.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'railties', '~> 3.2.0'
7
+ gem 'haml', '~> 3.1.4'
data/lib/cell/base.rb CHANGED
@@ -4,7 +4,7 @@ require 'cell/caching'
4
4
  require 'cell/rendering'
5
5
  require 'cell/rails3_0_strategy' if Cells.rails3_0?
6
6
  require 'cell/rails3_1_strategy' if Cells.rails3_1_or_more?
7
-
7
+
8
8
  module Cell
9
9
  class Base < AbstractController::Base
10
10
  abstract!
@@ -18,7 +18,6 @@ module Cell
18
18
  include Rendering
19
19
  include Caching
20
20
 
21
-
22
21
  class View < ActionView::Base
23
22
  def render(*args, &block)
24
23
  options = args.first.is_a?(::Hash) ? args.first : {} # this is copied from #render by intention.
@@ -3,41 +3,39 @@ module Cell
3
3
  # Note that Deprecations are only available for Cell::Rails.
4
4
  module Deprecations
5
5
  extend ActiveSupport::Concern
6
-
6
+
7
7
  included do
8
8
  attr_reader :options
9
9
  end
10
-
11
-
10
+
11
+
12
12
  module ClassMethods
13
13
  def build_for(controller, *args)
14
14
  build_class_for(controller, *args).
15
15
  new(controller, *args)
16
16
  end
17
17
  end
18
-
19
-
20
- module InstanceMethods
21
- def initialize(parent_controller, *args)
22
- super(parent_controller) # the real Rails.new.
23
- setup_backwardibility(*args)
24
- end
25
-
26
- # Some people still like #options and assume it's a hash.
27
- def setup_backwardibility(*args)
28
- @_options = (args.first.is_a?(Hash) and args.size == 1) ? args.first : args
29
- @options = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(@_options, "#options is deprecated and was removed in Cells 3.7. Please use state-args.")
30
- end
31
-
32
- def render_state(state, *args)
33
- return super(state, *args) if state_accepts_args?(state)
34
- super(state) # backward-compat.
35
- end
36
-
37
- def state_accepts_args?(state)
38
- method(state).arity != 0
39
- end
18
+
19
+
20
+ def initialize(parent_controller, *args)
21
+ super(parent_controller) # the real Rails.new.
22
+ setup_backwardibility(*args)
23
+ end
24
+
25
+ # Some people still like #options and assume it's a hash.
26
+ def setup_backwardibility(*args)
27
+ @_options = (args.first.is_a?(Hash) and args.size == 1) ? args.first : args
28
+ @options = ActiveSupport::Deprecation::DeprecatedObjectProxy.new(@_options, "#options is deprecated and was removed in Cells 3.7. Please use state-args.")
29
+ end
30
+
31
+ def render_state(state, *args)
32
+ return super(state, *args) if state_accepts_args?(state)
33
+ super(state) # backward-compat.
34
+ end
35
+
36
+ def state_accepts_args?(state)
37
+ method(state).arity != 0
40
38
  end
41
-
39
+
42
40
  end
43
41
  end
data/lib/cells.rb CHANGED
@@ -78,9 +78,14 @@ module Cells
78
78
  def self.rails3_1_or_more?
79
79
  ::Rails::VERSION::MINOR >= 1
80
80
  end
81
+
82
+ def self.rails3_2_or_more? # FIXME: move to tests.
83
+ ::Rails::VERSION::MINOR >= 2
84
+ end
81
85
  end
82
86
 
83
87
  require 'cell/rails'
84
- require 'cells/railtie'
85
88
  require 'cells/rails'
86
89
  require 'cell/deprecations'
90
+ require 'cells/engines'
91
+ require 'cells/railtie'
@@ -0,0 +1,59 @@
1
+ require 'rails/application/railties'
2
+
3
+ module Cells
4
+ # Now <tt>Rails::Engine</tt>s can contribute to Cells view paths.
5
+ # By default, any 'app/cells' found inside any Engine is automatically included into Cells view paths.
6
+ #
7
+ # You can customize the view paths changing/appending to the <tt>'app/cell_views'</tt> path configuration:
8
+ #
9
+ # module MyAwesome
10
+ # class Engine < Rails::Engine
11
+ # # loads views from 'cell/views' and NOT from 'app/cells'
12
+ # config.paths.add 'app/cell_views', :with => 'cell/views'
13
+ #
14
+ # # appends 'lib/my_cells_view_path' to this Railtie view path contribution
15
+ # config.paths['app/cell_views'] << 'lib/my_cells_view_path'
16
+ # end
17
+ # end
18
+ #
19
+ # You can manually specify which Engines will be added to Cell view paths
20
+ #
21
+ # Cell::Base.config.view_path_engines = [MyAwesome::Engine]
22
+ #
23
+ # And even disable the automatic loading
24
+ #
25
+ # Cell::Base.config.view_path_engines = false
26
+ #
27
+ # You can programatically append a Rails::Engine to Cell view path
28
+ #
29
+ # Cells.setup do |config|
30
+ # config.append_engine_view_path!(MyEngine::Engine)
31
+ # end
32
+ #
33
+ module Engines
34
+ # Appends all <tt>Rails::Engine</tt>s cell-views path to Cell::Base#view_paths
35
+ #
36
+ # All <tt>Rails::Engine</tt>s specified at <tt>config.view_path_engines</tt> will have its cell-views path appended to Cell::Base#view_paths
37
+ #
38
+ # Defaults <tt>config.view_path_engines</tt> to all loaded <tt>Rails::Engine</tt>s.
39
+ #
40
+ def self.append_engines_view_paths_for(config)
41
+ return if config.view_path_engines == false
42
+
43
+ engines = config.view_path_engines || ::Rails::Application::Railties.engines
44
+ engines.each {|engine| append_engine_view_path!(engine) }
45
+ end
46
+
47
+ # Appends a <tt>Rails::Engine</tt> cell-views path to @Cell::Base@
48
+ #
49
+ # The <tt>Rails::Engine</tt> cell-views path is obtained from the <tt>paths['app/cell_views']</tt> configuration.
50
+ # All existing directories specified at cell-views path will be appended do Cell::Base#view_paths
51
+ #
52
+ # Defaults <tt>paths['app/cell_views']</tt> to 'app/cells'
53
+ #
54
+ def self.append_engine_view_path!(engine)
55
+ engine.paths['app/cell_views'] || engine.paths.add('app/cell_views', :with => 'app/cells')
56
+ Cell::Rails.append_view_path(engine.paths["app/cell_views"].existent_directories)
57
+ end
58
+ end
59
+ end
data/lib/cells/railtie.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "rails/railtie"
2
2
 
3
3
  module Cells
4
- class Railtie < Rails::Railtie
4
+ class Railtie < ::Rails::Railtie
5
5
  initializer "cells.attach_router" do |app|
6
6
  Cell::Base.class_eval do
7
7
  include app.routes.url_helpers
@@ -12,6 +12,10 @@ module Cells
12
12
  Cell::Base.setup_view_paths!
13
13
  end
14
14
 
15
+ initializer "cells.setup_engines_view_paths" do |app|
16
+ Cells::Engines.append_engines_view_paths_for(app.config.action_controller)
17
+ end
18
+
15
19
  rake_tasks do
16
20
  load "cells/cells.rake"
17
21
  end
data/lib/cells/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cells
2
- VERSION = '3.8.0'
2
+ VERSION = '3.8.1'
3
3
  end
@@ -1 +1 @@
1
- Find me at <%= link_to "vd.com", :action => "index", :controller => "musician" %>
1
+ Find me at <%= link_to "vd.com", musicians_path %>
@@ -1 +1 @@
1
- Find me at <%= link_to "vd.com", root_url %>
1
+ Find me at <%= link_to "vd.com", musicians_url %>
@@ -16,7 +16,11 @@ class CellsModuleTest < ActiveSupport::TestCase
16
16
  c.append_view_path "/road/to/nowhere"
17
17
  end
18
18
 
19
- assert_equal "/road/to/nowhere", Cell::Rails.view_paths.last.to_s
19
+ if Cells.rails3_2_or_more?
20
+ assert_equal "/road/to/nowhere", Cell::Rails.view_paths.paths.last.to_s
21
+ else
22
+ assert_equal "/road/to/nowhere", Cell::Rails.view_paths.last.to_s
23
+ end
20
24
  end
21
25
  end
22
26
 
@@ -1,4 +1,4 @@
1
1
  Dummy::Application.routes.draw do
2
2
  match ':controller(/:action(/:id(.:format)))'
3
- root :to => 'musician#index'
3
+ resources :musicians
4
4
  end
@@ -28,30 +28,43 @@ class CachingUnitTest < ActiveSupport::TestCase
28
28
 
29
29
  context ".state_cache_key" do
30
30
  should "accept state only" do
31
- assert_equal "cells/director/count/", @class.state_cache_key(:count)
31
+ if Cells.rails3_2_or_more?
32
+ assert_equal "cells/Array/director/count/", @class.state_cache_key(:count)
33
+ else
34
+ assert_equal "cells/director/count/", @class.state_cache_key(:count)
35
+ end
32
36
  end
33
37
 
34
38
  should "accept hash as key parts" do
35
- assert_equal "cells/director/count/a=1&b=2", @class.state_cache_key(:count, :b=>2, :a=>1)
39
+ if Cells.rails3_2_or_more?
40
+ assert_equal "cells/Array/director/count/a=1&b=2", @class.state_cache_key(:count, :b=>2, :a=>1)
41
+ else
42
+ assert_equal "cells/director/count/a=1&b=2", @class.state_cache_key(:count, :b=>2, :a=>1)
43
+ end
36
44
  end
37
45
 
38
46
  should "accept array as key parts" do
39
- assert_equal "cells/director/count/1/2/3", @class.state_cache_key(:count, [1,2,3])
47
+ if Cells.rails3_2_or_more?
48
+ assert_equal "cells/Array/director/count/Array/1/2/3", @class.state_cache_key(:count, [1,2,3])
49
+ else
50
+ assert_equal "cells/director/count/1/2/3", @class.state_cache_key(:count, [1,2,3])
51
+ end
40
52
  end
41
53
 
42
54
  should "accept string as key parts" do
43
- assert_equal "cells/director/count/1/2", @class.state_cache_key(:count, "1/2")
55
+ if Cells.rails3_2_or_more?
56
+ assert_equal "cells/Array/director/count/1/2", @class.state_cache_key(:count, "1/2")
57
+ else
58
+ assert_equal "cells/director/count/1/2", @class.state_cache_key(:count, "1/2")
59
+ end
44
60
  end
45
61
 
46
62
  should "accept nil as key parts" do
47
- assert_equal "cells/director/count/", @class.state_cache_key(:count, nil)
48
- end
49
- end
50
-
51
-
52
- context ".expand_cache_key" do
53
- should "add :cells namespace" do
54
- assert_equal "cells/director/count", @class.send(:expand_cache_key, [:director, :count])
63
+ if Cells.rails3_2_or_more?
64
+ assert_equal "cells/Array/director/count/", @class.state_cache_key(:count, nil)
65
+ else
66
+ assert_equal "cells/director/count/", @class.state_cache_key(:count, nil)
67
+ end
55
68
  end
56
69
  end
57
70
 
@@ -54,7 +54,11 @@ class RailsCellsTest < ActiveSupport::TestCase
54
54
  should "respond to .setup_view_paths!" do
55
55
  swap( Cell::Rails, :view_paths => []) do
56
56
  Cell::Rails.setup_view_paths!
57
- assert_equal ActionView::PathSet.new(Cell::Rails::DEFAULT_VIEW_PATHS), Cell::Rails.view_paths
57
+ if Cells.rails3_2_or_more?
58
+ assert_equal ActionView::PathSet.new(Cell::Rails::DEFAULT_VIEW_PATHS).paths, Cell::Rails.view_paths.paths
59
+ else
60
+ assert_equal ActionView::PathSet.new(Cell::Rails::DEFAULT_VIEW_PATHS), Cell::Rails.view_paths
61
+ end
58
62
  end
59
63
  end
60
64
 
@@ -134,12 +134,12 @@ class RailsRenderTest < ActiveSupport::TestCase
134
134
  end
135
135
 
136
136
  assert_includes e.message, "Missing template cell/rails/groove with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml, :haml], :formats=>[:html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]} in view paths"
137
- else # 3.1
137
+ else # >= 3.1
138
138
  e = assert_raise ActionView::MissingTemplate do
139
139
  render_cell(:bad_guitarist, :groove)
140
140
  end
141
141
 
142
- assert_includes e.message, "Missing template bad_guitarist/groove, bassist/groove with {:handlers=>[:erb, :builder, :haml], :formats=>[:html, :text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]}. Searched in:\n "
142
+ assert_includes e.message, "Missing template bad_guitarist/groove, bassist/groove with"
143
143
  end
144
144
  end
145
145
 
@@ -6,7 +6,7 @@ module ApplicationTests
6
6
 
7
7
  context "A Rails app" do
8
8
  should "pass url_helpers to the cell instance" do
9
- assert_equal "/", BassistCell.new(@controller).root_path
9
+ assert_equal "/musicians", BassistCell.new(@controller).musicians_path
10
10
  end
11
11
 
12
12
  should "allow cells to use url_helpers" do
@@ -16,7 +16,7 @@ module ApplicationTests
16
16
 
17
17
  get "index"
18
18
  assert_response :success
19
- assert_equal "Find me at <a href=\"/musician\">vd.com</a>", @response.body
19
+ assert_equal "Find me at <a href=\"/musicians\">vd.com</a>\n", @response.body
20
20
  end
21
21
 
22
22
  should "delegate #url_options to the parent_controller" do
@@ -27,13 +27,13 @@ module ApplicationTests
27
27
 
28
28
  end
29
29
 
30
- assert_equal "http://cells.rails.org/", BassistCell.new(@controller).root_url
30
+ assert_equal "http://cells.rails.org/musicians", BassistCell.new(@controller).musicians_url
31
31
  end
32
32
 
33
33
  should "allow cells to use *_url helpers when mixing in AC::UrlFor" do
34
34
  get "promote"
35
35
  assert_response :success
36
- assert_equal "Find me at <a href=\"http://test.host/\">vd.com</a>\n", @response.body
36
+ assert_equal "Find me at <a href=\"http://test.host/musicians\">vd.com</a>\n", @response.body
37
37
  end
38
38
 
39
39
  should "allow cells to use #config" do
data/test/test_helper.rb CHANGED
@@ -4,15 +4,8 @@ require 'test/unit'
4
4
  require 'shoulda'
5
5
  require 'minitest/spec'
6
6
 
7
- # wycats says...
8
- require 'bundler'
9
- Bundler.setup
10
-
11
-
12
7
  ENV['RAILS_ENV'] = 'test'
13
8
 
14
- $:.unshift File.dirname(__FILE__) # add current dir to LOAD_PATHS
15
-
16
9
  require "dummy/config/environment"
17
10
  require "rails/test_help" # adds stuff like @routes, etc.
18
11
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 3
7
7
  - 8
8
- - 0
9
- version: 3.8.0
8
+ - 1
9
+ version: 3.8.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Nick Sutterer
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-12-21 00:00:00 +01:00
17
+ date: 2012-02-07 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -119,8 +119,10 @@ dependencies:
119
119
  - - ">="
120
120
  - !ruby/object:Gem::Version
121
121
  segments:
122
- - 0
123
- version: "0"
122
+ - 2
123
+ - 8
124
+ - 1
125
+ version: 2.8.1
124
126
  type: :development
125
127
  version_requirements: *id008
126
128
  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.
@@ -141,6 +143,9 @@ files:
141
143
  - Rakefile
142
144
  - about.yml
143
145
  - cells.gemspec
146
+ - gemfiles/Gemfile.rails3-0
147
+ - gemfiles/Gemfile.rails3-1
148
+ - gemfiles/Gemfile.rails3-2
144
149
  - lib/cell.rb
145
150
  - lib/cell/base.rb
146
151
  - lib/cell/builder.rb
@@ -153,6 +158,7 @@ files:
153
158
  - lib/cell/test_case.rb
154
159
  - lib/cells.rb
155
160
  - lib/cells/cells.rake
161
+ - lib/cells/engines.rb
156
162
  - lib/cells/rails.rb
157
163
  - lib/cells/railtie.rb
158
164
  - lib/cells/version.rb