Module: DynamicActiveModel::Setup::ClassMethods

Defined in:
lib/dynamic-active-model/setup.rb

Overview

ClassMethods provides various class methods for configuring a module

Instance Method Summary collapse

Instance Method Details

#connection_options(options = nil) ⇒ Hash

Sets or gets the database connection options

Parameters:

  • options (Hash, String, nil) (defaults to: nil)

    Database configuration or named configuration

Returns:

  • (Hash)

    The current connection options



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/dynamic-active-model/setup.rb', line 58

def connection_options(options = nil)
  if options.is_a?(String)
    name = options
    options = ActiveRecord::Base
                .configurations
                .configs_for(
                  env_name: Rails.env,
                  name: name
                )
                .configuration_hash
  end

  if options
    config = dynamic_active_model_config
    config[:connection_options] = options
    redefine_class_method(:dynamic_active_model_config, config)
  end

  dynamic_active_model_config[:connection_options]
end

#create_models!Database

Creates all models and applies extensions This method:

  1. Creates models using Explorer

  2. Applies any model extensions if configured

Returns:

  • (Database)

    The configured database instance



152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/dynamic-active-model/setup.rb', line 152

def create_models!
  redefine_class_method(
    :database,
    DynamicActiveModel::Explorer.explore(
      self,
      connection_options,
      skip_tables,
      relationships
    )
  )
  database.update_all_models(extensions_path, extensions_suffix) if extensions_path
  database
end

#databaseDatabase?

Gets the database instance

Returns:

  • (Database, nil)

    The configured database instance



39
40
41
# File 'lib/dynamic-active-model/setup.rb', line 39

def database
  nil
end

#dynamic_active_model_configHash

Gets the current configuration

Returns:

  • (Hash)

    The configuration hash with default values



45
46
47
48
49
50
51
52
53
# File 'lib/dynamic-active-model/setup.rb', line 45

def dynamic_active_model_config
  {
    connection_options: nil,
    skip_tables: [],
    relationships: {},
    extensions_path: nil,
    extensions_suffix: '.ext.rb'
  }
end

#extensions_path(path = nil) ⇒ String?

Sets or gets the path for model extensions

Parameters:

  • path (String, nil) (defaults to: nil)

    Path to extension files

Returns:

  • (String, nil)

    The current extensions path



126
127
128
129
130
131
132
133
# File 'lib/dynamic-active-model/setup.rb', line 126

def extensions_path(path = nil)
  if path
    config = dynamic_active_model_config
    config[:extensions_path] = path
    redefine_class_method(:dynamic_active_model_config, config)
  end
  dynamic_active_model_config[:extensions_path]
end

#extensions_suffix(suffix = nil) ⇒ String

Sets or gets the suffix for extension files

Parameters:

  • suffix (String, nil) (defaults to: nil)

    File extension suffix

Returns:

  • (String)

    The current extensions suffix



138
139
140
141
142
143
144
145
# File 'lib/dynamic-active-model/setup.rb', line 138

def extensions_suffix(suffix = nil)
  if suffix
    config = dynamic_active_model_config
    config[:extensions_suffix] = suffix
    redefine_class_method(:dynamic_active_model_config, config)
  end
  dynamic_active_model_config[:extensions_suffix]
end

#foreign_key(table_name, foreign_key, relationship_name) ⇒ Object

Adds a custom foreign key relationship

Parameters:

  • table_name (String)

    Name of the table

  • foreign_key (String)

    Name of the foreign key column

  • relationship_name (String)

    Name for the relationship



115
116
117
118
119
120
121
# File 'lib/dynamic-active-model/setup.rb', line 115

def foreign_key(table_name, foreign_key, relationship_name)
  config = dynamic_active_model_config
  current_relationships = config[:relationships]
  current_relationships[table_name] ||= {}
  current_relationships[table_name][foreign_key] = relationship_name
  redefine_class_method(:dynamic_active_model_config, config)
end

#relationships(all_relationships = nil) ⇒ Hash

Sets or gets the custom relationships

Parameters:

  • all_relationships (Hash, nil) (defaults to: nil)

    All custom relationships

Returns:

  • (Hash)

    The current relationships



102
103
104
105
106
107
108
109
# File 'lib/dynamic-active-model/setup.rb', line 102

def relationships(all_relationships = nil)
  if all_relationships
    config = dynamic_active_model_config
    config[:relationships] = all_relationships
    redefine_class_method(:dynamic_active_model_config, config)
  end
  dynamic_active_model_config[:relationships]
end

#skip_table(table) ⇒ Object

Adds a single table to the skip list

Parameters:

  • table (String)

    Table to skip



93
94
95
96
97
# File 'lib/dynamic-active-model/setup.rb', line 93

def skip_table(table)
  config = dynamic_active_model_config
  config[:skip_tables] << table
  redefine_class_method(:dynamic_active_model_config, config)
end

#skip_tables(tables = nil) ⇒ Array<String>

Sets or gets the list of tables to skip

Parameters:

  • tables (Array<String>, nil) (defaults to: nil)

    Tables to skip

Returns:

  • (Array<String>)

    The current list of skipped tables



82
83
84
85
86
87
88
89
# File 'lib/dynamic-active-model/setup.rb', line 82

def skip_tables(tables = nil)
  if tables
    config = dynamic_active_model_config
    config[:skip_tables] = tables
    redefine_class_method(:dynamic_active_model_config, config)
  end
  dynamic_active_model_config[:skip_tables]
end