fx 0.8.0 → 0.10.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +2 -7
  3. data/CHANGELOG.md +150 -0
  4. data/CONTRIBUTING.md +3 -3
  5. data/Gemfile +11 -1
  6. data/README.md +2 -0
  7. data/bin/rake +2 -3
  8. data/bin/rspec +13 -3
  9. data/bin/standardrb +27 -0
  10. data/bin/yard +13 -3
  11. data/fx.gemspec +10 -15
  12. data/lib/fx/adapters/postgres/connection.rb +20 -0
  13. data/lib/fx/adapters/postgres/functions.rb +11 -28
  14. data/lib/fx/adapters/postgres/query_executor.rb +34 -0
  15. data/lib/fx/adapters/postgres/triggers.rb +14 -29
  16. data/lib/fx/adapters/postgres.rb +16 -24
  17. data/lib/fx/command_recorder.rb +87 -6
  18. data/lib/fx/configuration.rb +2 -27
  19. data/lib/fx/definition.rb +16 -6
  20. data/lib/fx/function.rb +3 -3
  21. data/lib/fx/schema_dumper.rb +37 -5
  22. data/lib/fx/statements.rb +231 -6
  23. data/lib/fx/trigger.rb +3 -3
  24. data/lib/fx/version.rb +1 -1
  25. data/lib/fx.rb +30 -12
  26. data/lib/generators/fx/function/function_generator.rb +50 -53
  27. data/lib/generators/fx/function/templates/db/migrate/create_function.erb +1 -1
  28. data/lib/generators/fx/function/templates/db/migrate/update_function.erb +1 -1
  29. data/lib/generators/fx/migration_helper.rb +53 -0
  30. data/lib/generators/fx/name_helper.rb +33 -0
  31. data/lib/generators/fx/trigger/templates/db/migrate/create_trigger.erb +1 -1
  32. data/lib/generators/fx/trigger/templates/db/migrate/update_trigger.erb +1 -1
  33. data/lib/generators/fx/trigger/trigger_generator.rb +44 -67
  34. data/lib/generators/fx/version_helper.rb +55 -0
  35. data/spec/acceptance/user_manages_functions_spec.rb +7 -7
  36. data/spec/acceptance/user_manages_triggers_spec.rb +11 -11
  37. data/spec/acceptance_helper.rb +4 -4
  38. data/spec/dummy/config/application.rb +5 -1
  39. data/spec/features/functions/migrations_spec.rb +5 -5
  40. data/spec/features/functions/revert_spec.rb +5 -5
  41. data/spec/features/triggers/migrations_spec.rb +7 -7
  42. data/spec/features/triggers/revert_spec.rb +9 -9
  43. data/spec/fx/adapters/postgres/functions_spec.rb +33 -30
  44. data/spec/fx/adapters/postgres/query_executor_spec.rb +75 -0
  45. data/spec/fx/adapters/postgres/triggers_spec.rb +41 -38
  46. data/spec/fx/adapters/postgres_spec.rb +155 -115
  47. data/spec/fx/command_recorder_spec.rb +27 -25
  48. data/spec/fx/configuration_spec.rb +20 -9
  49. data/spec/fx/definition_spec.rb +31 -39
  50. data/spec/fx/function_spec.rb +45 -48
  51. data/spec/fx/schema_dumper_spec.rb +169 -0
  52. data/spec/fx/statements_spec.rb +217 -0
  53. data/spec/fx/trigger_spec.rb +37 -40
  54. data/spec/fx_spec.rb +28 -0
  55. data/spec/generators/fx/function/function_generator_spec.rb +11 -11
  56. data/spec/generators/fx/migration_helper_spec.rb +133 -0
  57. data/spec/generators/fx/name_helper_spec.rb +114 -0
  58. data/spec/generators/fx/trigger/trigger_generator_spec.rb +45 -22
  59. data/spec/generators/fx/version_helper_spec.rb +157 -0
  60. data/spec/spec_helper.rb +7 -0
  61. data/spec/support/definition_helpers.rb +2 -6
  62. data/spec/support/generator_setup.rb +46 -5
  63. data/spec/support/warning_helper.rb +5 -0
  64. metadata +40 -165
  65. data/lib/fx/command_recorder/arguments.rb +0 -43
  66. data/lib/fx/command_recorder/function.rb +0 -30
  67. data/lib/fx/command_recorder/trigger.rb +0 -30
  68. data/lib/fx/schema_dumper/function.rb +0 -38
  69. data/lib/fx/schema_dumper/trigger.rb +0 -29
  70. data/lib/fx/statements/function.rb +0 -113
  71. data/lib/fx/statements/trigger.rb +0 -144
  72. data/spec/fx/command_recorder/arguments_spec.rb +0 -41
  73. data/spec/fx/schema_dumper/function_spec.rb +0 -78
  74. data/spec/fx/schema_dumper/trigger_spec.rb +0 -40
  75. data/spec/fx/statements/function_spec.rb +0 -103
  76. data/spec/fx/statements/trigger_spec.rb +0 -132
