cells 3.9.0 → 3.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGES.textile +5 -0
  4. data/README.md +14 -1
  5. data/cells.gemspec +2 -1
  6. data/gemfiles/Gemfile.rails3-0 +1 -0
  7. data/gemfiles/Gemfile.rails3-1 +1 -0
  8. data/gemfiles/Gemfile.rails3-2 +1 -0
  9. data/gemfiles/Gemfile.rails4-0 +5 -2
  10. data/gemfiles/Gemfile.rails4-1 +10 -0
  11. data/lib/cell/base.rb +23 -13
  12. data/lib/cell/rails/view_model.rb +3 -3
  13. data/lib/cell/rails3_0_strategy.rb +11 -9
  14. data/lib/cell/rails3_1_strategy.rb +9 -7
  15. data/lib/cell/rails4_0_strategy.rb +9 -8
  16. data/lib/cell/rails4_1_strategy.rb +40 -0
  17. data/lib/cell/test_case.rb +10 -0
  18. data/lib/cells/engines.rb +13 -11
  19. data/lib/cells/version.rb +1 -1
  20. data/lib/generators/cells/base.rb +4 -2
  21. data/test/app/cells/bassist_cell.rb +9 -0
  22. data/test/cell_generator_test.rb +5 -0
  23. data/test/cell_module_test.rb +6 -1
  24. data/test/cells_module_test.rb +4 -4
  25. data/test/deprecations_test.rb +23 -17
  26. data/test/dummy/label/app/cells/label/show.erb +1 -0
  27. data/test/dummy/label/app/cells/label_cell.rb +5 -0
  28. data/test/dummy/label/label.gemspec +20 -0
  29. data/test/dummy/label/lib/label.rb +4 -0
  30. data/test/dummy/label/lib/label/version.rb +3 -0
  31. data/test/helper_test.rb +1 -1
  32. data/test/rails/caching_test.rb +1 -1
  33. data/test/rails/cells_test.rb +2 -2
  34. data/test/rails/integration_test.rb +12 -0
  35. data/test/rails/render_test.rb +42 -45
  36. data/test/rails/router_test.rb +29 -34
  37. data/test/rails/view_model_test.rb +6 -5
  38. data/test/rails/view_test.rb +4 -4
  39. data/test/test_case_test.rb +119 -113
  40. data/test/test_helper.rb +13 -1
  41. metadata +25 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5f0e0a0f0e9e01a740baa8dcabe12f82876ca1ef
4
- data.tar.gz: a0a66d1ecd8e09265efc3a8c5fe7e293bc8df5d1
3
+ metadata.gz: f2a369ee523b519082124fc42f359172124f6e45
4
+ data.tar.gz: bc788476880fec68c6134ab8111f5ea62d519b26
5
5
  SHA512:
6
- metadata.gz: 33577d3b2e94dde50fb8f68ff2695fbaa1dbc73a04fb839fbb14e4ca215f83d01b854ec57454cf75488210a2ef8060312cdfc9ae865ece439af2fd84ab4df111
7
- data.tar.gz: 7c03b94c1a6dee95e672a0411025e9fa7afb6414d4a3c43a4038b70e45f381f4bde3d9cf66a2364f953ef381b27220af690da67685f5aaddb8be8e09d4f3a4c0
6
+ metadata.gz: 54a6bbc71fd9fadae7fd54a940bf1c160b9675e03eff6b2320f5dd4c590fc22229f692e6f7db77b06ed3c64ef09186cee732cbda52e7a6c55295a7c46dfea7c0
7
+ data.tar.gz: 2271f4d6188a31b7b2c64617fffaf83adc30c8c3cff7c18124072fb8aff1c03c5f3fb267b87cf313099eb5a70c21571bd35a5f324428c632ab7319a61bbd188a
data/.travis.yml CHANGED
@@ -9,3 +9,4 @@ gemfile:
9
9
  - gemfiles/Gemfile.rails3-1
10
10
  - gemfiles/Gemfile.rails3-2
11
11
  - gemfiles/Gemfile.rails4-0
