active-component 0.0.9 → 0.1.0
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.
- checksums.yaml +4 -4
- data/lib/active_component.rb +1 -1
- data/lib/active_component/base.rb +2 -0
- data/lib/active_component/renderable.rb +34 -0
- data/lib/active_component/version.rb +1 -1
- data/test/active_component/base_test.rb +6 -0
- data/test/active_component/renderable_test.rb +25 -5
- metadata +2 -4
- data/test/support/foo_component.mustache +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b475c4c94a10c124c9e7f1abde4e94457bd676ff
|
4
|
+
data.tar.gz: 50687bf5b33b5d32d9d940014ff8410cf004ebcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d0c880b34ddcc2c3c400b77da985d125fc1347f7167408cd2a420eee984df6ebbdebad3c16bbeeb265d8f9139874bb36d2583734bd960e65f96c54cf272d530
|
7
|
+
data.tar.gz: fc09071da743121546495a67b5e638e452b78191cb60e41f4330f7950d1652a760f66bf9299707e1f6e56da34d435b32b13d774755bd22c16909cbc7c607a136
|
data/lib/active_component.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'mustache'
|
2
|
+
|
2
3
|
module ActiveComponent
|
3
4
|
#
|
4
5
|
# We inherit from mustache to have a default template engine
|
@@ -12,6 +13,7 @@ module ActiveComponent
|
|
12
13
|
# the rails conventions, especially with the asset pipeline.
|
13
14
|
#
|
14
15
|
include ActionView::Helpers::DateHelper
|
16
|
+
include ActiveComponent::Renderable
|
15
17
|
#
|
16
18
|
# Whenever the user creates a new object from a class inherited
|
17
19
|
# from ActiveComponent::Base it needs to define its attributes as
|
@@ -6,19 +6,53 @@ require 'active_support/concern'
|
|
6
6
|
#
|
7
7
|
# <%= render_component(:view, var: var) %>
|
8
8
|
#
|
9
|
+
# In addition to that you can render a collection of components using
|
10
|
+
# the same helper method
|
11
|
+
#
|
12
|
+
# <%= render_component(:view, collection: views, as: :view)%>
|
13
|
+
#
|
14
|
+
# The :as argument helps you to provide the instance variable name that
|
15
|
+
# you defined int your component class and it will be received like that.
|
16
|
+
#
|
9
17
|
module ActiveComponent
|
10
18
|
module Renderable
|
11
19
|
|
12
20
|
def render_component(type, args={})
|
21
|
+
raise_errors(type, args) if type.nil? or args.nil?
|
22
|
+
|
23
|
+
unless args[:collection].present?
|
24
|
+
template(type, args)
|
25
|
+
else
|
26
|
+
collection(type, args[:collection], args[:as])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def template(type, args)
|
13
33
|
resource = constantize("#{type.to_s}_component").new(args)
|
14
34
|
resource.render
|
15
35
|
end
|
16
36
|
|
37
|
+
def collection(type, collection, as)
|
38
|
+
error_string = "Attempting to render a collection without specifying the ':as' value"
|
39
|
+
raise ArgumentError, error_string if as.nil?
|
40
|
+
|
41
|
+
collection.map do |item|
|
42
|
+
template(type, as => item)
|
43
|
+
end.join('')
|
44
|
+
end
|
45
|
+
|
17
46
|
def constantize(type)
|
18
47
|
type = type.camelize.constantize
|
19
48
|
type
|
20
49
|
end
|
21
50
|
|
51
|
+
def raise_errors(type, args)
|
52
|
+
text = "Invalid arguments. Received: #{type.class}, #{args.class}. Expected: Symbol, Hash"
|
53
|
+
raise ArgumentError, text
|
54
|
+
end
|
55
|
+
|
22
56
|
end
|
23
57
|
end
|
24
58
|
|
@@ -27,4 +27,10 @@ class ActiveComponent::BaseTest < ActiveSupport::TestCase
|
|
27
27
|
assert_kind_of FooController, @foo.controller
|
28
28
|
end
|
29
29
|
|
30
|
+
test "has the action view helpers available" do
|
31
|
+
assert_nothing_raised Exception do
|
32
|
+
FooComponent.any_instance.stubs(:render).returns("")
|
33
|
+
@foo.render_component(:foo, :bar => "bar")
|
34
|
+
end
|
35
|
+
end
|
30
36
|
end
|
@@ -2,16 +2,36 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class ActiveComponent::RenderableTest < ActiveSupport::TestCase
|
4
4
|
|
5
|
+
setup do
|
6
|
+
FooComponent.any_instance.stubs(:render).returns("<div>hello!</div>")
|
7
|
+
@view = ActionView::Base.new
|
8
|
+
end
|
9
|
+
|
5
10
|
test "renders a component" do
|
6
|
-
|
7
|
-
|
8
|
-
ActionView::Base.new.render_component(:foo)
|
11
|
+
assert_nothing_raised Exception do
|
12
|
+
@view.render_component(:foo)
|
9
13
|
end
|
10
14
|
end
|
11
15
|
|
12
16
|
test "gets a component instance from symbol" do
|
13
|
-
|
14
|
-
|
17
|
+
assert_kind_of String, @view.render_component(:foo)
|
18
|
+
end
|
19
|
+
|
20
|
+
test "accepts only a symbol and a hash" do
|
21
|
+
assert_raise ArgumentError do
|
22
|
+
@view.render_component(nil, nil)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
test "it renders multiple components if receives a collection array" do
|
27
|
+
string = @view.render_component(:foo, :collection => [1,2], :as => :bar)
|
28
|
+
assert_equal "<div>hello!</div><div>hello!</div>", string
|
29
|
+
end
|
30
|
+
|
31
|
+
test "it raises an error if the given arguments didn't include the :as argument" do
|
32
|
+
assert_raise ArgumentError do
|
33
|
+
@view.render_component(:foo, :collection => [1,2])
|
34
|
+
end
|
15
35
|
end
|
16
36
|
|
17
37
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active-component
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antonio Chavez
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-10-
|
12
|
+
date: 2013-10-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -122,7 +122,6 @@ files:
|
|
122
122
|
- test/active_component_test.rb
|
123
123
|
- test/dummy/application.rb
|
124
124
|
- test/generators/component_generator_test.rb
|
125
|
-
- test/support/foo_component.mustache
|
126
125
|
- test/support/foo_component.rb
|
127
126
|
- test/support/foo_controller.rb
|
128
127
|
- test/test_helper.rb
|
@@ -158,7 +157,6 @@ test_files:
|
|
158
157
|
- test/active_component_test.rb
|
159
158
|
- test/dummy/application.rb
|
160
159
|
- test/generators/component_generator_test.rb
|
161
|
-
- test/support/foo_component.mustache
|
162
160
|
- test/support/foo_component.rb
|
163
161
|
- test/support/foo_controller.rb
|
164
162
|
- test/test_helper.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
|