Sha256: 89fe85efbb32bc3d06c2b8420ec59ba663f5b5a56f3a51e1751cf12672bdb475
Contents?: true
Size: 1.84 KB
Versions: 3
Compression:
Stored size: 1.84 KB
Contents
# frozen_string_literal: true # List of object fields # # @attr_reader [Hash<Symbol, Ciesta::Field>] list Field list class Ciesta::FieldList # Constructor def initialize @list = {} end # Adds new field to list # # @param [Ciesta::Field] field New field # @api private def <<(field) list[field.name] = field end # Getting field by name # # @api private # @param [Symbol] name Field name # # @return [Ciesta::Field] def [](name) list[name.to_sym].value end # Setting field value # # @api private # @param [Symbol] name Field name # @param [any] value Field value def []=(name, value) list[name.to_sym].value = value end # Mass assign values to fields # # @param [Hash<Symbol, any>] attributes Attributes # # @raise Ciesta::FieldNotDefined # @return [Boolean] def assign!(attributes) attributes.each { |name, value| self[name] = value } true rescue NoMethodError => e raise Ciesta::FieldNotDefined, "Field #{e.name} is not specified" end # Mass assign values to fields # # @param [Hash<Symbol, any>] attributes Attributes # # @return [Boolean] def assign(attributes) attributes = attributes.keep_if { |key| keys.include?(key) } begin assign!(attributes) rescue StandardError false end end # Getting all field names # # @api private # @return [Array<Symbol>] def keys list.keys end # Getting all field values # # @api private # @return [Hash<Symbol, any>] def attributes list.values.map { |field| [field.name, field.value] }.to_h end # Iterate over all fields # # @api private # @param [Block] block Block to iterate def each list.each_value { |field| yield(field) } end # Clear all fields # # @api private def clear! list.each_value(&:clear!) end private attr_reader :list end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ciesta-0.3.2 | lib/ciesta/field_list.rb |
ciesta-0.3.1 | lib/ciesta/field_list.rb |
ciesta-0.2.5 | lib/ciesta/field_list.rb |