rafters 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/README.md +12 -4
- data/lib/rafters/component.rb +46 -17
- data/lib/rafters/component_renderer.rb +3 -3
- data/lib/rafters/engine.rb +14 -4
- data/lib/rafters/version.rb +1 -1
- data/lib/rafters.rb +0 -1
- data/lib/{rafters/directive_processor.rb → sprockets/component_processor.rb} +1 -1
- data/rafters.gemspec +1 -0
- data/spec/dummy/app/components/author/assets/images/.gitkeep +0 -0
- data/spec/dummy/app/components/author/assets/javascripts/author_component.js +0 -0
- data/spec/dummy/app/components/author/assets/stylesheets/author_component.scss +0 -0
- data/spec/dummy/app/components/author/author_component.rb +15 -0
- data/spec/dummy/app/components/author/views/author_component.html.erb +1 -0
- data/spec/dummy/app/components/heading/heading_component.rb +2 -9
- data/spec/dummy/app/components/heading/views/heading_component.html.erb +1 -1
- data/spec/dummy/app/components/links/assets/images/.gitkeep +0 -0
- data/spec/dummy/app/components/links/assets/javascripts/links_component.js +0 -0
- data/spec/dummy/app/components/links/assets/stylesheets/links_component.scss +0 -0
- data/spec/dummy/app/components/links/links_component.rb +16 -0
- data/spec/dummy/app/components/links/views/links_component.html.erb +5 -0
- data/spec/dummy/app/components/post/assets/images/.gitkeep +0 -0
- data/spec/dummy/app/components/post/assets/javascripts/post_component.js +0 -0
- data/spec/dummy/app/components/post/assets/stylesheets/post_component.scss +0 -0
- data/spec/dummy/app/components/post/post_component.rb +16 -0
- data/spec/dummy/app/components/post/views/post_component.html.erb +5 -0
- data/spec/dummy/app/components/posts/assets/images/.gitkeep +0 -0
- data/spec/dummy/app/components/posts/assets/javascripts/posts_component.js +0 -0
- data/spec/dummy/app/components/posts/assets/stylesheets/posts_component.scss +0 -0
- data/spec/dummy/app/components/posts/posts_component.rb +11 -0
- data/spec/dummy/app/components/posts/views/posts_component.html.erb +5 -0
- data/spec/dummy/app/controllers/posts_controller.rb +9 -0
- data/spec/dummy/app/helpers/posts_helper.rb +2 -0
- data/spec/dummy/app/models/author.rb +26 -0
- data/spec/dummy/app/models/post.rb +28 -0
- data/spec/dummy/app/views/posts/index.html.erb +10 -0
- data/spec/dummy/app/views/posts/show.html.erb +9 -0
- data/spec/dummy/config/application.rb +0 -6
- data/spec/dummy/config/environments/development.rb +0 -3
- data/spec/dummy/config/environments/test.rb +0 -3
- data/spec/dummy/config/initializers/secret_token.rb +1 -0
- data/spec/dummy/config/routes.rb +1 -1
- data/spec/rafters/component_context_spec.rb +41 -0
- data/spec/rafters/component_renderer_spec.rb +37 -0
- data/spec/rafters/component_spec.rb +3 -3
- data/spec/rafters/features/rendering_a_page_spec.rb +8 -0
- data/spec/spec_helper.rb +1 -4
- metadata +79 -12
- data/spec/dummy/app/controllers/foos_controller.rb +0 -5
- data/spec/dummy/app/helpers/foos_helper.rb +0 -2
- data/spec/dummy/app/views/foos/index.html.erb +0 -1
- /data/spec/dummy/app/assets/javascripts/{foos.js → posts.js} +0 -0
- /data/spec/dummy/app/assets/stylesheets/{foos.css → posts.css} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4199faab0e6c08bb71f8b982f9ec0d8a4f71cdd
|
4
|
+
data.tar.gz: eab7deb22988294f34cb4d4c8f20782334709a22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c5e9b1ad6c5773c0e2e8ce44ad5452d225dc6668cd97bb10e123320303f84f20972599bcdfe2f74d118e86f81b8547d1286aa41308e1b09feee6716590a0c30
|
7
|
+
data.tar.gz: 821b6b96f755c152c3f938b9e984d8398047efe28e6505824d202ed61713028ba12127b26696f11a3e3f17a6eac4d3664f0a07816da1c2f03403b88c15e1b346
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
!!! STILL UNDER ACTIVE DEVELOPMENT. USE AT YOUR OWN RISK !!!
|
4
4
|
|
5
|
+
[![Build Status](https://travis-ci.org/andyhite/rafters.png?branch=master)](https://travis-ci.org/andyhite/rafters)
|
6
|
+
|
5
7
|
Rafters lets you think about each page of your application as a collection of small pieces instead of monolithic, difficult to maintain
|
6
8
|
views.
|
7
9
|
|
@@ -71,7 +73,7 @@ You can render components anywhere - in your view, in your controller, in anothe
|
|
71
73
|
|
72
74
|
### Adding an attribute to a component
|
73
75
|
|
74
|
-
Each component exposes attributes to it's view
|
76
|
+
Each component exposes `attributes` to it's view as locals. The `attributes` are simply a collection of methods that you explicitly declare as `attributes` in your component, using the `Rafters::Component.attribute` method.
|
75
77
|
|
76
78
|
For instance, let's say we have a HeadingComponent that exposes a title attribute:
|
77
79
|
|
@@ -91,11 +93,11 @@ end
|
|
91
93
|
|
92
94
|
Since we won't be accessing the `HeadingComponent#title` method directly from within our view, it's recommended to make it a private method. The interface that our component exposes is taken care of behind the scenes.
|
93
95
|
|
94
|
-
You can access the
|
96
|
+
You can access the method in your component view using the name of the attribute:
|
95
97
|
|
96
98
|
```erb
|
97
99
|
<div class="heading">
|
98
|
-
<h1><%=
|
100
|
+
<h1><%= title %></h1>
|
99
101
|
</div>
|
100
102
|
```
|
101
103
|
|
@@ -187,7 +189,7 @@ end
|
|
187
189
|
Default values can be provided for settings using the `default` option:
|
188
190
|
|
189
191
|
```ruby
|
190
|
-
setting :type, default: "
|
192
|
+
setting :type, default: "comment"
|
191
193
|
```
|
192
194
|
|
193
195
|
Required settings can be specified using the `required` option:
|
@@ -196,6 +198,12 @@ Required settings can be specified using the `required` option:
|
|
196
198
|
setting :user_id, required: true
|
197
199
|
```
|
198
200
|
|
201
|
+
If you want to restrict the possible values of a setting to a known list, use the `accepts` option:
|
202
|
+
|
203
|
+
```ruby
|
204
|
+
setting :type, accepts: %w(post reply comment)
|
205
|
+
```
|
206
|
+
|
199
207
|
## Contributing
|
200
208
|
|
201
209
|
1. Fork it
|
data/lib/rafters/component.rb
CHANGED
@@ -3,36 +3,38 @@ module Rafters::Component
|
|
3
3
|
|
4
4
|
attr_writer :controller
|
5
5
|
|
6
|
+
included do
|
7
|
+
attribute :settings
|
8
|
+
end
|
9
|
+
|
6
10
|
def initialize(settings = {})
|
7
11
|
@settings = settings
|
8
12
|
end
|
9
13
|
|
10
14
|
def template_name
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
if _template_name.is_a?(Proc)
|
17
|
-
_template_name = _template_name.call(self)
|
15
|
+
@_template_name ||= begin
|
16
|
+
_template_name = (self.class._template_name || self.class.name.underscore)
|
17
|
+
_template_name = _template_name.call(self) if _template_name.is_a?(Proc)
|
18
|
+
_template_name
|
18
19
|
end
|
19
|
-
|
20
|
-
@_template_name = (_template_name || _underscored_name)
|
21
20
|
end
|
22
21
|
|
23
22
|
def attributes
|
23
|
+
return {} if self.class._attributes.nil?
|
24
|
+
|
24
25
|
@_attributes ||= Hashie::Mash.new.tap do |_attributes|
|
25
|
-
self.class._attributes.each do |name
|
26
|
+
self.class._attributes.each do |name|
|
26
27
|
_attributes[name] = send(name)
|
27
28
|
end
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
32
|
def settings
|
33
|
+
return {} if self.class._settings.nil?
|
34
|
+
|
32
35
|
@_settings ||= Hashie::Mash.new.tap do |_settings|
|
33
36
|
self.class._settings.each do |name, options|
|
34
|
-
_settings[name] = (
|
35
|
-
raise SettingRequired if options[:required] && _settings[name].nil?
|
37
|
+
_settings[name] = value_for_setting(name, options)
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
@@ -43,16 +45,42 @@ module Rafters::Component
|
|
43
45
|
elsif @controller.respond_to?(variable_or_method_name, true)
|
44
46
|
@controller.send(variable_or_method_name)
|
45
47
|
else
|
46
|
-
raise
|
48
|
+
raise CurrentMissing, "#{variable_or_method_name.to_s} not found in #{@controller.class.name}"
|
47
49
|
end
|
48
50
|
end
|
49
51
|
|
52
|
+
private
|
53
|
+
|
54
|
+
def value_for_setting(name, options)
|
55
|
+
value = @settings.has_key?(name) ? @settings[name] : options[:default]
|
56
|
+
validate_setting(name, value, options) && value
|
57
|
+
end
|
58
|
+
|
59
|
+
def validate_setting(name, value, options)
|
60
|
+
validate_setting_required(name, value, options[:required])
|
61
|
+
validate_setting_accepts(name, value, options[:accepts])
|
62
|
+
end
|
63
|
+
|
64
|
+
def validate_setting_required(name, value, required)
|
65
|
+
return true unless !!required
|
66
|
+
raise SettingRequired, "#{name} is required but not provided" if value.nil?
|
67
|
+
end
|
68
|
+
|
69
|
+
def validate_setting_accepts(name, value, accepts)
|
70
|
+
return true unless !!accepts
|
71
|
+
raise InvalidSetting, "#{value} is not a valid value for #{name}. Accepts: #{accepts.join(', ')}" unless accepts.include?(value)
|
72
|
+
end
|
73
|
+
|
50
74
|
module ClassMethods
|
51
75
|
attr_accessor :_attributes, :_settings, :_template_name
|
52
76
|
|
53
|
-
def attribute(name
|
54
|
-
self._attributes ||=
|
55
|
-
self._attributes
|
77
|
+
def attribute(name)
|
78
|
+
self._attributes ||= []
|
79
|
+
self._attributes << name
|
80
|
+
end
|
81
|
+
|
82
|
+
def attributes(*names)
|
83
|
+
names.each { |name| attribute(name) }
|
56
84
|
end
|
57
85
|
|
58
86
|
def setting(name, options = {})
|
@@ -65,6 +93,7 @@ module Rafters::Component
|
|
65
93
|
end
|
66
94
|
end
|
67
95
|
|
68
|
-
class
|
96
|
+
class CurrentMissing < StandardError; end
|
69
97
|
class SettingRequired < StandardError; end
|
98
|
+
class InvalidSetting < StandardError; end
|
70
99
|
end
|
@@ -12,9 +12,9 @@ class Rafters::ComponentRenderer
|
|
12
12
|
|
13
13
|
template_name = (template_name || component.template_name)
|
14
14
|
|
15
|
-
@controller.view_context.render(
|
16
|
-
|
17
|
-
|
15
|
+
@controller.view_context.render({
|
16
|
+
file: "/#{template_name}",
|
17
|
+
locals: component.attributes
|
18
18
|
})
|
19
19
|
end
|
20
20
|
end
|
data/lib/rafters/engine.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'sprockets/component_processor'
|
2
|
+
|
1
3
|
class Rafters::Engine < Rails::Engine
|
2
4
|
isolate_namespace Rafters
|
3
5
|
|
@@ -24,10 +26,18 @@ class Rafters::Engine < Rails::Engine
|
|
24
26
|
end
|
25
27
|
|
26
28
|
config.after_initialize do |app|
|
27
|
-
|
28
|
-
|
29
|
+
begin
|
30
|
+
app.assets.unregister_preprocessor('text/css', Sprockets::DirectiveProcessor)
|
31
|
+
app.assets.register_preprocessor('text/css', Sprockets::ComponentProcessor)
|
32
|
+
rescue
|
33
|
+
Rails.logger.warn("Could not load Sprockets::ComponentProcessor for text/css")
|
34
|
+
end
|
29
35
|
|
30
|
-
|
31
|
-
|
36
|
+
begin
|
37
|
+
app.assets.unregister_preprocessor('application/javascript', Sprockets::DirectiveProcessor)
|
38
|
+
app.assets.register_preprocessor('application/javascript', Sprockets::ComponentProcessor)
|
39
|
+
rescue
|
40
|
+
Rails.logger.warn("Could not load Sprockets::ComponentProcessor for application/javascript")
|
41
|
+
end
|
32
42
|
end
|
33
43
|
end
|
data/lib/rafters/version.rb
CHANGED
data/lib/rafters.rb
CHANGED
data/rafters.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "debugger", "~> 1.6"
|
23
23
|
spec.add_development_dependency "rake", "~> 10.1"
|
24
24
|
spec.add_development_dependency "rspec-rails", "~> 2.14"
|
25
|
+
spec.add_development_dependency "capybara", "~> 2.1"
|
25
26
|
|
26
27
|
spec.add_dependency "rails", "> 3.2"
|
27
28
|
spec.add_dependency "hashie", "~> 2.0.5"
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<h3><%= author.name %></h3>
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
<h1><%= settings.title %></h1>
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class LinksComponent
|
2
|
+
include Rafters::Component
|
3
|
+
|
4
|
+
# Attributes
|
5
|
+
attribute :links
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def links
|
10
|
+
@links ||= [
|
11
|
+
{ name: "Google", url: "http://google.com" },
|
12
|
+
{ name: "Yahoo", url: "http://yahoo.com" },
|
13
|
+
{ name: "Bing", url: "http://bing.com" }
|
14
|
+
]
|
15
|
+
end
|
16
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class PostComponent
|
2
|
+
include Rafters::Component
|
3
|
+
|
4
|
+
# Settings
|
5
|
+
setting :post
|
6
|
+
setting :link_to_post, accepts: [true, false], default: false
|
7
|
+
|
8
|
+
# Attributes
|
9
|
+
attribute :post
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def post
|
14
|
+
@post ||= (settings.post || current(:post))
|
15
|
+
end
|
16
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Author
|
2
|
+
attr_accessor :id, :name
|
3
|
+
|
4
|
+
FIXTURES = [
|
5
|
+
{ id: 1, name: "Andrew Hite" },
|
6
|
+
{ id: 2, name: "Andrew Latimer" }
|
7
|
+
]
|
8
|
+
|
9
|
+
def initialize(attributes = {})
|
10
|
+
@id = attributes[:id]
|
11
|
+
@name = attributes[:name]
|
12
|
+
end
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def all
|
16
|
+
FIXTURES.map do |attributes|
|
17
|
+
new(attributes)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def find(id)
|
22
|
+
attributes = FIXTURES.find { |fixture| fixture[:id] == id.to_i }
|
23
|
+
new(attributes)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Post
|
2
|
+
attr_accessor :id, :title, :body, :author
|
3
|
+
|
4
|
+
FIXTURES = [
|
5
|
+
{ id: 1, title: "Lorem Ipsum", body: "Lorem ipsum dolor sit amet...", author: Author.find(1) },
|
6
|
+
{ id: 2, title: "Dolor Sit Amet", body: "Consectetur adipiscing elit...", author: Author.find(2) }
|
7
|
+
]
|
8
|
+
|
9
|
+
def initialize(attributes = {})
|
10
|
+
@id = attributes[:id]
|
11
|
+
@title = attributes[:title]
|
12
|
+
@body = attributes[:body]
|
13
|
+
@author = attributes[:author]
|
14
|
+
end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def all
|
18
|
+
FIXTURES.map do |attributes|
|
19
|
+
new(attributes)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def find(id)
|
24
|
+
attributes = FIXTURES.find { |fixture| fixture[:id] == id.to_i }
|
25
|
+
new(attributes)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -43,12 +43,6 @@ module Dummy
|
|
43
43
|
# like if you have constraints or database-specific column types
|
44
44
|
# config.active_record.schema_format = :sql
|
45
45
|
|
46
|
-
# Enforce whitelist mode for mass assignment.
|
47
|
-
# This will create an empty whitelist of attributes available for mass-assignment for all models
|
48
|
-
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
|
49
|
-
# parameters by using an attr_accessible or attr_protected declaration.
|
50
|
-
config.active_record.whitelist_attributes = true
|
51
|
-
|
52
46
|
# Enable the asset pipeline
|
53
47
|
config.assets.enabled = true
|
54
48
|
|
@@ -22,9 +22,6 @@ Dummy::Application.configure do
|
|
22
22
|
# Only use best-standards-support built into browsers
|
23
23
|
config.action_dispatch.best_standards_support = :builtin
|
24
24
|
|
25
|
-
# Raise exception on mass assignment protection for Active Record models
|
26
|
-
config.active_record.mass_assignment_sanitizer = :strict
|
27
|
-
|
28
25
|
# Log the query plan for queries taking more than this (works
|
29
26
|
# with SQLite, MySQL, and PostgreSQL)
|
30
27
|
config.active_record.auto_explain_threshold_in_seconds = 0.5
|
@@ -29,9 +29,6 @@ Dummy::Application.configure do
|
|
29
29
|
# ActionMailer::Base.deliveries array.
|
30
30
|
config.action_mailer.delivery_method = :test
|
31
31
|
|
32
|
-
# Raise exception on mass assignment protection for Active Record models
|
33
|
-
config.active_record.mass_assignment_sanitizer = :strict
|
34
|
-
|
35
32
|
# Print deprecation notices to the stderr
|
36
33
|
config.active_support.deprecation = :stderr
|
37
34
|
end
|
@@ -5,3 +5,4 @@
|
|
5
5
|
# Make sure the secret is at least 30 characters and all random,
|
6
6
|
# no regular words or you'll be exposed to dictionary attacks.
|
7
7
|
Dummy::Application.config.secret_token = '304950c1cbff2fec75b62ede6d392171fc25435481002bd7ba9d911433a277bb96aed01bf90572d18f819d20a5ec45a835ccfbfe42347f0c3a0fb527e543c694'
|
8
|
+
Dummy::Application.config.secret_key_base = '12345'
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class FooController < ActionController::Base
|
4
|
+
include Rafters::ComponentContext
|
5
|
+
end
|
6
|
+
|
7
|
+
class FooComponent
|
8
|
+
include Rafters::Component
|
9
|
+
|
10
|
+
setting :test
|
11
|
+
end
|
12
|
+
|
13
|
+
describe Rafters::ComponentContext do
|
14
|
+
let(:controller) { FooController.new }
|
15
|
+
let(:renderer) { double("ComponentRenderer", render: "<p>Output</p>") }
|
16
|
+
|
17
|
+
before do
|
18
|
+
Rafters::ComponentRenderer.stub(:new).and_return(renderer)
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#render_component" do
|
22
|
+
it "renders the provided component" do
|
23
|
+
renderer.should_receive(:render).with(instance_of(FooComponent), nil)
|
24
|
+
controller.render_component(:foo)
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with settings" do
|
28
|
+
it "renders the provided component with the given settings" do
|
29
|
+
FooComponent.should_receive(:new).with({ test: true })
|
30
|
+
controller.render_component(:foo, test: true)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with a specified template name" do
|
35
|
+
it "renders the provided component using the given template name" do
|
36
|
+
renderer.should_receive(:render).with(instance_of(FooComponent), "template_name")
|
37
|
+
controller.render_component(:foo, {}, "template_name")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
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) }
|
6
|
+
|
7
|
+
describe "when initialized" do
|
8
|
+
before do
|
9
|
+
Rafters.stub(:view_paths).and_return(["/path/to/views"])
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should add the view paths for all components to the controller" do
|
13
|
+
controller.should_receive(:prepend_view_path).with("/path/to/views")
|
14
|
+
Rafters::ComponentRenderer.new(controller)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#render" do
|
19
|
+
subject { Rafters::ComponentRenderer.new(controller) }
|
20
|
+
|
21
|
+
let(:component) do
|
22
|
+
double("Component", attributes: { title: "Foo" }, :'controller=' => true, template_name: "template")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "renders the component template with it's settings and attributes" do
|
26
|
+
view_context.should_receive(:render).with(file: "/template", locals: { title: "Foo" })
|
27
|
+
subject.render(component)
|
28
|
+
end
|
29
|
+
|
30
|
+
context "with a specified template name" do
|
31
|
+
it "renders the component with the specified template" do
|
32
|
+
view_context.should_receive(:render).with(file: "/custom_template", locals: { title: "Foo" })
|
33
|
+
subject.render(component, "custom_template")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -58,7 +58,7 @@ describe Rafters::Component do
|
|
58
58
|
subject { HeadingComponent.new }
|
59
59
|
|
60
60
|
it "returns the registered attributes and their values" do
|
61
|
-
subject.attributes.should == Hashie::Mash.new({ title: "Lorem Ipsum" })
|
61
|
+
subject.attributes.should == Hashie::Mash.new({ title: "Lorem Ipsum", settings: {} })
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
@@ -138,7 +138,7 @@ describe Rafters::Component do
|
|
138
138
|
|
139
139
|
context "when there is neither a method nor an instance variable with the given name in the controller" do
|
140
140
|
it "raises an error" do
|
141
|
-
-> { subject.current(:doesnt_exist) }.should raise_error(Rafters::Component::
|
141
|
+
-> { subject.current(:doesnt_exist) }.should raise_error(Rafters::Component::CurrentMissing)
|
142
142
|
end
|
143
143
|
end
|
144
144
|
end
|
@@ -146,7 +146,7 @@ describe Rafters::Component do
|
|
146
146
|
after do
|
147
147
|
# A little housekeeping after each spec runs, so that
|
148
148
|
# we have fresh values for each class attribute
|
149
|
-
HeadingComponent._attributes =
|
149
|
+
HeadingComponent._attributes = [:settings]
|
150
150
|
HeadingComponent._settings = nil
|
151
151
|
HeadingComponent._template_name = nil
|
152
152
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
ENV["RAILS_ENV"] ||= 'test'
|
2
2
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
3
|
-
require '
|
4
|
-
require 'bundler/setup'
|
5
|
-
|
6
|
-
require 'rafters'
|
3
|
+
require 'rspec/rails'
|
7
4
|
|
8
5
|
RSpec.configure do |config|
|
9
6
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
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.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Hite
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.14'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: capybara
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2.1'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rails
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,6 +119,7 @@ files:
|
|
105
119
|
- .gitignore
|
106
120
|
- .rspec
|
107
121
|
- .rvmrc
|
122
|
+
- .travis.yml
|
108
123
|
- Gemfile
|
109
124
|
- MIT-LICENSE
|
110
125
|
- README.md
|
@@ -120,29 +135,52 @@ files:
|
|
120
135
|
- lib/rafters/component.rb
|
121
136
|
- lib/rafters/component_context.rb
|
122
137
|
- lib/rafters/component_renderer.rb
|
123
|
-
- lib/rafters/directive_processor.rb
|
124
138
|
- lib/rafters/engine.rb
|
125
139
|
- lib/rafters/version.rb
|
140
|
+
- lib/sprockets/component_processor.rb
|
126
141
|
- lib/tasks/rafters_tasks.rake
|
127
142
|
- rafters.gemspec
|
128
143
|
- spec/dummy/README.rdoc
|
129
144
|
- spec/dummy/Rakefile
|
130
145
|
- spec/dummy/app/assets/javascripts/application.js
|
131
|
-
- spec/dummy/app/assets/javascripts/
|
146
|
+
- spec/dummy/app/assets/javascripts/posts.js
|
132
147
|
- spec/dummy/app/assets/stylesheets/application.css
|
133
|
-
- spec/dummy/app/assets/stylesheets/
|
148
|
+
- spec/dummy/app/assets/stylesheets/posts.css
|
149
|
+
- spec/dummy/app/components/author/assets/images/.gitkeep
|
150
|
+
- spec/dummy/app/components/author/assets/javascripts/author_component.js
|
151
|
+
- spec/dummy/app/components/author/assets/stylesheets/author_component.scss
|
152
|
+
- spec/dummy/app/components/author/author_component.rb
|
153
|
+
- spec/dummy/app/components/author/views/author_component.html.erb
|
134
154
|
- spec/dummy/app/components/heading/assets/javascripts/heading_component.js
|
135
155
|
- spec/dummy/app/components/heading/assets/stylesheets/heading_component.css
|
136
156
|
- spec/dummy/app/components/heading/heading_component.rb
|
137
157
|
- spec/dummy/app/components/heading/views/heading_component.html.erb
|
158
|
+
- spec/dummy/app/components/links/assets/images/.gitkeep
|
159
|
+
- spec/dummy/app/components/links/assets/javascripts/links_component.js
|
160
|
+
- spec/dummy/app/components/links/assets/stylesheets/links_component.scss
|
161
|
+
- spec/dummy/app/components/links/links_component.rb
|
162
|
+
- spec/dummy/app/components/links/views/links_component.html.erb
|
163
|
+
- spec/dummy/app/components/post/assets/images/.gitkeep
|
164
|
+
- spec/dummy/app/components/post/assets/javascripts/post_component.js
|
165
|
+
- spec/dummy/app/components/post/assets/stylesheets/post_component.scss
|
166
|
+
- spec/dummy/app/components/post/post_component.rb
|
167
|
+
- spec/dummy/app/components/post/views/post_component.html.erb
|
168
|
+
- spec/dummy/app/components/posts/assets/images/.gitkeep
|
169
|
+
- spec/dummy/app/components/posts/assets/javascripts/posts_component.js
|
170
|
+
- spec/dummy/app/components/posts/assets/stylesheets/posts_component.scss
|
171
|
+
- spec/dummy/app/components/posts/posts_component.rb
|
172
|
+
- spec/dummy/app/components/posts/views/posts_component.html.erb
|
138
173
|
- spec/dummy/app/controllers/application_controller.rb
|
139
|
-
- spec/dummy/app/controllers/
|
174
|
+
- spec/dummy/app/controllers/posts_controller.rb
|
140
175
|
- spec/dummy/app/helpers/application_helper.rb
|
141
|
-
- spec/dummy/app/helpers/
|
176
|
+
- spec/dummy/app/helpers/posts_helper.rb
|
142
177
|
- spec/dummy/app/mailers/.gitkeep
|
143
178
|
- spec/dummy/app/models/.gitkeep
|
144
|
-
- spec/dummy/app/
|
179
|
+
- spec/dummy/app/models/author.rb
|
180
|
+
- spec/dummy/app/models/post.rb
|
145
181
|
- spec/dummy/app/views/layouts/application.html.erb
|
182
|
+
- spec/dummy/app/views/posts/index.html.erb
|
183
|
+
- spec/dummy/app/views/posts/show.html.erb
|
146
184
|
- spec/dummy/config.ru
|
147
185
|
- spec/dummy/config/application.rb
|
148
186
|
- spec/dummy/config/boot.rb
|
@@ -167,7 +205,10 @@ files:
|
|
167
205
|
- spec/dummy/public/500.html
|
168
206
|
- spec/dummy/public/favicon.ico
|
169
207
|
- spec/dummy/script/rails
|
208
|
+
- spec/rafters/component_context_spec.rb
|
209
|
+
- spec/rafters/component_renderer_spec.rb
|
170
210
|
- spec/rafters/component_spec.rb
|
211
|
+
- spec/rafters/features/rendering_a_page_spec.rb
|
171
212
|
- spec/spec_helper.rb
|
172
213
|
homepage: ''
|
173
214
|
licenses:
|
@@ -198,21 +239,44 @@ test_files:
|
|
198
239
|
- spec/dummy/README.rdoc
|
199
240
|
- spec/dummy/Rakefile
|
200
241
|
- spec/dummy/app/assets/javascripts/application.js
|
201
|
-
- spec/dummy/app/assets/javascripts/
|
242
|
+
- spec/dummy/app/assets/javascripts/posts.js
|
202
243
|
- spec/dummy/app/assets/stylesheets/application.css
|
203
|
-
- spec/dummy/app/assets/stylesheets/
|
244
|
+
- spec/dummy/app/assets/stylesheets/posts.css
|
245
|
+
- spec/dummy/app/components/author/assets/images/.gitkeep
|
246
|
+
- spec/dummy/app/components/author/assets/javascripts/author_component.js
|
247
|
+
- spec/dummy/app/components/author/assets/stylesheets/author_component.scss
|
248
|
+
- spec/dummy/app/components/author/author_component.rb
|
249
|
+
- spec/dummy/app/components/author/views/author_component.html.erb
|
204
250
|
- spec/dummy/app/components/heading/assets/javascripts/heading_component.js
|
205
251
|
- spec/dummy/app/components/heading/assets/stylesheets/heading_component.css
|
206
252
|
- spec/dummy/app/components/heading/heading_component.rb
|
207
253
|
- spec/dummy/app/components/heading/views/heading_component.html.erb
|
254
|
+
- spec/dummy/app/components/links/assets/images/.gitkeep
|
255
|
+
- spec/dummy/app/components/links/assets/javascripts/links_component.js
|
256
|
+
- spec/dummy/app/components/links/assets/stylesheets/links_component.scss
|
257
|
+
- spec/dummy/app/components/links/links_component.rb
|
258
|
+
- spec/dummy/app/components/links/views/links_component.html.erb
|
259
|
+
- spec/dummy/app/components/post/assets/images/.gitkeep
|
260
|
+
- spec/dummy/app/components/post/assets/javascripts/post_component.js
|
261
|
+
- spec/dummy/app/components/post/assets/stylesheets/post_component.scss
|
262
|
+
- spec/dummy/app/components/post/post_component.rb
|
263
|
+
- spec/dummy/app/components/post/views/post_component.html.erb
|
264
|
+
- spec/dummy/app/components/posts/assets/images/.gitkeep
|
265
|
+
- spec/dummy/app/components/posts/assets/javascripts/posts_component.js
|
266
|
+
- spec/dummy/app/components/posts/assets/stylesheets/posts_component.scss
|
267
|
+
- spec/dummy/app/components/posts/posts_component.rb
|
268
|
+
- spec/dummy/app/components/posts/views/posts_component.html.erb
|
208
269
|
- spec/dummy/app/controllers/application_controller.rb
|
209
|
-
- spec/dummy/app/controllers/
|
270
|
+
- spec/dummy/app/controllers/posts_controller.rb
|
210
271
|
- spec/dummy/app/helpers/application_helper.rb
|
211
|
-
- spec/dummy/app/helpers/
|
272
|
+
- spec/dummy/app/helpers/posts_helper.rb
|
212
273
|
- spec/dummy/app/mailers/.gitkeep
|
213
274
|
- spec/dummy/app/models/.gitkeep
|
214
|
-
- spec/dummy/app/
|
275
|
+
- spec/dummy/app/models/author.rb
|
276
|
+
- spec/dummy/app/models/post.rb
|
215
277
|
- spec/dummy/app/views/layouts/application.html.erb
|
278
|
+
- spec/dummy/app/views/posts/index.html.erb
|
279
|
+
- spec/dummy/app/views/posts/show.html.erb
|
216
280
|
- spec/dummy/config.ru
|
217
281
|
- spec/dummy/config/application.rb
|
218
282
|
- spec/dummy/config/boot.rb
|
@@ -237,5 +301,8 @@ test_files:
|
|
237
301
|
- spec/dummy/public/500.html
|
238
302
|
- spec/dummy/public/favicon.ico
|
239
303
|
- spec/dummy/script/rails
|
304
|
+
- spec/rafters/component_context_spec.rb
|
305
|
+
- spec/rafters/component_renderer_spec.rb
|
240
306
|
- spec/rafters/component_spec.rb
|
307
|
+
- spec/rafters/features/rendering_a_page_spec.rb
|
241
308
|
- spec/spec_helper.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= render_component :heading, { level: "h1" } %>
|
File without changes
|
File without changes
|