librarian-puppet 0.0.1.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/LICENSE +20 -0
- data/README.md +0 -0
- data/bin/librarian-puppet +9 -0
- data/lib/librarian/puppet.rb +7 -0
- data/lib/librarian/puppet/cli.rb +30 -0
- data/lib/librarian/puppet/dsl.rb +14 -0
- data/lib/librarian/puppet/environment.rb +18 -0
- data/lib/librarian/puppet/extension.rb +9 -0
- data/lib/librarian/puppet/source.rb +2 -0
- data/lib/librarian/puppet/source/git.rb +12 -0
- data/lib/librarian/puppet/source/local.rb +46 -0
- data/lib/librarian/puppet/source/path.rb +12 -0
- data/lib/librarian/puppet/templates/Puppetfile +6 -0
- data/librarian-puppet.gemspec +126 -0
- data/vendor/librarian/.rspec +1 -0
- data/vendor/librarian/.travis.yml +6 -0
- data/vendor/librarian/CHANGELOG.md +168 -0
- data/vendor/librarian/Gemfile +4 -0
- data/vendor/librarian/MIT-LICENSE +20 -0
- data/vendor/librarian/README.md +318 -0
- data/vendor/librarian/Rakefile +34 -0
- data/vendor/librarian/bin/librarian-chef +7 -0
- data/vendor/librarian/bin/librarian-mock +7 -0
- data/vendor/librarian/config/cucumber.yaml +1 -0
- data/vendor/librarian/features/chef/cli/init.feature +10 -0
- data/vendor/librarian/features/chef/cli/install.feature +64 -0
- data/vendor/librarian/features/chef/cli/show.feature +65 -0
- data/vendor/librarian/features/chef/cli/version.feature +11 -0
- data/vendor/librarian/features/support/env.rb +9 -0
- data/vendor/librarian/lib/librarian.rb +19 -0
- data/vendor/librarian/lib/librarian/action.rb +5 -0
- data/vendor/librarian/lib/librarian/action/base.rb +22 -0
- data/vendor/librarian/lib/librarian/action/clean.rb +44 -0
- data/vendor/librarian/lib/librarian/action/ensure.rb +24 -0
- data/vendor/librarian/lib/librarian/action/install.rb +95 -0
- data/vendor/librarian/lib/librarian/action/resolve.rb +81 -0
- data/vendor/librarian/lib/librarian/action/update.rb +78 -0
- data/vendor/librarian/lib/librarian/chef.rb +1 -0
- data/vendor/librarian/lib/librarian/chef/cli.rb +27 -0
- data/vendor/librarian/lib/librarian/chef/dsl.rb +15 -0
- data/vendor/librarian/lib/librarian/chef/environment.rb +19 -0
- data/vendor/librarian/lib/librarian/chef/extension.rb +9 -0
- data/vendor/librarian/lib/librarian/chef/integration/knife.rb +42 -0
- data/vendor/librarian/lib/librarian/chef/manifest_reader.rb +47 -0
- data/vendor/librarian/lib/librarian/chef/source.rb +3 -0
- data/vendor/librarian/lib/librarian/chef/source/git.rb +12 -0
- data/vendor/librarian/lib/librarian/chef/source/local.rb +63 -0
- data/vendor/librarian/lib/librarian/chef/source/path.rb +12 -0
- data/vendor/librarian/lib/librarian/chef/source/site.rb +434 -0
- data/vendor/librarian/lib/librarian/chef/templates/Cheffile +15 -0
- data/vendor/librarian/lib/librarian/cli.rb +175 -0
- data/vendor/librarian/lib/librarian/cli/manifest_presenter.rb +79 -0
- data/vendor/librarian/lib/librarian/dependency.rb +95 -0
- data/vendor/librarian/lib/librarian/dsl.rb +105 -0
- data/vendor/librarian/lib/librarian/dsl/receiver.rb +48 -0
- data/vendor/librarian/lib/librarian/dsl/target.rb +176 -0
- data/vendor/librarian/lib/librarian/environment.rb +129 -0
- data/vendor/librarian/lib/librarian/error.rb +4 -0
- data/vendor/librarian/lib/librarian/helpers.rb +13 -0
- data/vendor/librarian/lib/librarian/helpers/debug.rb +35 -0
- data/vendor/librarian/lib/librarian/lockfile.rb +33 -0
- data/vendor/librarian/lib/librarian/lockfile/compiler.rb +70 -0
- data/vendor/librarian/lib/librarian/lockfile/parser.rb +104 -0
- data/vendor/librarian/lib/librarian/manifest.rb +140 -0
- data/vendor/librarian/lib/librarian/manifest_set.rb +153 -0
- data/vendor/librarian/lib/librarian/mock.rb +1 -0
- data/vendor/librarian/lib/librarian/mock/cli.rb +19 -0
- data/vendor/librarian/lib/librarian/mock/dsl.rb +15 -0
- data/vendor/librarian/lib/librarian/mock/environment.rb +24 -0
- data/vendor/librarian/lib/librarian/mock/extension.rb +9 -0
- data/vendor/librarian/lib/librarian/mock/source.rb +1 -0
- data/vendor/librarian/lib/librarian/mock/source/mock.rb +97 -0
- data/vendor/librarian/lib/librarian/mock/source/mock/registry.rb +83 -0
- data/vendor/librarian/lib/librarian/resolution.rb +44 -0
- data/vendor/librarian/lib/librarian/resolver.rb +73 -0
- data/vendor/librarian/lib/librarian/resolver/implementation.rb +122 -0
- data/vendor/librarian/lib/librarian/source.rb +2 -0
- data/vendor/librarian/lib/librarian/source/git.rb +150 -0
- data/vendor/librarian/lib/librarian/source/git/repository.rb +213 -0
- data/vendor/librarian/lib/librarian/source/local.rb +51 -0
- data/vendor/librarian/lib/librarian/source/path.rb +74 -0
- data/vendor/librarian/lib/librarian/spec.rb +13 -0
- data/vendor/librarian/lib/librarian/spec_change_set.rb +170 -0
- data/vendor/librarian/lib/librarian/specfile.rb +22 -0
- data/vendor/librarian/lib/librarian/support/abstract_method.rb +21 -0
- data/vendor/librarian/lib/librarian/ui.rb +64 -0
- data/vendor/librarian/lib/librarian/version.rb +3 -0
- data/vendor/librarian/librarian.gemspec +33 -0
- data/vendor/librarian/spec/functional/chef/source/git_spec.rb +432 -0
- data/vendor/librarian/spec/functional/chef/source/site_spec.rb +215 -0
- data/vendor/librarian/spec/unit/action/base_spec.rb +18 -0
- data/vendor/librarian/spec/unit/action/clean_spec.rb +102 -0
- data/vendor/librarian/spec/unit/action/ensure_spec.rb +37 -0
- data/vendor/librarian/spec/unit/action/install_spec.rb +111 -0
- data/vendor/librarian/spec/unit/dependency_spec.rb +30 -0
- data/vendor/librarian/spec/unit/dsl_spec.rb +194 -0
- data/vendor/librarian/spec/unit/environment_spec.rb +9 -0
- data/vendor/librarian/spec/unit/lockfile/parser_spec.rb +162 -0
- data/vendor/librarian/spec/unit/lockfile_spec.rb +65 -0
- data/vendor/librarian/spec/unit/manifest_set_spec.rb +202 -0
- data/vendor/librarian/spec/unit/manifest_spec.rb +30 -0
- data/vendor/librarian/spec/unit/mock/source/mock_spec.rb +22 -0
- data/vendor/librarian/spec/unit/resolver_spec.rb +192 -0
- data/vendor/librarian/spec/unit/source/git_spec.rb +29 -0
- data/vendor/librarian/spec/unit/spec_change_set_spec.rb +169 -0
- metadata +163 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#^syntax detection
|
|
3
|
+
|
|
4
|
+
site 'http://community.opscode.com/api/v1'
|
|
5
|
+
|
|
6
|
+
# cookbook 'chef-client'
|
|
7
|
+
|
|
8
|
+
# cookbook 'apache2', '>= 1.0.0'
|
|
9
|
+
|
|
10
|
+
# cookbook 'rvm',
|
|
11
|
+
# :git => 'https://github.com/fnichol/chef-rvm'
|
|
12
|
+
|
|
13
|
+
# cookbook 'postgresql',
|
|
14
|
+
# :git => 'https://github.com/findsyou/cookbooks',
|
|
15
|
+
# :ref => 'postgresql-improvements'
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
require 'thor'
|
|
2
|
+
require 'thor/actions'
|
|
3
|
+
|
|
4
|
+
require 'librarian'
|
|
5
|
+
require 'librarian/error'
|
|
6
|
+
require 'librarian/action'
|
|
7
|
+
require "librarian/ui"
|
|
8
|
+
|
|
9
|
+
require "librarian/helpers/debug"
|
|
10
|
+
|
|
11
|
+
module Librarian
|
|
12
|
+
class Cli < Thor
|
|
13
|
+
|
|
14
|
+
autoload :ManifestPresenter, "librarian/cli/manifest_presenter"
|
|
15
|
+
|
|
16
|
+
include Thor::Actions
|
|
17
|
+
|
|
18
|
+
module Particularity
|
|
19
|
+
def root_module
|
|
20
|
+
nil
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
include Particularity
|
|
25
|
+
extend Particularity
|
|
26
|
+
|
|
27
|
+
include Helpers::Debug
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
def bin!
|
|
31
|
+
begin
|
|
32
|
+
environment = root_module.environment
|
|
33
|
+
start
|
|
34
|
+
rescue Librarian::Error => e
|
|
35
|
+
environment.ui.error e.message
|
|
36
|
+
environment.ui.debug e.backtrace.join("\n")
|
|
37
|
+
exit (e.respond_to?(:status_code) ? e.status_code : 1)
|
|
38
|
+
rescue Interrupt => e
|
|
39
|
+
environment.ui.error "\nQuitting..."
|
|
40
|
+
exit 1
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def initialize(*)
|
|
46
|
+
super
|
|
47
|
+
the_shell = (options["no-color"] ? Thor::Shell::Basic.new : shell)
|
|
48
|
+
environment.ui = UI::Shell.new(the_shell)
|
|
49
|
+
environment.ui.debug! if options["verbose"]
|
|
50
|
+
environment.ui.debug_line_numbers! if options["verbose"] && options["line-numbers"]
|
|
51
|
+
|
|
52
|
+
write_debug_header
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
desc "version", "Displays the version."
|
|
56
|
+
def version
|
|
57
|
+
say "librarian-#{root_module.version}"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
desc "clean", "Cleans out the cache and install paths."
|
|
61
|
+
option "verbose"
|
|
62
|
+
option "line-numbers"
|
|
63
|
+
def clean
|
|
64
|
+
ensure!
|
|
65
|
+
clean!
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
desc "install", "Resolves and installs all of the dependencies you specify."
|
|
69
|
+
option "verbose"
|
|
70
|
+
option "line-numbers"
|
|
71
|
+
option "clean"
|
|
72
|
+
def install
|
|
73
|
+
ensure!
|
|
74
|
+
clean! if options["clean"]
|
|
75
|
+
resolve!
|
|
76
|
+
install!
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
desc "update", "Updates and installs the dependencies you specify."
|
|
80
|
+
option "verbose"
|
|
81
|
+
option "line-numbers"
|
|
82
|
+
def update(*names)
|
|
83
|
+
ensure!
|
|
84
|
+
if names.empty?
|
|
85
|
+
resolve!(:force => true)
|
|
86
|
+
else
|
|
87
|
+
update!(:names => names)
|
|
88
|
+
end
|
|
89
|
+
install!
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
desc "outdated", "Lists outdated dependencies."
|
|
93
|
+
option "verbose"
|
|
94
|
+
option "line-numbers"
|
|
95
|
+
def outdated
|
|
96
|
+
ensure!
|
|
97
|
+
resolution = environment.lock
|
|
98
|
+
resolution.manifests.sort_by(&:name).each do |manifest|
|
|
99
|
+
source = manifest.source
|
|
100
|
+
source_manifest = source.manifests(manifest.name).first
|
|
101
|
+
next if manifest.version == source_manifest.version
|
|
102
|
+
say "#{manifest.name} (#{manifest.version} -> #{source_manifest.version})"
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
desc "show", "Shows dependencies"
|
|
107
|
+
option "verbose"
|
|
108
|
+
option "line-numbers"
|
|
109
|
+
option "detailed", :type => :boolean
|
|
110
|
+
def show(*names)
|
|
111
|
+
ensure!
|
|
112
|
+
manifest_presenter.present(names, :detailed => options["detailed"])
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
desc "init", "Initializes the current directory."
|
|
116
|
+
def init
|
|
117
|
+
puts "Nothing to do."
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
private
|
|
121
|
+
|
|
122
|
+
def environment
|
|
123
|
+
root_module.environment
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def ensure!(options = { })
|
|
127
|
+
Action::Ensure.new(environment, options).run
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def clean!(options = { })
|
|
131
|
+
Action::Clean.new(environment, options).run
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def install!(options = { })
|
|
135
|
+
Action::Install.new(environment, options).run
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def resolve!(options = { })
|
|
139
|
+
Action::Resolve.new(environment, options).run
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def update!(options = { })
|
|
143
|
+
Action::Update.new(environment, options).run
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def manifest_presenter
|
|
147
|
+
ManifestPresenter.new(self, environment.lock.manifests)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def write_debug_header
|
|
151
|
+
debug { "Ruby Version: #{RUBY_VERSION}" }
|
|
152
|
+
debug { "Ruby Platform: #{RUBY_PLATFORM}" }
|
|
153
|
+
debug { "Rubinius Version: #{Rubinius::VERSION}" } if defined?(Rubinius)
|
|
154
|
+
debug { "JRuby Version: #{JRUBY_VERSION}" } if defined?(JRUBY_VERSION)
|
|
155
|
+
debug { "Rubygems Version: #{Gem::VERSION}" }
|
|
156
|
+
debug { "Librarian Version: #{VERSION}" }
|
|
157
|
+
debug { "Librarian Adapter: #{environment.adapter_name}"}
|
|
158
|
+
debug { "Project: #{environment.project_path}" }
|
|
159
|
+
debug { "Specfile: #{relative_path_to(environment.specfile_path)}" }
|
|
160
|
+
debug { "Lockfile: #{relative_path_to(environment.lockfile_path)}" }
|
|
161
|
+
debug { "Git: #{Source::Git::Repository.bin}" }
|
|
162
|
+
debug { "Git Version: #{Source::Git::Repository.new(environment, environment.project_path).version(:silent => true)}" }
|
|
163
|
+
debug { "Git Environment Variables:" }
|
|
164
|
+
git_env = ENV.to_a.select{|(k, v)| k =~ /\AGIT/}.sort_by{|(k, v)| k}
|
|
165
|
+
if git_env.empty?
|
|
166
|
+
debug { " (empty)" }
|
|
167
|
+
else
|
|
168
|
+
git_env.each do |(k, v)|
|
|
169
|
+
debug { " #{k}=#{v}"}
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
end
|
|
175
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
module Librarian
|
|
2
|
+
class Cli
|
|
3
|
+
class ManifestPresenter
|
|
4
|
+
|
|
5
|
+
attr_accessor :cli, :manifests
|
|
6
|
+
private :cli=, :manifests=
|
|
7
|
+
|
|
8
|
+
def initialize(cli, manifests)
|
|
9
|
+
self.cli = cli or raise ArgumentError, "cli required"
|
|
10
|
+
self.manifests = manifests or raise ArgumentError, "manifests required"
|
|
11
|
+
self.manifests_index = Hash[manifests.map{|m| [m.name, m]}]
|
|
12
|
+
|
|
13
|
+
self.scope_level = 0
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def present(names = [], options = { })
|
|
17
|
+
full = options[:detailed]
|
|
18
|
+
full = !names.empty? if full.nil?
|
|
19
|
+
|
|
20
|
+
if names.empty?
|
|
21
|
+
names = manifests.map(&:name).sort if names.empty?
|
|
22
|
+
else
|
|
23
|
+
missing_names = names.reject{|name| manifest(name)}
|
|
24
|
+
unless missing_names.empty?
|
|
25
|
+
raise Error, "not found: #{missing_names.map(&:inspect).join(', ')}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
names.each do |name|
|
|
30
|
+
manifest = manifest(name)
|
|
31
|
+
present_one(manifest, :detailed => full)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def present_one(manifest, options = { })
|
|
36
|
+
full = options[:detailed]
|
|
37
|
+
|
|
38
|
+
say "#{manifest.name} (#{manifest.version})" do
|
|
39
|
+
if full
|
|
40
|
+
say "source: #{manifest.source}"
|
|
41
|
+
unless manifest.dependencies.empty?
|
|
42
|
+
say "dependencies:" do
|
|
43
|
+
manifest.dependencies.sort_by(&:name).each do |dependency|
|
|
44
|
+
say "#{dependency.name} (#{dependency.requirement})"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
attr_accessor :scope_level, :manifests_index
|
|
55
|
+
|
|
56
|
+
def manifest(name)
|
|
57
|
+
manifests_index[name]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def say(string)
|
|
61
|
+
cli.say " " * scope_level << string
|
|
62
|
+
if block_given?
|
|
63
|
+
scope do
|
|
64
|
+
yield
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def scope
|
|
70
|
+
original_scope_level = scope_level
|
|
71
|
+
self.scope_level = scope_level + 1
|
|
72
|
+
yield
|
|
73
|
+
ensure
|
|
74
|
+
self.scope_level = original_scope_level
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
|
|
3
|
+
require 'librarian/helpers/debug'
|
|
4
|
+
|
|
5
|
+
module Librarian
|
|
6
|
+
class Dependency
|
|
7
|
+
|
|
8
|
+
class Requirement
|
|
9
|
+
def initialize(*args)
|
|
10
|
+
args = initialize_normalize_args(args)
|
|
11
|
+
|
|
12
|
+
self.backing = Gem::Requirement.create(*args)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_gem_requirement
|
|
16
|
+
backing
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def satisfied_by?(version)
|
|
20
|
+
to_gem_requirement.satisfied_by?(version.to_gem_version)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def ==(other)
|
|
24
|
+
to_gem_requirement == other.to_gem_requirement
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def to_s
|
|
28
|
+
to_gem_requirement.to_s
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
protected
|
|
32
|
+
|
|
33
|
+
attr_accessor :backing
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def initialize_normalize_args(args)
|
|
38
|
+
args.map do |arg|
|
|
39
|
+
arg = arg.backing if self.class === arg
|
|
40
|
+
arg
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
include Helpers::Debug
|
|
46
|
+
|
|
47
|
+
attr_accessor :name, :requirement, :source
|
|
48
|
+
private :name=, :requirement=, :source=
|
|
49
|
+
|
|
50
|
+
def initialize(name, requirement, source)
|
|
51
|
+
assert_name_valid! name
|
|
52
|
+
|
|
53
|
+
self.name = name
|
|
54
|
+
self.requirement = Requirement.new(requirement)
|
|
55
|
+
self.source = source
|
|
56
|
+
|
|
57
|
+
@manifests = nil
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def manifests
|
|
61
|
+
@manifests ||= cache_manifests!
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def cache_manifests!
|
|
65
|
+
source.manifests(name)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def satisfied_by?(manifest)
|
|
69
|
+
manifest.satisfies?(self)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def to_s
|
|
73
|
+
"#{name} (#{requirement}) <#{source}>"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def ==(other)
|
|
77
|
+
!other.nil? &&
|
|
78
|
+
self.class == other.class &&
|
|
79
|
+
self.name == other.name &&
|
|
80
|
+
self.requirement == other.requirement &&
|
|
81
|
+
self.source == other.source
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
def environment
|
|
87
|
+
source.environment
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def assert_name_valid!(name)
|
|
91
|
+
raise ArgumentError, "name (#{name.inspect}) must be sensible" unless name =~ /^\S.*\S$/
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'librarian/dependency'
|
|
2
|
+
require 'librarian/dsl/receiver'
|
|
3
|
+
require 'librarian/dsl/target'
|
|
4
|
+
require 'librarian/helpers/debug'
|
|
5
|
+
|
|
6
|
+
module Librarian
|
|
7
|
+
class Dsl
|
|
8
|
+
|
|
9
|
+
include Helpers::Debug
|
|
10
|
+
|
|
11
|
+
class Error < Exception
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
attr_accessor :environment
|
|
15
|
+
private :environment=
|
|
16
|
+
|
|
17
|
+
class << self
|
|
18
|
+
|
|
19
|
+
def run(environment, specfile = nil, precache_sources = [], &block)
|
|
20
|
+
new(environment).run(specfile, precache_sources, &block)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def dependency(name)
|
|
26
|
+
dependency_name = name
|
|
27
|
+
dependency_type = Dependency
|
|
28
|
+
singleton_class = class << self; self end
|
|
29
|
+
singleton_class.instance_eval do
|
|
30
|
+
define_method(:dependency_name) { dependency_name }
|
|
31
|
+
define_method(:dependency_type) { dependency_type }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
define_method(:source_types) { [] }
|
|
36
|
+
|
|
37
|
+
def source(options)
|
|
38
|
+
name = options.keys.first
|
|
39
|
+
type = options[name]
|
|
40
|
+
types = source_types
|
|
41
|
+
types << [name, type]
|
|
42
|
+
singleton_class = class << self; self end
|
|
43
|
+
singleton_class.instance_eval do
|
|
44
|
+
define_method(:source_types) { types }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
define_method(:source_shortcuts) { {} }
|
|
49
|
+
|
|
50
|
+
def shortcut(name, options)
|
|
51
|
+
instances = source_shortcuts
|
|
52
|
+
instances[name] = options
|
|
53
|
+
singleton_class = class << self; self end
|
|
54
|
+
singleton_class.instance_eval do
|
|
55
|
+
define_method(:source_shortcuts) { instances }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def delegate_to_class(*names)
|
|
60
|
+
names.each do |name|
|
|
61
|
+
define_method(name) { self.class.send(name) }
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
delegate_to_class :dependency_name, :dependency_type, :source_types, :source_shortcuts
|
|
68
|
+
|
|
69
|
+
def initialize(environment)
|
|
70
|
+
self.environment = environment
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def run(specfile = nil, sources = [])
|
|
74
|
+
Target.new(self).tap do |target|
|
|
75
|
+
target.precache_sources(sources)
|
|
76
|
+
debug_named_source_cache("Pre-Cached Sources", target)
|
|
77
|
+
|
|
78
|
+
receiver = Receiver.new(target)
|
|
79
|
+
if block_given?
|
|
80
|
+
receiver.run(&Proc.new)
|
|
81
|
+
else
|
|
82
|
+
case specfile
|
|
83
|
+
when Specfile, String, Proc
|
|
84
|
+
receiver.run(specfile)
|
|
85
|
+
else
|
|
86
|
+
raise ArgumentError, "specfile must be a #{Specfile}, #{String}, or #{Proc} if no block is given (it was #{specfile.inspect})"
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
debug_named_source_cache("Post-Cached Sources", target)
|
|
91
|
+
end.to_spec
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def debug_named_source_cache(name, target)
|
|
95
|
+
source_cache = target.source_cache
|
|
96
|
+
debug { "#{name}:" }
|
|
97
|
+
source_cache.each do |key, value|
|
|
98
|
+
type = key[0]
|
|
99
|
+
attributes = key[1...key.size]
|
|
100
|
+
debug { " #{key.inspect}" }
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
end
|