You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add configuration class for custom adapters (#135)
The list of supported adapters is hardcoded, which makes it difficult to
use this gem on custom adapters.
We use `postgresql_proxy` from `active_record_proxy_adapters`, for
instance. Currently, we need to monkey patch the gem and hot swap the
constant `HairTrigger::POSTGRESQL_ADAPTERS` when the application boots
to make it work with the proxy adapter.
Although it works, it's not ideal.
I've added a new configuration class whose values will default to the
current ones (`%i[mysql2 trilogy]` for `mysql_adapters`, `%i[postgresql
postgis]` for `postgresql_adapters` , and `%i[sqlite litedb]` for
`sqlite_adapters`), but allow the user to add custom adapters for each.
I don't expect any breaking changes here as the values fall back to the
existing constants, but please double check. Thanks!
Copy file name to clipboardExpand all lines: lib/hair_trigger/builder.rb
+23-23Lines changed: 23 additions & 23 deletions
Original file line number
Diff line number
Diff line change
@@ -44,7 +44,7 @@ def drop_triggers
44
44
end
45
45
46
46
defname(name)
47
-
@errors << ["trigger name cannot exceed 63 for postgres", *HairTrigger::POSTGRESQL_ADAPTERS]ifname.to_s.size > 63
47
+
@errors << ["trigger name cannot exceed 63 for postgres", *HairTrigger.hair_trigger_config.postgresql_adapters]ifname.to_s.size > 63
48
48
options[:name]=name.to_s
49
49
end
50
50
@@ -54,7 +54,7 @@ def on(table)
54
54
end
55
55
56
56
deffor_each(for_each)
57
-
@errors << ["sqlite and mysql don't support FOR EACH STATEMENT triggers", *HairTrigger::SQLITE_ADAPTERS, *HairTrigger::MYSQL_ADAPTERS]iffor_each == :statement
57
+
@errors << ["sqlite and mysql don't support FOR EACH STATEMENT triggers", *HairTrigger.hair_trigger_config.sqlite_adapters, *HairTrigger.hair_trigger_config.mysql_adapters]iffor_each == :statement
@errors << ["sqlite and mysql triggers may not be shared by multiple actions", *HairTrigger::MYSQL_ADAPTERS, *HairTrigger::SQLITE_ADAPTERS]ifevents.size > 1
126
-
@errors << ["sqlite and mysql do not support truncate triggers", *HairTrigger::MYSQL_ADAPTERS, *HairTrigger::SQLITE_ADAPTERS]ifevents.include?(:truncate)
125
+
@errors << ["sqlite and mysql triggers may not be shared by multiple actions", *HairTrigger.hair_trigger_config.mysql_adapters, *HairTrigger.hair_trigger_config.sqlite_adapters]ifevents.size > 1
126
+
@errors << ["sqlite and mysql do not support truncate triggers", *HairTrigger.hair_trigger_config.mysql_adapters, *HairTrigger.hair_trigger_config.sqlite_adapters]ifevents.include?(:truncate)
raiseDeclarationError,"of may only be specified on update triggers"ifoptions[:of] && options[:events] != ["UPDATE"]
347
347
ifblock.arity > 0# we're creating a trigger group, so set up some stuff and pass the buck
348
-
@errors << ["trigger group must specify timing and event(s) for mysql", *HairTrigger::MYSQL_ADAPTERS]unlessoptions[:timing] && options[:events]
349
-
@errors << ["nested trigger groups are not supported for mysql", *HairTrigger::MYSQL_ADAPTERS]if@trigger_group
348
+
@errors << ["trigger group must specify timing and event(s) for mysql", *HairTrigger.hair_trigger_config.mysql_adapters]unlessoptions[:timing] && options[:events]
349
+
@errors << ["nested trigger groups are not supported for mysql", *HairTrigger.hair_trigger_config.mysql_adapters]if@trigger_group
350
350
@triggers=[]
351
351
block.call(self)
352
352
raiseDeclarationError,"trigger group did not define any triggers"if@triggers.empty?
@warnings << ["nested triggers have explicit names, but trigger group does not. trigger name will be inferred", *HairTrigger::MYSQL_ADAPTERS]
378
+
@warnings << ["nested triggers have explicit names, but trigger group does not. trigger name will be inferred", *HairTrigger.hair_trigger_config.mysql_adapters]
@warnings << ["trigger group has an explicit name, but nested triggers do not. trigger names will be inferred", *HairTrigger::POSTGRESQL_ADAPTERS, *HairTrigger::SQLITE_ADAPTERS]
380
+
@warnings << ["trigger group has an explicit name, but nested triggers do not. trigger names will be inferred", *HairTrigger.hair_trigger_config.postgresql_adapters, *HairTrigger.hair_trigger_config.sqlite_adapters]
381
381
end
382
382
end
383
383
@@ -412,9 +412,9 @@ def declarations
412
412
413
413
defsupports_of?
414
414
caseadapter_name
415
-
when *HairTrigger::SQLITE_ADAPTERS
415
+
when *HairTrigger.hair_trigger_config.sqlite_adapters
416
416
true
417
-
when *HairTrigger::POSTGRESQL_ADAPTERS
417
+
when *HairTrigger.hair_trigger_config.postgresql_adapters
when *HairTrigger::SQLITE_ADAPTERS, *HairTrigger::MYSQL_ADAPTERS
432
+
when *HairTrigger.hair_trigger_config.sqlite_adapters, *HairTrigger.hair_trigger_config.mysql_adapters
433
433
false
434
-
when *HairTrigger::POSTGRESQL_ADAPTERS
434
+
when *HairTrigger.hair_trigger_config.postgresql_adapters
435
435
db_version >= 100000
436
436
else
437
437
false
@@ -440,9 +440,9 @@ def supports_referencing?
440
440
441
441
defgenerate_drop_trigger
442
442
caseadapter_name
443
-
when *HairTrigger::SQLITE_ADAPTERS, *HairTrigger::MYSQL_ADAPTERS
443
+
when *HairTrigger.hair_trigger_config.sqlite_adapters, *HairTrigger.hair_trigger_config.mysql_adapters
444
444
"DROP TRIGGER IF EXISTS #{prepared_name};\n"
445
-
when *HairTrigger::POSTGRESQL_ADAPTERS
445
+
when *HairTrigger.hair_trigger_config.postgresql_adapters
446
446
"DROP TRIGGER IF EXISTS #{prepared_name} ON #{adapter.quote_table_name(options[:table])};\nDROP FUNCTION IF EXISTS #{adapter.quote_table_name(prepared_name)}();\n"
447
447
else
448
448
raiseGenerationError,"don't know how to drop #{adapter_name} triggers yet"
@@ -532,7 +532,7 @@ def generate_trigger_mysql
532
532
533
533
defdb_version
534
534
@db_version ||= caseadapter_name
535
-
when *HairTrigger::POSTGRESQL_ADAPTERS
535
+
when *HairTrigger.hair_trigger_config.postgresql_adapters
0 commit comments