Sha256: f63fe7f82dbe4c1b560b776390f1cd34fd9f7d2ac41db8c551d0c12af523455a

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

module SAXMachine
  class SAXConfig
    class ElementConfig
      attr_reader :name, :setter, :data_class, :collection

      def initialize(name, options)
        @name = name.to_s
        @with = options.fetch(:with, {})

        @value = if options.has_key?(:value)
          options[:value].to_s
        else
          nil
        end

        @as = options[:as]
        @collection = options[:collection]

        @setter = if @collection
          "add_#{options[:as]}"
        else
          "#{@as}="
        end

        @data_class = options[:class]
        @required = options[:required]
      end

      def value_configured?
        !@value.nil?
      end

      def to_s
        "name: #{@name} dataclass: #{@data_class} setter: #{@setter} required: #{@required} value: #{@value} as:#{@as} collection: #{@collection} with: #{@with}"
      end

      def column
        @as || @name.to_sym
      end

      def required?
        !!@required
      end

      def value_from_attrs(attrs)
        attrs.fetch(@value, nil)
      end

      def attrs_match?(attrs)
        @with.all? do |key, value|
          value === attrs[key.to_s]
        end
      end

      def has_value_and_attrs_match?(attrs)
        !@value.nil? && attrs_match?(attrs)
      end

      def collection?
        !!@collection
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sax-machine-0.3.0 lib/sax-machine/config/sax_element.rb