hyper-component 0.12.3 → 0.99.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codeclimate.yml +27 -0
- data/.gitignore +42 -41
- data/.travis.yml +29 -0
- data/CHANGELOG.md +143 -0
- data/DOCS.md +1515 -0
- data/Gemfile +5 -2
- data/Gemfile.lock +244 -193
- data/LICENSE +5 -7
- data/README.md +49 -0
- data/Rakefile +40 -0
- data/hyper-component.gemspec +41 -31
- data/lib/hyper-component.rb +44 -9
- data/lib/rails-helpers/top_level_rails_component.rb +79 -0
- data/lib/react/api.rb +270 -0
- data/lib/react/callbacks.rb +42 -0
- data/lib/react/children.rb +38 -0
- data/lib/react/component.rb +189 -0
- data/lib/react/component/api.rb +70 -0
- data/lib/react/component/base.rb +13 -0
- data/lib/react/component/class_methods.rb +175 -0
- data/lib/react/component/dsl_instance_methods.rb +23 -0
- data/lib/react/component/params.rb +6 -0
- data/lib/react/component/props_wrapper.rb +90 -0
- data/lib/react/component/should_component_update.rb +99 -0
- data/lib/react/component/tags.rb +116 -0
- data/lib/react/config.rb +5 -0
- data/lib/react/element.rb +159 -0
- data/lib/react/event.rb +76 -0
- data/lib/react/ext/hash.rb +9 -0
- data/lib/react/ext/opal-jquery/element.rb +37 -0
- data/lib/react/ext/string.rb +8 -0
- data/lib/react/native_library.rb +87 -0
- data/lib/react/object.rb +15 -0
- data/lib/react/react-source-server.rb +3 -0
- data/lib/react/react-source.rb +17 -0
- data/lib/react/ref_callback.rb +31 -0
- data/lib/react/rendering_context.rb +149 -0
- data/lib/react/server.rb +19 -0
- data/lib/react/state_wrapper.rb +23 -0
- data/lib/react/test.rb +16 -0
- data/lib/react/test/dsl.rb +17 -0
- data/lib/react/test/matchers/render_html_matcher.rb +56 -0
- data/lib/react/test/rspec.rb +15 -0
- data/lib/react/test/session.rb +37 -0
- data/lib/react/test/utils.rb +71 -0
- data/lib/react/to_key.rb +26 -0
- data/lib/react/top_level.rb +110 -0
- data/lib/react/top_level_render.rb +28 -0
- data/lib/react/validator.rb +132 -0
- data/lib/reactive-ruby/component_loader.rb +43 -0
- data/lib/reactive-ruby/isomorphic_helpers.rb +233 -0
- data/lib/reactive-ruby/rails.rb +8 -0
- data/lib/reactive-ruby/rails/component_mount.rb +48 -0
- data/lib/reactive-ruby/rails/controller_helper.rb +14 -0
- data/lib/reactive-ruby/rails/railtie.rb +20 -0
- data/lib/reactive-ruby/serializers.rb +23 -0
- data/lib/reactive-ruby/server_rendering/contextual_renderer.rb +46 -0
- data/lib/reactive-ruby/server_rendering/hyper_asset_container.rb +46 -0
- data/lib/{hyperloop/component → reactive-ruby}/version.rb +1 -1
- data/lib/reactrb/auto-import.rb +27 -0
- data/misc/generators/reactive_ruby/test_app/templates/assets/javascripts/components.rb +3 -0
- data/misc/generators/reactive_ruby/test_app/templates/assets/javascripts/server_rendering.js +5 -0
- data/misc/generators/reactive_ruby/test_app/templates/assets/javascripts/test_application.rb +2 -0
- data/misc/generators/reactive_ruby/test_app/templates/boot.rb.erb +6 -0
- data/misc/generators/reactive_ruby/test_app/templates/script/rails +5 -0
- data/misc/generators/reactive_ruby/test_app/templates/test_application.rb.erb +13 -0
- data/misc/generators/reactive_ruby/test_app/templates/views/components/hello_world.rb +11 -0
- data/misc/generators/reactive_ruby/test_app/templates/views/components/todo.rb +14 -0
- data/misc/generators/reactive_ruby/test_app/templates/views/layouts/test_layout.html.erb +0 -0
- data/misc/generators/reactive_ruby/test_app/test_app_generator.rb +121 -0
- data/misc/how-component-name-lookup-works.md +145 -0
- data/misc/hyperloop-logo-small-pink.png +0 -0
- data/misc/logo1.png +0 -0
- data/misc/logo2.png +0 -0
- data/misc/logo3.png +0 -0
- data/path_release_steps.md +9 -0
- metadata +260 -37
- data/CODE_OF_CONDUCT.md +0 -49
@@ -0,0 +1,27 @@
|
|
1
|
+
# rubocop:disable Style/FileName
|
2
|
+
# require 'reactrb/auto-import' to automatically
|
3
|
+
# import JS libraries and components when they are detected
|
4
|
+
if RUBY_ENGINE == 'opal'
|
5
|
+
# modifies const and method_missing so that they will attempt
|
6
|
+
# to auto import native libraries and components using React::NativeLibrary
|
7
|
+
class Object
|
8
|
+
class << self
|
9
|
+
alias _reactrb_original_const_missing const_missing
|
10
|
+
alias _reactrb_original_method_missing method_missing
|
11
|
+
|
12
|
+
def const_missing(const_name)
|
13
|
+
# Opal uses const_missing to initially define things,
|
14
|
+
# so we always call the original, and respond to the exception
|
15
|
+
_reactrb_original_const_missing(const_name)
|
16
|
+
rescue StandardError => e
|
17
|
+
React::NativeLibrary.import_const_from_native(Object, const_name, true) || raise(e)
|
18
|
+
end
|
19
|
+
|
20
|
+
def method_missing(method, *args, &block)
|
21
|
+
component_class = React::NativeLibrary.import_const_from_native(self, method, false)
|
22
|
+
_reactrb_original_method_missing(method, *args, &block) unless component_class
|
23
|
+
React::RenderingContext.render(component_class, *args, &block)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<% if defined? application_definition %>
|
2
|
+
require 'rails/all'
|
3
|
+
require File.expand_path('../boot', __FILE__)
|
4
|
+
|
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)))
|
8
|
+
|
9
|
+
require 'opal-rails'
|
10
|
+
require 'hyper-react'
|
11
|
+
|
12
|
+
<%= application_definition %>
|
13
|
+
<% end %>
|
File without changes
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# Although we are not using this it would be good to move back to this model in future.
|
2
|
+
# For one thing it would be a good way to test the hyperloop/hyperstack rails installer
|
3
|
+
# so for now keep these files here as a template
|
4
|
+
|
5
|
+
require 'rails/generators/rails/app/app_generator'
|
6
|
+
|
7
|
+
module ReactiveRuby
|
8
|
+
class TestAppGenerator < ::Rails::Generators::Base
|
9
|
+
def self.source_paths
|
10
|
+
paths = self.superclass.source_paths
|
11
|
+
paths << File.expand_path('../templates', __FILE__)
|
12
|
+
paths.flatten
|
13
|
+
end
|
14
|
+
|
15
|
+
def remove_existing_app
|
16
|
+
remove_dir(test_app_path) if File.directory?(test_app_path)
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate_test_app
|
20
|
+
opts = options.dup
|
21
|
+
opts[:database] = 'sqlite3' if opts[:database].blank?
|
22
|
+
opts[:force] = true
|
23
|
+
opts[:skip_bundle] = true
|
24
|
+
|
25
|
+
puts "Generating Test Rails Application..."
|
26
|
+
invoke ::Rails::Generators::AppGenerator,
|
27
|
+
[ File.expand_path(test_app_path, destination_root) ], opts
|
28
|
+
end
|
29
|
+
|
30
|
+
def configure_test_app
|
31
|
+
template 'boot.rb.erb', "#{test_app_path}/config/boot.rb", force: true
|
32
|
+
template 'test_application.rb.erb', "#{test_app_path}/config/application.rb", force: true
|
33
|
+
template 'assets/javascripts/test_application.rb',
|
34
|
+
"#{test_app_path}/app/assets/javascripts/application.rb", force: true
|
35
|
+
template 'assets/javascripts/server_rendering.js',
|
36
|
+
"#{test_app_path}/app/assets/javascripts/server_rendering.js", force: true
|
37
|
+
template 'assets/javascripts/components.rb',
|
38
|
+
"#{test_app_path}/app/views/components.rb", force: true
|
39
|
+
template 'views/components/hello_world.rb',
|
40
|
+
"#{test_app_path}/app/views/components/hello_world.rb", force: true
|
41
|
+
template 'views/components/todo.rb',
|
42
|
+
"#{test_app_path}/app/views/components/todo.rb", force: true
|
43
|
+
template 'views/layouts/test_layout.html.erb',
|
44
|
+
"#{test_app_path}/app/views/layouts/test_layout.html.erb", force: true
|
45
|
+
template 'views/layouts/test_layout.html.erb',
|
46
|
+
"#{test_app_path}/app/views/layouts/explicit_layout.html.erb", force: true
|
47
|
+
end
|
48
|
+
|
49
|
+
def clean_superfluous_files
|
50
|
+
inside test_app_path do
|
51
|
+
remove_file '.gitignore'
|
52
|
+
remove_file 'doc'
|
53
|
+
remove_file 'Gemfile'
|
54
|
+
remove_file 'lib/tasks'
|
55
|
+
remove_file 'app/assets/images/rails.png'
|
56
|
+
remove_file 'app/assets/javascripts/application.js'
|
57
|
+
remove_file 'public/index.html'
|
58
|
+
remove_file 'public/robots.txt'
|
59
|
+
remove_file 'README.rdoc'
|
60
|
+
remove_file 'test'
|
61
|
+
remove_file 'vendor'
|
62
|
+
remove_file 'spec'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def configure_opal_rspec
|
67
|
+
inject_into_file "#{test_app_path}/config/application.rb",
|
68
|
+
after: /class Application < Rails::Application/, verbose: true do
|
69
|
+
%Q[
|
70
|
+
config.opal.method_missing = true
|
71
|
+
config.opal.optimized_operators = true
|
72
|
+
config.opal.arity_check = false
|
73
|
+
config.opal.const_missing = true
|
74
|
+
config.opal.dynamic_require_severity = :ignore
|
75
|
+
config.opal.enable_specs = true
|
76
|
+
config.opal.spec_location = 'spec-opal'
|
77
|
+
config.hyperloop.auto_config = false
|
78
|
+
|
79
|
+
config.react.server_renderer_options = {
|
80
|
+
files: ["server_rendering.js"]
|
81
|
+
}
|
82
|
+
config.react.server_renderer_directories = ["/app/assets/javascripts"]
|
83
|
+
]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
protected
|
88
|
+
|
89
|
+
def application_definition
|
90
|
+
@application_definition ||= begin
|
91
|
+
test_application_contents
|
92
|
+
end
|
93
|
+
end
|
94
|
+
alias :store_application_definition! :application_definition
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def test_app_path
|
99
|
+
'spec/test_app'
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_application_path
|
103
|
+
File.expand_path("#{test_app_path}/config/application.rb",
|
104
|
+
destination_root)
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_application_contents
|
108
|
+
return unless File.exists?(test_application_path) && !options[:pretend]
|
109
|
+
contents = File.read(test_application_path)
|
110
|
+
contents[(contents.index("module #{module_name}"))..-1]
|
111
|
+
end
|
112
|
+
|
113
|
+
def module_name
|
114
|
+
'TestApp'
|
115
|
+
end
|
116
|
+
|
117
|
+
def gemfile_path
|
118
|
+
'../../../../Gemfile'
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
#### Notes on how component names are looked up
|
2
|
+
|
3
|
+
Given:
|
4
|
+
|
5
|
+
```ruby
|
6
|
+
|
7
|
+
class Blat < React::Component::Base
|
8
|
+
|
9
|
+
render do
|
10
|
+
Bar()
|
11
|
+
Foo::Bar()
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
class Bar < React::Component::Base
|
17
|
+
end
|
18
|
+
|
19
|
+
module Foo
|
20
|
+
|
21
|
+
class Bar < React::Component::Base
|
22
|
+
|
23
|
+
render do
|
24
|
+
Blat()
|
25
|
+
Baz()
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Baz < React::Component::Base
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
```
|
34
|
+
|
35
|
+
The problem is that method lookup is different than constant lookup. We can prove it by running this code:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
def try_it(test, &block)
|
39
|
+
puts "trying #{test}"
|
40
|
+
result = yield
|
41
|
+
puts "success#{': '+result.to_s if result}"
|
42
|
+
rescue Exception => e
|
43
|
+
puts "failed: #{e}"
|
44
|
+
ensure
|
45
|
+
puts "---------------------------------"
|
46
|
+
end
|
47
|
+
|
48
|
+
module Boom
|
49
|
+
|
50
|
+
Bar = 12
|
51
|
+
|
52
|
+
def self.Bar
|
53
|
+
puts " Boom::Bar says hi"
|
54
|
+
end
|
55
|
+
|
56
|
+
class Baz
|
57
|
+
def doit
|
58
|
+
try_it("Bar()") { Bar() }
|
59
|
+
try_it("Boom::Bar()") {Boom::Bar()}
|
60
|
+
try_it("Bar") { Bar }
|
61
|
+
try_it("Boom::Bar") { Boom::Bar }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
Boom::Baz.new.doit
|
69
|
+
```
|
70
|
+
|
71
|
+
which prints:
|
72
|
+
|
73
|
+
```text
|
74
|
+
trying Bar()
|
75
|
+
failed: Bar: undefined method `Bar' for #<Boom::Baz:0x774>
|
76
|
+
---------------------------------
|
77
|
+
trying Boom::Bar()
|
78
|
+
Boom::Bar says hi
|
79
|
+
success
|
80
|
+
---------------------------------
|
81
|
+
trying Bar
|
82
|
+
success: 12
|
83
|
+
---------------------------------
|
84
|
+
trying Boom::Bar
|
85
|
+
success: 12
|
86
|
+
---------------------------------
|
87
|
+
```
|
88
|
+
|
89
|
+
[try-it](http://opalrb.org/try/?code:def%20try_it(test%2C%20%26block)%0A%20%20puts%20%22trying%20%23%7Btest%7D%22%0A%20%20result%20%3D%20yield%0A%20%20puts%20%22success%23%7B%27%3A%20%27%2Bresult.to_s%20if%20result%7D%22%0Arescue%20Exception%20%3D%3E%20e%0A%20%20puts%20%22failed%3A%20%23%7Be%7D%22%0Aensure%0A%20%20puts%20%22---------------------------------%22%0Aend%0A%0Amodule%20Boom%0A%20%20%0A%20%20Bar%20%3D%2012%0A%20%20%0A%20%20def%20self.Bar%0A%20%20%20%20puts%20%22%20%20%20Boom%3A%3ABar%20says%20hi%22%0A%20%20end%0A%0A%20%20class%20Baz%0A%20%20%20%20def%20doit%0A%20%20%20%20%20%20try_it(%22Bar()%22)%20%7B%20Bar()%20%7D%0A%20%20%20%20%20%20try_it(%22Boom%3A%3ABar()%22)%20%7BBoom%3A%3ABar()%7D%0A%20%20%20%20%20%20try_it(%22Bar%22)%20%7B%20Bar%20%7D%0A%20%20%20%20%20%20try_it(%22Boom%3A%3ABar%22)%20%7B%20Boom%3A%3ABar%20%7D%0A%20%20%20%20end%0A%20%20end%0Aend%0A%20%20%0A%0A%0ABoom%3A%3ABaz.new.doit)
|
90
|
+
|
91
|
+
|
92
|
+
What we need to do is:
|
93
|
+
|
94
|
+
1. when defining a component class `Foo`, also define in the same scope that Foo is being defined a method `self.Foo` that will accept Foo's params and child block, and render it.
|
95
|
+
|
96
|
+
2. As long as a name is qualified with at least one scope (i.e. `ModName::Foo()`) everything will work out, but if we say just `Foo()` then the only way I believe out of this is to handle it via method_missing, and let method_missing do a const_get on the method_name (which will return the class) and then render that component.
|
97
|
+
|
98
|
+
#### details
|
99
|
+
|
100
|
+
To define `self.Foo` in the same scope level as the class `Foo`, we need code like this:
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
def register_component_dsl_method(component)
|
104
|
+
split_name = component.name && component.name.split('::')
|
105
|
+
return unless split_name && split_name.length > 2
|
106
|
+
component_name = split_name.last
|
107
|
+
parent = split_name.inject([Module]) { |nesting, next_const| nesting + [nesting.last.const_get(next_const)] }[-2]
|
108
|
+
class << parent
|
109
|
+
define_method component_name do |*args, &block|
|
110
|
+
React::RenderingContext.render(name, *args, &block)
|
111
|
+
end
|
112
|
+
define_method "#{component_name}_as_node" do |*args, &block|
|
113
|
+
React::Component.deprecation_warning("..._as_node is deprecated. Render component and then use the .node method instead")
|
114
|
+
send(component_name, *args, &block).node
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
module React
|
120
|
+
module Component
|
121
|
+
def self.included(base)
|
122
|
+
...
|
123
|
+
register_component_dsl_method(base.name)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
```
|
128
|
+
|
129
|
+
The component's method_missing function will look like this:
|
130
|
+
|
131
|
+
```ruby
|
132
|
+
def method_missing(name, *args, &block)
|
133
|
+
if name =~ /_as_node$/
|
134
|
+
React::Component.deprecation_warning("..._as_node is deprecated. Render component and then use the .node method instead")
|
135
|
+
method_missing(name.gsub(/_as_node$/,""), *args, &block).node
|
136
|
+
else
|
137
|
+
component = const_get name if defined? name
|
138
|
+
React::RenderingContext.render(nil, component, *args, &block)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
```
|
142
|
+
|
143
|
+
### other related issues
|
144
|
+
|
145
|
+
The Kernel#p method conflicts with the <p> tag. However the p method can be invoked on any object so we are going to go ahead and use it, and deprecate the para method.
|
Binary file
|
data/misc/logo1.png
ADDED
Binary file
|
data/misc/logo2.png
ADDED
Binary file
|
data/misc/logo3.png
ADDED
Binary file
|
@@ -0,0 +1,9 @@
|
|
1
|
+
|
2
|
+
For example assuming you are releasing fix to 0.8.18
|
3
|
+
|
4
|
+
1. Checkout 0-8-stable
|
5
|
+
2. Update tests, fix the bug and commit the changes.
|
6
|
+
3. Build & Release to RubyGems (Remember the version in version.rb should already be 0.8.19)
|
7
|
+
4. Create a tag 'v0.8.19' pointing to that commit.
|
8
|
+
5. Bump the version in 0-8-stable to 0.8.20 so it will be ready for the next patch level release.
|
9
|
+
6. Commit the version bump, and do a `git push --tags` so the new tag goes up
|
metadata
CHANGED
@@ -1,73 +1,173 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyper-component
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.99.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- David Chang
|
8
|
+
- Adam Jahn
|
9
|
+
- Mitch VanDuyn
|
10
|
+
- Jan Biedermann
|
11
|
+
- Adam Creekroad
|
8
12
|
autorequire:
|
9
|
-
bindir:
|
13
|
+
bindir: bin
|
10
14
|
cert_chain: []
|
11
|
-
date:
|
15
|
+
date: 2018-09-24 00:00:00.000000000 Z
|
12
16
|
dependencies:
|
13
17
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: hyper-
|
18
|
+
name: hyper-store
|
15
19
|
requirement: !ruby/object:Gem::Requirement
|
16
20
|
requirements:
|
17
|
-
- -
|
21
|
+
- - '='
|
18
22
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
23
|
+
version: 0.99.0
|
20
24
|
type: :runtime
|
21
25
|
prerelease: false
|
22
26
|
version_requirements: !ruby/object:Gem::Requirement
|
23
27
|
requirements:
|
24
|
-
- -
|
28
|
+
- - '='
|
25
29
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
30
|
+
version: 0.99.0
|
27
31
|
- !ruby/object:Gem::Dependency
|
28
32
|
name: hyperloop-config
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.99.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - '='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.99.0
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: libv8
|
47
|
+
requirement: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - "~>"
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: 6.3.0
|
52
|
+
type: :runtime
|
53
|
+
prerelease: false
|
54
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - "~>"
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 6.3.0
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: mini_racer
|
61
|
+
requirement: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - "~>"
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.1.15
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 0.1.15
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: opal
|
29
75
|
requirement: !ruby/object:Gem::Requirement
|
30
76
|
requirements:
|
31
77
|
- - ">="
|
32
78
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
79
|
+
version: 0.11.0
|
80
|
+
- - "<"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.12.0
|
34
83
|
type: :runtime
|
35
84
|
prerelease: false
|
36
85
|
version_requirements: !ruby/object:Gem::Requirement
|
37
86
|
requirements:
|
38
87
|
- - ">="
|
39
88
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
89
|
+
version: 0.11.0
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 0.12.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: opal-activesupport
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 0.3.1
|
100
|
+
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 0.3.1
|
41
107
|
- !ruby/object:Gem::Dependency
|
42
108
|
name: react-rails
|
43
109
|
requirement: !ruby/object:Gem::Requirement
|
44
110
|
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: 2.4.0
|
45
114
|
- - "<"
|
46
115
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
116
|
+
version: 2.5.0
|
48
117
|
type: :runtime
|
49
118
|
prerelease: false
|
50
119
|
version_requirements: !ruby/object:Gem::Requirement
|
51
120
|
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 2.4.0
|
52
124
|
- - "<"
|
53
125
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
126
|
+
version: 2.5.0
|
55
127
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
128
|
+
name: bundler
|
57
129
|
requirement: !ruby/object:Gem::Requirement
|
58
130
|
requirements:
|
59
131
|
- - "~>"
|
60
132
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
62
|
-
type: :
|
133
|
+
version: 1.16.0
|
134
|
+
type: :development
|
63
135
|
prerelease: false
|
64
136
|
version_requirements: !ruby/object:Gem::Requirement
|
65
137
|
requirements:
|
66
138
|
- - "~>"
|
67
139
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
140
|
+
version: 1.16.0
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: chromedriver-helper
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
144
|
+
requirements:
|
145
|
+
- - ">="
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: '0'
|
148
|
+
type: :development
|
149
|
+
prerelease: false
|
150
|
+
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
69
155
|
- !ruby/object:Gem::Dependency
|
70
156
|
name: hyper-spec
|
157
|
+
requirement: !ruby/object:Gem::Requirement
|
158
|
+
requirements:
|
159
|
+
- - '='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: 0.99.0
|
162
|
+
type: :development
|
163
|
+
prerelease: false
|
164
|
+
version_requirements: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - '='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: 0.99.0
|
169
|
+
- !ruby/object:Gem::Dependency
|
170
|
+
name: jquery-rails
|
71
171
|
requirement: !ruby/object:Gem::Requirement
|
72
172
|
requirements:
|
73
173
|
- - ">="
|
@@ -95,7 +195,7 @@ dependencies:
|
|
95
195
|
- !ruby/object:Gem::Version
|
96
196
|
version: '0'
|
97
197
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
198
|
+
name: mime-types
|
99
199
|
requirement: !ruby/object:Gem::Requirement
|
100
200
|
requirements:
|
101
201
|
- - ">="
|
@@ -109,7 +209,7 @@ dependencies:
|
|
109
209
|
- !ruby/object:Gem::Version
|
110
210
|
version: '0'
|
111
211
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
212
|
+
name: nokogiri
|
113
213
|
requirement: !ruby/object:Gem::Requirement
|
114
214
|
requirements:
|
115
215
|
- - ">="
|
@@ -123,7 +223,7 @@ dependencies:
|
|
123
223
|
- !ruby/object:Gem::Version
|
124
224
|
version: '0'
|
125
225
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
226
|
+
name: opal-jquery
|
127
227
|
requirement: !ruby/object:Gem::Requirement
|
128
228
|
requirements:
|
129
229
|
- - ">="
|
@@ -137,7 +237,21 @@ dependencies:
|
|
137
237
|
- !ruby/object:Gem::Version
|
138
238
|
version: '0'
|
139
239
|
- !ruby/object:Gem::Dependency
|
140
|
-
name: rails
|
240
|
+
name: opal-rails
|
241
|
+
requirement: !ruby/object:Gem::Requirement
|
242
|
+
requirements:
|
243
|
+
- - "~>"
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: 0.9.4
|
246
|
+
type: :development
|
247
|
+
prerelease: false
|
248
|
+
version_requirements: !ruby/object:Gem::Requirement
|
249
|
+
requirements:
|
250
|
+
- - "~>"
|
251
|
+
- !ruby/object:Gem::Version
|
252
|
+
version: 0.9.4
|
253
|
+
- !ruby/object:Gem::Dependency
|
254
|
+
name: opal-rspec
|
141
255
|
requirement: !ruby/object:Gem::Requirement
|
142
256
|
requirements:
|
143
257
|
- - ">="
|
@@ -151,7 +265,7 @@ dependencies:
|
|
151
265
|
- !ruby/object:Gem::Version
|
152
266
|
version: '0'
|
153
267
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
268
|
+
name: pry
|
155
269
|
requirement: !ruby/object:Gem::Requirement
|
156
270
|
requirements:
|
157
271
|
- - ">="
|
@@ -165,7 +279,7 @@ dependencies:
|
|
165
279
|
- !ruby/object:Gem::Version
|
166
280
|
version: '0'
|
167
281
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
282
|
+
name: puma
|
169
283
|
requirement: !ruby/object:Gem::Requirement
|
170
284
|
requirements:
|
171
285
|
- - ">="
|
@@ -179,7 +293,21 @@ dependencies:
|
|
179
293
|
- !ruby/object:Gem::Version
|
180
294
|
version: '0'
|
181
295
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
296
|
+
name: rails
|
297
|
+
requirement: !ruby/object:Gem::Requirement
|
298
|
+
requirements:
|
299
|
+
- - ">="
|
300
|
+
- !ruby/object:Gem::Version
|
301
|
+
version: 4.0.0
|
302
|
+
type: :development
|
303
|
+
prerelease: false
|
304
|
+
version_requirements: !ruby/object:Gem::Requirement
|
305
|
+
requirements:
|
306
|
+
- - ">="
|
307
|
+
- !ruby/object:Gem::Version
|
308
|
+
version: 4.0.0
|
309
|
+
- !ruby/object:Gem::Dependency
|
310
|
+
name: rails-controller-testing
|
183
311
|
requirement: !ruby/object:Gem::Requirement
|
184
312
|
requirements:
|
185
313
|
- - ">="
|
@@ -193,7 +321,7 @@ dependencies:
|
|
193
321
|
- !ruby/object:Gem::Version
|
194
322
|
version: '0'
|
195
323
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
324
|
+
name: rake
|
197
325
|
requirement: !ruby/object:Gem::Requirement
|
198
326
|
requirements:
|
199
327
|
- - ">="
|
@@ -207,51 +335,146 @@ dependencies:
|
|
207
335
|
- !ruby/object:Gem::Version
|
208
336
|
version: '0'
|
209
337
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
338
|
+
name: rspec-rails
|
339
|
+
requirement: !ruby/object:Gem::Requirement
|
340
|
+
requirements:
|
341
|
+
- - ">="
|
342
|
+
- !ruby/object:Gem::Version
|
343
|
+
version: '0'
|
344
|
+
type: :development
|
345
|
+
prerelease: false
|
346
|
+
version_requirements: !ruby/object:Gem::Requirement
|
347
|
+
requirements:
|
348
|
+
- - ">="
|
349
|
+
- !ruby/object:Gem::Version
|
350
|
+
version: '0'
|
351
|
+
- !ruby/object:Gem::Dependency
|
352
|
+
name: rubocop
|
211
353
|
requirement: !ruby/object:Gem::Requirement
|
212
354
|
requirements:
|
213
355
|
- - "~>"
|
214
356
|
- !ruby/object:Gem::Version
|
215
|
-
version:
|
357
|
+
version: 0.51.0
|
216
358
|
type: :development
|
217
359
|
prerelease: false
|
218
360
|
version_requirements: !ruby/object:Gem::Requirement
|
219
361
|
requirements:
|
220
362
|
- - "~>"
|
221
363
|
- !ruby/object:Gem::Version
|
222
|
-
version:
|
364
|
+
version: 0.51.0
|
223
365
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
366
|
+
name: sqlite3
|
367
|
+
requirement: !ruby/object:Gem::Requirement
|
368
|
+
requirements:
|
369
|
+
- - ">="
|
370
|
+
- !ruby/object:Gem::Version
|
371
|
+
version: '0'
|
372
|
+
type: :development
|
373
|
+
prerelease: false
|
374
|
+
version_requirements: !ruby/object:Gem::Requirement
|
375
|
+
requirements:
|
376
|
+
- - ">="
|
377
|
+
- !ruby/object:Gem::Version
|
378
|
+
version: '0'
|
379
|
+
- !ruby/object:Gem::Dependency
|
380
|
+
name: timecop
|
225
381
|
requirement: !ruby/object:Gem::Requirement
|
226
382
|
requirements:
|
227
383
|
- - "~>"
|
228
384
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
385
|
+
version: 0.8.1
|
230
386
|
type: :development
|
231
387
|
prerelease: false
|
232
388
|
version_requirements: !ruby/object:Gem::Requirement
|
233
389
|
requirements:
|
234
390
|
- - "~>"
|
235
391
|
- !ruby/object:Gem::Version
|
236
|
-
version:
|
237
|
-
description:
|
392
|
+
version: 0.8.1
|
393
|
+
description: Write React UI components in pure Ruby.
|
238
394
|
email:
|
239
395
|
- mitch@catprint.com
|
240
396
|
executables: []
|
241
397
|
extensions: []
|
242
398
|
extra_rdoc_files: []
|
243
399
|
files:
|
400
|
+
- ".codeclimate.yml"
|
244
401
|
- ".gitignore"
|
245
|
-
-
|
402
|
+
- ".travis.yml"
|
403
|
+
- CHANGELOG.md
|
404
|
+
- DOCS.md
|
246
405
|
- Gemfile
|
247
406
|
- Gemfile.lock
|
248
407
|
- LICENSE
|
408
|
+
- README.md
|
249
409
|
- Rakefile
|
250
410
|
- hyper-component.gemspec
|
251
411
|
- lib/hyper-component.rb
|
252
|
-
- lib/
|
412
|
+
- lib/rails-helpers/top_level_rails_component.rb
|
413
|
+
- lib/react/api.rb
|
414
|
+
- lib/react/callbacks.rb
|
415
|
+
- lib/react/children.rb
|
416
|
+
- lib/react/component.rb
|
417
|
+
- lib/react/component/api.rb
|
418
|
+
- lib/react/component/base.rb
|
419
|
+
- lib/react/component/class_methods.rb
|
420
|
+
- lib/react/component/dsl_instance_methods.rb
|
421
|
+
- lib/react/component/params.rb
|
422
|
+
- lib/react/component/props_wrapper.rb
|
423
|
+
- lib/react/component/should_component_update.rb
|
424
|
+
- lib/react/component/tags.rb
|
425
|
+
- lib/react/config.rb
|
426
|
+
- lib/react/element.rb
|
427
|
+
- lib/react/event.rb
|
428
|
+
- lib/react/ext/hash.rb
|
429
|
+
- lib/react/ext/opal-jquery/element.rb
|
430
|
+
- lib/react/ext/string.rb
|
431
|
+
- lib/react/native_library.rb
|
432
|
+
- lib/react/object.rb
|
253
433
|
- lib/react/react-source-browser.rb
|
254
|
-
|
434
|
+
- lib/react/react-source-server.rb
|
435
|
+
- lib/react/react-source.rb
|
436
|
+
- lib/react/ref_callback.rb
|
437
|
+
- lib/react/rendering_context.rb
|
438
|
+
- lib/react/server.rb
|
439
|
+
- lib/react/state_wrapper.rb
|
440
|
+
- lib/react/test.rb
|
441
|
+
- lib/react/test/dsl.rb
|
442
|
+
- lib/react/test/matchers/render_html_matcher.rb
|
443
|
+
- lib/react/test/rspec.rb
|
444
|
+
- lib/react/test/session.rb
|
445
|
+
- lib/react/test/utils.rb
|
446
|
+
- lib/react/to_key.rb
|
447
|
+
- lib/react/top_level.rb
|
448
|
+
- lib/react/top_level_render.rb
|
449
|
+
- lib/react/validator.rb
|
450
|
+
- lib/reactive-ruby/component_loader.rb
|
451
|
+
- lib/reactive-ruby/isomorphic_helpers.rb
|
452
|
+
- lib/reactive-ruby/rails.rb
|
453
|
+
- lib/reactive-ruby/rails/component_mount.rb
|
454
|
+
- lib/reactive-ruby/rails/controller_helper.rb
|
455
|
+
- lib/reactive-ruby/rails/railtie.rb
|
456
|
+
- lib/reactive-ruby/serializers.rb
|
457
|
+
- lib/reactive-ruby/server_rendering/contextual_renderer.rb
|
458
|
+
- lib/reactive-ruby/server_rendering/hyper_asset_container.rb
|
459
|
+
- lib/reactive-ruby/version.rb
|
460
|
+
- lib/reactrb/auto-import.rb
|
461
|
+
- misc/generators/reactive_ruby/test_app/templates/assets/javascripts/components.rb
|
462
|
+
- misc/generators/reactive_ruby/test_app/templates/assets/javascripts/server_rendering.js
|
463
|
+
- misc/generators/reactive_ruby/test_app/templates/assets/javascripts/test_application.rb
|
464
|
+
- misc/generators/reactive_ruby/test_app/templates/boot.rb.erb
|
465
|
+
- misc/generators/reactive_ruby/test_app/templates/script/rails
|
466
|
+
- misc/generators/reactive_ruby/test_app/templates/test_application.rb.erb
|
467
|
+
- misc/generators/reactive_ruby/test_app/templates/views/components/hello_world.rb
|
468
|
+
- misc/generators/reactive_ruby/test_app/templates/views/components/todo.rb
|
469
|
+
- misc/generators/reactive_ruby/test_app/templates/views/layouts/test_layout.html.erb
|
470
|
+
- misc/generators/reactive_ruby/test_app/test_app_generator.rb
|
471
|
+
- misc/how-component-name-lookup-works.md
|
472
|
+
- misc/hyperloop-logo-small-pink.png
|
473
|
+
- misc/logo1.png
|
474
|
+
- misc/logo2.png
|
475
|
+
- misc/logo3.png
|
476
|
+
- path_release_steps.md
|
477
|
+
homepage: http://ruby-hyperloop.org
|
255
478
|
licenses:
|
256
479
|
- MIT
|
257
480
|
metadata: {}
|
@@ -271,8 +494,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
494
|
version: '0'
|
272
495
|
requirements: []
|
273
496
|
rubyforge_project:
|
274
|
-
rubygems_version: 2.
|
497
|
+
rubygems_version: 2.7.7
|
275
498
|
signing_key:
|
276
499
|
specification_version: 4
|
277
|
-
summary:
|
500
|
+
summary: Opal Ruby wrapper of React.js library.
|
278
501
|
test_files: []
|