reactive-ruby 0.7.33 → 0.7.34

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: 8a8e6fbd1897288817fe7b3abea0548784acb143
4
- data.tar.gz: 9d89b9b4f0c398e450bb55117e1f6c2ef6ef64c4
3
+ metadata.gz: 6c55ecaccf2f1aa02991631d35faff6457449212
4
+ data.tar.gz: 4c28f571ca9a7fdae271866f13b6f7e310c7b6a5
5
5
  SHA512:
6
- metadata.gz: 4bf33cec30e4227dd94ff1fb453f625b40aa24fbb13201c30fa743e6529f2f768f4057174157402a9220ea2c165fefde5a1603ccdbb4ff8fec8edfffcf4e40b8
7
- data.tar.gz: a3f22d4c8721d647f98f7e3eff04805fa6a6a5f80963edca8cbec9febb1c6ebf7c041b172668636b7314ee756e735674e56f247288acd7e2b74c540f4662e71e
6
+ metadata.gz: 08a20f1549e946d19ea82dc3785f72ecfa8e249ad031728ae7e672d8a40f102b53c9138c69e285ae09eed5ba2bef372a71c701c720b80d4ef7a36e41769531dc
7
+ data.tar.gz: 40638518e753f5a03e1f20848d4aa2586fb5f02dcdce3e8eab500c68e48d2099e92b3b12295bf36c6ea696910af122ede99b41ae08d47d1c4ff8337fbd5d1dfc
data/.gitignore CHANGED
@@ -30,3 +30,4 @@ node_modules
30
30
  .bundle
31
31
 
32
32
  spec/test_app
33
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
5
  - 2.1
6
+ - jruby-19mode
6
7
  script:
7
8
  - bundle exec rake test_app
8
9
  - bundle exec rake
data/Gemfile CHANGED
@@ -1,8 +1,2 @@
1
1
  source 'https://rubygems.org'
2
- group :development, :test do
3
- gem 'therubyracer', platforms: :ruby
4
- gem 'rails'
5
- gem 'react-rails'
6
- gem 'opal-rails'
7
- end
8
2
  gemspec
data/README.md CHANGED
@@ -58,9 +58,12 @@ In your Gemfile:
58
58
 
59
59
  ```ruby
60
60
  gem 'reactive-ruby'
61
- gem 'react-rails'
61
+ gem 'react-rails', '~> 1.3.2'
62
62
  gem 'opal-rails'
63
63
  gem 'therubyracer', platforms: :ruby # Required for prerendering
64
+ # for JRuby you need the below line instead
65
+ # gem 'therubyrhino, platforms: :jruby
66
+
64
67
  ```
65
68
 
66
69
  Run `bundle install` and restart your rails server.
@@ -136,7 +139,7 @@ props), to render the component:
136
139
  class HomeController < ApplicationController
137
140
  def show
138
141
  # render_component uses the controller name to find the 'show' component.
139
- render_component say_hello_to: params[:say_hello_to]
142
+ render_component say_hello_to: params[:say_hello_to]
140
143
  end
141
144
  end
142
145
  ```
@@ -161,11 +164,11 @@ regardless of the name of the controller method.
161
164
 
162
165
  Searching for components works like this: Given a controller named
163
166
  "Foo" then react.rb will search for a module named `Foo` containing the component.
164
- If this fails all modules will be searched (i.e. the name of the controller will be
167
+ If this fails all modules will be searched (i.e. the name of the controller will be
165
168
  ignored.) In either case the search begins at the outer most scope until a match is made.
166
169
 
167
170
  Thus for example given a controller named `Foo`, components could be found in the `Foo` module,
168
- the `Components::Foo` module, in the outer most scope, or in any nested module.
171
+ the `Components::Foo` module, in the outer most scope, or in any nested module.
169
172
  The way the search works allows for small projects that do not need a lot
170
173
  of name spacing, and also allows components to be shared across several controllers.
171
174
 
@@ -1,15 +1,13 @@
1
- <% if defined? application_definition %>
1
+ <% if defined? application_definition -%>
2
+ require File.expand_path('../boot', __FILE__)
3
+ require 'rails/all'
2
4
 
3
- require File.expand_path('../boot', __FILE__)
5
+ # Require the gems listed in Gemfile, including any gems
6
+ # you've limited to :test, :development, or :production.
7
+ Bundler.require(*Rails.groups(assets: %w(development test)))
4
8
 
5
- require 'rails/all'
9
+ require 'opal-rails'
10
+ require 'reactive-ruby'
6
11
 
7
- # Require the gems listed in Gemfile, including any gems
8
- # you've limited to :test, :development, or :production.
9
- Bundler.require(*Rails.groups(assets: %w(development test)))
10
-
11
- require 'reactive-ruby'
12
-
13
- <%= application_definition %>
14
-
15
- <% end %>
12
+ <%= application_definition %>
13
+ <% end -%>
@@ -7,13 +7,14 @@ require 'react/observable'
7
7
  require 'react/state'
8
8
  require 'react/component/api'
9
9
  require 'react/component/class_methods'
10
+ require 'react/component/props_wrapper'
10
11
  require 'native'
11
12
 
12
13
  module React
13
14
  module Component
14
15
  def self.included(base)
15
16
  base.include(API)
16
- base.include(React::Callbacks)
17
+ base.include(Callbacks)
17
18
  base.class_eval do
18
19
  class_attribute :initial_state
19
20
  define_callback :before_mount
@@ -22,48 +23,6 @@ module React
22
23
  define_callback :before_update
23
24
  define_callback :after_update
24
25
  define_callback :before_unmount
25
-
26
- def deprecated_params_method(name, *args, &block)
27
- self.class.deprecation_warning "Direct access to param `#{name}`. Use `params.#{name}` instead."
28
- params.send(name, *args, &block)
29
- end
30
-
31
- def render
32
- raise "no render defined"
33
- end unless method_defined?(:render)
34
-
35
- def children
36
- nodes = [`#{@native}.props.children`].flatten
37
- class << nodes
38
- include Enumerable
39
-
40
- def to_n
41
- self
42
- end
43
-
44
- def each(&block)
45
- if block_given?
46
- %x{
47
- React.Children.forEach(#{self.to_n}, function(context){
48
- #{block.call(React::Element.new(`context`))}
49
- })
50
- }
51
- nil
52
- else
53
- Enumerator.new(`React.Children.count(#{self.to_n})`) do |y|
54
- %x{
55
- React.Children.forEach(#{self.to_n}, function(context){
56
- #{y << React::Element.new(`context`)}
57
- })
58
- }
59
- end
60
- end
61
- end
62
- end
63
-
64
- nodes
65
- end
66
-
67
26
  end
