cells 4.1.1 → 4.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -5
- data/CHANGES.md +4 -0
- data/README.md +5 -20
- data/Rakefile +5 -1
- data/lib/cell/collection.rb +13 -8
- data/lib/cell/templates.rb +1 -1
- data/lib/cell/testing.rb +6 -11
- data/lib/cell/util.rb +5 -5
- data/lib/cell/version.rb +1 -1
- data/test/concept_test.rb +4 -2
- data/test/public_test.rb +13 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 564e33d0ca30ee7280dd4362eca2cf8f57298836
|
4
|
+
data.tar.gz: 3178f06f6211191be74553cf806ae98f5e3017b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af0bdc4bf3a5c1b69e94ca1527cc476f836f309eff8d607645204f37cbabe86f612423ba25706328a3f7655dcee054fb575b96a9f9595ee7eada52fb61d4f569
|
7
|
+
data.tar.gz: 41098667ace56a3ce85bf588577c7ef7e7e3567804ea64d3df316d48d78b0855f3f32ef81774d075586c24c2ec9d23ddcce0e483708c83ddb9966a1d14a1b5d3
|
data/.travis.yml
CHANGED
data/CHANGES.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## 4.1.2
|
2
|
+
|
3
|
+
* Testing with Rails 5 now works, by removing code the last piece of Rails-code (I know, it sounds bizarre).
|
4
|
+
|
1
5
|
## 4.1.1
|
2
6
|
|
3
7
|
* Fix rendering of `Collection` where in some environments (Rails), the overridden `#call` method wouldn't work and strings would be escaped.
|
data/README.md
CHANGED
@@ -149,7 +149,7 @@ It is completely up to you how you test, whether it's RSpec, MiniTest or whateve
|
|
149
149
|
|
150
150
|
## Properties
|
151
151
|
|
152
|
-
The cell's model is available via the `model` reader. You can have automatic readers to the model's fields by
|
152
|
+
The cell's model is available via the `model` reader. You can have automatic readers to the model's fields by using `::property`.
|
153
153
|
|
154
154
|
```ruby
|
155
155
|
class CommentCell < Cell::ViewModel
|
@@ -349,22 +349,14 @@ comments = Comment.all #=> three comments.
|
|
349
349
|
cell(:comment, collection: comments).()
|
350
350
|
```
|
351
351
|
|
352
|
-
This will invoke `cell(:comment, comment).()` three times and concatenate the rendered output automatically.
|
352
|
+
This will invoke `cell(:comment, comment).()` three times and concatenate the rendered output automatically.
|
353
353
|
|
354
|
-
|
355
|
-
cell(:comment, collection: comments).(:list)
|
356
|
-
```
|
357
|
-
Additional options are passed to every cell constructor.
|
354
|
+
Learn more [about collections here](http://trailblazer.to/gems/cells/api.html#collection).
|
358
355
|
|
359
|
-
```ruby
|
360
|
-
cell(:comment, collection: comments, style: "awesome", volume: "loud").()
|
361
|
-
```
|
362
356
|
|
363
357
|
## Builder
|
364
358
|
|
365
|
-
|
366
|
-
|
367
|
-
Builders allow instantiating different cell classes for different models and options.
|
359
|
+
Builders allow instantiating different cell classes for different models and options. They introduce polymorphism into cells.
|
368
360
|
|
369
361
|
```ruby
|
370
362
|
class CommentCell < Cell::ViewModel
|
@@ -380,14 +372,7 @@ The `#cell` helper takes care of instantiating the right cell class for you.
|
|
380
372
|
cell(:comment, Post.find(1)) #=> creates a PostCell.
|
381
373
|
```
|
382
374
|
|
383
|
-
|
384
|
-
|
385
|
-
```ruby
|
386
|
-
cell(:comment, collection: [@post, @comment]) #=> renders PostCell, then CommentCell.
|
387
|
-
```
|
388
|
-
|
389
|
-
Multiple calls to `::builds` will be ORed. If no block returns a class, the original class will be used (`CommentCell`). Builders are inherited.
|
390
|
-
|
375
|
+
Learn more [about builders here](http://trailblazer.to/gems/cells/api.html#builder).
|
391
376
|
|
392
377
|
## Caching
|
393
378
|
|
data/Rakefile
CHANGED
@@ -10,6 +10,10 @@ Rake::TestTask.new(:test) do |test|
|
|
10
10
|
test.libs << 'test'
|
11
11
|
test.pattern = 'test/*_test.rb'
|
12
12
|
test.verbose = true
|
13
|
+
# Ruby built-in warnings contain way too much noise to be useful. Consider turning them on again when the following issues are accepted in ruby:
|
14
|
+
# * https://bugs.ruby-lang.org/issues/10967 (remove warning: private attribute?)
|
15
|
+
# * https://bugs.ruby-lang.org/issues/12299 (customized warning handling)
|
16
|
+
test.warning = false
|
13
17
|
end
|
14
18
|
|
15
19
|
# Rake::TestTask.new(:rails) do |test|
|
@@ -21,4 +25,4 @@ end
|
|
21
25
|
# rails_task = Rake::Task["rails"]
|
22
26
|
# test_task = Rake::Task["test"]
|
23
27
|
# default_task.enhance { test_task.invoke }
|
24
|
-
# default_task.enhance { rails_task.invoke }
|
28
|
+
# default_task.enhance { rails_task.invoke }
|
data/lib/cell/collection.rb
CHANGED
@@ -2,25 +2,23 @@ module Cell
|
|
2
2
|
class Collection
|
3
3
|
def initialize(ary, options, cell_class)
|
4
4
|
options.delete(:collection)
|
5
|
-
|
6
|
-
@join = options.delete(:collection_join) # TODO: remove in 5.0.
|
5
|
+
set_deprecated_options(options) # TODO: remove in 5.0.
|
7
6
|
|
8
7
|
@ary = ary
|
9
8
|
@options = options
|
10
9
|
@cell_class = cell_class
|
11
|
-
|
12
|
-
deprecate_options!
|
13
10
|
end
|
14
11
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
12
|
+
def set_deprecated_options(options) # TODO: remove in 5.0.
|
13
|
+
self.method = options.delete(:method) if options.include?(:method)
|
14
|
+
self.collection_join = options.delete(:collection_join) if options.include?(:collection_join)
|
18
15
|
end
|
19
16
|
|
20
17
|
module Call
|
21
18
|
def call(state=:show)
|
22
|
-
join(
|
19
|
+
join(collection_join) { |cell, i| cell.(method || state) }
|
23
20
|
end
|
21
|
+
|
24
22
|
end
|
25
23
|
include Call
|
26
24
|
|
@@ -48,6 +46,13 @@ module Cell
|
|
48
46
|
end
|
49
47
|
include Layout
|
50
48
|
|
49
|
+
# TODO: remove in 5.0.
|
50
|
+
private
|
51
|
+
attr_accessor :collection_join, :method
|
52
|
+
|
53
|
+
extend Gem::Deprecate
|
54
|
+
deprecate :method=, "`call(method)` as documented here: http://trailblazer.to/gems/cells/api.html#collection", 2016, 7
|
55
|
+
deprecate :collection_join=, "`join(\"<br>\")` as documented here: http://trailblazer.to/gems/cells/api.html#collection", 2016, 7
|
51
56
|
end
|
52
57
|
end
|
53
58
|
|
data/lib/cell/templates.rb
CHANGED
@@ -21,7 +21,7 @@ module Cell
|
|
21
21
|
|
22
22
|
def create(prefix, view, options)
|
23
23
|
# puts "...checking #{prefix}/#{view}"
|
24
|
-
return unless File.
|
24
|
+
return unless File.exist?("#{prefix}/#{view}") # DISCUSS: can we use Tilt.new here?
|
25
25
|
|
26
26
|
template_class = options.delete(:template_class)
|
27
27
|
template_class.new("#{prefix}/#{view}", options) # Tilt.new()
|
data/lib/cell/testing.rb
CHANGED
@@ -46,17 +46,13 @@ module Cell
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
return unless controller_class
|
54
|
-
|
55
|
-
controller_class.new.tap do |ctl|
|
56
|
-
ctl.request = ::ActionController::TestRequest.new
|
57
|
-
ctl.instance_variable_set :@routes, ::Rails.application.routes.url_helpers
|
49
|
+
module ControllerFor
|
50
|
+
# This method is provided by the cells-rails gem.
|
51
|
+
def controller_for(controller_class)
|
52
|
+
# raise "[Cells] Please install (or update?) the cells-rails gem."
|
58
53
|
end
|
59
54
|
end
|
55
|
+
include ControllerFor
|
60
56
|
|
61
57
|
def controller # FIXME: this won't allow us using let(:controller) in MiniTest.
|
62
58
|
controller_for(self.class.controller_class)
|
@@ -72,6 +68,5 @@ module Cell
|
|
72
68
|
end
|
73
69
|
end
|
74
70
|
end
|
75
|
-
|
76
|
-
end
|
71
|
+
end # Testing
|
77
72
|
end
|
data/lib/cell/util.rb
CHANGED
@@ -15,11 +15,11 @@ module Cell::Util
|
|
15
15
|
|
16
16
|
# WARNING: this API might change.
|
17
17
|
def self.constant_for(name)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
class_name = name.split("/").collect do |part|
|
19
|
+
part.split('_').collect(&:capitalize).join
|
20
|
+
end.join('::')
|
21
|
+
|
22
|
+
Object.const_get(class_name)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/lib/cell/version.rb
CHANGED
data/test/concept_test.rb
CHANGED
@@ -79,7 +79,9 @@ class ConceptTest < MiniTest::Spec
|
|
79
79
|
it { Cell::Concept.cell("record/cell", nil, context: { controller: Object }).cell("record/cell", nil).must_be_instance_of Record::Cell }
|
80
80
|
it { Cell::Concept.cell("record/cell", nil, context: { controller: Object }).concept("record/cell", nil, tracks: 24).(:description).must_equal "A Tribute To Rancid, with 24 songs! [{:controller=>Object}]" }
|
81
81
|
# concept(.., collection: ..)
|
82
|
-
it
|
83
|
-
|
82
|
+
it do
|
83
|
+
Cell::Concept.cell("record/cell", nil, context: { controller: Object }).
|
84
|
+
concept("record/cell", collection: [1,2], tracks: 24).(:description).must_equal "A Tribute To Rancid, with 24 songs! [{:controller=>Object}]A Tribute To Rancid, with 24 songs! [{:controller=>Object}]"
|
85
|
+
end
|
84
86
|
end
|
85
87
|
end
|
data/test/public_test.rb
CHANGED
@@ -34,15 +34,26 @@ class PublicTest < MiniTest::Spec
|
|
34
34
|
# ViewModel.cell(collection: []) renders cells.
|
35
35
|
it { Cell::ViewModel.cell("public_test/song", collection: [Object, Module]).to_s.must_equal '[Object, {}][Module, {}]' }
|
36
36
|
|
37
|
+
# DISCUSS: should cell.() be the default?
|
37
38
|
# ViewModel.cell(collection: []) renders cells with custom join.
|
38
|
-
it
|
39
|
+
it do
|
40
|
+
Gem::Deprecate::skip_during do
|
41
|
+
Cell::ViewModel.cell("public_test/song", collection: [Object, Module]).join('<br/>') do |cell|
|
42
|
+
cell.()
|
43
|
+
end.must_equal '[Object, {}]<br/>[Module, {}]'
|
44
|
+
end
|
45
|
+
end
|
39
46
|
|
40
47
|
# ViewModel.cell(collection: []) passes generic options to cell.
|
41
48
|
it { Cell::ViewModel.cell("public_test/song", collection: [Object, Module], genre: 'Metal', context: { ready: true }).to_s.must_equal "[Object, {:genre=>\"Metal\", :context=>{:ready=>true}}][Module, {:genre=>\"Metal\", :context=>{:ready=>true}}]" }
|
42
49
|
|
43
50
|
# ViewModel.cell(collection: [], method: :detail) invokes #detail instead of #show.
|
44
51
|
# TODO: remove in 5.0.
|
45
|
-
it
|
52
|
+
it do
|
53
|
+
Gem::Deprecate::skip_during do
|
54
|
+
Cell::ViewModel.cell("public_test/song", collection: [Object, Module], method: :detail).to_s.must_equal '* [Object, {}]* [Module, {}]'
|
55
|
+
end
|
56
|
+
end
|
46
57
|
|
47
58
|
# ViewModel.cell(collection: []).() invokes #show.
|
48
59
|
it { Cell::ViewModel.cell("public_test/song", collection: [Object, Module]).().must_equal '[Object, {}][Module, {}]' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cells
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uber
|