rails-pg_trigger 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44aab12612f46126b08d12e199cb56b8011848c3f6d6fd1297d3dc82079640d0
4
- data.tar.gz: 7cc00af7a6f44b0d3c773a70526a907656c7eeecbcd8e73857330011946a206b
3
+ metadata.gz: 2f40387dfea07ab95c4dca20f9b26c2af48fd1fda8dffcb360048fa409a08d32
4
+ data.tar.gz: 17b3356c9bc2ebb418921bab81e7d6722d03dc47021e4a47be6657f4014b804d
5
5
  SHA512:
6
- metadata.gz: b8c0b565a02f88efbf883c1bf76fcd9e9e18c49ddcdb90b40399521635f193a2bcded0421b297e3f553a8fea863a87d142cda075469d025bbb50d19253bb45af
7
- data.tar.gz: 53fc370375dd2cac4ccc0699a260e35829fdf5d353097001ab1675be0267d18826a0fb9c2745fe97a9edc228eccd7ca3905b473471f7172f11798a28b6881e90
6
+ metadata.gz: 842f7827eaa749632f4f6e58fc8345f6bf3e6f084d8ed2e197703a548c6e373a837a0b626e2e262eaf91c9bb4395dc7ea0eb73277ce7172124d883a05843fa86
7
+ data.tar.gz: db8e8a003a9e4236683568c13686f228c8acb56a05948d7e795c8bd5364ebdaec7e388a110b21f428f074aa53c1fc8cc4bbde973a00011e921966c4b605c1a56
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.1.4] - 2024-03-25
4
+
5
+ - Implement `nowrap`
6
+ - Allow parenthesis-wrapped condition
7
+ - Force negative condition to be parenthesis-wrapped
8
+
3
9
  ## [0.1.3] - 2024-02-11
4
10
 
5
11
  - Correclty rollback updated triggers
@@ -96,8 +96,8 @@ module PgTrigger
96
96
  def drop_trigger_command(t)
97
97
  make_command("drop_trigger", t) do |s|
98
98
  s += t.drop_trigger_sql
99
- s.newline
100
99
  if t.create_function?
100
+ s.newline
101
101
  s += t.drop_function_sql
102
102
  end
103
103
  end
@@ -26,7 +26,7 @@ module PgTrigger
26
26
  "(?<timing>AFTER|BEFORE)",
27
27
  "(?<events>(?:INSERT|UPDATE|DELETE)(?: OR (?:INSERT|UPDATE|DELETE))?)",
28
28
  "(?:OF(?<columns>(?:\\s[a-z0-9_]+,?)+)\\s)?ON (?:[\\w\"]+\\.)?(?<table>\\w+)",
29
- "FOR EACH ROW(?: WHEN \\((?<where>[^\\)]+)\\))?",
29
+ "FOR EACH ROW(?: WHEN \\((?<where>\\(?[^\\)]+\\)?)\\))?",
30
30
  "EXECUTE FUNCTION (?:\\w+\\.)?(?<fn>\\w+)",
31
31
  ].join("\\s")
32
32
  .yield_self { |str| Regexp.new(str) }
@@ -51,7 +51,10 @@ module PgTrigger
51
51
  trigger.where(where)
52
52
  end
53
53
 
54
- trigger.nowrap if match[:fn] != match[:name]
54
+ if match[:fn] != match[:name]
55
+ trigger.nowrap { "#{match[:fn]}()" }
56
+ end
57
+
55
58
  trigger
56
59
  end
57
60
  end
@@ -88,6 +91,9 @@ module PgTrigger
88
91
  end
89
92
 
90
93
  def where(condition)
94
+ if condition.start_with?("NOT", "not")
95
+ raise AmbiguousConditionError, "when condition starting with a NOT should be enclosed in parenthesis"
96
+ end
91
97
  @where = condition
92
98
  end
93
99
 
@@ -125,6 +131,10 @@ module PgTrigger
125
131
  !@options[:nowrap]
126
132
  end
127
133
 
134
+ def nowrap?
135
+ @options[:nowrap]
136
+ end
137
+
128
138
  def create_function_sql
129
139
  str = IndentedString.new(size: 4)
130
140
  str += @content
@@ -141,6 +151,12 @@ module PgTrigger
141
151
  end
142
152
 
143
153
  def create_trigger_sql
154
+ action = if create_function?
155
+ "#{name}();"
156
+ else
157
+ @content
158
+ end
159
+
144
160
  sql = "CREATE TRIGGER #{name}\n"
145
161
  sql << @timing.to_s.upcase
146
162
  sql << " #{events.map(&:upcase).join(" OR ")} "
@@ -148,7 +164,7 @@ module PgTrigger
148
164
  sql << "ON #{adapter.quote_table_name(@table)}\n"
149
165
  sql << "FOR EACH ROW\n"
150
166
  sql << "WHEN (#{@where})\n" unless @where.nil?
151
- sql << "EXECUTE FUNCTION #{name}();"
167
+ sql << "EXECUTE FUNCTION #{action}"
152
168
 
153
169
  sql
154
170
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgTrigger
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
data/lib/pg_trigger.rb CHANGED
@@ -5,6 +5,7 @@ require_relative "pg_trigger/railtie"
5
5
 
6
6
  module PgTrigger
7
7
  class InvalidTriggerDefinition < StandardError; end
8
+ class AmbiguousConditionError < StandardError; end
8
9
 
9
10
  class << self
10
11
  attr_accessor :structure_file_path, :schema, :migrations_path, :raise_on_invalid_definition
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-pg_trigger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - ccocchi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-12 00:00:00.000000000 Z
11
+ date: 2024-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -104,7 +104,7 @@ metadata:
104
104
  homepage_uri: https://github.com/ccocchi/rails-pg_trigger
105
105
  source_code_uri: https://github.com/ccocchi/rails-pg_trigger
106
106
  changelog_uri: https://github.com/ccocchi/rails-pg_trigger/blob/main/CHANGELOG.md
107
- post_install_message:
107
+ post_install_message:
108
108
  rdoc_options: []
109
109
  require_paths:
110
110
  - lib
@@ -119,8 +119,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  requirements: []
122
- rubygems_version: 3.0.3.1
123
- signing_key:
122
+ rubygems_version: 3.3.7
123
+ signing_key:
124
124
  specification_version: 4
125
125
  summary: Postgres triggers for Rails
126
126
  test_files: []