Class: Riak::Link

Inherits:
Object show all
Includes:
Util::Escape, Util::Translation
Defined in:
lib/riak/link.rb

Overview

Represents a link from one object to another in Riak

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Util::Escape

#escape, #maybe_escape, #maybe_unescape, #unescape

Methods included from Util::Translation

#i18n_scope, #t

Constructor Details

#initialize(url, tag) ⇒ Link #initialize(bucket, key, tag) ⇒ Link

Returns a new instance of Link

Raises:

  • (ArgumentError)


45
46
47
48
49
50
51
52
# File 'lib/riak/link.rb', line 45

def initialize(*args)
  raise ArgumentError unless (2..3).include?(args.size)
  if args.size == 2
    self.url, @tag = args
  else
    @bucket, @key, @tag = args
  end
end

Instance Attribute Details

#bucketString



18
19
20
# File 'lib/riak/link.rb', line 18

def bucket
  @bucket
end

#keyString



21
22
23
# File 'lib/riak/link.rb', line 21

def key
  @key
end

#tagString Also known as: rel



13
14
15
# File 'lib/riak/link.rb', line 13

def tag
  @tag
end

Class Method Details

.parse(header_string) ⇒ Array<Link>



32
33
34
35
36
# File 'lib/riak/link.rb', line 32

def self.parse(header_string)
  header_string.scan(%r{<([^>]+)>\s*;\s*(?:rel|riaktag)=\"([^\"]+)\"}).map do |match|
    new(match[0], match[1])
  end
end

Instance Method Details

#==(other) ⇒ Object



85
86
87
# File 'lib/riak/link.rb', line 85

def ==(other)
  other.is_a?(Link) && url == other.url && tag == other.tag
end

#eql?(other) ⇒ Boolean



81
82
83
# File 'lib/riak/link.rb', line 81

def eql?(other)
  self == other
end

#hashObject



77
78
79
# File 'lib/riak/link.rb', line 77

def hash
  self.to_s.hash
end

#inspectObject



71
# File 'lib/riak/link.rb', line 71

def inspect; to_s; end

#to_s(new_scheme = false) ⇒ Object



73
74
75
# File 'lib/riak/link.rb', line 73

def to_s(new_scheme=false)
  %Q[<#{url(new_scheme)}>; riaktag="#{tag}"]
end

#to_walk_specObject



89
90
91
92
# File 'lib/riak/link.rb', line 89

def to_walk_spec
  raise t("bucket_link_conversion") if tag == "up" || key.nil?
  WalkSpec.new(:bucket => bucket, :tag => tag)
end

#url(new_scheme = false) ⇒ String



55
56
57
58
59
60
61
62
63
# File 'lib/riak/link.rb', line 55

def url(new_scheme=false)
  return @url unless @bucket

  if new_scheme
    "/buckets/#{escape(bucket)}" + (key.blank? ? "" : "/keys/#{escape(key)}")
  else
    "/riak/#{escape(bucket)}" + (key.blank? ? "" : "/#{escape(key)}")
  end
end

#url=(value) ⇒ Object



65
66
67
68
69
# File 'lib/riak/link.rb', line 65

def url=(value)
  @url = value
  @bucket = unescape($1) if value =~ %r{^/buckets/([^/]+)/?} || value =~ %r{^/[^/]+/([^/]+)/?}
  @key = unescape($1) if value =~ %r{^/buckets/[^/]+/keys/([^/]+)/?} || value =~ %r{^/[^/]+/[^/]+/([^/]+)/?}
end