68
27
  base.extend(ClassMethods)
69
28
 
@@ -71,7 +30,6 @@ module React
71
30
  parent = base.name.split("::").inject([Module]) { |nesting, next_const| nesting + [nesting.last.const_get(next_const)] }[-2]
72
31
 
73
32
  class << parent
74
-
75
33
  def method_missing(n, *args, &block)
76
34
  name = n
77
35
  if name =~ /_as_node$/
@@ -86,9 +44,8 @@ module React
86
44
  unless name && name.method_defined?(:render)
87
45
  return super
88
46
  end
89
- React::RenderingContext.build_or_render(node_only, name, *args, &block)
47
+ RenderingContext.build_or_render(node_only, name, *args, &block)
90
48
  end
91
-
92
49
  end
93
50
  end
94
51
  end
@@ -97,9 +54,49 @@ module React
97
54
  @native = native_element
98
55
  end
99
56
 
57
+ def render
58
+ raise "no render defined"
59
+ end unless method_defined?(:render)
60
+
61
+ def deprecated_params_method(name, *args, &block)
62
+ self.class.deprecation_warning "Direct access to param `#{name}`. Use `params.#{name}` instead."
63
+ params.send(name, *args, &block)
64
+ end
65
+
66
+ def children
67
+ nodes = [`#{@native}.props.children`].flatten
68
+ class << nodes
69
+ include Enumerable
70
+
71
+ def to_n
72
+ self
73
+ end
74
+
75
+ def each(&block)
76
+ if block_given?
77
+ %x{
78
+ React.Children.forEach(#{self.to_n}, function(context){
79
+ #{block.call(React::Element.new(`context`))}
80
+ })
81
+ }
82
+ nil
83
+ else
84
+ Enumerator.new(`React.Children.count(#{self.to_n})`) do |y|
85
+ %x{
86
+ React.Children.forEach(#{self.to_n}, function(context){
87
+ #{y << React::Element.new(`context`)}
88
+ })
89
+ }
90
+ end
91
+ end
92
+ end
93
+ end
94
+
95
+ nodes
96
+ end
97
+
100
98
  def params
101
99
  @props_wrapper
102
- #Hash.new(`#{@native}.props`)
103
100
  end
104
101
 
105
102
  def props
@@ -131,16 +128,16 @@ module React
131
128
  IsomorphicHelpers.load_context(true) if IsomorphicHelpers.on_opal_client?
132
129
  @props_wrapper = self.class.props_wrapper.new(Hash.new(`#{@native}.props`))
133
130
  set_state! initial_state if initial_state
134
- React::State.initialize_states(self, initial_state)
135
- React::State.set_state_context_to(self) { self.run_callback(:before_mount) }
131
+ State.initialize_states(self, initial_state)
132
+ State.set_state_context_to(self) { self.run_callback(:before_mount) }
136
133
  rescue Exception => e
137
134
  self.class.process_exception(e, self)
138
135
  end
139
136
 
140
137
  def component_did_mount
141
- React::State.set_state_context_to(self) do
138
+ State.set_state_context_to(self) do
142
139
  self.run_callback(:after_mount)
