hairtrigger 1.0.0 → 1.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 +4 -4
- data/README.md +9 -0
- data/lib/hair_trigger/adapter.rb +4 -4
- data/lib/hair_trigger/builder.rb +3 -3
- data/lib/hair_trigger/version.rb +1 -1
- data/lib/hair_trigger.rb +5 -1
- data/lib/tasks/hair_trigger.rake +37 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: adffb212907d4617f9ed63b3bbed32f0f4c8e7113e50284eb560a2e9ac0f24cb
|
4
|
+
data.tar.gz: a437870c199e11d4264e496ac45ff6d6f61593e80b9082bc8bf320de33bd0b84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf089ae92b9427a39243f6c096c44eab7ea4d41e7e6bec757781ba2d9b5ebef09683b2528e8ce39c2c28b15919149b82461bd2edcef4d662161a28a52c24671f
|
7
|
+
data.tar.gz: 83c64e0d188cfc45a6ffb701e6f5ee56350d4b636eaaa106405d545731563cc3751e792eecd6eefc1f4d534fdfd31369099e8a9875cec63082ce91d6d753118a
|
data/README.md
CHANGED
@@ -202,6 +202,15 @@ you need to actually implement `up`/`down` methods in your migration
|
|
202
202
|
(rather than `change`) so that it does the right thing when
|
203
203
|
rolling back.
|
204
204
|
|
205
|
+
The `drop_trigger` currently only supports the `drop_trigger(name, table, options = {})`
|
206
|
+
format. You will need to determine what the resulting trigger name is (e.g. `SHOW TRIGGERS`
|
207
|
+
query) and use that name in the `drop_triggers` call. Your `down` migration method
|
208
|
+
might contain something like:
|
209
|
+
|
210
|
+
```ruby
|
211
|
+
drop_trigger(:users_after_insert_row_tr, :transactions)
|
212
|
+
```
|
213
|
+
|
205
214
|
#### Manual triggers and :compatibility
|
206
215
|
|
207
216
|
As bugs are fixed and features are implemented in HairTrigger, it's possible
|
data/lib/hair_trigger/adapter.rb
CHANGED
@@ -31,7 +31,7 @@ module HairTrigger
|
|
31
31
|
select_rows("SELECT name, sql FROM sqlite_master WHERE type = 'trigger' #{name_clause ? " AND name " + name_clause : ""}").each do |(name, definition)|
|
32
32
|
triggers[name] = quote_table_name_in_trigger(definition) + ";\n"
|
33
33
|
end
|
34
|
-
when :mysql
|
34
|
+
when :mysql, :trilogy
|
35
35
|
select_rows("SHOW TRIGGERS").each do |(name, event, table, actions, timing, created, sql_mode, definer)|
|
36
36
|
definer = normalize_mysql_definer(definer)
|
37
37
|
next if options[:only] && !options[:only].include?(name)
|
@@ -48,7 +48,7 @@ FOR EACH ROW
|
|
48
48
|
SELECT tgfoid
|
49
49
|
FROM pg_trigger
|
50
50
|
WHERE NOT tgisinternal AND tgconstrrelid = 0 AND tgrelid IN (
|
51
|
-
SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '
|
51
|
+
SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '#{HairTrigger.pg_schema}')
|
52
52
|
)
|
53
53
|
)
|
54
54
|
SQL
|
@@ -57,9 +57,9 @@ FOR EACH ROW
|
|
57
57
|
SELECT tgname::varchar, pg_get_triggerdef(oid, true)
|
58
58
|
FROM pg_trigger
|
59
59
|
WHERE NOT tgisinternal AND tgconstrrelid = 0 AND tgrelid IN (
|
60
|
-
SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '
|
60
|
+
SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '#{HairTrigger.pg_schema}')
|
61
61
|
)
|
62
|
-
|
62
|
+
|
63
63
|
#{name_clause ? " AND tgname::varchar " + name_clause : ""}
|
64
64
|
UNION
|
65
65
|
SELECT proname || '()', pg_get_functiondef(oid)
|
data/lib/hair_trigger/builder.rb
CHANGED
@@ -162,7 +162,7 @@ module HairTrigger
|
|
162
162
|
chainable_methods :name, :on, :for_each, :before, :after, :where, :security, :timing, :events, :all, :nowrap, :of, :declare
|
163
163
|
|
164
164
|
def create_grouped_trigger?
|
165
|
-
adapter_name == :mysql
|
165
|
+
adapter_name == :mysql || adapter_name == :trilogy
|
166
166
|
end
|
167
167
|
|
168
168
|
def prepare!
|
@@ -224,7 +224,7 @@ module HairTrigger
|
|
224
224
|
[case adapter_name
|
225
225
|
when :sqlite
|
226
226
|
generate_trigger_sqlite
|
227
|
-
when :mysql
|
227
|
+
when :mysql, :trilogy
|
228
228
|
generate_trigger_mysql
|
229
229
|
when :postgresql, :postgis
|
230
230
|
generate_trigger_postgresql
|
@@ -407,7 +407,7 @@ module HairTrigger
|
|
407
407
|
|
408
408
|
def generate_drop_trigger
|
409
409
|
case adapter_name
|
410
|
-
when :sqlite, :mysql
|
410
|
+
when :sqlite, :mysql, :trilogy
|
411
411
|
"DROP TRIGGER IF EXISTS #{prepared_name};\n"
|
412
412
|
when :postgresql, :postgis
|
413
413
|
"DROP TRIGGER IF EXISTS #{prepared_name} ON #{adapter.quote_table_name(options[:table])};\nDROP FUNCTION IF EXISTS #{adapter.quote_table_name(prepared_name)}();\n"
|
data/lib/hair_trigger/version.rb
CHANGED
data/lib/hair_trigger.rb
CHANGED
@@ -13,7 +13,7 @@ module HairTrigger
|
|
13
13
|
autoload :MigrationReader, 'hair_trigger/migration_reader'
|
14
14
|
|
15
15
|
class << self
|
16
|
-
attr_writer :model_path, :schema_rb_path, :migration_path
|
16
|
+
attr_writer :model_path, :schema_rb_path, :migration_path, :pg_schema
|
17
17
|
|
18
18
|
def current_triggers
|
19
19
|
# see what the models say there should be
|
@@ -223,6 +223,10 @@ end
|
|
223
223
|
@migration_path ||= 'db/migrate'
|
224
224
|
end
|
225
225
|
|
226
|
+
def pg_schema
|
227
|
+
@pg_schema ||= 'public'
|
228
|
+
end
|
229
|
+
|
226
230
|
def adapter_name_for(adapter)
|
227
231
|
adapter.adapter_name.downcase.sub(/\d$/, '').to_sym
|
228
232
|
end
|
data/lib/tasks/hair_trigger.rake
CHANGED
@@ -11,13 +11,46 @@ namespace :db do
|
|
11
11
|
namespace :schema do
|
12
12
|
desc "Create a db/schema.rb file that can be portably used against any DB supported by AR"
|
13
13
|
task :dump => :environment do
|
14
|
+
next unless ActiveRecord::Base.schema_format == :ruby
|
15
|
+
|
14
16
|
require 'active_record/schema_dumper'
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
|
18
|
+
databases = ActiveRecord::Tasks::DatabaseTasks.setup_initial_database_yaml
|
19
|
+
|
20
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |name|
|
21
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: name)
|
22
|
+
connection_pool = ActiveRecord::Base.establish_connection(db_config)
|
23
|
+
|
24
|
+
filename = dump_filename(db_config.name)
|
25
|
+
ActiveRecord::SchemaDumper.previous_schema = File.exist?(filename) ? File.read(filename) : nil
|
26
|
+
|
27
|
+
File.open(filename, "w") do |file|
|
28
|
+
ActiveRecord::SchemaDumper.dump(connection_pool.connection, file)
|
29
|
+
end
|
19
30
|
end
|
31
|
+
|
20
32
|
Rake::Task["db:schema:dump"].reenable
|
21
33
|
end
|
34
|
+
|
35
|
+
def schema_file_type(format)
|
36
|
+
case format
|
37
|
+
when :ruby
|
38
|
+
"schema.rb"
|
39
|
+
when :sql
|
40
|
+
"structure.sql"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# code adopted from activerecord/lib/active_record/tasks/database_tasks.rb#L441
|
45
|
+
def dump_filename(db_config_name)
|
46
|
+
format = ActiveRecord::Base.schema_format
|
47
|
+
filename = if ActiveRecord::Base.configurations.primary?(db_config_name)
|
48
|
+
schema_file_type(format)
|
49
|
+
else
|
50
|
+
"#{db_config_name}_#{schema_file_type(format)}"
|
51
|
+
end
|
52
|
+
|
53
|
+
ENV["SCHEMA"] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, filename)
|
54
|
+
end
|
22
55
|
end
|
23
56
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hairtrigger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Jensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -91,14 +91,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
91
|
requirements:
|
92
92
|
- - ">="
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
94
|
+
version: '3.0'
|
95
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
97
|
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
requirements: []
|
101
|
-
rubygems_version: 3.
|
101
|
+
rubygems_version: 3.5.3
|
102
102
|
signing_key:
|
103
103
|
specification_version: 4
|
104
104
|
summary: easy database triggers for active record
|