class Teapot::Context

A context represents a specific root package instance with a given configuration and all related definitions. A context is stateful in the sense that package selection is specialized based on select and dependency_chain. These parameters are usually set up initially as part of the context setup.

Attributes

configuration[R]

The primary configuration.

options[R]
project[R]

The primary project.

root[R]

Public Class Methods

new(root, **options) click to toggle source
# File lib/teapot/context.rb, line 26
def initialize(root, **options)
        @root = Path[root]
        @options = options

        @configuration = nil
        @project = nil

        @loaded = {}

        load_root_package(**options)
end

Public Instance Methods

load(package) click to toggle source
# File lib/teapot/context.rb, line 89
def load(package)
        if loader = @loaded[package]
                return loader.script unless loader.changed?
        end
        
        loader = Loader.new(self, package)
        
        @loaded[package] = loader
        
        return loader.script
end
repository() click to toggle source
# File lib/teapot/context.rb, line 47
def repository
        @repository ||= Rugged::Repository.new(@root.to_s)
end
root_package() click to toggle source

The root package is a special package which is used to load definitions from a given root path.

# File lib/teapot/context.rb, line 102
def root_package
        @root_package ||= Package.new(@root, "root")
end
select(names = nil, configuration = @configuration) click to toggle source
# File lib/teapot/context.rb, line 51
def select(names = nil, configuration = @configuration)
        Select.new(self, configuration, names || [])
end
substitutions() click to toggle source
# File lib/teapot/context.rb, line 55
def substitutions
        substitutions = Build::Text::Substitutions.new
        
        substitutions['TEAPOT_VERSION'] = Teapot::VERSION
        
        if @project
                name = @project.name
                
                # e.g. Foo Bar, typically used as a title, directory, etc.
                substitutions['PROJECT_NAME'] = name.text
                
                # e.g. FooBar, typically used as a namespace
                substitutions['PROJECT_IDENTIFIER'] = name.identifier
                
                # e.g. foo-bar, typically used for targets, executables
                substitutions['PROJECT_TARGET_NAME'] = name.target
                
                # e.g. foo_bar, typically used for variables.
                substitutions['PROJECT_VARIABLE_NAME'] = name.key
                
                substitutions['LICENSE'] = @project.license
        end
        
        # The user's current name:
        substitutions['AUTHOR_NAME'] = repository.config['user.name']
        substitutions['AUTHOR_EMAIL'] = repository.config['user.email']
        
        current_date = Time.new
        substitutions['DATE'] = current_date.strftime("%-d/%-m/%Y")
        substitutions['YEAR'] = current_date.strftime("%Y")
        
        return substitutions
end

Private Instance Methods

load_root_package(**options) click to toggle source
# File lib/teapot/context.rb, line 108
def load_root_package(**options)
        # Load the root package:
        script = load(root_package)
        
        # Find the default configuration, if it exists:
        if configuration_name = options[:configuration]
                @configuration = script.configurations[configuration_name]
        else
                @configuration = script.default_configuration
        end
        
        @project = script.default_project
        
        if @configuration.nil?
                raise ArgumentError.new("Could not load configuration: #{configuration_name.inspect}")
        end
end