Class: Teapot::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/teapot/context.rb

Overview

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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root, **options) ⇒ Context

Returns a new instance of Context.



26
27
28
29
30
31
32
33
34
35
36
# 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

Instance Attribute Details

#configurationObject (readonly)

The primary configuration.



42
43
44
# File 'lib/teapot/context.rb', line 42

def configuration
  @configuration
end

#optionsObject (readonly)

Returns the value of attribute options.



39
40
41
# File 'lib/teapot/context.rb', line 39

def options
  @options
end

#projectObject (readonly)

The primary project.



45
46
47
# File 'lib/teapot/context.rb', line 45

def project
  @project
end

#rootObject (readonly)

Returns the value of attribute root.



38
39
40
# File 'lib/teapot/context.rb', line 38

def root
  @root
end

Instance Method Details

#load(package) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
# 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

#repositoryObject



47
48
49
# File 'lib/teapot/context.rb', line 47

def repository
	@repository ||= Rugged::Repository.new(@root.to_s)
end

#root_packageObject

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



102
103
104
# File 'lib/teapot/context.rb', line 102

def root_package
	@root_package ||= Package.new(@root, "root")
end

#select(names = nil, configuration = @configuration) ⇒ Object



51
52
53
# File 'lib/teapot/context.rb', line 51

def select(names = nil, configuration = @configuration)
	Select.new(self, configuration, names || [])
end

#substitutionsObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# 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