rails-pg_trigger 0.1.3 → 0.1.4

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: 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: []