fx 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/.travis.yml +27 -0
- data/.yardopts +4 -0
- data/Appraisals +21 -0
- data/CONTRIBUTING.md +15 -0
- data/Gemfile +4 -0
- data/README.md +81 -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 +12 -0
- data/bin/yard +17 -0
- data/fx.gemspec +38 -0
- data/gemfiles/rails40.gemfile +8 -0
- data/gemfiles/rails40.gemfile.lock +111 -0
- data/gemfiles/rails41.gemfile +8 -0
- data/gemfiles/rails41.gemfile.lock +113 -0
- data/gemfiles/rails42.gemfile +8 -0
- data/gemfiles/rails42.gemfile.lock +130 -0
- data/gemfiles/rails50.gemfile +8 -0
- data/gemfiles/rails50.gemfile.lock +126 -0
- data/lib/fx.rb +21 -0
- data/lib/fx/adapters/postgres.rb +142 -0
- data/lib/fx/adapters/postgres/connection.rb +16 -0
- data/lib/fx/adapters/postgres/functions.rb +55 -0
- data/lib/fx/adapters/postgres/triggers.rb +56 -0
- data/lib/fx/command_recorder.rb +29 -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/configuration.rb +38 -0
- data/lib/fx/definition.rb +36 -0
- data/lib/fx/function.rb +24 -0
- data/lib/fx/schema_dumper.rb +15 -0
- data/lib/fx/schema_dumper/function.rb +29 -0
- data/lib/fx/schema_dumper/trigger.rb +29 -0
- data/lib/fx/statements.rb +16 -0
- data/lib/fx/statements/function.rb +105 -0
- data/lib/fx/statements/trigger.rb +133 -0
- data/lib/fx/trigger.rb +24 -0
- data/lib/fx/version.rb +4 -0
- data/lib/generators.rb +11 -0
- data/lib/generators/fx/function/USAGE +9 -0
- data/lib/generators/fx/function/function_generator.rb +98 -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 +18 -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 +108 -0
- data/spec/acceptance/user_manages_functions_spec.rb +37 -0
- data/spec/acceptance/user_manages_triggers_spec.rb +51 -0
- data/spec/acceptance_helper.rb +61 -0
- data/spec/dummy/.gitignore +16 -0
- data/spec/dummy/Rakefile +6 -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.ru +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/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_spec.rb +149 -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 +111 -0
- data/spec/fx/schema_dumper/function_spec.rb +22 -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/generators/fx/function/function_generator_spec.rb +34 -0
- data/spec/generators/fx/trigger/trigger_generator_spec.rb +47 -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 +17 -0
- metadata +334 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../
|
3
|
+
specs:
|
4
|
+
fx (0.1.0)
|
5
|
+
activerecord (>= 4.0.0)
|
6
|
+
railties (>= 4.0.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
actionpack (4.1.15)
|
12
|
+
actionview (= 4.1.15)
|
13
|
+
activesupport (= 4.1.15)
|
14
|
+
rack (~> 1.5.2)
|
15
|
+
rack-test (~> 0.6.2)
|
16
|
+
actionview (4.1.15)
|
17
|
+
activesupport (= 4.1.15)
|
18
|
+
builder (~> 3.1)
|
19
|
+
erubis (~> 2.7.0)
|
20
|
+
activemodel (4.1.15)
|
21
|
+
activesupport (= 4.1.15)
|
22
|
+
builder (~> 3.1)
|
23
|
+
activerecord (4.1.15)
|
24
|
+
activemodel (= 4.1.15)
|
25
|
+
activesupport (= 4.1.15)
|
26
|
+
arel (~> 5.0.0)
|
27
|
+
activesupport (4.1.15)
|
28
|
+
i18n (~> 0.6, >= 0.6.9)
|
29
|
+
json (~> 1.7, >= 1.7.7)
|
30
|
+
minitest (~> 5.1)
|
31
|
+
thread_safe (~> 0.1)
|
32
|
+
tzinfo (~> 1.1)
|
33
|
+
ammeter (1.1.3)
|
34
|
+
activesupport (>= 3.0)
|
35
|
+
railties (>= 3.0)
|
36
|
+
rspec-rails (>= 2.2)
|
37
|
+
appraisal (2.1.0)
|
38
|
+
bundler
|
39
|
+
rake
|
40
|
+
thor (>= 0.14.0)
|
41
|
+
arel (5.0.1.20140414130214)
|
42
|
+
builder (3.2.2)
|
43
|
+
coderay (1.1.1)
|
44
|
+
database_cleaner (1.5.3)
|
45
|
+
diff-lcs (1.2.5)
|
46
|
+
erubis (2.7.0)
|
47
|
+
i18n (0.7.0)
|
48
|
+
json (1.8.3)
|
49
|
+
method_source (0.8.2)
|
50
|
+
minitest (5.9.0)
|
51
|
+
pg (0.18.4)
|
52
|
+
pry (0.10.3)
|
53
|
+
coderay (~> 1.1.0)
|
54
|
+
method_source (~> 0.8.1)
|
55
|
+
slop (~> 3.4)
|
56
|
+
rack (1.5.5)
|
57
|
+
rack-test (0.6.3)
|
58
|
+
rack (>= 1.0)
|
59
|
+
railties (4.1.15)
|
60
|
+
actionpack (= 4.1.15)
|
61
|
+
activesupport (= 4.1.15)
|
62
|
+
rake (>= 0.8.7)
|
63
|
+
thor (>= 0.18.1, < 2.0)
|
64
|
+
rake (11.1.2)
|
65
|
+
redcarpet (3.3.4)
|
66
|
+
rspec (3.4.0)
|
67
|
+
rspec-core (~> 3.4.0)
|
68
|
+
rspec-expectations (~> 3.4.0)
|
69
|
+
rspec-mocks (~> 3.4.0)
|
70
|
+
rspec-core (3.4.4)
|
71
|
+
rspec-support (~> 3.4.0)
|
72
|
+
rspec-expectations (3.4.0)
|
73
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
74
|
+
rspec-support (~> 3.4.0)
|
75
|
+
rspec-mocks (3.4.1)
|
76
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
77
|
+
rspec-support (~> 3.4.0)
|
78
|
+
rspec-rails (3.4.2)
|
79
|
+
actionpack (>= 3.0, < 4.3)
|
80
|
+
activesupport (>= 3.0, < 4.3)
|
81
|
+
railties (>= 3.0, < 4.3)
|
82
|
+
rspec-core (~> 3.4.0)
|
83
|
+
rspec-expectations (~> 3.4.0)
|
84
|
+
rspec-mocks (~> 3.4.0)
|
85
|
+
rspec-support (~> 3.4.0)
|
86
|
+
rspec-support (3.4.1)
|
87
|
+
slop (3.6.0)
|
88
|
+
thor (0.19.1)
|
89
|
+
thread_safe (0.3.5)
|
90
|
+
tzinfo (1.2.2)
|
91
|
+
thread_safe (~> 0.1)
|
92
|
+
yard (0.8.7.6)
|
93
|
+
|
94
|
+
PLATFORMS
|
95
|
+
ruby
|
96
|
+
|
97
|
+
DEPENDENCIES
|
98
|
+
activerecord (~> 4.1.0)
|
99
|
+
ammeter (>= 1.1.3)
|
100
|
+
appraisal
|
101
|
+
bundler (>= 1.5)
|
102
|
+
database_cleaner
|
103
|
+
fx!
|
104
|
+
pg
|
105
|
+
pry
|
106
|
+
railties (~> 4.1.0)
|
107
|
+
rake
|
108
|
+
redcarpet
|
109
|
+
rspec (>= 3.3)
|
110
|
+
yard
|
111
|
+
|
112
|
+
BUNDLED WITH
|
113
|
+
1.12.4
|
@@ -0,0 +1,130 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../
|
3
|
+
specs:
|
4
|
+
fx (0.1.0)
|
5
|
+
activerecord (>= 4.0.0)
|
6
|
+
railties (>= 4.0.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
actionpack (4.2.6)
|
12
|
+
actionview (= 4.2.6)
|
13
|
+
activesupport (= 4.2.6)
|
14
|
+
rack (~> 1.6)
|
15
|
+
rack-test (~> 0.6.2)
|
16
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
17
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
18
|
+
actionview (4.2.6)
|
19
|
+
activesupport (= 4.2.6)
|
20
|
+
builder (~> 3.1)
|
21
|
+
erubis (~> 2.7.0)
|
22
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
23
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
24
|
+
activemodel (4.2.6)
|
25
|
+
activesupport (= 4.2.6)
|
26
|
+
builder (~> 3.1)
|
27
|
+
activerecord (4.2.6)
|
28
|
+
activemodel (= 4.2.6)
|
29
|
+
activesupport (= 4.2.6)
|
30
|
+
arel (~> 6.0)
|
31
|
+
activesupport (4.2.6)
|
32
|
+
i18n (~> 0.7)
|
33
|
+
json (~> 1.7, >= 1.7.7)
|
34
|
+
minitest (~> 5.1)
|
35
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
36
|
+
tzinfo (~> 1.1)
|
37
|
+
ammeter (1.1.3)
|
38
|
+
activesupport (>= 3.0)
|
39
|
+
railties (>= 3.0)
|
40
|
+
rspec-rails (>= 2.2)
|
41
|
+
appraisal (2.1.0)
|
42
|
+
bundler
|
43
|
+
rake
|
44
|
+
thor (>= 0.14.0)
|
45
|
+
arel (6.0.3)
|
46
|
+
builder (3.2.2)
|
47
|
+
coderay (1.1.1)
|
48
|
+
database_cleaner (1.5.3)
|
49
|
+
diff-lcs (1.2.5)
|
50
|
+
erubis (2.7.0)
|
51
|
+
i18n (0.7.0)
|
52
|
+
json (1.8.3)
|
53
|
+
loofah (2.0.3)
|
54
|
+
nokogiri (>= 1.5.9)
|
55
|
+
method_source (0.8.2)
|
56
|
+
mini_portile2 (2.0.0)
|
57
|
+
minitest (5.9.0)
|
58
|
+
nokogiri (1.6.7.2)
|
59
|
+
mini_portile2 (~> 2.0.0.rc2)
|
60
|
+
pg (0.18.4)
|
61
|
+
pry (0.10.3)
|
62
|
+
coderay (~> 1.1.0)
|
63
|
+
method_source (~> 0.8.1)
|
64
|
+
slop (~> 3.4)
|
65
|
+
rack (1.6.4)
|
66
|
+
rack-test (0.6.3)
|
67
|
+
rack (>= 1.0)
|
68
|
+
rails-deprecated_sanitizer (1.0.3)
|
69
|
+
activesupport (>= 4.2.0.alpha)
|
70
|
+
rails-dom-testing (1.0.7)
|
71
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
72
|
+
nokogiri (~> 1.6.0)
|
73
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
74
|
+
rails-html-sanitizer (1.0.3)
|
75
|
+
loofah (~> 2.0)
|
76
|
+
railties (4.2.6)
|
77
|
+
actionpack (= 4.2.6)
|
78
|
+
activesupport (= 4.2.6)
|
79
|
+
rake (>= 0.8.7)
|
80
|
+
thor (>= 0.18.1, < 2.0)
|
81
|
+
rake (11.1.2)
|
82
|
+
redcarpet (3.3.4)
|
83
|
+
rspec (3.4.0)
|
84
|
+
rspec-core (~> 3.4.0)
|
85
|
+
rspec-expectations (~> 3.4.0)
|
86
|
+
rspec-mocks (~> 3.4.0)
|
87
|
+
rspec-core (3.4.4)
|
88
|
+
rspec-support (~> 3.4.0)
|
89
|
+
rspec-expectations (3.4.0)
|
90
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
91
|
+
rspec-support (~> 3.4.0)
|
92
|
+
rspec-mocks (3.4.1)
|
93
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
94
|
+
rspec-support (~> 3.4.0)
|
95
|
+
rspec-rails (3.4.2)
|
96
|
+
actionpack (>= 3.0, < 4.3)
|
97
|
+
activesupport (>= 3.0, < 4.3)
|
98
|
+
railties (>= 3.0, < 4.3)
|
99
|
+
rspec-core (~> 3.4.0)
|
100
|
+
rspec-expectations (~> 3.4.0)
|
101
|
+
rspec-mocks (~> 3.4.0)
|
102
|
+
rspec-support (~> 3.4.0)
|
103
|
+
rspec-support (3.4.1)
|
104
|
+
slop (3.6.0)
|
105
|
+
thor (0.19.1)
|
106
|
+
thread_safe (0.3.5)
|
107
|
+
tzinfo (1.2.2)
|
108
|
+
thread_safe (~> 0.1)
|
109
|
+
yard (0.8.7.6)
|
110
|
+
|
111
|
+
PLATFORMS
|
112
|
+
ruby
|
113
|
+
|
114
|
+
DEPENDENCIES
|
115
|
+
activerecord (~> 4.2.0)
|
116
|
+
ammeter (>= 1.1.3)
|
117
|
+
appraisal
|
118
|
+
bundler (>= 1.5)
|
119
|
+
database_cleaner
|
120
|
+
fx!
|
121
|
+
pg
|
122
|
+
pry
|
123
|
+
railties (~> 4.2.0)
|
124
|
+
rake
|
125
|
+
redcarpet
|
126
|
+
rspec (>= 3.3)
|
127
|
+
yard
|
128
|
+
|
129
|
+
BUNDLED WITH
|
130
|
+
1.12.4
|
@@ -0,0 +1,126 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../
|
3
|
+
specs:
|
4
|
+
fx (0.1.0)
|
5
|
+
activerecord (>= 4.0.0)
|
6
|
+
railties (>= 4.0.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
actionpack (5.0.0.1)
|
12
|
+
actionview (= 5.0.0.1)
|
13
|
+
activesupport (= 5.0.0.1)
|
14
|
+
rack (~> 2.0)
|
15
|
+
rack-test (~> 0.6.3)
|
16
|
+
rails-dom-testing (~> 2.0)
|
17
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
18
|
+
actionview (5.0.0.1)
|
19
|
+
activesupport (= 5.0.0.1)
|
20
|
+
builder (~> 3.1)
|
21
|
+
erubis (~> 2.7.0)
|
22
|
+
rails-dom-testing (~> 2.0)
|
23
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
24
|
+
activemodel (5.0.0.1)
|
25
|
+
activesupport (= 5.0.0.1)
|
26
|
+
activerecord (5.0.0.1)
|
27
|
+
activemodel (= 5.0.0.1)
|
28
|
+
activesupport (= 5.0.0.1)
|
29
|
+
arel (~> 7.0)
|
30
|
+
activesupport (5.0.0.1)
|
31
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
32
|
+
i18n (~> 0.7)
|
33
|
+
minitest (~> 5.1)
|
34
|
+
tzinfo (~> 1.1)
|
35
|
+
ammeter (1.1.3)
|
36
|
+
activesupport (>= 3.0)
|
37
|
+
railties (>= 3.0)
|
38
|
+
rspec-rails (>= 2.2)
|
39
|
+
appraisal (2.1.0)
|
40
|
+
bundler
|
41
|
+
rake
|
42
|
+
thor (>= 0.14.0)
|
43
|
+
arel (7.1.4)
|
44
|
+
builder (3.2.2)
|
45
|
+
coderay (1.1.1)
|
46
|
+
concurrent-ruby (1.0.2)
|
47
|
+
database_cleaner (1.5.3)
|
48
|
+
diff-lcs (1.2.5)
|
49
|
+
erubis (2.7.0)
|
50
|
+
i18n (0.7.0)
|
51
|
+
loofah (2.0.3)
|
52
|
+
nokogiri (>= 1.5.9)
|
53
|
+
method_source (0.8.2)
|
54
|
+
mini_portile2 (2.1.0)
|
55
|
+
minitest (5.9.1)
|
56
|
+
nokogiri (1.6.8.1)
|
57
|
+
mini_portile2 (~> 2.1.0)
|
58
|
+
pg (0.18.4)
|
59
|
+
pry (0.10.3)
|
60
|
+
coderay (~> 1.1.0)
|
61
|
+
method_source (~> 0.8.1)
|
62
|
+
slop (~> 3.4)
|
63
|
+
rack (2.0.1)
|
64
|
+
rack-test (0.6.3)
|
65
|
+
rack (>= 1.0)
|
66
|
+
rails-dom-testing (2.0.1)
|
67
|
+
activesupport (>= 4.2.0, < 6.0)
|
68
|
+
nokogiri (~> 1.6.0)
|
69
|
+
rails-html-sanitizer (1.0.3)
|
70
|
+
loofah (~> 2.0)
|
71
|
+
railties (5.0.0.1)
|
72
|
+
actionpack (= 5.0.0.1)
|
73
|
+
activesupport (= 5.0.0.1)
|
74
|
+
method_source
|
75
|
+
rake (>= 0.8.7)
|
76
|
+
thor (>= 0.18.1, < 2.0)
|
77
|
+
rake (11.2.2)
|
78
|
+
redcarpet (3.3.4)
|
79
|
+
rspec (3.5.0)
|
80
|
+
rspec-core (~> 3.5.0)
|
81
|
+
rspec-expectations (~> 3.5.0)
|
82
|
+
rspec-mocks (~> 3.5.0)
|
83
|
+
rspec-core (3.5.4)
|
84
|
+
rspec-support (~> 3.5.0)
|
85
|
+
rspec-expectations (3.5.0)
|
86
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
87
|
+
rspec-support (~> 3.5.0)
|
88
|
+
rspec-mocks (3.5.0)
|
89
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
90
|
+
rspec-support (~> 3.5.0)
|
91
|
+
rspec-rails (3.5.2)
|
92
|
+
actionpack (>= 3.0)
|
93
|
+
activesupport (>= 3.0)
|
94
|
+
railties (>= 3.0)
|
95
|
+
rspec-core (~> 3.5.0)
|
96
|
+
rspec-expectations (~> 3.5.0)
|
97
|
+
rspec-mocks (~> 3.5.0)
|
98
|
+
rspec-support (~> 3.5.0)
|
99
|
+
rspec-support (3.5.0)
|
100
|
+
slop (3.6.0)
|
101
|
+
thor (0.19.1)
|
102
|
+
thread_safe (0.3.5)
|
103
|
+
tzinfo (1.2.2)
|
104
|
+
thread_safe (~> 0.1)
|
105
|
+
yard (0.8.7.6)
|
106
|
+
|
107
|
+
PLATFORMS
|
108
|
+
ruby
|
109
|
+
|
110
|
+
DEPENDENCIES
|
111
|
+
activerecord (~> 5.0)
|
112
|
+
ammeter (>= 1.1.3)
|
113
|
+
appraisal
|
114
|
+
bundler (>= 1.5)
|
115
|
+
database_cleaner
|
116
|
+
fx!
|
117
|
+
pg
|
118
|
+
pry
|
119
|
+
railties (~> 5.0)
|
120
|
+
rake
|
121
|
+
redcarpet
|
122
|
+
rspec (>= 3.3)
|
123
|
+
yard
|
124
|
+
|
125
|
+
BUNDLED WITH
|
126
|
+
1.13.3
|
data/lib/fx.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "fx/version"
|
2
|
+
require "fx/adapters/postgres"
|
3
|
+
require "fx/command_recorder"
|
4
|
+
require "fx/configuration"
|
5
|
+
require "fx/definition"
|
6
|
+
require "fx/function"
|
7
|
+
require "fx/statements"
|
8
|
+
require "fx/schema_dumper"
|
9
|
+
require "fx/trigger"
|
10
|
+
|
11
|
+
# F(x) adds methods `ActiveRecord::Migration` to create and manage database
|
12
|
+
# triggers and functions in Rails applications.
|
13
|
+
module Fx
|
14
|
+
# The current database adapter used by F(x).
|
15
|
+
#
|
16
|
+
# This defaults to {Fx::Adapters::Postgres} but can be overridden
|
17
|
+
# via {Configuration}.
|
18
|
+
def self.database
|
19
|
+
configuration.database
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require "fx/adapters/postgres/connection"
|
2
|
+
require "fx/adapters/postgres/functions"
|
3
|
+
require "fx/adapters/postgres/triggers"
|
4
|
+
|
5
|
+
module Fx
|
6
|
+
# F(x) database adapters.
|
7
|
+
#
|
8
|
+
# F(x) ships with a Postgres adapter only but can be extended with
|
9
|
+
# additional adapters. The {Fx::Adapters::Postgres} adapter provides the
|
10
|
+
# interface.
|
11
|
+
module Adapters
|
12
|
+
# Creates an instance of the F(x) Postgres adapter.
|
13
|
+
#
|
14
|
+
# This is the default adapter for F(x). Configuring it via
|
15
|
+
# {Fx.configure} is not required, but the example below shows how one
|
16
|
+
# would explicitly set it.
|
17
|
+
#
|
18
|
+
# @param [#connection] connectable An object that returns the connection
|
19
|
+
# for F(x) to use. Defaults to `ActiveRecord::Base`.
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# Fx.configure do |config|
|
23
|
+
# config.adapter = Fx::Adapters::Postgres.new
|
24
|
+
# end
|
25
|
+
class Postgres
|
26
|
+
def initialize(connectable = ActiveRecord::Base)
|
27
|
+
@connectable = connectable
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns an array of functions in the database.
|
31
|
+
#
|
32
|
+
# This collection of functions is used by the [Fx::SchemaDumper] to
|
33
|
+
# populate the `schema.rb` file.
|
34
|
+
#
|
35
|
+
# @return [Array<Fx::Function>]
|
36
|
+
def functions
|
37
|
+
Functions.all(connection)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns an array of triggers in the database.
|
41
|
+
#
|
42
|
+
# This collection of triggers is used by the [Fx::SchemaDumper] to
|
43
|
+
# populate the `schema.rb` file.
|
44
|
+
#
|
45
|
+
# @return [Array<Fx::Trigger>]
|
46
|
+
def triggers
|
47
|
+
Triggers.all(connection)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Creates a function in the database.
|
51
|
+
#
|
52
|
+
# This is typically called in a migration via
|
53
|
+
# {Fx::Statements::Function#create_function}.
|
54
|
+
#
|
55
|
+
# @param sql_definition The SQL schema for the function.
|
56
|
+
#
|
57
|
+
# @return [void]
|
58
|
+
def create_function(sql_definition)
|
59
|
+
execute sql_definition
|
60
|
+
end
|
61
|
+
|
62
|
+
# Creates a trigger in the database.
|
63
|
+
#
|
64
|
+
# This is typically called in a migration via
|
65
|
+
# {Fx::Statements::Trigger#create_trigger}.
|
66
|
+
#
|
67
|
+
# @param sql_definition The SQL schema for the trigger.
|
68
|
+
#
|
69
|
+
# @return [void]
|
70
|
+
def create_trigger(sql_definition)
|
71
|
+
execute sql_definition
|
72
|
+
end
|
73
|
+
|
74
|
+
# Updates a function in the database.
|
75
|
+
#
|
76
|
+
# This is typically called in a migration via
|
77
|
+
# {Fx::Statements::Function#update_function}.
|
78
|
+
#
|
79
|
+
# @param name The name of the function.
|
80
|
+
# @param sql_definition The SQL schema for the function.
|
81
|
+
#
|
82
|
+
# @return [void]
|
83
|
+
def update_function(name, sql_definition)
|
84
|
+
drop_function(name)
|
85
|
+
create_function(sql_definition)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Updates a trigger in the database.
|
89
|
+
#
|
90
|
+
# The existing trigger is dropped and recreated using the supplied `on`
|
91
|
+
# and `version` parameter.
|
92
|
+
#
|
93
|
+
# This is typically called in a migration via
|
94
|
+
# {Fx::Statements::Function#update_trigger}.
|
95
|
+
#
|
96
|
+
# @param name The name of the trigger.
|
97
|
+
# @param on The associated table for the trigger to drop
|
98
|
+
# @param sql_definition The SQL schema for the function.
|
99
|
+
#
|
100
|
+
# @return [void]
|
101
|
+
def update_trigger(name, on:, sql_definition:)
|
102
|
+
drop_trigger(name, on: on)
|
103
|
+
create_trigger(sql_definition)
|
104
|
+
end
|
105
|
+
|
106
|
+
# Drops the function from the database
|
107
|
+
#
|
108
|
+
# This is typically called in a migration via
|
109
|
+
# {Fx::Statements::Function#drop_function}.
|
110
|
+
#
|
111
|
+
# @param name The name of the function to drop
|
112
|
+
#
|
113
|
+
# @return [void]
|
114
|
+
def drop_function(name)
|
115
|
+
execute "DROP FUNCTION #{name}();"
|
116
|
+
end
|
117
|
+
|
118
|
+
# Drops the trigger from the database
|
119
|
+
#
|
120
|
+
# This is typically called in a migration via
|
121
|
+
# {Fx::Statements::Trigger#drop_trigger}.
|
122
|
+
#
|
123
|
+
# @param name The name of the trigger to drop
|
124
|
+
# @param on The associated table for the trigger to drop
|
125
|
+
#
|
126
|
+
# @return [void]
|
127
|
+
def drop_trigger(name, on:)
|
128
|
+
execute "DROP TRIGGER #{name} ON #{on};"
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
attr_reader :connectable
|
134
|
+
|
135
|
+
delegate :execute, to: :connection
|
136
|
+
|
137
|
+
def connection
|
138
|
+
Connection.new(connectable.connection)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|