Module: Activerecord::Multirange
- Defined in:
- lib/activerecord-multirange.rb,
lib/activerecord-multirange/adapter.rb,
lib/activerecord-multirange/quoting.rb,
lib/activerecord-multirange/version.rb,
lib/activerecord-multirange/relation.rb,
lib/activerecord-multirange/type_map.rb,
lib/activerecord-multirange/oid/multi_range.rb,
lib/activerecord-multirange/table_definition.rb,
lib/activerecord-multirange/schema_statements.rb
Defined Under Namespace
Modules: Adapter, OID, Quoting, Relation, SchemaStatements, TableDefinition, TypeMap Classes: Error
Constant Summary collapse
- MULTIRANGE_TYPES =
Multirange types that need to be registered
{ tsmultirange: { name: 'tsmultirange' }, datemultirange: { name: 'datemultirange' }, tstzmultirange: { name: 'tstzmultirange' }, nummultirange: { name: 'nummultirange' }, int8multirange: { name: 'int8multirange' }, int4multirange: { name: 'int4multirange' } }.freeze
- VERSION =
'1.3.1'
Class Method Summary collapse
Class Method Details
.add_multirange_column_type ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/activerecord-multirange.rb', line 39 def self.add_multirange_column_type ActiveSupport.on_load(:active_record) do # Register multirange types in NATIVE_DATABASE_TYPES for Rails 8 compatibility Activerecord::Multirange.register_native_database_types # Register multirange modifier for ActiveRecord attribute API ActiveRecord::Type.add_modifier( { multirange: true }, Activerecord::Multirange::OID::MultiRange, adapter: :postgresql ) ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(Adapter) ActiveRecord::ConnectionAdapters::PostgreSQL::OID::TypeMapInitializer .prepend(TypeMap) ActiveRecord::ConnectionAdapters::PostgreSQL::Quoting.prepend(Quoting) ActiveRecord::ConnectionAdapters::PostgreSQL::SchemaStatements.prepend( SchemaStatements ) ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition.prepend( TableDefinition ) ActiveRecord::Relation.prepend(Relation) end end |
.register_native_database_types ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/activerecord-multirange.rb', line 65 def self.register_native_database_types # Ensure the PostgreSQL adapter is loaded unless defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) return end adapter_class = ActiveRecord::ConnectionAdapters::PostgreSQLAdapter # Check if NATIVE_DATABASE_TYPES is already defined and modifiable if adapter_class.const_defined?(:NATIVE_DATABASE_TYPES) current_types = adapter_class::NATIVE_DATABASE_TYPES # Only modify if our types aren't already registered unless current_types.key?(:tsmultirange) # Create a new hash with existing types plus our multirange types new_types = current_types.merge(MULTIRANGE_TYPES) # Replace the constant with the updated hash adapter_class.send(:remove_const, :NATIVE_DATABASE_TYPES) adapter_class.const_set(:NATIVE_DATABASE_TYPES, new_types.freeze) end end end |