clearwater 0.3.1 → 1.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/clearwater/version.rb +1 -1
- data/lib/clearwater.rb +1 -1
- data/opal/clearwater/application.rb +4 -7
- data/opal/clearwater/black_box_node.rb +67 -0
- data/opal/clearwater/component.rb +27 -25
- data/opal/clearwater/dom_reference.rb +30 -0
- data/opal/clearwater/link.rb +23 -30
- data/opal/clearwater/router.rb +34 -17
- data/opal/clearwater/virtual_dom.rb +1 -2
- data/opal/clearwater.rb +0 -1
- data/spec/clearwater/application_spec.rb +2 -1
- data/spec/clearwater/black_box_node_spec.rb +64 -0
- data/spec/clearwater/dom_reference_spec.rb +15 -0
- data/spec/clearwater/router_spec.rb +5 -4
- data/spec/component_spec.rb +3 -13
- metadata +31 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7209c39df1f317e2f636b5b18d19c800c051313e
|
4
|
+
data.tar.gz: de84c3390eb8008f4e4bad72382816c78417c15e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 241b9c7654b51e7600ad9d2d9e77547f923035373f128ed9d4f221d21395f9a60cb38a51a398af34c5247c4bc55a1742df094b93e1a9876c7de480bc6c6c503d
|
7
|
+
data.tar.gz: 93657a5db3cf006c60b146ea50fea5ce8f141b6513f424c8d7cc5601d9aca430996f47005871a4b102b241a06a53f4fac75520824c79141b3d5d4d8352abfaf7
|
data/lib/clearwater/version.rb
CHANGED
data/lib/clearwater.rb
CHANGED
@@ -1,7 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'browser/delay'
|
3
|
-
require 'browser/event'
|
4
|
-
require 'browser/animation_frame'
|
1
|
+
require 'bowser'
|
5
2
|
require 'clearwater/router'
|
6
3
|
require 'clearwater/application_registry'
|
7
4
|
require 'native'
|
@@ -20,8 +17,8 @@ module Clearwater
|
|
20
17
|
@router = options.fetch(:router) { Router.new }
|
21
18
|
@component = options.fetch(:component) { nil }
|
22
19
|
@element = options.fetch(:element) { nil }
|
23
|
-
@document = options.fetch(:document) {
|
24
|
-
@window = options.fetch(:window) {
|
20
|
+
@document = options.fetch(:document) { Bowser.document }
|
21
|
+
@window = options.fetch(:window) { Bowser.window }
|
25
22
|
@on_render = []
|
26
23
|
|
27
24
|
router.application = self
|
@@ -64,7 +61,7 @@ module Clearwater
|
|
64
61
|
return
|
65
62
|
end
|
66
63
|
|
67
|
-
animation_frame { perform_render }
|
64
|
+
@window.animation_frame { perform_render }
|
68
65
|
|
69
66
|
nil
|
70
67
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'bowser/element'
|
2
|
+
require 'clearwater/virtual_dom'
|
3
|
+
|
4
|
+
module Clearwater
|
5
|
+
module BlackBoxNode
|
6
|
+
def node
|
7
|
+
VirtualDOM.node :div
|
8
|
+
end
|
9
|
+
|
10
|
+
def mount node
|
11
|
+
end
|
12
|
+
|
13
|
+
def update previous, node
|
14
|
+
end
|
15
|
+
|
16
|
+
def unmount node
|
17
|
+
end
|
18
|
+
|
19
|
+
def render
|
20
|
+
Renderable.new(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
class Renderable
|
24
|
+
def initialize delegate
|
25
|
+
@delegate = delegate
|
26
|
+
end
|
27
|
+
|
28
|
+
def wrap node
|
29
|
+
Bowser::Element.new(node)
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_element
|
33
|
+
wrap(VirtualDOM.create_element(@delegate.node))
|
34
|
+
end
|
35
|
+
|
36
|
+
%x{
|
37
|
+
// Use the virtual-dom Widget type
|
38
|
+
Opal.defn(self, 'type', 'Widget');
|
39
|
+
|
40
|
+
// virtual-dom Widget init hook. Must return a real DOM node.
|
41
|
+
// We call the Ruby-land #mount method so we can define hooks for this
|
42
|
+
// in Ruby instead of requiring users to drop down to JS.
|
43
|
+
Opal.defn(self, 'init', function() {
|
44
|
+
var self = this;
|
45
|
+
var node = #{create_element};
|
46
|
+
#{@delegate.mount(`node`)};
|
47
|
+
return node.native;
|
48
|
+
});
|
49
|
+
|
50
|
+
// virtual-dom update hook
|
51
|
+
// previous: the instance of this object used in the previous render
|
52
|
+
// node: a Bowser-wrapped version of the DOM node
|
53
|
+
Opal.defn(self, 'update', function(previous, node) {
|
54
|
+
var self = this;
|
55
|
+
#{@delegate.update(`previous.delegate`, wrap(`node`))};
|
56
|
+
});
|
57
|
+
|
58
|
+
// virtual-dom destroy hook
|
59
|
+
// node: Bowser-wrapped version of the DOM node
|
60
|
+
Opal.defn(self, 'destroy', function(node) {
|
61
|
+
var self = this;
|
62
|
+
#{@delegate.unmount(wrap(`node`))};
|
63
|
+
});
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -1,13 +1,9 @@
|
|
1
1
|
require 'clearwater/virtual_dom'
|
2
|
-
require 'browser'
|
3
2
|
|
4
3
|
module Clearwater
|
5
4
|
module Component
|
6
5
|
attr_accessor :router, :outlet
|
7
6
|
|
8
|
-
def render
|
9
|
-
end
|
10
|
-
|
11
7
|
HTML_TAGS = %w(
|
12
8
|
a
|
13
9
|
abbr
|
@@ -122,27 +118,8 @@ module Clearwater
|
|
122
118
|
wbr
|
123
119
|
)
|
124
120
|
|
125
|
-
HTML_TAGS.each do |tag_name|
|
126
|
-
define_method(tag_name) do |attributes, content|
|
127
|
-
tag(tag_name, attributes, content)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
def tag tag_name, attributes=nil, content=nil
|
132
|
-
if !(`attributes.$$is_hash || attributes === #{nil}`)
|
133
|
-
content = attributes
|
134
|
-
attributes = nil
|
135
|
-
end
|
136
|
-
|
137
|
-
VirtualDOM.node(
|
138
|
-
tag_name,
|
139
|
-
Component.sanitize_attributes(attributes),
|
140
|
-
Component.sanitize_content(content)
|
141
|
-
)
|
142
|
-
end
|
143
|
-
|
144
121
|
def params
|
145
|
-
router.
|
122
|
+
router.params
|
146
123
|
end
|
147
124
|
|
148
125
|
def self.sanitize_attributes attributes
|
@@ -162,7 +139,7 @@ module Clearwater
|
|
162
139
|
attributes.each do |key, handler|
|
163
140
|
if key[0, 2] == 'on'
|
164
141
|
attributes[key] = proc do |event|
|
165
|
-
handler.call(
|
142
|
+
handler.call(Bowser::Event.new(event))
|
166
143
|
end
|
167
144
|
end
|
168
145
|
end
|
@@ -192,6 +169,31 @@ module Clearwater
|
|
192
169
|
}
|
193
170
|
end
|
194
171
|
|
172
|
+
# Default render method for stubbing
|
173
|
+
def render
|
174
|
+
end
|
175
|
+
|
176
|
+
module_function
|
177
|
+
|
178
|
+
HTML_TAGS.each do |tag_name|
|
179
|
+
define_method(tag_name) do |attributes, content|
|
180
|
+
tag(tag_name, attributes, content)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
def tag tag_name, attributes=nil, content=nil
|
185
|
+
if !(`attributes.$$is_hash || attributes === #{nil}`)
|
186
|
+
content = attributes
|
187
|
+
attributes = nil
|
188
|
+
end
|
189
|
+
|
190
|
+
VirtualDOM.node(
|
191
|
+
tag_name,
|
192
|
+
Component.sanitize_attributes(attributes),
|
193
|
+
Component.sanitize_content(content)
|
194
|
+
)
|
195
|
+
end
|
196
|
+
|
195
197
|
def call &block
|
196
198
|
Clearwater::Application::AppRegistry.render_all(&block)
|
197
199
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Clearwater
|
2
|
+
class DOMReference
|
3
|
+
def mount node, previous
|
4
|
+
@node = node
|
5
|
+
end
|
6
|
+
|
7
|
+
def unmount node, previous
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing *args, &block
|
11
|
+
@node.public_send *args, &block
|
12
|
+
end
|
13
|
+
|
14
|
+
def wrap node
|
15
|
+
Bowser::Element.new(node)
|
16
|
+
end
|
17
|
+
|
18
|
+
%x{
|
19
|
+
Opal.defn(self, 'hook', function(node, name, previous) {
|
20
|
+
var self = this;
|
21
|
+
#{mount(wrap(`node`), `previous`)};
|
22
|
+
});
|
23
|
+
|
24
|
+
Opal.defn(self, 'unhook', function(node, name, previous) {
|
25
|
+
var self = this;
|
26
|
+
#{unmount(wrap(`node`), `previous`)};
|
27
|
+
});
|
28
|
+
}
|
29
|
+
end
|
30
|
+
end
|
data/opal/clearwater/link.rb
CHANGED
@@ -1,22 +1,5 @@
|
|
1
1
|
require 'clearwater/component'
|
2
|
-
require '
|
3
|
-
require 'browser/history'
|
4
|
-
|
5
|
-
# TODO: Remove this once opal-browser supports coordinates natively
|
6
|
-
# for touch events.
|
7
|
-
module Browser
|
8
|
-
class Event
|
9
|
-
class Touch
|
10
|
-
def x
|
11
|
-
`#@native.pageX`
|
12
|
-
end
|
13
|
-
|
14
|
-
def y
|
15
|
-
`#@native.pageY`
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
2
|
+
require 'bowser'
|
20
3
|
|
21
4
|
class Link
|
22
5
|
include Clearwater::Component
|
@@ -56,6 +39,8 @@ class Link
|
|
56
39
|
end
|
57
40
|
|
58
41
|
def handle_touch event
|
42
|
+
document = Bowser.document
|
43
|
+
|
59
44
|
# All links will treat this as touch because this is a touch device
|
60
45
|
@@touch = true
|
61
46
|
moved = false
|
@@ -78,24 +63,32 @@ class Link
|
|
78
63
|
navigate event
|
79
64
|
end
|
80
65
|
|
81
|
-
|
82
|
-
|
66
|
+
document.off 'touchmove', &touch_move_handler
|
67
|
+
document.off 'touchend', &touch_end_handler
|
83
68
|
end
|
84
69
|
|
85
|
-
|
86
|
-
|
70
|
+
document.on 'touchmove', &touch_move_handler
|
71
|
+
document.on 'touchend', &touch_end_handler
|
87
72
|
end
|
88
73
|
|
89
74
|
def navigate event
|
90
75
|
# Don't handle middle-button clicks and clicks with modifier keys. Let them
|
91
76
|
# pass through to the browser's default handling or the user's modified handling.
|
92
|
-
|
93
|
-
event.
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
77
|
+
modified = (
|
78
|
+
event.meta? ||
|
79
|
+
event.shift? ||
|
80
|
+
event.ctrl? ||
|
81
|
+
event.alt? ||
|
82
|
+
event.button == 1
|
83
|
+
)
|
84
|
+
|
85
|
+
return if modified
|
86
|
+
|
87
|
+
event.prevent
|
88
|
+
window = Bowser.window
|
89
|
+
if href != window.location.path
|
90
|
+
Clearwater::Router.navigate_to href
|
91
|
+
window.scroll 0, 0
|
99
92
|
end
|
100
93
|
end
|
101
94
|
|
@@ -112,7 +105,7 @@ class Link
|
|
112
105
|
end
|
113
106
|
|
114
107
|
def check_active href
|
115
|
-
if
|
108
|
+
if Bowser.window.location.path == href
|
116
109
|
class_name = (
|
117
110
|
@attributes.delete(:class_name) ||
|
118
111
|
@attributes.delete(:class) ||
|
data/opal/clearwater/router.rb
CHANGED
@@ -6,9 +6,9 @@ module Clearwater
|
|
6
6
|
attr_accessor :application
|
7
7
|
|
8
8
|
def initialize options={}, &block
|
9
|
-
@window = options.fetch(:window) {
|
10
|
-
@location = options.fetch(:location) { window
|
11
|
-
@history = options.fetch(:history) { window
|
9
|
+
@window = options.fetch(:window) { Bowser.window }
|
10
|
+
@location = options.fetch(:location) { window.location }
|
11
|
+
@history = options.fetch(:history) { window.history }
|
12
12
|
@routes = RouteCollection.new(self)
|
13
13
|
@application = options[:application]
|
14
14
|
|
@@ -32,17 +32,17 @@ module Clearwater
|
|
32
32
|
routes_for_path(path).map(&:target)
|
33
33
|
end
|
34
34
|
|
35
|
-
def
|
35
|
+
def params path=current_path
|
36
36
|
path_parts = path.split("/").reject(&:empty?)
|
37
37
|
canonical_parts = canonical_path_for_path(path).split("/").reject(&:empty?)
|
38
38
|
|
39
39
|
canonical_parts.each_with_index.reduce({}) { |params, (part, index)|
|
40
40
|
if part.start_with? ":"
|
41
41
|
param = part[1..-1]
|
42
|
-
params
|
43
|
-
else
|
44
|
-
params
|
42
|
+
params[param] = path_parts[index]
|
45
43
|
end
|
44
|
+
|
45
|
+
params
|
46
46
|
}
|
47
47
|
end
|
48
48
|
|
@@ -50,21 +50,38 @@ module Clearwater
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def current_path
|
53
|
-
location
|
53
|
+
location.path
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.current_path
|
57
|
+
location.path
|
58
|
+
end
|
59
|
+
|
60
|
+
def current_url
|
61
|
+
location.href
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.current_url
|
65
|
+
location.href
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.location
|
69
|
+
Bowser.window.location
|
54
70
|
end
|
55
71
|
|
56
72
|
def navigate_to path
|
57
|
-
|
73
|
+
history.push path
|
58
74
|
set_outlets
|
59
75
|
render_application
|
60
76
|
end
|
61
77
|
|
62
|
-
def
|
63
|
-
|
78
|
+
def self.navigate_to path
|
79
|
+
Bowser.window.history.push path
|
80
|
+
render_all_apps
|
64
81
|
end
|
65
82
|
|
66
|
-
def
|
67
|
-
location
|
83
|
+
def navigate_to_remote path
|
84
|
+
location.href = path
|
68
85
|
end
|
69
86
|
|
70
87
|
def back
|
@@ -85,14 +102,14 @@ module Clearwater
|
|
85
102
|
|
86
103
|
private
|
87
104
|
|
88
|
-
def push_state path
|
89
|
-
history.pushState({}, nil, path)
|
90
|
-
end
|
91
|
-
|
92
105
|
def render_application
|
93
106
|
if application && application.component
|
94
107
|
application.component.call
|
95
108
|
end
|
96
109
|
end
|
110
|
+
|
111
|
+
def self.render_all_apps
|
112
|
+
Clearwater::Application.render
|
113
|
+
end
|
97
114
|
end
|
98
115
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'browser'
|
2
1
|
require 'clearwater/virtual_dom/js/virtual_dom.js'
|
3
2
|
|
4
3
|
module VirtualDOM
|
@@ -40,7 +39,7 @@ module VirtualDOM
|
|
40
39
|
end
|
41
40
|
|
42
41
|
class Document
|
43
|
-
def initialize(root
|
42
|
+
def initialize(root=Bowser.document.create_element('div'))
|
44
43
|
@root = root
|
45
44
|
end
|
46
45
|
|
data/opal/clearwater.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'clearwater'
|
2
2
|
require 'clearwater/svg_component'
|
3
|
+
require 'bowser'
|
3
4
|
|
4
5
|
module Clearwater
|
5
6
|
RSpec.describe Application do
|
@@ -33,7 +34,7 @@ module Clearwater
|
|
33
34
|
end
|
34
35
|
end.new
|
35
36
|
}
|
36
|
-
let(:element) {
|
37
|
+
let(:element) { Bowser.document.create_element('div') }
|
37
38
|
|
38
39
|
it 'renders to the specified element' do
|
39
40
|
app.perform_render
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'clearwater/black_box_node'
|
2
|
+
|
3
|
+
module Clearwater
|
4
|
+
describe BlackBoxNode do
|
5
|
+
let(:object) {
|
6
|
+
Class.new do
|
7
|
+
include Clearwater::BlackBoxNode
|
8
|
+
|
9
|
+
attr_reader :last_update
|
10
|
+
|
11
|
+
def node
|
12
|
+
VirtualDOM.node :span, { id: 'foo' }, ['hi']
|
13
|
+
end
|
14
|
+
|
15
|
+
def mount node
|
16
|
+
@mounted = true
|
17
|
+
end
|
18
|
+
|
19
|
+
def update
|
20
|
+
@last_update = Time.now
|
21
|
+
end
|
22
|
+
|
23
|
+
def unmount
|
24
|
+
@mounted = false
|
25
|
+
end
|
26
|
+
|
27
|
+
def mounted?
|
28
|
+
!!@mounted
|
29
|
+
end
|
30
|
+
end.new
|
31
|
+
}
|
32
|
+
let(:renderable) { BlackBoxNode::Renderable.new(object) }
|
33
|
+
|
34
|
+
it 'has the special type of "Widget"' do
|
35
|
+
r = renderable
|
36
|
+
expect(`r.type`).to eq 'Widget'
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'uses the delegate node to render into the DOM' do
|
40
|
+
r = renderable
|
41
|
+
expect(`#{renderable.create_element}.native.outerHTML`).to eq '<span id="foo">hi</span>'
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'calls mount when inserted into the DOM' do
|
45
|
+
r = renderable
|
46
|
+
`r.init()`
|
47
|
+
expect(object).to be_mounted
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'calls unmount when removed from the DOM' do
|
51
|
+
r = renderable
|
52
|
+
`r.init()`
|
53
|
+
`r.destroy()`
|
54
|
+
expect(object).not_to be_mounted
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'calls update when updated in the DOM' do
|
58
|
+
r = renderable
|
59
|
+
`r.update({})`
|
60
|
+
|
61
|
+
expect(object.last_update).not_to be_nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'clearwater/dom_reference'
|
2
|
+
|
3
|
+
module Clearwater
|
4
|
+
describe DOMReference do
|
5
|
+
let(:ref) { DOMReference.new }
|
6
|
+
|
7
|
+
it 'delegates to the DOM node passed in on mount' do
|
8
|
+
r = ref
|
9
|
+
|
10
|
+
`r.hook({ value: 'hi' })`
|
11
|
+
|
12
|
+
expect(r.value).to eq 'hi'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'clearwater/router'
|
2
|
+
require 'ostruct'
|
2
3
|
|
3
4
|
module Clearwater
|
4
5
|
RSpec.describe Router do
|
@@ -22,7 +23,7 @@ module Clearwater
|
|
22
23
|
end
|
23
24
|
|
24
25
|
it 'gets the params for a given path' do
|
25
|
-
expect(router.
|
26
|
+
expect(router.params('/articles/foo')).to eq article_id: 'foo'
|
26
27
|
end
|
27
28
|
|
28
29
|
it 'gets the components for a given path' do
|
@@ -34,18 +35,18 @@ module Clearwater
|
|
34
35
|
end
|
35
36
|
|
36
37
|
it 'gets the current path' do
|
37
|
-
location =
|
38
|
+
location = OpenStruct.new(path: '/foo')
|
38
39
|
router = Router.new(location: location)
|
39
40
|
|
40
41
|
expect(router.current_path).to eq '/foo'
|
41
42
|
|
42
|
-
location
|
43
|
+
location.path = '/bar'
|
43
44
|
|
44
45
|
expect(router.current_path).to eq '/bar'
|
45
46
|
end
|
46
47
|
|
47
48
|
it 'gets the params from the path' do
|
48
|
-
expect(router.
|
49
|
+
expect(router.params('/articles/123')).to eq({ article_id: '123' })
|
49
50
|
end
|
50
51
|
end
|
51
52
|
end
|
data/spec/component_spec.rb
CHANGED
@@ -1,15 +1,5 @@
|
|
1
1
|
require 'clearwater/component'
|
2
2
|
|
3
|
-
# When running specs from the CLI, it doesn't define this class
|
4
|
-
unless defined? Browser::Event
|
5
|
-
module Browser
|
6
|
-
class Event
|
7
|
-
def initialize event
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
3
|
module Clearwater
|
14
4
|
RSpec.describe Component do
|
15
5
|
let(:component_class) {
|
@@ -32,13 +22,13 @@ module Clearwater
|
|
32
22
|
it 'sanitizes element attributes' do
|
33
23
|
attributes = Component.sanitize_attributes({
|
34
24
|
class: 'foo',
|
35
|
-
onclick: proc { |event| expect(event).to be_a
|
25
|
+
onclick: proc { |event| expect(event).to be_a Bowser::Event },
|
36
26
|
})
|
37
27
|
|
38
28
|
# Renames :class to :class_name
|
39
29
|
expect(attributes[:class_name]).to eq 'foo'
|
40
30
|
|
41
|
-
# Wraps yielded events in a
|
31
|
+
# Wraps yielded events in a Bowser::Event
|
42
32
|
attributes[:onclick].call(`document.createEvent('MouseEvent')`)
|
43
33
|
end
|
44
34
|
|
@@ -57,7 +47,7 @@ module Clearwater
|
|
57
47
|
it 'retrieves params from the router' do
|
58
48
|
router = double('Router')
|
59
49
|
params = { article_id: 123 }
|
60
|
-
allow(router).to receive(:
|
50
|
+
allow(router).to receive(:params) { params }
|
61
51
|
allow(router).to receive(:current_path) { '/articles/123' }
|
62
52
|
component.router = router
|
63
53
|
|
metadata
CHANGED
@@ -1,97 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clearwater
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Gaskins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.7'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bowser
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.1.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.1.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: opal-rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.5.0.beta2
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.5.0.beta2
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '10.1'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.1'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: pry
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0.9'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.9'
|
97
97
|
description: Front-end web framework built on Opal
|
@@ -101,22 +101,26 @@ executables: []
|
|
101
101
|
extensions: []
|
102
102
|
extra_rdoc_files: []
|
103
103
|
files:
|
104
|
-
- lib/clearwater.rb
|
105
104
|
- lib/clearwater/version.rb
|
106
|
-
-
|
105
|
+
- lib/clearwater.rb
|
107
106
|
- opal/clearwater/application.rb
|
108
107
|
- opal/clearwater/application_registry.rb
|
108
|
+
- opal/clearwater/black_box_node.rb
|
109
109
|
- opal/clearwater/cached_render.rb
|
110
110
|
- opal/clearwater/component.rb
|
111
|
+
- opal/clearwater/dom_reference.rb
|
111
112
|
- opal/clearwater/link.rb
|
112
|
-
- opal/clearwater/router.rb
|
113
113
|
- opal/clearwater/router/route.rb
|
114
114
|
- opal/clearwater/router/route_collection.rb
|
115
|
+
- opal/clearwater/router.rb
|
115
116
|
- opal/clearwater/svg_component.rb
|
116
|
-
- opal/clearwater/virtual_dom.rb
|
117
117
|
- opal/clearwater/virtual_dom/js/virtual_dom.js
|
118
|
+
- opal/clearwater/virtual_dom.rb
|
119
|
+
- opal/clearwater.rb
|
118
120
|
- spec/clearwater/application_spec.rb
|
121
|
+
- spec/clearwater/black_box_node_spec.rb
|
119
122
|
- spec/clearwater/cached_render_spec.rb
|
123
|
+
- spec/clearwater/dom_reference_spec.rb
|
120
124
|
- spec/clearwater/router_spec.rb
|
121
125
|
- spec/component_spec.rb
|
122
126
|
homepage: https://clearwater-rb.github.io/
|
@@ -129,22 +133,24 @@ require_paths:
|
|
129
133
|
- lib
|
130
134
|
required_ruby_version: !ruby/object:Gem::Requirement
|
131
135
|
requirements:
|
132
|
-
- -
|
136
|
+
- - '>='
|
133
137
|
- !ruby/object:Gem::Version
|
134
138
|
version: '0'
|
135
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
140
|
requirements:
|
137
|
-
- -
|
141
|
+
- - '>'
|
138
142
|
- !ruby/object:Gem::Version
|
139
|
-
version:
|
143
|
+
version: 1.3.1
|
140
144
|
requirements: []
|
141
145
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.
|
146
|
+
rubygems_version: 2.0.14
|
143
147
|
signing_key:
|
144
148
|
specification_version: 4
|
145
149
|
summary: Front-end web framework built on Opal
|
146
150
|
test_files:
|
147
151
|
- spec/clearwater/application_spec.rb
|
152
|
+
- spec/clearwater/black_box_node_spec.rb
|
148
153
|
- spec/clearwater/cached_render_spec.rb
|
154
|
+
- spec/clearwater/dom_reference_spec.rb
|
149
155
|
- spec/clearwater/router_spec.rb
|
150
156
|
- spec/component_spec.rb
|