react.rb 0.1.0 → 0.2.0

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
  SHA1:
3
- metadata.gz: c1e1e89f7d83f0101d262fc4249dedea946c4af1
4
- data.tar.gz: ea0be5738084717bcc7388913225388086d67c7f
3
+ metadata.gz: 2edd338c72d88b40b11c779a530108df20c2f20e
4
+ data.tar.gz: 7c5b542f62c33a02d5fb4de25e8b4af5519b0ff0
5
5
  SHA512:
6
- metadata.gz: a52fc1017a3b72de35f702ecdee98e467b210b2d32dd236a7741a73a53874ddabf8b8711e335668f08e0321d1caa135a5519bcb13b402d219e4ddfc1c50ba45c
7
- data.tar.gz: 7dd1646fc98747735c9511d96ef08a859834897781daa9f9029a6902ecb021f9972d7432ce635875e126666eded3ec4d440d5d50d3d2c078db65e9017a4866e0
6
+ metadata.gz: 6a3aa1ca6ab21e4f7699585d50fbb27f1f82cf67e8f7bf43d66a239c3b39da7f7a804abf7329f3cc0f96cfb6b71410bf7f39c8cf543f8f2d89b701c8ecfffc52
7
+ data.tar.gz: c3a4852db1d7d1b672d78f08bbc0843e22b66a7fece186cbb94311a9f2d6fda36058a60ecbc96239ebbf96c51d68764c609e51eb68851c28ebf1701e434463da
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1
@@ -0,0 +1,7 @@
1
+ ## 0.2.0
2
+
3
+ * Deprecating `jsx` helper method in component instance
4
+ * Deprecating `React::Element.new`, use `React.create_element` instead
5
+ * `React::Element` is now toll-free bridge to [ReactElement](http://facebook.github.io/react/docs/glossary.html#react-elements)
6
+ * `React::Element#props` now return a `Hash` rather than a `Native`
7
+ * `React::Element#children` now handling empty child & single child correctly
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- react.rb (0.1.0)
5
- opal (~> 0.6.0)
6
- opal-activesupport
7
- sprockets-es6
8
- therubyracer
4
+ react.rb (0.2.0)
5
+ opal (~> 0.6)
6
+ opal-activesupport (~> 0)
7
+ sprockets-es6 (~> 0)
8
+ therubyracer (~> 0)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
@@ -29,12 +29,13 @@ GEM
29
29
  rack (1.6.0)
30
30
  rack-protection (1.5.3)
31
31
  rack
32
+ rake (10.4.2)
32
33
  react-source (0.12.2)
33
34
  ref (1.0.5)
34
- sinatra (1.4.5)
35
+ sinatra (1.4.6)
35
36
  rack (~> 1.4)
36
37
  rack-protection (~> 1.4)
37
- tilt (~> 1.3, >= 1.3.4)
38
+ tilt (>= 1.3, < 3)
38
39
  source_map (3.0.1)
39
40
  json
40
41
  sprockets (3.0.0.beta.10)
@@ -45,14 +46,15 @@ GEM
45
46
  therubyracer (0.12.1)
46
47
  libv8 (~> 3.16.14.0)
47
48
  ref
48
- tilt (1.4.1)
49
+ tilt (2.0.1)
49
50
 
50
51
  PLATFORMS
51
52
  ruby
52
53
 
53
54
  DEPENDENCIES
54
- opal-jquery
55
+ opal-jquery (~> 0)
55
56
  opal-rspec (~> 0.3.0.beta3)
57
+ rake (~> 10)
56
58
  react-source (~> 0.12)
57
59
  react.rb!
58
- sinatra
60
+ sinatra (~> 1)
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # React.rb
2
2
 
3
+ [![Build Status](http://img.shields.io/travis/zetachang/react.rb/master.svg)](http://travis-ci.org/zetachang/react.rb)
3
4
  [![Gem Version](https://badge.fury.io/rb/react.rb.svg)](http://badge.fury.io/rb/react.rb)
4
5
  [![Code Climate](https://codeclimate.com/github/zetachang/react.rb/badges/gpa.svg)](https://codeclimate.com/github/zetachang/react.rb)
5
6
 
@@ -133,7 +134,7 @@ def render
133
134
  end
134
135
  ```
135
136
 
136
- ## JSX Support
137
+ ### JSX Support
137
138
 
138
139
  Not a fan of using element building DSL? Use file extension `.jsx.rb` to get JSX fragment compiled.
139
140
 
@@ -141,7 +142,7 @@ Not a fan of using element building DSL? Use file extension `.jsx.rb` to get JSX
141
142
  # app.jsx.rb
142
143
  class Fancy
143
144
  def render
144
- React.create_element('div') { "fancy" }
145
+ `<div>"this is fancy"</div>`
145
146
  end
146
147
  end
147
148
 
@@ -149,12 +150,13 @@ class App
149
150
  include React::Component
150
151
 
151
152
  def render
152
- jsx(%x{
153
+ element = %x{
153
154
  <div>
154
155
  <h1>Outer</h1>
155
156
  <Fancy>{ #{5.times.to_a.join(",")} }</Fancy>
156
157
  </div>
157
- })
158
+ }
159
+ element
158
160
  end
159
161
  end
160
162
 
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ Bundler.require
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ require 'opal/rspec/rake_task'
6
+ require "react/source"
7
+
8
+ Opal::RSpec::RakeTask.new(:default) do |s|
9
+ s.append_path File.dirname(::React::Source.bundled_path_for("react-with-addons"))
10
+ s.append_path 'spec/vendor'
11
+ s.index_path = 'spec/reactjs/index.html.erb'
12
+ end
data/config.ru CHANGED
@@ -9,6 +9,7 @@ Opal.append_path File.expand_path('../spec', __FILE__)
9
9
  run Opal::Server.new { |s|
10
10
  s.main = 'opal/rspec/sprockets_runner'
11
11
  s.append_path 'spec'
12
+ s.append_path 'spec/vendor'
12
13
  s.append_path File.dirname(::React::Source.bundled_path_for("react-with-addons.js"))
13
14
  s.debug = true
14
15
  s.index_path = 'spec/reactjs/index.html.erb'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- react.rb (0.0.2)
4
+ react.rb (0.1.0)
5
5
  opal (~> 0.6.0)
6
6
  opal-activesupport
7
7
  sprockets-es6
@@ -10,7 +10,7 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- babel-source (4.7.3)
13
+ babel-source (4.7.16)
14
14
  babel-transpiler (0.6.0)
15
15
  babel-source (>= 4.0, < 5)
16
16
  execjs (~> 2.0)
@@ -8,9 +8,8 @@ class Clock
8
8
  def render
9
9
  message = "React has been successfully running for #{params[:elapsed].round} seconds."
10
10
 
11
- jsx %x{
12
- <p>{#{message}}</p>
13
- }
11
+
12
+ `<p>{#{message}}</p>`
14
13
  end
15
14
  end
16
15
 
@@ -18,9 +17,7 @@ class ExampleApp
18
17
  include React::Component
19
18
 
20
19
  def render
21
- jsx(%x{
22
- <Clock elapsed={#{params[:elapsed]}} />
23
- })
20
+ `<Clock elapsed={#{params[:elapsed]}} />`
24
21
  end
25
22
  end
26
23
 
@@ -29,7 +26,7 @@ React.expose_native_class(Clock, ExampleApp)
29
26
  start = Time.now
30
27
 
31
28
  $window.every(0.05) do
32
- element = React::Element.new(`<ExampleApp elapsed={#{Time.now - start}}/>`)
29
+ element = `<ExampleApp elapsed={#{Time.now - start}}/>`
33
30
  container = `document.getElementById('container')`
34
31
  React.render element, container
35
32
  end
@@ -1,16 +1,22 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- react.rb (0.0.1)
4
+ react.rb (0.1.0)
5
5
  opal (~> 0.6.0)
6
6
  opal-activesupport
7
+ sprockets-es6
8
+ therubyracer
7
9
 
8
10
  GEM
9
11
  remote: https://rubygems.org/
10
12
  specs:
11
- hike (1.2.3)
13
+ babel-source (4.7.16)
14
+ babel-transpiler (0.6.0)
15
+ babel-source (>= 4.0, < 5)
16
+ execjs (~> 2.0)
17
+ execjs (2.4.0)
12
18
  json (1.8.2)
13
- multi_json (1.10.1)
19
+ libv8 (3.16.14.7)
14
20
  opal (0.6.3)
15
21
  source_map
16
22
  sprockets
@@ -21,19 +27,23 @@ GEM
21
27
  rack (1.6.0)
22
28
  rack-protection (1.5.3)
23
29
  rack
24
- react-source (0.12.2)
25
- sinatra (1.4.5)
30
+ react-source (0.13.1)
31
+ ref (1.0.5)
32
+ sinatra (1.4.6)
26
33
  rack (~> 1.4)
27
34
  rack-protection (~> 1.4)
28
- tilt (~> 1.3, >= 1.3.4)
35
+ tilt (>= 1.3, < 3)
29
36
  source_map (3.0.1)
30
37
  json
31
- sprockets (2.12.3)
32
- hike (~> 1.2)
33
- multi_json (~> 1.0)
38
+ sprockets (3.0.0.rc.1)
34
39
  rack (~> 1.0)
35
- tilt (~> 1.1, != 1.3.0)
36
- tilt (1.4.1)
40
+ sprockets-es6 (0.6.0)
41
+ babel-transpiler
42
+ sprockets (~> 3.0.0.beta)
43
+ therubyracer (0.12.1)
44
+ libv8 (~> 3.16.14.0)
45
+ ref
46
+ tilt (2.0.1)
37
47
 
38
48
  PLATFORMS
39
49
  ruby
@@ -42,7 +42,7 @@ get '/' do
42
42
  <link rel="stylesheet" href="base.css" />
43
43
  <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
44
44
  <script src="http://cdnjs.cloudflare.com/ajax/libs/showdown/0.3.1/showdown.min.js"></script>
45
- <script src="/assets/react-with-addons.min.js"></script>
45
+ <script src="/assets/react-with-addons.js"></script>
46
46
  <script src="/assets/example.js"></script>
47
47
  </head>
48
48
  <body>
@@ -100,5 +100,5 @@ end
100
100
 
101
101
 
102
102
  Document.ready? do
103
- React.render React.create_element(CommentBox, url: "comments.json", poll_interval: 2000), Element.find('#content').get(0)
103
+ React.render React.create_element(CommentBox, url: "comments.json", poll_interval: 2000), `document.getElementById('content')`
104
104
  end
@@ -6,6 +6,6 @@ gem 'opal-jquery', :github => 'opal/opal-jquery'
6
6
  gem 'vienna', :github => 'opal/vienna', :ref => '593335cbd7fb99ce471fa720e9b9c849d99b8dda'
7
7
  gem 'opal-haml', :github => 'opal/opal-haml'
8
8
  gem 'opal-rspec', '0.3.0.beta2'
9
- gem 'react.rb', :path => "../.."
9
+ gem 'react.rb', '~> 0.0.2'
10
10
  gem 'thin'
11
11
  gem 'react-source'
@@ -32,13 +32,6 @@ GIT
32
32
  opal-activesupport
33
33
  opal-jquery
34
34
 
35
- PATH
36
- remote: ../..
37
- specs:
38
- react.rb (0.0.1)
39
- opal (~> 0.6.0)
40
- opal-activesupport
41
-
42
35
  GEM
43
36
  remote: https://rubygems.org/
44
37
  specs:
@@ -56,6 +49,9 @@ GEM
56
49
  rack (1.5.2)
57
50
  rake (10.1.1)
58
51
  react-source (0.12.2)
52
+ react.rb (0.0.2)
53
+ opal (~> 0.6.0)
54
+ opal-activesupport
59
55
  source_map (3.0.1)
60
56
  json
61
57
  sprockets (2.12.3)
@@ -79,6 +75,6 @@ DEPENDENCIES
79
75
  opal-rspec (= 0.3.0.beta2)
80
76
  rake
81
77
  react-source
82
- react.rb!
78
+ react.rb (~> 0.0.2)
83
79
  thin
84
80
  vienna!
@@ -4,7 +4,7 @@
4
4
  %meta(charset="utf-8")
5
5
  %meta(http-equiv="X-UA-Compatible" content="IE=edge,chrome=1")
6
6
  %link(rel="stylesheet" href="/vendor/base.css")
7
- = javascript_include_tag 'react-with-addons.min.js'
7
+ = javascript_include_tag 'react-with-addons.js'
8
8
  = javascript_include_tag 'application'
9
9
 
10
10
  %body
@@ -32,7 +32,7 @@ module React
32
32
  end
33
33
  end
34
34
 
35
- return React::Element.new(`React.createElement.apply(null, #{params})`)
35
+ return `React.createElement.apply(null, #{params})`
36
36
  end
37
37
 
38
38
  def self.clear_component_class_cache
@@ -88,7 +88,7 @@ module React
88
88
  },
89
89
  render: function() {
90
90
  var instance = this._getOpalInstance.apply(this);
91
- return #{`instance`.render.to_n};
91
+ return instance.$render();
92
92
  }
93
93
  })
94
94
  }
@@ -77,10 +77,6 @@ module React
77
77
  end
78
78
  end
79
79
 
80
- def jsx(native)
81
- React::Element.new(native)
82
- end
83
-
84
80
  def method_missing(name, *args, &block)
85
81
  unless (React::HTML_TAGS.include?(name) || name == 'present' || name == '_p_tag')
86
82
  return super
@@ -1,63 +1,97 @@
1
1
  require "./ext/string"
2
2
 
3
3
  module React
4
- class Element
5
- include Native
6
-
7
- alias_native :element_type, :type
8
- alias_native :props, :props
9
-
10
- def initialize(native_element)
11
- @native = native_element
4
+ class Element < `(function(){var f = new Function();f.prototype = Object.getPrototypeOf(React.createElement(''));return f})()`
5
+ def self.new
6
+ raise "use React.create_element instead"
12
7
  end
13
-
8
+
9
+ def element_type
10
+ `self.type`
11
+ end
12
+
13
+ def key
14
+ Native(`self.key`)
15
+ end
16
+
17
+ def props
18
+ Hash.new(`self.props`)
19
+ end
20
+
21
+ def ref
22
+ Native(`self.ref`)
23
+ end
24
+
14
25
  def on(event_name)
15
26
  name = event_name.to_s.event_camelize
27
+
28
+
16
29
  if React::Event::BUILT_IN_EVENTS.include?("on#{name}")
17
- self.props["on#{name}"] = %x{
30
+ prop_key = "on#{name}"
31
+ callback = %x{
18
32
  function(event){
19
33
  #{yield React::Event.new(`event`)}
20
34
  }
21
35
  }
22
36
  else
23
- self.props["_on#{name}"] = %x{
37
+ prop_key = "_on#{name}"
38
+ callback = %x{
24
39
  function(){
25
40
  #{yield *Array(`arguments`)}
26
41
  }
27
42
  }
28
43
  end
44
+
45
+ `self.props[#{prop_key}] = #{callback}`
46
+
29
47
  self
30
48
  end
31
49
 
32
50
  def children
33
- nodes = self.props.children
34
- class << nodes
35
- include Enumerable
36
-
37
- def to_n
38
- self
51
+ nodes = `self.props.children`
52
+
53
+ if `React.Children.count(nodes)` == 0
54
+ `[]`
55
+ elsif `React.Children.count(nodes)` == 1
56
+ if `(typeof nodes === 'string') || (typeof nodes === 'number')`
57
+ [nodes]
58
+ else
59
+ `[React.Children.only(nodes)]`
39
60
  end
61
+ else
62
+ # Not sure the overhead of doing this..
63
+ class << nodes
64
+ include Enumerable
65
+
66
+ def to_n
67
+ self
68
+ end
40
69
 
41
- def each(&block)
42
- if block_given?
43
- %x{
44
- React.Children.forEach(#{self.to_n}, function(context){
45
- #{block.call(React::Element.new(`context`))}
46
- })
47
- }
48
- else
49
- Enumerator.new(`React.Children.count(#{self.to_n})`) do |y|
70
+ def each(&block)
71
+ if block_given?
50
72
  %x{
51
73
  React.Children.forEach(#{self.to_n}, function(context){
52
- #{y << React::Element.new(`context`)}
74
+ #{block.call(`context`)}
53
75
  })
54
76
  }
77
+ else
78
+ Enumerator.new(`React.Children.count(#{self.to_n})`) do |y|
79
+ %x{
80
+ React.Children.forEach(#{self.to_n}, function(context){
81
+ #{y << `context`}
82
+ })
83
+ }
84
+ end
55
85
  end
56
86
  end
57
87
  end
88
+
89
+ nodes
58
90
  end
59
-
60
- nodes
91
+ end
92
+
93
+ def to_n
94
+ self
61
95
  end
62
96
  end
63
97
  end
@@ -27,21 +27,21 @@ module React
27
27
  end
28
28
 
29
29
  def self.render(element, container)
30
- component = Native(`React.render(#{element.to_n}, container, function(){#{yield if block_given?}})`)
30
+ component = Native(`React.render(#{element}, container, function(){#{yield if block_given?}})`)
31
31
  component.class.include(React::Component::API)
32
32
  component
33
33
  end
34
34
 
35
35
  def self.is_valid_element(element)
36
- element.kind_of?(React::Element) && `React.isValidElement(#{element.to_n})`
36
+ `React.isValidElement(#{element})`
37
37
  end
38
38
 
39
39
  def self.render_to_string(element)
40
- `React.renderToString(#{element.to_n})`
40
+ `React.renderToString(#{element})`
41
41
  end
42
42
 
43
43
  def self.render_to_static_markup(element)
44
- `React.renderToStaticMarkup(#{element.to_n})`
44
+ `React.renderToStaticMarkup(#{element})`
45
45
  end
46
46
 
47
47
  def self.unmount_component_at_node(node)
@@ -1,3 +1,3 @@
1
1
  module React
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -16,12 +16,13 @@ Gem::Specification.new do |s|
16
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
17
  s.require_paths = ['lib', 'vendor']
18
18
 
19
- s.add_runtime_dependency 'opal', '~> 0.6.0'
20
- s.add_runtime_dependency 'opal-activesupport'
21
- s.add_runtime_dependency 'sprockets-es6'
22
- s.add_runtime_dependency 'therubyracer'
19
+ s.add_runtime_dependency 'opal', '~> 0.6'
20
+ s.add_runtime_dependency 'opal-activesupport', '~> 0'
21
+ s.add_runtime_dependency 'sprockets-es6', '~> 0'
22
+ s.add_runtime_dependency 'therubyracer', '~> 0'
23
23
  s.add_development_dependency 'react-source', '~> 0.12'
24
24
  s.add_development_dependency 'opal-rspec', '~> 0.3.0.beta3'
25
- s.add_development_dependency 'sinatra'
26
- s.add_development_dependency 'opal-jquery'
25
+ s.add_development_dependency 'sinatra', '~> 1'
26
+ s.add_development_dependency 'opal-jquery', '~> 0'
27
+ s.add_development_dependency 'rake', '~> 10'
27
28
  end
@@ -594,21 +594,4 @@ describe React::Component do
594
594
  expect(component.mounted?).to eq(true)
595
595
  end
596
596
  end
597
-
598
- describe "Helpers" do
599
- describe "jsx" do
600
- it "should wrap passed JS object to React::Element" do
601
- stub_const 'Foo', Class.new
602
- Foo.class_eval do
603
- include React::Component
604
-
605
- def foo
606
- jsx(`React.createElement('div')`)
607
- end
608
- end
609
-
610
- expect(Foo.new.foo).to be_kind_of(React::Element)
611
- end
612
- end
613
- end
614
597
  end
@@ -1,18 +1,52 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe React::Element do
4
- it "should bridge `type` of native React.Element attributes" do
4
+ it "should be toll-free bridged to React.Element" do
5
5
  element = React.create_element('div')
6
- expect(element.element_type).to eq("div")
6
+ expect(`React.isValidElement(#{element})`).to eq(true)
7
7
  end
8
-
9
- async "should be renderable" do
10
- element = React.create_element('span')
11
- div = `document.createElement("div")`
12
- React.render(element, div) do
13
- run_async {
14
- expect(`div.children[0].tagName`).to eq("SPAN")
8
+
9
+ describe "#new" do
10
+ it "should raise error if invokded" do
11
+ expect { React::Element.new }.to raise_error
12
+ end
13
+ end
14
+
15
+ describe "#element_type" do
16
+ it "should bridge to `type` of native" do
17
+ element = React.create_element('div')
18
+ expect(element.element_type).to eq("div")
19
+ %x{
20
+ var m = React.createClass({
21
+ render:function(){ return React.createElement('div'); }
22
+ });
23
+ var ele = React.createElement(m);
15
24
  }
25
+ expect(`ele`.element_type).to eq(`ele.type`)
26
+ end
27
+ end
28
+
29
+ describe "#key" do
30
+ it "should bridge to `key` of native" do
31
+ element = React.create_element('div', key: "1")
32
+ expect(element.key).to eq(`#{element}.key`)
33
+ end
34
+
35
+ it "should return nil if key is null" do
36
+ element = React.create_element('div')
37
+ expect(element.key).to be_nil
38
+ end
39
+ end
40
+
41
+ describe "#ref" do
42
+ it "should bridge to `ref` of native" do
43
+ element = React.create_element('div', ref: "foo")
44
+ expect(element.ref).to eq(`#{element}.ref`)
45
+ end
46
+
47
+ it "should return nil if ref is null" do
48
+ element = React.create_element('div')
49
+ expect(element.ref).to be_nil
16
50
  end
17
51
  end
18
52
 
@@ -43,7 +77,7 @@ describe React::Element do
43
77
  end
44
78
  end
45
79
 
46
- describe "Children" do
80
+ describe "Props.Children" do
47
81
  it "should return a Enumerable" do
48
82
  ele = React.create_element('div') { [React.create_element('a'), React.create_element('li')] }
49
83
  nodes = ele.children.map {|ele| ele.element_type }
@@ -56,5 +90,37 @@ describe React::Element do
56
90
  expect(nodes).to be_a(Enumerator)
57
91
  expect(nodes.size).to eq(2)
58
92
  end
93
+
94
+ describe "empty" do
95
+ it "should work as Enumerable" do
96
+ ele = React.create_element('div')
97
+ expect(ele.children.count).to eq(0)
98
+ expect(ele.children.none?).to eq(true)
99
+ end
100
+ end
101
+
102
+ describe "single child" do
103
+ it "should works as Enumerable" do
104
+ ele = React.create_element('div') { [React.create_element('a')] }
105
+ expect(ele.children.count).to eq(1)
106
+ expect(ele.children.map {|node| node.element_type}).to eq(['a'])
107
+ end
108
+ end
109
+
110
+ describe "single child as string" do
111
+ it "should works as Enumerable" do
112
+ ele = React.create_element('div') { "foo" }
113
+ expect(ele.children.count).to eq(1)
114
+ expect(ele.children.map {|node| node}).to eq(['foo'])
115
+ end
116
+ end
117
+
118
+ describe "single child as number" do
119
+ it "should works as Enumerable" do
120
+ ele = React.create_element('div') { 123 }
121
+ expect(ele.children.count).to eq(1)
122
+ expect(ele.children.map {|node| node}).to eq([123])
123
+ end
124
+ end
59
125
  end
60
126
  end
@@ -7,12 +7,12 @@ describe React do
7
7
 
8
8
  describe "is_valid_element" do
9
9
  it "should return true if passed a valid element" do
10
- element = React::Element.new(`React.createElement('div')`)
10
+ element = `React.createElement('div')`
11
11
  expect(React.is_valid_element(element)).to eq(true)
12
12
  end
13
13
 
14
14
  it "should return false is passed a non React element" do
15
- element = React::Element.new(`{}`)
15
+ element = `{}`
16
16
  expect(React.is_valid_element(element)).to eq(false)
17
17
  end
18
18
  end
@@ -27,7 +27,7 @@ describe React do
27
27
  it "should create a valid element with text as only child when block yield String" do
28
28
  element = React.create_element('div') { "lorem ipsum" }
29
29
  expect(React.is_valid_element(element)).to eq(true)
30
- expect(element.props.children).to eq("lorem ipsum")
30
+ expect(element.children.to_a).to eq(["lorem ipsum"])
31
31
  end
32
32
 
33
33
  it "should create a valid element with children as array when block yield Array of element" do
@@ -35,7 +35,7 @@ describe React do
35
35
  [React.create_element('span'), React.create_element('span'), React.create_element('span')]
36
36
  end
37
37
  expect(React.is_valid_element(element)).to eq(true)
38
- expect(element.props.children.length).to eq(3)
38
+ expect(element.children.length).to eq(3)
39
39
  end
40
40
 
41
41
  it "should render element with children as array when block yield Array of element" do
@@ -56,18 +56,16 @@ describe React do
56
56
  end
57
57
  end
58
58
 
59
- it "should render element with only one children correctly" do
59
+ it "should create element with only one children correctly" do
60
60
  element = React.create_element(Foo) { React.create_element('span') }
61
- instance = renderElementToDocument(element)
62
- expect(instance.props.children).not_to be_a(Array)
63
- expect(instance.props.children.type).to eq("span")
61
+ expect(element.children.count).to eq(1)
62
+ expect(element.children.map{|e| e.element_type }).to eq(["span"])
64
63
  end
65
64
 
66
- it "should render element with more than one children correctly" do
65
+ it "should create element with more than one children correctly" do
67
66
  element = React.create_element(Foo) { [React.create_element('span'), React.create_element('span')] }
68
- instance = renderElementToDocument(element)
69
- expect(instance.props.children).to be_a(Array)
70
- expect(instance.props.children.length).to eq(2)
67
+ expect(element.children.count).to eq(2)
68
+ expect(element.children.map{|e| e.element_type }).to eq(["span", "span"])
71
69
  end
72
70
 
73
71
  it "should create a valid element provided class defined `render`" do
@@ -77,7 +75,7 @@ describe React do
77
75
 
78
76
  it "should allow creating with properties" do
79
77
  element = React.create_element(Foo, foo: "bar")
80
- expect(element.props.foo).to eq("bar")
78
+ expect(element.props[:foo]).to eq("bar")
81
79
  end
82
80
 
83
81
  it "should raise error if provided class doesn't defined `render`" do
@@ -125,17 +123,17 @@ describe React do
125
123
  describe "create element with properties" do
126
124
  it "should enforce snake-cased property name" do
127
125
  element = React.create_element("div", class_name: "foo")
128
- expect(element.props.className).to eq("foo")
126
+ expect(element.props[:className]).to eq("foo")
129
127
  end
130
128
 
131
129
  it "should allow custom property" do
132
130
  element = React.create_element("div", foo: "bar")
133
- expect(element.props.foo).to eq("bar")
131
+ expect(element.props[:foo]).to eq("bar")
134
132
  end
135
133
 
136
134
  it "should not camel-case custom property" do
137
135
  element = React.create_element("div", foo_bar: "foo")
138
- expect(element.props.foo_bar).to eq("foo")
136
+ expect(element.props[:foo_bar]).to eq("foo")
139
137
  end
140
138
  end
141
139
 
@@ -144,13 +142,13 @@ describe React do
144
142
  classes = {foo: true, bar: false, lorem: true}
145
143
  element = React.create_element("div", class_name: classes)
146
144
 
147
- expect(element.props.className).to eq("foo lorem")
145
+ expect(element.props[:className]).to eq("foo lorem")
148
146
  end
149
147
 
150
148
  it "should not alter behavior when passing a string" do
151
149
  element = React.create_element("div", class_name: "foo bar")
152
150
 
153
- expect(element.props.className).to eq("foo bar")
151
+ expect(element.props[:className]).to eq("foo bar")
154
152
  end
155
153
  end
156
154
  end
@@ -3,6 +3,7 @@
3
3
  <head>
4
4
  </head>
5
5
  <body>
6
+ <%= javascript_include_tag 'es5-shim.min' %>
6
7
  <%= javascript_include_tag 'react-with-addons' %>
7
8
  <%= javascript_include_tag @server.main %>
8
9
  <div id="placeholder" style="display: none"></div>
@@ -9,18 +9,18 @@ module ReactTestHelpers
9
9
  end
10
10
 
11
11
  def renderElementToDocument(element)
12
- instance = Native(`ReactTestUtils.renderIntoDocument(#{element.to_n})`)
12
+ instance = Native(`ReactTestUtils.renderIntoDocument(#{element})`)
13
13
  instance.class.include(React::Component::API)
14
14
  return instance
15
15
  end
16
16
 
17
- def simulateEvent(event, element, params = {})
17
+ def simulateEvent(event, component, params = {})
18
18
  simulator = Native(`ReactTestUtils.Simulate`)
19
- simulator[event.to_s].call(`#{element.to_n}.getDOMNode()`, params)
19
+ simulator[event.to_s].call(`#{component.to_n}.getDOMNode()`, params)
20
20
  end
21
21
 
22
22
  def isElementOfType(element, type)
23
- `React.addons.TestUtils.isElementOfType(#{element.to_n}, #{type.cached_component_class})`
23
+ `React.addons.TestUtils.isElementOfType(#{element}, #{type.cached_component_class})`
24
24
  end
25
25
  end
26
26
 
@@ -0,0 +1,7 @@
1
+ /*!
2
+ * https://github.com/es-shims/es5-shim
3
+ * @license es5-shim Copyright 2009-2014 by contributors, MIT License
4
+ * see https://github.com/es-shims/es5-shim/blob/v4.1.0/LICENSE
5
+ */
6
+ (function(t,e){"use strict";if(typeof define==="function"&&define.amd){define(e)}else if(typeof exports==="object"){module.exports=e()}else{t.returnExports=e()}})(this,function(){var t=Array.prototype;var e=Object.prototype;var r=Function.prototype;var n=String.prototype;var i=Number.prototype;var a=t.slice;var o=t.splice;var u=t.push;var l=t.unshift;var f=r.call;var s=e.toString;var c=Array.isArray||function ye(t){return s.call(t)==="[object Array]"};var p=typeof Symbol==="function"&&typeof Symbol.toStringTag==="symbol";var h;var v=Function.prototype.toString,g=function de(t){try{v.call(t);return true}catch(e){return false}},y="[object Function]",d="[object GeneratorFunction]";h=function me(t){if(typeof t!=="function"){return false}if(p){return g(t)}var e=s.call(t);return e===y||e===d};var m;var b=RegExp.prototype.exec,w=function be(t){try{b.call(t);return true}catch(e){return false}},T="[object RegExp]";m=function we(t){if(typeof t!=="object"){return false}return p?w(t):s.call(t)===T};var x;var O=String.prototype.valueOf,j=function Te(t){try{O.call(t);return true}catch(e){return false}},S="[object String]";x=function xe(t){if(typeof t==="string"){return true}if(typeof t!=="object"){return false}return p?j(t):s.call(t)===S};var E=function Oe(t){var e=s.call(t);var r=e==="[object Arguments]";if(!r){r=!c(t)&&t!==null&&typeof t==="object"&&typeof t.length==="number"&&t.length>=0&&h(t.callee)}return r};var N=function(t){var e=Object.defineProperty&&function(){try{Object.defineProperty({},"x",{});return true}catch(t){return false}}();var r;if(e){r=function(t,e,r,n){if(!n&&e in t){return}Object.defineProperty(t,e,{configurable:true,enumerable:false,writable:true,value:r})}}else{r=function(t,e,r,n){if(!n&&e in t){return}t[e]=r}}return function n(e,i,a){for(var o in i){if(t.call(i,o)){r(e,o,i[o],a)}}}}(e.hasOwnProperty);function I(t){var e=typeof t;return t===null||e==="undefined"||e==="boolean"||e==="number"||e==="string"}var D={ToInteger:function je(t){var e=+t;if(e!==e){e=0}else if(e!==0&&e!==1/0&&e!==-(1/0)){e=(e>0||-1)*Math.floor(Math.abs(e))}return e},ToPrimitive:function Se(t){var e,r,n;if(I(t)){return t}r=t.valueOf;if(h(r)){e=r.call(t);if(I(e)){return e}}n=t.toString;if(h(n)){e=n.call(t);if(I(e)){return e}}throw new TypeError},ToObject:function(t){if(t==null){throw new TypeError("can't convert "+t+" to object")}return Object(t)},ToUint32:function Ee(t){return t>>>0}};var M=function Ne(){};N(r,{bind:function Ie(t){var e=this;if(!h(e)){throw new TypeError("Function.prototype.bind called on incompatible "+e)}var r=a.call(arguments,1);var n;var i=function(){if(this instanceof n){var i=e.apply(this,r.concat(a.call(arguments)));if(Object(i)===i){return i}return this}else{return e.apply(t,r.concat(a.call(arguments)))}};var o=Math.max(0,e.length-r.length);var u=[];for(var l=0;l<o;l++){u.push("$"+l)}n=Function("binder","return function ("+u.join(",")+"){ return binder.apply(this, arguments); }")(i);if(e.prototype){M.prototype=e.prototype;n.prototype=new M;M.prototype=null}return n}});var F=f.bind(e.hasOwnProperty);var R=function(){var t=[1,2];var e=t.splice();return t.length===2&&c(e)&&e.length===0}();N(t,{splice:function De(t,e){if(arguments.length===0){return[]}else{return o.apply(this,arguments)}}},!R);var U=function(){var e={};t.splice.call(e,0,0,1);return e.length===1}();N(t,{splice:function Me(t,e){if(arguments.length===0){return[]}var r=arguments;this.length=Math.max(D.ToInteger(this.length),0);if(arguments.length>0&&typeof e!=="number"){r=a.call(arguments);if(r.length<2){r.push(this.length-t)}else{r[1]=D.ToInteger(e)}}return o.apply(this,r)}},!U);var k=[].unshift(0)!==1;N(t,{unshift:function(){l.apply(this,arguments);return this.length}},k);N(Array,{isArray:c});var A=Object("a");var C=A[0]!=="a"||!(0 in A);var P=function Fe(t){var e=true;var r=true;if(t){t.call("foo",function(t,r,n){if(typeof n!=="object"){e=false}});t.call([1],function(){"use strict";r=typeof this==="string"},"x")}return!!t&&e&&r};N(t,{forEach:function Re(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=arguments[1],i=-1,a=r.length>>>0;if(!h(t)){throw new TypeError}while(++i<a){if(i in r){t.call(n,r[i],i,e)}}}},!P(t.forEach));N(t,{map:function Ue(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=r.length>>>0,i=Array(n),a=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var o=0;o<n;o++){if(o in r){i[o]=t.call(a,r[o],o,e)}}return i}},!P(t.map));N(t,{filter:function ke(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=r.length>>>0,i=[],a,o=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var u=0;u<n;u++){if(u in r){a=r[u];if(t.call(o,a,u,e)){i.push(a)}}}return i}},!P(t.filter));N(t,{every:function Ae(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=r.length>>>0,i=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var a=0;a<n;a++){if(a in r&&!t.call(i,r[a],a,e)){return false}}return true}},!P(t.every));N(t,{some:function Ce(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=r.length>>>0,i=arguments[1];if(!h(t)){throw new TypeError(t+" is not a function")}for(var a=0;a<n;a++){if(a in r&&t.call(i,r[a],a,e)){return true}}return false}},!P(t.some));var Z=false;if(t.reduce){Z=typeof t.reduce.call("es5",function(t,e,r,n){return n})==="object"}N(t,{reduce:function Pe(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=r.length>>>0;if(!h(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduce of empty array with no initial value")}var i=0;var a;if(arguments.length>=2){a=arguments[1]}else{do{if(i in r){a=r[i++];break}if(++i>=n){throw new TypeError("reduce of empty array with no initial value")}}while(true)}for(;i<n;i++){if(i in r){a=t.call(void 0,a,r[i],i,e)}}return a}},!Z);var J=false;if(t.reduceRight){J=typeof t.reduceRight.call("es5",function(t,e,r,n){return n})==="object"}N(t,{reduceRight:function Ze(t){var e=D.ToObject(this),r=C&&x(this)?this.split(""):e,n=r.length>>>0;if(!h(t)){throw new TypeError(t+" is not a function")}if(!n&&arguments.length===1){throw new TypeError("reduceRight of empty array with no initial value")}var i,a=n-1;if(arguments.length>=2){i=arguments[1]}else{do{if(a in r){i=r[a--];break}if(--a<0){throw new TypeError("reduceRight of empty array with no initial value")}}while(true)}if(a<0){return i}do{if(a in r){i=t.call(void 0,i,r[a],a,e)}}while(a--);return i}},!J);var z=Array.prototype.indexOf&&[0,1].indexOf(1,2)!==-1;N(t,{indexOf:function Je(t){var e=C&&x(this)?this.split(""):D.ToObject(this),r=e.length>>>0;if(!r){return-1}var n=0;if(arguments.length>1){n=D.ToInteger(arguments[1])}n=n>=0?n:Math.max(0,r+n);for(;n<r;n++){if(n in e&&e[n]===t){return n}}return-1}},z);var $=Array.prototype.lastIndexOf&&[0,1].lastIndexOf(0,-3)!==-1;N(t,{lastIndexOf:function ze(t){var e=C&&x(this)?this.split(""):D.ToObject(this),r=e.length>>>0;if(!r){return-1}var n=r-1;if(arguments.length>1){n=Math.min(n,D.ToInteger(arguments[1]))}n=n>=0?n:r-Math.abs(n);for(;n>=0;n--){if(n in e&&t===e[n]){return n}}return-1}},$);var B=!{toString:null}.propertyIsEnumerable("toString"),G=function(){}.propertyIsEnumerable("prototype"),H=!F("x","0"),L=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],X=L.length;N(Object,{keys:function $e(t){var e=h(t),r=E(t),n=t!==null&&typeof t==="object",i=n&&x(t);if(!n&&!e&&!r){throw new TypeError("Object.keys called on a non-object")}var a=[];var o=G&&e;if(i&&H||r){for(var u=0;u<t.length;++u){a.push(String(u))}}if(!r){for(var l in t){if(!(o&&l==="prototype")&&F(t,l)){a.push(String(l))}}}if(B){var f=t.constructor,s=f&&f.prototype===t;for(var c=0;c<X;c++){var p=L[c];if(!(s&&p==="constructor")&&F(t,p)){a.push(p)}}}return a}});var Y=Object.keys&&function(){return Object.keys(arguments).length===2}(1,2);var q=Object.keys;N(Object,{keys:function Be(e){if(E(e)){return q(t.slice.call(e))}else{return q(e)}}},!Y);var K=-621987552e5;var Q="-000001";var V=Date.prototype.toISOString&&new Date(K).toISOString().indexOf(Q)===-1;N(Date.prototype,{toISOString:function Ge(){var t,e,r,n,i;if(!isFinite(this)){throw new RangeError("Date.prototype.toISOString called on non-finite value.")}n=this.getUTCFullYear();i=this.getUTCMonth();n+=Math.floor(i/12);i=(i%12+12)%12;t=[i+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()];n=(n<0?"-":n>9999?"+":"")+("00000"+Math.abs(n)).slice(0<=n&&n<=9999?-4:-6);e=t.length;while(e--){r=t[e];if(r<10){t[e]="0"+r}}return n+"-"+t.slice(0,2).join("-")+"T"+t.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"}},V);var W=false;try{W=Date.prototype.toJSON&&new Date(NaN).toJSON()===null&&new Date(K).toJSON().indexOf(Q)!==-1&&Date.prototype.toJSON.call({toISOString:function(){return true}})}catch(_){}if(!W){Date.prototype.toJSON=function He(t){var e=Object(this),r=D.ToPrimitive(e),n;if(typeof r==="number"&&!isFinite(r)){return null}n=e.toISOString;if(typeof n!=="function"){throw new TypeError("toISOString property is not callable")}return n.call(e)}}var te=Date.parse("+033658-09-27T01:46:40.000Z")===1e15;var ee=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"));var re=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(!Date.parse||re||ee||!te){Date=function(t){function e(r,n,i,a,o,u,l){var f=arguments.length;if(this instanceof t){var s=f===1&&String(r)===r?new t(e.parse(r)):f>=7?new t(r,n,i,a,o,u,l):f>=6?new t(r,n,i,a,o,u):f>=5?new t(r,n,i,a,o):f>=4?new t(r,n,i,a):f>=3?new t(r,n,i):f>=2?new t(r,n):f>=1?new t(r):new t;s.constructor=e;return s}return t.apply(this,arguments)}var r=new RegExp("^"+"(\\d{4}|[+-]\\d{6})"+"(?:-(\\d{2})"+"(?:-(\\d{2})"+"(?:"+"T(\\d{2})"+":(\\d{2})"+"(?:"+":(\\d{2})"+"(?:(\\.\\d{1,}))?"+")?"+"("+"Z|"+"(?:"+"([-+])"+"(\\d{2})"+":(\\d{2})"+")"+")?)?)?)?"+"$");var n=[0,31,59,90,120,151,181,212,243,273,304,334,365];function i(t,e){var r=e>1?1:0;return n[e]+Math.floor((t-1969+r)/4)-Math.floor((t-1901+r)/100)+Math.floor((t-1601+r)/400)+365*(t-1970)}function a(e){return Number(new t(1970,0,1,0,0,0,e))}for(var o in t){e[o]=t[o]}e.now=t.now;e.UTC=t.UTC;e.prototype=t.prototype;e.prototype.constructor=e;e.parse=function u(e){var n=r.exec(e);if(n){var o=Number(n[1]),u=Number(n[2]||1)-1,l=Number(n[3]||1)-1,f=Number(n[4]||0),s=Number(n[5]||0),c=Number(n[6]||0),p=Math.floor(Number(n[7]||0)*1e3),h=Boolean(n[4]&&!n[8]),v=n[9]==="-"?1:-1,g=Number(n[10]||0),y=Number(n[11]||0),d;if(f<(s>0||c>0||p>0?24:25)&&s<60&&c<60&&p<1e3&&u>-1&&u<12&&g<24&&y<60&&l>-1&&l<i(o,u+1)-i(o,u)){d=((i(o,u)+l)*24+f+g*v)*60;d=((d+s+y*v)*60+c)*1e3+p;if(h){d=a(d)}if(-864e13<=d&&d<=864e13){return d}}return NaN}return t.parse.apply(this,arguments)};return e}(Date)}if(!Date.now){Date.now=function Le(){return(new Date).getTime()}}var ne=i.toFixed&&(8e-5.toFixed(3)!=="0.000"||.9.toFixed(0)!=="1"||1.255.toFixed(2)!=="1.25"||0xde0b6b3a7640080.toFixed(0)!=="1000000000000000128");var ie={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function Xe(t,e){var r=-1;while(++r<ie.size){e+=t*ie.data[r];ie.data[r]=e%ie.base;e=Math.floor(e/ie.base)}},divide:function Ye(t){var e=ie.size,r=0;while(--e>=0){r+=ie.data[e];ie.data[e]=Math.floor(r/t);r=r%t*ie.base}},numToString:function qe(){var t=ie.size;var e="";while(--t>=0){if(e!==""||t===0||ie.data[t]!==0){var r=String(ie.data[t]);if(e===""){e=r}else{e+="0000000".slice(0,7-r.length)+r}}}return e},pow:function Ke(t,e,r){return e===0?r:e%2===1?Ke(t,e-1,r*t):Ke(t*t,e/2,r)},log:function Qe(t){var e=0;while(t>=4096){e+=12;t/=4096}while(t>=2){e+=1;t/=2}return e}};N(i,{toFixed:function Ve(t){var e,r,n,i,a,o,u,l;e=Number(t);e=e!==e?0:Math.floor(e);if(e<0||e>20){throw new RangeError("Number.toFixed called with invalid number of decimals")}r=Number(this);if(r!==r){return"NaN"}if(r<=-1e21||r>=1e21){return String(r)}n="";if(r<0){n="-";r=-r}i="0";if(r>1e-21){a=ie.log(r*ie.pow(2,69,1))-69;o=a<0?r*ie.pow(2,-a,1):r/ie.pow(2,a,1);o*=4503599627370496;a=52-a;if(a>0){ie.multiply(0,o);u=e;while(u>=7){ie.multiply(1e7,0);u-=7}ie.multiply(ie.pow(10,u,1),0);u=a-1;while(u>=23){ie.divide(1<<23);u-=23}ie.divide(1<<u);ie.multiply(1,1);ie.divide(2);i=ie.numToString()}else{ie.multiply(0,o);ie.multiply(1<<-a,0);i=ie.numToString()+"0.00000000000000000000".slice(2,2+e)}}if(e>0){l=i.length;if(l<=e){i=n+"0.0000000000000000000".slice(0,e-l+2)+i}else{i=n+i.slice(0,l-e)+"."+i.slice(l-e)}}else{i=n+i}return i}},ne);var ae=n.split;if("ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"test".split(/(?:)/,-1).length!==4||"".split(/.?/).length||".".split(/()()/).length>1){(function(){var t=typeof/()??/.exec("")[1]==="undefined";n.split=function(e,r){var n=this;if(typeof e==="undefined"&&r===0){return[]}if(!m(e)){return ae.call(this,e,r)}var i=[],a=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.extended?"x":"")+(e.sticky?"y":""),o=0,l,f,s,c;e=new RegExp(e.source,a+"g");n+="";if(!t){l=new RegExp("^"+e.source+"$(?!\\s)",a)}r=typeof r==="undefined"?-1>>>0:D.ToUint32(r);f=e.exec(n);while(f){s=f.index+f[0].length;if(s>o){i.push(n.slice(o,f.index));if(!t&&f.length>1){f[0].replace(l,function(){for(var t=1;t<arguments.length-2;t++){if(typeof arguments[t]==="undefined"){f[t]=void 0}}})}if(f.length>1&&f.index<n.length){u.apply(i,f.slice(1))}c=f[0].length;o=s;if(i.length>=r){break}}if(e.lastIndex===f.index){e.lastIndex++}f=e.exec(n)}if(o===n.length){if(c||!e.test("")){i.push("")}}else{i.push(n.slice(o))}return i.length>r?i.slice(0,r):i}})()}else if("0".split(void 0,0).length){n.split=function We(t,e){if(typeof t==="undefined"&&e===0){return[]}return ae.call(this,t,e)}}var oe=n.replace;var ue=function(){var t=[];"x".replace(/x(.)?/g,function(e,r){t.push(r)});return t.length===1&&typeof t[0]==="undefined"}();if(!ue){n.replace=function _e(t,e){var r=h(e);var n=m(t)&&/\)[*?]/.test(t.source);if(!r||!n){return oe.call(this,t,e)}else{var i=function(r){var n=arguments.length;var i=t.lastIndex;t.lastIndex=0;var a=t.exec(r)||[];t.lastIndex=i;a.push(arguments[n-2],arguments[n-1]);return e.apply(this,a)};return oe.call(this,t,i)}}}var le=n.substr;var fe="".substr&&"0b".substr(-1)!=="b";N(n,{substr:function tr(t,e){return le.call(this,t<0?(t=this.length+t)<0?0:t:t,e)}},fe);var se=" \n \f\r \xa0\u1680\u180e\u2000\u2001\u2002\u2003"+"\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028"+"\u2029\ufeff";var ce="\u200b";var pe="["+se+"]";var he=new RegExp("^"+pe+pe+"*");var ve=new RegExp(pe+pe+"*$");var ge=n.trim&&(se.trim()||!ce.trim());N(n,{trim:function er(){if(typeof this==="undefined"||this===null){throw new TypeError("can't convert "+this+" to object")}return String(this).replace(he,"").replace(ve,"")}},ge);if(parseInt(se+"08")!==8||parseInt(se+"0x16")!==22){parseInt=function(t){var e=/^0[xX]/;return function r(n,i){n=String(n).trim();if(!Number(i)){i=e.test(n)?16:10}return t(n,i)}}(parseInt)}});
7
+ //# sourceMappingURL=es5-shim.map
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: react.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
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-03-29 00:00:00.000000000 Z
11
+ date: 2015-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -16,54 +16,54 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.6.0
19
+ version: '0.6'
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.6.0
26
+ version: '0.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: opal-activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: sprockets-es6
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '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
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: therubyracer
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
@@ -98,30 +98,44 @@ dependencies:
98
98
  name: sinatra
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: '1'
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: '1'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: opal-jquery
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '10'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '10'
125
139
  description: Write reactive UI component with Ruby's elegancy and compiled to run
126
140
  in Javascript.
127
141
  email: zeta11235813@gmail.com
@@ -130,10 +144,13 @@ extensions: []
130
144
  extra_rdoc_files: []
131
145
  files:
132
146
  - ".gitignore"
147
+ - ".travis.yml"
148
+ - CHANGELOG.md
133
149
  - Gemfile
134
150
  - Gemfile.lock
135
151
  - LICENSE
136
152
  - README.md
153
+ - Rakefile
137
154
  - config.ru
138
155
  - example/basic-jsx/Gemfile
139
156
  - example/basic-jsx/Gemfile.lock
@@ -183,6 +200,7 @@ files:
183
200
  - spec/reactjs/index.html.erb
184
201
  - spec/spec_helper.rb
185
202
  - spec/validator_spec.rb
203
+ - spec/vendor/es5-shim.min.js
186
204
  - vendor/active_support/core_ext/array/extract_options.rb
187
205
  - vendor/active_support/core_ext/class/attribute.rb
188
206
  - vendor/active_support/core_ext/kernel/singleton_class.rb
@@ -221,3 +239,4 @@ test_files:
221
239
  - spec/reactjs/index.html.erb
222
240
  - spec/spec_helper.rb
223
241
  - spec/validator_spec.rb
242
+ - spec/vendor/es5-shim.min.js