metadata CHANGED
@@ -1,186 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Teo Ljungberg
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
10
  date: 1980-01-01 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
- name: ammeter
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.1.3
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 1.1.3
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '1.5'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '1.5'
41
- - !ruby/object:Gem::Dependency
42
- name: database_cleaner
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: pg
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: pry
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rake
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: redcarpet
13
+ name: activerecord
99
14
  requirement: !ruby/object:Gem::Requirement
100
15
  requirements:
101
16
  - - ">="
102
17
  - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
18
+ version: '7.2'
19
+ - - "<"
116
20
  - !ruby/object:Gem::Version
117
- version: '3.3'
118
- type: :development
21
+ version: '8.2'
22
+ type: :runtime
119
23
  prerelease: false
120
24
  version_requirements: !ruby/object:Gem::Requirement
121
25
  requirements:
122
26
  - - ">="
123
27
  - !ruby/object:Gem::Version
124
- version: '3.3'
125
- - !ruby/object:Gem::Dependency
126
- name: standardrb
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
28
+ version: '7.2'
29
+ - - "<"
130
30
  - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
31
+ version: '8.2'
139
32
  - !ruby/object:Gem::Dependency
140
- name: yard
33
+ name: railties
141
34
  requirement: !ruby/object:Gem::Requirement
142
35
  requirements:
143
36
  - - ">="
144
37
  - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
38
+ version: '7.2'
39
+ - - "<"
151
40
  - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: activerecord
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: 6.0.0
41
+ version: '8.2'
160
42
  type: :runtime
161
43
  prerelease: false
162
44
  version_requirements: !ruby/object:Gem::Requirement
163
45
  requirements:
164
46
  - - ">="
165
47
  - !ruby/object:Gem::Version
166
- version: 6.0.0
167
- - !ruby/object:Gem::Dependency
168
- name: railties
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: 6.0.0
174
- type: :runtime
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
48
+ version: '7.2'
49
+ - - "<"
179
50
  - !ruby/object:Gem::Version
180
- version: 6.0.0
181
- description: |2
182
- Adds methods to ActiveRecord::Migration to create and manage database functions
183
- and triggers in Rails
51
+ version: '8.2'
52
+ description: |
53
+ Adds methods to ActiveRecord::Migration to create and manage database functions
54
+ and triggers in Rails
184
55
  email:
185
56
  - teo@teoljungberg.com
186
57
  executables: []
@@ -192,6 +63,7 @@ files:
192
63
  - ".rspec"
193
64
  - ".standard.yml"
194
65
  - ".yardopts"
66
+ - CHANGELOG.md
195
67
  - CONTRIBUTING.md
196
68
  - Gemfile
197
69
  - LICENSE
@@ -201,27 +73,22 @@ files:
201
73
  - bin/rake
202
74
  - bin/rspec
203
75
  - bin/setup
76
+ - bin/standardrb
204
77
  - bin/yard
205
78
  - fx.gemspec
206
79
  - lib/fx.rb
207
80
  - lib/fx/adapters/postgres.rb
208
81
  - lib/fx/adapters/postgres/connection.rb
209
82
  - lib/fx/adapters/postgres/functions.rb
83
+ - lib/fx/adapters/postgres/query_executor.rb
210
84
  - lib/fx/adapters/postgres/triggers.rb
211
85
  - lib/fx/command_recorder.rb
212
- - lib/fx/command_recorder/arguments.rb
213
- - lib/fx/command_recorder/function.rb
214
- - lib/fx/command_recorder/trigger.rb
215
86
  - lib/fx/configuration.rb
