Class: ReactOnRails::Generators::BaseGenerator
- Inherits:
-
Rails::Generators::Base
- Object
- Rails::Generators::Base
- ReactOnRails::Generators::BaseGenerator
show all
- Includes:
- GeneratorHelper
- Defined in:
- lib/generators/react_on_rails/base_generator.rb
Overview
rubocop:disable Metrics/ClassLength
Instance Method Summary
collapse
#copy_file_and_missing_parent_directories, #dest_dir_exists?, #dest_file_exists?, #empty_directory_with_keep_file, #keep_file, #setup_file_error, #symlink_dest_file_to_dest_file
Instance Method Details
#add_base_gems_to_gemfile ⇒ Object
135
136
137
138
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 135
def add_base_gems_to_gemfile
return unless options.server_rendering?
append_to_file("Gemfile", "\ngem 'therubyracer', platforms: :ruby\n")
end
|
#add_hello_world_route ⇒ Object
44
45
46
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 44
def add_hello_world_route
route "get 'hello_world', to: 'hello_world#index'"
end
|
#append_to_assets_initializer ⇒ Object
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 164
def append_to_assets_initializer
data = <<-DATA.strip_heredoc
# Add client/assets/ folders to asset pipeline's search path.
# If you do not want to move existing images and fonts from your Rails app
# you could also consider creating symlinks there that point to the original
# rails directories. In that case, you would not add these paths here.
Rails.application.config.assets.paths << Rails.root.join("client", "assets", "stylesheets")
Rails.application.config.assets.paths << Rails.root.join("client", "assets", "images")
Rails.application.config.assets.paths << Rails.root.join("client", "assets", "fonts")
Rails.application.config.assets.precompile += %w( generated/server-bundle.js )
DATA
assets_intializer = File.join(destination_root, "config/initializers/assets.rb")
if File.exist?(assets_intializer)
append_to_file(assets_intializer, data)
else
create_file(assets_intializer, data)
end
end
|
#copy_base_files ⇒ Object
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 111
def copy_base_files
base_path = "base/base/"
%w(app/controllers/hello_world_controller.rb
config/initializers/react_on_rails.rb
client/.babelrc
client/index.jade
client/server.js
client/webpack.client.base.config.js
client/webpack.client.rails.config.js
REACT_ON_RAILS.md
client/REACT_ON_RAILS_CLIENT_README.md
package.json).each { |file| copy_file(base_path + file, file) }
end
|
#create_client_assets_directories ⇒ Object
48
49
50
51
52
53
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 48
def create_client_assets_directories
empty_directory("client/assets")
empty_directory("client/assets/stylesheets")
empty_directory_with_keep_file("client/assets/fonts")
empty_directory_with_keep_file("client/assets/images")
end
|
#create_react_directories ⇒ Object
106
107
108
109
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 106
def create_react_directories
dirs = %w(components containers startup)
dirs.each { |name| empty_directory("client/app/bundles/HelloWorld/#{name}") }
end
|
#force_application_scss_naming_if_necessary ⇒ Object
rename to application.scss from application.css or application.css.scss
184
185
186
187
188
189
190
191
192
193
194
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 184
def force_application_scss_naming_if_necessary
base_path = "app/assets/stylesheets/"
application_css = "#{base_path}application.css"
application_css_scss = "#{base_path}application.css.scss"
bad_name = dest_file_exists?(application_css) || dest_file_exists?(application_css_scss)
return unless bad_name
new_name = File.join(destination_root, "#{base_path}application.scss")
File.rename(bad_name, new_name)
end
|
#install_server_rendering_files_if_enabled ⇒ Object
146
147
148
149
150
151
152
153
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 146
def install_server_rendering_files_if_enabled
return unless options.server_rendering?
base_path = "base/server_rendering/"
%w(client/webpack.server.rails.config.js
client/app/bundles/HelloWorld/startup/serverRegistration.jsx).each do |file|
copy_file(base_path + file, file)
end
end
|
#strip_application_js_of_double_blank_lines ⇒ Object
101
102
103
104
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 101
def strip_application_js_of_double_blank_lines
application_js = File.join(destination_root, "app/assets/javascripts/application.js")
gsub_file(application_js, /^\n^\n/, "\n")
end
|
#strip_application_js_of_incompatible_sprockets_statements ⇒ Object
94
95
96
97
98
99
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 94
def strip_application_js_of_incompatible_sprockets_statements
application_js = File.join(destination_root, "app/assets/javascripts/application.js")
gsub_file(application_js, "//= require jquery_ujs", "// require jquery_ujs")
gsub_file(application_js, %r{//= require jquery$}, "// require jquery")
gsub_file(application_js, %r{//= require_tree \.$}, "// require_tree .")
end
|
#template_assets_rake_file ⇒ Object
160
161
162
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 160
def template_assets_rake_file
template("base/base/lib/tasks/assets.rake.tt", "lib/tasks/assets.rake")
end
|
#template_base_files ⇒ Object
125
126
127
128
129
130
131
132
133
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 125
def template_base_files
base_path = "base/base/"
%w(Procfile.dev
Procfile.dev-hot
app/views/hello_world/index.html.erb
client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx
client/webpack.client.hot.config.js
client/package.json).each { |file| template(base_path + file + ".tt", file) }
end
|
#template_client_registration_file ⇒ Object
140
141
142
143
144
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 140
def template_client_registration_file
filename = "clientRegistration.jsx"
location = "client/app/bundles/HelloWorld/startup"
template("base/base/#{location}/clientRegistration.jsx.tt", "#{location}/#{filename}")
end
|
#template_linter_files_if_appropriate ⇒ Object
155
156
157
158
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 155
def template_linter_files_if_appropriate
return if !options.ruby_linters? && options.skip_js_linters?
template("base/base/lib/tasks/linters.rake.tt", "lib/tasks/linters.rake")
end
|
#update_application_js ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 72
def update_application_js
data = <<-DATA.strip_heredoc
// DO NOT REQUIRE jQuery or jQuery-ujs in this file!
// DO NOT REQUIRE TREE!
// CRITICAL that generated/vendor-bundle must be BEFORE bootstrap-sprockets and turbolinks
// since it is exposing jQuery and jQuery-ujs
//= require generated/vendor-bundle
//= require generated/app-bundle
DATA
app_js_path = "app/assets/javascripts/application.js"
found_app_js = dest_file_exists?(app_js_path) || dest_file_exists?(app_js_path + ".coffee")
if found_app_js
prepend_to_file(found_app_js, data)
else
create_file(app_js_path, data)
end
end
|
#update_git_ignore ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/generators/react_on_rails/base_generator.rb', line 55
def update_git_ignore
data = <<-DATA.strip_heredoc
# React on Rails
npm-debug.log
node_modules
# Generated js bundles
/app/assets/javascripts/generated/*
DATA
if dest_file_exists?(".gitignore")
append_to_file(".gitignore", data)
else
GeneratorMessages.add_error(setup_file_error(".gitignore", data))
end
end
|