fx 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +58 -0
- data/.gitignore +0 -1
- data/.rspec +1 -1
- data/.standard.yml +3 -0
- data/CONTRIBUTING.md +12 -3
- data/Gemfile +1 -1
- data/README.md +2 -2
- data/Rakefile +2 -1
- data/bin/setup +0 -4
- data/fx.gemspec +20 -22
- data/lib/fx/function.rb +4 -4
- data/lib/fx/statements/function.rb +3 -5
- data/lib/fx/statements/trigger.rb +8 -10
- data/lib/fx/version.rb +1 -1
- data/lib/fx.rb +3 -3
- data/lib/generators/fx/function/function_generator.rb +6 -6
- data/lib/generators/fx/trigger/trigger_generator.rb +6 -6
- data/spec/acceptance/user_manages_functions_spec.rb +1 -1
- data/spec/acceptance/user_manages_triggers_spec.rb +2 -2
- data/spec/acceptance_helper.rb +4 -2
- data/spec/dummy/Rakefile +4 -4
- data/spec/dummy/bin/bundle +2 -2
- data/spec/dummy/bin/rails +3 -3
- data/spec/dummy/bin/rake +2 -2
- data/spec/dummy/config/application.rb +2 -0
- data/spec/dummy/config/database.yml +2 -0
- data/spec/dummy/config.ru +1 -1
- data/spec/features/functions/migrations_spec.rb +1 -1
- data/spec/features/functions/revert_spec.rb +4 -4
- data/spec/features/triggers/migrations_spec.rb +2 -2
- data/spec/features/triggers/revert_spec.rb +8 -8
- data/spec/fx/adapters/postgres/triggers_spec.rb +3 -3
- data/spec/fx/adapters/postgres_spec.rb +2 -2
- data/spec/fx/command_recorder/arguments_spec.rb +4 -4
- data/spec/fx/command_recorder_spec.rb +23 -23
- data/spec/fx/definition_spec.rb +6 -6
- data/spec/fx/function_spec.rb +8 -8
- data/spec/fx/schema_dumper/function_spec.rb +14 -16
- data/spec/fx/schema_dumper/trigger_spec.rb +3 -3
- data/spec/fx/statements/function_spec.rb +17 -17
- data/spec/fx/statements/trigger_spec.rb +20 -20
- data/spec/fx/trigger_spec.rb +6 -6
- data/spec/generators/fx/function/function_generator_spec.rb +3 -3
- data/spec/support/definition_helpers.rb +4 -4
- data/spec/support/generator_setup.rb +1 -1
- data/spec/support/migration_helpers.rb +1 -1
- metadata +26 -73
- data/.hound.yml +0 -2
- data/.rubocop.yml +0 -648
- data/.travis.yml +0 -60
- data/Appraisals +0 -45
- data/bin/appraisal +0 -17
- data/gemfiles/rails42.gemfile +0 -10
- data/gemfiles/rails50.gemfile +0 -8
- data/gemfiles/rails51.gemfile +0 -8
- data/gemfiles/rails52.gemfile +0 -8
- data/gemfiles/rails60.gemfile +0 -8
- data/gemfiles/rails61.gemfile +0 -8
- data/gemfiles/rails_edge.gemfile +0 -8
@@ -22,11 +22,11 @@ describe "Reverting migrations", :db do
|
|
22
22
|
CREATE TRIGGER uppercase_users_name
|
23
23
|
BEFORE INSERT ON users
|
24
24
|
FOR EACH ROW
|
25
|
-
EXECUTE
|
25
|
+
EXECUTE FUNCTION uppercase_users_name();
|
26
26
|
EOS
|
27
27
|
with_trigger_definition(
|
28
28
|
name: :uppercase_users_name,
|
29
|
-
sql_definition: sql_definition
|
29
|
+
sql_definition: sql_definition
|
30
30
|
) do
|
31
31
|
example.run
|
32
32
|
end
|
@@ -57,10 +57,10 @@ describe "Reverting migrations", :db do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
expect { run_migration(good_migration, [:up, :down]) }.not_to raise_error
|
60
|
-
expect { run_migration(bad_migration, [:up, :down]) }
|
61
|
-
to raise_error(
|
60
|
+
expect { run_migration(bad_migration, [:up, :down]) }
|
61
|
+
.to raise_error(
|
62
62
|
ActiveRecord::IrreversibleMigration,
|
63
|
-
/`create_trigger` is reversible only if given a `revert_to_version
|
63
|
+
/`create_trigger` is reversible only if given a `revert_to_version`/
|
64
64
|
)
|
65
65
|
end
|
66
66
|
|
@@ -71,12 +71,12 @@ describe "Reverting migrations", :db do
|
|
71
71
|
CREATE TRIGGER uppercase_users_name
|
72
72
|
BEFORE UPDATE ON users
|
73
73
|
FOR EACH ROW
|
74
|
-
EXECUTE
|
74
|
+
EXECUTE FUNCTION uppercase_users_name();
|
75
75
|
EOS
|
76
76
|
with_trigger_definition(
|
77
77
|
name: :uppercase_users_name,
|
78
78
|
sql_definition: sql_definition,
|
79
|
-
version: 2
|
79
|
+
version: 2
|
80
80
|
) do
|
81
81
|
migration = Class.new(migration_class) do
|
82
82
|
def change
|
@@ -84,7 +84,7 @@ describe "Reverting migrations", :db do
|
|
84
84
|
:uppercase_users_name,
|
85
85
|
on: :users,
|
86
86
|
version: 2,
|
87
|
-
revert_to_version: 1
|
87
|
+
revert_to_version: 1
|
88
88
|
)
|
89
89
|
end
|
90
90
|
end
|
@@ -26,7 +26,7 @@ module Fx
|
|
26
26
|
CREATE TRIGGER uppercase_users_name
|
27
27
|
BEFORE INSERT ON users
|
28
28
|
FOR EACH ROW
|
29
|
-
EXECUTE
|
29
|
+
EXECUTE FUNCTION uppercase_users_name();
|
30
30
|
EOS
|
31
31
|
|
32
32
|
triggers = Postgres::Triggers.new(connection).all
|
@@ -35,9 +35,9 @@ module Fx
|
|
35
35
|
expect(triggers.size).to eq 1
|
36
36
|
expect(first.name).to eq "uppercase_users_name"
|
37
37
|
expect(first.definition).to include("BEFORE INSERT")
|
38
|
-
expect(first.definition).to match(/ON [public
|
38
|
+
expect(first.definition).to match(/ON [public.ser|]/)
|
39
39
|
expect(first.definition).to include("FOR EACH ROW")
|
40
|
-
expect(first.definition).to include("EXECUTE
|
40
|
+
expect(first.definition).to include("EXECUTE FUNCTION uppercase_users_name()")
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
@@ -44,7 +44,7 @@ module Fx::Adapters
|
|
44
44
|
CREATE TRIGGER uppercase_users_name
|
45
45
|
BEFORE INSERT ON users
|
46
46
|
FOR EACH ROW
|
47
|
-
EXECUTE
|
47
|
+
EXECUTE FUNCTION uppercase_users_name();
|
48
48
|
EOS
|
49
49
|
)
|
50
50
|
|
@@ -135,7 +135,7 @@ module Fx::Adapters
|
|
135
135
|
CREATE TRIGGER uppercase_users_name
|
136
136
|
BEFORE INSERT ON users
|
137
137
|
FOR EACH ROW
|
138
|
-
EXECUTE
|
138
|
+
EXECUTE FUNCTION uppercase_users_name()
|
139
139
|
EOS
|
140
140
|
adapter.create_trigger(sql_definition)
|
141
141
|
|
@@ -4,7 +4,7 @@ module Fx::CommandRecorder
|
|
4
4
|
describe Arguments do
|
5
5
|
describe "#function" do
|
6
6
|
it "returns the function name" do
|
7
|
-
raw_args = [:spaceships, {
|
7
|
+
raw_args = [:spaceships, {foo: :bar}]
|
8
8
|
args = Arguments.new(raw_args)
|
9
9
|
|
10
10
|
expect(args.function).to eq :spaceships
|
@@ -13,14 +13,14 @@ module Fx::CommandRecorder
|
|
13
13
|
|
14
14
|
describe "#revert_to_version" do
|
15
15
|
it "is the revert_to_version from the keyword arguments" do
|
16
|
-
raw_args = [:spaceships, {
|
16
|
+
raw_args = [:spaceships, {revert_to_version: 42}]
|
17
17
|
args = Arguments.new(raw_args)
|
18
18
|
|
19
19
|
expect(args.revert_to_version).to eq 42
|
20
20
|
end
|
21
21
|
|
22
22
|
it "is nil if the revert_to_version was not supplied" do
|
23
|
-
raw_args = [:spaceships, {
|
23
|
+
raw_args = [:spaceships, {foo: :bar}]
|
24
24
|
args = Arguments.new(raw_args)
|
25
25
|
|
26
26
|
expect(args.revert_to_version).to be nil
|
@@ -29,7 +29,7 @@ module Fx::CommandRecorder
|
|
29
29
|
|
30
30
|
describe "#invert_version" do
|
31
31
|
it "returns object with version set to revert_to_version" do
|
32
|
-
raw_args = [:meatballs, {
|
32
|
+
raw_args = [:meatballs, {version: 42, revert_to_version: 15}]
|
33
33
|
|
34
34
|
inverted_args = Arguments.new(raw_args).invert_version
|
35
35
|
|
@@ -38,8 +38,8 @@ describe Fx::CommandRecorder, :db do
|
|
38
38
|
|
39
39
|
it "reverts to create_function with specified revert_to_version" do
|
40
40
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
41
|
-
args = [:test, {
|
42
|
-
revert_args = [:test, {
|
41
|
+
args = [:test, {revert_to_version: 3}]
|
42
|
+
revert_args = [:test, {version: 3}]
|
43
43
|
|
44
44
|
recorder.revert { recorder.drop_function(*args) }
|
45
45
|
|
@@ -48,17 +48,17 @@ describe Fx::CommandRecorder, :db do
|
|
48
48
|
|
49
49
|
it "raises when reverting without revert_to_version set" do
|
50
50
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
51
|
-
args = [:test, {
|
51
|
+
args = [:test, {another_argument: 1}]
|
52
52
|
|
53
|
-
expect { recorder.revert { recorder.drop_function(*args) } }
|
54
|
-
to raise_error(ActiveRecord::IrreversibleMigration)
|
53
|
+
expect { recorder.revert { recorder.drop_function(*args) } }
|
54
|
+
.to raise_error(ActiveRecord::IrreversibleMigration)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
describe "#update_function" do
|
59
59
|
it "records the updated function" do
|
60
60
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
61
|
-
args = [:test, {
|
61
|
+
args = [:test, {version: 2}]
|
62
62
|
|
63
63
|
recorder.update_function(*args)
|
64
64
|
|
@@ -67,8 +67,8 @@ describe Fx::CommandRecorder, :db do
|
|
67
67
|
|
68
68
|
it "reverts to update_function with the specified revert_to_version" do
|
69
69
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
70
|
-
args = [:test, {
|
71
|
-
revert_args = [:test, {
|
70
|
+
args = [:test, {version: 2, revert_to_version: 1}]
|
71
|
+
revert_args = [:test, {version: 1}]
|
72
72
|
|
73
73
|
recorder.revert { recorder.update_function(*args) }
|
74
74
|
|
@@ -77,10 +77,10 @@ describe Fx::CommandRecorder, :db do
|
|
77
77
|
|
78
78
|
it "raises when reverting without revert_to_version set" do
|
79
79
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
80
|
-
args = [:test, {
|
80
|
+
args = [:test, {version: 42, another_argument: 1}]
|
81
81
|
|
82
|
-
expect { recorder.revert { recorder.update_function(*args) } }
|
83
|
-
to raise_error(ActiveRecord::IrreversibleMigration)
|
82
|
+
expect { recorder.revert { recorder.update_function(*args) } }
|
83
|
+
.to raise_error(ActiveRecord::IrreversibleMigration)
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -99,7 +99,7 @@ describe Fx::CommandRecorder, :db do
|
|
99
99
|
recorder.create_trigger :greetings
|
100
100
|
|
101
101
|
expect(recorder.commands).to eq [
|
102
|
-
[:create_trigger, [:greetings], nil]
|
102
|
+
[:create_trigger, [:greetings], nil]
|
103
103
|
]
|
104
104
|
end
|
105
105
|
|
@@ -123,8 +123,8 @@ describe Fx::CommandRecorder, :db do
|
|
123
123
|
|
124
124
|
it "reverts to create_trigger with specified revert_to_version" do
|
125
125
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
126
|
-
args = [:users, {
|
127
|
-
revert_args = [:users, {
|
126
|
+
args = [:users, {revert_to_version: 3}]
|
127
|
+
revert_args = [:users, {version: 3}]
|
128
128
|
|
129
129
|
recorder.revert { recorder.drop_trigger(*args) }
|
130
130
|
|
@@ -133,17 +133,17 @@ describe Fx::CommandRecorder, :db do
|
|
133
133
|
|
134
134
|
it "raises when reverting without revert_to_version set" do
|
135
135
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
136
|
-
args = [:users, {
|
136
|
+
args = [:users, {another_argument: 1}]
|
137
137
|
|
138
|
-
expect { recorder.revert { recorder.drop_trigger(*args) } }
|
139
|
-
to raise_error(ActiveRecord::IrreversibleMigration)
|
138
|
+
expect { recorder.revert { recorder.drop_trigger(*args) } }
|
139
|
+
.to raise_error(ActiveRecord::IrreversibleMigration)
|
140
140
|
end
|
141
141
|
end
|
142
142
|
|
143
143
|
describe "#update_trigger" do
|
144
144
|
it "records the updated trigger" do
|
145
145
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
146
|
-
args = [:users, {
|
146
|
+
args = [:users, {version: 2}]
|
147
147
|
|
148
148
|
recorder.update_trigger(*args)
|
149
149
|
|
@@ -152,8 +152,8 @@ describe Fx::CommandRecorder, :db do
|
|
152
152
|
|
153
153
|
it "reverts to update_trigger with the specified revert_to_version" do
|
154
154
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
155
|
-
args = [:users, {
|
156
|
-
revert_args = [:users, {
|
155
|
+
args = [:users, {version: 2, revert_to_version: 1}]
|
156
|
+
revert_args = [:users, {version: 1}]
|
157
157
|
|
158
158
|
recorder.revert { recorder.update_trigger(*args) }
|
159
159
|
|
@@ -162,10 +162,10 @@ describe Fx::CommandRecorder, :db do
|
|
162
162
|
|
163
163
|
it "raises when reverting without revert_to_version set" do
|
164
164
|
recorder = ActiveRecord::Migration::CommandRecorder.new
|
165
|
-
args = [:users, {
|
165
|
+
args = [:users, {version: 42, another_argument: 1}]
|
166
166
|
|
167
|
-
expect { recorder.revert { recorder.update_trigger(*args) } }
|
168
|
-
to raise_error(ActiveRecord::IrreversibleMigration)
|
167
|
+
expect { recorder.revert { recorder.update_trigger(*args) } }
|
168
|
+
.to raise_error(ActiveRecord::IrreversibleMigration)
|
169
169
|
end
|
170
170
|
end
|
171
171
|
end
|
data/spec/fx/definition_spec.rb
CHANGED
@@ -25,7 +25,7 @@ describe Fx::Definition do
|
|
25
25
|
|
26
26
|
expect { definition.to_sql }.to raise_error(
|
27
27
|
RuntimeError,
|
28
|
-
%r
|
28
|
+
%r{Define function in db/functions/test_v01.sql before migrating}
|
29
29
|
)
|
30
30
|
end
|
31
31
|
|
@@ -59,14 +59,14 @@ describe Fx::Definition do
|
|
59
59
|
CREATE TRIGGER check_update
|
60
60
|
BEFORE UPDATE ON accounts
|
61
61
|
FOR EACH ROW
|
62
|
-
EXECUTE
|
62
|
+
EXECUTE FUNCTION check_account_update();
|
63
63
|
EOS
|
64
64
|
allow(File).to receive(:read).and_return(sql_definition)
|
65
65
|
|
66
66
|
definition = Fx::Definition.new(
|
67
67
|
name: "test",
|
68
68
|
version: 1,
|
69
|
-
type: "trigger"
|
69
|
+
type: "trigger"
|
70
70
|
)
|
71
71
|
|
72
72
|
expect(definition.to_sql).to eq sql_definition
|
@@ -77,12 +77,12 @@ describe Fx::Definition do
|
|
77
77
|
definition = Fx::Definition.new(
|
78
78
|
name: "test",
|
79
79
|
version: 1,
|
80
|
-
type: "trigger"
|
80
|
+
type: "trigger"
|
81
81
|
)
|
82
82
|
|
83
83
|
expect { definition.to_sql }.to raise_error(
|
84
84
|
RuntimeError,
|
85
|
-
%r
|
85
|
+
%r{Define trigger in db/triggers/test_v01.sql before migrating}
|
86
86
|
)
|
87
87
|
end
|
88
88
|
end
|
@@ -102,7 +102,7 @@ describe Fx::Definition do
|
|
102
102
|
definition = Fx::Definition.new(
|
103
103
|
name: "test",
|
104
104
|
version: 1,
|
105
|
-
type: "trigger"
|
105
|
+
type: "trigger"
|
106
106
|
)
|
107
107
|
|
108
108
|
expect(definition.path).to eq "db/triggers/test_v01.sql"
|
data/spec/fx/function_spec.rb
CHANGED
@@ -7,15 +7,15 @@ module Fx
|
|
7
7
|
it "delegates to `name`" do
|
8
8
|
function_a = Function.new(
|
9
9
|
"name" => "name_a",
|
10
|
-
"definition" => "some definition"
|
10
|
+
"definition" => "some definition"
|
11
11
|
)
|
12
12
|
function_b = Function.new(
|
13
13
|
"name" => "name_b",
|
14
|
-
"definition" => "some definition"
|
14
|
+
"definition" => "some definition"
|
15
15
|
)
|
16
16
|
function_c = Function.new(
|
17
17
|
"name" => "name_c",
|
18
|
-
"definition" => "some definition"
|
18
|
+
"definition" => "some definition"
|
19
19
|
)
|
20
20
|
|
21
21
|
expect(function_b).to be_between(function_a, function_c)
|
@@ -26,11 +26,11 @@ module Fx
|
|
26
26
|
it "compares `name` and `definition`" do
|
27
27
|
function_a = Function.new(
|
28
28
|
"name" => "name_a",
|
29
|
-
"definition" => "some definition"
|
29
|
+
"definition" => "some definition"
|
30
30
|
)
|
31
31
|
function_b = Function.new(
|
32
32
|
"name" => "name_b",
|
33
|
-
"definition" => "some other definition"
|
33
|
+
"definition" => "some other definition"
|
34
34
|
)
|
35
35
|
|
36
36
|
expect(function_a).not_to eq(function_b)
|
@@ -41,10 +41,10 @@ module Fx
|
|
41
41
|
it "returns a schema compatible version of the function" do
|
42
42
|
function = Function.new(
|
43
43
|
"name" => "uppercase_users_name",
|
44
|
-
"definition" => "CREATE OR REPLACE TRIGGER uppercase_users_name ..."
|
44
|
+
"definition" => "CREATE OR REPLACE TRIGGER uppercase_users_name ..."
|
45
45
|
)
|
46
46
|
|
47
|
-
expect(function.to_schema).to eq <<-
|
47
|
+
expect(function.to_schema).to eq <<-EOS
|
48
48
|
create_function :uppercase_users_name, sql_definition: <<-'SQL'
|
49
49
|
CREATE OR REPLACE TRIGGER uppercase_users_name ...
|
50
50
|
SQL
|
@@ -54,7 +54,7 @@ module Fx
|
|
54
54
|
it "maintains backslashes" do
|
55
55
|
function = Function.new(
|
56
56
|
"name" => "regex",
|
57
|
-
"definition" => "CREATE OR REPLACE FUNCTION regex \\1"
|
57
|
+
"definition" => "CREATE OR REPLACE FUNCTION regex \\1"
|
58
58
|
)
|
59
59
|
|
60
60
|
expect(function.to_schema).to eq <<-'EOS'
|
@@ -18,34 +18,32 @@ describe Fx::SchemaDumper::Function, :db do
|
|
18
18
|
ActiveRecord::SchemaDumper.dump(connection, stream)
|
19
19
|
|
20
20
|
expect(output).to(
|
21
|
-
match(/table "my_table".*function :my_function.*RETURN 'test';/m)
|
21
|
+
match(/table "my_table".*function :my_function.*RETURN 'test';/m)
|
22
22
|
)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "dumps a create_function for a function in the database" do
|
26
|
-
|
27
|
-
|
28
|
-
sql_definition = <<-EOS
|
26
|
+
Fx.configuration.dump_functions_at_beginning_of_schema = true
|
27
|
+
sql_definition = <<-EOS
|
29
28
|
CREATE OR REPLACE FUNCTION my_function()
|
30
29
|
RETURNS text AS $$
|
31
30
|
BEGIN
|
32
31
|
RETURN 'test';
|
33
32
|
END;
|
34
33
|
$$ LANGUAGE plpgsql;
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
EOS
|
35
|
+
connection.create_function :my_function, sql_definition: sql_definition
|
36
|
+
connection.create_table :my_table
|
37
|
+
stream = StringIO.new
|
38
|
+
output = stream.string
|
40
39
|
|
41
|
-
|
40
|
+
ActiveRecord::SchemaDumper.dump(connection, stream)
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
42
|
+
expect(output).to(
|
43
|
+
match(/function :my_function.*RETURN 'test';.*table "my_table"/m)
|
44
|
+
)
|
45
|
+
ensure
|
46
|
+
Fx.configuration.dump_functions_at_beginning_of_schema = false
|
49
47
|
end
|
50
48
|
|
51
49
|
it "does not dump a create_function for aggregates in the database" do
|
@@ -22,11 +22,11 @@ describe Fx::SchemaDumper::Trigger, :db do
|
|
22
22
|
CREATE TRIGGER uppercase_users_name
|
23
23
|
BEFORE INSERT ON users
|
24
24
|
FOR EACH ROW
|
25
|
-
EXECUTE
|
25
|
+
EXECUTE FUNCTION uppercase_users_name();
|
26
26
|
EOS
|
27
27
|
connection.create_trigger(
|
28
28
|
:uppercase_users_name,
|
29
|
-
sql_definition: sql_definition
|
29
|
+
sql_definition: sql_definition
|
30
30
|
)
|
31
31
|
stream = StringIO.new
|
32
32
|
|
@@ -35,6 +35,6 @@ describe Fx::SchemaDumper::Trigger, :db do
|
|
35
35
|
output = stream.string
|
36
36
|
expect(output).to include "create_trigger :uppercase_users_name"
|
37
37
|
expect(output).to include "sql_definition: <<-SQL"
|
38
|
-
expect(output).to include "EXECUTE
|
38
|
+
expect(output).to include "EXECUTE FUNCTION uppercase_users_name()"
|
39
39
|
end
|
40
40
|
end
|
@@ -9,10 +9,10 @@ describe Fx::Statements::Function, :db do
|
|
9
9
|
|
10
10
|
connection.create_function(:test)
|
11
11
|
|
12
|
-
expect(database).to have_received(:create_function)
|
13
|
-
with(definition.to_sql)
|
14
|
-
expect(Fx::Definition).to have_received(:new)
|
15
|
-
with(name: :test, version: 1)
|
12
|
+
expect(database).to have_received(:create_function)
|
13
|
+
.with(definition.to_sql)
|
14
|
+
expect(Fx::Definition).to have_received(:new)
|
15
|
+
.with(name: :test, version: 1)
|
16
16
|
end
|
17
17
|
|
18
18
|
it "allows creating a function with a specific version" do
|
@@ -21,10 +21,10 @@ describe Fx::Statements::Function, :db do
|
|
21
21
|
|
22
22
|
connection.create_function(:test, version: 2)
|
23
23
|
|
24
|
-
expect(database).to have_received(:create_function)
|
25
|
-
with(definition.to_sql)
|
26
|
-
expect(Fx::Definition).to have_received(:new)
|
27
|
-
with(name: :test, version: 2)
|
24
|
+
expect(database).to have_received(:create_function)
|
25
|
+
.with(definition.to_sql)
|
26
|
+
expect(Fx::Definition).to have_received(:new)
|
27
|
+
.with(name: :test, version: 2)
|
28
28
|
end
|
29
29
|
|
30
30
|
it "raises an error if both arguments are nil" do
|
@@ -32,11 +32,11 @@ describe Fx::Statements::Function, :db do
|
|
32
32
|
connection.create_function(
|
33
33
|
:whatever,
|
34
34
|
version: nil,
|
35
|
-
sql_definition: nil
|
35
|
+
sql_definition: nil
|
36
36
|
)
|
37
37
|
}.to raise_error(
|
38
38
|
ArgumentError,
|
39
|
-
/version or sql_definition must be specified
|
39
|
+
/version or sql_definition must be specified/
|
40
40
|
)
|
41
41
|
end
|
42
42
|
end
|
@@ -58,10 +58,10 @@ describe Fx::Statements::Function, :db do
|
|
58
58
|
|
59
59
|
connection.update_function(:test, version: 3)
|
60
60
|
|
61
|
-
expect(database).to have_received(:update_function)
|
62
|
-
with(:test, definition.to_sql)
|
63
|
-
expect(Fx::Definition).to have_received(:new)
|
64
|
-
with(name: :test, version: 3)
|
61
|
+
expect(database).to have_received(:update_function)
|
62
|
+
.with(:test, definition.to_sql)
|
63
|
+
expect(Fx::Definition).to have_received(:new)
|
64
|
+
.with(name: :test, version: 3)
|
65
65
|
end
|
66
66
|
|
67
67
|
it "updates a function from a text definition" do
|
@@ -71,7 +71,7 @@ describe Fx::Statements::Function, :db do
|
|
71
71
|
|
72
72
|
expect(database).to have_received(:update_function).with(
|
73
73
|
:test,
|
74
|
-
"a definition"
|
74
|
+
"a definition"
|
75
75
|
)
|
76
76
|
end
|
77
77
|
|
@@ -80,11 +80,11 @@ describe Fx::Statements::Function, :db do
|
|
80
80
|
connection.update_function(
|
81
81
|
:whatever,
|
82
82
|
version: nil,
|
83
|
-
sql_definition: nil
|
83
|
+
sql_definition: nil
|
84
84
|
)
|
85
85
|
}.to raise_error(
|
86
86
|
ArgumentError,
|
87
|
-
/version or sql_definition must be specified
|
87
|
+
/version or sql_definition must be specified/
|
88
88
|
)
|
89
89
|
end
|
90
90
|
end
|
@@ -9,10 +9,10 @@ describe Fx::Statements::Trigger, :db do
|
|
9
9
|
|
10
10
|
connection.create_trigger(:test)
|
11
11
|
|
12
|
-
expect(database).to have_received(:create_trigger)
|
13
|
-
with(definition.to_sql)
|
14
|
-
expect(Fx::Definition).to have_received(:new)
|
15
|
-
with(name: :test, version: 1, type: "trigger")
|
12
|
+
expect(database).to have_received(:create_trigger)
|
13
|
+
.with(definition.to_sql)
|
14
|
+
expect(Fx::Definition).to have_received(:new)
|
15
|
+
.with(name: :test, version: 1, type: "trigger")
|
16
16
|
end
|
17
17
|
|
18
18
|
it "allows creating a trigger with a specific version" do
|
@@ -21,10 +21,10 @@ describe Fx::Statements::Trigger, :db do
|
|
21
21
|
|
22
22
|
connection.create_trigger(:test, version: 2)
|
23
23
|
|
24
|
-
expect(database).to have_received(:create_trigger)
|
25
|
-
with(definition.to_sql)
|
26
|
-
expect(Fx::Definition).to have_received(:new)
|
27
|
-
with(name: :test, version: 2, type: "trigger")
|
24
|
+
expect(database).to have_received(:create_trigger)
|
25
|
+
.with(definition.to_sql)
|
26
|
+
expect(Fx::Definition).to have_received(:new)
|
27
|
+
.with(name: :test, version: 2, type: "trigger")
|
28
28
|
end
|
29
29
|
|
30
30
|
it "raises an error if both arguments are set" do
|
@@ -34,11 +34,11 @@ describe Fx::Statements::Trigger, :db do
|
|
34
34
|
connection.create_trigger(
|
35
35
|
:whatever,
|
36
36
|
version: 1,
|
37
|
-
sql_definition: "a definition"
|
37
|
+
sql_definition: "a definition"
|
38
38
|
)
|
39
39
|
}.to raise_error(
|
40
40
|
ArgumentError,
|
41
|
-
/cannot both be set
|
41
|
+
/cannot both be set/
|
42
42
|
)
|
43
43
|
end
|
44
44
|
end
|
@@ -49,8 +49,8 @@ describe Fx::Statements::Trigger, :db do
|
|
49
49
|
|
50
50
|
connection.drop_trigger(:test, on: :users)
|
51
51
|
|
52
|
-
expect(database).to have_received(:drop_trigger)
|
53
|
-
with(:test, on: :users)
|
52
|
+
expect(database).to have_received(:drop_trigger)
|
53
|
+
.with(:test, on: :users)
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -64,12 +64,12 @@ describe Fx::Statements::Trigger, :db do
|
|
64
64
|
expect(database).to have_received(:update_trigger).with(
|
65
65
|
:test,
|
66
66
|
on: :users,
|
67
|
-
sql_definition: definition.to_sql
|
67
|
+
sql_definition: definition.to_sql
|
68
68
|
)
|
69
69
|
expect(Fx::Definition).to have_received(:new).with(
|
70
70
|
name: :test,
|
71
71
|
version: 3,
|
72
|
-
type: "trigger"
|
72
|
+
type: "trigger"
|
73
73
|
)
|
74
74
|
end
|
75
75
|
|
@@ -79,13 +79,13 @@ describe Fx::Statements::Trigger, :db do
|
|
79
79
|
connection.update_trigger(
|
80
80
|
:test,
|
81
81
|
on: :users,
|
82
|
-
sql_definition: "a definition"
|
82
|
+
sql_definition: "a definition"
|
83
83
|
)
|
84
84
|
|
85
85
|
expect(database).to have_received(:update_trigger).with(
|
86
86
|
:test,
|
87
87
|
on: :users,
|
88
|
-
sql_definition: "a definition"
|
88
|
+
sql_definition: "a definition"
|
89
89
|
)
|
90
90
|
end
|
91
91
|
|
@@ -94,11 +94,11 @@ describe Fx::Statements::Trigger, :db do
|
|
94
94
|
connection.update_trigger(
|
95
95
|
:whatever,
|
96
96
|
version: nil,
|
97
|
-
sql_definition: nil
|
97
|
+
sql_definition: nil
|
98
98
|
)
|
99
99
|
}.to raise_error(
|
100
100
|
ArgumentError,
|
101
|
-
/version or sql_definition must be specified
|
101
|
+
/version or sql_definition must be specified/
|
102
102
|
)
|
103
103
|
end
|
104
104
|
|
@@ -109,11 +109,11 @@ describe Fx::Statements::Trigger, :db do
|
|
109
109
|
connection.update_trigger(
|
110
110
|
:whatever,
|
111
111
|
version: 1,
|
112
|
-
sql_definition: "a definition"
|
112
|
+
sql_definition: "a definition"
|
113
113
|
)
|
114
114
|
}.to raise_error(
|
115
115
|
ArgumentError,
|
116
|
-
/cannot both be set
|
116
|
+
/cannot both be set/
|
117
117
|
)
|
118
118
|
end
|
119
119
|
end
|
data/spec/fx/trigger_spec.rb
CHANGED
@@ -7,15 +7,15 @@ module Fx
|
|
7
7
|
it "delegates to `name`" do
|
8
8
|
trigger_a = Trigger.new(
|
9
9
|
"name" => "name_a",
|
10
|
-
"definition" => "some definition"
|
10
|
+
"definition" => "some definition"
|
11
11
|
)
|
12
12
|
trigger_b = Trigger.new(
|
13
13
|
"name" => "name_b",
|
14
|
-
"definition" => "some definition"
|
14
|
+
"definition" => "some definition"
|
15
15
|
)
|
16
16
|
trigger_c = Trigger.new(
|
17
17
|
"name" => "name_c",
|
18
|
-
"definition" => "some definition"
|
18
|
+
"definition" => "some definition"
|
19
19
|
)
|
20
20
|
|
21
21
|
expect(trigger_b).to be_between(trigger_a, trigger_c)
|
@@ -26,11 +26,11 @@ module Fx
|
|
26
26
|
it "compares `name` and `definition`" do
|
27
27
|
trigger_a = Trigger.new(
|
28
28
|
"name" => "name_a",
|
29
|
-
"definition" => "some definition"
|
29
|
+
"definition" => "some definition"
|
30
30
|
)
|
31
31
|
trigger_b = Trigger.new(
|
32
32
|
"name" => "name_b",
|
33
|
-
"definition" => "some other definition"
|
33
|
+
"definition" => "some other definition"
|
34
34
|
)
|
35
35
|
|
36
36
|
expect(trigger_a).not_to eq(trigger_b)
|
@@ -41,7 +41,7 @@ module Fx
|
|
41
41
|
it "returns a schema compatible version of the trigger" do
|
42
42
|
trigger = Trigger.new(
|
43
43
|
"name" => "uppercase_users_name",
|
44
|
-
"definition" => "CREATE TRIGGER uppercase_users_name ..."
|
44
|
+
"definition" => "CREATE TRIGGER uppercase_users_name ..."
|
45
45
|
)
|
46
46
|
|
47
47
|
expect(trigger.to_schema).to eq <<-EOS
|