Module: Rumai::IXP::Struct
Overview
A serializable 9P2000 data structure.
Defined Under Namespace
Classes: ClassField, Field, Integer8Field, StringField
Instance Attribute Summary
-
- (Object) fields
readonly
Returns the value of attribute fields.
Class Method Summary
-
+ (Object) included(target)
Provides a convenient DSL (for defining fields) to all objects which include this module.
Instance Method Summary
-
- (Struct) initialize(field_values = {})
Allows field values to be initialized via the constructor.
-
- (Object) load_9p(stream)
Populates this object with information from the given 9P2000 byte stream.
-
- (Object) to_9p
Transforms this object into a string of 9P2000 bytes.
Instance Attribute Details
- (Object) fields (readonly)
Returns the value of attribute fields
46 47 48 |
# File 'lib/rumai/ixp/message.rb', line 46 def fields @fields end |
Class Method Details
+ (Object) included(target)
Provides a convenient DSL (for defining fields) to all objects which include this module.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/rumai/ixp/message.rb', line 80 def self.included target class << target ## # Returns a list of fields which compose this Struct. # def fields @fields ||= if superclass.respond_to? :fields superclass.fields.dup else [] end end ## # Defines a new field in this Struct. # # @param args # arguments for {Field.new} # def field name, format = nil, *args klass = Field.factory(format) field = klass.new(name.to_sym, format, *args) # register field as being part of this structure fields << field # provide accessor methods to field values self.class_eval <<-EOS def #{field.name} @values[#{field.name.inspect}] end def #{field.name}= value @values[#{field.name.inspect}] = value end EOS , __FILE__, __LINE__ field end ## # Creates a new instance of this class from the # given 9P2000 byte stream and returns the instance. # def from_9p stream, msg_class = self msg = msg_class.new msg.load_9p(stream) msg end end end |
Instance Method Details
- (Struct) initialize(field_values = {})
Allows field values to be initialized via the constructor.
54 55 56 57 |
# File 'lib/rumai/ixp/message.rb', line 54 def initialize field_values = {} @fields = self.class.fields @values = field_values end |
- (Object) load_9p(stream)
Populates this object with information from the given 9P2000 byte stream.
70 71 72 73 74 |
# File 'lib/rumai/ixp/message.rb', line 70 def load_9p stream @fields.each do |f| f.load_9p stream, @values end end |
- (Object) to_9p
Transforms this object into a string of 9P2000 bytes.
62 63 64 |
# File 'lib/rumai/ixp/message.rb', line 62 def to_9p @fields.inject([]) {|s,f| s << f.to_9p(@values) }.join end |