class StructCore::SpecBuilderDsl

Attributes

project_base_dir[RW]

Public Class Methods

new(spec_file, file_dsls = []) click to toggle source
# File lib/spec/builder/spec_builder_dsl.rb, line 7
def initialize(spec_file, file_dsls = [])
        @spec_file = spec_file
        @file_dsls = file_dsls
        @project_base_dir = nil
        @current_scope = nil

        register_defaults if @file_dsls.empty?
end

Public Instance Methods

__build() click to toggle source
# File lib/spec/builder/spec_builder_dsl.rb, line 34
def __build
        @spec_file
end
method_missing(method, *args, &block) click to toggle source
# File lib/spec/builder/spec_builder_dsl.rb, line 64
def method_missing(method, *args, &block)
        if @current_scope.nil? && method == :build
                send('__build', *args, &block)
        else
                @current_scope.send(method, *args, &block)
        end
end
register(dsl) click to toggle source
# File lib/spec/builder/spec_builder_dsl.rb, line 18
def register(dsl)
        if dsl.respond_to?(:supports_version)
                @file_dsls << dsl
                return
        end

        raise StandardError.new 'Unsupported DSL object. DSL object must support :supports_version'
end
register_defaults() click to toggle source
# File lib/spec/builder/spec_builder_dsl.rb, line 27
def register_defaults
        @file_dsls.unshift(
                StructCore::SpecFileDSL20X.new,
                StructCore::SpecFileDSL30X.new
        )
end
respond_to_missing?(_, _) click to toggle source
# File lib/spec/builder/spec_builder_dsl.rb, line 60
def respond_to_missing?(_, _)
        !@current_scope.nil?
end
spec(version, &block) click to toggle source
# File lib/spec/builder/spec_builder_dsl.rb, line 38
def spec(version, &block)
        begin
                spec_version = Semantic::Version.new version
        rescue StandardError => _
                raise StandardError.new 'Error: Invalid spec file. Project version is invalid.'
        end

        dsl = @file_dsls.find { |dsl|
                dsl.supports_version(spec_version)
        }

        raise StandardError.new "Error: Invalid spec file. Project version #{version} is unsupported by this version of struct." if dsl.nil?

        @spec_file.version = spec_version
        dsl.spec_file = @spec_file
        dsl.project_base_dir = @project_base_dir

        @current_scope = dsl
        block.call
        @current_scope = nil
end