lib/generators/serviceworker/install_generator.rb in serviceworker-rails-0.4.0 vs lib/generators/serviceworker/install_generator.rb in serviceworker-rails-0.5.1
- old
+ new
@@ -1,73 +1,85 @@
require "rails/generators"
+require "fileutils"
module Serviceworker
module Generators
class InstallGenerator < ::Rails::Generators::Base
desc "Make your Rails app a progressive web app"
source_root File.join(File.dirname(__FILE__), "templates")
def create_assets
- template "serviceworker.js",
- File.join(javascripts_base_dir, "serviceworker.js")
- template "serviceworker-companion.js",
- File.join(javascripts_base_dir, "serviceworker-companion.js")
- template "manifest.json",
- File.join(javascripts_base_dir, "manifest.json")
+ template "manifest.json", javascripts_dir("manifest.json.erb")
+ template "serviceworker.js", javascripts_dir("serviceworker.js.erb")
+ template "serviceworker-companion.js", javascripts_dir("serviceworker-companion.js")
end
def create_initializer
- template "serviceworker.rb",
- File.join(initializers_dir, "serviceworker.rb")
+ template "serviceworker.rb", initializers_dir("serviceworker.rb")
end
def update_application_js
ext, directive = detect_js_format
- append_to_file application_js_path(ext), "#{directive} require serviceworker-companion\n"
+ snippet = "#{directive} require serviceworker-companion\n"
+ append_to_file application_js_path(ext), snippet
end
def update_precompiled_assets
- append_to_file File.join(initializers_dir, "assets.rb"),
- "Rails.configuration.assets.precompile += %w[serviceworker.js]\n"
+ snippet = "Rails.configuration.assets.precompile += %w[serviceworker.js manifest.json]\n"
+ file_path = initializers_dir("assets.rb")
+ FileUtils.touch file_path
+ append_to_file file_path, snippet
end
def update_application_layout
- insert_into_file detect_layout,
- %(<link rel="manifest" href="/manifest.json" />),
- before: "</head>\n"
+ snippet = %(<link rel="manifest" href="/manifest.json" />)
+ snippet << %(\n<meta name="apple-mobile-web-app-capable" content="yes">)
+ insert_into_file detect_layout, snippet, before: "</head>\n"
end
+ def add_offline_html
+ template "offline.html", public_dir("offline.html")
+ end
+
private
def application_js_path(ext)
- File.join(javascripts_base_dir, "application#{ext}")
+ javascripts_dir("application#{ext}")
end
def detect_js_format
- %w[.coffee .coffee.erb .js.coffee .js.coffee.erb .js .js.erb].each do |ext|
- next unless File.exist?(File.join(javascripts_base_dir, "application#{ext}"))
+ %w[.js .js.erb .coffee .coffee.erb .js.coffee .js.coffee.erb].each do |ext|
+ next unless File.exist?(javascripts_dir("application#{ext}"))
return [ext, "#="] if ext.include?(".coffee")
return [ext, "//="]
end
end
def detect_layout
layouts = %w[.html.erb .html.haml .html.slim].map do |ext|
- File.join(layouts_base_dir, "application#{ext}")
+ layouts_dir("application#{ext}")
end
layouts.find { |layout| File.exist?(layout) }
end
- def javascripts_base_dir
- File.join("app", "assets", "javascripts")
+ def javascripts_dir(*paths)
+ join("app", "assets", "javascripts", *paths)
end
- def initializers_dir
- File.join("config", "initializers")
+ def initializers_dir(*paths)
+ join("config", "initializers", *paths)
end
- def layouts_base_dir
- File.join("app", "views", "layouts")
+ def layouts_dir(*paths)
+ join("app", "views", "layouts", *paths)
+ end
+
+ def public_dir(*paths)
+ join("public", *paths)
+ end
+
+ def join(*paths)
+ File.expand_path(File.join(*paths), destination_root)
end
end
end
end