48 lines
1.2 KiB
Ruby
48 lines
1.2 KiB
Ruby
require 'multi_json'
|
|
require 'cdnjs_rails/railtie' if defined? Rails
|
|
|
|
module CdnjsRails
|
|
URL_TEMPLATE = '%s//cdnjs.cloudflare.com/ajax/libs/%s/%s/%s'
|
|
|
|
def package_url name, options = {}
|
|
package = packages[name]
|
|
raise UnknownPackageError.new(name) if package.nil?
|
|
|
|
version = options[:version] || options[:ver] || options[:v]
|
|
version = package['latest_version'] if version.nil? || version == 'latest'
|
|
unless package['versions'].include?(version)
|
|
raise UnknownPackageVersionError.new(name, version)
|
|
end
|
|
|
|
protocol = options[:protocol] || options[:proto]
|
|
protocol = "#{protocol}:" unless protocol.nil?
|
|
|
|
URL_TEMPLATE % [protocol.to_s, name, version, package['filename']]
|
|
end
|
|
|
|
private
|
|
|
|
def packages
|
|
@packages ||= MultiJson.load(packages_json)
|
|
end
|
|
|
|
def packages_json
|
|
path = File.expand_path('../../data/packages.json', __FILE__)
|
|
File.open(path).read
|
|
end
|
|
|
|
extend self
|
|
|
|
class UnknownPackageError < ::Exception
|
|
def initialize name
|
|
super "Unknown package: #{name}"
|
|
end
|
|
end
|
|
|
|
class UnknownPackageVersionError < ::Exception
|
|
def initialize name, version
|
|
super "Unknown #{name} version: #{version}"
|
|
end
|
|
end
|
|
end
|