hyper-react 0.12.7 → 0.99.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +48 -34
  3. data/CODE_OF_CONDUCT.md +49 -0
  4. data/Gemfile +5 -6
  5. data/README.md +47 -98
  6. data/Rakefile +6 -28
  7. data/hyper-react.gemspec +36 -43
  8. data/lib/hyper-react.rb +4 -73
  9. data/lib/react/version.rb +3 -0
  10. metadata +91 -249
  11. data/.codeclimate.yml +0 -27
  12. data/.rubocop.yml +0 -1159
  13. data/.travis.yml +0 -62
  14. data/Appraisals +0 -31
  15. data/CHANGELOG.md +0 -143
  16. data/LICENSE +0 -19
  17. data/UPGRADING.md +0 -24
  18. data/component-name-lookup.md +0 -145
  19. data/config.ru +0 -26
  20. data/gemfiles/opal_0.10_react_13.gemfile +0 -15
  21. data/gemfiles/opal_0.10_react_14.gemfile +0 -15
  22. data/gemfiles/opal_0.10_react_15.gemfile +0 -15
  23. data/gemfiles/opal_0.8_react_13.gemfile +0 -15
  24. data/gemfiles/opal_0.8_react_14.gemfile +0 -15
  25. data/gemfiles/opal_0.8_react_15.gemfile +0 -15
  26. data/gemfiles/opal_0.9_react_13.gemfile +0 -15
  27. data/gemfiles/opal_0.9_react_14.gemfile +0 -15
  28. data/gemfiles/opal_0.9_react_15.gemfile +0 -15
  29. data/gemfiles/opal_master_react_15.gemfile +0 -16
  30. data/lib/generators/reactive_ruby/test_app/templates/assets/javascripts/components.rb +0 -3
  31. data/lib/generators/reactive_ruby/test_app/templates/assets/javascripts/test_application.rb +0 -2
  32. data/lib/generators/reactive_ruby/test_app/templates/boot.rb.erb +0 -6
  33. data/lib/generators/reactive_ruby/test_app/templates/script/rails +0 -5
  34. data/lib/generators/reactive_ruby/test_app/templates/test_application.rb.erb +0 -13
  35. data/lib/generators/reactive_ruby/test_app/templates/views/components/hello_world.rb +0 -11
  36. data/lib/generators/reactive_ruby/test_app/templates/views/components/todo.rb +0 -14
  37. data/lib/generators/reactive_ruby/test_app/templates/views/layouts/test_layout.html.erb +0 -0
  38. data/lib/generators/reactive_ruby/test_app/test_app_generator.rb +0 -111
  39. data/lib/rails-helpers/top_level_rails_component.rb +0 -54
  40. data/lib/react-sources/react-server.js +0 -2
  41. data/lib/react/api.rb +0 -173
  42. data/lib/react/callbacks.rb +0 -41
  43. data/lib/react/children.rb +0 -30
  44. data/lib/react/component.rb +0 -168
  45. data/lib/react/component/api.rb +0 -50
  46. data/lib/react/component/base.rb +0 -13
  47. data/lib/react/component/class_methods.rb +0 -189
  48. data/lib/react/component/dsl_instance_methods.rb +0 -23
  49. data/lib/react/component/params.rb +0 -6
  50. data/lib/react/component/props_wrapper.rb +0 -78
  51. data/lib/react/component/should_component_update.rb +0 -94
  52. data/lib/react/component/tags.rb +0 -129
  53. data/lib/react/config.rb +0 -5
  54. data/lib/react/config/client.rb.erb +0 -19
  55. data/lib/react/config/server.rb +0 -23
  56. data/lib/react/element.rb +0 -169
  57. data/lib/react/event.rb +0 -76
  58. data/lib/react/ext/hash.rb +0 -9
  59. data/lib/react/ext/opal-jquery/element.rb +0 -26
  60. data/lib/react/ext/string.rb +0 -8
  61. data/lib/react/hash.rb +0 -13
  62. data/lib/react/native_library.rb +0 -87
  63. data/lib/react/object.rb +0 -15
  64. data/lib/react/react-source-browser.rb +0 -3
  65. data/lib/react/react-source-server.rb +0 -3
  66. data/lib/react/react-source.rb +0 -20
  67. data/lib/react/ref_callback.rb +0 -31
  68. data/lib/react/rendering_context.rb +0 -144
  69. data/lib/react/server.rb +0 -23
  70. data/lib/react/state_wrapper.rb +0 -23
  71. data/lib/react/test.rb +0 -16
  72. data/lib/react/test/dsl.rb +0 -17
  73. data/lib/react/test/matchers/render_html_matcher.rb +0 -56
  74. data/lib/react/test/rspec.rb +0 -15
  75. data/lib/react/test/session.rb +0 -37
  76. data/lib/react/test/utils.rb +0 -25
  77. data/lib/react/top_level.rb +0 -118
  78. data/lib/react/top_level_render.rb +0 -29
  79. data/lib/react/validator.rb +0 -136
  80. data/lib/reactive-ruby/component_loader.rb +0 -50
  81. data/lib/reactive-ruby/isomorphic_helpers.rb +0 -212
  82. data/lib/reactive-ruby/rails.rb +0 -7
  83. data/lib/reactive-ruby/rails/component_mount.rb +0 -46
  84. data/lib/reactive-ruby/rails/controller_helper.rb +0 -15
  85. data/lib/reactive-ruby/rails/railtie.rb +0 -33
  86. data/lib/reactive-ruby/serializers.rb +0 -15
  87. data/lib/reactive-ruby/server_rendering/contextual_renderer.rb +0 -42
  88. data/lib/reactive-ruby/version.rb +0 -3
  89. data/lib/reactrb/auto-import.rb +0 -27
  90. data/lib/reactrb/deep-compare.rb +0 -24
  91. data/lib/reactrb/new-event-name-convention.rb +0 -11
  92. data/logo1.png +0 -0
  93. data/logo2.png +0 -0
  94. data/logo3.png +0 -0
  95. data/path_release_steps.md +0 -9
  96. data/spec/controller_helper_spec.rb +0 -34
  97. data/spec/index.html.erb +0 -11
  98. data/spec/react/callbacks_spec.rb +0 -138
  99. data/spec/react/children_spec.rb +0 -76
  100. data/spec/react/component/base_spec.rb +0 -32
  101. data/spec/react/component_spec.rb +0 -884
  102. data/spec/react/dsl_spec.rb +0 -303
  103. data/spec/react/element_spec.rb +0 -136
  104. data/spec/react/event_spec.rb +0 -24
  105. data/spec/react/native_library_spec.rb +0 -322
  106. data/spec/react/observable_spec.rb +0 -42
  107. data/spec/react/opal_jquery_extensions_spec.rb +0 -68
  108. data/spec/react/param_declaration_spec.rb +0 -269
  109. data/spec/react/react_spec.rb +0 -215
  110. data/spec/react/refs_callback_spec.rb +0 -56
  111. data/spec/react/server_spec.rb +0 -25
  112. data/spec/react/state_spec.rb +0 -55
  113. data/spec/react/test/dsl_spec.rb +0 -43
  114. data/spec/react/test/matchers/render_html_matcher_spec.rb +0 -83
  115. data/spec/react/test/rspec_spec.rb +0 -62
  116. data/spec/react/test/session_spec.rb +0 -88
  117. data/spec/react/test/utils_spec.rb +0 -28
  118. data/spec/react/top_level_component_spec.rb +0 -101
  119. data/spec/react/tutorial/tutorial_spec.rb +0 -36
  120. data/spec/react/validator_spec.rb +0 -124
  121. data/spec/reactive-ruby/component_loader_spec.rb +0 -77
  122. data/spec/reactive-ruby/isomorphic_helpers_spec.rb +0 -160
  123. data/spec/reactive-ruby/rails/asset_pipeline_spec.rb +0 -10
  124. data/spec/reactive-ruby/rails/component_mount_spec.rb +0 -66
  125. data/spec/reactive-ruby/server_rendering/contextual_renderer_spec.rb +0 -35
  126. data/spec/spec_helper.rb +0 -149
  127. data/spec/support/react/spec_helpers.rb +0 -44
  128. data/spec/vendor/es5-shim.min.js +0 -6
  129. data/spec/vendor/jquery-2.2.4.min.js +0 -4
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if opal?
4
- RSpec.describe 'react/test/rspec', type: :component do
5
- before do
6
- stub_const 'Greeter', Class.new
7
- Greeter.class_eval do
8
- include React::Component
9
- params do
10
- optional :message
11
- optional :from
12
- end
13
-
14
- def render
15
- span { "Hello #{params.message}" }
16
- end
17
- end
18
- end
19
-
20
- it 'should include react/test in rspec' do
21
- comp = mount(Greeter)
22
- expect(component.instance).to eq(comp)
23
- end
24
-
25
- it 'includes rspec matchers' do
26
- expect(Greeter).to render_static_html(
27
- '<span>Hello world</span>'
28
- ).with_params(message: 'world')
29
- end
30
-
31
- describe 'resetting the session' do
32
- it 'creates an instance of the mounted component in one example' do
33
- mount(Greeter)
34
- end
35
-
36
- it '...then is not availalbe in the next' do
37
- expect { component.instance }.to raise_error
38
- end
39
- end
40
- end
41
-
42
- RSpec.describe 'react/test/rspec', type: :other do
43
- before do
44
- stub_const 'Greeter', Class.new
45
- Greeter.class_eval do
46
- include React::Component
47
- params do
48
- optional :message
49
- optional :from
50
- end
51
-
52
- def render
53
- span { "Hello #{params.message}" }
54
- end
55
- end
56
- end
57
-
58
- it 'should not include react/test in rspec' do
59
- expect { mount(Greeter) }.to raise_error
60
- end
61
- end
62
- end
@@ -1,88 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if opal?
4
- RSpec.describe React::Test::Session do
5
- subject { described_class.new }
6
- before do
7
- stub_const 'Greeter', Class.new
8
- Greeter.class_eval do
9
- include React::Component
10
-
11
- params do
12
- optional :message
13
- optional :from
14
- end
15
-
16
- def render
17
- span { "Hello #{params.message}" }
18
- end
19
- end
20
- end
21
-
22
- describe '#mount' do
23
- it 'returns an instance of the mounted component' do
24
- expect(subject.mount(Greeter)).to be_a(Greeter)
25
- end
26
-
27
- it 'actualy mounts the component' do
28
- expect(subject.mount(Greeter)).to be_mounted
29
- end
30
-
31
- it 'optionaly passes params to the component' do
32
- instance = subject.mount(Greeter, message: 'world')
33
- expect(instance.params.message).to eq('world')
34
- end
35
- end
36
-
37
- describe '#instance' do
38
- it 'returns the instance of the mounted component' do
39
- instance = subject.mount(Greeter)
40
- expect(subject.instance).to eq(instance)
41
- end
42
- end
43
-
44
- describe '#html' do
45
- it 'returns the component rendered to static html' do
46
- subject.mount(Greeter, message: 'world')
47
- expect(subject.html).to eq('<span>Hello world</span>')
48
- end
49
-
50
- async 'returns the updated static html' do
51
- subject.mount(Greeter)
52
- subject.update_params(message: 'moon') do
53
- run_async {
54
- expect(subject.html).to eq('<span>Hello moon</span>')
55
- }
56
- end
57
- end
58
- end
59
-
60
- describe '#update_params' do
61
- it 'sends new params to the component' do
62
- instance = subject.mount(Greeter, message: 'world')
63
- subject.update_params(message: 'moon')
64
- expect(instance.params.message).to eq('moon')
65
- end
66
-
67
- it 'leaves unspecified params in tact' do
68
- instance = subject.mount(Greeter, message: 'world', from: 'outerspace')
69
- subject.update_params(message: 'moon')
70
- expect(instance.params.from).to eq('outerspace')
71
- end
72
-
73
- it 'causes the component to render' do
74
- instance = subject.mount(Greeter, message: 'world')
75
- expect(instance).to receive(:render)
76
- subject.update_params(message: 'moon')
77
- end
78
- end
79
-
80
- describe 'instance#force_update!' do
81
- it 'causes the component to render' do
82
- instance = subject.mount(Greeter)
83
- expect(instance).to receive(:render)
84
- subject.instance.force_update!
85
- end
86
- end
87
- end
88
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if opal?
4
- RSpec.describe React::Test::Utils do
5
- it 'simulates' do
6
- stub_const 'Foo', Class.new
7
- Foo.class_eval do
8
- include React::Component
9
-
10
- def render
11
- div { 'Click Me' }.on(:click) { |e| click(e) }
12
- end
13
- end
14
-
15
- instance = React::Test::Utils.render_into_document(React.create_element(Foo))
16
- expect(instance).to receive(:click)
17
- described_class.simulate(:click, instance.dom_node)
18
- end
19
-
20
- describe "render_into_document" do
21
- it "works with native element" do
22
- expect {
23
- described_class.render_into_document(React.create_element('div'))
24
- }.to_not raise_error
25
- end
26
- end
27
- end
28
- end
@@ -1,101 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if opal?
4
- module Components
5
- module Controller
6
- class Component1
7
- include React::Component
8
- def render
9
- self.class.name.to_s
10
- end
11
- end
12
- end
13
-
14
- class Component1
15
- include React::Component
16
- def render
17
- self.class.name.to_s
18
- end
19
- end
20
-
21
- class Component2
22
- include React::Component
23
- def render
24
- self.class.name.to_s
25
- end
26
- end
27
- end
28
-
29
- module Controller
30
- class SomeOtherClass # see issue #80
31
- end
32
- end
33
-
34
- class Component1
35
- include React::Component
36
- def render
37
- self.class.name.to_s
38
- end
39
- end
40
-
41
- def render_top_level(controller, component_name)
42
- params = {
43
- controller: controller,
44
- component_name: component_name,
45
- render_params: {}
46
- }
47
- element = React.create_element(React::TopLevelRailsComponent, params)
48
- React::Server.render_to_static_markup(element)
49
- end
50
-
51
- describe React::TopLevelRailsComponent do
52
-
53
- it 'uses the controller name to lookup a component' do
54
- expect(render_top_level("Controller", "Component1")).to eq('<span>Components::Controller::Component1</span>')
55
- end
56
-
57
- it 'can find the name without matching the controller' do
58
- expect(render_top_level("Controller", "Component2")).to eq('<span>Components::Component2</span>')
59
- end
60
-
61
- it 'will find the outer most matching component' do
62
- expect(render_top_level("OtherController", "Component1")).to eq('<span>Component1</span>')
63
- end
64
-
65
- it 'can find the correct component when the name is fully qualified' do
66
- expect(render_top_level("Controller", "::Components::Component1")).to eq('<span>Components::Component1</span>')
67
- end
68
-
69
- describe '.html_tag?' do
70
- it 'is truthy for valid html tags' do
71
- expect(React.html_tag?('a')).to be_truthy
72
- expect(React.html_tag?('div')).to be_truthy
73
- end
74
-
75
- it 'is truthy for valid svg tags' do
76
- expect(React.html_tag?('svg')).to be_truthy
77
- expect(React.html_tag?('circle')).to be_truthy
78
- end
79
-
80
- it 'is falsey for invalid tags' do
81
- expect(React.html_tag?('tagizzle')).to be_falsey
82
- end
83
- end
84
-
85
- describe '.html_attr?' do
86
- it 'is truthy for valid html attributes' do
87
- expect(React.html_attr?('id')).to be_truthy
88
- expect(React.html_attr?('data')).to be_truthy
89
- end
90
-
91
- it 'is truthy for valid svg attributes' do
92
- expect(React.html_attr?('cx')).to be_truthy
93
- expect(React.html_attr?('strokeWidth')).to be_truthy
94
- end
95
-
96
- it 'is falsey for invalid attributes' do
97
- expect(React.html_tag?('attrizzle')).to be_falsey
98
- end
99
- end
100
- end
101
- end
@@ -1,36 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if opal?
4
- class HelloMessage
5
- include React::Component
6
- def render
7
- div { "Hello World!" }
8
- end
9
- end
10
-
11
- describe 'An Example from the react.rb doc', type: :component do
12
- it 'produces the correct result' do
13
- expect(HelloMessage).to render_static_html('<div>Hello World!</div>')
14
- end
15
- end
16
-
17
- class HelloMessage2
18
- include React::Component
19
- define_state(:user_name) { '@catmando' }
20
- def render
21
- div { "Hello #{state.user_name}" }
22
- end
23
- end
24
-
25
- describe 'Adding state to a component (second tutorial example)', type: :component do
26
- it "produces the correct result" do
27
- expect(HelloMessage2).to render_static_html('<div>Hello @catmando</div>')
28
- end
29
-
30
- it 'renders to the document' do
31
- ele = `document.createElement('div')`
32
- React.render(React.create_element(HelloMessage2), ele)
33
- expect(`#{ele}.innerHTML`) =~ 'Hello @catmando'
34
- end
35
- end
36
- end
@@ -1,124 +0,0 @@
1
- require "spec_helper"
2
-
3
- if opal?
4
- describe React::Validator do
5
- describe '#validate' do
6
- describe "Presence validation" do
7
- it "should check if required props provided" do
8
- validator = React::Validator.new.build do
9
- requires :foo
10
- requires :bar
11
- end
12
-
13
- expect(validator.validate({})).to eq(["Required prop `foo` was not specified", "Required prop `bar` was not specified"])
14
- expect(validator.validate({foo: 1, bar: 3})).to eq([])
15
- end
16
-
17
- it "should check if passed non specified prop" do
18
- validator = React::Validator.new.build do
19
- optional :foo
20
- end
21
-
22
- expect(validator.validate({bar: 10})).to eq(["Provided prop `bar` not specified in spec"])
23
- expect(validator.validate({foo: 10})).to eq([])
24
- end
25
- end
26
-
27
- describe "Type validation" do
28
- it "should check if passed value with wrong type" do
29
- validator = React::Validator.new.build do
30
- requires :foo, type: String
31
- end
32
-
33
- expect(validator.validate({foo: 10})).to eq(["Provided prop `foo` could not be converted to String"])
34
- expect(validator.validate({foo: "10"})).to eq([])
35
- end
36
-
37
- it "should check if passed value with wrong custom type" do
38
- stub_const 'Bar', Class.new
39
- validator = React::Validator.new.build do
40
- requires :foo, type: Bar
41
- end
42
-
43
- expect(validator.validate({foo: 10})).to eq(["Provided prop `foo` could not be converted to Bar"])
44
- expect(validator.validate({foo: Bar.new})).to eq([])
45
- end
46
-
47
- it 'coerces native JS prop types to opal objects' do
48
- validator = React::Validator.new.build do
49
- requires :foo, type: `{ x: 1 }`
50
- end
51
-
52
- message = "Provided prop `foo` could not be converted to [object Object]"
53
- expect(validator.validate({foo: `{ x: 1 }`})).to eq([message])
54
- end
55
-
56
- it 'coerces native JS values to opal objects' do
57
- validator = React::Validator.new.build do
58
- requires :foo, type: Array[Fixnum]
59
- end
60
- message = "Provided prop `foo`[0] could not be converted to #{Fixnum.name}"
61
- expect(validator.validate({foo: `[ { x: 1 } ]`})).to eq([message])
62
- end
63
-
64
- it "should support Array[Class] validation" do
65
- validator = React::Validator.new.build do
66
- requires :foo, type: Array[Hash]
67
- end
68
-
69
- expect(validator.validate({foo: [1,'2',3]})).to eq(
70
- [
71
- "Provided prop `foo`[0] could not be converted to Hash",
72
- "Provided prop `foo`[1] could not be converted to Hash",
73
- "Provided prop `foo`[2] could not be converted to Hash"
74
- ]
75
- )
76
- expect(validator.validate({foo: [{},{},{}]})).to eq([])
77
- end
78
- end
79
-
80
- describe "Limited values" do
81
- it "should check if passed value is not one of the specified values" do
82
- validator = React::Validator.new.build do
83
- requires :foo, values: [4,5,6]
84
- end
85
-
86
- expect(validator.validate({foo: 3})).to eq(["Value `3` for prop `foo` is not an allowed value"])
87
- expect(validator.validate({foo: 4})).to eq([])
88
- end
89
- end
90
- end
91
-
92
- describe '#undefined_props' do
93
- let(:props) { { foo: 'foo', bar: 'bar', biz: 'biz', baz: 'baz' } }
94
- let(:validator) do
95
- React::Validator.new.build do
96
- requires :foo
97
- optional :bar
98
- end
99
- end
100
-
101
- it 'slurps up any extra params into a hash' do
102
- others = validator.undefined_props(props)
103
- expect(others).to eq({ biz: 'biz', baz: 'baz' })
104
- end
105
-
106
- it 'prevents validate non-specified params' do
107
- validator.undefined_props(props)
108
- expect(validator.validate(props)).to eq([])
109
- end
110
- end
111
-
112
- describe "default_props" do
113
- it "should return specified default values" do
114
- validator = React::Validator.new.build do
115
- requires :foo, default: 10
116
- requires :bar
117
- optional :lorem, default: 20
118
- end
119
-
120
- expect(validator.default_props).to eq({foo: 10, lorem: 20})
121
- end
122
- end
123
- end
124
- end
@@ -1,77 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if ruby?
4
- RSpec.describe ReactiveRuby::ComponentLoader do
5
- GLOBAL_WRAPPER = <<-JS
6
- #{React::ServerRendering::ExecJSRenderer::GLOBAL_WRAPPER}
7
- var console = {
8
- warn: function(s) { }
9
- };
10
- JS
11
-
12
- let(:js) do
13
- if ::Rails.application.assets['react-server.js'] &&
14
- !::Rails.application.assets['react-server.js'].to_s.start_with?("// A placeholder file")
15
- react_source = ::Rails.application.assets['react-server.js']
16
- else
17
- react_source = ::Rails.application.assets['react.js']
18
- end
19
- ::Rails.application.assets['components'].to_s + react_source.to_s
20
- end
21
- let(:context) { ExecJS.compile(GLOBAL_WRAPPER + js) }
22
- let(:v8_context) { ReactiveRuby::ServerRendering.context_instance_for(context) }
23
-
24
- describe '.new' do
25
- it 'raises a meaningful exception when initialized without a context' do
26
- expect {
27
- described_class.new(nil)
28
- }.to raise_error(/Could not obtain ExecJS runtime context/)
29
- end
30
- end
31
-
32
- describe '#load' do
33
- it 'loads given asset file into context' do
34
- loader = described_class.new(v8_context)
35
-
36
- expect {
37
- loader.load
38
- }.to change { !!v8_context.eval('Opal.React') }.from(false).to(true)
39
- end
40
-
41
- it 'is truthy upon successful load' do
42
- loader = described_class.new(v8_context)
43
- expect(loader.load).to be_truthy
44
- end
45
-
46
- it 'fails silently returning false' do
47
- loader = described_class.new(v8_context)
48
- expect(loader.load('foo')).to be_falsey
49
- end
50
- end
51
-
52
- describe '#load!' do
53
- it 'is truthy upon successful load' do
54
- loader = described_class.new(v8_context)
55
- expect(loader.load!).to be_truthy
56
- end
57
-
58
- it 'raises an expection if loading fails' do
59
- loader = described_class.new(v8_context)
60
- expect { loader.load!('foo') }.to raise_error(/No react\.rb components/)
61
- end
62
- end
63
-
64
- describe '#loaded?' do
65
- it 'is truthy if components file is already loaded' do
66
- loader = described_class.new(v8_context)
67
- loader.load
68
- expect(loader).to be_loaded
69
- end
70
-
71
- it 'is false if components file is not loaded' do
72
- loader = described_class.new(v8_context)
73
- expect(loader).to_not be_loaded
74
- end
75
- end
76
- end
77
- end