module Bixby::Provision

Public Class Methods

register_dsl(obj, name=nil) click to toggle source
# File lib/bixby/provision.rb, line 8
    def self.register_dsl(obj, name=nil)

      # create a simple name if none given
      # "Bixby::Provision::Config" > :config
      if name.nil? then
        name = obj.name.split(/::/).last.downcase
      end
      name = name.to_sym

      # return the dsl object via its name
      # always returns the same instance
      Manifest::DSLProxy.class_eval <<-EOF
        def #{name}
          return @#{name} if @#{name} # return already created instance

          @#{name}          = #{obj.name}.new
          @#{name}.manifest = self.manifest
          @#{name}.proxy    = self
          @#{name}
        end
      EOF

      if obj.const_defined? :EXPORTS then
        obj::EXPORTS.each do |e|

          Manifest::DSLProxy.class_eval do
            def_delegator name, e.to_sym
          end

        end
      end

      # add accessors for each DSL object
      Base.class_eval <<-EOF
        def #{name}
          self.proxy.send(:#{name})
        end
      EOF

    end