react.rb 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile.lock +16 -13
  4. data/README.md +4 -1
  5. data/{example → examples}/basic-jsx/Gemfile +0 -0
  6. data/{example → examples}/basic-jsx/Gemfile.lock +20 -17
  7. data/examples/basic-jsx/config.ru +10 -0
  8. data/{example → examples}/basic-jsx/example.jsx.rb +0 -0
  9. data/examples/basic-jsx/index.html.erb +11 -0
  10. data/{example → examples}/react-tutorial/Gemfile +0 -0
  11. data/{example → examples}/react-tutorial/Gemfile.lock +19 -16
  12. data/{example → examples}/react-tutorial/README.md +0 -0
  13. data/{example → examples}/react-tutorial/_comments.json +0 -0
  14. data/{example → examples}/react-tutorial/config.ru +4 -19
  15. data/{example → examples}/react-tutorial/example.rb +0 -0
  16. data/examples/react-tutorial/index.html.erb +14 -0
  17. data/{example → examples}/react-tutorial/public/base.css +0 -0
  18. data/examples/todos/Gemfile +6 -0
  19. data/examples/todos/Gemfile.lock +65 -0
  20. data/{example → examples}/todos/README.md +0 -0
  21. data/{example → examples}/todos/Rakefile +0 -0
  22. data/{example → examples}/todos/app/application.rb +1 -2
  23. data/{example → examples}/todos/app/components/app.react.rb +0 -0
  24. data/{example → examples}/todos/app/components/footer.react.rb +0 -0
  25. data/{example → examples}/todos/app/components/todo_item.react.rb +2 -1
  26. data/{example → examples}/todos/app/components/todo_list.react.rb +0 -0
  27. data/{example → examples}/todos/app/models/todo.rb +0 -0
  28. data/{example → examples}/todos/config.ru +3 -1
  29. data/examples/todos/index.html.erb +20 -0
  30. data/{example → examples}/todos/spec/todo_spec.rb +0 -0
  31. data/{example → examples}/todos/vendor/base.css +0 -0
  32. data/{example → examples}/todos/vendor/bg.png +0 -0
  33. data/{example → examples}/todos/vendor/jquery.js +0 -0
  34. data/lib/react/api.rb +4 -1
  35. data/lib/react/element.rb +1 -1
  36. data/lib/react/ext/jsx_support.rb +15 -10
  37. data/lib/react/version.rb +1 -1
  38. data/react.rb.gemspec +3 -2
  39. data/spec/react_spec.rb +10 -0
  40. data/spec/vendor/es5-shim.min.js +0 -1
  41. metadata +57 -35
  42. data/example/basic-jsx/config.ru +0 -38
  43. data/example/todos/Gemfile +0 -11
  44. data/example/todos/Gemfile.lock +0 -80
  45. data/example/todos/index.html.haml +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e4cddc83717656a698ffd3f4acbc266b1f7fa5bd
4
- data.tar.gz: 2ae5ac8b71ab4d214740c0b95389f7244149191b
3
+ metadata.gz: 32d54ccf85fe948f2a0c3ac70fa16290d05f5f40
4
+ data.tar.gz: 72b6d263a3cec35a258cf6a2c41a7851a034269d
5
5
  SHA512:
