Sha256: 356de5c895432398b74b9a6bf5d2290863c4fa03c6c94d42b20802c0a91f3b03

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

module SAXMachine
  class SAXConfig
    
    class ElementConfig
      attr_reader :name, :setter, :data_class, :collection
      
      def initialize(name, options)
        @name = name.to_s
        
        if options.has_key?(:with)
          @with = options[:with].to_a.map {|(k,v)| [k.to_s, v.to_s] }
        end
        
        if options.has_key?(:value)
          @value = options[:value].to_s
        end
        
        @as = options[:as]
        @collection = options[:collection]
        
        if @collection
          @setter = "add_#{options[:as]}"
        else
          @setter = "#{@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)
        if pair = attrs.assoc(@value)
          pair.last
        end
      end
      
      def attrs_match?(attrs)
        return true unless @with

        @with.all? do |k,v|
          if pair = attrs.assoc(k)
            pair.last == v
          end
        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

2 entries across 2 versions & 1 rubygems

Version Path
lazy-sax-machine-0.1.1 lib/lazy-sax-machine/sax_element_config.rb
lazy-sax-machine-0.1.0 lib/lazy-sax-machine/sax_element_config.rb