cableguy 0.2.3 → 0.5.0.pre2
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.
- checksums.yaml +7 -0
- data/.gitignore +59 -1
- data/Gemfile +6 -5
- data/Gemfile.lock +38 -0
- data/LICENSE.md +20 -0
- data/README.md +28 -0
- data/Rakefile +23 -1
- data/bin/cable +2 -37
- data/cableguy.gemspec +15 -17
- data/lib/palmade/cableguy/builders/cable_chmod.rb +3 -5
- data/lib/palmade/cableguy/builders/cable_copy.rb +2 -5
- data/lib/palmade/cableguy/builders/cable_custom.rb +6 -3
- data/lib/palmade/cableguy/builders/cable_mkdir.rb +3 -6
- data/lib/palmade/cableguy/builders/cable_move.rb +2 -5
- data/lib/palmade/cableguy/builders/cable_symlink.rb +4 -7
- data/lib/palmade/cableguy/builders/cable_template.rb +25 -9
- data/lib/palmade/cableguy/builders.rb +7 -8
- data/lib/palmade/cableguy/cable.rb +1 -24
- data/lib/palmade/cableguy/cablefile.rb +107 -0
- data/lib/palmade/cableguy/cabler.rb +257 -53
- data/lib/palmade/cableguy/cabling_values.rb +54 -0
- data/lib/palmade/cableguy/cli.rb +232 -0
- data/lib/palmade/cableguy/cli_helper.rb +18 -0
- data/lib/palmade/cableguy/configurator.rb +19 -20
- data/lib/palmade/cableguy/constants.rb +17 -2
- data/lib/palmade/cableguy/db.rb +115 -66
- data/lib/palmade/cableguy/{cable_configurator.rb → legacy_configurator.rb} +1 -2
- data/lib/palmade/cableguy/migration.rb +37 -61
- data/lib/palmade/cableguy/migrator.rb +124 -0
- data/lib/palmade/cableguy/templatebinding.rb +23 -16
- data/lib/palmade/cableguy/utils.rb +6 -7
- data/lib/palmade/cableguy/version.rb +1 -1
- data/lib/palmade/cableguy.rb +19 -34
- data/test/.cabling_values.yml +9 -0
- data/test/app/Cablefile +10 -0
- data/test/app/cabling/base/blog.rb +21 -0
- data/test/app/cabling/init.rb +16 -0
- data/test/app/config/templates/blog.yml +10 -0
- data/test/app_cabling_test.rb +33 -0
- data/test/boboot.rb +53 -0
- data/test/boot_test.rb +25 -0
- data/test/cablefile_test.rb +44 -0
- data/test/cabler_test.rb +45 -0
- data/test/cabling/base/blog.rb +17 -0
- data/test/cabling/init.rb +16 -0
- data/test/cabling_values_test.rb +24 -0
- data/test/cli_lock_test.rb +28 -0
- data/test/cli_test.rb +88 -0
- data/test/configure_test.rb +31 -0
- data/test/db_methods_test.rb +19 -0
- data/test/migrate_legacy_test.rb +34 -0
- data/test/migrate_test.rb +39 -0
- data/test/test_apply/config/blog.yml +10 -0
- data/test/test_helper.rb +81 -0
- metadata +93 -29
- data/Manifest +0 -19
- data/README +0 -1
- data/lib/palmade/cableguy/runner.rb +0 -44
@@ -16,6 +16,11 @@ module Palmade::Cableguy
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def include?(section)
|
20
|
+
@sections.include?(prep(section))
|
21
|
+
end
|
22
|
+
alias :has? :include?
|
23
|
+
|
19
24
|
def method_missing(method, *args, &block)
|
20
25
|
method = method.to_s
|
21
26
|
if method[-1,1] == '='
|
@@ -54,12 +59,7 @@ EVAL
|
|
54
59
|
end
|
55
60
|
end
|
56
61
|
|
57
|
-
def
|
58
|
-
@sections.include?(prep(section))
|
59
|
-
end
|
60
|
-
alias :has? :include?
|
61
|
-
|
62
|
-
def configure(file_path)
|
62
|
+
def configure_from_file(file_path)
|
63
63
|
if File.exists?(file_path)
|
64
64
|
fcontents = File.read(file_path)
|
65
65
|
self.instance_eval(fcontents, file_path)
|
@@ -69,19 +69,6 @@ EVAL
|
|
69
69
|
self
|
70
70
|
end
|
71
71
|
|
72
|
-
def call_section(section, *args)
|
73
|
-
section = prep(section)
|
74
|
-
if @sections.include?(section)
|
75
|
-
@sections[section].each do |block|
|
76
|
-
block.call(*(args + @args))
|
77
|
-
end
|
78
|
-
else
|
79
|
-
raise ArgumentError, "Section #{section} not defined."
|
80
|
-
end
|
81
|
-
end
|
82
|
-
alias :call :call_section
|
83
|
-
alias :include :call_section
|
84
|
-
|
85
72
|
protected
|
86
73
|
|
87
74
|
def prep(section)
|
@@ -108,6 +95,18 @@ EVAL
|
|
108
95
|
raise ArgumentError, "Unknown update command: #{command}"
|
109
96
|
end
|
110
97
|
end
|
98
|
+
|
99
|
+
def call_section(section, *args)
|
100
|
+
section = prep(section)
|
101
|
+
if @sections.include?(section)
|
102
|
+
@sections[section].each do |block|
|
103
|
+
block.call(*(args + @args))
|
104
|
+
end
|
105
|
+
else
|
106
|
+
raise ArgumentError, "Section #{section} not defined."
|
107
|
+
end
|
108
|
+
end
|
109
|
+
alias :call :call_section
|
110
|
+
alias :include :call_section
|
111
111
|
end
|
112
112
|
end
|
113
|
-
|
@@ -1,6 +1,21 @@
|
|
1
1
|
module Palmade::Cableguy
|
2
2
|
module Constants
|
3
|
-
DB_DIRECTORY =
|
4
|
-
DB_EXTENSION =
|
3
|
+
DB_DIRECTORY = 'db'
|
4
|
+
DB_EXTENSION = 'sqlite3'
|
5
|
+
|
6
|
+
DEFAULT_CABLEFILE_NAME = 'Cablefile'
|
7
|
+
DEFAULT_LEGACY_CABLEFILE_NAME = 'config/cableguy.rb'
|
8
|
+
|
9
|
+
DEFAULT_CABLING_PATH = File.join(ENV['HOME'], 'cabling')
|
10
|
+
DEFAULT_CABLING_VALUES_PATH = File.join(ENV['HOME'], '.cabling_values.yml')
|
11
|
+
|
12
|
+
DEFAULT_LOCK_FILE = File.join('.cabling.yml')
|
13
|
+
DEFAULT_LOCK_PATH = File.join(ENV['HOME'], DEFAULT_LOCK_FILE)
|
14
|
+
|
15
|
+
DEFAULT_TARGET = 'development'
|
16
|
+
DEFAULT_LOCATION = nil
|
17
|
+
|
18
|
+
DEFAULT_TEMPLATES_PATH = 'config/templates'
|
19
|
+
DEPRECATED_DEFAULT_TARGET_PATH = 'config'
|
5
20
|
end
|
6
21
|
end
|
data/lib/palmade/cableguy/db.rb
CHANGED
@@ -1,96 +1,131 @@
|
|
1
|
+
require 'sequel'
|
2
|
+
require 'fileutils'
|
3
|
+
|
1
4
|
module Palmade::Cableguy
|
2
5
|
class DB
|
3
6
|
attr_reader :database
|
7
|
+
attr_reader :dataset
|
8
|
+
|
9
|
+
GLOBAL_GROUP = 'globals'
|
4
10
|
|
5
|
-
|
11
|
+
DEFAULT_OPTIONS = {
|
12
|
+
:save_db => nil
|
13
|
+
}
|
14
|
+
|
15
|
+
def initialize(cabler, options = { })
|
16
|
+
@options = DEFAULT_OPTIONS.merge(options)
|
6
17
|
@cabler = cabler
|
18
|
+
|
7
19
|
@database = nil
|
8
20
|
@sql_options = { :logger => @cabler.logger, :sql_log_level => :info }
|
9
21
|
|
10
22
|
if @cabler.options[:verbose]
|
11
23
|
@sql_options[:sql_log_level] = :debug
|
12
24
|
end
|
25
|
+
|
26
|
+
@migrated = false
|
13
27
|
end
|
14
28
|
|
15
29
|
def boot
|
16
|
-
|
17
|
-
|
18
|
-
|
30
|
+
if @options[:save_db].nil?
|
31
|
+
connect_string = 'sqlite:/'
|
32
|
+
else
|
33
|
+
FileUtils.mkpath(File.dirname(@options[:save_db]))
|
34
|
+
connect_string = 'sqlite://%s' % @options[:save_db]
|
35
|
+
end
|
19
36
|
|
37
|
+
@database = Sequel.connect(connect_string, @sql_options)
|
20
38
|
@dataset = @database[:cablingdatas]
|
21
|
-
end
|
22
39
|
|
23
|
-
|
24
|
-
|
25
|
-
@prefix_stack.push(key)
|
26
|
-
key = nil
|
27
|
-
end
|
40
|
+
@group_stack = [ ]
|
41
|
+
@prefix_stack = [ ]
|
28
42
|
|
29
|
-
|
43
|
+
self
|
30
44
|
end
|
31
45
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
46
|
+
def prepare_for_use
|
47
|
+
prepare_table
|
48
|
+
end
|
35
49
|
|
36
|
-
|
50
|
+
def group(group, &block)
|
51
|
+
@group_stack.push(group.to_s)
|
52
|
+
|
53
|
+
if block_given?
|
54
|
+
begin
|
55
|
+
@database.transaction do
|
56
|
+
yield
|
57
|
+
end
|
58
|
+
ensure
|
59
|
+
@group_stack.pop
|
60
|
+
end
|
61
|
+
end
|
37
62
|
|
38
|
-
|
63
|
+
group
|
39
64
|
end
|
40
65
|
|
41
|
-
def
|
42
|
-
group
|
43
|
-
|
44
|
-
key = final_key(key)
|
66
|
+
def globals(&block)
|
67
|
+
group(GLOBAL_GROUP, &block)
|
68
|
+
end
|
45
69
|
|
46
|
-
|
47
|
-
|
70
|
+
def prefix(prefix, &block)
|
71
|
+
@prefix_stack.push(prefix)
|
72
|
+
yield
|
73
|
+
ensure
|
74
|
+
@prefix_stack.pop
|
48
75
|
end
|
49
76
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
77
|
+
def final_key(key, group)
|
78
|
+
if key =~ /^([A-Za-z0-9\_]*)\:([A-Za-z0-9\_\-\.]+)$/
|
79
|
+
group = $~[1]
|
80
|
+
key = $~[2]
|
81
|
+
else
|
82
|
+
group = @group_stack.last if group.nil?
|
53
83
|
|
54
|
-
|
84
|
+
unless @prefix_stack.empty?
|
85
|
+
key = (@prefix_stack + [ key ]).join('.')
|
86
|
+
end
|
87
|
+
end
|
55
88
|
|
56
|
-
|
89
|
+
[ key, group ]
|
57
90
|
end
|
58
91
|
|
59
|
-
def
|
60
|
-
|
92
|
+
def final_value(group, key, value)
|
93
|
+
val_key = '%s:%s' % [ group, key ]
|
61
94
|
|
62
|
-
@
|
63
|
-
|
64
|
-
end
|
95
|
+
g = @cabler.values.fetch(group, { })
|
96
|
+
g.fetch(key, value)
|
65
97
|
end
|
66
98
|
|
67
|
-
def
|
68
|
-
|
99
|
+
def set(key, value, group = nil)
|
100
|
+
key, group = final_key(key, group)
|
101
|
+
value = final_value(group, key, value)
|
69
102
|
|
70
|
-
@
|
71
|
-
|
103
|
+
if @dataset.where(:key => key, :group => group).count > 0
|
104
|
+
@dataset.filter(:key => key, :group => group).update(:value => value)
|
105
|
+
else
|
106
|
+
@dataset.insert(:key => key, :group => group, :value => value)
|
72
107
|
end
|
73
108
|
end
|
74
109
|
|
75
|
-
def
|
76
|
-
|
77
|
-
|
110
|
+
def update(key, value, group = nil)
|
111
|
+
key, group = final_key(key, group)
|
112
|
+
value = final_value(group, key, value)
|
78
113
|
|
79
|
-
|
114
|
+
@dataset.filter(:key => key, :group => group).update(:value => value)
|
80
115
|
end
|
81
116
|
|
82
|
-
def
|
83
|
-
|
117
|
+
def delete_key(key, group = nil)
|
118
|
+
key, group = final_key(key, group)
|
119
|
+
|
120
|
+
@dataset.filter(:key => key, :group => group).delete
|
84
121
|
end
|
85
122
|
|
86
|
-
def has_key?(key, group)
|
87
|
-
group
|
123
|
+
def has_key?(key, group = nil)
|
124
|
+
key, group = final_key(key, group)
|
88
125
|
|
89
126
|
val = @dataset.where(:key => key, :group => group).count
|
90
|
-
|
91
127
|
if val == 0
|
92
|
-
val = @dataset.where(:key => key, :group =>
|
93
|
-
|
128
|
+
val = @dataset.where(:key => key, :group => GLOBAL_GROUP).count
|
94
129
|
val == 0 ? false : true
|
95
130
|
else
|
96
131
|
true
|
@@ -98,35 +133,31 @@ module Palmade::Cableguy
|
|
98
133
|
end
|
99
134
|
|
100
135
|
def get(key, group = nil)
|
101
|
-
group
|
136
|
+
key, group = final_key(key, group)
|
102
137
|
|
103
138
|
val = @dataset.where(:key => key, :group => group)
|
104
|
-
|
105
139
|
if val.empty?
|
106
|
-
val = @dataset.where(:key => key, :group =>
|
140
|
+
val = @dataset.where(:key => key, :group => GLOBAL_GROUP)
|
107
141
|
end
|
108
142
|
|
109
143
|
if val.count > 0
|
110
144
|
val.first[:value]
|
111
145
|
else
|
112
|
-
raise "key \'
|
146
|
+
raise "key \'%s\' cannot be found!" % key
|
113
147
|
end
|
114
148
|
end
|
115
149
|
|
116
150
|
def get_if_key_exists(key, group = nil)
|
117
|
-
group ||= @cabler.group.to_s
|
118
|
-
|
119
151
|
get(key, group) if has_key?(key, group)
|
120
152
|
end
|
121
153
|
|
122
154
|
def get_children(key, group = nil)
|
123
|
-
group
|
124
|
-
values = []
|
125
|
-
|
126
|
-
res = @dataset.where(:key.like("#{key}%"), :group => group)
|
155
|
+
key, group = final_key(key, group)
|
127
156
|
|
157
|
+
values = [ ]
|
158
|
+
res = @dataset.where(Sequel.like(:key, "#{key}%"), :group => group)
|
128
159
|
if res.empty?
|
129
|
-
res = @dataset.where(
|
160
|
+
res = @dataset.where(Sequel.like(:key, "#{key}%"), :group => GLOBAL_GROUP)
|
130
161
|
end
|
131
162
|
|
132
163
|
key = key.split('.')
|
@@ -140,19 +171,37 @@ module Palmade::Cableguy
|
|
140
171
|
if values.count > 0
|
141
172
|
values & values
|
142
173
|
else
|
143
|
-
raise "no values for \'
|
174
|
+
raise "no values for \'%s\'!" % key
|
144
175
|
end
|
145
176
|
end
|
146
177
|
|
147
|
-
def
|
148
|
-
|
149
|
-
|
178
|
+
def empty?
|
179
|
+
!@database.tables.include?(:cablingdatas) || @dataset.count == 0
|
180
|
+
end
|
181
|
+
|
182
|
+
def migrated?
|
183
|
+
@migrated == true
|
184
|
+
end
|
185
|
+
|
186
|
+
def migrated!
|
187
|
+
@migrated = true
|
188
|
+
end
|
189
|
+
|
190
|
+
def reset
|
191
|
+
if @database.tables.include?(:cablingdatas)
|
192
|
+
@dataset.truncate
|
150
193
|
end
|
151
194
|
|
152
|
-
@
|
153
|
-
|
154
|
-
|
155
|
-
|
195
|
+
@migrated = false
|
196
|
+
end
|
197
|
+
|
198
|
+
def prepare_table
|
199
|
+
unless @database.tables.include?(:cablingdatas)
|
200
|
+
@database.create_table(:cablingdatas) do
|
201
|
+
String :key
|
202
|
+
String :value
|
203
|
+
String :group
|
204
|
+
end
|
156
205
|
end
|
157
206
|
end
|
158
207
|
end
|
@@ -2,91 +2,67 @@ module Palmade::Cableguy
|
|
2
2
|
class Migration
|
3
3
|
attr_reader :cabler
|
4
4
|
attr_reader :db
|
5
|
+
attr_reader :cabling_path
|
5
6
|
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
@utils = Palmade::Cableguy::Utils
|
7
|
+
def self.use_klass_stack(klass_stack)
|
8
|
+
@@klass_stack = klass_stack
|
9
|
+
ret = yield
|
10
|
+
@@klass_stack = nil
|
11
|
+
klass_stack
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
file_stack = []
|
18
|
-
|
19
|
-
sort_directories.each do |p|
|
20
|
-
path = File.join(@cabling_path, p)
|
21
|
-
|
22
|
-
if p == 'targets'
|
23
|
-
if !@cabler.location.nil? && @cabler.location != @cabler.target
|
24
|
-
f = File.join(path, "#{@cabler.target}_#{@cabler.location}.rb")
|
25
|
-
else
|
26
|
-
f = File.join(path, "#{@cabler.target}.rb")
|
27
|
-
end
|
28
|
-
|
29
|
-
if File.exists?(f)
|
30
|
-
require f
|
31
|
-
file_stack.push(f)
|
32
|
-
else
|
33
|
-
raise "File #{f} doesn't exist!"
|
34
|
-
end
|
35
|
-
elsif p == '.'
|
36
|
-
if File.exist?(File.join(path, 'custom.rb'))
|
37
|
-
f = Dir["#{path}/custom.rb"].shift
|
38
|
-
require f
|
39
|
-
file_stack.push(f)
|
40
|
-
end
|
41
|
-
else
|
42
|
-
Dir["#{path}/*.rb"].each do |d|
|
43
|
-
require d
|
44
|
-
file_stack.push(d)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
file_stack.each do |f|
|
49
|
-
class_name = File.basename(f).chomp(".rb")
|
50
|
-
camelized_class_name = (@utils.camelize(class_name))
|
51
|
-
klass = Palmade::Cableguy::Migrations.const_get(camelized_class_name)
|
52
|
-
k = klass.new(@cabler)
|
53
|
-
k.migrate!
|
54
|
-
end
|
55
|
-
file_stack.clear
|
14
|
+
def self.inherited(subclass)
|
15
|
+
if defined?(@@klass_stack) && !@@klass_stack.nil?
|
16
|
+
@@klass_stack << subclass
|
56
17
|
end
|
57
18
|
end
|
58
19
|
|
59
|
-
def
|
60
|
-
|
20
|
+
def initialize(cabler)
|
21
|
+
@cabler = cabler
|
22
|
+
@db = cabler.db
|
23
|
+
@cabling_path = cabler.cabling_path
|
61
24
|
end
|
62
25
|
|
63
|
-
|
64
|
-
raise "class #{self.class.name} doesn't have a migrate method. Override!"
|
65
|
-
end
|
26
|
+
protected
|
66
27
|
|
67
28
|
def set(key, value, set = nil)
|
68
|
-
|
29
|
+
db.set(key, value, set)
|
30
|
+
end
|
31
|
+
|
32
|
+
def update(key, value)
|
33
|
+
db.update(key, value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def get(key)
|
37
|
+
db.get(key)
|
69
38
|
end
|
70
39
|
|
71
40
|
def group(group, &block)
|
72
|
-
|
73
|
-
@db.group(@group, &block)
|
41
|
+
db.group(group, &block)
|
74
42
|
end
|
75
43
|
|
76
44
|
def globals(&block)
|
77
|
-
|
45
|
+
db.globals(&block)
|
78
46
|
end
|
79
47
|
|
80
48
|
def prefix(prefix, &block)
|
81
|
-
|
49
|
+
db.prefix(prefix, &block)
|
82
50
|
end
|
83
51
|
|
84
52
|
def delete_key(key, group = nil)
|
85
|
-
|
53
|
+
db.delete_key(key, group)
|
86
54
|
end
|
87
55
|
|
88
|
-
def
|
89
|
-
|
56
|
+
def values
|
57
|
+
cabler.values
|
58
|
+
end
|
59
|
+
|
60
|
+
def pre_migrate; end
|
61
|
+
|
62
|
+
def post_migrate; end
|
63
|
+
|
64
|
+
def migrate!
|
65
|
+
raise "class %s doesn't have a migrate! method. Override!" % self.class.name
|
90
66
|
end
|
91
67
|
end
|
92
68
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module Palmade::Cableguy
|
2
|
+
class Migrator
|
3
|
+
attr_reader :cabler
|
4
|
+
attr_reader :db
|
5
|
+
attr_reader :cabling_path
|
6
|
+
|
7
|
+
attr_accessor :klass_stack
|
8
|
+
attr_accessor :file_stack
|
9
|
+
attr_accessor :instance_stack
|
10
|
+
|
11
|
+
DIR_TREE = [ 'base', 'targets', '.' ]
|
12
|
+
|
13
|
+
DEFAULT_OPTS = {
|
14
|
+
:unload_cabling => true
|
15
|
+
}
|
16
|
+
|
17
|
+
def self.boot(cabler, cabling_path, opts = { })
|
18
|
+
Migrator.new(cabler, cabling_path, opts).tap { |o| o.boot }
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize(cabler, cabling_path, opts = { })
|
22
|
+
@options = DEFAULT_OPTS.merge(opts)
|
23
|
+
|
24
|
+
@cabler = cabler
|
25
|
+
@db = cabler.db
|
26
|
+
@cabling_path = cabling_path
|
27
|
+
|
28
|
+
@file_stack = [ ]
|
29
|
+
@klass_stack = [ ]
|
30
|
+
@instance_stack = [ ]
|
31
|
+
end
|
32
|
+
|
33
|
+
def boot
|
34
|
+
init_file = File.join(cabling_path, 'init.rb')
|
35
|
+
require init_file if File.exist?(init_file)
|
36
|
+
end
|
37
|
+
|
38
|
+
def load_cabling
|
39
|
+
if @instance_stack.empty?
|
40
|
+
search_for_files
|
41
|
+
require_files_once
|
42
|
+
instantiate_klasses
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def unload_cabling
|
47
|
+
@klass_stack.each do |k|
|
48
|
+
klass_name = k.name
|
49
|
+
|
50
|
+
knames = klass_name.split('::')
|
51
|
+
if knames.count > 1
|
52
|
+
const_name = knames.pop
|
53
|
+
parent_module = ::Object.module_eval('::%s' % knames.join('::'), __FILE__, __LINE__)
|
54
|
+
else
|
55
|
+
parent_module = ::Object
|
56
|
+
const_name = knames[0]
|
57
|
+
end
|
58
|
+
|
59
|
+
parent_module.send(:remove_const, const_name.to_sym)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def run!
|
64
|
+
load_cabling
|
65
|
+
|
66
|
+
run_all_migrations(:pre_migrate)
|
67
|
+
run_all_migrations(:migrate!)
|
68
|
+
run_all_migrations(:post_migrate)
|
69
|
+
|
70
|
+
if @options[:unload_cabling]
|
71
|
+
unload_cabling
|
72
|
+
end
|
73
|
+
|
74
|
+
self
|
75
|
+
end
|
76
|
+
|
77
|
+
protected
|
78
|
+
|
79
|
+
def instantiate_klasses
|
80
|
+
@klass_stack.each do |klass|
|
81
|
+
@instance_stack << klass.new(cabler)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def run_all_migrations(migration)
|
86
|
+
@instance_stack.each do |i|
|
87
|
+
i.send(migration)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def require_files_once
|
92
|
+
Palmade::Cableguy::Migration.use_klass_stack(@klass_stack) do
|
93
|
+
file_stack.each { |file| load(file) }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def directory_tree; DIR_TREE; end
|
98
|
+
|
99
|
+
def search_for_files
|
100
|
+
directory_tree.each do |child|
|
101
|
+
path = File.join(cabling_path, child)
|
102
|
+
|
103
|
+
case child
|
104
|
+
when 'targets'
|
105
|
+
if !cabler.location.nil? && !cabler.location.empty? && cabler.location != cabler.target
|
106
|
+
file = File.join(path, '%s_%s.rb' % [ cabler.target, cabler.location ])
|
107
|
+
else
|
108
|
+
file = File.join(path, '%s.rb' % cabler.target)
|
109
|
+
end
|
110
|
+
|
111
|
+
if File.exists?(file)
|
112
|
+
file_stack.push(file)
|
113
|
+
end
|
114
|
+
when '.'
|
115
|
+
if File.exist?(File.join(path, 'custom.rb'))
|
116
|
+
file_stack.push(Dir['%s/custom.rb' % path].shift)
|
117
|
+
end
|
118
|
+
else
|
119
|
+
Dir['%s/*.rb' % path].each { |file| file_stack.push(file) }
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -2,7 +2,6 @@ module Palmade::Cableguy
|
|
2
2
|
class TemplateBinding
|
3
3
|
attr_reader :cable
|
4
4
|
attr_reader :cabler
|
5
|
-
attr_reader :cabling
|
6
5
|
attr_reader :arg_hash
|
7
6
|
attr_reader :target
|
8
7
|
attr_reader :location
|
@@ -10,20 +9,26 @@ module Palmade::Cableguy
|
|
10
9
|
attr_reader :reserved_keys
|
11
10
|
attr_accessor :output_buffer
|
12
11
|
|
13
|
-
def
|
12
|
+
def self.require_erb
|
13
|
+
require 'erb'
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(cable, cabler)
|
14
17
|
@cable = cable
|
15
18
|
@cabler = cabler
|
16
|
-
|
17
|
-
@target = target
|
19
|
+
|
20
|
+
@target = @cabler.target
|
18
21
|
@location = @cabler.location
|
22
|
+
|
19
23
|
@arg_hash = @cable.args[2]
|
20
24
|
@db = @cabler.db
|
21
|
-
@key_prefix = []
|
22
|
-
|
25
|
+
@key_prefix = [ ]
|
26
|
+
|
27
|
+
@reserved_keys = ['target', 'location', 'cabler']
|
23
28
|
end
|
24
29
|
|
25
30
|
def join_keys(key)
|
26
|
-
|
31
|
+
'%s.%s' % [ @key_prefix.join('.'), key ]
|
27
32
|
end
|
28
33
|
|
29
34
|
def has_key?(key, group = nil)
|
@@ -84,24 +89,27 @@ module Palmade::Cableguy
|
|
84
89
|
end
|
85
90
|
|
86
91
|
def parse(file_path)
|
87
|
-
|
88
|
-
fcontents = File.read(file_path)
|
92
|
+
self.class.require_erb
|
89
93
|
|
94
|
+
fcontents = File.read(file_path)
|
90
95
|
parsed = ERB.new(fcontents, nil, "-%>", "@output_buffer").result(binding)
|
91
|
-
parsed = special_parse(parsed
|
96
|
+
parsed = special_parse(parsed)
|
92
97
|
end
|
93
98
|
|
94
99
|
def special_parse(parsed, delim = [ '{', '}' ], cabling_only = false)
|
95
|
-
delim0 = "
|
96
|
-
delim1 = "
|
100
|
+
delim0 = "\\%s" % delim[0]
|
101
|
+
delim1 = "\\%s" % delim[1]
|
97
102
|
|
98
|
-
|
99
|
-
|
103
|
+
holders_re = '%s(([A-Za-z0-9\_]+)\:)?([A-Za-z0-9\.\_\-]+)%s' % [ delim0, delim1 ]
|
104
|
+
|
105
|
+
parsed = parsed.gsub(/#{holders_re}/) do |match|
|
106
|
+
group = $2
|
107
|
+
found = $3
|
100
108
|
|
101
109
|
if @reserved_keys.include?(found)
|
102
110
|
eval_ret = self.send(found)
|
103
111
|
else
|
104
|
-
eval_ret = get(found)
|
112
|
+
eval_ret = get(found, group)
|
105
113
|
end
|
106
114
|
end
|
107
115
|
end
|
@@ -134,4 +142,3 @@ module Palmade::Cableguy
|
|
134
142
|
end
|
135
143
|
end
|
136
144
|
end
|
137
|
-
|