6
- metadata.gz: 7bc5c7de87c02cc533d106969eb7b2956866747fc2cd68256701a83647125c224bc855c7fc683eb25eb86804b0020d1ff740f51d08068693355e035d101e37da
7
- data.tar.gz: fda50d726f8f4a82b3812999f96485589871cf18b53f40582b809873bd001c023f64ebdcb09ff8c3aeb11bb5dfc29e0a9e4e9d8fb6dd4ac88a89a7f1f69f0eda
6
+ metadata.gz: 6a023c8bd9fbe0b509e6ae14d50394ccd46e99d4682a646b9b17bb22b257f05fa2eee2d18003921786dd18fbbb76e2233234fc9ce539c8616a07899c23fcc77e
7
+ data.tar.gz: 2e3e7c01ac8390d6f087900f3a2f0ab521902331ee961a297481056b7a214eb0963e34088e9528f90af6da888b30b20d096f88b9e04c059d758fad04569373b7
@@ -1,3 +1,10 @@
1
+ ## 0.3.0
2
+ * Depends on `sprockets < 3` thus source map can still work
3
+ * Remove sprockets-es6 from dependency
4
+ * Set `displayName` of component as the Ruby class name, which make it displayed better in [react-devtools](https://github.com/facebook/react-devtools)
5
+ * Fix React::Element bridging in React Native environment (#fba2daeb)
6
+ * React#create_element accept a native component constructor function
7
+
1
8
  ## 0.2.1
2
9
  * Depends on opal `~> 0.6.0`, which accidentally got loosen in previous release
3
10
 
@@ -4,19 +4,18 @@ PATH
4
4
  react.rb (0.2.1)
5
5
  opal (~> 0.6.0)
6
6
  opal-activesupport (~> 0)
7
- sprockets-es6 (~> 0)
7
+ react-jsx (~> 0.8.0)
8
+ sprockets (>= 2.2.3, < 3.0.0)
8
9
  therubyracer (~> 0)
9
10
 
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
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)
14
+ execjs (2.5.2)
15
+ hike (1.2.3)
18
16
  json (1.8.2)
19
17
  libv8 (3.16.14.7)
18
+ multi_json (1.11.0)
20
19
  opal (0.6.3)
21
20
  source_map
22
21
  sprockets
@@ -30,6 +29,10 @@ GEM
30
29
  rack-protection (1.5.3)
31
30
  rack
32
31
  rake (10.4.2)
32
+ react-jsx (0.8.0)
33
+ execjs (>= 2.0.2)
34
+ json (>= 1.8.0)
35
+ react-source (>= 0.4.1)
33
36
  react-source (0.12.2)
34
37
  ref (1.0.5)
35
38
  sinatra (1.4.6)
@@ -38,15 +41,15 @@ GEM
38
41
  tilt (>= 1.3, < 3)
39
42
  source_map (3.0.1)
40
43
  json
41
- sprockets (3.0.0.beta.10)
44
+ sprockets (2.12.3)
45
+ hike (~> 1.2)
46
+ multi_json (~> 1.0)
42
47
  rack (~> 1.0)
43
- sprockets-es6 (0.6.0)
44
- babel-transpiler
45
- sprockets (~> 3.0.0.beta)
46
- therubyracer (0.12.1)
48
+ tilt (~> 1.1, != 1.3.0)
49
+ therubyracer (0.12.2)
47
50
  libv8 (~> 3.16.14.0)
48
51
  ref
49
- tilt (2.0.1)
52
+ tilt (1.4.1)
50
53
 
51
54
  PLATFORMS
52
55
  ruby
@@ -55,6 +58,6 @@ DEPENDENCIES
55
58
  opal-jquery (~> 0)
56
59
  opal-rspec (~> 0.3.0.beta3)
57
60
  rake (~> 10)
58
- react-source (~> 0.12)
61
+ react-source (~> 0.12.0)
59
62
  react.rb!
60
63
  sinatra (~> 1)
data/README.md CHANGED
@@ -242,11 +242,14 @@ end
242
242
  * TodoMVC: see [example/todos](example/todos), your beloved TodoMVC <3.
243
243
  * JSX Example: see [example/basic-jsx](example/basic-jsx).
244
244
 
245
+ ## React Native
246
+
247
+ For [React Native](http://facebook.github.io/react-native/) support, please refer to [Opal Native](https://github.com/zetachang/opal-native).
248
+
245
249
  ## TODOS
246
250
 
247
251
  * Documentation
248
252
  * API wrapping coverage of the original js library (pretty close though)
249
- * React Native?
250
253
 
251
254
  ## Developing
252
255
 
File without changes
@@ -1,22 +1,21 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- react.rb (0.1.0)
4
+ react.rb (0.2.1)
5
5
  opal (~> 0.6.0)
6
- opal-activesupport
7
- sprockets-es6
8
- therubyracer
6
+ opal-activesupport (~> 0)
7
+ react-jsx (~> 0.8.0)
8
+ sprockets (>= 2.2.3, < 3.0.0)
9
+ therubyracer (~> 0)
9
10
 
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
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)
14
+ execjs (2.5.2)
15
+ hike (1.2.3)
18
16
  json (1.8.2)
19
17
  libv8 (3.16.14.7)
18
+ multi_json (1.11.0)
20
19
  opal (0.6.3)
21
20
  source_map
22
21
  sprockets
@@ -29,20 +28,24 @@ GEM
29
28
  rack (1.6.0)
30
29
  rack-protection (1.5.3)
31
30
  rack
32
- react-source (0.12.2)
31
+ react-jsx (0.8.0)
32
+ execjs (>= 2.0.2)
33
+ json (>= 1.8.0)
34
+ react-source (>= 0.4.1)
35
+ react-source (0.13.2)
33
36
  ref (1.0.5)
34
- sinatra (1.4.5)
37
+ sinatra (1.4.6)
35
38
  rack (~> 1.4)
36
39
  rack-protection (~> 1.4)
37
- tilt (~> 1.3, >= 1.3.4)
40
+ tilt (>= 1.3, < 3)
38
41
  source_map (3.0.1)
39
42
  json
40
- sprockets (3.0.0.beta.8)
43
+ sprockets (2.12.3)
44
+ hike (~> 1.2)
45
+ multi_json (~> 1.0)
41
46
  rack (~> 1.0)
42
- sprockets-es6 (0.6.0)
43
- babel-transpiler
44
- sprockets (~> 3.0.0.beta)
45
- therubyracer (0.12.1)
47
+ tilt (~> 1.1, != 1.3.0)
48
+ therubyracer (0.12.2)
46
49
  libv8 (~> 3.16.14.0)
47
50
  ref
48
51
  tilt (1.4.1)
@@ -0,0 +1,10 @@
1
+ require 'bundler'
2
+ Bundler.require
3
+
4
+ run Opal::Server.new {|s|
5
+ s.append_path './'
6
+ s.append_path File.dirname(::React::Source.bundled_path_for("react-with-addons.js"))
7
+ s.main = 'example'
8
+ s.index_path = 'index.html.erb'
9
+ s.debug = true
10
+ }
@@ -0,0 +1,11 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello React</title>
5
+ <%= javascript_include_tag 'react-with-addons.js' %>
6
+ </head>
7
+ <body>
8
+ <div id="container"></div>
9
+ <%= javascript_include_tag 'example' %>
10
+ </body>
11
+ </html>
@@ -1,22 +1,21 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- react.rb (0.1.0)
4
+ react.rb (0.2.1)
5
5
  opal (~> 0.6.0)
6
- opal-activesupport
7
- sprockets-es6
8
- therubyracer
6
+ opal-activesupport (~> 0)
7
+ react-jsx (~> 0.8.0)
8
+ sprockets (>= 2.2.3, < 3.0.0)
9
+ therubyracer (~> 0)
9
10
 
10
11
  GEM
11
12
  remote: https://rubygems.org/
12
13
  specs:
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)
14
+ execjs (2.5.2)
15
+ hike (1.2.3)
18
16
  json (1.8.2)
