activerecord-mysql-awesome 0.0.3 → 0.0.4

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
  SHA1:
3
- metadata.gz: c9d3de13790545a2190a85fb7821c32d6c301b03
4
- data.tar.gz: 91241e834c5079dd00ac97a24fa66f47324ca159
3
+ metadata.gz: a21a0f151f532f79298ad0c6dff3cc8fc2de50fb
4
+ data.tar.gz: e7b5019e83e9574918d428ccc5e9d8c60be43a13
5
5
  SHA512:
6
- metadata.gz: b0d28575ed05697be4e981e11813663fe6259d1cc7bcabb2bdeb5b99ca9336ad07964717091c6c55eb13f6b1f5b9a93ece087beb8fedbdae51d1b325be189777
7
- data.tar.gz: 87c10585a3c76084d660354c8f4f9a0bc6a5fcd454f1cdd1dccbdfc12c6536b4adda6d3617745b3dda84d666ecc6fbf94d11696a640126ca64a5dc0e4d918db4
6
+ metadata.gz: 71f8063d4621ac388c7edca128674cd53cf5e45ccb8452678700d520a1b1c45262d21533ad62ba1dbb9df1fd16ab5178b4b8422840e32160675f0ad20a1077d9
7
+ data.tar.gz: 6f0153a9989ba7b6106416f8d962f7ecfac29d28c0fd796aacf9a499ba4311eb60ee8f8d3b4b277fa905f966a3ba586f546179d74b739993e7308d6b98bd7a9e
@@ -3,27 +3,94 @@ require 'active_record/connection_adapters/abstract_mysql_adapter'
3
3
  module ActiveRecord
4
4
  module Mysql
5
5
  module Awesome
6
- def type_to_sql(type, limit = nil, precision = nil, scale = nil, unsigned = false)
7
- return "#{type_to_sql(type, limit, precision, scale)} unsigned" if unsigned && type != :primary_key
8
- case type.to_s
9
- when 'integer'
10
- case limit
11
- when nil, 4, 11; 'int' # compatibility with MySQL default
12
- else
13
- super(type, limit, precision, scale)
6
+ class ChangeColumnDefinition < Struct.new(:column, :name) #:nodoc:
7
+ end
8
+
9
+ class ColumnDefinition < ActiveRecord::ConnectionAdapters::ColumnDefinition
10
+ attr_accessor :auto_increment, :unsigned, :charset, :collation
11
+ end
12
+
13
+ class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition
14
+ def initialize(types, name, temporary, options, as = nil)
15
+ super(types, name, temporary, options)
16
+ @as = as
17
+ end
18
+
19
+ def primary_key(name, type = :primary_key, options = {})
20
+ options[:auto_increment] ||= type == :bigint
21
+ super
22
+ end
23
+
24
+ def new_column_definition(name, type, options) # :nodoc:
25
+ column = super
26
+ column.auto_increment = options[:auto_increment]
27
+ column.unsigned = options[:unsigned]
28
+ column.charset = options[:charset]
29
+ column.collation = options[:collation]
30
+ column
31
+ end
32
+
33
+ private
34
+
35
+ def create_column_definition(name, type)
36
+ ColumnDefinition.new(name, type)
37
+ end
38
+ end
39
+
40
+ module SchemaCreation
41
+ def visit_AddColumn(o)
42
+ add_column_position!("ADD #{accept(o)}", column_options(o))
43
+ end
44
+
45
+ private
46
+
47
+ def visit_ColumnDefinition(o)
48
+ o.sql_type = type_to_sql(o.type.to_sym, o.limit, o.precision, o.scale, o.unsigned)
49
+ column_sql = "#{quote_column_name(o.name)} #{o.sql_type}"
50
+ add_column_options!(column_sql, column_options(o)) unless o.type == :primary_key
51
+ column_sql
52
+ end
53
+
54
+ def visit_ChangeColumnDefinition(o)
55
+ change_column_sql = "CHANGE #{quote_column_name(o.name)} #{accept(o.column)}"
56
+ add_column_position!(change_column_sql, column_options(o.column))
57
+ end
58
+
59
+ def column_options(o)
60
+ column_options = super
61
+ column_options[:first] = o.first
62
+ column_options[:after] = o.after
63
+ column_options[:auto_increment] = o.auto_increment
64
+ column_options[:primary_key] = o.primary_key
65
+ column_options[:charset] = o.charset
66
+ column_options[:collation] = o.collation
67
+ column_options
68
+ end
69
+
70
+ def add_column_options!(sql, options)
71
+ if options[:charset]
72
+ sql << " CHARACTER SET #{options[:charset]}"
14
73
  end
