class Importmap::Packager
Constants
- Error
- HTTPError
- ServiceError
Attributes
endpoint[RW]
Public Class Methods
new(importmap_path = "config/importmap.rb")
click to toggle source
# File lib/importmap/packager.rb, line 13 def initialize(importmap_path = "config/importmap.rb") @importmap_path = importmap_path end
Public Instance Methods
import(*packages, env: "production", from: "jspm")
click to toggle source
# File lib/importmap/packager.rb, line 17 def import(*packages, env: "production", from: "jspm") response = post_json({ "install" => Array(packages), "flattenScope" => true, "env" => [ "browser", "module", env ], "provider" => from.to_s, }) case response.code when "200" then extract_parsed_imports(response) when "404", "401" then nil else handle_failure_response(response) end end
packaged?(package)
click to toggle source
# File lib/importmap/packager.rb, line 36 def packaged?(package) importmap.match(/^pin "#{package}".*$/) end
pin_for(package, url)
click to toggle source
# File lib/importmap/packager.rb, line 32 def pin_for(package, url) %(pin "#{package}", to: "#{url}") end
Private Instance Methods
extract_parsed_imports(response)
click to toggle source
# File lib/importmap/packager.rb, line 41 def extract_parsed_imports(response) JSON.parse(response.body).dig("map", "imports") end
handle_failure_response(response)
click to toggle source
# File lib/importmap/packager.rb, line 45 def handle_failure_response(response) if error_message = parse_service_error(response) raise ServiceError, error_message else raise HTTPError, "Unexpected response code (#{response.code})" end end
importmap()
click to toggle source
# File lib/importmap/packager.rb, line 65 def importmap @importmap ||= File.read(@importmap_path) end
parse_service_error(response)
click to toggle source
# File lib/importmap/packager.rb, line 53 def parse_service_error(response) JSON.parse(response.body.to_s)["error"] rescue JSON::ParserError nil end
post_json(body)
click to toggle source
# File lib/importmap/packager.rb, line 59 def post_json(body) Net::HTTP.post(self.class.endpoint, body.to_json, { "Content-Type" => "application/json" }) rescue => error raise HTTPError, "Unexpected transport error (#{error.class}: #{error.message})" end