mini_record-compat 0.3.0 → 0.3.1
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.
- data/README.md +6 -1
- data/Rakefile +1 -1
- data/lib/mini_record/auto_schema.rb +32 -13
- data/lib/mini_record/version.rb +1 -1
- data/mini_record.gemspec +6 -6
- data/spec/models.rb +25 -2
- data/spec/shared_examples.rb +21 -1
- data/spec/spec_helper.rb +4 -0
- metadata +9 -11
data/README.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
|
-
|
1
|
+
# DEPRECATED
|
2
2
|
|
3
|
+
The old `mini_record-compat` gem has been deprecated in favor of [`active_record_inline_schema`](https://github.com/seamusabshere/active_record_inline_schema).
|
4
|
+
|
5
|
+
Please use [`active_record_inline_schema`](https://github.com/seamusabshere/active_record_inline_schema) or [original mini_record](https://github.com/DAddYE/mini_record) instead of `mini_record-compat`.
|
6
|
+
|
7
|
+
# DEPRECATED
|
3
8
|
|
4
9
|
MiniRecord is a micro extension for our `ActiveRecord` gem.
|
5
10
|
With MiniRecord you can add the ability to create columns outside the default `schema.rb`, directly
|
data/Rakefile
CHANGED
@@ -30,7 +30,7 @@ task :test_each_db_adapter do
|
|
30
30
|
puts
|
31
31
|
puts "#{'*'*10} Running #{db_adapter} tests"
|
32
32
|
puts
|
33
|
-
puts `bundle exec rake test TEST=spec/#{db_adapter}_spec.rb`
|
33
|
+
puts `bundle exec rake test DB_ADAPTER=#{db_adapter} TEST=spec/#{db_adapter}_spec.rb`
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -27,7 +27,11 @@ module MiniRecord
|
|
27
27
|
options = args.extract_options!
|
28
28
|
type = options.delete(:as) || options.delete(:type) || :string
|
29
29
|
args.each do |column_name|
|
30
|
-
table_definition.
|
30
|
+
if table_definition.respond_to?(type)
|
31
|
+
table_definition.send(type, column_name, options)
|
32
|
+
else
|
33
|
+
table_definition.column(column_name, type, options)
|
34
|
+
end
|
31
35
|
column_name = table_definition.columns[-1].name
|
32
36
|
case index_name = options.delete(:index)
|
33
37
|
when Hash
|
@@ -104,23 +108,31 @@ module MiniRecord
|
|
104
108
|
|
105
109
|
# avoid using connection.create_table because in 3.0.x it ignores table_definition
|
106
110
|
# and it also is too eager about adding a primary key column
|
107
|
-
create_sql = "CREATE TABLE "
|
108
|
-
create_sql << "#{quoted_table_name} ("
|
109
|
-
create_sql << table_definition.to_sql
|
110
|
-
create_sql << ") #{create_table_options}"
|
111
|
-
connection.execute create_sql
|
111
|
+
create_sql = "CREATE TABLE #{quoted_table_name} (#{table_definition.to_sql}) #{create_table_options}"
|
112
112
|
|
113
|
-
if
|
114
|
-
|
113
|
+
if sqlite?
|
114
|
+
connection.execute create_sql
|
115
|
+
if non_standard_primary_key
|
115
116
|
add_index primary_key, :unique => true
|
116
|
-
|
117
|
-
|
117
|
+
end
|
118
|
+
elsif postgresql?
|
119
|
+
connection.execute create_sql
|
120
|
+
if non_standard_primary_key
|
121
|
+
# can't use add_index method because it won't let you do "PRIMARY KEY"
|
118
122
|
connection.execute "ALTER TABLE #{quoted_table_name} ADD PRIMARY KEY (#{quoted_primary_key})"
|
119
|
-
else
|
120
|
-
raise RuntimeError, "mini_record doesn't support non-standard primary keys for the #{connection.adapter_name} adapter!"
|
121
123
|
end
|
124
|
+
elsif mysql?
|
125
|
+
if non_standard_primary_key
|
126
|
+
# only string keys are supported
|
127
|
+
create_sql.sub! %r{#{connection.quote_column_name(primary_key)} varchar\(255\)([^,\)]*)}, "#{connection.quote_column_name(primary_key)} varchar(255)\\1 PRIMARY KEY"
|
128
|
+
create_sql.sub! 'DEFAULT NULLPRIMARY KEY', 'PRIMARY KEY'
|
129
|
+
end
|
130
|
+
connection.execute create_sql
|
122
131
|
end
|
123
132
|
|
133
|
+
if connection.respond_to?(:schema_cache)
|
134
|
+
connection.schema_cache.clear!
|
135
|
+
end
|
124
136
|
reset_column_information
|
125
137
|
end
|
126
138
|
|
@@ -164,7 +176,9 @@ module MiniRecord
|
|
164
176
|
new_attr = {}
|
165
177
|
|
166
178
|
# First, check if the field type changed
|
167
|
-
if fields_in_schema[field].type.to_sym != fields_in_db[field].type.to_sym
|
179
|
+
if (fields_in_schema[field].type.to_sym != fields_in_db[field].type.to_sym) and (fields_in_schema[field].type.to_sym != fields_in_db[field].sql_type.to_sym)
|
180
|
+
# $stderr.puts "A(#{field}) - #{fields_in_schema[field].type.to_sym}"
|
181
|
+
# $stderr.puts "B(#{field}) - #{fields_in_db[field].type.to_sym} - #{fields_in_db[field].sql_type.to_sym}"
|
168
182
|
changed = true
|
169
183
|
end
|
170
184
|
|
@@ -178,6 +192,8 @@ module MiniRecord
|
|
178
192
|
fields_in_schema[field].each_pair do |att,value|
|
179
193
|
next if att == :type or att == :base or att == :name # special cases
|
180
194
|
if !value.nil? && value != fields_in_db[field].send(att)
|
195
|
+
# $stderr.puts "C(#{att}) - #{value.inspect}"
|
196
|
+
# $stderr.puts "D(#{att}) - #{fields_in_db[field].send(att).inspect}"
|
181
197
|
new_attr[att] = value
|
182
198
|
changed = true
|
183
199
|
end
|
@@ -203,6 +219,9 @@ module MiniRecord
|
|
203
219
|
end
|
204
220
|
|
205
221
|
# Reload column information
|
222
|
+
if connection.respond_to?(:schema_cache)
|
223
|
+
connection.schema_cache.clear!
|
224
|
+
end
|
206
225
|
reset_column_information
|
207
226
|
end
|
208
227
|
end # ClassMethods
|
data/lib/mini_record/version.rb
CHANGED
data/mini_record.gemspec
CHANGED
@@ -8,12 +8,9 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.authors = ["Davide D'Agostino", "Seamus Abshere"]
|
9
9
|
s.email = ["d.dagostino@lipsiasoft.com", "seamus@abshere.net"]
|
10
10
|
s.homepage = "https://github.com/seamusabshere/mini_record"
|
11
|
-
|
12
|
-
s.
|
13
|
-
|
14
|
-
in your model in a similar way that you just know in others projects
|
15
|
-
like DataMapper or MongoMapper.
|
16
|
-
}.gsub(/^ {4}/, '')
|
11
|
+
spec = %q{DEPRECATED. Use active_record_inline_schema or original mini_record gem instead.}
|
12
|
+
s.summary = spec
|
13
|
+
s.description = spec
|
17
14
|
|
18
15
|
# s.rubyforge_project = "mini_record"
|
19
16
|
|
@@ -23,6 +20,9 @@ Gem::Specification.new do |s|
|
|
23
20
|
s.require_paths = ["lib"]
|
24
21
|
|
25
22
|
s.add_runtime_dependency "activerecord", ">=3"
|
23
|
+
# s.add_runtime_dependency "activerecord", "3.0.12"
|
24
|
+
# s.add_runtime_dependency "activerecord", "3.1.3"
|
25
|
+
# s.add_runtime_dependency "activerecord", "3.2.2"
|
26
26
|
|
27
27
|
# dev dependencies appear to be in the Gemfile
|
28
28
|
end
|
data/spec/models.rb
CHANGED
@@ -41,18 +41,26 @@ class Cat < Pet; end
|
|
41
41
|
class Vegetable < ActiveRecord::Base
|
42
42
|
include SpecHelper
|
43
43
|
|
44
|
-
|
44
|
+
self.primary_key = 'latin_name'
|
45
45
|
|
46
46
|
col :latin_name
|
47
47
|
col :common_name
|
48
48
|
end
|
49
49
|
|
50
|
+
class Gender < ActiveRecord::Base
|
51
|
+
include SpecHelper
|
52
|
+
|
53
|
+
self.primary_key = 'name'
|
54
|
+
|
55
|
+
col :name
|
56
|
+
end
|
57
|
+
|
50
58
|
class User < ActiveRecord::Base
|
51
59
|
include SpecHelper
|
60
|
+
self.inheritance_column = 'role' # messed up in 3.2.2
|
52
61
|
col :name
|
53
62
|
col :surname
|
54
63
|
col :role
|
55
|
-
set_inheritance_column :role
|
56
64
|
end
|
57
65
|
class Administrator < User; end
|
58
66
|
class Customer < User; end
|
@@ -68,3 +76,18 @@ class AutomobileMakeModelYearVariant < ActiveRecord::Base
|
|
68
76
|
col :make_model_year_name
|
69
77
|
add_index :make_model_year_name
|
70
78
|
end
|
79
|
+
|
80
|
+
case ENV['DB_ADAPTER']
|
81
|
+
when 'mysql'
|
82
|
+
class CustomMysql < ActiveRecord::Base
|
83
|
+
include SpecHelper
|
84
|
+
col :varb, :type => 'varbinary(255)'
|
85
|
+
col :varc, :type => 'varchar(255)'
|
86
|
+
end
|
87
|
+
when 'postgresql'
|
88
|
+
class CustomPostgresql < ActiveRecord::Base
|
89
|
+
include SpecHelper
|
90
|
+
col :inet, :type => 'inet'
|
91
|
+
col :bytea, :type => 'bytea'
|
92
|
+
end
|
93
|
+
end
|
data/spec/shared_examples.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
describe MiniRecord do
|
2
2
|
before do
|
3
3
|
ActiveRecord::Base.descendants.each do |active_record|
|
4
|
-
ActiveRecord::Base.connection.drop_table active_record.table_name
|
4
|
+
ActiveRecord::Base.connection.drop_table active_record.table_name rescue nil
|
5
5
|
end
|
6
6
|
end
|
7
7
|
|
@@ -194,6 +194,11 @@ describe MiniRecord do
|
|
194
194
|
end
|
195
195
|
end
|
196
196
|
|
197
|
+
it 'properly creates tables with one column, a string primary key' do
|
198
|
+
Gender.auto_upgrade!
|
199
|
+
Gender.column_names.must_equal ['name']
|
200
|
+
end
|
201
|
+
|
197
202
|
it 'is idempotent' do
|
198
203
|
ActiveRecord::Base.descendants.each do |active_record|
|
199
204
|
active_record.auto_upgrade!
|
@@ -211,6 +216,21 @@ describe MiniRecord do
|
|
211
216
|
[ active_record.db_columns, active_record.db_indexes ].must_equal before
|
212
217
|
end
|
213
218
|
end
|
219
|
+
|
220
|
+
case ENV['DB_ADAPTER']
|
221
|
+
when 'mysql'
|
222
|
+
it "takes custom types" do
|
223
|
+
CustomMysql.auto_upgrade!
|
224
|
+
CustomMysql.columns_hash['varb'].sql_type.must_equal 'varbinary(255)'
|
225
|
+
CustomMysql.columns_hash['varc'].sql_type.must_equal 'varchar(255)'
|
226
|
+
end
|
227
|
+
when 'postgresql'
|
228
|
+
it "takes custom types" do
|
229
|
+
CustomPostgresql.auto_upgrade!
|
230
|
+
CustomPostgresql.columns_hash['inet'].sql_type.must_equal 'inet'
|
231
|
+
CustomPostgresql.columns_hash['bytea'].sql_type.must_equal 'bytea'
|
232
|
+
end
|
233
|
+
end
|
214
234
|
|
215
235
|
private
|
216
236
|
|
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,10 @@ require 'bundler/setup'
|
|
3
3
|
require 'mini_record'
|
4
4
|
require 'minitest/autorun'
|
5
5
|
|
6
|
+
# require 'logger'
|
7
|
+
# ActiveRecord::Base.logger = Logger.new($stderr)
|
8
|
+
# ActiveRecord::Base.logger.level = Logger::DEBUG
|
9
|
+
|
6
10
|
module SpecHelper
|
7
11
|
def self.included(base)
|
8
12
|
base.extend(ClassMethods)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_record-compat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2012-03-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
|
-
requirement: &
|
17
|
+
requirement: &2166679180 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,9 @@ dependencies:
|
|
22
22
|
version: '3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
26
|
-
description:
|
27
|
-
|
28
|
-
\ DataMapper or MongoMapper.\n "
|
25
|
+
version_requirements: *2166679180
|
26
|
+
description: DEPRECATED. Use active_record_inline_schema or original mini_record gem
|
27
|
+
instead.
|
29
28
|
email:
|
30
29
|
- d.dagostino@lipsiasoft.com
|
31
30
|
- seamus@abshere.net
|
@@ -68,12 +67,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
67
|
version: '0'
|
69
68
|
requirements: []
|
70
69
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.8.
|
70
|
+
rubygems_version: 1.8.15
|
72
71
|
signing_key:
|
73
72
|
specification_version: 3
|
74
|
-
summary:
|
75
|
-
is a micro gem that allow you to write schema inside your model as you can do in
|
76
|
-
DataMapper.
|
73
|
+
summary: DEPRECATED. Use active_record_inline_schema or original mini_record gem instead.
|
77
74
|
test_files:
|
78
75
|
- spec/models.rb
|
79
76
|
- spec/mysql_spec.rb
|
@@ -81,3 +78,4 @@ test_files:
|
|
81
78
|
- spec/shared_examples.rb
|
82
79
|
- spec/spec_helper.rb
|
83
80
|
- spec/sqlite3_spec.rb
|
81
|
+
has_rdoc:
|