19
17
  libv8 (3.16.14.7)
18
+ multi_json (1.11.0)
20
19
  opal (0.6.3)
21
20
  source_map
22
21
  sprockets
@@ -27,7 +26,11 @@ GEM
27
26
  rack (1.6.0)
28
27
  rack-protection (1.5.3)
29
28
  rack
30
- react-source (0.13.1)
29
+ react-jsx (0.8.0)
30
+ execjs (>= 2.0.2)
31
+ json (>= 1.8.0)
32
+ react-source (>= 0.4.1)
33
+ react-source (0.13.2)
31
34
  ref (1.0.5)
32
35
  sinatra (1.4.6)
33
36
  rack (~> 1.4)
@@ -35,15 +38,15 @@ GEM
35
38
  tilt (>= 1.3, < 3)
36
39
  source_map (3.0.1)
37
40
  json
38
- sprockets (3.0.0.rc.1)
41
+ sprockets (2.12.3)
42
+ hike (~> 1.2)
43
+ multi_json (~> 1.0)
39
44
  rack (~> 1.0)
40
- sprockets-es6 (0.6.0)
41
- babel-transpiler
42
- sprockets (~> 3.0.0.beta)
43
- therubyracer (0.12.1)
45
+ tilt (~> 1.1, != 1.3.0)
46
+ therubyracer (0.12.2)
44
47
  libv8 (~> 3.16.14.0)
