module DataPackage::Helpers
Public Instance Methods
base_path(path_or_url)
click to toggle source
# File lib/datapackage/helpers.rb, line 53 def base_path(path_or_url) path_or_url = path_or_url.to_s if path_or_url.empty? nil elsif path_or_url =~ /\A#{URI::regexp}\z/ uri = URI.parse path_or_url return "#{uri.scheme}://#{uri.host}#{File.dirname uri.path}".chomp('/') else if File.directory?(path_or_url) return path_or_url else return File.expand_path File.dirname path_or_url end end end
dereference_descriptor(resource, base_path: nil, reference_fields: nil)
click to toggle source
Dereference a resource that can be a URL or path to a JSON file or a hash Returns a Hash with all values that are URLs or paths dereferenced
# File lib/datapackage/helpers.rb, line 6 def dereference_descriptor(resource, base_path: nil, reference_fields: nil) options = { base_path: base_path, reference_fields: reference_fields, } case resource when Hash resource.inject({}) do |new_resource, (key, val)| if reference_fields.nil? || reference_fields.include?(key) new_resource[key] = dereference_descriptor(val, **options) else new_resource[key] = val end new_resource end when Enumerable resource.map{ |el| dereference_descriptor(el, **options)} when String begin resolve_json_reference(resource, deep_dereference: true, base_path: base_path) rescue Errno::ENOENT resource end else resource end end
is_fully_qualified_url?(string)
click to toggle source
# File lib/datapackage/helpers.rb, line 83 def is_fully_qualified_url?(string) uri = URI.parse(string) uri.is_a?(URI::HTTP) && !uri.host.nil? rescue URI::InvalidURIError false end
is_safe_path?(string)
click to toggle source
# File lib/datapackage/helpers.rb, line 90 def is_safe_path?(string) path = Pathname.new(string) return false if path.absolute? return false unless /^\.+$/.match(path.to_s.split('/').first).nil? true end
join_paths(base_path, resource)
click to toggle source
# File lib/datapackage/helpers.rb, line 69 def join_paths(base_path, resource) if base_path.nil? || base_path.empty? resource elsif base_path =~ /\A#{URI::regexp}\z/ URI.join(base_path, resource).to_s elsif File.directory?(base_path) File.join(base_path, resource).to_s elsif File.file?(base_path) base_path else resource end end
load_json(reference)
click to toggle source
Load JSON from path or URL; Raises: Errno::ENOENT, OpenURI::HTTPError, SocketError, JSON::ParserError
# File lib/datapackage/helpers.rb, line 49 def load_json(reference) JSON.parse open(reference).read end
resolve_json_reference(reference, deep_dereference: false, base_path: nil)
click to toggle source
Resolve a reference to a JSON file; Returns the JSON as hash Raises JSON::ParserError, OpenURI::HTTPError, SocketError or TypeError for invalid references
# File lib/datapackage/helpers.rb, line 36 def resolve_json_reference(reference, deep_dereference: false, base_path: nil) # Try to extract JSON from file or webpage reference = join_paths(base_path, reference) resolved_reference = load_json(reference) if deep_dereference == true dereference_descriptor(resolved_reference, base_path: base_path) else resolved_reference end end