216
87
  - lib/fx/definition.rb
217
88
  - lib/fx/function.rb
218
89
  - lib/fx/railtie.rb
219
90
  - lib/fx/schema_dumper.rb
220
- - lib/fx/schema_dumper/function.rb
221
- - lib/fx/schema_dumper/trigger.rb
222
91
  - lib/fx/statements.rb
223
- - lib/fx/statements/function.rb
224
- - lib/fx/statements/trigger.rb
225
92
  - lib/fx/trigger.rb
226
93
  - lib/fx/version.rb
227
94
  - lib/generators.rb
@@ -229,10 +96,13 @@ files:
229
96
  - lib/generators/fx/function/function_generator.rb
230
97
  - lib/generators/fx/function/templates/db/migrate/create_function.erb
231
98
  - lib/generators/fx/function/templates/db/migrate/update_function.erb
99
+ - lib/generators/fx/migration_helper.rb
100
+ - lib/generators/fx/name_helper.rb
232
101
  - lib/generators/fx/trigger/USAGE
233
102
  - lib/generators/fx/trigger/templates/db/migrate/create_trigger.erb
234
103
  - lib/generators/fx/trigger/templates/db/migrate/update_trigger.erb
235
104
  - lib/generators/fx/trigger/trigger_generator.rb
105
+ - lib/generators/fx/version_helper.rb
236
106
  - spec/acceptance/user_manages_functions_spec.rb
237
107
  - spec/acceptance/user_manages_triggers_spec.rb
238
108
  - spec/acceptance_helper.rb
@@ -252,29 +122,35 @@ files:
252
122
  - spec/features/triggers/migrations_spec.rb
253
123
  - spec/features/triggers/revert_spec.rb
254
124
  - spec/fx/adapters/postgres/functions_spec.rb
125
+ - spec/fx/adapters/postgres/query_executor_spec.rb
255
126
  - spec/fx/adapters/postgres/triggers_spec.rb
256
127
  - spec/fx/adapters/postgres_spec.rb
257
- - spec/fx/command_recorder/arguments_spec.rb
258
128
  - spec/fx/command_recorder_spec.rb
259
129
  - spec/fx/configuration_spec.rb
260
130
  - spec/fx/definition_spec.rb
261
131
  - spec/fx/function_spec.rb
262
- - spec/fx/schema_dumper/function_spec.rb
263
- - spec/fx/schema_dumper/trigger_spec.rb
264
- - spec/fx/statements/function_spec.rb
265
- - spec/fx/statements/trigger_spec.rb
132
+ - spec/fx/schema_dumper_spec.rb
133
+ - spec/fx/statements_spec.rb
266
134
  - spec/fx/trigger_spec.rb
135
+ - spec/fx_spec.rb
267
136
  - spec/generators/fx/function/function_generator_spec.rb
137
+ - spec/generators/fx/migration_helper_spec.rb
138
+ - spec/generators/fx/name_helper_spec.rb
268
139
  - spec/generators/fx/trigger/trigger_generator_spec.rb
140
+ - spec/generators/fx/version_helper_spec.rb
269
141
  - spec/spec_helper.rb
270
142
  - spec/support/definition_helpers.rb
271
143
  - spec/support/generator_setup.rb
272
144
  - spec/support/migration_helpers.rb
145
+ - spec/support/warning_helper.rb
273
146
  homepage: https://github.com/teoljungberg/fx
274
147
  licenses:
275
148
  - MIT
276
- metadata: {}
277
- post_install_message:
149
+ metadata:
150
+ bug_tracker_uri: https://github.com/teoljungberg/fx/issues
151
+ changelog_uri: https://github.com/teoljungberg/fx/blob/v0.10.0/CHANGELOG.md
152
+ homepage_uri: https://github.com/teoljungberg/fx
153
+ source_code_uri: https://github.com/teoljungberg/fx
278
154
  rdoc_options: []
279
155
  require_paths:
280
156
  - lib
@@ -282,15 +158,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
282
158
  requirements:
283
159
  - - ">="
284
160
  - !ruby/object:Gem::Version
285
- version: '2.7'
161
+ version: '3.2'
286
162
  required_rubygems_version: !ruby/object:Gem::Requirement
287
163
  requirements:
288
164
  - - ">="
