Module: CloudflareWorkers::BuildSupport
- Defined in:
- lib/cloudflare_workers/build_support.rb
Constant Summary collapse
- RUNTIME_GEM_NAME =
'homura-runtime'- SINATRA_GEM_NAME =
'sinatra-homura'
Class Method Summary collapse
- .ensure_standalone_runtime(project_root, current_file: __FILE__, loaded_specs: Gem.loaded_specs) ⇒ Object
- .gem_lib(name, loaded_specs: Gem.loaded_specs) ⇒ Object
- .gem_root(name, loaded_specs: Gem.loaded_specs) ⇒ Object
- .gem_vendor(name, loaded_specs: Gem.loaded_specs) ⇒ Object
- .loaded_spec(name, loaded_specs: Gem.loaded_specs) ⇒ Object
- .runtime_file(*names, current_file: __FILE__, loaded_specs: Gem.loaded_specs) ⇒ Object
- .runtime_root(current_file:, loaded_specs: Gem.loaded_specs) ⇒ Object
- .standalone_namespace(project_root, suffix) ⇒ Object
- .vendor_from_gemfile(project_root) ⇒ Object
Class Method Details
.ensure_standalone_runtime(project_root, current_file: __FILE__, loaded_specs: Gem.loaded_specs) ⇒ Object
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/cloudflare_workers/build_support.rb', line 45 def ensure_standalone_runtime(project_root, current_file: __FILE__, loaded_specs: Gem.loaded_specs) target_dir = Pathname(project_root).join('cf-runtime') FileUtils.mkdir_p(target_dir) %w[setup-node-crypto.mjs worker_module.mjs].each do |name| FileUtils.cp(runtime_file(name, current_file: current_file, loaded_specs: loaded_specs), target_dir.join(name)) end target_dir end |
.gem_lib(name, loaded_specs: Gem.loaded_specs) ⇒ Object
30 31 32 |
# File 'lib/cloudflare_workers/build_support.rb', line 30 def gem_lib(name, loaded_specs: Gem.loaded_specs) File.join(gem_root(name, loaded_specs: loaded_specs), 'lib') end |
.gem_root(name, loaded_specs: Gem.loaded_specs) ⇒ Object
16 17 18 19 20 21 |
# File 'lib/cloudflare_workers/build_support.rb', line 16 def gem_root(name, loaded_specs: Gem.loaded_specs) spec = loaded_spec(name, loaded_specs: loaded_specs) return spec.full_gem_path if spec raise("cloudflare-workers-build: gem #{name} not loaded; use bundle exec from app root") end |
.gem_vendor(name, loaded_specs: Gem.loaded_specs) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/cloudflare_workers/build_support.rb', line 34 def gem_vendor(name, loaded_specs: Gem.loaded_specs) vendor = File.join(gem_root(name, loaded_specs: loaded_specs), 'vendor') return vendor if Dir.exist?(vendor) nil end |
.loaded_spec(name, loaded_specs: Gem.loaded_specs) ⇒ Object
12 13 14 |
# File 'lib/cloudflare_workers/build_support.rb', line 12 def loaded_spec(name, loaded_specs: Gem.loaded_specs) loaded_specs[name] end |
.runtime_file(*names, current_file: __FILE__, loaded_specs: Gem.loaded_specs) ⇒ Object
41 42 43 |
# File 'lib/cloudflare_workers/build_support.rb', line 41 def runtime_file(*names, current_file: __FILE__, loaded_specs: Gem.loaded_specs) runtime_root(current_file: current_file, loaded_specs: loaded_specs).join('runtime', *names) end |
.runtime_root(current_file:, loaded_specs: Gem.loaded_specs) ⇒ Object
23 24 25 26 27 28 |
# File 'lib/cloudflare_workers/build_support.rb', line 23 def runtime_root(current_file:, loaded_specs: Gem.loaded_specs) spec = loaded_spec(RUNTIME_GEM_NAME, loaded_specs: loaded_specs) return Pathname(spec.full_gem_path) if spec Pathname(current_file)..join('../..') end |
.standalone_namespace(project_root, suffix) ⇒ Object
56 57 58 59 60 61 62 63 |
# File 'lib/cloudflare_workers/build_support.rb', line 56 def standalone_namespace(project_root, suffix) base = Pathname(project_root).basename.to_s parts = base.split(/[^A-Za-z0-9]+/).reject(&:empty?) module_name = parts.map { |part| part[0].upcase + part[1..].to_s }.join module_name = 'App' if module_name.empty? module_name = "App#{module_name}" if module_name.match?(/\A\d/) "#{module_name}#{suffix}" end |
.vendor_from_gemfile(project_root) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/cloudflare_workers/build_support.rb', line 65 def vendor_from_gemfile(project_root) gf = Pathname(project_root).join('Gemfile') return unless gf.file? txt = gf.read return unless (m = txt.match(/#{Regexp.escape(RUNTIME_GEM_NAME)}['"]\s*,\s*path:\s*['"]([^'"]+)['"]/)) runtime_path = Pathname.new(m[1]).(project_root) vend = runtime_path.join('..', '..', 'vendor'). vend if vend.directory? end |