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.discover(@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