143
- React::State.update_states_to_observe
140
+ State.update_states_to_observe
144
141
  end
145
142
  rescue Exception => e
146
143
  self.class.process_exception(e, self)
@@ -149,7 +146,7 @@ module React
149
146
  def component_will_receive_props(next_props)
150
147
  # need to rethink how this works in opal-react, or if its actually that useful within the react.rb environment
151
148
  # for now we are just using it to clear processed_params
152
- React::State.set_state_context_to(self) { self.run_callback(:before_receive_props, Hash.new(next_props)) }
149
+ State.set_state_context_to(self) { self.run_callback(:before_receive_props, Hash.new(next_props)) }
153
150
  rescue Exception => e
154
151
  self.class.process_exception(e, self)
155
152
  end
@@ -160,7 +157,7 @@ module React
160
157
  end
161
158
 
162
159
  def should_component_update?(next_props, next_state)
163
- React::State.set_state_context_to(self) do
160
+ State.set_state_context_to(self) do
164
161
  next_props = Hash.new(next_props)
165
162
  if self.respond_to?(:needs_update?)
166
163
  !!self.needs_update?(next_props, Hash.new(next_state))
@@ -181,25 +178,25 @@ module React
181
178
  end
182
179
 
183
180
  def component_will_update(next_props, next_state)
184
- React::State.set_state_context_to(self) { self.run_callback(:before_update, Hash.new(next_props), Hash.new(next_state)) }
181
+ State.set_state_context_to(self) { self.run_callback(:before_update, Hash.new(next_props), Hash.new(next_state)) }
185
182
  @props_wrapper = self.class.props_wrapper.new(Hash.new(next_props))
186
183
  rescue Exception => e
187
184
  self.class.process_exception(e, self)
188
185
  end
189
186
 
190
187
  def component_did_update(prev_props, prev_state)
191
- React::State.set_state_context_to(self) do
188
+ State.set_state_context_to(self) do
192
189
  self.run_callback(:after_update, Hash.new(prev_props), Hash.new(prev_state))
193
- React::State.update_states_to_observe
190
+ State.update_states_to_observe
194
191
  end
195
192
  rescue Exception => e
196
193
  self.class.process_exception(e, self)
197
194
  end
198
195
 
199
196
  def component_will_unmount
200
- React::State.set_state_context_to(self) do
197
+ State.set_state_context_to(self) do
201
198
  self.run_callback(:before_unmount)
202
- React::State.remove
199
+ State.remove
203
200
  end
204
201
  rescue Exception => e
205
202
  self.class.process_exception(e, self)
@@ -232,7 +229,7 @@ module React
232
229
  node_only = true
233
230
  name = name.gsub(/_as_node$/, "")
234
231
  end
235
- unless (React::HTML_TAGS.include?(name) || name == 'present' || name == '_p_tag' || (name = component?(name, self)))
232
+ unless (HTML_TAGS.include?(name) || name == 'present' || name == '_p_tag' || (name = component?(name, self)))
236
233
  return super
237
234
  end
238
235
 
@@ -244,21 +241,21 @@ module React
244
241
  name = "p"
245
242
  end
246
243
 
247
- React::RenderingContext.build_or_render(node_only, name, *args, &block)
244
+ RenderingContext.build_or_render(node_only, name, *args, &block)
248
245
  end
249
246
 
250
247
  def watch(value, &on_change)
251
- React::Observable.new(value, on_change)
248
+ Observable.new(value, on_change)
252
249
  end
253
250
 
254
251
  def define_state(*args, &block)
255
- React::State.initialize_states(self, self.class.define_state(*args, &block))
252
+ State.initialize_states(self, self.class.define_state(*args, &block))
256
253
  end
257
254
 
258
255
  attr_reader :waiting_on_resources
259
256
 
260
257
  def _render_wrapper
261
- React::State.set_state_context_to(self) do
258
+ State.set_state_context_to(self) do
262
259
  RenderingContext.render(nil) {render || ""}.tap { |element| @waiting_on_resources = element.waiting_on_resources if element.respond_to? :waiting_on_resources }
263
260
  end
264
261
  rescue Exception => e
@@ -1,10 +1,8 @@
1
- require 'react/component'
2
-
3
1
  module React
4
2
  module Component
5
3
  class Base
6
4
  def self.inherited(child)
7
- child.send(:include, React::Component)
5
+ child.include(Component)
8
6
  end
9
7
  end
10
8
  end
@@ -114,7 +114,7 @@ module React
114
114
  default_initial_value = (block && block.arity == 0) ? yield : nil
115
115
  states_hash = (states.last.is_a?(Hash)) ? states.pop : {}
116
116
  states.each { |name| states_hash[name] = default_initial_value }
117
- React::State.initialize_states(self, states_hash)
117
+ State.initialize_states(self, states_hash)
118
118
  states_hash.each do |name, initial_value|
