brick 1.0.1 → 1.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b4733a804fae7a4759eae48690541f1873cb81fd1b2a9986f849202c1c76c5d
4
- data.tar.gz: d721f215cfed0473804f82969fd3c89dd7a94671d24b0f44b0e03cc73d787754
3
+ metadata.gz: 36447b749972f091f6d4c7c9127a7abfd5291d159f4ab81e0fb423feae7c2c03
4
+ data.tar.gz: eb2d1c36e67dd692ac765198c132c801c8633e32ecd199f42605f7659e7f3abd
5
5
  SHA512:
6
- metadata.gz: b73c787a9c7aa6804d2cfce77921252dd77ce3e6e3710bd30875436d0f66011e6043e0ae4cbdaaeff6f4abb725d8051b5c1be139ee28b80648314f124ff7204f
7
- data.tar.gz: 000b467728db85565d793df6e22429e3ff804bb7d39e5c4d6346becc24bc940ec9476fe00758d1e4a4fad868239e755ba7bdef596ecb115f358332656fd1be5e
6
+ metadata.gz: da45315cae612125917448549f3be6cf163c6dc30ac97794f57544321b2c21536600903e9eb30a379fc6a0845656fe7704df863db13ad62a70c623f4f9cba454
7
+ data.tar.gz: 64ec86f256752004d07447e94788e453f3e6cf9006082629f5e46791b36d6ce8031e22753217d5f23be5b672f65b35ddb9a55b696db5de0bb85686f854154fee
data/lib/brick/config.rb CHANGED
@@ -57,12 +57,36 @@ module Brick
57
57
  end
58
58
 
59
59
  # Additional table associations to use (Think of these as virtual foreign keys perhaps)
60
+ def additional_references
61
+ @mutex.synchronize { @additional_references }
62
+ end
63
+
60
64
  def additional_references=(references)
61
65
  @mutex.synchronize { @additional_references = references }
62
66
  end
63
67
 
64
- def additional_references
65
- @mutex.synchronize { @additional_references }
68
+ def skip_database_views
69
+ @mutex.synchronize { @skip_database_views }
70
+ end
71
+
72
+ def skip_database_views=(disable)
73
+ @mutex.synchronize { @skip_database_views = disable }
74
+ end
75
+
76
+ def exclude_tables
77
+ @mutex.synchronize { @exclude_tables }
78
+ end
79
+
80
+ def exclude_tables=(value)
81
+ @mutex.synchronize { @exclude_tables = value }
82
+ end
83
+
84
+ def metadata_columns
85
+ @mutex.synchronize { @metadata_columns }
86
+ end
87
+
88
+ def metadata_columns=(columns)
89
+ @mutex.synchronize { @metadata_columns = columns }
66
90
  end
67
91
  end
68
92
  end
@@ -33,9 +33,38 @@
33
33
  # ==========================================================
34
34
 
35
35
  # By default all models indicate that they are not views
36
- class ActiveRecord::Base
37
- def self.is_view?
38
- false
36
+ module ActiveRecord
37
+ class Base
38
+ def self.is_view?
39
+ false
40
+ end
41
+
42
+ # Used to show a little prettier name for an object
43
+ def brick_descrip
44
+ klass = self.class
45
+ klass.primary_key ? "#{klass.name} ##{send(klass.primary_key)}" : to_s
46
+ end
47
+
48
+ private
49
+
50
+ def self._brick_get_fks
51
+ @_brick_get_fks ||= reflect_on_all_associations.select { |a2| a2.macro == :belongs_to }.map(&:foreign_key)
52
+ end
53
+ end
54
+
55
+ class Relation
56
+ def brick_where(params)
57
+ wheres = {}
58
+ params.each do |k, v|
59
+ next unless klass._brick_get_fks.include?(k)
60
+
61
+ wheres[k] = v.split(',')
62
+ end
63
+ unless wheres.empty?
64
+ where!(wheres)
65
+ wheres # Return the specific parameters that we did use
66
+ end
67
+ end
39
68
  end
40
69
  end
41
70
 
@@ -88,6 +117,9 @@ class Object
88
117
  private
