detroit 0.1.0 → 0.2.0
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/.ruby +36 -38
- data/COPYING.rdoc +15 -11
- data/HISTORY.rdoc +20 -0
- data/QED.rdoc +87 -0
- data/README.rdoc +5 -5
- data/lib/detroit.rb +6 -9
- data/lib/detroit.yml +36 -38
- data/lib/detroit/application.rb +120 -89
- data/lib/detroit/assembly.rb +194 -55
- data/lib/detroit/assembly_system.rb +80 -0
- data/lib/detroit/config.rb +35 -29
- data/lib/detroit/control.rb +17 -12
- data/lib/detroit/core_ext.rb +0 -2
- data/lib/detroit/custom.rb +21 -6
- data/lib/detroit/service.rb +14 -7
- data/lib/detroit/standard_assembly.rb +5 -6
- data/lib/detroit/tool.rb +51 -36
- data/lib/detroit/tool/email_utils.rb +13 -11
- data/lib/detroit/tool/shell_utils.rb +88 -47
- data/qed/{01_schedule → 01_assembly}/02_initialize.md +0 -0
- metadata +62 -63
- data/lib/detroit/schedule.rb +0 -187
File without changes
|
metadata
CHANGED
@@ -1,69 +1,75 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: detroit
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
-
|
7
|
+
authors:
|
8
|
+
- Trans
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-18 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: facets
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &20449000 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: pom
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *20449000
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: pom
|
27
|
+
requirement: &20448440 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
35
33
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: qed
|
39
34
|
prerelease: false
|
40
|
-
|
35
|
+
version_requirements: *20448440
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: qed
|
38
|
+
requirement: &20447860 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
46
44
|
type: :development
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *20447860
|
47
|
+
description: Detroit is an advanced lifecycle build system. With Detroit, build tasks
|
48
|
+
are user defined service instances tied to stops along a track. Whenever the detroit
|
49
|
+
console command is run, a track is followed from beginning to designated destination.
|
50
|
+
email:
|
51
|
+
- transfire@gmail.com
|
52
|
+
executables:
|
51
53
|
- detroit
|
52
54
|
extensions: []
|
53
|
-
|
54
|
-
|
55
|
+
extra_rdoc_files:
|
56
|
+
- GPL3.txt
|
57
|
+
- HISTORY.rdoc
|
55
58
|
- README.rdoc
|
56
|
-
|
59
|
+
- QED.rdoc
|
60
|
+
- COPYING.rdoc
|
61
|
+
- EXAMPLE.md
|
62
|
+
files:
|
57
63
|
- .ruby
|
58
64
|
- bin/detroit
|
59
65
|
- lib/detroit/application.rb
|
60
66
|
- lib/detroit/assembly.rb
|
67
|
+
- lib/detroit/assembly_system.rb
|
61
68
|
- lib/detroit/config.rb
|
62
69
|
- lib/detroit/control.rb
|
63
70
|
- lib/detroit/core_ext.rb
|
64
71
|
- lib/detroit/custom.rb
|
65
72
|
- lib/detroit/dsl.rb
|
66
|
-
- lib/detroit/schedule.rb
|
67
73
|
- lib/detroit/service.rb
|
68
74
|
- lib/detroit/standard_assembly.rb
|
69
75
|
- lib/detroit/tool/core_ext/facets.rb
|
@@ -81,7 +87,7 @@ files:
|
|
81
87
|
- lib/detroit/tool.rb
|
82
88
|
- lib/detroit.rb
|
83
89
|
- lib/detroit.yml
|
84
|
-
- qed/
|
90
|
+
- qed/01_assembly/02_initialize.md
|
85
91
|
- qed/99_plugins/rdoc/rdoc-plugin.rdoc
|
86
92
|
- qed/99_plugins/rdoc/sample/Syckfile
|
87
93
|
- qed/99_plugins/rdoc/sample/lib/sandbox/.xxx
|
@@ -102,38 +108,31 @@ files:
|
|
102
108
|
- HISTORY.rdoc
|
103
109
|
- README.rdoc
|
104
110
|
- GPL3.txt
|
111
|
+
- QED.rdoc
|
105
112
|
- COPYING.rdoc
|
106
113
|
- EXAMPLE.md
|
107
114
|
homepage: http://rubyworks.github.com/detroit
|
108
|
-
licenses:
|
109
|
-
- GPL3
|
110
|
-
- GPL3
|
115
|
+
licenses: []
|
111
116
|
post_install_message:
|
112
|
-
rdoc_options:
|
113
|
-
|
114
|
-
- Detroit API
|
115
|
-
- --main
|
116
|
-
- README.rdoc
|
117
|
-
require_paths:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
118
119
|
- lib
|
119
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
121
|
none: false
|
121
|
-
requirements:
|
122
|
-
- -
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version:
|
125
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
127
|
none: false
|
127
|
-
requirements:
|
128
|
-
- -
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version:
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
131
132
|
requirements: []
|
132
|
-
|
133
|
-
|
134
|
-
rubygems_version: 1.8.2
|
133
|
+
rubyforge_project:
|
134
|
+
rubygems_version: 1.8.5
|
135
135
|
signing_key:
|
136
136
|
specification_version: 3
|
137
137
|
summary: Software Production Mangement
|
138
138
|
test_files: []
|
139
|
-
|
data/lib/detroit/schedule.rb
DELETED
@@ -1,187 +0,0 @@
|
|
1
|
-
module Detroit
|
2
|
-
|
3
|
-
# Schedule encapsulates a `Schedule` file and it's service instance
|
4
|
-
# configurations.
|
5
|
-
class Schedule
|
6
|
-
|
7
|
-
# Load Scedule file.
|
8
|
-
def self.load(input)
|
9
|
-
new(input)
|
10
|
-
end
|
11
|
-
|
12
|
-
# Hash table of services.
|
13
|
-
attr :services
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# Initialize new Schedule instance.
|
18
|
-
def initialize(file, options={})
|
19
|
-
@project = options[:project]
|
20
|
-
|
21
|
-
@services = {}
|
22
|
-
|
23
|
-
@file = (String === file ? File.new(file) : file)
|
24
|
-
|
25
|
-
case File.extname(@file.path)
|
26
|
-
when '.rb'
|
27
|
-
instance_eval(@file.read, @file.path)
|
28
|
-
when '.yml', '.yaml'
|
29
|
-
@services = YAML.load(erb(@file.read))
|
30
|
-
else
|
31
|
-
text = @file.read
|
32
|
-
if /^---/ =~ text
|
33
|
-
@services = YAML.load(erb(text))
|
34
|
-
else
|
35
|
-
instance_eval(text, @file.path)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Define a service.
|
41
|
-
def service(name, settings={}, &block)
|
42
|
-
if block
|
43
|
-
block_context = BlockContext.new(&block)
|
44
|
-
settings = block_context.settings
|
45
|
-
end
|
46
|
-
@services[name.to_s] = settings.rekey(&:to_s)
|
47
|
-
end
|
48
|
-
|
49
|
-
# Access to project data.
|
50
|
-
#
|
51
|
-
# NOTE: Thinking that the project should be relative
|
52
|
-
# to the Routine file itself, unless a `project` is passed
|
53
|
-
# in manually through the initializer. In the mean time,
|
54
|
-
# the project is just relative to the current working directory.
|
55
|
-
#
|
56
|
-
# TODO: Make configurable and use .ruby by default ?
|
57
|
-
def project
|
58
|
-
@project ||= POM::Project.find #(file_directory)
|
59
|
-
end
|
60
|
-
|
61
|
-
# Capitalized service names called as methods
|
62
|
-
# can also define a service.
|
63
|
-
def method_missing(sym, *args, &block)
|
64
|
-
service_class = sym.to_s
|
65
|
-
case service_class
|
66
|
-
when /^[A-Z]/
|
67
|
-
if Hash === args.last
|
68
|
-
args.last[:service] = service_class
|
69
|
-
else
|
70
|
-
args << {:services=>service_class}
|
71
|
-
end
|
72
|
-
case args.first
|
73
|
-
when String, Symbol
|
74
|
-
name = args.first
|
75
|
-
else
|
76
|
-
name = service_class.to_s.downcase
|
77
|
-
end
|
78
|
-
service(name, *args, &block)
|
79
|
-
else
|
80
|
-
super(sym, *args, &block)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
private
|
85
|
-
|
86
|
-
# Process Routine document via ERB.
|
87
|
-
def erb(text)
|
88
|
-
context = ERBContext.new(project)
|
89
|
-
ERB.new(text).result(context.__binding__)
|
90
|
-
end
|
91
|
-
|
92
|
-
# ERBContext provides the clean context to process a Routine
|
93
|
-
# as an ERB template.
|
94
|
-
class ERBContext
|
95
|
-
#
|
96
|
-
def initialize(project)
|
97
|
-
@project = project
|
98
|
-
end
|
99
|
-
|
100
|
-
# Access to a clean binding.
|
101
|
-
def __binding__
|
102
|
-
binding
|
103
|
-
end
|
104
|
-
|
105
|
-
# Provide access to project data.
|
106
|
-
def project
|
107
|
-
@project
|
108
|
-
end
|
109
|
-
|
110
|
-
#
|
111
|
-
def method_missing(name, *args)
|
112
|
-
if project.respond_to?(name)
|
113
|
-
project.__send__(name, *args)
|
114
|
-
elsif project.metadata.respond_to?(name)
|
115
|
-
project.metadata.__send__(name, *args)
|
116
|
-
else
|
117
|
-
super(name, *args)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
#
|
123
|
-
class BlockContext
|
124
|
-
#
|
125
|
-
attr :settings
|
126
|
-
|
127
|
-
#
|
128
|
-
def initialize(&block)
|
129
|
-
@settings = {}
|
130
|
-
if block.arity == 0
|
131
|
-
instance_eval(&block)
|
132
|
-
else
|
133
|
-
block.call(self)
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
#
|
138
|
-
def set(name, value=nil, &block)
|
139
|
-
if block
|
140
|
-
block_context = BlockContext.new
|
141
|
-
block.call(block_context)
|
142
|
-
@settings[name.to_s] = block_context.settings
|
143
|
-
else
|
144
|
-
@settings[name.to_s] = value
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
#
|
149
|
-
def method_missing(symbol, value=nil, *args)
|
150
|
-
case name = symbol.to_s
|
151
|
-
when /=$/
|
152
|
-
@settings[name.chomp('=')] = value
|
153
|
-
else
|
154
|
-
super(symbol, value=nil, *args)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
end
|
160
|
-
|
161
|
-
# NOTE: This is problematic, because a Scheudle file should really know from
|
162
|
-
# what file it was derived.
|
163
|
-
|
164
|
-
#
|
165
|
-
DOMAIN = "rubyworks.github.com/detroit,2011-05-27"
|
166
|
-
|
167
|
-
# TODO: If using Psych rather than Syck, then define a domain type.
|
168
|
-
|
169
|
-
#if defined?(Psych) #RUBY_VERSION >= '1.9'
|
170
|
-
# YAML::add_domain_type(DOMAIN, "schedule") do |type, hash|
|
171
|
-
# Schedule.load(hash)
|
172
|
-
# end
|
173
|
-
#else
|
174
|
-
YAML::add_builtin_type("schedule") do |type, value|
|
175
|
-
value
|
176
|
-
#case value
|
177
|
-
#when String
|
178
|
-
# Schedule.eval(value)
|
179
|
-
#when Hash
|
180
|
-
# Schedule.new(value)
|
181
|
-
#else
|
182
|
-
# raise "ERROR: Invalid Schedule"
|
183
|
-
#end
|
184
|
-
end
|
185
|
-
#end
|
186
|
-
|
187
|
-
end
|