119
119
  define_state_methods(self, name, self, &block)
120
120
  define_state_methods(singleton_class, name, self, &block)
@@ -124,27 +124,27 @@ module React
124
124
  def define_state_methods(this, name, from = nil, &block)
125
125
  this.define_method("#{name}") do
126
126
  self.class.deprecation_warning "Direct access to state `#{name}`. Use `state.#{name}` instead." if from.nil? || from == this
127
- React::State.get_state(from || self, name)
127
+ State.get_state(from || self, name)
128
128
  end
129
129
  this.define_method("#{name}=") do |new_state|
130
130
  self.class.deprecation_warning "Direct assignment to state `#{name}`. Use `#{(from && from != this) ? from : 'state'}.#{name}!` instead."
131
- yield name, React::State.get_state(from || self, name), new_state if block && block.arity > 0
132
- React::State.set_state(from || self, name, new_state)
131
+ yield name, State.get_state(from || self, name), new_state if block && block.arity > 0
132
+ State.set_state(from || self, name, new_state)
133
133
  end
134
134
  this.define_method("#{name}!") do |*args|
135
135
  self.class.deprecation_warning "Direct access to state `#{name}`. Use `state.#{name}` instead." if from.nil? or from == this
136
136
  if args.count > 0
137
- yield name, React::State.get_state(from || self, name), args[0] if block && block.arity > 0
138
- current_value = React::State.get_state(from || self, name)
139
- React::State.set_state(from || self, name, args[0])
137
+ yield name, State.get_state(from || self, name), args[0] if block && block.arity > 0
138
+ current_value = State.get_state(from || self, name)
139
+ State.set_state(from || self, name, args[0])
140
140
  current_value
141
141
  else
142
- current_state = React::State.get_state(from || self, name)
143
- yield name, React::State.get_state(from || self, name), current_state if block && block.arity > 0
144
- React::State.set_state(from || self, name, current_state)
145
- React::Observable.new(current_state) do |update|
146
- yield name, React::State.get_state(from || self, name), update if block && block.arity > 0
147
- React::State.set_state(from || self, name, update)
142
+ current_state = State.get_state(from || self, name)
143
+ yield name, State.get_state(from || self, name), current_state if block && block.arity > 0
144
+ State.set_state(from || self, name, current_state)
145
+ Observable.new(current_state) do |update|
146
+ yield name, State.get_state(from || self, name), update if block && block.arity > 0
147
+ State.set_state(from || self, name, update)
148
148
  end
149
149
  end
150
150
  end
@@ -1,13 +1,13 @@
1
1
  module React
2
2
  module Component
3
- class PropsWrapper < BasicObject
3
+ class PropsWrapper
4
4
  attr_reader :props
5
5
 
6
6
  def self.define_param(name, param_type, owner)
7
- owner.define_method("#{name}") do
7
+ owner.define_method("#{name}") do |*args, &block|
8
8
  deprecated_params_method("#{name}", *args, &block)
9
9
  end
10
- if param_type == React::Observable
10
+ if param_type == Observable
11
11
  owner.define_method("#{name}!") do |*args|
12
12
  deprecated_params_method("#{name}!", *args)
13
13
  end
@@ -48,7 +48,7 @@ module React
48
48
  end
49
49
 
50
50
  def initialize(props)
51
- @props= props|| {}
51
+ @props = props || {}
52
52
  end
53
53
 
54
54
  def [](prop)
data/lib/react/state.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  module React
2
-
3
2
  class StateWrapper < BasicObject
4
-
5
3
  def initialize(native, from)
6
4
  @state_hash = Hash.new(`#{native}.state`)
7
5
  @from = from
@@ -18,23 +16,22 @@ module React
18
16
  def method_missing(method, *args)
19
17
  if match = method.match(/^(.+)\!$/)
20
18
  if args.count > 0
21
- current_value = React::State.get_state(@from, match[1])
22
- React::State.set_state(@from, $1, args[0])
19
+ current_value = State.get_state(@from, match[1])
20
+ State.set_state(@from, $1, args[0])
23
21
  current_value
24
22
  else
25
- current_state = React::State.get_state(@from, match[1])
26
- React::State.set_state(@from, $1, current_state)
27
- React::Observable.new(current_state) do |update|
28
- React::State.set_state(@from, $1, update)
23
+ current_state = State.get_state(@from, match[1])
24
+ State.set_state(@from, $1, current_state)
25
+ Observable.new(current_state) do |update|
26
+ State.set_state(@from, $1, update)
29
27
  end
30
28
  end
31
29
  else
32
- React::State.get_state(@from, method)
30
+ State.get_state(@from, method)
33
31
  end
34
32
  end
35
33
  end
36
34
 
37
-
38
35
  class State
39
36
  class << self
40
37
  attr_reader :current_observer
