reactrb-rails-generator 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/generators/reactrb/component_generator.rb +20 -0
- data/lib/generators/reactrb/install_generator.rb +94 -0
- data/lib/generators/reactrb/router_generator.rb +19 -0
- data/lib/generators/reactrb/templates/component_template.rb +41 -0
- data/lib/generators/reactrb/templates/router_template.rb +44 -0
- data/lib/reactrb-rails-generator.rb +4 -0
- metadata +63 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8b0bf20d67944415396dd2058f4ecca1e12e4568
|
4
|
+
data.tar.gz: 5f64d143a2c040cc454bf97eb27d7420411948bc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aa0ad96979e6db5740a2d713b92b3637eab1ad0261fa700563d98bbd43870dbfb7a252ab2c830277b763c6c0d7c73061c23e8c1f0abe617ccbb047a41bec05a7
|
7
|
+
data.tar.gz: 8243ade5a8a86c74ded42d21e6434aca58c4d4e945a180ead79eb6c8d84cb3df32d51b50c2f518a6f8e8665555ceeb395f8e0c66419cb6770a5c5484df6929e3
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
module Reactrb
|
3
|
+
class Component < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
argument :components, type: :array
|
7
|
+
def create_component_file
|
8
|
+
self.components.each do |component|
|
9
|
+
component_array = component.split('::')
|
10
|
+
@modules = component_array[0..-2]
|
11
|
+
@file_name = component_array.last
|
12
|
+
@indet = 1
|
13
|
+
template 'component_template.rb',
|
14
|
+
File.join('app/views/components',
|
15
|
+
@modules.map(&:downcase).join('/'),
|
16
|
+
"#{@file_name.underscore}.rb")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
module Reactrb
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
class_option :'reactive-record', type: :boolean
|
5
|
+
class_option :'opal-jquery', type: :boolean
|
6
|
+
class_option :'reactrb-router', type: :boolean
|
7
|
+
class_option :all, type: :boolean
|
8
|
+
|
9
|
+
def inject_react_file_js
|
10
|
+
inject_into_file 'app/assets/javascripts/application.js',
|
11
|
+
after: "// about supported directives.\n" do
|
12
|
+
<<-'JS'
|
13
|
+
//= require 'components'
|
14
|
+
//= require 'react_ujs'
|
15
|
+
JS
|
16
|
+
end
|
17
|
+
inject_into_file 'app/assets/javascripts/application.js',
|
18
|
+
after: "//= require jquery_ujs\n" do
|
19
|
+
<<-'JS'
|
20
|
+
Opal.load('components');
|
21
|
+
JS
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def inject_engine_to_routes
|
26
|
+
if options[:'reactive-record'] || options[:all]
|
27
|
+
route 'mount ReactiveRecord::Engine => \'/rr\''
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def create_components_directory
|
32
|
+
create_file 'app/views/components/.keep', ''
|
33
|
+
if options[:'reactive-record'] || options[:all]
|
34
|
+
create_file 'app/models/public/.keep', ''
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def create_manifests
|
39
|
+
create_file 'app/views/components.rb', <<-FILE
|
40
|
+
# app/views/components.rb
|
41
|
+
require 'opal'
|
42
|
+
require 'react'
|
43
|
+
require 'reactrb'
|
44
|
+
if React::IsomorphicHelpers.on_opal_client?
|
45
|
+
require 'opal-jquery'
|
46
|
+
require 'browser'
|
47
|
+
require 'browser/interval'
|
48
|
+
require 'browser/delay'
|
49
|
+
# add any additional requires that can ONLY run on client here
|
50
|
+
end
|
51
|
+
#{"require 'reactrb-router'\nrequire 'react_router'" if options[:'reactive-router'] || options[:all]}
|
52
|
+
#{'require \'reactive-record\'' if options[:'reactive-record'] || options[:all]}
|
53
|
+
#{'require \'models\'' if options[:'reactive-record'] || options[:all]}
|
54
|
+
require_tree './components'
|
55
|
+
FILE
|
56
|
+
|
57
|
+
if options[:'reactive-record'] || options[:all]
|
58
|
+
create_file 'app/models/models.rb', <<-FILE
|
59
|
+
# app/models/models.rb
|
60
|
+
require_tree './public'
|
61
|
+
FILE
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def add_config
|
66
|
+
application 'config.assets.paths << ::Rails.root.join(\'app\', \'models\').to_s'
|
67
|
+
application 'config.autoload_paths += %W(#{config.root}/app/views/components)'
|
68
|
+
if options[:'reactive-record'] || options[:all]
|
69
|
+
application 'config.autoload_paths += %W(#{config.root}/app/models/public)'
|
70
|
+
end
|
71
|
+
application 'config.eager_load_paths += %W(#{config.root}/app/views/components)'
|
72
|
+
if options[:'reactive-record'] || options[:all]
|
73
|
+
application 'config.eager_load_paths += %W(#{config.root}/app/models/public)'
|
74
|
+
end
|
75
|
+
application 'config.watchable_files.concat Dir["#{config.root}/app/views/**/*.rb"]',
|
76
|
+
env: :development
|
77
|
+
application 'config.react.variant = :development', env: :development
|
78
|
+
end
|
79
|
+
|
80
|
+
def add_gems
|
81
|
+
gem 'reactrb'
|
82
|
+
gem 'react-rails', '>= 1.3.0'
|
83
|
+
gem 'opal-rails', '>= 0.8.1'
|
84
|
+
gem 'therubyracer', platforms: :ruby
|
85
|
+
|
86
|
+
# optional gems
|
87
|
+
if options[:'reactrb-router'] || options[:all]
|
88
|
+
gem 'react-router-rails', '~> 0.13.3'
|
89
|
+
gem 'reactrb-router'
|
90
|
+
end
|
91
|
+
gem 'reactive-record', '>= 0.8.0' if options[:'reactive-record'] || options[:all]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
module Reactrb
|
3
|
+
class Router < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
argument :components, type: :array
|
6
|
+
def create_component_file
|
7
|
+
self.components.each do |component|
|
8
|
+
component_array = component.split('::')
|
9
|
+
@modules = component_array[0..-2]
|
10
|
+
@file_name = component_array.last
|
11
|
+
@indet = 1
|
12
|
+
template 'router_template.rb',
|
13
|
+
File.join('app/views/components',
|
14
|
+
@modules.map(&:downcase).join('/'),
|
15
|
+
"#{@file_name.underscore}.rb")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Components
|
2
|
+
<%- @modules.each do |module_name| %><%= " "* @indet %>module <%= module_name.camelize %><%- @indet += 1 %>
|
3
|
+
<%- end %><%=" "* @indet %>class <%= @file_name %> < React::Component::Base
|
4
|
+
|
5
|
+
<%=" "* @indet %># param :my_param
|
6
|
+
<%=" "* @indet %># param param_with_default: "default value"
|
7
|
+
<%=" "* @indet %># param :param_with_default2, default: "default value" # alternative syntax
|
8
|
+
<%=" "* @indet %># param :param_with_type, type: Hash
|
9
|
+
<%=" "* @indet %># param :array_of_hashes, type: [Hash]
|
10
|
+
<%=" "* @indet %># collect_all_other_params_as :attributes #collects all other params into a hash
|
11
|
+
|
12
|
+
<%=" "* @indet %># The following are the most common lifecycle call backs,
|
13
|
+
<%=" "* @indet %># the following are the most common lifecycle call backs# delete any that you are not using.
|
14
|
+
<%=" "* @indet %># call backs may also reference an instance method i.e. before_mount :my_method
|
15
|
+
|
16
|
+
<%=" "* @indet %>before_mount do
|
17
|
+
<%=" "* @indet %> # any initialization particularly of state variables goes here.
|
18
|
+
<%=" "* @indet %> # this will execute on server (prerendering) and client.
|
19
|
+
<%=" "* @indet %>end
|
20
|
+
|
21
|
+
<%=" "* @indet %>after_mount do
|
22
|
+
<%=" "* @indet %> # any client only post rendering initialization goes here.
|
23
|
+
<%=" "* @indet %> # i.e. start timers, HTTP requests, and low level jquery operations etc.
|
24
|
+
<%=" "* @indet %>end
|
25
|
+
|
26
|
+
<%=" "* @indet %>before_update do
|
27
|
+
<%=" "* @indet %> # called whenever a component will be re-rerendered
|
28
|
+
<%=" "* @indet %>end
|
29
|
+
|
30
|
+
<%=" "* @indet %>before_unmount do
|
31
|
+
<%=" "* @indet %> # cleanup any thing (i.e. timers) before component is destroyed
|
32
|
+
<%=" "* @indet %>end
|
33
|
+
|
34
|
+
<%=" "* @indet %>def render
|
35
|
+
<%=" "* @indet %> div do
|
36
|
+
<%=" "* @indet %> "<%= (@modules+[@file_name]).join('::') %>"
|
37
|
+
<%=" "* @indet %> end
|
38
|
+
<%=" "* @indet %>end
|
39
|
+
<%=" "* @indet %>end
|
40
|
+
<%- @modules.each do %><%- @indet -= 1 %><%=" "* @indet %>end
|
41
|
+
<%- end %>end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Components
|
2
|
+
<%- @modules.each do |module_name| %><%= " "* @indet %>module <%= module_name.camelize %><%- @indet += 1 %>
|
3
|
+
<%- end %><%=" "* @indet %>class <%= @file_name %>
|
4
|
+
|
5
|
+
<%=" "* @indet %>include React::Router
|
6
|
+
|
7
|
+
<%=" "* @indet %>routes(path: "/") do # change path to be the base path
|
8
|
+
<%=" "* @indet %> # you will probably want to update your config/routes.rb file so that it matches all
|
9
|
+
<%=" "* @indet %> # subroutes: i.e. get '(*subroutes)' => "<%= (@modules.last || 'home').underscore %>#<%= @file_name.underscore %>"
|
10
|
+
<%=" "* @indet %> # basic route has:
|
11
|
+
<%=" "* @indet %> # a path
|
12
|
+
<%=" "* @indet %> # a name - used to reference the route in methods like redirect, and link)
|
13
|
+
<%=" "* @indet %> # a handler - the component that will be mounted on this route
|
14
|
+
<%=" "* @indet %> route(path: "subroute1-path", name: :subroute1, handler: Subroute1Component)
|
15
|
+
<%=" "* @indet %> route(path: "subroute2-path", name: :subroute2, handler: Subroute2Component)
|
16
|
+
<%=" "* @indet %> # routes can take parameters designated with a colon:
|
17
|
+
<%=" "* @indet %> route(path: "subroute3-path/:user_id", name: subroute3, handler: Subroute3Component)
|
18
|
+
<%=" "* @indet %> # the redirect method will transition any incoming matching routes to a new route
|
19
|
+
<%=" "* @indet %> redirect(from: "/", to: :subroute1)
|
20
|
+
<%=" "* @indet %> # the not_found method indicates which component to load if no route matches:
|
21
|
+
<%=" "* @indet %> not_found(handler: NotFound)
|
22
|
+
<%=" "* @indet %>end
|
23
|
+
|
24
|
+
<%=" "* @indet %>router_param :user_id, as: :user do |id|
|
25
|
+
<%=" "* @indet %> # Translate incoming route params to internal values.
|
26
|
+
<%=" "* @indet %> # In this case we will refer to the translated user_id as user.
|
27
|
+
<%=" "* @indet %> # The block param (id) will have the value of the param.
|
28
|
+
<%=" "* @indet %> # This is useful for looking up ActiveRecord models by ids, etc.
|
29
|
+
<%=" "* @indet %>end
|
30
|
+
|
31
|
+
<%=" "* @indet %>def show # note that the top level router has a show method NOT render
|
32
|
+
<%=" "* @indet %> div do
|
33
|
+
<%=" "* @indet %> # content to display on every route
|
34
|
+
<%=" "* @indet %> # link generates an anchor tag.
|
35
|
+
<%=" "* @indet %> link(to: :subroute3, params: {user_id: 12}, class: "link-class") { "Click to go to subroute3" }
|
36
|
+
<%=" "* @indet %> # within an event handler use transition_to to move to a new route
|
37
|
+
<%=" "* @indet %> # the route_handler method will display the current route, it can be called in the
|
38
|
+
<%=" "* @indet %> # router, or in some child component.
|
39
|
+
<%=" "* @indet %> route_handler
|
40
|
+
<%=" "* @indet %> end
|
41
|
+
<%=" "* @indet %>end
|
42
|
+
<%=" "* @indet %>end
|
43
|
+
<%- @modules.each do %><%- @indet -= 1 %><%=" "* @indet %>end
|
44
|
+
<%- end %>end
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: reactrb-rails-generator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Loic Boutet
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
27
|
+
description: This gem provide rails generators for reactrb
|
28
|
+
email: loic@boutet.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/generators/reactrb/component_generator.rb
|
34
|
+
- lib/generators/reactrb/install_generator.rb
|
35
|
+
- lib/generators/reactrb/router_generator.rb
|
36
|
+
- lib/generators/reactrb/templates/component_template.rb
|
37
|
+
- lib/generators/reactrb/templates/router_template.rb
|
38
|
+
- lib/reactrb-rails-generator.rb
|
39
|
+
homepage: https://github.com/reactrb/reactrb-rails-generator
|
40
|
+
licenses:
|
41
|
+
- MIT
|
42
|
+
metadata: {}
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubyforge_project:
|
59
|
+
rubygems_version: 2.5.1
|
60
|
+
signing_key:
|
61
|
+
specification_version: 4
|
62
|
+
summary: Reactrb generators for rails
|
63
|
+
test_files: []
|