Sha256: 93b3622da9a0864a8f11f683b7740a8ac61d4d5f9bfe61df25a31cffe9ca2321

Contents?: true

Size: 1.23 KB

Versions: 10

Compression:

Stored size: 1.23 KB

Contents

module Weskit::WML
  class Builder
    private_class_method :new

    def attribute name, value, defaults = nil
      a = Attribute.new name, value, defaults || {}
      @built << a ; a
    end

    def create &contents
      instance_eval &contents ; @built
    end

    def element name, defaults = nil
      e = Element.new name, defaults || {}
      @built << e ; e
    end

    def id value
      attribute :id, value
    end

    def initialize
      @built = []
    end

    def method_missing *params
      p = params
      unless block_given?
        raise_invalid_count if p.size < 2
        attribute p[0], p[1], p[2]
      else
        raise_invalid_count if p.size < 1
        element(p[0], p[1]).build &Proc.new
      end
    end

    private

    def raise_invalid_count
      raise Errors::InvalidParameters, "Invalid number of parameters"
    end

    class << self
      def build &contents
        new.create &contents
      end

      def convert hash
        root = Root.new

        hash.each do |k, v|
          if v.is_a? Hash
            e = Element.new k
            e.push *Builder.convert(v)
            root << e
          else
            root << Attribute.new(k, v)
          end
        end

        root
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
weskit-0.3.6 lib/weskit/wml/builder.rb
weskit-0.3.5 lib/weskit/wml/builder.rb
weskit-0.3.4 lib/weskit/wml/builder.rb
weskit-0.3.3 lib/weskit/wml/builder.rb
weskit-0.3.2 lib/weskit/wml/builder.rb
weskit-0.3.1 lib/weskit/wml/builder.rb
weskit-0.3.0 lib/weskit/wml/builder.rb
weskit-0.2.1 lib/weskit/wml/builder.rb
weskit-0.2.0 lib/weskit/wml/builder.rb
weskit-0.1.0 lib/weskit/wml/builder.rb