data/lib/reactive-ruby.rb CHANGED
@@ -1,14 +1,13 @@
1
1
  if RUBY_ENGINE == 'opal'
2
2
  require 'sources/react.js'
3
3
  require 'react/top_level'
4
+ require 'react/observable'
4
5
  require 'react/component'
5
- require 'react/component/props_wrapper'
6
6
  require 'react/component/base'
7
7
  require 'react/element'
8
8
  require 'react/event'
9
9
  require 'react/api'
10
10
  require 'react/validator'
11
- require 'react/observable'
12
11
  require 'react/rendering_context'
13
12
  require 'react/state'
14
13
  require 'reactive-ruby/isomorphic_helpers'
@@ -1,5 +1,14 @@
1
1
  module ReactiveRuby
2
2
  module ServerRendering
3
+ def self.context_instance_name
4
+ return '@rhino_context' if RUBY_PLATFORM == 'java'
5
+ '@v8_context'
6
+ end
7
+
8
+ def self.context_instance_for(context)
9
+ context.instance_variable_get(context_instance_name)
10
+ end
11
+
3
12
  class ContextualRenderer < React::ServerRendering::SprocketsRenderer
4
13
  def initialize(options = {})
5
14
  super(options)
@@ -7,9 +16,9 @@ module ReactiveRuby
7
16
  end
8
17
 
9
18
  def render(component_name, props, prerender_options)
10
- if prerender_options.is_a? Hash
19
+ if prerender_options.is_a?(Hash)
11
20
  if v8_runtime? && prerender_options[:context_initializer]
12
- raise React::ServerRendering::PrerenderError.new(component_name, props, "you must use 'therubyracer' with the prerender[:context] option") unless v8_runtime?
21
+ raise PrerenderError.new(component_name, props, "you must use 'therubyracer' with the prerender[:context] option") unless v8_runtime?
13
22
  else
14
23
  prerender_options[:context_initializer].call v8_context
15
24
  prerender_options = prerender_options[:static] ? :static : true
@@ -22,11 +31,11 @@ module ReactiveRuby
22
31
  private
23
32
 
24
33
  def v8_runtime?
25
- ExecJS.runtime.name == "(V8)"
34
+ ["(V8)", "therubyrhino (Rhino)"].include?(ExecJS.runtime.name)
26
35
  end
27
36
 
28
37
  def v8_context
29
- @v8_context ||= @context.instance_variable_get("@v8_context")
38
+ @v8_context ||= ReactiveRuby::ServerRendering.context_instance_for(@context)
30
39
  end
31
40
  end
32
41
  end
@@ -1,3 +1,3 @@
1
1
  module React
2
- VERSION = "0.7.33"
2
+ VERSION = "0.7.34"
3
3
  end
@@ -20,13 +20,25 @@ Gem::Specification.new do |s|
20
20
 
21
21
 
22
22
 
23
- s.add_dependency 'opal'
23
+ s.add_dependency 'opal', '0.8.0'
24
24
  s.add_dependency 'opal-activesupport', '>= 0.2.0'
25
- s.add_dependency 'opal-browser'
25
+ s.add_dependency 'opal-browser', '0.2.0'
26
26
  s.add_development_dependency 'rake'
27
- s.add_development_dependency 'rspec-rails'
27
+ s.add_development_dependency 'rspec-rails', '3.3.3'
28
28
  s.add_development_dependency 'timecop'
29
- s.add_development_dependency 'opal-rspec'
29
+ s.add_development_dependency 'opal-rspec', '0.4.3'
30
30
  s.add_development_dependency 'sinatra'
31
- s.add_development_dependency 'sqlite3' # For Test Rails App
31
+
32
+ # For Test Rails App
33
+ s.add_development_dependency 'rails', '4.2.4'
34
+ s.add_development_dependency 'react-rails', '1.3.1'
35
+ s.add_development_dependency 'opal-rails', '0.8.0'
36
+ if RUBY_PLATFORM == 'java'
37
+ s.add_development_dependency 'jdbc-sqlite3'
38
+ s.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
39
+ s.add_development_dependency 'therubyrhino'
40
+ else
41
+ s.add_development_dependency 'sqlite3', '1.3.10'
42
+ s.add_development_dependency 'therubyracer', '0.12.2'
43
+ end
32
44
  end
@@ -25,9 +25,12 @@ describe React::Component::Base do
25
25
  @instance_data.join(" ")
26
26
  end
27
27
  end
28
- expect(React.render_to_static_markup(React.create_element(Foo))).to eq("<span>working</span>")
29
- expect(React.render_to_static_markup(React.create_element(Bar))).to eq("<span>working well</span>")
28
+ expect(rendered_component(Foo)).to eq("<span>working</span>")
29
+ expect(rendered_component(Bar)).to eq("<span>working well</span>")
30
30
  end
31
31
 
32
+ def rendered_component(component)
33
+ React.render_to_static_markup(React.create_element(component))
34
+ end
32
35
  end