15
- when 'primary_key'
16
- "#{type_to_sql(:integer, limit, precision, scale, unsigned)} auto_increment PRIMARY KEY"
17
- when 'datetime', 'time'
18
- return super(type, limit, precision, scale) unless precision
74
+ if options[:collation]
75
+ sql << " COLLATE #{options[:collation]}"
76
+ end
77
+ if options[:primary_key] == true
78
+ sql << " PRIMARY KEY"
79
+ end
80
+ super
81
+ end
19
82
 
20
- native_type = native_database_types[type.to_sym][:name]
21
- case precision
22
- when 0..6; "#{native_type}(#{precision})"
23
- else raise(ActiveRecordError, "No #{native_type} type has precision of #{precision}. The allowed range of precision is from 0 to 6")
83
+ def add_column_position!(sql, options)
84
+ if options[:first]
85
+ sql << " FIRST"
86
+ elsif options[:after]
87
+ sql << " AFTER #{quote_column_name(options[:after])}"
24
88
  end
25
- else
26
- super(type, limit, precision, scale)
89
+ sql
90
+ end
91
+
92
+ def type_to_sql(type, limit, precision, scale, unsigned = false)
93
+ @conn.type_to_sql(type.to_sym, limit, precision, scale, unsigned)
27
94
  end
28
95
  end
29
96
 
@@ -128,110 +195,30 @@ module ActiveRecord
128
195
  include TimeValueWithPrecision
129
196
  end
130
197
  end
131
- end
132
- end
133
-
134
- module ConnectionAdapters
135
- class AbstractMysqlAdapter < AbstractAdapter
136
- prepend Mysql::Awesome
137
-
138
- class Column < ConnectionAdapters::Column # :nodoc:
139
- prepend Mysql::Awesome::Column
140
- end
141
198
 
142
- class ChangeColumnDefinition < Struct.new(:column, :name) #:nodoc:
143
- end
199
+ public
144
200
 
145
- class ColumnDefinition < ActiveRecord::ConnectionAdapters::ColumnDefinition
146
- attr_accessor :auto_increment, :unsigned, :charset, :collation
147
- end
148
-
149
- class TableDefinition < ActiveRecord::ConnectionAdapters::TableDefinition
150
- def initialize(types, name, temporary, options, as = nil)
151
- super(types, name, temporary, options)
152
- @as = as
153
- end
154
-
155
- def primary_key(name, type = :primary_key, options = {})
156
- options[:auto_increment] ||= type == :bigint
157
- super
158
- end
159
-
160
- def new_column_definition(name, type, options) # :nodoc:
161
- column = super
162
- column.auto_increment = options[:auto_increment]
163
- column.unsigned = options[:unsigned]
164
- column.charset = options[:charset]
165
- column.collation = options[:collation]
166
- column
167
- end
168
-
169
- private
170
-
171
- def create_column_definition(name, type)
172
- ColumnDefinition.new(name, type)
173
- end
174
- end
175
-
176
- class SchemaCreation < AbstractAdapter::SchemaCreation
177
- def visit_AddColumn(o)
178
- add_column_position!("ADD #{accept(o)}", column_options(o))
179
- end
180
-
181
- private
182
-
183
- def visit_ColumnDefinition(o)
184
- sql_type = type_to_sql(o.type.to_sym, o.limit, o.precision, o.scale, o.unsigned)
185
- column_sql = "#{quote_column_name(o.name)} #{sql_type}"
186
- add_column_options!(column_sql, column_options(o)) unless o.type == :primary_key
187
- column_sql
188
- end
189
-
190
- def visit_ChangeColumnDefinition(o)
191
- change_column_sql = "CHANGE #{quote_column_name(o.name)} #{accept(o.column)}"
192
- add_column_position!(change_column_sql, column_options(o.column))
193
- end
194
-
195
- def column_options(o)
196
- column_options = super
197
- column_options[:first] = o.first
198
- column_options[:after] = o.after
199
- column_options[:auto_increment] = o.auto_increment
200
- column_options[:primary_key] = o.primary_key
201
- column_options[:charset] = o.charset
202
- column_options[:collation] = o.collation
203
- column_options
204
- end
205
-
206
- def add_column_options!(sql, options)
207
- if options[:charset]
208
- sql << " CHARACTER SET #{options[:charset]}"
209
- end
210
- if options[:collation]
211
- sql << " COLLATE #{options[:collation]}"
212
- end
213
- if options[:primary_key] == true
214
- sql << " PRIMARY KEY"
201
+ def type_to_sql(type, limit = nil, precision = nil, scale = nil, unsigned = false)
202
+ return "#{type_to_sql(type, limit, precision, scale)} unsigned" if unsigned && type != :primary_key
203
+ case type.to_s
204
+ when 'integer'
205
+ case limit
206
+ when nil, 4, 11; 'int' # compatibility with MySQL default
207
+ else
208
+ super(type, limit, precision, scale)
215
209
  end
