rafters 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rafters/component.rb +20 -0
- data/lib/rafters/component_context.rb +15 -15
- data/lib/rafters/component_renderer.rb +12 -4
- data/lib/rafters/version.rb +1 -1
- data/spec/dummy/app/components/post/views/post_component.html.erb +1 -1
- data/spec/dummy/app/components/posts/views/posts_component.html.erb +1 -1
- data/spec/dummy/app/views/posts/index.html.erb +1 -1
- data/spec/rafters/component_renderer_spec.rb +13 -4
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2b8a73a896bfba469e100d5a3c02490ef024d28a
|
4
|
+
data.tar.gz: 7cf3fb207afc711be5d5f926232ec8be6eed1c3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c8b02e99d48f53ff3a3674811798af36b477773969488c2f80e93fd843c73b39a29761c6b140dbff5ffb8cd96c75971361dc640043d7924975972536001e7e2
|
7
|
+
data.tar.gz: 87f68f5526e6766ac70793ef96db2d38bbd0defde239717a47e188dbe27979d7f373a58b8782d06449f458cb61d7697fabb0b17ad9385e849ccfbe4a47dcd04d
|
data/lib/rafters/component.rb
CHANGED
@@ -11,6 +11,14 @@ module Rafters::Component
|
|
11
11
|
@settings = settings
|
12
12
|
end
|
13
13
|
|
14
|
+
def name
|
15
|
+
self.class.name.underscore
|
16
|
+
end
|
17
|
+
|
18
|
+
def identifier
|
19
|
+
@identifier ||= "#{name}-#{random_identifier}"
|
20
|
+
end
|
21
|
+
|
14
22
|
def template_name
|
15
23
|
@_template_name ||= begin
|
16
24
|
_template_name = (self.class._template_name || self.class.name.underscore)
|
@@ -43,8 +51,20 @@ module Rafters::Component
|
|
43
51
|
end
|
44
52
|
end
|
45
53
|
|
54
|
+
def as_json
|
55
|
+
{ identifier => { "class" => self.class.name, "attributes" => attributes.as_json } }
|
56
|
+
end
|
57
|
+
|
46
58
|
private
|
47
59
|
|
60
|
+
def random_seed
|
61
|
+
rand(DateTime.now.to_i).to_s
|
62
|
+
end
|
63
|
+
|
64
|
+
def random_identifier
|
65
|
+
Digest::MD5.hexdigest(random_seed)[0..6]
|
66
|
+
end
|
67
|
+
|
48
68
|
module ClassMethods
|
49
69
|
attr_accessor :_attributes, :_defaults, :_template_name
|
50
70
|
|
@@ -2,20 +2,20 @@ module Rafters::ComponentContext
|
|
2
2
|
extend ActiveSupport::Concern
|
3
3
|
|
4
4
|
included do
|
5
|
+
attr_accessor :rendered_components
|
6
|
+
helper_method :rendered_components
|
5
7
|
helper_method :render_component
|
6
8
|
alias_method_chain :render, :component
|
7
9
|
end
|
8
10
|
|
9
|
-
def
|
10
|
-
|
11
|
-
component
|
12
|
-
component_renderer.render(component, template_name)
|
11
|
+
def component_attributes(name, settings = {})
|
12
|
+
component = component(name, settings)
|
13
|
+
component.as_json
|
13
14
|
end
|
14
15
|
|
15
|
-
def
|
16
|
-
|
17
|
-
component
|
18
|
-
{ :"#{name}" => component.attributes }.as_json
|
16
|
+
def render_component(name, settings = {}, template_name = nil)
|
17
|
+
component = component(name, settings)
|
18
|
+
component_renderer.render(component, template_name)
|
19
19
|
end
|
20
20
|
|
21
21
|
def render_with_component(*args, &block)
|
@@ -23,13 +23,8 @@ module Rafters::ComponentContext
|
|
23
23
|
component, settings = params[:component], params[:settings]
|
24
24
|
|
25
25
|
respond_to do |format|
|
26
|
-
format.html
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
format.json do
|
31
|
-
render_without_component(json: render_component_attributes(component, settings)) and return
|
32
|
-
end
|
26
|
+
format.html { render_without_component(text: render_component(component, settings)) }
|
27
|
+
format.json { render_without_component(json: component_attributes(component, settings)) }
|
33
28
|
end
|
34
29
|
else
|
35
30
|
render_without_component(*args, &block)
|
@@ -41,4 +36,9 @@ module Rafters::ComponentContext
|
|
41
36
|
def component_renderer
|
42
37
|
@_component_renderer ||= Rafters::ComponentRenderer.new(self)
|
43
38
|
end
|
39
|
+
|
40
|
+
def component(name, settings = {})
|
41
|
+
component_klass = "#{name}_component".classify.constantize
|
42
|
+
component = component_klass.new(settings)
|
43
|
+
end
|
44
44
|
end
|
@@ -12,9 +12,17 @@ class Rafters::ComponentRenderer
|
|
12
12
|
|
13
13
|
template_name = (template_name || component.template_name)
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
store(component)
|
16
|
+
|
17
|
+
@controller.view_context.content_tag(:div, class: "component", id: component.identifier) do
|
18
|
+
@controller.view_context.render(file: "/#{template_name}", locals: component.attributes)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def store(component)
|
25
|
+
@controller.rendered_components ||= {}
|
26
|
+
@controller.rendered_components.merge!(component.as_json)
|
19
27
|
end
|
20
28
|
end
|
data/lib/rafters/version.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rafters::ComponentRenderer do
|
4
|
-
let(:view_context) { double("ViewContext"
|
5
|
-
let(:controller) { double("Controller"
|
4
|
+
let(:view_context) { double("ViewContext").as_null_object }
|
5
|
+
let(:controller) { double("Controller").as_null_object }
|
6
|
+
|
7
|
+
before do
|
8
|
+
view_context.stub(:render).and_return("<p>Output</p>")
|
9
|
+
view_context.stub(:content_tag).and_yield
|
10
|
+
controller.stub(:view_context).and_return(view_context)
|
11
|
+
end
|
6
12
|
|
7
13
|
describe "when initialized" do
|
8
14
|
before do
|
@@ -18,8 +24,11 @@ describe Rafters::ComponentRenderer do
|
|
18
24
|
describe "#render" do
|
19
25
|
subject { Rafters::ComponentRenderer.new(controller) }
|
20
26
|
|
21
|
-
let(:component)
|
22
|
-
|
27
|
+
let(:component) { double("Component").as_null_object }
|
28
|
+
|
29
|
+
before do
|
30
|
+
component.stub(:attributes).and_return({ title: "Foo" })
|
31
|
+
component.stub(:template_name).and_return("template")
|
23
32
|
end
|
24
33
|
|
25
34
|
it "renders the component template with it's settings and attributes" do
|