Method: AnonymousActiveRecord.generate

Defined in:
lib/anonymous_active_record.rb

.generate(table_name: nil, klass_namespaces: [], klass_basename: nil, columns: [], indexes: [], timestamps: true, parent_klass: DEFAULT_PARENT_KLASS, connection_params: DEFAULT_CONNECTION_PARAMS, &block) ⇒ Object

Defines a pseudo anonymous class in a particular namespace of your choosing.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/anonymous_active_record.rb', line 51

def generate(table_name: nil, klass_namespaces: [], klass_basename: nil, columns: [], indexes: [], timestamps: true, parent_klass: DEFAULT_PARENT_KLASS, connection_params: DEFAULT_CONNECTION_PARAMS, &block)
  gen = AnonymousActiveRecord::Generator.new(table_name, klass_namespaces, klass_basename, parent_klass)
  klass = gen.generate(&block)
  connection_params = YAML.load_file(connection_params) if connection_params.is_a?(String)
  klass.establish_connection(connection_params.dup)
  klass.connection.create_table(gen.table_name) do |t|
    columns.each do |col|
      if col.is_a?(Hash)
        # :name and :type are required at minimum
        name = col.delete(:name)
        type = col.delete(:type)
        t.column(name, type, **col)
      elsif col.is_a?(Array)
        options = col.extract_options!
        if options.present?
          t.column(*col, **options)
        elsif col.length == 1
          t.column(col[0], :string)
        else
          t.column(col[0], col[-1] || :string)
        end
      else
        t.column(col, :string)
      end
    end
    indexes.each do |idx_options|
      if idx_options.is_a?(Hash)
        column_names = idx_options.delete(:columns)
        t.index(column_names, **idx_options)
      elsif idx_options.is_a?(Array)
        options = idx_options.extract_options!
        t.index(*idx_options, **options)
      else
        t.index(idx_options)
      end
    end
    t.timestamps if timestamps
  end
  klass
end