tern 0.6.1 → 0.7.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/README.markdown +32 -0
- data/lib/tern.rb +13 -1
- data/spec/projects/erb/alterations/001_create_people.sql.example +16 -0
- data/spec/projects/erb/config.yml +15 -0
- data/spec/projects/erb/definitions/render_file.sql +2 -0
- data/spec/projects/erb/definitions/rendered_function.sql +7 -0
- data/spec/projects/erb/definitions/sequence.yml +20 -0
- data/spec/projects/erb/definitions/ultimate_answer.sql +7 -0
- data/spec/tern_spec.rb +10 -0
- data/tern.gemspec +1 -1
- metadata +30 -4
data/README.markdown
CHANGED
@@ -178,7 +178,39 @@ Multiple sequences may be specified and they will be run in the order they are
|
|
178
178
|
listed.
|
179
179
|
|
180
180
|
tern migrate --definition-sequences=expensive default
|
181
|
+
|
182
|
+
ERB
|
183
|
+
===
|
181
184
|
|
185
|
+
Alterations and definitions are run through ERB. Subtemplates may be
|
186
|
+
included with the render_file method. Instance variables will be
|
187
|
+
available in the subtemplates.
|
188
|
+
|
189
|
+
definitions/render_file.sql
|
190
|
+
|
191
|
+
<% @num_from_outer_template = 7 %>
|
192
|
+
<%= render_file "definitions/rendered_function.sql" %>
|
193
|
+
|
194
|
+
definitions/rendered_function.sql
|
195
|
+
|
196
|
+
CREATE FUNCTION rendered_function() RETURNS integer AS $$
|
197
|
+
SELECT <%= @num_from_outer_template %>;
|
198
|
+
$$ LANGUAGE SQL;
|
199
|
+
|
200
|
+
---- CREATE above / DROP below ----
|
201
|
+
|
202
|
+
DROP FUNCTION rendered_function();
|
203
|
+
|
204
|
+
This will result in:
|
205
|
+
|
206
|
+
CREATE FUNCTION rendered_function() RETURNS integer AS $$
|
207
|
+
SELECT 7;
|
208
|
+
$$ LANGUAGE SQL;
|
209
|
+
|
210
|
+
---- CREATE above / DROP below ----
|
211
|
+
|
212
|
+
DROP FUNCTION rendered_function();
|
213
|
+
|
182
214
|
License
|
183
215
|
=======
|
184
216
|
|
data/lib/tern.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
require 'sequel'
|
2
2
|
require 'yaml'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
class Parser
|
6
|
+
def render_text(text)
|
7
|
+
ERB.new(text).result(binding)
|
8
|
+
end
|
9
|
+
|
10
|
+
def render_file(file_path)
|
11
|
+
string = File.read file_path
|
12
|
+
render_text(string)
|
13
|
+
end
|
14
|
+
end
|
3
15
|
|
4
16
|
class Change
|
5
17
|
SPLIT_MARKER = '---- CREATE above / DROP below ----'
|
6
18
|
|
7
19
|
def self.parse(string)
|
8
|
-
create_sql, drop_sql = string.split(
|
20
|
+
create_sql, drop_sql = Parser.new.render_text(string).split(SPLIT_MARKER)
|
9
21
|
[create_sql, drop_sql]
|
10
22
|
end
|
11
23
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
alterations:
|
2
|
+
table: tern_alterations
|
3
|
+
column: version
|
4
|
+
definitions:
|
5
|
+
table: tern_definitions
|
6
|
+
environments:
|
7
|
+
development:
|
8
|
+
adapter: postgres
|
9
|
+
database: tern_test_development
|
10
|
+
test:
|
11
|
+
adapter: postgres
|
12
|
+
database: tern_test_test
|
13
|
+
production:
|
14
|
+
adapter: postgres
|
15
|
+
database: tern_test_production
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Put the relative path to your definition files in the sequence they should run.
|
2
|
+
#
|
3
|
+
# Most definitions should go in the default list. These will be dropped and
|
4
|
+
# recreated every migration.
|
5
|
+
#
|
6
|
+
# Definitions that should not automatically be dropped and created can be put in
|
7
|
+
# different lists. This is useful for definitions that make take prohibitively
|
8
|
+
# to drop and create every migration such as check constraints.
|
9
|
+
#
|
10
|
+
# Run alternative sequences by specifying sequences in order to migrate command.
|
11
|
+
# Example: rake migrate sequences=expensive,default
|
12
|
+
#
|
13
|
+
# default:
|
14
|
+
# - ultimate_answer.sql
|
15
|
+
# expensive:
|
16
|
+
# - super_slow_check_constraint.sql
|
17
|
+
|
18
|
+
default:
|
19
|
+
- ultimate_answer.sql
|
20
|
+
- render_file.sql
|
data/spec/tern_spec.rb
CHANGED
@@ -181,6 +181,16 @@ describe "tern" do
|
|
181
181
|
tern_migrate "spec/projects/definitions"
|
182
182
|
@dev_db.get{ultimate_answer{}}.should == 42
|
183
183
|
end
|
184
|
+
|
185
|
+
it "runs definitions through erb" do
|
186
|
+
tern_migrate "spec/projects/erb"
|
187
|
+
@dev_db.get{ultimate_answer{}}.should == 42
|
188
|
+
end
|
189
|
+
|
190
|
+
it "runs definitions through erb - render_file" do
|
191
|
+
tern_migrate "spec/projects/erb"
|
192
|
+
@dev_db.get{rendered_function{}}.should == 7
|
193
|
+
end
|
184
194
|
|
185
195
|
it "drops definitions" do
|
186
196
|
tern_migrate "spec/projects/definitions"
|
data/tern.gemspec
CHANGED
metadata
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 7
|
8
|
+
- 0
|
9
|
+
version: 0.7.0
|
6
10
|
platform: ruby
|
7
11
|
authors:
|
8
12
|
- Jack Christensen
|
@@ -10,7 +14,7 @@ autorequire:
|
|
10
14
|
bindir: bin
|
11
15
|
cert_chain: []
|
12
16
|
|
13
|
-
date: 2011-
|
17
|
+
date: 2011-04-06 00:00:00 -05:00
|
14
18
|
default_executable:
|
15
19
|
dependencies:
|
16
20
|
- !ruby/object:Gem::Dependency
|
@@ -21,6 +25,10 @@ dependencies:
|
|
21
25
|
requirements:
|
22
26
|
- - ">="
|
23
27
|
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 3
|
30
|
+
- 19
|
31
|
+
- 0
|
24
32
|
version: 3.19.0
|
25
33
|
type: :runtime
|
26
34
|
version_requirements: *id001
|
@@ -32,6 +40,10 @@ dependencies:
|
|
32
40
|
requirements:
|
33
41
|
- - ">="
|
34
42
|
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
- 14
|
46
|
+
- 6
|
35
47
|
version: 0.14.6
|
36
48
|
type: :runtime
|
37
49
|
version_requirements: *id002
|
@@ -43,6 +55,10 @@ dependencies:
|
|
43
55
|
requirements:
|
44
56
|
- - ">="
|
45
57
|
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 2
|
60
|
+
- 4
|
61
|
+
- 0
|
46
62
|
version: 2.4.0
|
47
63
|
type: :development
|
48
64
|
version_requirements: *id003
|
@@ -94,6 +110,12 @@ files:
|
|
94
110
|
- spec/projects/duplicated_alteration/config.yml
|
95
111
|
- spec/projects/duplicated_alteration/definitions/sequence.yml
|
96
112
|
- spec/projects/duplicated_alteration/definitions/ultimate_answer.sql.example
|
113
|
+
- spec/projects/erb/alterations/001_create_people.sql.example
|
114
|
+
- spec/projects/erb/config.yml
|
115
|
+
- spec/projects/erb/definitions/render_file.sql
|
116
|
+
- spec/projects/erb/definitions/rendered_function.sql
|
117
|
+
- spec/projects/erb/definitions/sequence.yml
|
118
|
+
- spec/projects/erb/definitions/ultimate_answer.sql
|
97
119
|
- spec/projects/irreversible_alterations/alterations/001_create_people.sql
|
98
120
|
- spec/projects/irreversible_alterations/alterations/002_create_animals.sql
|
99
121
|
- spec/projects/irreversible_alterations/alterations/003_create_plants.sql
|
@@ -136,17 +158,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
136
158
|
requirements:
|
137
159
|
- - ">="
|
138
160
|
- !ruby/object:Gem::Version
|
161
|
+
segments:
|
162
|
+
- 0
|
139
163
|
version: "0"
|
140
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
165
|
none: false
|
142
166
|
requirements:
|
143
167
|
- - ">="
|
144
168
|
- !ruby/object:Gem::Version
|
169
|
+
segments:
|
170
|
+
- 0
|
145
171
|
version: "0"
|
146
172
|
requirements: []
|
147
173
|
|
148
174
|
rubyforge_project:
|
149
|
-
rubygems_version: 1.
|
175
|
+
rubygems_version: 1.3.7
|
150
176
|
signing_key:
|
151
177
|
specification_version: 3
|
152
178
|
summary: The SQL Fan's Migrator
|