216
- super
217
- end
210
+ when 'primary_key'
211
+ "#{type_to_sql(:integer, limit, precision, scale, unsigned)} auto_increment PRIMARY KEY"
212
+ when 'datetime', 'time'
213
+ return super(type, limit, precision, scale) unless precision
218
214
 
219
- def add_column_position!(sql, options)
220
- if options[:first]
221
- sql << " FIRST"
222
- elsif options[:after]
223
- sql << " AFTER #{quote_column_name(options[:after])}"
215
+ native_type = native_database_types[type.to_sym][:name]
216
+ case precision
217
+ when 0..6; "#{native_type}(#{precision})"
218
+ else raise(ActiveRecordError, "No #{native_type} type has precision of #{precision}. The allowed range of precision is from 0 to 6")
224
219
  end
225
- sql
226
- end
227
-
228
- def type_to_sql(type, limit, precision, scale, unsigned = false)
229
- @conn.type_to_sql(type.to_sym, limit, precision, scale, unsigned)
230
- end
231
-
232
- def quote_value(value, column)
233
- column.sql_type ||= type_to_sql(column.type, column.limit, column.precision, column.scale, column.unsigned)
234
- super
220
+ else
221
+ super(type, limit, precision, scale)
235
222
  end
236
223
  end
237
224
 
@@ -265,7 +252,7 @@ module ActiveRecord
265
252
  end
266
253
 
267
254
  def migration_keys
268
- super + [:unsigned, :collation]
255
+ super | [:unsigned, :collation]
269
256
  end
270
257
 
271
258
  def table_options(table_name)
@@ -314,13 +301,14 @@ module ActiveRecord
314
301
  schema_creation.accept(ChangeColumnDefinition.new(cd, column.name))
315
302
  end
316
303
 
317
- alias configure_connection_without_awesome configure_connection
304
+ private
305
+
318
306
  def configure_connection
319
307
  _config = @config
320
308
  if [':default', :default].include?(@config[:strict])
321
309
  @config = @config.deep_merge(variables: { sql_mode: :default })
322
310
  end
323
- configure_connection_without_awesome
311
+ super
324
312
  ensure
325
313
  @config = _config
326
314
  end
@@ -330,4 +318,18 @@ module ActiveRecord
330
318
  end
331
319
  end
332
320
  end
321
+
322
+ module ConnectionAdapters
323
+ class AbstractMysqlAdapter < AbstractAdapter
324
+ prepend Mysql::Awesome
325
+
326
+ class Column < ConnectionAdapters::Column # :nodoc:
327
+ prepend Mysql::Awesome::Column
328
+ end
329
+
330
+ class SchemaCreation < AbstractAdapter::SchemaCreation
331
+ prepend Mysql::Awesome::SchemaCreation
332
+ end
333
+ end
334
+ end
333
335
  end
@@ -1,7 +1,7 @@
1
1
  module ActiveRecord
2
2
  module Mysql
3
3
  module Awesome
4
- VERSION = "0.0.3"
4
+ VERSION = "0.0.4"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-mysql-awesome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryuta Kamizono
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-13 00:00:00.000000000 Z
11
+ date: 2015-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler