module EsriShapefile::ByteModel::ClassMethods
Public Instance Methods
field(name, number: nil, position:, type:, byte_order:)
click to toggle source
# File lib/esri_shapefile/byte_model.rb, line 17 def field(name, number: nil, position:, type:, byte_order:) attr_accessor name unless name == :unused fields << Field.new(name, position: position, type: type, byte_order: byte_order, number: number) end
fields()
click to toggle source
# File lib/esri_shapefile/byte_model.rb, line 22 def fields @fields ||= [] end
from_bytes(bytes)
click to toggle source
# File lib/esri_shapefile/byte_model.rb, line 26 def from_bytes(bytes) field_values = {} fields.reduce(0) do |offset, field| if !field.unused? unpack_format = field.unpack_format(field_values) field_value = bytes.unpack("@#{offset}#{unpack_format}") if field.type == :point field_value = field_value.each_slice(2).map do |x, y| point = Shapes::Point.new point.x = x point.y = y point end end field_values[field.name] = field.list? ? field_value : field_value.first end offset += field.bytesize(field_values) (offset < bytes.size) ? offset : break end field_values.reduce(self.new) do |model, (field, value)| model.send("#{field}=", value) model end end