89
118
 
90
119
  def build_model(model_name, singular_table_name, table_name, relations, matching)
120
+ return if ((is_view = (relation = relations[matching]).key?(:isView)) && ::Brick.config.skip_database_views) ||
121
+ ::Brick.config.exclude_tables.include?(matching)
122
+
91
123
  # Are they trying to use a pluralised class name such as "Employees" instead of "Employee"?
92
124
  if table_name == singular_table_name && !ActiveSupport::Inflector.inflections.uncountable.include?(table_name)
93
125
  raise NameError.new("Class name for a model that references table \"#{matching}\" should be \"#{ActiveSupport::Inflector.singularize(model_name)}\".")
@@ -100,7 +132,7 @@ class Object
100
132
 
101
133
  # Override models backed by a view so they return true for #is_view?
102
134
  # (Dynamically-created controllers and view templates for such models will then act in a read-only way)
103
- if (is_view = (relation = relations[matching]).key?(:isView))
135
+ if is_view
104
136
  new_model_class.define_singleton_method :'is_view?' do
105
137
  true
106
138
  end
@@ -183,7 +215,6 @@ class Object
183
215
  [built_model, code]
184
216
  end
185
217
 
186
-
187
218
  def build_controller(class_name, plural_class_name, model, relations)
188
219
  table_name = ActiveSupport::Inflector.underscore(plural_class_name)
189
220
  singular_table_name = ActiveSupport::Inflector.singularize(table_name)
@@ -194,9 +225,11 @@ class Object
194
225
 
195
226
  code << " def index\n"
196
227
  code << " @#{table_name} = #{model.name}#{model.primary_key ? ".order(#{model.primary_key.inspect}" : '.all'})\n"
228
+ code << " @#{table_name}.brick_where(params)\n"
197
229
  code << " end\n"
198
230
  self.define_method :index do
199
231
  ar_relation = model.primary_key ? model.order(model.primary_key) : model.all
232
+ instance_variable_set(:@_brick_params, ar_relation.brick_where(params))
200
233
  instance_variable_set("@#{table_name}".to_sym, ar_relation)
201
234
  end
202
235
 
@@ -234,10 +267,9 @@ end
234
267
  # ==========================================================
235
268
 
236
269
  module ActiveRecord::ConnectionHandling
237
- alias old_establish_connection establish_connection
270
+ alias _brick_establish_connection establish_connection
238
271
  def establish_connection(*args)
239
- # puts connections.inspect
240
- x = old_establish_connection(*args)
272
+ x = _brick_establish_connection(*args)
241
273
 
242
274
  if (relations = ::Brick.relations).empty?
243
275
  schema = 'public'
@@ -268,9 +300,6 @@ module ActiveRecord::ConnectionHandling
268
300
  # next if internal_views.include?(r['relation_name']) # Skip internal views such as v_all_assessments
269
301
 
270
302
  relation = relations[r['relation_name']]
271
- relation[:index] = r['relation_name'].underscore
272
- relation[:show] = relation[:index].singularize
273
- relation[:index] = relation[:index].pluralize
274
303
  relation[:isView] = true if r['table_type'] == 'VIEW'
275
304
  col_name = r['column_name']
276
305
  cols = relation[:cols] # relation.fetch(:cols) { relation[:cols] = [] }
@@ -303,16 +332,6 @@ module ActiveRecord::ConnectionHandling
303
332
  # AND kcu2.TABLE_NAME = ?;", Apartment::Tenant.current, table_name
304
333
  ])
305
334
  ActiveRecord::Base.connection.execute(sql).values.each { |fk| ::Brick._add_bt_and_hm(fk, relations) }
306
-
307
- # Find associative tables that can be set up for has_many :through
308
- relations.each do |_key, tbl|
309
- tbl_cols = tbl[:cols].keys
310
- fks = tbl[:fks].each_with_object({}) { |fk, s| s[fk.last[:fk]] = fk.last[:inverse_table] if fk.last[:is_bt]; s }
311
- # Aside from the primary key and created_at, updated_at,This table has only foreign keys?
312
- if fks.length > 1 && (tbl_cols - fks.keys - ['created_at', 'updated_at', 'deleted_at', 'last_update'] - tbl[:pkey].values.first).length.zero?
313
- fks.each { |fk| tbl[:hmt_fks][fk.first] = fk.last }
314
- end
315
- end
316
335
  end