33
36
  end
@@ -2,6 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  if opal?
4
4
  describe 'the param macro' do
5
+ it 'still defines deprecated param accessor method' do
6
+ stub_const 'Foo', Class.new(React::Component::Base)
7
+ Foo.class_eval do
8
+ param :foo
9
+
10
+ def render
11
+ div { foo }
12
+ end
13
+ end
14
+
15
+ html = React.render_to_static_markup(React.create_element(Foo, {foo: :bar}))
16
+ expect(html).to eq('<div>bar</div>')
17
+ end
18
+
5
19
  it "can create and access a required param" do
6
20
  stub_const 'Foo', Class.new(React::Component::Base)
7
21
  Foo.class_eval do
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ if opal?
4
+ describe 'React::State' do
5
+ it "can created static exported states" do
6
+ stub_const 'Foo', Class.new
7
+ Foo.class_eval do
8
+ include React::Component
9
+ export_state(:foo) { 'bar' }
10
+ end
11
+
12
+ expect(Foo.foo).to eq('bar')
13
+ end
14
+
15
+ # these will all require async operations and testing to see if things get
16
+ # re-rendered see spec_helper the "render" test method
17
+
18
+ # if Foo.foo is used during rendering then when Foo.foo changes we will
19
+ # rerender
20
+ it "sets up observers when exported states are read"
21
+
22
+ # React::State.set_state(object, attribute, value) +
23
+ # React::State.get_state(object, attribute)
24
+ it "can be accessed outside of react using get/set_state"
25
+ end
26
+ end
@@ -10,7 +10,7 @@ RSpec.describe ReactiveRuby::ComponentLoader do
10
10
 
11
11
  let(:js) { ::Rails.application.assets['components'].to_s }
12
12
  let(:context) { ExecJS.compile(GLOBAL_WRAPPER + js) }
13
- let(:v8_context) { context.instance_variable_get(:@v8_context) }
13
+ let(:v8_context) { ReactiveRuby::ServerRendering.context_instance_for(context) }
14
14
 
15
15
  describe '.new' do
16
16
  it 'raises a meaningful exception when initialized without a context' do
@@ -73,7 +73,7 @@ if ruby?
73
73
  end
74
74
  js = "#{React::ServerRendering::ExecJSRenderer::GLOBAL_WRAPPER}#{js}"
75
75
  ctx = ExecJS.compile(js)
76
- ctx = ctx.instance_variable_get("@v8_context")
76
+ ctx = ReactiveRuby::ServerRendering.context_instance_for(ctx)
77
77
  end
78
78
 
79
79
  def react_context
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reactive-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.33
4
+ version: 0.7.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-07 00:00:00.000000000 Z
11
+ date: 2015-12-14 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
- version: '0'
19
+ version: 0.8.0
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
- version: '0'
26
+ version: 0.8.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: opal-activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: opal-browser
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 0.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 0.2.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: rspec-rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 3.3.3
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
- version: '0'
82
+ version: 3.3.3
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: timecop
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -98,16 +98,16 @@ dependencies:
98
98
  name: opal-rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 0.4.3
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: 0.4.3
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: sinatra
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +122,76 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rails
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 4.2.4
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 4.2.4
139
+ - !ruby/object:Gem::Dependency
140
+ name: react-rails
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 1.3.1
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 1.3.1
153
+ - !ruby/object:Gem::Dependency
154
+ name: opal-rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 0.8.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 0.8.0
125
167
  - !ruby/object:Gem::Dependency
126
168
  name: sqlite3
127
169
  requirement: !ruby/object:Gem::Requirement
128
170
  requirements:
129
- - - ">="
171
+ - - '='
130
172
  - !ruby/object:Gem::Version
131
- version: '0'
173
+ version: 1.3.10
132
174
  type: :development
133
175
  prerelease: false
134
176
  version_requirements: !ruby/object:Gem::Requirement
135
177
  requirements:
136
- - - ">="
178
+ - - '='
137
179
  - !ruby/object:Gem::Version
138
- version: '0'
180
+ version: 1.3.10
181
+ - !ruby/object:Gem::Dependency
182
+ name: therubyracer
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 0.12.2
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 0.12.2
139
195
  description: Write React UI components in pure Ruby.
140
196
  email: zeta11235813@gmail.com
141
197
  executables: []
@@ -146,7 +202,6 @@ files:
146
202
  - ".gitignore"
147
203
  - ".travis.yml"
148
204
  - Gemfile
149
- - Gemfile.lock
150
205
  - LICENSE
151
206
  - README.md
152
207
  - Rakefile
@@ -293,7 +348,7 @@ files:
293
348
  - spec/controller_helper_spec.rb
294
349
  - spec/index.html.erb
295
350
  - spec/react/callbacks_spec.rb
296
- - spec/react/component_base_spec.rb
351
+ - spec/react/component/base_spec.rb
297
352
  - spec/react/component_spec.rb
