fx 0.7.0 → 0.8.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.
- 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
|