12
+ - gemfiles/Gemfile.rails4-1
data/CHANGES.textile CHANGED
@@ -1,3 +1,8 @@
1
+ h2. 3.9.1
2
+
3
+ * Runs with Rails 4.1 now.
4
+ * Internal changes on `Layouts` to prepare 4.1 compat.
5
+
1
6
  h2. 3.9.0
2
7
 
3
8
  * Cells in engines are now recognized under Rails 4.0.
data/README.md CHANGED
@@ -367,10 +367,13 @@ Note that this currently "only" works with Rails 3.2-4.0.
367
367
 
368
368
  Now `Rails::Engine`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 `'app/cell_views'` path configuration. See the `Cell::EngineIntegration` for more details.
369
369
 
370
- ## Generators
370
+
371
+ ## Generator Options
371
372
 
372
373
  By default, generated cells inherit from `Cell::Rails`. If you want to change this, specify your new class name in `config/application.rb`:
373
374
 
375
+ ### Base Class
376
+
374
377
  ```ruby
375
378
  module MyApp
376
379
  class Application < Rails::Application
@@ -381,6 +384,16 @@ module MyApp
381
384
  end
382
385
  ```
383
386
 
387
+ ### Base Path
388
+
389
+ You can configure the cells path in case your cells don't reside in `app/cells`.
390
+
391
+ ```ruby
392
+ config.generators do |g|
393
+ g.base_cell_path "app/widgets"
394
+ end
395
+ ```
396
+
384
397
  ## Rails 2.3 note
385
398
 
386
399
  In order to copy the cells rake tasks to your app, run
data/cells.gemspec CHANGED
@@ -26,5 +26,6 @@ Gem::Specification.new do |s|
26
26
  s.add_development_dependency "haml"
27
27
  s.add_development_dependency "slim"
28
28
  s.add_development_dependency "tzinfo" # FIXME: why the hell do we need this for 3.1?
29
- s.add_development_dependency "minitest", "~> 4.7.5"
29
+ s.add_development_dependency "minitest", ">= 4.7.5"
30
+ s.add_development_dependency "activemodel"
30
31
  end
@@ -4,3 +4,4 @@ source "http://rubygems.org"
4
4
  gemspec path: '../'
5
5
 
6
6
  gem 'railties', '3.0.20'
7
+ gem 'minitest', '4.7.5'
@@ -4,3 +4,4 @@ source "http://rubygems.org"
4
4
  gemspec path: '../'
5
5
 
6
6
  gem 'railties', '~> 3.1.0'
7
+ gem 'minitest', '4.7.5'
@@ -4,3 +4,4 @@ source "http://rubygems.org"
4
4
  gemspec path: '../'
5
5
 
6
6
  gem 'railties', '~> 3.2.0'
7
+ gem 'minitest', '4.7.5'
@@ -3,5 +3,8 @@ source "http://rubygems.org"
3
3
  # Specify your gem's dependencies in cells.gemspec
4
4
  gemspec path: '../'
5
5
 
6
- gem 'railties', '4.0.0'
7
- gem 'activemodel'
6
+ gem 'railties', '4.0.2'
7
+ gem 'activemodel', '4.0.2'
8
+ gem 'minitest', '4.7.5'
9
+
10
+ gem 'label', :path => "../test/dummy/label"
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in cells.gemspec
4
+ gemspec path: '../'
5
+
6
+ gem 'railties', '4.1.0.beta1'
7
+ gem 'activemodel', '4.1.0.beta1'
8
+ gem 'minitest', '5.2.0'
9
+
10
+ gem 'label', :path => "../test/dummy/label"
data/lib/cell/base.rb CHANGED
@@ -5,21 +5,29 @@ require 'cell/rendering'
5
5
  require 'cell/dsl'
6
6
 
7
7
  module Cell
8
- def self.rails3_0?
9
- ::ActionPack::VERSION::MAJOR == 3 and ::ActionPack::VERSION::MINOR == 0
10
- end
8
+ module RailsVersion
9
+ def rails3_0?
10
+ ::ActionPack::VERSION::MAJOR == 3 and ::ActionPack::VERSION::MINOR == 0
11
+ end
11
12
 