298
353
  - spec/react/dsl_spec.rb
299
354
  - spec/react/element_spec.rb
@@ -302,7 +357,7 @@ files:
302
357
  - spec/react/observable_spec.rb
303
358
  - spec/react/param_declaration_spec.rb
304
359
  - spec/react/react_spec.rb
305
- - spec/react/react_state_spec.rb
360
+ - spec/react/state_spec.rb
306
361
  - spec/react/top_level_component_spec.rb
307
362
  - spec/react/tutorial/tutorial_spec.rb
308
363
  - spec/react/validator_spec.rb
@@ -341,7 +396,7 @@ test_files:
341
396
  - spec/controller_helper_spec.rb
342
397
  - spec/index.html.erb
343
398
  - spec/react/callbacks_spec.rb
344
- - spec/react/component_base_spec.rb
399
+ - spec/react/component/base_spec.rb
345
400
  - spec/react/component_spec.rb
346
401
  - spec/react/dsl_spec.rb
347
402
  - spec/react/element_spec.rb
@@ -350,7 +405,7 @@ test_files:
350
405
  - spec/react/observable_spec.rb
351
406
  - spec/react/param_declaration_spec.rb
352
407
  - spec/react/react_spec.rb
353
- - spec/react/react_state_spec.rb
408
+ - spec/react/state_spec.rb
354
409
  - spec/react/top_level_component_spec.rb
355
410
  - spec/react/tutorial/tutorial_spec.rb
356
411
  - spec/react/validator_spec.rb
