Class: Handle::Field::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/handle/field.rb

Direct Known Subclasses

Email, HSAdmin, HSAlias, HSPubKey, HSSecKey, HSServ, HSSite, HSVList, URL, URN

Constant Summary collapse

@@value_types =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBase

Returns a new instance of Base.



62
63
64
65
66
# File 'lib/handle/field.rb', line 62

def initialize
  @index = self.class.default_index
  @ttl = 86400
  @perms = Handle::Permissions.new(:admin_read, :admin_write, :public_read, :public_write, 0b1110)
end

Instance Attribute Details

#indexObject

Returns the value of attribute index.



5
6
7
# File 'lib/handle/field.rb', line 5

def index
  @index
end

#permsObject (readonly)

Returns the value of attribute perms.



5
6
7
# File 'lib/handle/field.rb', line 5

def perms
  @perms
end

#ttlObject

Returns the value of attribute ttl.



5
6
7
# File 'lib/handle/field.rb', line 5

def ttl
  @ttl
end

#valueObject

Returns the value of attribute value.



4
5
6
# File 'lib/handle/field.rb', line 4

def value
  @value
end

Class Method Details

.default_index(val = nil) ⇒ Object



20
21
22
# File 'lib/handle/field.rb', line 20

def default_index val=nil
  val ? @default_index = val : @default_index
end

.from_data(data) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/handle/field.rb', line 53

def from_data(data)
  if data.is_a?(Hash)
    self.from_hash(data)
  else
    self.from_string(data.to_s)
  end
end

.from_hash(hash) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/handle/field.rb', line 24

def from_hash(hash)
  type = hash.values_at(:type,'type').compact.first
  if @@value_types.has_key? type
    klass = @@value_types[type]
    result = klass.new
    result.merge!(hash)
  end
end

.from_string(str) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/handle/field.rb', line 33

def from_string(str)
  attrs, perms, data = str.scan(/^\s*(.+) ([10rw\-]+) "(.+)"$/).flatten
  attrs = attrs.split(/\s+/).inject({}) { |hash,attr| 
    (k,v) = attr.split(/\=/,2) 
    hash[k.to_sym] = v
    hash
  }
  type = attrs.delete(:type)
  if @@value_types.has_key? type
    klass = @@value_types[type]
    result = klass.new
    result.merge!(attrs)
    result.perms.bitmask = perms.gsub(/./) { |m| m =~ /[0\-]/ ? '0' : '1' }.to_i(2)
    result.value = data
    result
  else
    nil
  end
end

.value_type(val = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'lib/handle/field.rb', line 9

def value_type val=nil
  if val
    if @value_type
      @@value_types.delete(@value_type)
    end
    @value_type = val
    @@value_types[val] = self
  end
  @value_type
end

Instance Method Details

#==(other) ⇒ Object



68
69
70
# File 'lib/handle/field.rb', line 68

def ==(other)
  self.to_s == other.to_s
end

#merge!(hash) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
# File 'lib/handle/field.rb', line 80

def merge!(hash)
  hash.each_pair do |key,value|
    k = key.to_sym
    value = value.to_i if [:perms,:index].include?(k)
    self.perms.bitmask = value if k == :perms
    if [:index, :ttl, :value].include? k
      self.send(:"#{k.to_s}=", value)
    end
  end
  self
end

#to_hObject



92
93
94
95
96
97
98
99
100
# File 'lib/handle/field.rb', line 92

def to_h
  {
    index: self.index,
    type:  self.class.value_type,
    ttl:   self.ttl,
    perms: self.perms.bitmask,
    value: self.value
  }
end

#to_json(*args) ⇒ Object



102
103
104
# File 'lib/handle/field.rb', line 102

def to_json *args
  self.to_h.to_json *args
end

#to_sObject



106
107
108
# File 'lib/handle/field.rb', line 106

def to_s
  " index=#{self.index} type=#{self.class.value_type} ttl=#{self.ttl} #{self.perms} #{self.value.inspect}"
end

#value_strObject



110
111
112
# File 'lib/handle/field.rb', line 110

def value_str
  value.to_s
end