45
48
  ref
46
- tilt (2.0.1)
49
+ tilt (1.4.1)
47
50
 
48
51
  PLATFORMS
49
52
  ruby
@@ -4,13 +4,12 @@ Bundler.require
4
4
 
5
5
  require "react/source"
6
6
 
7
- Opal::Processor.source_map_enabled = true
8
-
9
7
  opal = Opal::Server.new {|s|
10
8
  s.append_path './'
11
9
  s.append_path File.dirname(::React::Source.bundled_path_for("react-with-addons.js"))
12
10
  s.main = 'example'
13
11
  s.debug = true
12
+ s.index_path = "index.html.erb"
14
13
  }
15
14
 
16
15
  map opal.source_maps.prefix do
@@ -33,23 +32,9 @@ post "/comments.json" do
33
32
  JSON.generate(comments)
34
33
  end
35
34
 
36
- get '/' do
37
- <<-HTML
38
- <!doctype html>
39
- <html>
40
- <head>
41
- <title>Hello React</title>
42
- <link rel="stylesheet" href="base.css" />
43
- <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
44
- <script src="http://cdnjs.cloudflare.com/ajax/libs/showdown/0.3.1/showdown.min.js"></script>
45
- <script src="/assets/react-with-addons.js"></script>
46
- <script src="/assets/example.js"></script>
47
- </head>
48
- <body>
49
- <div id="content"></div>
50
- </body>
51
- </html>
52
- HTML
35
+ map '/' do
36
+ # Sourcemap won't work if only `assets/example.js` is loaded
37
+ use Opal::Server::Index, opal
53
38
  end
54
39
 
55
40
  run Sinatra::Application
@@ -0,0 +1,14 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Hello React</title>
5
+ <link rel="stylesheet" href="base.css" />
6
+ <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
7
+ <script src="http://cdnjs.cloudflare.com/ajax/libs/showdown/0.3.1/showdown.min.js"></script>
8
+ <%= javascript_include_tag "react-with-addons.js" %>
9
+ <%= javascript_include_tag "example" %>
10
+ </head>
11
+ <body>
12
+ <div id="content"></div>
13
+ </body>
14
+ </html>
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'react.rb', :path => '../..'
4
+ gem 'rake'
5
+ gem 'vienna', :github => 'opal/vienna', :ref => '593335cbd7fb99ce471fa720e9b9c849d99b8dda'
6
+ gem 'opal-rspec', '0.3.0.beta3'
@@ -0,0 +1,65 @@
1
+ GIT
2
+ remote: git://github.com/opal/vienna.git
3
+ revision: 593335cbd7fb99ce471fa720e9b9c849d99b8dda
4
+ ref: 593335cbd7fb99ce471fa720e9b9c849d99b8dda
5
+ specs:
6
+ vienna (0.0.2)
7
+ opal (>= 0.5.0, < 1.0.0)
8
+ opal-activesupport
9
+ opal-jquery
10
+
11
+ PATH
12
+ remote: ../..
13
+ specs:
14
+ react.rb (0.2.1)
15
+ opal (~> 0.6.0)
16
+ opal-activesupport (~> 0)
17
+ react-jsx (~> 0.8.0)
18
+ sprockets (>= 2.2.3, < 3.0.0)
19
+ therubyracer (~> 0)
20
+
21
+ GEM
22
+ remote: https://rubygems.org/
23
+ specs:
24
+ execjs (2.5.2)
25
+ hike (1.2.3)
26
+ json (1.8.2)
27
+ libv8 (3.16.14.7)
28
+ multi_json (1.11.0)
29
+ opal (0.6.3)
30
+ source_map
31
+ sprockets
32
+ opal-activesupport (0.1.0)
33
+ opal (>= 0.5.0, < 1.0.0)
34
+ opal-jquery (0.2.0)
35
+ opal (>= 0.5.0, < 1.0.0)
36
+ opal-rspec (0.3.0.beta3)
37
+ opal (>= 0.6.0, < 1.0.0)
38
+ rack (1.6.0)
39
+ rake (10.4.2)
40
+ react-jsx (0.8.0)
41
+ execjs (>= 2.0.2)
42
+ json (>= 1.8.0)
43
+ react-source (>= 0.4.1)
44
+ react-source (0.13.2)
45
+ ref (1.0.5)
46
+ source_map (3.0.1)
47
+ json
48
+ sprockets (2.12.3)
49
+ hike (~> 1.2)
50
+ multi_json (~> 1.0)
51
+ rack (~> 1.0)
52
+ tilt (~> 1.1, != 1.3.0)
53
+ therubyracer (0.12.2)
54
+ libv8 (~> 3.16.14.0)
55
+ ref
56
+ tilt (1.4.1)
57
+
58
+ PLATFORMS
59
+ ruby
60
+
61
+ DEPENDENCIES
62
+ opal-rspec (= 0.3.0.beta3)
63
+ rake
64
+ react.rb!
65
+ vienna!
File without changes
File without changes
@@ -1,7 +1,6 @@
1
1
  require 'opal'