data/Gemfile.lock DELETED
@@ -1,193 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- reactive-ruby (0.7.33)
5
- opal
6
- opal-activesupport (>= 0.2.0)
7
- opal-browser
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- actionmailer (4.2.4)
13
- actionpack (= 4.2.4)
14
- actionview (= 4.2.4)
15
- activejob (= 4.2.4)
16
- mail (~> 2.5, >= 2.5.4)
17
- rails-dom-testing (~> 1.0, >= 1.0.5)
18
- actionpack (4.2.4)
19
- actionview (= 4.2.4)
20
- activesupport (= 4.2.4)
21
- rack (~> 1.6)
22
- rack-test (~> 0.6.2)
23
- rails-dom-testing (~> 1.0, >= 1.0.5)
24
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
25
- actionview (4.2.4)
26
- activesupport (= 4.2.4)
27
- builder (~> 3.1)
28
- erubis (~> 2.7.0)
29
- rails-dom-testing (~> 1.0, >= 1.0.5)
30
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
31
- activejob (4.2.4)
32
- activesupport (= 4.2.4)
33
- globalid (>= 0.3.0)
34
- activemodel (4.2.4)
35
- activesupport (= 4.2.4)
36
- builder (~> 3.1)
37
- activerecord (4.2.4)
38
- activemodel (= 4.2.4)
39
- activesupport (= 4.2.4)
40
- arel (~> 6.0)
41
- activesupport (4.2.4)
42
- i18n (~> 0.7)
43
- json (~> 1.7, >= 1.7.7)
44
- minitest (~> 5.1)
45
- thread_safe (~> 0.3, >= 0.3.4)
46
- tzinfo (~> 1.1)
47
- arel (6.0.3)
48
- babel-source (5.8.26)
49
- babel-transpiler (0.7.0)
50
- babel-source (>= 4.0, < 6)
51
- execjs (~> 2.0)
52
- builder (3.2.2)
53
- coffee-script-source (1.9.1.1)
54
- connection_pool (2.2.0)
55
- diff-lcs (1.2.5)
56
- erubis (2.7.0)
57
- execjs (2.6.0)
58
- globalid (0.3.6)
59
- activesupport (>= 4.1.0)
60
- hike (1.2.3)
61
- i18n (0.7.0)
62
- jquery-rails (4.0.5)
63
- rails-dom-testing (~> 1.0)
64
- railties (>= 4.2.0)
65
- thor (>= 0.14, < 2.0)
66
- json (1.8.3)
67
- libv8 (3.16.14.11)
68
- loofah (2.0.3)
69
- nokogiri (>= 1.5.9)
70
- mail (2.6.3)
71
- mime-types (>= 1.16, < 3)
72
- mime-types (2.6.2)
73
- mini_portile (0.6.2)
74
- minitest (5.8.1)
75
- nokogiri (1.6.6.2)
76
- mini_portile (~> 0.6.0)
77
- opal (0.8.0)
78
- hike (~> 1.2)
79
- sourcemap (~> 0.1.0)
80
- sprockets (~> 3.1)
81
- tilt (>= 1.4)
82
- opal-activesupport (0.2.0)
83
- opal (>= 0.5.0, < 1.0.0)
84
- opal-browser (0.2.0)
85
- opal
86
- paggio
87
- opal-jquery (0.4.0)
88
- opal (>= 0.7.0, < 0.9.0)
89
- opal-rails (0.8.0)
90
- jquery-rails
91
- opal (~> 0.8.0)
92
- opal-activesupport (>= 0.0.5)
93
- opal-jquery (~> 0.4.0)
94
- opal-rspec (~> 0.4.3)
95
- rails (>= 3.2, < 5.0)
96
- opal-rspec (0.4.3)
97
- opal (>= 0.7.0, < 0.9)
98
- paggio (0.2.5)
99
- rack (1.6.4)
100
- rack-protection (1.5.3)
101
- rack
102
- rack-test (0.6.3)
103
- rack (>= 1.0)
104
- rails (4.2.4)
105
- actionmailer (= 4.2.4)
106
- actionpack (= 4.2.4)
107
- actionview (= 4.2.4)
108
- activejob (= 4.2.4)
109
- activemodel (= 4.2.4)
110
- activerecord (= 4.2.4)
111
- activesupport (= 4.2.4)
112
- bundler (>= 1.3.0, < 2.0)
113
- railties (= 4.2.4)
114
- sprockets-rails
115
- rails-deprecated_sanitizer (1.0.3)
116
- activesupport (>= 4.2.0.alpha)
117
- rails-dom-testing (1.0.7)
118
- activesupport (>= 4.2.0.beta, < 5.0)
119
- nokogiri (~> 1.6.0)
120
- rails-deprecated_sanitizer (>= 1.0.1)
121
- rails-html-sanitizer (1.0.2)
122
- loofah (~> 2.0)
123
- railties (4.2.4)
124
- actionpack (= 4.2.4)
125
- activesupport (= 4.2.4)
126
- rake (>= 0.8.7)
127
- thor (>= 0.18.1, < 2.0)
128
- rake (10.4.2)
129
- react-rails (1.3.1)
130
- babel-transpiler (>= 0.7.0)
131
- coffee-script-source (~> 1.8)
132
- connection_pool
133
- execjs
134
- rails (>= 3.2)
135
- tilt
136
- ref (2.0.0)
137
- rspec-core (3.3.2)
138
- rspec-support (~> 3.3.0)
139
- rspec-expectations (3.3.1)
140
- diff-lcs (>= 1.2.0, < 2.0)
141
- rspec-support (~> 3.3.0)
142
- rspec-mocks (3.3.2)
143
- diff-lcs (>= 1.2.0, < 2.0)
144
- rspec-support (~> 3.3.0)
145
- rspec-rails (3.3.3)
146
- actionpack (>= 3.0, < 4.3)
147
- activesupport (>= 3.0, < 4.3)
148
- railties (>= 3.0, < 4.3)
149
- rspec-core (~> 3.3.0)
150
- rspec-expectations (~> 3.3.0)
151
- rspec-mocks (~> 3.3.0)
152
- rspec-support (~> 3.3.0)
153
- rspec-support (3.3.0)
154
- sinatra (1.4.6)
155
- rack (~> 1.4)
156
- rack-protection (~> 1.4)
157
- tilt (>= 1.3, < 3)
158
- sourcemap (0.1.1)
159
- sprockets (3.4.0)
160
- rack (> 1, < 3)
161
- sprockets-rails (2.3.3)
162
- actionpack (>= 3.0)
163
- activesupport (>= 3.0)
164
- sprockets (>= 2.8, < 4.0)
165
- sqlite3 (1.3.10)
166
- therubyracer (0.12.2)
167
- libv8 (~> 3.16.14.0)
168
- ref
169
- thor (0.19.1)
170
- thread_safe (0.3.5)
171
- tilt (2.0.1)
172
- timecop (0.7.1)
173
- tzinfo (1.2.2)
174
- thread_safe (~> 0.1)
175
-
176
- PLATFORMS
177
- ruby
178
-
179
- DEPENDENCIES
180
- opal-rails
181
- opal-rspec
182
- rails
183
- rake
184
- react-rails
185
- reactive-ruby!
186
- rspec-rails
187
- sinatra
188
- sqlite3
189
- therubyracer
190
- timecop
191
-
192
- BUNDLED WITH
193
- 1.10.6
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if opal?
4
-
5
- describe 'React::State' do
6
- # class Foo; export_state :foo; end # accessible as Foo.foo outside
7
- it "can created static exported states" do
8
- stub_const 'Foo', Class.new
9
- Foo.class_eval do
10
- include React::Component
11
- export_state(:foo) { 'bar' }
12
- end
13
-
14
- expect(Foo.foo).to eq('bar')
15
- end
16
-
17
- # these will all require async operations and testing to see if things get re-rendered see spec_helper the "render" test method
18
- it "sets up observers when exported states are read" # if Foo.foo is used during rendering then when Foo.foo changes we will rerender
19
- it "can be accessed outside of react using get/set_state" # React::State.set_state(object, attribute, value) + React::State.get_state(object, attribute)
20
- end
21
-
22
- end