12
- def self.rails3_1_or_more?
13
- (::ActionPack::VERSION::MAJOR == 3 and ::ActionPack::VERSION::MINOR >= 1) or ::ActionPack::VERSION::MAJOR > 3
14
- end
13
+ def rails3_1_or_more?
14
+ (::ActionPack::VERSION::MAJOR == 3 and ::ActionPack::VERSION::MINOR >= 1)
15
+ end
15
16
 
16
- def self.rails3_2_or_more?
17
- (::ActionPack::VERSION::MAJOR == 3 and ::ActionPack::VERSION::MINOR >= 2) or ::ActionPack::VERSION::MAJOR > 3
18
- end
17
+ def rails3_2_or_more?
18
+ (::ActionPack::VERSION::MAJOR == 3 and ::ActionPack::VERSION::MINOR >= 2)
19
+ end
20
+
21
+ def rails4_0?
22
+ ::ActionPack::VERSION::MAJOR == 4 and ::ActionPack::VERSION::MINOR == 0
23
+ end
19
24
 
20
- def self.rails4_0_or_more?
21
- (::ActionPack::VERSION::MAJOR == 4 and ::ActionPack::VERSION::MINOR >= 0) or ::ActionPack::VERSION::MAJOR > 4
25
+ def rails4_1_or_more?
26
+ (::ActionPack::VERSION::MAJOR == 4 and ::ActionPack::VERSION::MINOR >= 1) or ::ActionPack::VERSION::MAJOR > 4
27
+ end
28
+ alias_method :rails4_1?, :rails4_1_or_more?
22
29
  end
30
+ extend RailsVersion # TODO: deprecate in 3.10.
23
31
 
24
32
 
25
33
  class Base < AbstractController::Base
@@ -30,12 +38,14 @@ module Cell
30
38
 
31
39
  extend Builder
32
40
  include AbstractController
33
- include AbstractController::Rendering, Layouts, Helpers, Callbacks, Translation, Logger
41
+ include AbstractController::Rendering, Helpers, Callbacks, Translation, Logger
34
42
 
35
43
  require 'cell/rails3_0_strategy' if Cell.rails3_0?
36
44
  require 'cell/rails3_1_strategy' if Cell.rails3_1_or_more?
37
- require 'cell/rails4_0_strategy' if Cell.rails4_0_or_more?
45
+ require 'cell/rails4_0_strategy' if Cell.rails4_0?
46
+ require 'cell/rails4_1_strategy' if Cell.rails4_1_or_more?
38
47
  include VersionStrategy
48
+ include Layouts
39
49
  include Rendering
40
50
  include Caching
41
51
  include Cell::DSL
@@ -12,8 +12,8 @@ class Cell::Rails
12
12
  attr_reader :model
13
13
 
14
14
  module ClassMethods
15
- def property(name)
16
- delegate name, :to => :model
15
+ def property(*names)
16
+ delegate *names, :to => :model
17
17
  end
18
18
  end
19
19
  extend ActiveSupport::Concern
@@ -106,7 +106,7 @@ class Cell::Rails
106
106
  end
107
107
 
108
108
  # FIXME: fix that in rails core.
109
- if Cell.rails4_0_or_more?
109
+ if Cell.rails4_0?
110
110
  include LinkToHelper
111
111
  else
112
112
  include ActionView::Helpers::UrlHelper
@@ -1,21 +1,23 @@
1
1
  # This file contains VersionStrategies for the Cell and Cells module for Rails 3.0.
2
2
  module Cell
3
+ Layouts = AbstractController::Layouts
4
+
3
5
  # Methods to be included in Cell::Rails in 3.0 context, where there's no view inheritance.
4
6
  module VersionStrategy
5
7
  extend ActiveSupport::Concern
6
-
8
+
7
9
  class MissingTemplate < ActionView::ActionViewError
8
10
  def initialize(message, possible_paths)
9
11
  super(message + " and possible paths #{possible_paths}")
10
12
  end
11
13
  end
12
-
13
-
14
+
15
+
14
16
  module ClassMethods
15
17
  def helper_modules
16
18
  [_helpers, _routes.url_helpers]
17
19
  end
18
-
20
+
19
21
  # Return the default view path for +state+. Override this if you cell has a differing naming style.
20
22
  def view_for_state(state)
21
23
  "#{cell_name}/#{state}"
