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
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bfa4dae8b8e550ee4ddc34b4d0d78c50cc085d01662993f0874f804525fdd51f
|
|
4
|
+
data.tar.gz: 6e57a6df8b97e7638de3b05d9204c4bdcf2db90b585dfb617a1c2e3492d9f8b5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c4cf689e5a1847b7ad45b2679dd45046555f750fb7bc8ed9dc2c473da1e6a6eba344a312fa0b33852197ec7c5d81dc92a3ff416939ba8f5435f8a5da16c928df
|
|
7
|
+
data.tar.gz: 1d59049f9bb409bcbb56c3126f9675f1492e0a3d434858d2cb44af8a3d5aba74ee1fe5f78bbc73bab707aae05cfe8d8ed671a4a7e5dc8fa4841df176ebd88c30
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: master
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: "*"
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
tests:
|
|
11
|
+
name: Ruby ${{ matrix.ruby }}, Rails ${{ matrix.rails }}
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
strategy:
|
|
15
|
+
fail-fast: false
|
|
16
|
+
matrix:
|
|
17
|
+
ruby: ["2.7", "3.0", "3.1", "3.2"]
|
|
18
|
+
rails: ["6.0", "6.1", "7.0"]
|
|
19
|
+
continue-on-error: [false]
|
|
20
|
+
exclude:
|
|
21
|
+
- ruby: "3.2"
|
|
22
|
+
rails: "6.0"
|
|
23
|
+
- ruby: "3.2"
|
|
24
|
+
rails: "6.1"
|
|
25
|
+
|
|
26
|
+
services:
|
|
27
|
+
postgres:
|
|
28
|
+
image: postgres:14
|
|
29
|
+
env:
|
|
30
|
+
POSTGRES_USER: postgres
|
|
31
|
+
POSTGRES_HOST_AUTH_METHOD: trust
|
|
32
|
+
ports:
|
|
33
|
+
- 5432:5432
|
|
34
|
+
# Set health checks to wait until postgres has started
|
|
35
|
+
options: >-
|
|
36
|
+
--health-cmd pg_isready
|
|
37
|
+
--health-interval 10s
|
|
38
|
+
--health-timeout 5s
|
|
39
|
+
--health-retries 5
|
|
40
|
+
|
|
41
|
+
env:
|
|
42
|
+
POSTGRES_USER: postgres
|
|
43
|
+
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v3
|
|
46
|
+
|
|
47
|
+
- name: Set up Ruby
|
|
48
|
+
uses: ruby/setup-ruby@v1
|
|
49
|
+
with:
|
|
50
|
+
ruby-version: ${{ matrix.ruby }}
|
|
51
|
+
bundler-cache: true
|
|
52
|
+
rubygems: latest
|
|
53
|
+
|
|
54
|
+
- name: Setup environment
|
|
55
|
+
run: bin/setup
|
|
56
|
+
|
|
57
|
+
- name: Run tests
|
|
58
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
--color
|
|
1
|
+
--no-color
|
|
2
2
|
--require spec_helper
|
data/.standard.yml
ADDED
data/CONTRIBUTING.md
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
# Contributing
|
|
2
2
|
|
|
3
|
+
We love contributions from everyone. By participating in this project, you
|
|
4
|
+
agree to abide by our [code of conduct].
|
|
5
|
+
|
|
6
|
+
[code of conduct]: CODE_OF_CONDUCT.md
|
|
7
|
+
|
|
8
|
+
## Contributing Code
|
|
9
|
+
|
|
3
10
|
1. Fork the repository.
|
|
4
11
|
2. Run `bin/setup`, which will install dependencies and create the dummy
|
|
5
12
|
application database.
|
|
6
|
-
3. Run `
|
|
7
|
-
|
|
8
|
-
4. Make your change with new passing tests, following
|
|
13
|
+
3. Run `rake` to verify that the tests pass against the version of Rails you are
|
|
14
|
+
running locally.
|
|
15
|
+
4. Make your change with new passing tests, following existing style.
|
|
9
16
|
5. Write a [good commit message], push your fork, and submit a pull request.
|
|
17
|
+
6. CI will run the test suite on all configured versions of Ruby and Rails.
|
|
18
|
+
Address any failures.
|
|
10
19
|
|
|
11
20
|
[good commit message]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
|
12
21
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# F(x)
|
|
2
2
|
|
|
3
|
-
[](https://github.com/teoljungberg/fx/actions/workflows/ci.yml)
|
|
4
4
|
[](http://inch-ci.org/github/teoljungberg/fx)
|
|
5
5
|
|
|
6
6
|
F(x) adds methods to `ActiveRecord::Migration` to create and manage database
|
|
@@ -49,7 +49,7 @@ In our example, this might look something like this:
|
|
|
49
49
|
CREATE TRIGGER uppercase_users_name
|
|
50
50
|
BEFORE INSERT ON users
|
|
51
51
|
FOR EACH ROW
|
|
52
|
-
EXECUTE
|
|
52
|
+
EXECUTE FUNCTION uppercase_users_name();
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
The generated migrations contains `create_function` and `create_trigger`
|
data/Rakefile
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
2
|
require "rspec/core/rake_task"
|
|
3
|
+
require "standard/rake"
|
|
3
4
|
|
|
4
5
|
namespace :dummy do
|
|
5
6
|
require_relative "spec/dummy/config/application"
|
|
@@ -20,4 +21,4 @@ RSpec::Core::RakeTask.new("spec:acceptance") do |task|
|
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
desc "Run the specs and acceptance tests"
|
|
23
|
-
task default: %w
|
|
24
|
+
task default: %w[spec spec:acceptance standard]
|
data/bin/setup
CHANGED
data/fx.gemspec
CHANGED
|
@@ -1,38 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
3
|
require "fx/version"
|
|
5
4
|
|
|
6
5
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name
|
|
8
|
-
spec.version
|
|
9
|
-
spec.authors
|
|
10
|
-
spec.email
|
|
11
|
-
spec.summary
|
|
12
|
-
spec.description
|
|
6
|
+
spec.name = "fx"
|
|
7
|
+
spec.version = Fx::VERSION
|
|
8
|
+
spec.authors = ["Teo Ljungberg"]
|
|
9
|
+
spec.email = ["teo@teoljungberg.com"]
|
|
10
|
+
spec.summary = "Support for database functions and triggers in Rails migrations"
|
|
11
|
+
spec.description = <<-DESCRIPTION
|
|
13
12
|
Adds methods to ActiveRecord::Migration to create and manage database functions
|
|
14
13
|
and triggers in Rails
|
|
15
14
|
DESCRIPTION
|
|
16
|
-
spec.homepage
|
|
17
|
-
spec.license
|
|
15
|
+
spec.homepage = "https://github.com/teoljungberg/fx"
|
|
16
|
+
spec.license = "MIT"
|
|
18
17
|
|
|
19
|
-
spec.files
|
|
20
|
-
spec.
|
|
21
|
-
spec.require_paths = ['lib']
|
|
18
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
22
20
|
|
|
23
|
-
spec.add_development_dependency "
|
|
24
|
-
spec.add_development_dependency "bundler",
|
|
21
|
+
spec.add_development_dependency "ammeter", ">= 1.1.3"
|
|
22
|
+
spec.add_development_dependency "bundler", ">= 1.5"
|
|
25
23
|
spec.add_development_dependency "database_cleaner"
|
|
26
|
-
spec.add_development_dependency "rake"
|
|
27
|
-
spec.add_development_dependency "rspec", '>= 3.3'
|
|
28
24
|
spec.add_development_dependency "pg"
|
|
29
25
|
spec.add_development_dependency "pry"
|
|
30
|
-
spec.add_development_dependency "
|
|
31
|
-
spec.add_development_dependency "yard"
|
|
26
|
+
spec.add_development_dependency "rake"
|
|
32
27
|
spec.add_development_dependency "redcarpet"
|
|
28
|
+
spec.add_development_dependency "rspec", ">= 3.3"
|
|
29
|
+
spec.add_development_dependency "standardrb"
|
|
30
|
+
spec.add_development_dependency "yard"
|
|
33
31
|
|
|
34
|
-
spec.add_dependency "activerecord",
|
|
35
|
-
spec.add_dependency "railties",
|
|
32
|
+
spec.add_dependency "activerecord", ">= 6.0.0"
|
|
33
|
+
spec.add_dependency "railties", ">= 6.0.0"
|
|
36
34
|
|
|
37
|
-
spec.required_ruby_version = ">= 2.
|
|
35
|
+
spec.required_ruby_version = ">= 2.7"
|
|
38
36
|
end
|
data/lib/fx/function.rb
CHANGED
|
@@ -16,10 +16,10 @@ module Fx
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def to_schema
|
|
19
|
-
|
|
20
|
-
create_function :#{name}, sql_definition: <<-'SQL'
|
|
21
|
-
#{definition.indent(4).rstrip}
|
|
22
|
-
SQL
|
|
19
|
+
<<~SCHEMA.indent(2)
|
|
20
|
+
create_function :#{name}, sql_definition: <<-'SQL'
|
|
21
|
+
#{definition.indent(4).rstrip}
|
|
22
|
+
SQL
|
|
23
23
|
SCHEMA
|
|
24
24
|
end
|
|
25
25
|
end
|
|
@@ -36,7 +36,7 @@ module Fx
|
|
|
36
36
|
if version.nil? && sql_definition.nil?
|
|
37
37
|
raise(
|
|
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
|
sql_definition = sql_definition.strip_heredoc if sql_definition
|
|
@@ -57,7 +57,6 @@ module Fx
|
|
|
57
57
|
# drop_function(:uppercase_users_name, revert_to_version: 2)
|
|
58
58
|
#
|
|
59
59
|
def drop_function(name, options = {})
|
|
60
|
-
revert_to_version = options[:revert_to_version]
|
|
61
60
|
Fx.database.drop_function(name)
|
|
62
61
|
end
|
|
63
62
|
|
|
@@ -93,19 +92,18 @@ module Fx
|
|
|
93
92
|
def update_function(name, options = {})
|
|
94
93
|
version = options[:version]
|
|
95
94
|
sql_definition = options[:sql_definition]
|
|
96
|
-
revert_to_version = options[:revert_to_version]
|
|
97
95
|
|
|
98
96
|
if version.nil? && sql_definition.nil?
|
|
99
97
|
raise(
|
|
100
98
|
ArgumentError,
|
|
101
|
-
"version or sql_definition must be specified"
|
|
99
|
+
"version or sql_definition must be specified"
|
|
102
100
|
)
|
|
103
101
|
end
|
|
104
102
|
|
|
105
103
|
sql_definition = sql_definition.strip_heredoc if sql_definition
|
|
106
104
|
sql_definition ||= Fx::Definition.new(
|
|
107
105
|
name: name,
|
|
108
|
-
version: version
|
|
106
|
+
version: version
|
|
109
107
|
).to_sql
|
|
110
108
|
|
|
111
109
|
Fx.database.update_function(name, sql_definition)
|
|
@@ -24,7 +24,7 @@ module Fx
|
|
|
24
24
|
# CREATE TRIGGER uppercase_users_name
|
|
25
25
|
# BEFORE INSERT ON users
|
|
26
26
|
# FOR EACH ROW
|
|
27
|
-
# EXECUTE
|
|
27
|
+
# EXECUTE FUNCTION uppercase_users_name();
|
|
28
28
|
# SQL
|
|
29
29
|
#
|
|
30
30
|
def create_trigger(name, options = {})
|
|
@@ -35,7 +35,7 @@ module Fx
|
|
|
35
35
|
if version.present? && sql_definition.present?
|
|
36
36
|
raise(
|
|
37
37
|
ArgumentError,
|
|
38
|
-
"sql_definition and version cannot both be set"
|
|
38
|
+
"sql_definition and version cannot both be set"
|
|
39
39
|
)
|
|
40
40
|
end
|
|
41
41
|
|
|
@@ -47,7 +47,7 @@ module Fx
|
|
|
47
47
|
sql_definition ||= Fx::Definition.new(
|
|
48
48
|
name: name,
|
|
49
49
|
version: version,
|
|
50
|
-
type: DEFINITION_TYPE
|
|
50
|
+
type: DEFINITION_TYPE
|
|
51
51
|
).to_sql
|
|
52
52
|
|
|
53
53
|
Fx.database.create_trigger(sql_definition)
|
|
@@ -68,7 +68,6 @@ module Fx
|
|
|
68
68
|
#
|
|
69
69
|
def drop_trigger(name, options = {})
|
|
70
70
|
on = options.fetch(:on)
|
|
71
|
-
revert_to_version = options[:revert_to_version]
|
|
72
71
|
Fx.database.drop_trigger(name, on: on)
|
|
73
72
|
end
|
|
74
73
|
|
|
@@ -101,26 +100,25 @@ module Fx
|
|
|
101
100
|
# CREATE TRIGGER uppercase_users_name
|
|
102
101
|
# BEFORE INSERT ON users
|
|
103
102
|
# FOR EACH ROW
|
|
104
|
-
# EXECUTE
|
|
103
|
+
# EXECUTE FUNCTION uppercase_users_name();
|
|
105
104
|
# SQL
|
|
106
105
|
#
|
|
107
106
|
def update_trigger(name, options = {})
|
|
108
107
|
version = options[:version]
|
|
109
108
|
on = options[:on]
|
|
110
109
|
sql_definition = options[:sql_definition]
|
|
111
|
-
revert_to_version = options[:revert_to_version]
|
|
112
110
|
|
|
113
111
|
if version.nil? && sql_definition.nil?
|
|
114
112
|
raise(
|
|
115
113
|
ArgumentError,
|
|
116
|
-
"version or sql_definition must be specified"
|
|
114
|
+
"version or sql_definition must be specified"
|
|
117
115
|
)
|
|
118
116
|
end
|
|
119
117
|
|
|
120
118
|
if version.present? && sql_definition.present?
|
|
121
119
|
raise(
|
|
122
120
|
ArgumentError,
|
|
123
|
-
"sql_definition and version cannot both be set"
|
|
121
|
+
"sql_definition and version cannot both be set"
|
|
124
122
|
)
|
|
125
123
|
end
|
|
126
124
|
|
|
@@ -132,13 +130,13 @@ module Fx
|
|
|
132
130
|
sql_definition ||= Fx::Definition.new(
|
|
133
131
|
name: name,
|
|
134
132
|
version: version,
|
|
135
|
-
type: DEFINITION_TYPE
|
|
133
|
+
type: DEFINITION_TYPE
|
|
136
134
|
).to_sql
|
|
137
135
|
|
|
138
136
|
Fx.database.update_trigger(
|
|
139
137
|
name,
|
|
140
138
|
on: on,
|
|
141
|
-
sql_definition: sql_definition
|
|
139
|
+
sql_definition: sql_definition
|
|
142
140
|
)
|
|
143
141
|
end
|
|
144
142
|
end
|
data/lib/fx/version.rb
CHANGED
data/lib/fx.rb
CHANGED
|
@@ -19,17 +19,17 @@ module Fx
|
|
|
19
19
|
def self.load
|
|
20
20
|
ActiveRecord::Migration::CommandRecorder.send(
|
|
21
21
|
:include,
|
|
22
|
-
Fx::CommandRecorder
|
|
22
|
+
Fx::CommandRecorder
|
|
23
23
|
)
|
|
24
24
|
|
|
25
25
|
ActiveRecord::SchemaDumper.send(
|
|
26
26
|
:prepend,
|
|
27
|
-
Fx::SchemaDumper
|
|
27
|
+
Fx::SchemaDumper
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
ActiveRecord::ConnectionAdapters::AbstractAdapter.send(
|
|
31
31
|
:include,
|
|
32
|
-
Fx::Statements
|
|
32
|
+
Fx::Statements
|
|
33
33
|
)
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -29,12 +29,12 @@ module Fx
|
|
|
29
29
|
if updating_existing_function?
|
|
30
30
|
migration_template(
|
|
31
31
|
"db/migrate/update_function.erb",
|
|
32
|
-
"db/migrate/update_function_#{file_name}_to_version_#{version}.rb"
|
|
32
|
+
"db/migrate/update_function_#{file_name}_to_version_#{version}.rb"
|
|
33
33
|
)
|
|
34
34
|
else
|
|
35
35
|
migration_template(
|
|
36
36
|
"db/migrate/create_function.erb",
|
|
37
|
-
"db/migrate/create_function_#{file_name}.rb"
|
|
37
|
+
"db/migrate/create_function_#{file_name}.rb"
|
|
38
38
|
)
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -45,9 +45,9 @@ module Fx
|
|
|
45
45
|
|
|
46
46
|
no_tasks do
|
|
47
47
|
def previous_version
|
|
48
|
-
@_previous_version ||= Dir.entries(function_definition_path)
|
|
49
|
-
map { |name| version_regex.match(name).try(:[], "version").to_i }
|
|
50
|
-
max
|
|
48
|
+
@_previous_version ||= Dir.entries(function_definition_path)
|
|
49
|
+
.map { |name| version_regex.match(name).try(:[], "version").to_i }
|
|
50
|
+
.max
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def version
|
|
@@ -82,7 +82,7 @@ module Fx
|
|
|
82
82
|
private
|
|
83
83
|
|
|
84
84
|
def function_definition_path
|
|
85
|
-
@_function_definition_path ||= Rails.root.join(*%w
|
|
85
|
+
@_function_definition_path ||= Rails.root.join(*%w[db functions])
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def version_regex
|
|
@@ -42,9 +42,9 @@ module Fx
|
|
|
42
42
|
|
|
43
43
|
no_tasks do
|
|
44
44
|
def previous_version
|
|
45
|
-
@_previous_version ||= Dir.entries(trigger_definition_path)
|
|
46
|
-
map { |name| version_regex.match(name).try(:[], "version").to_i }
|
|
47
|
-
max
|
|
45
|
+
@_previous_version ||= Dir.entries(trigger_definition_path)
|
|
46
|
+
.map { |name| version_regex.match(name).try(:[], "version").to_i }
|
|
47
|
+
.max
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def version
|
|
@@ -81,7 +81,7 @@ module Fx
|
|
|
81
81
|
if name.nil?
|
|
82
82
|
raise(
|
|
83
83
|
ArgumentError,
|
|
84
|
-
"Either `table_name:NAME` or `on:NAME` must be specified"
|
|
84
|
+
"Either `table_name:NAME` or `on:NAME` must be specified"
|
|
85
85
|
)
|
|
86
86
|
end
|
|
87
87
|
|
|
@@ -107,12 +107,12 @@ module Fx
|
|
|
107
107
|
Fx::Definition.new(
|
|
108
108
|
name: file_name,
|
|
109
109
|
version: version,
|
|
110
|
-
type: "trigger"
|
|
110
|
+
type: "trigger"
|
|
111
111
|
)
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
def trigger_definition_path
|
|
115
|
-
@_trigger_definition_path ||= Rails.root.join(
|
|
115
|
+
@_trigger_definition_path ||= Rails.root.join("db", "triggers")
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
# Skip creating migration file if:
|
|
@@ -19,7 +19,7 @@ describe "User manages functions" do
|
|
|
19
19
|
successfully "rails generate fx:function test"
|
|
20
20
|
verify_identical_definitions(
|
|
21
21
|
"db/functions/test_v01.sql",
|
|
22
|
-
"db/functions/test_v02.sql"
|
|
22
|
+
"db/functions/test_v02.sql"
|
|
23
23
|
)
|
|
24
24
|
write_function_definition "test_v02", <<-EOS
|
|
25
25
|
CREATE OR REPLACE FUNCTION test()
|
|
@@ -18,7 +18,7 @@ describe "User manages triggers" do
|
|
|
18
18
|
CREATE TRIGGER uppercase_users_name
|
|
19
19
|
BEFORE INSERT ON users
|
|
20
20
|
FOR EACH ROW
|
|
21
|
-
EXECUTE
|
|
21
|
+
EXECUTE FUNCTION uppercase_users_name();
|
|
22
22
|
EOS
|
|
23
23
|
successfully "rake db:migrate"
|
|
24
24
|
|
|
@@ -36,7 +36,7 @@ describe "User manages triggers" do
|
|
|
36
36
|
CREATE TRIGGER uppercase_users_name
|
|
37
37
|
BEFORE UPDATE ON users
|
|
38
38
|
FOR EACH ROW
|
|
39
|
-
EXECUTE
|
|
39
|
+
EXECUTE FUNCTION uppercase_users_name();
|
|
40
40
|
EOS
|
|
41
41
|
successfully "rake db:migrate"
|
|
42
42
|
execute <<-EOS
|
data/spec/acceptance_helper.rb
CHANGED
|
@@ -12,7 +12,9 @@ RSpec.configure do |config|
|
|
|
12
12
|
config.before(:suite) do
|
|
13
13
|
Dir.chdir("spec/dummy") do
|
|
14
14
|
system <<-CMD
|
|
15
|
-
git init 1>/dev/null &&
|
|
15
|
+
git init -b master 1>/dev/null &&
|
|
16
|
+
git config user.email "fx@example.com"
|
|
17
|
+
git config user.name "Fx"
|
|
16
18
|
git add -A &&
|
|
17
19
|
git commit --no-gpg-sign --message 'initial' 1>/dev/null
|
|
18
20
|
CMD
|
|
@@ -24,7 +26,7 @@ RSpec.configure do |config|
|
|
|
24
26
|
ActiveRecord::Base.connection.disconnect!
|
|
25
27
|
system <<-CMD
|
|
26
28
|
echo &&
|
|
27
|
-
rake db:environment:set db:drop db:create &&
|
|
29
|
+
rake db:environment:set db:drop db:create 1>/dev/null &&
|
|
28
30
|
git add -A &&
|
|
29
31
|
git reset --hard HEAD 1>/dev/null &&
|
|
30
32
|
rm -rf .git/ 1>/dev/null
|
data/spec/dummy/Rakefile
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
|
2
2
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
|
3
3
|
|
|
4
|
-
require File.expand_path(
|
|
4
|
+
require File.expand_path("../config/application", __FILE__)
|
|
5
5
|
|
|
6
6
|
Rails.application.load_tasks
|
|
7
7
|
|
|
8
|
-
unless Rake::Task.task_defined?(
|
|
9
|
-
desc
|
|
10
|
-
task
|
|
8
|
+
unless Rake::Task.task_defined?("db:environment:set")
|
|
9
|
+
desc "dummy task for rails versions where this task does not exist"
|
|
10
|
+
task "db:environment:set" do
|
|
11
11
|
# no-op
|
|
12
12
|
end
|
|
13
13
|
end
|
data/spec/dummy/bin/bundle
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
ENV[
|
|
3
|
-
load Gem.bin_path(
|
|
2
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
|
|
3
|
+
load Gem.bin_path("bundler", "bundle")
|
data/spec/dummy/bin/rails
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
-
APP_PATH = File.expand_path(
|
|
3
|
-
require_relative
|
|
4
|
-
require
|
|
2
|
+
APP_PATH = File.expand_path("../../config/application", __FILE__)
|
|
3
|
+
require_relative "../config/boot"
|
|
4
|
+
require "rails/commands"
|
data/spec/dummy/bin/rake
CHANGED
data/spec/dummy/config.ru
CHANGED
|
@@ -40,10 +40,10 @@ describe "Reverting migrations", :db do
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
expect { run_migration(good_migration, [:up, :down]) }.not_to raise_error
|
|
43
|
-
expect { run_migration(bad_migration, [:up, :down]) }
|
|
44
|
-
to raise_error(
|
|
43
|
+
expect { run_migration(bad_migration, [:up, :down]) }
|
|
44
|
+
.to raise_error(
|
|
45
45
|
ActiveRecord::IrreversibleMigration,
|
|
46
|
-
/`create_function` is reversible only if given a `revert_to_version
|
|
46
|
+
/`create_function` is reversible only if given a `revert_to_version`/
|
|
47
47
|
)
|
|
48
48
|
end
|
|
49
49
|
|
|
@@ -61,7 +61,7 @@ describe "Reverting migrations", :db do
|
|
|
61
61
|
with_function_definition(
|
|
62
62
|
name: :test,
|
|
63
63
|
version: 2,
|
|
64
|
-
sql_definition: sql_definition
|
|
64
|
+
sql_definition: sql_definition
|
|
65
65
|
) do
|
|
66
66
|
migration = Class.new(migration_class) do
|
|
67
67
|
def change
|
|
@@ -22,11 +22,11 @@ describe "Trigger 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
|