289
165
  - !ruby/object:Gem::Version
290
166
  version: '0'
291
167
  requirements: []
292
- rubygems_version: 3.3.20
293
- signing_key:
168
+ rubygems_version: 3.6.9
294
169
  specification_version: 4
295
170
  summary: Support for database functions and triggers in Rails migrations
296
171
  test_files: []
@@ -1,43 +0,0 @@
1
- module Fx
2
- module CommandRecorder
3
- # @api private
4
- class Arguments
5
- def initialize(args)
6
- @args = args.freeze
7
- end
8
-
9
- def function
10
- @args[0]
11
- end
12
-
13
- def version
14
- options[:version]
15
- end
16
-
17
- def revert_to_version
18
- options[:revert_to_version]
19
- end
20
-
21
- def invert_version
22
- Arguments.new([function, options_for_revert])
23
- end
24
-
25
- def to_a
26
- @args.to_a
27
- end
28
-
29
- private
30
-
31
- def options
32
- @options ||= @args[1] || {}
33
- end
34
-
35
- def options_for_revert
36
- options.clone.tap do |revert_options|
37
- revert_options[:version] = revert_to_version
38
- revert_options.delete(:revert_to_version)
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,30 +0,0 @@
1
- module Fx
2
- module CommandRecorder
3
- # @api private
4
- module Function
5
- def create_function(*args)
6
- record(:create_function, args)
7
- end
8
-
9
- def drop_function(*args)
10
- record(:drop_function, args)
11
- end
12
-
13
- def update_function(*args)
14
- record(:update_function, args)
15
- end
16
-
17
- def invert_create_function(args)
18
- [:drop_function, args]
19
- end
20
-
21
- def invert_drop_function(args)
22
- perform_inversion(:create_function, args)
23
- end
24
-
25
- def invert_update_function(args)
26
- perform_inversion(:update_function, args)
27
- end
28
- end
29
- end
30
- end
@@ -1,30 +0,0 @@
1
- module Fx
2
- module CommandRecorder
3
- # @api private
4
- module Trigger
5
- def create_trigger(*args)
6
- record(:create_trigger, args)
7
- end
8
-
9
- def drop_trigger(*args)
10
- record(:drop_trigger, args)
11
- end
12
-
13
- def update_trigger(*args)
14
- record(:update_trigger, args)
15
- end
16
-
17
- def invert_create_trigger(args)
18
- [:drop_trigger, args]
19
- end
20
-
21
- def invert_drop_trigger(args)
22
- perform_inversion(:create_trigger, args)
23
- end
24
-
25
- def invert_update_trigger(args)
26
- perform_inversion(:update_trigger, args)
27
- end
28
- end
29
- end
30
- end
@@ -1,38 +0,0 @@
1
- require "rails"
2
-
3
- module Fx
4
- module SchemaDumper
5
- # @api private
6
- module Function
7
- def tables(stream)
8
- if Fx.configuration.dump_functions_at_beginning_of_schema
9
- functions(stream)
10
- empty_line(stream)
11
- end
12
-
13
- super
14
-
15
- unless Fx.configuration.dump_functions_at_beginning_of_schema
16
- functions(stream)
17
- empty_line(stream)
18
- end
19
- end
20
-
21
- def empty_line(stream)
22
- stream.puts if dumpable_functions_in_database.any?
23
- end
24
-
25
- def functions(stream)
26
- dumpable_functions_in_database.each do |function|
27
- stream.puts(function.to_schema)
28
- end
29
- end
30
-
31
- private
32
-
33
- def dumpable_functions_in_database
34
- @_dumpable_functions_in_database ||= Fx.database.functions
35
- end
36
- end
37
- end
38
- end
@@ -1,29 +0,0 @@
1
- require "rails"
2
-
3
- module Fx
4
- module SchemaDumper
5
- # @api private
6
- module Trigger
7
- def tables(stream)
8
- super
9
- triggers(stream)
10
- end
11
-
12
- def triggers(stream)
13
- if dumpable_triggers_in_database.any?
14
- stream.puts
15
- end
16
-
17
- dumpable_triggers_in_database.each do |trigger|
18
- stream.puts(trigger.to_schema)
19
- end
20
- end
21
-
22
- private
23
-
24
- def dumpable_triggers_in_database
25
- @_dumpable_triggers_in_database ||= Fx.database.triggers
26
- end
27
- end
28
- end
29
- end
@@ -1,113 +0,0 @@
1
- require "rails"
2
-
3
- module Fx
4
- module Statements
5
- # Methods that are made available in migrations for managing Fx functions.
6
- module Function
7
- # Create a new database function.
8
- #
9
- # @param name [String, Symbol] The name of the database function.
10
- # @param version [Fixnum] The version number of the function, used to
11
- # find the definition file in `db/functions`. This defaults to `1` if
12
- # not provided.
13
- # @param sql_definition [String] The SQL query for the function schema.
14
- # If both `sql_definition` and `version` are provided,
15
- # `sql_definition` takes prescedence.
16
- # @return The database response from executing the create statement.
17
- #
18
- # @example Create from `db/functions/uppercase_users_name_v02.sql`
19
- # create_function(:uppercase_users_name, version: 2)
20
- #
21
- # @example Create from provided SQL string
22
- # create_function(:uppercase_users_name, sql_definition: <<-SQL)
23
- # CREATE OR REPLACE FUNCTION uppercase_users_name()
24
- # RETURNS trigger AS $$
25
- # BEGIN
26
- # NEW.upper_name = UPPER(NEW.name);
27
- # RETURN NEW;
28
- # END;
29
- # $$ LANGUAGE plpgsql;
30
- # SQL
31
- #
32
- def create_function(name, options = {})
33
- version = options.fetch(:version, 1)
34
- sql_definition = options[:sql_definition]
35
-
36
- if version.nil? && sql_definition.nil?
37
- raise(
38
- ArgumentError,
39
- "version or sql_definition must be specified"
40
- )
41
- end
42
- sql_definition = sql_definition.strip_heredoc if sql_definition
43
- sql_definition ||= Fx::Definition.new(name: name, version: version).to_sql
44
-
45
- Fx.database.create_function(sql_definition)
46
- end
47
-
48
- # Drop a database function by name.
49
- #
50
- # @param name [String, Symbol] The name of the database function.
51
- # @param revert_to_version [Fixnum] Used to reverse the `drop_function`
52
- # command on `rake db:rollback`. The provided version will be passed as
53
- # the `version` argument to {#create_function}.
54
- # @return The database response from executing the drop statement.
55
- #
56
- # @example Drop a function, rolling back to version 2 on rollback
57
- # drop_function(:uppercase_users_name, revert_to_version: 2)
58
- #
59
- def drop_function(name, options = {})
60
- Fx.database.drop_function(name)
61
- end
62
-
63
- # Update a database function.
64
- #
65
- # @param name [String, Symbol] The name of the database function.
66
- # @param version [Fixnum] The version number of the function, used to
67
- # find the definition file in `db/functions`. This defaults to `1` if
68
- # not provided.
69
- # @param sql_definition [String] The SQL query for the function schema.
70
- # If both `sql_definition` and `version` are provided,
71
- # `sql_definition` takes prescedence.
72
- # @return The database response from executing the create statement.
73
- #
74
- # @example Update function to a given version
75
- # update_function(
76
- # :uppercase_users_name,
77
- # version: 3,
78
- # revert_to_version: 2,
79
- # )
80
- #
81
- # @example Update function from provided SQL string
82
- # update_function(:uppercase_users_name, sql_definition: <<-SQL)
83
- # CREATE OR REPLACE FUNCTION uppercase_users_name()
84
- # RETURNS trigger AS $$
85
- # BEGIN
86
- # NEW.upper_name = UPPER(NEW.name);
87
- # RETURN NEW;
88
- # END;
89
- # $$ LANGUAGE plpgsql;
90
- # SQL
91
- #
92
- def update_function(name, options = {})
93
- version = options[:version]
94
- sql_definition = options[:sql_definition]
95
-
96
- if version.nil? && sql_definition.nil?
97
- raise(
98
- ArgumentError,
99
- "version or sql_definition must be specified"
100
- )
101
- end
102
-
103
- sql_definition = sql_definition.strip_heredoc if sql_definition
104
- sql_definition ||= Fx::Definition.new(
105
- name: name,
106
- version: version
107
- ).to_sql
108
-
109
- Fx.database.update_function(name, sql_definition)
110
- end
111
- end
112
- end
113
- end