317
336
 
318
337
  puts "Classes built from tables:"
@@ -37,13 +37,110 @@ module Brick
37
37
  alias :_brick_find_template :find_template
38
38
  def find_template(*args, **options)
39
39
  if @_brick_model
40
+ model_name = @_brick_model.name
41
+ pk = @_brick_model.primary_key
42
+ obj_name = model_name.underscore
43
+ table_name = model_name.pluralize.underscore
44
+ # This gets has_many as well as has_many :through
45
+ # %%% weed out ones that don't have an available model to reference
46
+ bts, hms = @_brick_model.reflect_on_all_associations.each_with_object([{}, {}]) do |a, s|
47
+ case a.macro
48
+ when :belongs_to
49
+ # Build #brick_descrip if needed
50
+ unless a.klass.instance_methods(false).include?(:brick_descrip)
51
+ descrip_col = (a.klass.columns.map(&:name) - a.klass._brick_get_fks -
52
+ (::Brick.config.metadata_columns || []) -
53
+ [a.klass.primary_key]).first&.to_sym
54
+ if descrip_col
55
+ a.klass.define_method :brick_descrip do
56
+ send(descrip_col)
57
+ end
58
+ end
59
+ end
60
+
61
+ s.first[a.foreign_key] = [a.name, a.klass]
62
+ when :has_many
63
+ s.last[a.name] = a
64
+ end
65
+ s
66
+ end
67
+ # Weed out has_manys that go to an associative table
68
+ hms.select { |k, v| v.options[:through] }.each { |_k, hmt| hms.delete(hmt.options[:through]) }
69
+ show_obj_blurb = "<td><%= link_to \"#\{#{obj_name}.class.name\} ##\{#{obj_name}.id\}\", #{obj_name} %></td>\n"
70
+ hms_headers = hms.each_with_object(+'') { |hm, s| s << "<th>HM #{hm.first}</th>\n" }
71
+ hms_columns = hms.each_with_object(+'') do |hm, s|
72
+ s << "<td>
73
+ <%= link_to \"#\{#{obj_name}.#{hm.first}.count\} #{hm.first}\", #{hm.last.klass.name.underscore.pluralize}_path({ #{hm.last.foreign_key}: #{obj_name}.#{pk} }) %>
74
+ </td>\n"
75
+ end
76
+
40
77
  inline = case args.first
41
78
  when 'index'
