Class: Handle::Field::Base
- Inherits:
-
Object
- Object
- Handle::Field::Base
show all
- Defined in:
- lib/handle/field.rb
Constant Summary
collapse
- @@value_types =
{}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize ⇒ Base
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
#index ⇒ Object
Returns the value of attribute index.
5
6
7
|
# File 'lib/handle/field.rb', line 5
def index
@index
end
|
#perms ⇒ Object
Returns the value of attribute perms.
5
6
7
|
# File 'lib/handle/field.rb', line 5
def perms
@perms
end
|
#ttl ⇒ Object
Returns the value of attribute ttl.
5
6
7
|
# File 'lib/handle/field.rb', line 5
def ttl
@ttl
end
|
#value ⇒ Object
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_h ⇒ Object
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_s ⇒ Object
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_str ⇒ Object
110
111
112
|
# File 'lib/handle/field.rb', line 110
def value_str
value.to_s
end
|