Class: Importmap::Packager

Inherits:
Object
  • Object
show all
Defined in:
lib/importmap/packager.rb

Constant Summary collapse

PIN_REGEX =

:nodoc:

/#{Importmap::Map::PIN_REGEX}(.*)/.freeze
PRELOAD_OPTION_REGEXP =

:nodoc:

/preload:\s*(\[[^\]]+\]|true|false|["'][^"']*["'])/.freeze
Error =
Class.new(StandardError)
HTTPError =
Class.new(Error)
ServiceError =
Error.new(Error)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(importmap_path = "config/importmap.rb", vendor_path: "vendor/javascript") ⇒ Packager

Returns a new instance of Packager.



18
19
20
21
# File 'lib/importmap/packager.rb', line 18

def initialize(importmap_path = "config/importmap.rb", vendor_path: "vendor/javascript")
  @importmap_path = Pathname.new(importmap_path)
  @vendor_path    = Pathname.new(vendor_path)
end

Instance Attribute Details

#endpointObject

Returns the value of attribute endpoint.



13
14
15
# File 'lib/importmap/packager.rb', line 13

def endpoint
  @endpoint
end

#vendor_pathObject (readonly)

Returns the value of attribute vendor_path.



16
17
18
# File 'lib/importmap/packager.rb', line 16

def vendor_path
  @vendor_path
end

Instance Method Details

#download(package, url) ⇒ Object



60
61
62
63
64
# File 'lib/importmap/packager.rb', line 60

def download(package, url)
  ensure_vendor_directory_exists
  remove_existing_package_file(package)
  download_package_file(package, url)
end

#extract_existing_pin_options(packages) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/importmap/packager.rb', line 71

def extract_existing_pin_options(packages)
  return {} unless @importmap_path.exist?

  packages = Array(packages)

  all_package_options = build_package_options_lookup(importmap.lines)

  packages.to_h do |package|
    [package, all_package_options[package] || {}]
  end
end

#import(*packages, env: "production", from: "jspm") ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/importmap/packager.rb', line 23

def import(*packages, env: "production", from: "jspm")
  response = post_json({
    "install"      => Array(packages),
    "flattenScope" => true,
    "env"          => [ "browser", "module", env ],
    "provider"     => normalize_provider(from),
  })

  case response.code
  when "200"
    extract_parsed_response(response)
  when "404", "401"
    nil
  else
    handle_failure_response(response)
  end
end

#packaged?(package) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/importmap/packager.rb', line 56

def packaged?(package)
  importmap.match(Importmap::Map.pin_line_regexp_for(package))
end

#pin_for(package, url = nil, preloads: nil) ⇒ Object



41
42
43
44
45
46
# File 'lib/importmap/packager.rb', line 41

def pin_for(package, url = nil, preloads: nil)
  to = url ? %(, to: "#{url}") : ""
  preload_param = preload(preloads)

   %(pin "#{package}") + to + preload_param
end

#remove(package) ⇒ Object



66
67
68
69
# File 'lib/importmap/packager.rb', line 66

def remove(package)
  remove_existing_package_file(package)
  remove_package_from_importmap(package)
end

#vendored_pin_for(package, url, preloads = nil) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/importmap/packager.rb', line 48

def vendored_pin_for(package, url, preloads = nil)
  filename = package_filename(package)
  version  = extract_package_version_from(url)
  to = "#{package}.js" != filename ? filename : nil

  pin_for(package, to, preloads: preloads) + %( # #{version})
end