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 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