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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ac7e06cae8eb40c60138562dca5806c7e7c91a9
4
- data.tar.gz: 27e6adca0f5e3859ab26c2ec2a6dcb84c0be4a20
3
+ metadata.gz: 2b8a73a896bfba469e100d5a3c02490ef024d28a
4
+ data.tar.gz: 7cf3fb207afc711be5d5f926232ec8be6eed1c3c
5
5
  SHA512:
6
- metadata.gz: e5f25e71ba70d5b4953a70ec870701b1a82a1d84394fc5f3ebdaa394c6d9291a6deb869d3436f038f4103025f91501c999a14d4a114cade086da3eeaf921b959
7
- data.tar.gz: 01891c2592c824bc5da723fa63f9b7b8bbe659d8909975328e10d56376ca4b9d1ce45b7a7d772379564aa205d70565a2a84034eae2c2990ff6851c1ff170d85a
6
+ metadata.gz: 6c8b02e99d48f53ff3a3674811798af36b477773969488c2f80e93fd843c73b39a29761c6b140dbff5ffb8cd96c75971361dc640043d7924975972536001e7e2
7
+ data.tar.gz: 87f68f5526e6766ac70793ef96db2d38bbd0defde239717a47e188dbe27979d7f373a58b8782d06449f458cb61d7697fabb0b17ad9385e849ccfbe4a47dcd04d
@@ -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 render_component(name, settings = {}, template_name = nil)
10
- component_klass = "#{name}_component".classify.constantize
11
- component = component_klass.new(settings)
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 render_component_attributes(name, settings = {})
16
- component_klass = "#{name}_component".classify.constantize
17
- component = component_klass.new(settings)
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 do
27
- render_without_component(text: render_component(component, settings)) and return
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
- @controller.view_context.render({
16
- file: "/#{template_name}",
17
- locals: component.attributes
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
@@ -1,3 +1,3 @@
1
1
  module Rafters
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  <h2><%= link_to_if settings.link_to_post?, post.title, post_path(post.id) %></h2>
2
2
 
3
- <%= render_component :author, { id: post.author.id } %>
3
+ <%= render_component :author, id: post.author.id %>
4
4
 
5
5
  <%= simple_format post.body %>
@@ -1,5 +1,5 @@
1
1
  <div class="posts">
2
2
  <% posts.each do |post| %>
3
- <%= render_component :post, { post: post, link_to_post: true } %>
3
+ <%= render_component :post, post: post, link_to_post: true %>
4
4
  <% end %>
5
5
  </div>
@@ -1,6 +1,6 @@
1
1
  <div class="main">
2
2
  <div class="content">
3
- <%= render_component :heading, { title: "Posts" } %>
3
+ <%= render_component :heading, title: "Posts" %>
4
4
  <%= render_component :posts %>
5
5
  </div>
6
6
 
@@ -1,8 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rafters::ComponentRenderer do
4
- let(:view_context) { double("ViewContext", render: "<p>Output</p>") }
5
- let(:controller) { double("Controller", prepend_view_path: true, view_context: view_context) }
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) do
22
- double("Component", attributes: { title: "Foo" }, :'controller=' => true, template_name: "template")
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rafters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Hite