class MagnetLink
Public Class Methods
new(link)
click to toggle source
# File lib/magnet_link.rb, line 2 def initialize(link) @parsed = parse_link link @parameters = [:xt, :tr, :dn, :kt] end
Public Instance Methods
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/magnet_link.rb, line 7 def method_missing(method, *args, &block) super unless @parameters.include? method find_values(method) end
respond_to_missing?(method)
click to toggle source
# File lib/magnet_link.rb, line 12 def respond_to_missing?(method) @parameters.include? method end
Private Instance Methods
find_values(parameter)
click to toggle source
# File lib/magnet_link.rb, line 18 def find_values(parameter) @parsed[parameter] end
normalize_value(parameter, value)
click to toggle source
# File lib/magnet_link.rb, line 22 def normalize_value(parameter, value) return value.split('+') if parameter == :kt return value end
parse_link(link)
click to toggle source
# File lib/magnet_link.rb, line 27 def parse_link(link) parsed = {} link.split('&').each do |chunk| match = chunk.match('(.{2})=(.+)') if match.nil? raise InvalidLink end parameter = match.captures[0].to_sym value = match.captures[1] parsed[parameter] = [] unless parsed[parameter] parsed[parameter].push normalize_value(parameter, value) end parsed.each_key { |key| parsed[key].flatten! } end