aiwilliams-plugit 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,8 +4,11 @@ require File.dirname(__FILE__) + '/plugit/descriptor'
4
4
 
5
5
  module Plugit
6
6
  def self.describe(&block)
7
+ ENV['PLUGIT_ENV'] ||= 'default'
7
8
  descriptor = Descriptor.new
8
9
  block.call(descriptor)
9
- descriptor.install_environment(ENV['PLUGIT_ENV'] || :default)
10
+ descriptor.install_environment(ENV['PLUGIT_ENV'])
11
+ rescue UndefinedEnvironmentError
12
+ puts %Q{No environment named "#{ENV['PLUGIT_ENV']}". Use one of #{descriptor.environments.collect {|e| e.name.to_s}.inspect}.}
10
13
  end
11
14
  end
@@ -1,19 +1,31 @@
1
1
  module Plugit
2
+ class UndefinedEnvironmentError < StandardError; end
3
+
2
4
  class Descriptor
3
- attr_writer :library_root_path
5
+ attr_writer :environments_root_path
4
6
 
5
7
  def initialize
6
8
  @environments = []
7
9
  end
8
10
 
11
+ def [](env_name)
12
+ @environments.detect {|e|e.name == env_name}
13
+ end
14
+
9
15
  def environment(*init_args, &block)
16
+ init_args << File.expand_path(@environments_root_path || 'environments')
10
17
  @environments << (env = Environment.new(*init_args))
11
18
  block.call(EnvironmentBuilder.new(env))
19
+ env
20
+ end
21
+
22
+ def environments
23
+ @environments.dup
12
24
  end
13
25
 
14
26
  def install_environment(name)
15
- Environment.library_root_path = @library_root_path || File.expand_path('environments')
16
27
  env = @environments.detect {|e| e.name == name.to_sym}
28
+ raise UndefinedEnvironmentError.new(name) unless env
17
29
  env.libraries.each do |lib|
18
30
  lib.update(env)
19
31
  lib.install(env)
@@ -26,8 +38,8 @@ module Plugit
26
38
  @env = env
27
39
  end
28
40
 
29
- def library(*init_args)
30
- @env.add_library(Library.new(*init_args))
41
+ def library(*init_args, &block)
42
+ @env.add_library(Library.new(*init_args, &block))
31
43
  end
32
44
  end
33
45
  end
@@ -1,18 +1,16 @@
1
1
  module Plugit
2
2
  class Environment
3
- class UninitializedRootError < StandardError; end
4
-
5
- class << self
6
- attr_accessor :library_root_path
7
- end
8
-
9
3
  attr_reader :name, :description
10
4
 
11
- def initialize(name, description)
12
- @name, @description = name, description
5
+ def initialize(name, description, root_path)
6
+ @name, @description, @root_path = name, description, root_path
13
7
  @libraries = []
14
8
  end
15
9
 
10
+ def [](library_name)
11
+ @libraries.detect {|l|l.name == library_name}
12
+ end
13
+
16
14
  def add_library(library)
17
15
  @libraries << library
18
16
  end
@@ -22,9 +20,7 @@ module Plugit
22
20
  end
23
21
 
24
22
  def library_root_path
25
- root_path = self.class.library_root_path
26
- raise UninitializedRootError unless root_path
27
- File.join(root_path, name.to_s)
23
+ File.join(@root_path, name.to_s)
28
24
  end
29
25
  end
30
26
  end
@@ -5,12 +5,14 @@ module Plugit
5
5
  include FileUtils
6
6
 
7
7
  attr_accessor :load_paths, :requires
8
- attr_reader :name, :version, :scm_export_command
8
+ attr_reader :configuration, :name
9
9
 
10
- def initialize(name, version, scm_export_command)
11
- @name, @version, @scm_export_command = name, version, scm_export_command
12
- @load_paths = ['/lib']
13
- @requires = []
10
+ def initialize(name, configuration = {})
11
+ @name = name
12
+ @configuration = configuration
13
+ @load_paths ||= ['/lib']
14
+ @requires ||= []
15
+
14
16
  yield self if block_given?
15
17
  end
16
18
 
@@ -18,15 +20,37 @@ module Plugit
18
20
  @after_update = block
19
21
  end
20
22
 
23
+ def before_install(&block)
24
+ @before_install = block
25
+ end
26
+
21
27
  def checkout(target_path)
22
- command = "#{scm_export_command} #{target_path}"
28
+ command = "#{export} #{target_path}"
23
29
  puts "Checking out #{name}: #{command}"
24
30
  `#{command}`
25
31
  end
26
32
 
27
33
  def install(environment)
28
- load_paths.each { |l| $LOAD_PATH << File.join(target_path(environment), l) }
29
- Object.send :require, *requires unless requires.empty?
34
+ target_path = self.target_path(environment)
35
+ cd(target_path) do
36
+ instance_eval(&@before_install)
37
+ end if @before_install
38
+ load_paths.reverse.each { |l| $LOAD_PATH.unshift File.join(target_path, l) }
39
+ requires.each { |r| Object.send :require, r }
40
+ end
41
+
42
+ def method_missing(method, *args)
43
+ if value = @configuration[method.to_sym]
44
+ value
45
+ else
46
+ super(method, *args)
47
+ end
48
+ end
49
+
50
+ def target_path(environment)
51
+ paths = [environment.library_root_path, name.to_s]
52
+ paths << version if version
53
+ File.join(paths)
30
54
  end
31
55
 
32
56
  def update(environment, force = false)
@@ -41,9 +65,8 @@ module Plugit
41
65
  end
42
66
  end
43
67
 
44
- protected
45
- def target_path(environment)
46
- File.join(environment.library_root_path, name.to_s, version)
47
- end
68
+ def version
69
+ @configuration[:version]
70
+ end
48
71
  end
49
72
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "plugit"
3
- s.version = "0.0.1"
3
+ s.version = "0.0.2"
4
4
  s.date = "2008-05-19"
5
5
  s.summary = "Helping you write tests for code that depends on libraries"
6
6
  s.email = "adam@thewilliams.ws"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aiwilliams-plugit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Williams
@@ -52,7 +52,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
52
52
  requirements: []
53
53
 
54
54
  rubyforge_project:
55
- rubygems_version: 1.0.1
55
+ rubygems_version: 1.2.0
56
56
  signing_key:
57
57
  specification_version: 2
58
58
  summary: Helping you write tests for code that depends on libraries