rafters 0.0.5 → 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/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
|