@@ -33,13 +35,13 @@ module Cell
33
35
  controller_path
34
36
  end
35
37
  end
36
-
38
+
37
39
  private
38
40
  # Computes all possible paths for +state+ by traversing up the inheritance chain.
39
41
  def possible_paths_for_state(state)
40
42
  self.class.find_class_view_for_state(state).reverse!
41
43
  end
42
-
44
+
43
45
  # Climbs up the inheritance chain, looking for a view for the current +state+.
44
46
  def find_family_view_for_state(state)
45
47
  exception = nil
@@ -55,10 +57,10 @@ module Cell
55
57
 
56
58
  raise MissingTemplate.new(exception.message, possible_paths)
57
59
  end
58
-
60
+
59
61
  def process_opts_for(opts, state)
60
62
  lookup_context.formats = opts.delete(:format) if opts[:format]
61
-
63
+
62
64
  opts[:template] = find_family_view_for_state(opts.delete(:view) || state)
63
65
  end
64
66
  end
@@ -71,7 +73,7 @@ module Cells
71
73
  def registered_engines
72
74
  ::Rails.application.railties.engines
73
75
  end
74
-
76
+
75
77
  def existent_directories_for(path)
76
78
  path.to_a.select { |d| File.directory?(d) }
77
79
  end
@@ -1,22 +1,24 @@
1
1
  # This file contains VersionStrategies for the Cell and Cells module for Rails >= 3.1.
2
2
  module Cell
3
+ Layouts = AbstractController::Layouts
4
+
3
5
  # Methods to be included in Cell::Rails in 3.1 context.
4
6
  module VersionStrategy
5
7
  extend ActiveSupport::Concern
6
-
8
+
7
9
  include AbstractController::UrlFor # must be included before _routes is set in Railstie. # TODO: remove that.
8
-
9
-
10
+
11
+
10
12
  module ClassMethods
11
13
  def helper_modules
12
14
  [_routes.url_helpers, _routes.mounted_helpers, _helpers]
13
15
  end
14
16
  end
15
-
16
- private
17
+
18
+ private
17
19
  def process_opts_for(opts, state)
18
20
  opts[:action] = opts[:view] || state
19
-
21
+
20
22
  lookup_context.formats = [opts.delete(:format)] if opts[:format]
21
23
  end
22
24
  end
@@ -29,7 +31,7 @@ module Cells
29
31
  def registered_engines
30
32
  ::Rails.application.railties.engines
31
33
  end
32
-
34
+
33
35
  def existent_directories_for(path)
34
36
  path.existent_directories
35
37
  end
@@ -1,22 +1,23 @@
1
- # This file contains VersionStrategies for the Cell and Cells module for Rails >= 3.1.
2
1
  module Cell
2
+ Layouts = AbstractController::Layouts
3
+
3
4
  # Methods to be included in Cell::Rails in 3.1 context.
4
5
  module VersionStrategy
5
6
  extend ActiveSupport::Concern
6
-
7
+
7
8
  include AbstractController::UrlFor # must be included before _routes is set in Railstie. # TODO: remove that.
8
-
9
-
9
+
10
+
10
11
  module ClassMethods
11
12
  def helper_modules
12
13
  [_routes.url_helpers, _routes.mounted_helpers, _helpers]
13
14
  end
14
15
  end
15
-
16
- private
16
+
17
+ private
17
18
  def process_opts_for(opts, state)
18
19
  opts[:action] = opts[:view] || state
19
-
20
+
20
21
  lookup_context.formats = [opts.delete(:format)] if opts[:format]
21
22
  end
22
23
  end
@@ -29,7 +30,7 @@ module Cells
29
30
  def registered_engines
30
31
  ::Rails::Engine::Railties.engines
31
32
  end
32
-
33
+
33
34
  def existent_directories_for(path)
34
35
  path.existent_directories
35
36
  end
