fx-jets 0.6.3s
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 +10 -0
- data/.hound.yml +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +648 -0
- data/.travis.yml +60 -0
- data/.yardopts +4 -0
- data/Appraisals +45 -0
- data/CONTRIBUTING.md +15 -0
- data/Gemfile +4 -0
- data/LICENSE +18 -0
- data/README.md +1 -0
- data/Rakefile +23 -0
- data/bin/appraisal +17 -0
- data/bin/console +14 -0
- data/bin/rake +17 -0
- data/bin/rspec +17 -0
- data/bin/setup +13 -0
- data/bin/yard +17 -0
- data/fx.gemspec +39 -0
- data/gemfiles/rails42.gemfile +10 -0
- data/gemfiles/rails50.gemfile +8 -0
- data/gemfiles/rails51.gemfile +8 -0
- data/gemfiles/rails52.gemfile +8 -0
- data/gemfiles/rails60.gemfile +8 -0
- data/gemfiles/rails61.gemfile +8 -0
- data/gemfiles/rails_edge.gemfile +8 -0
- data/lib/fx/adapters/postgres/connection.rb +16 -0
- data/lib/fx/adapters/postgres/functions.rb +59 -0
- data/lib/fx/adapters/postgres/triggers.rb +57 -0
- data/lib/fx/adapters/postgres.rb +167 -0
- data/lib/fx/command_recorder/arguments.rb +43 -0
- data/lib/fx/command_recorder/function.rb +30 -0
- data/lib/fx/command_recorder/trigger.rb +30 -0
- data/lib/fx/command_recorder.rb +24 -0
- data/lib/fx/configuration.rb +48 -0
- data/lib/fx/definition.rb +46 -0
- data/lib/fx/function.rb +26 -0
- data/lib/fx/railtie.rb +15 -0
- data/lib/fx/schema_dumper/function.rb +38 -0
- data/lib/fx/schema_dumper/trigger.rb +29 -0
- data/lib/fx/schema_dumper.rb +10 -0
- data/lib/fx/statements/function.rb +115 -0
- data/lib/fx/statements/trigger.rb +146 -0
- data/lib/fx/statements.rb +11 -0
- data/lib/fx/trigger.rb +26 -0
- data/lib/fx/version.rb +4 -0
- data/lib/fx.rb +43 -0
- data/lib/generators/fx/function/USAGE +11 -0
- data/lib/generators/fx/function/function_generator.rb +120 -0
- data/lib/generators/fx/function/templates/db/migrate/create_function.erb +5 -0
- data/lib/generators/fx/function/templates/db/migrate/update_function.erb +5 -0
- data/lib/generators/fx/trigger/USAGE +20 -0
- data/lib/generators/fx/trigger/templates/db/migrate/create_trigger.erb +5 -0
- data/lib/generators/fx/trigger/templates/db/migrate/update_trigger.erb +5 -0
- data/lib/generators/fx/trigger/trigger_generator.rb +130 -0
- data/lib/generators.rb +11 -0
- data/spec/acceptance/user_manages_functions_spec.rb +57 -0
- data/spec/acceptance/user_manages_triggers_spec.rb +51 -0
- data/spec/acceptance_helper.rb +62 -0
- data/spec/dummy/.gitignore +16 -0
- data/spec/dummy/Rakefile +13 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config/application.rb +15 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +9 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/.keep +0 -0
- data/spec/features/functions/migrations_spec.rb +65 -0
- data/spec/features/functions/revert_spec.rb +75 -0
- data/spec/features/triggers/migrations_spec.rb +56 -0
- data/spec/features/triggers/revert_spec.rb +95 -0
- data/spec/fx/adapters/postgres/functions_spec.rb +37 -0
- data/spec/fx/adapters/postgres/triggers_spec.rb +45 -0
- data/spec/fx/adapters/postgres_spec.rb +146 -0
- data/spec/fx/command_recorder/arguments_spec.rb +41 -0
- data/spec/fx/command_recorder_spec.rb +171 -0
- data/spec/fx/configuration_spec.rb +21 -0
- data/spec/fx/definition_spec.rb +134 -0
- data/spec/fx/function_spec.rb +68 -0
- data/spec/fx/schema_dumper/function_spec.rb +80 -0
- data/spec/fx/schema_dumper/trigger_spec.rb +40 -0
- data/spec/fx/statements/function_spec.rb +103 -0
- data/spec/fx/statements/trigger_spec.rb +132 -0
- data/spec/fx/trigger_spec.rb +55 -0
- data/spec/generators/fx/function/function_generator_spec.rb +46 -0
- data/spec/generators/fx/trigger/trigger_generator_spec.rb +59 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/definition_helpers.rb +37 -0
- data/spec/support/generator_setup.rb +11 -0
- data/spec/support/migration_helpers.rb +25 -0
- metadata +357 -0
data/.travis.yml
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
addons:
|
|
2
|
+
postgresql: "10"
|
|
3
|
+
apt:
|
|
4
|
+
packages:
|
|
5
|
+
- postgresql-10
|
|
6
|
+
- postgresql-client-10
|
|
7
|
+
before_install:
|
|
8
|
+
- "echo '--colour' > ~/.rspec"
|
|
9
|
+
- "echo 'gem: --no-document' > ~/.gemrc"
|
|
10
|
+
- git config --global user.name "Travis CI"
|
|
11
|
+
- git config --global user.email "travis-ci@example.com"
|
|
12
|
+
branches:
|
|
13
|
+
only:
|
|
14
|
+
- master
|
|
15
|
+
install:
|
|
16
|
+
- travis_retry bin/setup
|
|
17
|
+
language:
|
|
18
|
+
- ruby
|
|
19
|
+
notifications:
|
|
20
|
+
email: false
|
|
21
|
+
rvm:
|
|
22
|
+
- 3.0
|
|
23
|
+
- 2.7
|
|
24
|
+
- 2.6
|
|
25
|
+
- 2.5
|
|
26
|
+
- 2.4
|
|
27
|
+
gemfile:
|
|
28
|
+
- gemfiles/rails42.gemfile
|
|
29
|
+
- gemfiles/rails50.gemfile
|
|
30
|
+
- gemfiles/rails51.gemfile
|
|
31
|
+
- gemfiles/rails52.gemfile
|
|
32
|
+
- gemfiles/rails60.gemfile
|
|
33
|
+
- gemfiles/rails61.gemfile
|
|
34
|
+
- gemfiles/rails_edge.gemfile
|
|
35
|
+
matrix:
|
|
36
|
+
allow_failures:
|
|
37
|
+
- gemfile: gemfiles/rails_edge.gemfile
|
|
38
|
+
exclude:
|
|
39
|
+
- rvm: 2.4
|
|
40
|
+
gemfile: gemfiles/rails60.gemfile
|
|
41
|
+
- rvm: 2.4
|
|
42
|
+
gemfile: gemfiles/rails61.gemfile
|
|
43
|
+
- rvm: 2.4
|
|
44
|
+
gemfile: gemfiles/rails_edge.gemfile
|
|
45
|
+
- rvm: 2.5
|
|
46
|
+
gemfile: gemfiles/rails_edge.gemfile
|
|
47
|
+
- rvm: 2.6
|
|
48
|
+
gemfile: gemfiles/rails42.gemfile
|
|
49
|
+
- rvm: 2.6
|
|
50
|
+
gemfile: gemfiles/rails_edge.gemfile
|
|
51
|
+
- rvm: 2.7
|
|
52
|
+
gemfile: gemfiles/rails42.gemfile
|
|
53
|
+
- rvm: 3.0
|
|
54
|
+
gemfile: gemfiles/rails42.gemfile
|
|
55
|
+
- rvm: 3.0
|
|
56
|
+
gemfile: gemfiles/rails50.gemfile
|
|
57
|
+
- rvm: 3.0
|
|
58
|
+
gemfile: gemfiles/rails51.gemfile
|
|
59
|
+
- rvm: 3.0
|
|
60
|
+
gemfile: gemfiles/rails52.gemfile
|
data/.yardopts
ADDED
data/Appraisals
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
if RUBY_VERSION < "2.6.0"
|
|
2
|
+
appraise "rails42" do
|
|
3
|
+
gem "activerecord", "~> 4.2.0"
|
|
4
|
+
gem "railties", "~> 4.2.0"
|
|
5
|
+
gem "pg", "~> 0.15.0"
|
|
6
|
+
gem "bigdecimal", "1.3.5"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
if RUBY_VERSION >= "2.2.0" and RUBY_VERSION < "3.0.0"
|
|
11
|
+
appraise "rails50" do
|
|
12
|
+
gem "activerecord", "~> 5.0.0"
|
|
13
|
+
gem "railties", "~> 5.0.0"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
appraise "rails51" do
|
|
17
|
+
gem "activerecord", "~> 5.1.0"
|
|
18
|
+
gem "railties", "~> 5.1.0"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
appraise "rails52" do
|
|
22
|
+
gem "activerecord", "~> 5.2.0"
|
|
23
|
+
gem "railties", "~> 5.2.0"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
if RUBY_VERSION >= "2.5.0"
|
|
29
|
+
appraise "rails60" do
|
|
30
|
+
gem "activerecord", "~> 6.0.0"
|
|
31
|
+
gem "railties", "~> 6.0.0"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
appraise "rails61" do
|
|
35
|
+
gem "activerecord", "~> 6.1.0"
|
|
36
|
+
gem "railties", "~> 6.1.0"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
if RUBY_VERSION >= "2.7.0"
|
|
41
|
+
appraise "rails-edge" do
|
|
42
|
+
gem "rails", github: "rails/rails", branch: "main"
|
|
43
|
+
gem "arel", :github => "rails/arel"
|
|
44
|
+
end
|
|
45
|
+
end
|
data/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
1. Fork the repository.
|
|
4
|
+
2. Run `bin/setup`, which will install dependencies and create the dummy
|
|
5
|
+
application database.
|
|
6
|
+
3. Run `bin/appraisal rake` to verify that the tests pass against all
|
|
7
|
+
supported versions of Rails.
|
|
8
|
+
4. Make your change with new passing tests, following the existing style.
|
|
9
|
+
5. Write a [good commit message], push your fork, and submit a pull request.
|
|
10
|
+
|
|
11
|
+
[good commit message]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
|
12
|
+
|
|
13
|
+
Others will give constructive feedback. This is a time for discussion and
|
|
14
|
+
improvements, and making the necessary changes will be required before we can
|
|
15
|
+
merge the contribution.
|
data/Gemfile
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
Copyright 2016 Teo Ljungberg
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to
|
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
7
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
8
|
+
subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
15
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
16
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
17
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
18
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Version for Ruby on Jets
|
data/Rakefile
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require "bundler/gem_tasks"
|
|
2
|
+
require "rspec/core/rake_task"
|
|
3
|
+
|
|
4
|
+
namespace :dummy do
|
|
5
|
+
require_relative "spec/dummy/config/application"
|
|
6
|
+
Dummy::Application.load_tasks
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
task(:spec).clear
|
|
10
|
+
desc "Run specs other than spec/acceptance"
|
|
11
|
+
RSpec::Core::RakeTask.new("spec") do |task|
|
|
12
|
+
task.exclude_pattern = "spec/acceptance/**/*_spec.rb"
|
|
13
|
+
task.verbose = false
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc "Run acceptance specs in spec/acceptance"
|
|
17
|
+
RSpec::Core::RakeTask.new("spec:acceptance") do |task|
|
|
18
|
+
task.pattern = "spec/acceptance/**/*_spec.rb"
|
|
19
|
+
task.verbose = false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
desc "Run the specs and acceptance tests"
|
|
23
|
+
task default: %w(spec spec:acceptance)
|
data/bin/appraisal
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
#
|
|
4
|
+
# This file was generated by Bundler.
|
|
5
|
+
#
|
|
6
|
+
# The application 'appraisal' is installed as part of a gem, and
|
|
7
|
+
# this file is here to facilitate running it.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
require "pathname"
|
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
12
|
+
Pathname.new(__FILE__).realpath)
|
|
13
|
+
|
|
14
|
+
require "rubygems"
|
|
15
|
+
require "bundler/setup"
|
|
16
|
+
|
|
17
|
+
load Gem.bin_path("appraisal", "appraisal")
|
data/bin/console
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require "bundler/setup"
|
|
4
|
+
require "fx"
|
|
5
|
+
|
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
+
|
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
+
# require "pry"
|
|
11
|
+
# Pry.start
|
|
12
|
+
|
|
13
|
+
require "irb"
|
|
14
|
+
IRB.start
|
data/bin/rake
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
#
|
|
4
|
+
# This file was generated by Bundler.
|
|
5
|
+
#
|
|
6
|
+
# The application 'rake' is installed as part of a gem, and
|
|
7
|
+
# this file is here to facilitate running it.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
require "pathname"
|
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
12
|
+
Pathname.new(__FILE__).realpath)
|
|
13
|
+
|
|
14
|
+
require "rubygems"
|
|
15
|
+
require "bundler/setup"
|
|
16
|
+
|
|
17
|
+
load Gem.bin_path("rake", "rake")
|
data/bin/rspec
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
#
|
|
4
|
+
# This file was generated by Bundler.
|
|
5
|
+
#
|
|
6
|
+
# The application 'rspec' is installed as part of a gem, and
|
|
7
|
+
# this file is here to facilitate running it.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
require "pathname"
|
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
12
|
+
Pathname.new(__FILE__).realpath)
|
|
13
|
+
|
|
14
|
+
require "rubygems"
|
|
15
|
+
require "bundler/setup"
|
|
16
|
+
|
|
17
|
+
load Gem.bin_path("rspec-core", "rspec")
|
data/bin/setup
ADDED
data/bin/yard
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
#
|
|
4
|
+
# This file was generated by Bundler.
|
|
5
|
+
#
|
|
6
|
+
# The application 'yard' is installed as part of a gem, and
|
|
7
|
+
# this file is here to facilitate running it.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
require "pathname"
|
|
11
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
|
12
|
+
Pathname.new(__FILE__).realpath)
|
|
13
|
+
|
|
14
|
+
require "rubygems"
|
|
15
|
+
require "bundler/setup"
|
|
16
|
+
|
|
17
|
+
load Gem.bin_path("yard", "yard")
|
data/fx.gemspec
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require "fx/version"
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "fx-jets"
|
|
8
|
+
spec.version = Fx::VERSION
|
|
9
|
+
spec.authors = ["Ivan Snisarenko"]
|
|
10
|
+
spec.email = ["ivan"]
|
|
11
|
+
spec.summary = %q{Support for database functions and triggers in Rails migrations}
|
|
12
|
+
spec.description = <<-DESCRIPTION
|
|
13
|
+
Adds methods to ActiveRecord::Migration to create and manage database functions
|
|
14
|
+
and triggers in Rails
|
|
15
|
+
DESCRIPTION
|
|
16
|
+
spec.homepage = "https://github.com/teoljungberg/fx"
|
|
17
|
+
spec.license = 'MIT'
|
|
18
|
+
|
|
19
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
20
|
+
spec.test_files = spec.files.grep(%r{^spec/})
|
|
21
|
+
spec.require_paths = ['lib']
|
|
22
|
+
|
|
23
|
+
spec.add_development_dependency "appraisal", '~> 2.3.0'
|
|
24
|
+
spec.add_development_dependency "bundler", '>= 1.5'
|
|
25
|
+
spec.add_development_dependency "database_cleaner"
|
|
26
|
+
spec.add_development_dependency "rake"
|
|
27
|
+
spec.add_development_dependency "rspec", '>= 3.3'
|
|
28
|
+
spec.add_development_dependency "pg"
|
|
29
|
+
spec.add_development_dependency "pry"
|
|
30
|
+
spec.add_development_dependency "ammeter", '>= 1.1.3'
|
|
31
|
+
spec.add_development_dependency "yard"
|
|
32
|
+
spec.add_development_dependency "redcarpet"
|
|
33
|
+
|
|
34
|
+
spec.add_dependency "jets", '>= 2.0.0'
|
|
35
|
+
spec.add_dependency "activerecord", '>= 4.0.0'
|
|
36
|
+
spec.add_dependency "railties", '>= 4.0.0'
|
|
37
|
+
|
|
38
|
+
spec.required_ruby_version = ">= 2.1"
|
|
39
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Fx
|
|
2
|
+
module Adapters
|
|
3
|
+
class Postgres
|
|
4
|
+
# Decorates an ActiveRecord connection with methods that help determine
|
|
5
|
+
# the connections capabilities.
|
|
6
|
+
#
|
|
7
|
+
# Every attempt is made to use the versions of these methods defined by
|
|
8
|
+
# Rails where they are available and public before falling back to our own
|
|
9
|
+
# implementations for older Rails versions.
|
|
10
|
+
#
|
|
11
|
+
# @api private
|
|
12
|
+
class Connection < SimpleDelegator
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require "fx/function"
|
|
2
|
+
|
|
3
|
+
module Fx
|
|
4
|
+
module Adapters
|
|
5
|
+
class Postgres
|
|
6
|
+
# Fetches defined functions from the postgres connection.
|
|
7
|
+
# @api private
|
|
8
|
+
class Functions
|
|
9
|
+
# The SQL query used by F(x) to retrieve the functions considered
|
|
10
|
+
# dumpable into `db/schema.rb`.
|
|
11
|
+
FUNCTIONS_WITH_DEFINITIONS_QUERY = <<-EOS.freeze
|
|
12
|
+
SELECT
|
|
13
|
+
pp.proname AS name,
|
|
14
|
+
pg_get_functiondef(pp.oid) AS definition
|
|
15
|
+
FROM pg_proc pp
|
|
16
|
+
JOIN pg_namespace pn
|
|
17
|
+
ON pn.oid = pp.pronamespace
|
|
18
|
+
LEFT JOIN pg_depend pd
|
|
19
|
+
ON pd.objid = pp.oid AND pd.deptype = 'e'
|
|
20
|
+
LEFT JOIN pg_aggregate pa
|
|
21
|
+
ON pa.aggfnoid = pp.oid
|
|
22
|
+
WHERE pn.nspname = 'public' AND pd.objid IS NULL
|
|
23
|
+
AND pa.aggfnoid IS NULL
|
|
24
|
+
ORDER BY pp.oid;
|
|
25
|
+
EOS
|
|
26
|
+
|
|
27
|
+
# Wraps #all as a static facade.
|
|
28
|
+
#
|
|
29
|
+
# @return [Array<Fx::Function>]
|
|
30
|
+
def self.all(*args)
|
|
31
|
+
new(*args).all
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def initialize(connection)
|
|
35
|
+
@connection = connection
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# All of the functions that this connection has defined.
|
|
39
|
+
#
|
|
40
|
+
# @return [Array<Fx::Function>]
|
|
41
|
+
def all
|
|
42
|
+
functions_from_postgres.map { |function| to_fx_function(function) }
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
private
|
|
46
|
+
|
|
47
|
+
attr_reader :connection
|
|
48
|
+
|
|
49
|
+
def functions_from_postgres
|
|
50
|
+
connection.execute(FUNCTIONS_WITH_DEFINITIONS_QUERY)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def to_fx_function(result)
|
|
54
|
+
Fx::Function.new(result)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require "fx/trigger"
|
|
2
|
+
|
|
3
|
+
module Fx
|
|
4
|
+
module Adapters
|
|
5
|
+
class Postgres
|
|
6
|
+
# Fetches defined triggers from the postgres connection.
|
|
7
|
+
# @api private
|
|
8
|
+
class Triggers
|
|
9
|
+
# The SQL query used by F(x) to retrieve the triggers considered
|
|
10
|
+
# dumpable into `db/schema.rb`.
|
|
11
|
+
TRIGGERS_WITH_DEFINITIONS_QUERY = <<-EOS.freeze
|
|
12
|
+
SELECT
|
|
13
|
+
pt.tgname AS name,
|
|
14
|
+
pg_get_triggerdef(pt.oid) AS definition
|
|
15
|
+
FROM pg_trigger pt
|
|
16
|
+
JOIN pg_class pc
|
|
17
|
+
ON (pc.oid = pt.tgrelid)
|
|
18
|
+
JOIN pg_proc pp
|
|
19
|
+
ON (pp.oid = pt.tgfoid)
|
|
20
|
+
WHERE pt.tgname
|
|
21
|
+
NOT ILIKE '%constraint%' AND pt.tgname NOT ILIKE 'pg%'
|
|
22
|
+
ORDER BY pc.oid;
|
|
23
|
+
EOS
|
|
24
|
+
|
|
25
|
+
# Wraps #all as a static facade.
|
|
26
|
+
#
|
|
27
|
+
# @return [Array<Fx::Trigger>]
|
|
28
|
+
def self.all(*args)
|
|
29
|
+
new(*args).all
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def initialize(connection)
|
|
33
|
+
@connection = connection
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# All of the triggers that this connection has defined.
|
|
37
|
+
#
|
|
38
|
+
# @return [Array<Fx::Trigger>]
|
|
39
|
+
def all
|
|
40
|
+
triggers_from_postgres.map { |trigger| to_fx_trigger(trigger) }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
attr_reader :connection
|
|
46
|
+
|
|
47
|
+
def triggers_from_postgres
|
|
48
|
+
connection.execute(TRIGGERS_WITH_DEFINITIONS_QUERY)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_fx_trigger(result)
|
|
52
|
+
Fx::Trigger.new(result)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|