class ShafClient::Link
Public Class Methods
from(data)
click to toggle source
# File lib/shaf_client/link.rb, line 5 def self.from(data) if data.is_a? Array data.map { |d| new(href: d['href'], templated: d['templated']) } else new(href: data['href'], templated: data['templated']) end end
new(href:, templated: false)
click to toggle source
# File lib/shaf_client/link.rb, line 13 def initialize(href:, templated: false) @href = href @templated = !!templated end
Public Instance Methods
href()
click to toggle source
# File lib/shaf_client/link.rb, line 22 def href @href.dup end
resolve_templated(**args)
click to toggle source
# File lib/shaf_client/link.rb, line 26 def resolve_templated(**args) return href unless templated? href .yield_self { |href| resolve_required(href, **args) } .yield_self { |href| resolve_optional(href, **args) } end
templated?()
click to toggle source
# File lib/shaf_client/link.rb, line 18 def templated? @templated end
to_h()
click to toggle source
# File lib/shaf_client/link.rb, line 34 def to_h { href: href, templated: templated? } end
Private Instance Methods
resolve_optional(href, **args)
click to toggle source
# File lib/shaf_client/link.rb, line 52 def resolve_optional(href, **args) String(href).gsub(/{\?([^}]*)}/) do values = [] $1.split(',').each do |key| next unless args.key? key.to_sym values << "#{key}=#{args[key.to_sym]}" end next '' if values.empty? "?#{values.join('&')}" end end
resolve_required(href, **args)
click to toggle source
# File lib/shaf_client/link.rb, line 43 def resolve_required(href, **args) String(href).gsub(/{(?!\?)([^}]*)}/) do key = $1.to_sym args.fetch key do raise ArgumentError, "missing keyword: :#{key}" end end end