fx 0.6.2 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e391283922484cf5a5b06c7de944c3162a85b7b49546f1fd1a017a6fc762898
4
- data.tar.gz: 73b179c85ebc70977bf4d2afbe45088284a9730138c2a424d940d72fb2ab0a30
3
+ metadata.gz: f602bcfa44f9289edb4ad43379716b554badc5cdd086d04344d9683564b93ede
4
+ data.tar.gz: cfdb703fb8a27cae0622c8f70a38a35a039677b51363d985018b9f638eb8846c
5
5
  SHA512:
6
- metadata.gz: 144fcbf71aad79383ee1ae98047b6fc018212ecd3ea2d747f883d7def2c649590b1d04fc77b0a84113fa832a6a0377857cf8482d2290c0c40f6496be0e6db470
7
- data.tar.gz: 057f585e7e83a89aebfda256605813a7db9e7d01b5841f436be0a9f7323540fd5a49999e4bf3bbc6db33ab0342e4ad0727b1b9b16690ed3a1aea00ea3011ea2d
6
+ metadata.gz: fa2447143558b62d037a7c6515211bfcdae05ca437ced59d949828ef1409f76b79b33dbf71677699b98af53453e5b249de18f76f89c3b9895a6f3705462bb7df
7
+ data.tar.gz: 4b5380abef9d337368e80ac0f0f61dd3d70a2514bd560f175f8726a9a089136f4760237b3b3a86a58a01af65d2797a200b1a8a4a1efd58a8a4d58de30af0bb5b
data/.travis.yml CHANGED
@@ -19,6 +19,8 @@ language:
19
19
  notifications:
20
20
  email: false
21
21
  rvm:
22
+ - 3.0
23
+ - 2.7
22
24
  - 2.6
23
25
  - 2.5
24
26
  - 2.4
@@ -28,12 +30,31 @@ gemfile:
28
30
  - gemfiles/rails51.gemfile
29
31
  - gemfiles/rails52.gemfile
30
32
  - gemfiles/rails60.gemfile
33
+ - gemfiles/rails61.gemfile
31
34
  - gemfiles/rails_edge.gemfile
32
35
  matrix:
33
36
  allow_failures:
34
37
  - gemfile: gemfiles/rails_edge.gemfile
35
38
  exclude:
36
- - rvm: 2.4
37
- gemfile: gemfiles/rails_edge.gemfile
38
39
  - rvm: 2.4
39
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/Appraisals CHANGED
@@ -1,32 +1,45 @@
1
- appraise "rails42" do
2
- gem "activerecord", "~> 4.2.0"
3
- gem "railties", "~> 4.2.0"
4
- gem "pg", "~> 0.15"
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
5
8
  end
6
9
 
7
- if RUBY_VERSION > "2.2.0"
10
+ if RUBY_VERSION >= "2.2.0" and RUBY_VERSION < "3.0.0"
8
11
  appraise "rails50" do
9
- gem "activerecord", "~> 5.0"
10
- gem "railties", "~> 5.0"
12
+ gem "activerecord", "~> 5.0.0"
13
+ gem "railties", "~> 5.0.0"
11
14
  end
12
15
 
13
16
  appraise "rails51" do
14
- gem "activerecord", "~> 5.1"
15
- gem "railties", "~> 5.1"
17
+ gem "activerecord", "~> 5.1.0"
18
+ gem "railties", "~> 5.1.0"
16
19
  end
17
20
 
18
21
  appraise "rails52" do
19
- gem "activerecord", "~> 5.2"
20
- gem "railties", "~> 5.2"
22
+ gem "activerecord", "~> 5.2.0"
23
+ gem "railties", "~> 5.2.0"
21
24
  end
22
25
 
26
+ end
27
+
28
+ if RUBY_VERSION >= "2.5.0"
23
29
  appraise "rails60" do
24
- gem "activerecord", "~> 6.0"
25
- gem "railties", "~> 6.0"
30
+ gem "activerecord", "~> 6.0.0"
31
+ gem "railties", "~> 6.0.0"
26
32
  end
27
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"
28
41
  appraise "rails-edge" do
29
- gem "rails", github: "rails/rails"
42
+ gem "rails", github: "rails/rails", branch: "main"
30
43
  gem "arel", :github => "rails/arel"
31
44
  end
32
45
  end
data/README.md CHANGED
@@ -108,6 +108,10 @@ end
108
108
  That's how you tell Rails to use the default as a literal SQL for the default