@@ -0,0 +1,40 @@
1
+ # This file contains VersionStrategies for the Cell and Cells module for Rails >= 3.1.
2
+ module Cell
3
+ Layouts = ActionView::Layouts
4
+
5
+ # Methods to be included in Cell::Rails in 3.1 context.
6
+ module VersionStrategy
7
+ extend ActiveSupport::Concern
8
+
9
+ include AbstractController::UrlFor # must be included before _routes is set in Railstie. # TODO: remove that.
10
+
11
+
12
+ module ClassMethods
13
+ def helper_modules
14
+ [_routes.url_helpers, _routes.mounted_helpers, _helpers]
15
+ end
16
+ end
17
+
18
+ private
19
+ def process_opts_for(opts, state)
20
+ opts[:action] = opts[:view] || state
21
+
22
+ lookup_context.formats = [opts.delete(:format)] if opts[:format]
23
+ end
24
+ end
25
+ end
26
+
27
+
28
+ module Cells
29
+ module Engines
30
+ module VersionStrategy
31
+ def registered_engines
32
+ ::Rails::Engine::Railties.new
33
+ end
34
+
35
+ def existent_directories_for(path)
36
+ path.existent_directories
37
+ end
38
+ end
39
+ end
40
+ end
@@ -149,5 +149,15 @@ module Cell
149
149
  def invoke(state, *args)
150
150
  @last_invoke = self.class.controller_class.new(@controller).render_state(state, *args)
151
151
  end
152
+
153
+ if Cell.rails4_0? or Cell.rails4_1?
154
+ include ActiveSupport::Testing::ConstantLookup
155
+ def self.determine_default_controller_class(name) # FIXME: fix that in Rails 4.x.
156
+ determine_constant_from_test_name(name) do |constant|
157
+ Class === constant #&& constant < ActionController::Metal
158
+ end
159
+ end
160
+ end
161
+
152
162
  end
153
163
  end
data/lib/cells/engines.rb CHANGED
@@ -3,38 +3,38 @@ module Cells
3
3
  # By default, any 'app/cells' found inside any Engine is automatically included into Cells view paths.
4
4
  #
5
5
  # You can customize the view paths changing/appending to the <tt>'app/cell_views'</tt> path configuration:
6
- #
6
+ #
7
7
  # module MyAwesome
8
8
  # class Engine < Rails::Engine
9
9
  # # loads views from 'cell/views' and NOT from 'app/cells'
10
10
  # config.paths.add 'app/cell_views', :with => 'cell/views'
11
- #
11
+ #
12
12
  # # appends 'lib/my_cells_view_path' to this Railtie view path contribution
13
13
  # config.paths['app/cell_views'] << 'lib/my_cells_view_path'
14
14
  # end
15
15
  # end
16
- #
16
+ #
17
17
  # You can manually specify which Engines will be added to Cell view paths
18
- #
18
+ #
19
19
  # Cell::Base.config.view_path_engines = [MyAwesome::Engine]
20
- #
20
+ #
21
21
  # And even disable the automatic loading
22
- #
22
+ #
23
23
  # Cell::Base.config.view_path_engines = false
24
- #
24
+ #
25
25
  # You can programatically append a Rails::Engine to Cell view path
26
- #
26
+ #
27
27
  # Cells.setup do |config|
28
28
  # config.append_engine_view_path!(MyEngine::Engine)
29
29
  # end
30
30
  #
31
31
  module Engines
32
32
  extend VersionStrategy # adds #registered_engines and #existent_directories_for.
33
-
33
+
34
34
  # Appends all <tt>Rails::Engine</tt>s cell-views path to Cell::Base#view_paths
35
- #
35
+ #
36
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
- #
37
+ #
38
38
  # Defaults <tt>config.view_path_engines</tt> to all loaded <tt>Rails::Engine</tt>s.
39
39
  #
40
40
  def self.append_engines_view_paths_for(config)
@@ -52,6 +52,8 @@ module Cells
52
52
  # Defaults <tt>paths['app/cell_views']</tt> to 'app/cells'
53
53
  #
54
54
  def self.append_engine_view_path!(engine)
55
+ return unless engine.is_a?(::Rails::Engine) # In Rails 4.1, this could be a Rails::Railtie, which doesn't make sense.
56
+
55
57
  engine.paths['app/cell_views'] || engine.paths.add('app/cell_views', :with => 'app/cells')
56
58
  Cell::Rails.append_view_path(existent_directories_for(engine.paths["app/cell_views"]))
57
59
  end