lib/net/ntlm/field_set.rb in rubyntlm-0.5.3 vs lib/net/ntlm/field_set.rb in rubyntlm-0.6.0

- old
+ new

@@ -1,129 +1,129 @@ -module Net - module NTLM - - # base class of data structure - class FieldSet - class << FieldSet - - # @macro string_security_buffer - # @method $1 - # @method $1= - # @return [String] - def string(name, opts) - add_field(name, Net::NTLM::String, opts) - end - - # @macro int16le_security_buffer - # @method $1 - # @method $1= - # @return [Int16LE] - def int16LE(name, opts) - add_field(name, Net::NTLM::Int16LE, opts) - end - - # @macro int32le_security_buffer - # @method $1 - # @method $1= - # @return [Int32LE] - def int32LE(name, opts) - add_field(name, Net::NTLM::Int32LE, opts) - end - - # @macro int64le_security_buffer - # @method $1 - # @method $1= - # @return [Int64] - def int64LE(name, opts) - add_field(name, Net::NTLM::Int64LE, opts) - end - - # @macro security_buffer - # @method $1 - # @method $1= - # @return [SecurityBuffer] - def security_buffer(name, opts) - add_field(name, Net::NTLM::SecurityBuffer, opts) - end - - def prototypes - @proto - end - - def names - return [] if @proto.nil? - @proto.map{|n, t, o| n} - end - - def types - return [] if @proto.nil? - @proto.map{|n, t, o| t} - end - - def opts - return [] if @proto.nil? - @proto.map{|n, t, o| o} - end - - private - - def add_field(name, type, opts) - (@proto ||= []).push [name, type, opts] - define_accessor name - end - - def define_accessor(name) - module_eval(<<-End, __FILE__, __LINE__ + 1) - def #{name} - self['#{name}'].value - end - - def #{name}=(val) - self['#{name}'].value = val - end - End - end - end - - def initialize - @alist = self.class.prototypes.map{ |n, t, o| [n, t.new(o)] } - end - - def parse(str, offset=0) - @alist.inject(offset){|cur, a| cur += a[1].parse(str, cur)} - end - - def serialize - @alist.map{|n, f| f.serialize }.join - end - - def size - @alist.inject(0){|sum, a| sum += a[1].size} - end - - def [](name) - a = @alist.assoc(name.to_s.intern) - raise ArgumentError, "no such field: #{name}" unless a - a[1] - end - - def []=(name, val) - a = @alist.assoc(name.to_s.intern) - raise ArgumentError, "no such field: #{name}" unless a - a[1] = val - end - - def enable(name) - self[name].active = true - end - - def disable(name) - self[name].active = false - end - - def has_disabled_fields? - @alist.any? { |name, field| !field.active } - end - end - - end -end +module Net + module NTLM + + # base class of data structure + class FieldSet + class << FieldSet + + # @macro string_security_buffer + # @method $1 + # @method $1= + # @return [String] + def string(name, opts) + add_field(name, Net::NTLM::String, opts) + end + + # @macro int16le_security_buffer + # @method $1 + # @method $1= + # @return [Int16LE] + def int16LE(name, opts) + add_field(name, Net::NTLM::Int16LE, opts) + end + + # @macro int32le_security_buffer + # @method $1 + # @method $1= + # @return [Int32LE] + def int32LE(name, opts) + add_field(name, Net::NTLM::Int32LE, opts) + end + + # @macro int64le_security_buffer + # @method $1 + # @method $1= + # @return [Int64] + def int64LE(name, opts) + add_field(name, Net::NTLM::Int64LE, opts) + end + + # @macro security_buffer + # @method $1 + # @method $1= + # @return [SecurityBuffer] + def security_buffer(name, opts) + add_field(name, Net::NTLM::SecurityBuffer, opts) + end + + def prototypes + @proto + end + + def names + return [] if @proto.nil? + @proto.map{|n, t, o| n} + end + + def types + return [] if @proto.nil? + @proto.map{|n, t, o| t} + end + + def opts + return [] if @proto.nil? + @proto.map{|n, t, o| o} + end + + private + + def add_field(name, type, opts) + (@proto ||= []).push [name, type, opts] + define_accessor name + end + + def define_accessor(name) + module_eval(<<-End, __FILE__, __LINE__ + 1) + def #{name} + self['#{name}'].value + end + + def #{name}=(val) + self['#{name}'].value = val + end + End + end + end + + def initialize + @alist = self.class.prototypes.map{ |n, t, o| [n, t.new(o)] } + end + + def parse(str, offset=0) + @alist.inject(offset){|cur, a| cur += a[1].parse(str, cur)} + end + + def serialize + @alist.map{|n, f| f.serialize }.join + end + + def size + @alist.inject(0){|sum, a| sum += a[1].size} + end + + def [](name) + a = @alist.assoc(name.to_s.intern) + raise ArgumentError, "no such field: #{name}" unless a + a[1] + end + + def []=(name, val) + a = @alist.assoc(name.to_s.intern) + raise ArgumentError, "no such field: #{name}" unless a + a[1] = val + end + + def enable(name) + self[name].active = true + end + + def disable(name) + self[name].active = false + end + + def has_disabled_fields? + @alist.any? { |name, field| !field.active } + end + end + + end +end