mini_record 0.3.9 → 0.4.0
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 +4 -4
- data/lib/mini_record/auto_schema.rb +31 -2
- data/lib/mini_record/version.rb +1 -1
- data/test/test_mini_record.rb +31 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 865494ec47990622d36b41ccf2c468bfce175efd
|
4
|
+
data.tar.gz: 1dd728a8022e9d1eda5901348e121ca42249ea41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 835e2394dc4c27ee55dacfbf1479da6480100193d1e680292e35dada29d620c569494a316b8c52791d7b4a32716ee4a7e0e1a7940f734b540ea2d50b7ed58c46
|
7
|
+
data.tar.gz: 06f2bc360a0a6a6042365fbb0de94ecaf9cf6fb03731f56d104c9d16749e0b3958690a431622b0fb79bb00145ed25d9e659a50a4e0ecee82a434fdfe4e7fc647
|
@@ -61,6 +61,10 @@ module MiniRecord
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
|
+
def rename_fields
|
65
|
+
@rename_fields ||= {}
|
66
|
+
end
|
67
|
+
|
64
68
|
def fields
|
65
69
|
table_definition.columns.inject({}) do |hash, column|
|
66
70
|
hash[column.name] = column
|
@@ -75,6 +79,20 @@ module MiniRecord
|
|
75
79
|
end
|
76
80
|
end
|
77
81
|
|
82
|
+
def rename_field(*args)
|
83
|
+
return unless connection?
|
84
|
+
|
85
|
+
options = args.extract_options!
|
86
|
+
new_name = options.delete(:new_name)
|
87
|
+
old_name = args.first
|
88
|
+
if old_name && new_name
|
89
|
+
rename_fields[old_name] = new_name
|
90
|
+
end
|
91
|
+
end
|
92
|
+
alias :rename_key :rename_field
|
93
|
+
alias :rename_property :rename_field
|
94
|
+
alias :rename_col :rename_field
|
95
|
+
|
78
96
|
def field(*args)
|
79
97
|
return unless connection?
|
80
98
|
|
@@ -243,15 +261,26 @@ module MiniRecord
|
|
243
261
|
field inheritance_column, :as => :string unless fields.key?(inheritance_column.to_s)
|
244
262
|
index inheritance_column
|
245
263
|
end
|
264
|
+
|
265
|
+
# Rename fields
|
266
|
+
rename_fields.each do |old_name, new_name|
|
267
|
+
old_column = fields_in_db[old_name.to_s]
|
268
|
+
new_column = fields_in_db[new_name.to_s]
|
269
|
+
if old_column && !new_column
|
270
|
+
connection.rename_column(table_name, old_column.name, new_name)
|
271
|
+
end
|
272
|
+
end
|
246
273
|
|
247
274
|
# Remove fields from db no longer in schema
|
248
|
-
|
275
|
+
columns_to_delete = fields_in_db.keys - fields.keys & fields_in_db.keys
|
276
|
+
columns_to_delete.each do |field|
|
249
277
|
column = fields_in_db[field]
|
250
278
|
connection.remove_column table_name, column.name
|
251
279
|
end
|
252
280
|
|
253
281
|
# Add fields to db new to schema
|
254
|
-
|
282
|
+
columns_to_add = fields.keys - fields_in_db.keys
|
283
|
+
columns_to_add.each do |field|
|
255
284
|
column = fields[field]
|
256
285
|
options = {:limit => column.limit, :precision => column.precision, :scale => column.scale}
|
257
286
|
options[:default] = column.default unless column.default.nil?
|
data/lib/mini_record/version.rb
CHANGED
data/test/test_mini_record.rb
CHANGED
@@ -618,4 +618,35 @@ describe MiniRecord do
|
|
618
618
|
assert_equal ['id', 'name'], User.db_columns.sort
|
619
619
|
assert_equal ['author', 'id', 'title'], Book.db_columns.sort
|
620
620
|
end
|
621
|
+
|
622
|
+
it 'should rename a column specified by rename_field' do
|
623
|
+
class Foo < ActiveRecord::Base
|
624
|
+
field :currency, :limit => 3
|
625
|
+
end
|
626
|
+
Foo.auto_upgrade!
|
627
|
+
assert_match /CREATE TABLE/, Foo.queries
|
628
|
+
|
629
|
+
Foo.create :currency => 'USD'
|
630
|
+
|
631
|
+
Foo.rename_field :currency, :new_name => :currency_iso
|
632
|
+
Foo.field :currency_iso, :limit => 3
|
633
|
+
|
634
|
+
Foo.auto_upgrade!
|
635
|
+
|
636
|
+
case conn.adapter_name
|
637
|
+
when /sqlite/i
|
638
|
+
assert_match /CREATE TEMPORARY TABLE "altered_foos"/i, Foo.queries
|
639
|
+
when /mysql/i
|
640
|
+
assert_match /ALTER TABLE `foos` CHANGE `currency` `currency_iso`/i, Foo.queries
|
641
|
+
when /postgres/i
|
642
|
+
assert_match /ALTER TABLE "foos" RENAME COLUMN "currency" TO "currency_iso"/, Foo.queries
|
643
|
+
end
|
644
|
+
|
645
|
+
foo = Foo.first
|
646
|
+
assert_equal 'USD', foo.currency_iso
|
647
|
+
|
648
|
+
Foo.auto_upgrade!
|
649
|
+
assert_match '', Foo.queries
|
650
|
+
|
651
|
+
end
|
621
652
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Davide D'Agostino
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|