Sha256: 5bf3dc99ee85e46218d1adbba75f5a36b7ea6a38f94519359dc39ac3dcd83a9a

Contents?: true

Size: 928 Bytes

Versions: 6

Compression:

Stored size: 928 Bytes

Contents

require 'vedeu/support/geometry'
require 'vedeu/support/persistence'

module Vedeu
  class Builder
    def self.build(name, &block)
      new(name).build(&block)
    end

    def initialize(name)
      @name = name.to_s
    end

    def build(&block)
      self.instance_eval(&block)

      Persistence.create(attributes)
    end

    private

    attr_reader :name

    def overrides
      @overrides = if user_attributes[:centred] == true
        { x: geometry.left, y: geometry.top }
      else
        {}
      end
    end

    def geometry
      @_geometry ||= Geometry.new({
        height: user_attributes[:height],
        width:  user_attributes[:width],
      })
    end

    def attributes
      user_attributes.merge!(overrides)
    end

    def user_attributes
      @attributes ||= { name: name }
    end

    def method_missing(method_name, arg, &block)
      user_attributes[method_name] = arg
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
vedeu-0.1.2 lib/vedeu/support/builder.rb
vedeu-0.1.1 lib/vedeu/support/builder.rb
vedeu-0.1.0 lib/vedeu/support/builder.rb
vedeu-0.0.42 lib/vedeu/support/builder.rb
vedeu-0.0.41 lib/vedeu/support/builder.rb
vedeu-0.0.40 lib/vedeu/support/builder.rb