2
2
  require 'jquery'
3
3
  require 'opal-jquery'
4
- require 'opal-haml'
5
4
  require 'vienna'
6
5
  require "react"
7
6
 
@@ -11,7 +10,7 @@ require "components/app.react"
11
10
 
12
11
  Document.ready? do
13
12
  element = React.create_element(TodoAppView, filter: "all")
14
- component = React.render(element, Element.find('#todoapp').get(0))
13
+ component = React.render(element, `document.getElementById('todoapp')`)
15
14
 
16
15
  Vienna::Router.new.tap do |router|
17
16
  router.route('/:filter') do |params|
@@ -24,7 +24,8 @@ class TodoItem
24
24
  def render
25
25
  li(class_name: {editing: self.editing}) do
26
26
  div(class_name: 'view') do
27
- input(class_name: "toggle", type: "checkbox", checked: params[:todo].completed).on(:click) do
27
+ input(class_name: "toggle", type: "checkbox", checked: params[:todo].completed)
28
+ .on(:change) do |e|
28
29
  todo = params[:todo]
29
30
  todo.update(:completed => !todo.completed)
30
31
  end
@@ -3,6 +3,8 @@ Bundler.require
3
3
 
4
4
  require "react/source"
5
5
 
6
+ Opal::Processor.source_map_enabled = true
7
+
6
8
  run Opal::Server.new { |s|
7
9
  s.append_path 'app'
8
10
  s.append_path 'vendor'
@@ -10,5 +12,5 @@ run Opal::Server.new { |s|
10
12
 
11
13
  s.debug = true
12
14
  s.main = 'application'
13
- s.index_path = 'index.html.haml'
15
+ s.index_path = 'index.html.erb'
14
16
  }
@@ -0,0 +1,20 @@
1
+ <!DOCTYPE html>
2
+ <html lang='en'>
3
+ <head>
4
+ <meta charset='utf-8'>
5
+ <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'>
6
+ <link href='/vendor/base.css' rel='stylesheet'>
7
+ <%= javascript_include_tag 'react-with-addons.js' %>
8
+ <%= javascript_include_tag 'application' %>
9
+ </head>
10
+ <body>
11
+ <section id='todoapp'></section>
12
+ <div id='info'>
13
+ <p>Double-click to edit a todo</p>
14
+ <p>
15
+ Part of
16
+ <a href='http://todomvc.com'>TodoMVC</a>
17
+ </p>
18
+ </div>
19
+ </body>
20
+ </html>
@@ -6,7 +6,9 @@ module React
6
6
  params = []
7
7
 
8
8
  # Component Spec or Nomral DOM
9
- if type.kind_of?(Class)
9
+ if `(typeof type === 'function')`
10
+ params << type
11
+ elsif type.kind_of?(Class)
10
12
  raise "Provided class should define `render` method" if !(type.method_defined? :render)
11
13
  params << self.native_component_class(type)
12
14
  else
@@ -86,6 +88,7 @@ module React
86
88
  this.__opalInstance = instance;
87
89
  return instance;
88
90
  },