109
109
  column value instead of a plain string.
110
110
 
111
+ ## Plugins/Adapters
112
+
113
+ - [SQLserver](https://github.com/tarellel/fx-sqlserver-adapter)
114
+
111
115
  ## Contributing
112
116
 
113
117
  See [contributing](CONTRIBUTING.md) for more details.
data/fx.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(%r{^spec/})
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_development_dependency "appraisal"
23
+ spec.add_development_dependency "appraisal", '~> 2.3.0'
24
24
  spec.add_development_dependency "bundler", '>= 1.5'
25
25
  spec.add_development_dependency "database_cleaner"
26
26
  spec.add_development_dependency "rake"
@@ -4,6 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 4.2.0"
6
6
  gem "railties", "~> 4.2.0"
7
- gem "pg", "~> 0.15"
7
+ gem "pg", "~> 0.15.0"
8
+ gem "bigdecimal", "1.3.5"
8
9
 
9
10
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.0"
6
- gem "railties", "~> 5.0"
5
+ gem "activerecord", "~> 5.0.0"
6
+ gem "railties", "~> 5.0.0"
7
7
 
8
8
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.1"
6
- gem "railties", "~> 5.1"
5
+ gem "activerecord", "~> 5.1.0"
6
+ gem "railties", "~> 5.1.0"
7
7
 
8
8
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.2"
6
- gem "railties", "~> 5.2"
5
+ gem "activerecord", "~> 5.2.0"
6
+ gem "railties", "~> 5.2.0"
7
7
 
8
8
  gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 6.0"
6
- gem "railties", "~> 6.0"
5
+ gem "activerecord", "~> 6.0.0"
6
+ gem "railties", "~> 6.0.0"
7
7
 
8
8
  gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.1.0"
6
+ gem "railties", "~> 6.1.0"
7
+
8
+ gemspec path: "../"
@@ -2,7 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", github: "rails/rails"
5
+ gem "rails", github: "rails/rails", branch: "main"
6
6
  gem "arel", github: "rails/arel"
7
7
 
8
8
  gemspec path: "../"
data/lib/fx/function.rb CHANGED
@@ -17,7 +17,7 @@ module Fx
17
17
 
18
18
  def to_schema
19
19
  <<-SCHEMA.indent(2)
20
- create_function :#{name}, sql_definition: <<-\SQL
20
+ create_function :#{name}, sql_definition: <<-'SQL'
21
21
  #{definition.indent(4).rstrip}
22
22
  SQL
23
23
  SCHEMA
@@ -11,7 +11,7 @@ module Fx
11
11
  # find the definition file in `db/functions`. This defaults to `1` if
12
12
  # not provided.
13
13
  # @param sql_definition [String] The SQL query for the function schema.
14
- # If both `sql_defintion` and `version` are provided,
14
+ # If both `sql_definition` and `version` are provided,
15
15
  # `sql_definition` takes prescedence.
16
16
  # @return The database response from executing the create statement.
17
17
  #
@@ -29,7 +29,10 @@ module Fx
29
29
  # $$ LANGUAGE plpgsql;
30
30
  # SQL
31
31
  #
32
- def create_function(name, version: 1, sql_definition: nil)
32
+ def create_function(name, options = {})
33
+ version = options.fetch(:version, 1)
34
+ sql_definition = options[:sql_definition]
35
+
33
36
  if version.nil? && sql_definition.nil?
34
37
  raise(
35
38
  ArgumentError,
@@ -53,7 +56,8 @@ module Fx
53
56
  # @example Drop a function, rolling back to version 2 on rollback
54
57
  # drop_function(:uppercase_users_name, revert_to_version: 2)
55
58
  #
56
- def drop_function(name, revert_to_version: nil)
59
+ def drop_function(name, options = {})
60
+ revert_to_version = options[:revert_to_version]
57
61
  Fx.database.drop_function(name)
58
62
  end
59
63
 
@@ -64,7 +68,7 @@ module Fx
64
68
  # find the definition file in `db/functions`. This defaults to `1` if
65
69
  # not provided.
66
70
  # @param sql_definition [String] The SQL query for the function schema.
67
- # If both `sql_defintion` and `version` are provided,
71
+ # If both `sql_definition` and `version` are provided,
68
72
  # `sql_definition` takes prescedence.
69
73
  # @return The database response from executing the create statement.
70
74
  #
@@ -86,7 +90,11 @@ module Fx
86
90
  # $$ LANGUAGE plpgsql;
87
91
  # SQL
88
92
  #
89
- def update_function(name, version: nil, sql_definition: nil, revert_to_version: nil)
93
+ def update_function(name, options = {})
94
+ version = options[:version]
95
+ sql_definition = options[:sql_definition]
96
+ revert_to_version = options[:revert_to_version]
97
+
90
98
  if version.nil? && sql_definition.nil?
91
99
  raise(
92
100
  ArgumentError,
@@ -3,7 +3,7 @@ module Fx
3
3
  # Methods that are made available in migrations for managing Fx triggers.
4
4
  module Trigger
5
5
  # @api private
6
- DEFINTION_TYPE = "trigger".freeze
6
+ DEFINITION_TYPE = "trigger".freeze
7
7
 
8
8
  # Create a new database trigger.
9
9
  #
@@ -27,7 +27,11 @@ module Fx
27
27
  # EXECUTE PROCEDURE uppercase_users_name();
28
28
  # SQL
29
29
  #
30
- def create_trigger(name, version: nil, on: nil, sql_definition: nil)
30
+ def create_trigger(name, options = {})
31
+ version = options[:version]
32
+ _on = options[:on]
33
+ sql_definition = options[:sql_definition]
34
+
31
35
  if version.present? && sql_definition.present?
32
36
  raise(
33
37
  ArgumentError,
@@ -43,7 +47,7 @@ module Fx
43
47
  sql_definition ||= Fx::Definition.new(
44
48
  name: name,
45
49
  version: version,
46
- type: DEFINTION_TYPE,
50
+ type: DEFINITION_TYPE,
47
51
  ).to_sql
48
52
 
49
53
  Fx.database.create_trigger(sql_definition)
@@ -62,7 +66,9 @@ module Fx
62
66
  # @example Drop a trigger, rolling back to version 3 on rollback
63
67
  # drop_trigger(:log_inserts, on: :users, revert_to_version: 3)
64
68
  #
65
- def drop_trigger(name, on:, revert_to_version: nil)
69
+ def drop_trigger(name, options = {})
70
+ on = options.fetch(:on)
71
+ revert_to_version = options[:revert_to_version]
66
72
  Fx.database.drop_trigger(name, on: on)
67
73
  end
68
74
 
@@ -98,7 +104,12 @@ module Fx
98
104
  # EXECUTE PROCEDURE uppercase_users_name();
99
105
  # SQL
100
106
  #
101
- def update_trigger(name, version: nil, on: nil, sql_definition: nil, revert_to_version: nil)
107
+ def update_trigger(name, options = {})
108
+ version = options[:version]
109
+ on = options[:on]
110
+ sql_definition = options[:sql_definition]
111
+ revert_to_version = options[:revert_to_version]
112
+
102
113
  if version.nil? && sql_definition.nil?
103
114
  raise(
104
115
  ArgumentError,
@@ -121,7 +132,7 @@ module Fx
121
132
  sql_definition ||= Fx::Definition.new(
122
133
  name: name,
123
134
  version: version,
124
- type: DEFINTION_TYPE,
135
+ type: DEFINITION_TYPE,
125
136
  ).to_sql
126
137
 
127
138
  Fx.database.update_trigger(
data/lib/fx/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Fx
2
2
  # @api private
3
- VERSION = "0.6.2"
3
+ VERSION = "0.7.0"
4
4
  end
@@ -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 defintion",
10
+ "definition" => "some definition",
11
11
  )
12
12
  function_b = Function.new(
13
13
  "name" => "name_b",
14
- "definition" => "some defintion",
14
+ "definition" => "some definition",
15
15
  )
16
16
  function_c = Function.new(
17
17
  "name" => "name_c",
18
- "definition" => "some defintion",
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 defintion",
29
+ "definition" => "some definition",
30
30
  )
31
31
  function_b = Function.new(
32
32
  "name" => "name_b",
33
- "definition" => "some other defintion",
33
+ "definition" => "some other definition",
34
34
  )
35
35
 
36
36
  expect(function_a).not_to eq(function_b)
@@ -44,9 +44,22 @@ module Fx
44
44
  "definition" => "CREATE OR REPLACE TRIGGER uppercase_users_name ...",
45
45
  )
46
46
 
47
- expect(function.to_schema).to eq <<-EOS
48
- create_function :uppercase_users_name, sql_definition: <<-\SQL
47
+ expect(function.to_schema).to eq <<-'EOS'
48
+ create_function :uppercase_users_name, sql_definition: <<-'SQL'
49
49
  CREATE OR REPLACE TRIGGER uppercase_users_name ...
50
+ SQL
51
+ EOS
52
+ end
53
+
54
+ it "maintains backslashes" do
55
+ function = Function.new(
56
+ "name" => "regex",
57
+ "definition" => "CREATE OR REPLACE FUNCTION regex \\1",
58
+ )
59
+
60
+ expect(function.to_schema).to eq <<-'EOS'
61
+ create_function :regex, sql_definition: <<-'SQL'
62
+ CREATE OR REPLACE FUNCTION regex \1
50
63
  SQL
51
64
  EOS
52
65
  end
@@ -23,27 +23,29 @@ describe Fx::SchemaDumper::Function, :db do
23
23
  end
24
24
 
25
25
  it "dumps a create_function for a function in the database" do
26
- Fx.configuration.dump_functions_at_beginning_of_schema = true
27
- sql_definition = <<-EOS
28
- CREATE OR REPLACE FUNCTION my_function()
29
- RETURNS text AS $$
30
- BEGIN
31
- RETURN 'test';
32
- END;
33
- $$ LANGUAGE plpgsql;
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
26
+ begin
27
+ Fx.configuration.dump_functions_at_beginning_of_schema = true
28
+ sql_definition = <<-EOS
29
+ CREATE OR REPLACE FUNCTION my_function()
30
+ RETURNS text AS $$
31
+ BEGIN
32
+ RETURN 'test';
33
+ END;
34
+ $$ LANGUAGE plpgsql;
35
+ EOS
36
+ connection.create_function :my_function, sql_definition: sql_definition
37
+ connection.create_table :my_table
38
+ stream = StringIO.new
39
+ output = stream.string
39
40
 
40
- ActiveRecord::SchemaDumper.dump(connection, stream)
41
+ ActiveRecord::SchemaDumper.dump(connection, stream)
41
42
 
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
43
+ expect(output).to(
44
+ match(/function :my_function.*RETURN 'test';.*table "my_table"/m),
45
+ )
46
+ ensure
47
+ Fx.configuration.dump_functions_at_beginning_of_schema = false
48
+ end
47
49
  end
48
50
 
49
51
  it "does not dump a create_function for aggregates in the database" do
@@ -71,7 +73,7 @@ describe Fx::SchemaDumper::Function, :db do
71
73
  ActiveRecord::SchemaDumper.dump(connection, stream)
72
74
 
73
75
  output = stream.string
74
- expect(output).to include "create_function :test, sql_definition: <<-SQL"
76
+ expect(output).to include "create_function :test, sql_definition: <<-'SQL'"
75
77
  expect(output).to include "RETURN 'test';"
76
78
  expect(output).not_to include "aggregate_test"
77
79
  end
@@ -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 defintion",
10
+ "definition" => "some definition",
11
11
  )
12
12
  trigger_b = Trigger.new(
13
13
  "name" => "name_b",
14
- "definition" => "some defintion",
14
+ "definition" => "some definition",
15
15
  )
16
16
  trigger_c = Trigger.new(
17
17
  "name" => "name_c",
18
- "definition" => "some defintion",
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 defintion",
29
+ "definition" => "some definition",
30
30
  )
31
31
  trigger_b = Trigger.new(
32
32
  "name" => "name_b",
33
- "definition" => "some other defintion",
33
+ "definition" => "some other definition",
34
34
  )
35
35
 
36
36
  expect(trigger_a).not_to eq(trigger_b)
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Teo Ljungberg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-28 00:00:00.000000000 Z
11
+ date: 1980-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appraisal
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.3.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 2.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -211,6 +211,7 @@ files:
211
211
  - gemfiles/rails51.gemfile
212
212
  - gemfiles/rails52.gemfile
213
213
  - gemfiles/rails60.gemfile
214
+ - gemfiles/rails61.gemfile
214
215
  - gemfiles/rails_edge.gemfile
215
216
  - lib/fx.rb
216
217
  - lib/fx/adapters/postgres.rb
@@ -298,7 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
298
299
  - !ruby/object:Gem::Version
299
300
  version: '0'
300
301
  requirements: []
301
- rubygems_version: 3.2.2
302
+ rubygems_version: 3.2.26
302
303
  signing_key:
303
304
  specification_version: 4
304
305
  summary: Support for database functions and triggers in Rails migrations