class React::Generators::InstallGenerator

Constants

WEBPACKER_SETUP_UJS

Public Instance Methods

create_directory() click to toggle source

Make an empty ‘components/` directory in the right place:

# File lib/generators/react/install_generator.rb, line 20
def create_directory
  components_dir = if webpacker?
    Pathname.new(javascript_dir).parent.to_s
  else
    javascript_dir
  end
  empty_directory File.join(components_dir, 'components')
  unless options[:skip_git]
    create_file File.join(components_dir, 'components/.keep')
  end
end
create_server_rendering() click to toggle source
# File lib/generators/react/install_generator.rb, line 41
def create_server_rendering
  if options[:skip_server_rendering]
    return
  elsif webpacker?
    ssr_manifest_path = File.join(javascript_dir, 'server_rendering.js')
    template('server_rendering_pack.js', ssr_manifest_path)
  else
    ssr_manifest_path = File.join(javascript_dir, 'server_rendering.js')
    template('server_rendering.js', ssr_manifest_path)
    initializer_path = 'config/initializers/react_server_rendering.rb'
    template('react_server_rendering.rb', initializer_path)
  end
end
setup_react() click to toggle source

Add requires, setup UJS

# File lib/generators/react/install_generator.rb, line 33
def setup_react
  if webpacker?
    setup_react_webpacker
  else
    setup_react_sprockets
  end
end

Private Instance Methods

javascript_dir() click to toggle source
# File lib/generators/react/install_generator.rb, line 61
def javascript_dir
  if webpacker?
    webpack_source_path
      .relative_path_from(::Rails.root)
      .to_s
  else
    'app/assets/javascripts'
  end
end
manifest() click to toggle source
# File lib/generators/react/install_generator.rb, line 71
def manifest
  Pathname.new(destination_root).join(javascript_dir, 'application.js')
end
setup_react_sprockets() click to toggle source
# File lib/generators/react/install_generator.rb, line 75
def setup_react_sprockets
  require_react = "//= require react\n//= require react_ujs\n//= require components\n"

  if manifest.exist?
    manifest_contents = File.read(manifest)

    if match = manifest_contents.match(/\/\/=\s+require\s+turbolinks\s+\n/)
      inject_into_file manifest, require_react, { after: match[0] }
    elsif match = manifest_contents.match(/\/\/=\s+require_tree[^\n]*/)
      inject_into_file manifest, require_react, { before: match[0] }
    else
      append_file manifest, require_react
    end
  else
    create_file manifest, require_react
  end

  components_js = "//= require_tree ./components\n"
  components_file = File.join(javascript_dir, 'components.js')
  create_file components_file, components_js
end
setup_react_webpacker() click to toggle source
# File lib/generators/react/install_generator.rb, line 104
def setup_react_webpacker
  `yarn add react_ujs`
  if manifest.exist?
    append_file(manifest, WEBPACKER_SETUP_UJS)
  else
    create_file(manifest, WEBPACKER_SETUP_UJS)
  end
end
webpack_source_path() click to toggle source
# File lib/generators/react/install_generator.rb, line 115
def webpack_source_path
  if Webpacker.respond_to?(:config)
    Webpacker.config.source_entry_path # Webpacker >3
  else
    Webpacker::Configuration.source_path.join(Webpacker::Configuration.entry_path) # Webpacker <3
  end
end
webpacker?() click to toggle source
# File lib/generators/react/install_generator.rb, line 57
def webpacker?
  !!defined?(Webpacker)
end