42
- # Something like: <%= @categories.inspect %>
43
- "<%= @#{@_brick_model.name.underscore.pluralize}.inspect %>"
79
+ "<p style=\"color: green\"><%= notice %></p>
80
+
81
+ <h1>#{model_name.pluralize}</h1>
82
+ <% if @_brick_params&.present? %><h3>where <%= @_brick_params.each_with_object([]) { |v, s| s << \"#\{v.first\} = #\{v.last.inspect\}\" }.join(', ') %></h3><% end %>
83
+
84
+ <table id=\"#{table_name}\">
85
+ <tr>
86
+ <% is_first = true; is_need_id_col = nil
87
+ bts = { #{bts.each_with_object([]) { |v, s| s << "#{v.first.inspect} => [#{v.last.first.inspect}, #{v.last.last.name}, #{v.last.last.primary_key.inspect}]"}.join(', ')} }
88
+ @#{table_name}.columns.map(&:name).each do |col| %>
89
+ <% next if col == '#{pk}' || ::Brick.config.metadata_columns.include?(col) %>
90
+ <th>
91
+ <% if bt = bts[col]
92
+ if is_first
93
+ is_first = false
94
+ is_need_id_col = true %>
95
+ </th><th>
96
+ <% end %>
97
+ BT <%= bt[1].name %>
98
+ <% else
99
+ is_first = false %>
100
+ <%= col %>
101
+ <% end %>
102
+ </th>
103
+ <% end %>
104
+ <% if is_first # STILL haven't been able to write a first non-key / non-metadata column?
105
+ is_first = false
106
+ is_need_id_col = true %>
107
+ <td></td>
108
+ <% end %>
109
+ #{hms_headers}
110
+ </tr>
111
+
112
+ <% @#{table_name}.each do |#{obj_name}| %>
113
+ <tr>
114
+ <% if is_need_id_col %>
115
+ <td>#{show_obj_blurb}</td>
116
+ <% end %>
117
+ <% is_first = true; #{obj_name}.attributes.each do |k, val| %>
118
+ <% next if k == '#{pk}' || ::Brick.config.metadata_columns.include?(k) %>
119
+ <% if (bt = bts[k]) %>
120
+ <td>
121
+ <%= obj = bt[1].find_by(bt.last => val); link_to obj.brick_descrip, obj %>
122
+ <% elsif is_first %>
123
+ <td>
124
+ <%= is_first = false; link_to val, #{obj_name} %>
125
+ <% else %>
126
+ <td>
127
+ <%= val %>
128
+ <% end %>
129
+ </td>
130
+ <% end %>
131
+ #{hms_columns}
132
+ <!-- td>X</td -->
133
+ </tr>
134
+ <% end %>
135
+ </table>
136
+
137
+ <%= link_to \"New #{obj_name}\", new_#{obj_name}_path %>
138
+ "
139
+ # "<%= @#{@_brick_model.name.underscore.pluralize}.inspect %>"
44
140
  when 'show'
45
141
  "<%= @#{@_brick_model.name.underscore}.inspect %>"
46
142
  end
143
+ puts inline
47
144
  # As if it were an inline template (see #determine_template in actionview-5.2.6.2/lib/action_view/renderer/template_renderer.rb)
48
145
  keys = options.has_key?(:locals) ? options[:locals].keys : []
49
146
  handler = ActionView::Template.handler_for_extension(options[:type] || 'erb')
@@ -55,10 +152,39 @@ module Brick
55
152
  end
56
153
  end
57
154
 
58
- # Auto-routing behaviour
59
155
  if (::Brick.enable_routes = app.config.brick.fetch(:enable_routes, true))
60
- ::Brick.append_routes
156
+ ActionDispatch::Routing::RouteSet.class_exec do
157
+ alias _brick_finalize_routeset! finalize!
158
+ def finalize!(*args, **options)
159
+ unless @finalized
160
+ existing_controllers = routes.each_with_object({}) { |r, s| c = r.defaults[:controller]; s[c] = nil if c }
161
+ ::Rails.application.routes.append do
162
+ # %%% TODO: If no auto-controllers then enumerate the controllers folder in order to build matching routes
163
+ # If auto-controllers and auto-models are both enabled then this makes sense:
164
+ relations = (::Brick.instance_variable_get(:@relations) || {})[ActiveRecord::Base.connection_pool.object_id] || {}
165
+ relations.each do |k, v|
166
+ unless existing_controllers.key?(controller_name = k.underscore.pluralize)
167
+ options = {}
168
+ options[:only] = [:index, :show] if v.key?(:isView)
169
+ send(:resources, controller_name.to_sym, **options)
170
+ end
171
+ end
172
+ end
173
+ end
174
+ _brick_finalize_routeset!(*args, **options)
175
+ end
176
+ end
61
177
  end
178
+
179
+ # Do not consider database views when auto-creating models
180
+ ::Brick.skip_database_views = app.config.brick.fetch(:skip_database_views, false)
181
+
182
+ # Specific database tables and views to omit when auto-creating models
183
+ ::Brick.exclude_tables = app.config.brick.fetch(:exclude_tables, [])
184
+
185
+ # Columns to treat as being metadata for purposes of identifying associative tables for has_many :through
186
+ ::Brick.metadata_columns = app.config.brick.fetch(:metadata_columns, ['created_at', 'updated_at', 'deleted_at'])
187
+
62
188
  # Additional references (virtual foreign keys)
63
189
  if (ars = (::Brick.additional_references = app.config.brick.fetch(:additional_references, nil)))
64
190
  ars = ars.call if ars.is_a?(Proc)
@@ -68,6 +194,17 @@ module Brick
68
194
  ::Brick._add_bt_and_hm(fk[0..2])
69
195
  end
70
196
  end
197
+
198
+ # Find associative tables that can be set up for has_many :through
199
+ ::Brick.relations.each do |_key, tbl|
200
+ tbl_cols = tbl[:cols].keys
201
+ fks = tbl[:fks].each_with_object({}) { |fk, s| s[fk.last[:fk]] = fk.last[:inverse_table] if fk.last[:is_bt]; s }
202
+ # Aside from the primary key and the metadata columns created_at, updated_at, and deleted_at, if this table only has
203
+ # foreign keys then it can act as an associative table and thus be used with has_many :through.
204
+ if fks.length > 1 && (tbl_cols - fks.keys - (::Brick.config.metadata_columns || []) - tbl[:pkey].values.first).length.zero?
205
+ fks.each { |fk| tbl[:hmt_fks][fk.first] = fk.last }
206
+ end
207
+ end
71
208
  end
72
209
  end
73
210
  end
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 1
8
+ TINY = 2
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
data/lib/brick.rb CHANGED
@@ -79,17 +79,6 @@ require 'brick/config'
79
79
  require 'brick/frameworks/rails'
80
80
  module Brick
81
81
  class << self
82
- def append_routes
83
- ::Rails.application.routes.append do
84
- relations = (::Brick.instance_variable_get(:@relations) || {})[ActiveRecord::Base.connection_pool.object_id] || {}
85
- relations.each do |k, v|
86
- options = {}
87
- options[:only] = [:index, :show] if v.key?(:isView)
88
- send(:resources, k.underscore.pluralize.to_sym, **options)
89
- end
90
- end
91
- end
92
-
93
82
  # All tables and views (what Postgres calls "relations" including column and foreign key info)
94
83
  def relations
95
84
  connections = Brick.instance_variable_get(:@relations) ||
@@ -150,6 +139,21 @@ module Brick
150
139
  !!Brick.config.enable_routes
151
140
  end
152
141
 
142
+ # @api public
143
+ def skip_database_views=(value)
144
+ Brick.config.skip_database_views = value
145
+ end
146
+
147
+ # @api public
148
+ def exclude_tables=(value)
149
+ Brick.config.exclude_tables = value
150
+ end
151
+
152
+ # @api public
153
+ def metadata_columns=(value)
154
+ Brick.config.metadata_columns = value
155
+ end
156
+
153
157
  # Additional table associations to use (Think of these as virtual foreign keys perhaps)
154
158
  # @api public
155
159
  def additional_references=(value)
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rails/generators'
4
- require 'rails/generators/active_record'
4
+ # require 'rails/generators/active_record'
5
5
 
6
6
  module Brick
7
- # Auto-generates an IMPORT_TEMPLATE entry for one or more models
8
7
  class InstallGenerator < ::Rails::Generators::Base
9
- include ::Rails::Generators::Migration
8
+ # include ::Rails::Generators::Migration
10
9
 
11
10
  source_root File.expand_path('templates', __dir__)
12
11
  class_option(
@@ -16,81 +15,128 @@ module Brick
16
15
  desc: 'Store changeset (diff) with each version'
17
16
  )
18
17
 
19
- desc 'Generates (but does not run) a migration to add a versions table.' \
20
- ' Also generates an initializer file for configuring Brick'
18
+ desc 'Generates an initializer file for configuring Brick'
21
19
 
22
- def create_migration_file
23
- add_brick_migration('create_versions')
24
- add_brick_migration('add_object_changes_to_versions') if options.with_changes?
25
- end
20
+ def create_initializer_file
21
+ unless File.exists?(filename = 'config/initializers/brick.rb')
22
+ create_file filename, "# frozen_string_literal: true
26
23
 
27
- def self.next_migration_number(dirname)
28
- ::ActiveRecord::Generators::Base.next_migration_number(dirname)
29
- end
24
+ # # Settings for the Brick gem
25
+ # # (By default this auto-creates models, controllers, views, and routes on-the-fly.)
30
26
 
31
- protected
27
+ # # Normally these all start out as being enabled, but can be selectively disabled:
28
+ # Brick.enable_routes = false
29
+ # Brick.enable_models = false
30
+ # Brick.enable_controllers = false
31
+ # Brick.enable_views = false
32
+
33
+ # # By default models are auto-created from database views, and set to be read-only. This can be skipped.
34
+ # Brick.skip_database_views = true
35
+
36
+ # # Any tables or views you'd like to skip when auto-creating models
37
+ # Brick.exclude_tables = ['custom_metadata', 'version_info']
32
38
 
33
- def add_brick_migration(template)
34
- migration_dir = File.expand_path('db/migrate')
35
- if self.class.migration_exists?(migration_dir, template)
36
- ::Kernel.warn "Migration already exists: #{template}"
37
- else
38
- migration_template(
39
- "#{template}.rb.erb",
40
- "db/migrate/#{template}.rb",
41
- item_type_options: item_type_options,
42
- migration_version: migration_version,
43
- versions_table_options: versions_table_options
44
- )
39
+ # # Additional table references which are used to create has_many / belongs_to associations inside auto-created
40
+ # # models. (You can consider these to be \"virtual foreign keys\" if you wish)... You only have to add these
41
+ # # in cases where your database for some reason does not have foreign key constraints defined. Sometimes for
42
+ # # performance reasons or just out of sheer laziness these might be missing.
43
+ # # Each of these virtual foreign keys is defined as an array having three values:
44
+ # # foreign table name / foreign key column / primary table name.
45
+ # # (We boldly expect that the primary key identified by ActiveRecord on the primary table will be accurate,
46
+ # # usually this is \"id\" but there are some good smarts that are used in case some other column has been set
47
+ # # to be the primary key.
48
+ # Brick.additional_references = [['orders', 'customer_id', 'customer'],
49
+ # ['customer', 'region_id', 'regions']]
50
+
51
+ # # We normally don't consider the timestamp columns \"created_at\", \"updated_at\", and \"deleted_at\" to count when
52
+ # # finding tables which can serve as associative tables in an N:M association. That is, ones that can be a
53
+ # # part of a has_many :through association. If you want to use different exclusion columns than our defaults
54
+ # # then this setting resets that list. For instance, here is the override for the Sakila sample database:
55
+ # Brick.metadata_columns = ['last_updated']
56
+
57
+ # # If a default route is not supplied, Brick attempts to find the most \"central\" table and wires up the default
58
+ # # route to go to the :index action for what would be a controller for that table. You can specify any controller
59
+ # # name and action you wish in order to override this and have that be the default route when none other has been
60
+ # # specified in routes.rb or elsewhere. (Or just use an empty string in order to disable this behaviour.)
61
+ # Brick.default_route_fallback = 'customers' # This defaults to \"customers/index\"
62
+ # Brick.default_route_fallback = 'orders/outstanding' # Example of a non-RESTful route
63
+ # Brick.default_route_fallback = '' # Omits setting a default route in the absence of any other
64
+ "
45
65
  end
46
66
  end
47
67
 
68
+ # def create_migration_file
69
+ # add_brick_migration('create_versions')
70
+ # add_brick_migration('add_object_changes_to_versions') if options.with_changes?
71
+ # end
72
+
73
+ # def self.next_migration_number(dirname)
74
+ # ::ActiveRecord::Generators::Base.next_migration_number(dirname)
75
+ # end
76
+
77
+ protected
78
+
79
+ # def add_brick_migration(template)
80
+ # migration_dir = File.expand_path('db/migrate')
81
+ # if self.class.migration_exists?(migration_dir, template)
82
+ # ::Kernel.warn "Migration already exists: #{template}"
83
+ # else
84
+ # migration_template(
85
+ # "#{template}.rb.erb",
86
+ # "db/migrate/#{template}.rb",
87
+ # item_type_options: item_type_options,
88
+ # migration_version: migration_version,
89
+ # versions_table_options: versions_table_options
90
+ # )
91
+ # end
92
+ # end
93
+
48
94
  private
49
95
 
50
- # MySQL 5.6 utf8mb4 limit is 191 chars for keys used in indexes.
51
- def item_type_options
52
- opt = { null: false }
53
- opt[:limit] = 191 if mysql?
54
- ", #{opt}"
55
- end
96
+ # # MySQL 5.6 utf8mb4 limit is 191 chars for keys used in indexes.
97
+ # def item_type_options
98
+ # opt = { null: false }
99
+ # opt[:limit] = 191 if mysql?
100
+ # ", #{opt}"
101
+ # end
56
102
 
57
- def migration_version
58
- return unless (major = ActiveRecord::VERSION::MAJOR) >= 5
103
+ # def migration_version
104
+ # return unless (major = ActiveRecord::VERSION::MAJOR) >= 5
59
105
 
60
- "[#{major}.#{ActiveRecord::VERSION::MINOR}]"
61
- end
106
+ # "[#{major}.#{ActiveRecord::VERSION::MINOR}]"
107
+ # end
62
108
 
63
- # Class names of MySQL adapters.
64
- # - `MysqlAdapter` - Used by gems: `mysql`, `activerecord-jdbcmysql-adapter`.
65
- # - `Mysql2Adapter` - Used by `mysql2` gem.
66
- def mysql?
67
- [
68
- 'ActiveRecord::ConnectionAdapters::MysqlAdapter',
69
- 'ActiveRecord::ConnectionAdapters::Mysql2Adapter'
70
- ].freeze.include?(ActiveRecord::Base.connection.class.name)
71
- end
109
+ # # Class names of MySQL adapters.
110
+ # # - `MysqlAdapter` - Used by gems: `mysql`, `activerecord-jdbcmysql-adapter`.
111
+ # # - `Mysql2Adapter` - Used by `mysql2` gem.
112
+ # def mysql?
113
+ # [
114
+ # 'ActiveRecord::ConnectionAdapters::MysqlAdapter',
115
+ # 'ActiveRecord::ConnectionAdapters::Mysql2Adapter'
116
+ # ].freeze.include?(ActiveRecord::Base.connection.class.name)
117
+ # end
72
118
 
73
- # Even modern versions of MySQL still use `latin1` as the default character
74
- # encoding. Many users are not aware of this, and run into trouble when they
75
- # try to use Brick in apps that otherwise tend to use UTF-8. Postgres, by
76
- # comparison, uses UTF-8 except in the unusual case where the OS is configured
77
- # with a custom locale.
78
- #
79
- # - https://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
80
- # - http://www.postgresql.org/docs/9.4/static/multibyte.html
81
- #
82
- # Furthermore, MySQL's original implementation of UTF-8 was flawed, and had
83
- # to be fixed later by introducing a new charset, `utf8mb4`.
84
- #
85
- # - https://mathiasbynens.be/notes/mysql-utf8mb4
86
- # - https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
87
- #
88
- def versions_table_options
89
- if mysql?
90
- ', { options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci" }'
91
- else
92
- ''
93
- end
94
- end
119
+ # # Even modern versions of MySQL still use `latin1` as the default character
120
+ # # encoding. Many users are not aware of this, and run into trouble when they
121
+ # # try to use Brick in apps that otherwise tend to use UTF-8. Postgres, by
122
+ # # comparison, uses UTF-8 except in the unusual case where the OS is configured
123
+ # # with a custom locale.
124
+ # #
125
+ # # - https://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
126
+ # # - http://www.postgresql.org/docs/9.4/static/multibyte.html
127
+ # #
128
+ # # Furthermore, MySQL's original implementation of UTF-8 was flawed, and had
129
+ # # to be fixed later by introducing a new charset, `utf8mb4`.
130
+ # #
131
+ # # - https://mathiasbynens.be/notes/mysql-utf8mb4
132
+ # # - https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html
133
+ # #
134
+ # def versions_table_options
135
+ # if mysql?
136
+ # ', { options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci" }'
137
+ # else
138
+ # ''
139
+ # end
140
+ # end
95
141
  end
96
142
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits