hyper-react 1.0.0.lap23 → 1.0.0.lap24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86768c3348a431a1b97b43fddcced051f69aa697270ddc39baa5ebf249f4d0d6
4
- data.tar.gz: 32a0527f8adef0613cf12b8eacbc805e832207fd2bc05cbc92d918aa41c3b97b
3
+ metadata.gz: f835a40b1580dca8202104593f6d2c8f68cbe342236850bab449d24e56691859
4
+ data.tar.gz: 85432b5f788b3860b518df213ff6f19744a431cbc7943d46713882ac0440c3aa
5
5
  SHA512:
6
- metadata.gz: bcb9c31c77e0efae816a0a67a91c0fbc02f63ab06ea2e014e31f943aff6c15ccc8500d1eb5f1ccff30158d232a90f87ab089492395f76c93858fdb4127eb2f57
7
- data.tar.gz: f53942a3396b92b43ddd7194e171ba759b5005d3fc31266714fa10d72af34fed92276ec1bcf4f69b870fae69c0b3101f080e2b3aab06c02b0190bdacd22e4fdf
6
+ metadata.gz: fb068dad9c84503247339c1205012f81385bc5460feb060bca396fa2886b2df5ab449a918c3dc70ee784b5d3b470c1c5bbe989e7f0fdffdf41481a1e91272529
7
+ data.tar.gz: 04f88e4453a78556bbdc8c2c66f0a3ffd490d08932c5279c6dd6373071847a122522eb2e445d2e37800b88613affb83fbdce3d7c1b1b1af425e8e9e3a1a04df9
data/lib/react/api.rb CHANGED
@@ -71,7 +71,7 @@ module React
71
71
  this.__opalInstanceSyncSetState = true;
72
72
  this.__opalInstance.$component_will_mount();
73
73
  this.__opalInstanceSyncSetState = false;
74
- }
74
+ }
75
75
  }
76
76
  componentDidMount() {
77
77
  this.__opalInstance.is_mounted = true
@@ -171,6 +171,10 @@ module React
171
171
  props["className"] = value
172
172
  elsif ["style", "dangerously_set_inner_HTML"].include? key
173
173
  props[lower_camelize(key)] = value.to_n
174
+
175
+ elsif key == "key"
176
+ props["key"] = value.to_key
177
+
174
178
  elsif key == 'ref' && value.is_a?(Proc)
175
179
  props[key] = %x{
176
180
  function(dom_node){
@@ -1,5 +1,5 @@
1
1
  require 'hyperloop-config'
2
- Hyperloop::Context
2
+
3
3
  module React
4
4
  module Callbacks
5
5
  def self.included(base)
data/lib/react/object.rb CHANGED
@@ -12,4 +12,19 @@ class Object
12
12
  React::Component::Tags.html_tag_class_for(const_name) || raise(e)
13
13
  end
14
14
  end
15
+
16
+ def to_key
17
+ object_id
18
+ end
19
+ end
20
+ class Number
21
+ def to_key
22
+ self
23
+ end
24
+ end
25
+
26
+ class Boolean
27
+ def to_key
28
+ self
29
+ end
15
30
  end
@@ -1,3 +1,3 @@
1
1
  module React
2
- VERSION = '1.0.0.lap23'
2
+ VERSION = '1.0.0.lap24'
3
3
  end
@@ -2,26 +2,29 @@ require 'spec_helper'
2
2
 
3
3
  describe 'opal-jquery extensions', js: true do
4
4
  describe 'Element' do
5
- xit 'will reuse the wrapper componet class for the same Element' do
6
- # TODO how come a def component_will_unmount will not be received
7
- stub_const 'Foo', Class.new(React::Component::Base)
8
- Foo.class_eval do
9
- param :name
10
- def render
11
- "hello #{params.name}"
12
- end
13
-
14
- def component_will_unmount
5
+ xit 'will reuse the wrapper component class for the same Element' do
6
+ evaluate_ruby do
7
+ class Foo < React::Component::Base
8
+ param :name
9
+ def render
10
+ "hello #{params.name}"
11
+ end
15
12
 
13
+ def self.rec_cnt
14
+ @@rec_cnt ||= 0
15
+ end
16
+ before_unmount do
17
+ @@rec_cnt ||= 0
18
+ @@rec_cnt += 1
19
+ end
16
20
  end
17
21
  end
18
-
19
- expect_any_instance_of(Foo).to_not receive(:component_will_unmount)
20
-
21
- test_div = Element.new(:div)
22
- test_div.render { Foo(name: 'fred') }
23
- test_div.render { Foo(name: 'freddy') }
24
- expect(Element[test_div].find('span').html).to eq('hello freddy')
22
+ expect_evaluate_ruby do
23
+ test_div = Element.new(:div)
24
+ test_div.render { Foo(name: 'fred') }
25
+ test_div.render { Foo(name: 'freddy') }
26
+ [ Element[test_div].find('span').html, Foo.rec_cnt]
27
+ end.to eq(['hello freddy', 0])
25
28
  end
26
29
 
27
30
  it 'renders a top level component using render with a block' do
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'to_key helper', js: true do
4
+ it "has added 'to_key' method to Object and each key is different" do
5
+ expect_evaluate_ruby do
6
+ Object.new.to_key != Object.new.to_key
7
+ end.to be_truthy
8
+ end
9
+
10
+ it "to_key return 'self' for String objects" do
11
+ expect_evaluate_ruby do
12
+ debugger
13
+ "hello".to_key == "hello"
14
+ end.to be_truthy
15
+ end
16
+
17
+ it "to_key return 'self' for Number objects" do
18
+ expect_evaluate_ruby do
19
+ 12.to_key == 12
20
+ end.to be_truthy
21
+ end
22
+
23
+ it "to_key return 'self' for Boolean objects" do
24
+ expect_evaluate_ruby do
25
+ true.to_key == true && false.to_key == false
26
+ end.to be_truthy
27
+ end
28
+
29
+ it "will use the use the to_key method to get the react key" do
30
+ mount "TestComponent" do
31
+ class MyTestClass
32
+ attr_reader :to_key_called
33
+ def to_key
34
+ @to_key_called = true
35
+ super
36
+ end
37
+ end
38
+ class TestComponent < Hyperloop::Component
39
+ before_mount { @test_object = MyTestClass.new }
40
+ render do
41
+ DIV(key: @test_object) { TestComponent2(test_object: @test_object) }
42
+ end
43
+ end
44
+ class TestComponent2 < Hyperloop::Component
45
+ param :test_object
46
+ render do
47
+ "to key was called!" if params.test_object.to_key_called
48
+ end
49
+ end
50
+ end
51
+ expect(page).to have_content('to key was called!')
52
+ end
53
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyper-react
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.lap23
4
+ version: 1.0.0.lap24
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Chang
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-02-18 00:00:00.000000000 Z
14
+ date: 2018-02-28 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: hyper-store
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 1.0.0.lap23
22
+ version: 1.0.0.lap24
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 1.0.0.lap23
29
+ version: 1.0.0.lap24
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: opal
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -81,14 +81,14 @@ dependencies:
81
81
  requirements:
82
82
  - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: 1.0.0.lap23
84
+ version: 1.0.0.lap24
85
85
  type: :development
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
88
88
  requirements:
89
89
  - - '='
90
90
  - !ruby/object:Gem::Version
91
- version: 1.0.0.lap23
91
+ version: 1.0.0.lap24
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: jquery-rails
94
94
  requirement: !ruby/object:Gem::Requirement
@@ -430,6 +430,7 @@ files:
430
430
  - spec/react/test/rspec_spec.rb
431
431
  - spec/react/test/session_spec.rb
432
432
  - spec/react/test/utils_spec.rb
433
+ - spec/react/to_key_spec.rb
433
434
  - spec/react/top_level_component_spec.rb
434
435
  - spec/react/tutorial/tutorial_spec.rb
435
436
  - spec/react/validator_spec.rb
@@ -555,6 +556,7 @@ test_files:
555
556
  - spec/react/test/rspec_spec.rb
556
557
  - spec/react/test/session_spec.rb
557
558
  - spec/react/test/utils_spec.rb
559
+ - spec/react/to_key_spec.rb
558
560
  - spec/react/top_level_component_spec.rb
559
561
  - spec/react/tutorial/tutorial_spec.rb
560
562
  - spec/react/validator_spec.rb