91
+ displayName: #{type.to_s},
89
92
  render: function() {
90
93
  var instance = this._getOpalInstance.apply(this);
91
94
  return instance.$render();
@@ -1,7 +1,7 @@
1
1
  require "./ext/string"
2
2
 
3
3
  module React
4
- class Element < `(function(){var f = new Function();f.prototype = Object.getPrototypeOf(React.createElement(''));return f})()`
4
+ class Element < `(function(){var r = React;var f = function(){};var c = r.createClass({render:function(){return null;}});f.prototype = Object.getPrototypeOf(r.createElement(c));return f;})()`
5
5
  def self.new
6
6
  raise "use React.create_element instead"
7
7
  end
@@ -1,16 +1,21 @@
1
- require "execjs"
1
+ require 'react/jsx'
2
+ require 'tilt'
2
3
  require "sprockets"
3
- require "sprockets/es6"
4
4
 
5
- module ExecJS
6
- class Runtime
7
- alias_method :orig_compile, :compile
8
- def compile(source)
9
- context = orig_compile("var console = {error: function(){}, log: function(){}, warn: function(){}, info: function(){}};" + source)
10
- context
5
+ module React
6
+ module JSX
7
+
8
+ class Template < Tilt::Template
9
+ self.default_mime_type = 'application/javascript'
10
+
11
+ def prepare
12
+ end
13
+
14
+ def evaluate(scope, locals, &block)
15
+ @output ||= React::JSX.compile(data)
16
+ end
11
17
  end
12
18
  end
13
19
  end
14
20
 
15
- Sprockets.register_mime_type 'text/jsx', extensions: ['.jsx']
16
- Sprockets.register_transformer 'text/jsx', 'application/javascript', Sprockets::ES6.new('whitelist' => ['react'])
21
+ Sprockets.register_engine '.jsx', React::JSX::Template
@@ -1,3 +1,3 @@
1
1
  module React
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -18,9 +18,10 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.add_runtime_dependency 'opal', '~> 0.6.0'
20
20
  s.add_runtime_dependency 'opal-activesupport', '~> 0'
21
- s.add_runtime_dependency 'sprockets-es6', '~> 0'
22
21
  s.add_runtime_dependency 'therubyracer', '~> 0'
23
- s.add_development_dependency 'react-source', '~> 0.12'
22
+ s.add_runtime_dependency 'react-jsx', '~> 0.8.0'
23
+ s.add_runtime_dependency 'sprockets', '>= 2.2.3', '< 3.0.0'
24
+ s.add_development_dependency 'react-source', '~> 0.12.0'
24
25
  s.add_development_dependency 'opal-rspec', '~> 0.3.0.beta3'
25
26
  s.add_development_dependency 'sinatra', '~> 1'
26
27
  s.add_development_dependency 'opal-jquery', '~> 0'
@@ -22,6 +22,16 @@ describe React do
22
22
  element = React.create_element('div')
23
23
  expect(React.is_valid_element(element)).to eq(true)
24
24
  end
25
+
26
+ it "should allow passed a React.Component class (constructor function)" do
27
+ hello_message = `React.createClass({displayName: "HelloMessage",
28
+ render: function() {
29
+ return React.createElement("div", null, "Hello ", this.props.name);
30
+ }
31
+ });`
32
+ element = React.create_element(hello_message, name: "David")
33
+ expect(React.render_to_static_markup(element)).to eq('<div>Hello David</div>')
34
+ end
25
35
 
26
36
  context "with block" do
27
37
  it "should create a valid element with text as only child when block yield String" do
@@ -4,4 +4,3 @@
4
4
  * see https://github.com/es-shims/es5-shim/blob/v4.1.0/LICENSE
5
5
  */
6
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.2.1
4
+ version: 0.3.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-04-03 00:00:00.000000000 Z
11
+ date: 2015-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: sprockets-es6
42
+ name: therubyracer
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
@@ -53,33 +53,53 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: therubyracer
56
+ name: react-jsx
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.8.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
- version: '0'
68
+ version: 0.8.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: sprockets
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 2.2.3
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: 3.0.0
79
+ type: :runtime
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: 2.2.3
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: 3.0.0
69
89
  - !ruby/object:Gem::Dependency
70
90
  name: react-source
71
91
  requirement: !ruby/object:Gem::Requirement
72
92
  requirements:
73
93
  - - "~>"
74
94
  - !ruby/object:Gem::Version
75
- version: '0.12'
95
+ version: 0.12.0
76
96
  type: :development
77
97
  prerelease: false
78
98
  version_requirements: !ruby/object:Gem::Requirement
79
99
  requirements:
80
100
  - - "~>"
81
101
  - !ruby/object:Gem::Version
82
- version: '0.12'
102
+ version: 0.12.0
83
103
  - !ruby/object:Gem::Dependency
84
104
  name: opal-rspec
85
105
  requirement: !ruby/object:Gem::Requirement
@@ -152,33 +172,35 @@ files:
152
172
  - README.md
153
173
  - Rakefile
154
174
  - config.ru
155
- - example/basic-jsx/Gemfile
156
- - example/basic-jsx/Gemfile.lock
157
- - example/basic-jsx/config.ru
158
- - example/basic-jsx/example.jsx.rb
159
- - example/react-tutorial/Gemfile
160
- - example/react-tutorial/Gemfile.lock
161
- - example/react-tutorial/README.md
162
- - example/react-tutorial/_comments.json
163
- - example/react-tutorial/config.ru
164
- - example/react-tutorial/example.rb
165
- - example/react-tutorial/public/base.css
166
- - example/todos/Gemfile
167
- - example/todos/Gemfile.lock
168
- - example/todos/README.md
169
- - example/todos/Rakefile
170
- - example/todos/app/application.rb
171
- - example/todos/app/components/app.react.rb
172
- - example/todos/app/components/footer.react.rb
173
- - example/todos/app/components/todo_item.react.rb
174
- - example/todos/app/components/todo_list.react.rb
175
- - example/todos/app/models/todo.rb
176
- - example/todos/config.ru
177
- - example/todos/index.html.haml
178
- - example/todos/spec/todo_spec.rb
179
- - example/todos/vendor/base.css
180
- - example/todos/vendor/bg.png
181
- - example/todos/vendor/jquery.js
175
+ - examples/basic-jsx/Gemfile
176
+ - examples/basic-jsx/Gemfile.lock
177
+ - examples/basic-jsx/config.ru
178
+ - examples/basic-jsx/example.jsx.rb
179
+ - examples/basic-jsx/index.html.erb
180
+ - examples/react-tutorial/Gemfile
181
+ - examples/react-tutorial/Gemfile.lock
182
+ - examples/react-tutorial/README.md
183
+ - examples/react-tutorial/_comments.json
184
+ - examples/react-tutorial/config.ru
185
+ - examples/react-tutorial/example.rb
186
+ - examples/react-tutorial/index.html.erb
187
+ - examples/react-tutorial/public/base.css
188
+ - examples/todos/Gemfile
189
+ - examples/todos/Gemfile.lock
190
+ - examples/todos/README.md
191
+ - examples/todos/Rakefile
192
+ - examples/todos/app/application.rb
193
+ - examples/todos/app/components/app.react.rb
194
+ - examples/todos/app/components/footer.react.rb
195
+ - examples/todos/app/components/todo_item.react.rb
196
+ - examples/todos/app/components/todo_list.react.rb
197
+ - examples/todos/app/models/todo.rb
198
+ - examples/todos/config.ru
199
+ - examples/todos/index.html.erb
200
+ - examples/todos/spec/todo_spec.rb
201
+ - examples/todos/vendor/base.css
202
+ - examples/todos/vendor/bg.png
203
+ - examples/todos/vendor/jquery.js
182
204
  - lib/react.rb
183
205
  - lib/react/api.rb
184
206
  - lib/react/callbacks.rb
@@ -1,38 +0,0 @@
1
- # config.ru
2
- require 'bundler'
3
- Bundler.require
4
-
5
- Opal::Processor.source_map_enabled = true
6
-
7
- opal = Opal::Server.new {|s|
8
- s.append_path './'
9
- s.append_path File.dirname(::React::Source.bundled_path_for("react-with-addons.js"))
10
- s.main = 'example'
11
- s.debug = true
12
- }
13
-
14
- map opal.source_maps.prefix do
15
- run opal.source_maps
16
- end
17
-
18
- map '/assets' do
19
- run opal.sprockets
20
- end
21
-
22
- get '/' do
23
- <<-HTML
24
- <!doctype html>
25
- <html>
26
- <head>
27
- <title>Hello React</title>
28
- <script src="/assets/react-with-addons.js"></script>
29
- </head>
30
- <body>
31
- <div id="container"></div>
32
- <script src="/assets/example.js"></script>
33
- </body>
34
- </html>
35
- HTML
36
- end
37
-
38
- run Sinatra::Application
@@ -1,11 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rake'
4
- gem 'opal', :github => 'opal/opal', :ref => '85220f32136c74ac93f1cb721462324a3423cf44'
5
- gem 'opal-jquery', :github => 'opal/opal-jquery'
6
- gem 'vienna', :github => 'opal/vienna', :ref => '593335cbd7fb99ce471fa720e9b9c849d99b8dda'
7
- gem 'opal-haml', :github => 'opal/opal-haml'
8
- gem 'opal-rspec', '0.3.0.beta2'
9
- gem 'react.rb', '~> 0.0.2'
10
- gem 'thin'
11
- gem 'react-source'
@@ -1,80 +0,0 @@
1
- GIT
2
- remote: git://github.com/opal/opal-haml.git
3
- revision: 0bdd3eb53ec03d380e14440a94f779ed7c3741e1
4
- specs:
5
- opal-haml (0.2.0)
6
- haml
7
- opal (>= 0.5.0, < 1.0.0)
8
-
9
- GIT
10
- remote: git://github.com/opal/opal-jquery.git
11
- revision: 1814202085f168176231b877b2b7a967b75b0726
12
- specs:
13
- opal-jquery (0.1.2)
14
- opal (>= 0.5.0, < 1.0.0)
15
-
16
- GIT
17
- remote: git://github.com/opal/opal.git
18
- revision: 85220f32136c74ac93f1cb721462324a3423cf44
19
- ref: 85220f32136c74ac93f1cb721462324a3423cf44
20
- specs:
21
- opal (0.6.0)
22
- source_map
23
- sprockets
24
-
25
- GIT
26
- remote: git://github.com/opal/vienna.git
27
- revision: 593335cbd7fb99ce471fa720e9b9c849d99b8dda
28
- ref: 593335cbd7fb99ce471fa720e9b9c849d99b8dda
29
- specs:
30
- vienna (0.0.2)
31
- opal (>= 0.5.0, < 1.0.0)
32
- opal-activesupport
33
- opal-jquery
34
-
35
- GEM
36
- remote: https://rubygems.org/
37
- specs:
38
- daemons (1.1.9)
39
- eventmachine (1.0.3)
40
- haml (4.0.5)
41
- tilt
42
- hike (1.2.3)
43
- json (1.8.2)
44
- multi_json (1.10.1)
45
- opal-activesupport (0.1.0)
46
- opal (>= 0.5.0, < 1.0.0)
47
- opal-rspec (0.3.0.beta2)
48
- opal (>= 0.6.0, < 1.0.0)
49
- rack (1.5.2)
50
- rake (10.1.1)
51
- react-source (0.12.2)
52
- react.rb (0.0.2)
53
- opal (~> 0.6.0)
54
- opal-activesupport
55
- source_map (3.0.1)
56
- json
57
- sprockets (2.12.3)
58
- hike (~> 1.2)
59
- multi_json (~> 1.0)
60
- rack (~> 1.0)
61
- tilt (~> 1.1, != 1.3.0)
62
- thin (1.6.2)
63
- daemons (>= 1.0.9)
64
- eventmachine (>= 1.0.0)
65
- rack (>= 1.0.0)
66
- tilt (1.4.1)
67
-
68
- PLATFORMS
69
- ruby
70
-
71
- DEPENDENCIES
72
- opal!
73
- opal-haml!
74
- opal-jquery!
75
- opal-rspec (= 0.3.0.beta2)
76
- rake
77
- react-source
78
- react.rb (~> 0.0.2)
79
- thin
80
- vienna!
@@ -1,16 +0,0 @@
1
- !!!
2
- %html(lang="en")
3
- %head
4
- %meta(charset="utf-8")
5
- %meta(http-equiv="X-UA-Compatible" content="IE=edge,chrome=1")
6
- %link(rel="stylesheet" href="/vendor/base.css")
7
- = javascript_include_tag 'react-with-addons.js'
8
- = javascript_include_tag 'application'
9
-
10
- %body
11
- %section#todoapp
12
- #info
13
- %p Double-click to edit a todo
14
- %p
15
- Part of
16
- %a(href="http://todomvc.com") TodoMVC