Class: Handle::Field::HSAdmin

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

Instance Attribute Summary collapse

Attributes inherited from Base

#index, #perms, #ttl

Instance Method Summary collapse

Methods inherited from Base

#==, default_index, from_data, from_hash, from_string, #to_json, value_type

Constructor Details

#initialize(handle = nil) ⇒ HSAdmin

Returns a new instance of HSAdmin.



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

def initialize(handle=nil)
  super()
  @admin_handle = handle
  @admin_index = 300
  @admin_perms = Handle::Permissions.new(
    :add_handle, :delete_handle, :add_na, :delete_na, 
    :modify_values, :remove_values, :add_values, :read_values, 
    :modify_admin, :remove_admin, :add_admin, :list_handles, 
  )
  @admin_perms.bitmask = 0b111111111111
end

Instance Attribute Details

#admin_handleObject

Returns the value of attribute admin_handle.



7
8
9
# File 'lib/handle/field/admin.rb', line 7

def admin_handle
  @admin_handle
end

#admin_permsObject (readonly)

Returns the value of attribute admin_perms.



8
9
10
# File 'lib/handle/field/admin.rb', line 8

def admin_perms
  @admin_perms
end

Instance Method Details

#admin_index=(value) ⇒ Object



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

def admin_index=(value)
  @admin_index = value.to_i
end

#merge!(hash) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/handle/field/admin.rb', line 66

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

#to_hObject



48
49
50
51
52
53
54
55
56
# File 'lib/handle/field/admin.rb', line 48

def to_h
  result = super.merge({
    admin_handle: self.admin_handle,
    admin_index:  self.admin_index,
    admin_perms:  self.admin_perms.bitmask
  })
  result.delete(:value)
  result
end

#to_sObject



58
59
60
# File 'lib/handle/field/admin.rb', line 58

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

#valueObject



22
23
24
25
# File 'lib/handle/field/admin.rb', line 22

def value
  values = [self.admin_perms.bitmask, 0, 13, self.admin_handle, 0, self.admin_index]
  values.pack('nnnZ*cn')
end

#value=(bytes) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/handle/field/admin.rb', line 32

def value=(bytes)
  if bytes =~ /^([0-9]+):([01]+):(.+)$/
    self.admin_index = $1.to_i
    self.admin_perms.bitmask = $2.to_i(2)
    self.admin_handle = $3
  else
    if bytes =~ /^[0-9A-Fa-f]+$/
      bytes = bytes.scan(/../).map(&:hex).pack('C*')
    end
    values = bytes.unpack('nnnZ*cn')
    self.admin_perms.bitmask = values[0]
    self.admin_handle = values[3]
    self.admin_index = values[5] unless values[5].nil? or values[5] == 0
  end
end

#value_strObject



27
28
29
30
# File 'lib/handle/field/admin.rb', line 27

def value_str
  [self.admin_index,self.admin_perms.to_s,self.admin_handle].join(':')
  #value.bytes.collect { |b| '%2.2X' % b }.join('')
end