migrant 1.3.2 → 1.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.
- data/.travis.yml +0 -2
- data/README.rdoc +2 -3
- data/Rakefile +0 -10
- data/VERSION +1 -1
- data/changelog.md +20 -0
- data/lib/dsl/data_type.rb +3 -1
- data/lib/dsl/data_types/primitives.rb +0 -1
- data/lib/migrant/migration_generator.rb +13 -7
- data/lib/migrant/schema.rb +4 -0
- data/test/rails_app/app/models/business.rb +1 -1
- data/test/rails_app/app/models/customer.rb +2 -0
- data/test/test_data_schema.rb +3 -2
- data/test/test_migration_generator.rb +8 -0
- data/test/verified_output/migrations/create_businesses.rb +3 -3
- data/test/verified_output/migrations/create_reviews.rb +1 -1
- data/test/verified_output/migrations/create_users.rb +1 -0
- data/test/verified_output/migrations/landline.rb +1 -1
- data/test/verified_output/migrations/modified_verified.rb +9 -0
- metadata +95 -29
data/.travis.yml
CHANGED
data/README.rdoc
CHANGED
@@ -16,8 +16,8 @@ In your Gemfile:
|
|
16
16
|
gem "migrant"
|
17
17
|
|
18
18
|
* Rails: 3.0+ (Sorry folks, no plans for Rails 2 support)
|
19
|
-
* Ruby:
|
20
|
-
* Adapters: Tested with SQLite3,
|
19
|
+
* Ruby: 1.9, Rbx, JRuby Supported, 1.8 works but unsupported (See Travis CI)
|
20
|
+
* Adapters: Tested with SQLite3, MySQL2, Pg. May work with other ActiveRecord adapters
|
21
21
|
|
22
22
|
== Jumping right in
|
23
23
|
|
@@ -42,7 +42,6 @@ correct database schema for you. Note that you don't need to specify foreign key
|
|
42
42
|
they are automatically inferred from your relations. Here is a further example:
|
43
43
|
|
44
44
|
class User < ActiveRecord::Base
|
45
|
-
# Define your associations BEFORE your structure block!
|
46
45
|
has_many :businesses
|
47
46
|
|
48
47
|
structure do
|
data/Rakefile
CHANGED
@@ -31,13 +31,3 @@ end
|
|
31
31
|
|
32
32
|
task :default => :test
|
33
33
|
|
34
|
-
require 'rake/rdoctask'
|
35
|
-
Rake::RDocTask.new do |rdoc|
|
36
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
37
|
-
|
38
|
-
rdoc.rdoc_dir = 'rdoc'
|
39
|
-
rdoc.title = "migrant #{version}"
|
40
|
-
rdoc.rdoc_files.include('README*')
|
41
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
42
|
-
end
|
43
|
-
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
data/changelog.md
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
### 1.4.0 / 2013-02-03
|
2
|
+
|
3
|
+
[full changelog](http://github.com/pascalh1011/migrant/compare/v1.3.2...v1.4.0)
|
4
|
+
|
5
|
+
* Features
|
6
|
+
* Changes to the column default are now detected
|
7
|
+
* Change migrations filenames are named using new default values (to avoid conflicts)
|
8
|
+
* Remove official 1.8 support (still works but too much testing overhead for now)
|
9
|
+
|
10
|
+
* Bug fixes
|
11
|
+
* Fixed associations failing to be added to the base model when using STI
|
12
|
+
* Fix possible issue with PostgreSQL regenerating migrations if the range primitive is used
|
13
|
+
|
14
|
+
### 1.3.2 / 2012-03-08
|
15
|
+
|
16
|
+
[full changelog](http://github.com/pascalh1011/migrant/compare/v1.3.1...v1.3.2)
|
17
|
+
|
18
|
+
* Bug fixes
|
19
|
+
* [CRITICAL] Specifying a belongs_to association in a model no longer automatically assumes a schema creation
|
20
|
+
|
1
21
|
### 1.3.1 / 2012-02-12
|
2
22
|
|
3
23
|
[full changelog](http://github.com/pascalh1011/migrant/compare/v1.3.0...v1.3.1)
|
data/lib/dsl/data_type.rb
CHANGED
@@ -58,7 +58,9 @@ module DataType
|
|
58
58
|
if current_structure
|
59
59
|
# General RDBMS data loss scenarios
|
60
60
|
if new_structure[:limit] && current_structure[:limit].to_i != new_structure[:limit].to_i ||
|
61
|
-
new_structure[:type] != current_structure[:type]
|
61
|
+
new_structure[:type] != current_structure[:type] ||
|
62
|
+
new_structure[:default] && new_structure[:default] != current_structure[:default]
|
63
|
+
|
62
64
|
column
|
63
65
|
else
|
64
66
|
nil # No changes
|
@@ -36,7 +36,7 @@ module Migrant
|
|
36
36
|
|
37
37
|
if model.table_exists?
|
38
38
|
# Structure ActiveRecord::Base's column information so we can compare it directly to the schema
|
39
|
-
db_schema = Hash[*model.columns.collect {|c| [c.name.to_sym, Hash[*[:type, :limit].map { |type| [type, c.send(type)] }.flatten] ] }.flatten]
|
39
|
+
db_schema = Hash[*model.columns.collect {|c| [c.name.to_sym, Hash[*[:type, :limit, :default].map { |type| [type, c.send(type)] }.flatten] ] }.flatten]
|
40
40
|
model.schema.columns.to_a.sort { |a,b| a.to_s <=> b.to_s }.each do |field_name, data_type|
|
41
41
|
if data_type.dangerous_migration_from?(db_schema[field_name]) &&
|
42
42
|
ask_user("#{model}: '#{field_name}': Converting from ActiveRecord type #{db_schema[field_name][:type]} to #{data_type.column[:type]} could cause data loss. Continue?", %W{Yes No}, true) == "No"
|
@@ -90,7 +90,7 @@ module Migrant
|
|
90
90
|
|
91
91
|
# Example: changed_table_added_something_and_modified_something
|
92
92
|
@activity = 'changed_'+model.table_name+[['added', @columns[:added]], ['modified', @columns[:changed]], ['deleted', destroyed_columns],
|
93
|
-
['moved', @columns[:transferred]], ['renamed', @columns[:renamed]], ['indexed', @new_indexes]].reject { |v| v[1].empty? }.collect { |v| "_#{v[0]}_"+v[1].collect(&:
|
93
|
+
['moved', @columns[:transferred]], ['renamed', @columns[:renamed]], ['indexed', @new_indexes]].reject { |v| v[1].empty? }.collect { |v| "_#{v[0]}_"+v[1].collect(&:last).join('_') }.join('_and')
|
94
94
|
@activity = @activity.split('_')[0..2].join('_')+'_with_multiple_changes' if @activity.length >= 240 # Most filesystems will raise Errno::ENAMETOOLONG otherwise
|
95
95
|
|
96
96
|
render('change_migration')
|
@@ -116,24 +116,30 @@ module Migrant
|
|
116
116
|
|
117
117
|
private
|
118
118
|
def add_column(name, options)
|
119
|
-
@columns[:added] << [name, options]
|
119
|
+
@columns[:added] << [name, options, name]
|
120
120
|
end
|
121
121
|
|
122
122
|
def change_column(name, new_schema, old_schema)
|
123
|
-
|
123
|
+
if new_schema[:default] && new_schema[:default].respond_to?(:to_s) && new_schema[:default].to_s.length < 31
|
124
|
+
change_description = "#{name}_defaulted_to_#{new_schema[:default].to_s.underscore}"
|
125
|
+
else
|
126
|
+
change_description = name
|
127
|
+
end
|
128
|
+
|
129
|
+
@columns[:changed] << [name, new_schema, old_schema, change_description]
|
124
130
|
end
|
125
131
|
|
126
132
|
def delete_column(name, current_structure)
|
127
|
-
@columns[:deleted] << [name, current_structure]
|
133
|
+
@columns[:deleted] << [name, current_structure, name]
|
128
134
|
end
|
129
135
|
|
130
136
|
def move_column(old_name, new_name, old_schema, new_schema)
|
131
137
|
if new_schema == old_schema
|
132
|
-
@columns[:renamed] << [old_name, new_name]
|
138
|
+
@columns[:renamed] << [old_name, new_name, old_name]
|
133
139
|
@columns[:added].reject! { |a| a.first == new_name } # Don't add the column too
|
134
140
|
else
|
135
141
|
@possible_irreversible_migrations = true
|
136
|
-
@columns[:transferred] << [old_name, new_name] # Still need to add the column, just transfer the data afterwards
|
142
|
+
@columns[:transferred] << [old_name, new_name, old_name] # Still need to add the column, just transfer the data afterwards
|
137
143
|
delete_column(old_name, old_schema)
|
138
144
|
end
|
139
145
|
end
|
data/lib/migrant/schema.rb
CHANGED
@@ -106,6 +106,10 @@ module Migrant
|
|
106
106
|
def requires_migration?
|
107
107
|
false # All added to base table
|
108
108
|
end
|
109
|
+
|
110
|
+
def add_association(association)
|
111
|
+
parent_schema.add_association(association)
|
112
|
+
end
|
109
113
|
end
|
110
114
|
|
111
115
|
# Why does this class exist? Excellent question.
|
@@ -16,7 +16,7 @@ class Business < ActiveRecord::Base
|
|
16
16
|
operating_days 0..6
|
17
17
|
date_established :datetime
|
18
18
|
next_sale (Time.now + 10.days)
|
19
|
-
verified false
|
19
|
+
verified false, :default => false
|
20
20
|
location :type => :string, :limit => 127
|
21
21
|
awards ["Best business 2007", "Tastiest Chicken 2008"]
|
22
22
|
managers :serialized
|
data/test/test_data_schema.rb
CHANGED
@@ -13,7 +13,8 @@ class TestDataSchema < Test::Unit::TestCase
|
|
13
13
|
should "generate a foreign key field for a belongs_to association" do
|
14
14
|
assert_schema(Business, :user_id, :type => :integer)
|
15
15
|
assert_schema(BusinessCategory, :business_id, :type => :integer)
|
16
|
-
assert_schema(BusinessCategory, :category_id, :type => :integer)
|
16
|
+
assert_schema(BusinessCategory, :category_id, :type => :integer)
|
17
|
+
assert_schema(User, :category_id, :type => :integer)
|
17
18
|
end
|
18
19
|
|
19
20
|
should "generate foreign key fields for a *polymorphic* belongs_to association" do
|
@@ -31,7 +32,7 @@ class TestDataSchema < Test::Unit::TestCase
|
|
31
32
|
end
|
32
33
|
|
33
34
|
should "generate a smallint column when given a small range" do
|
34
|
-
assert_schema(Business, :operating_days, :
|
35
|
+
assert_schema(Business, :operating_days, :type => :integer)
|
35
36
|
end
|
36
37
|
|
37
38
|
should "generate a large integer (size 8) for any bignum types" do
|
@@ -230,6 +230,14 @@ class TestMigrationGenerator < Test::Unit::TestCase
|
|
230
230
|
STDIN._mock_responses('M', 'incompatible_spot', 'N', 'Y')
|
231
231
|
run_against_template('added_incompatible_spot_and_deleted_spots')
|
232
232
|
end
|
233
|
+
|
234
|
+
should "update a column to include a new default" do
|
235
|
+
Business.structure do
|
236
|
+
verified true, :default => true
|
237
|
+
end
|
238
|
+
|
239
|
+
run_against_template('modified_verified')
|
240
|
+
end
|
233
241
|
end
|
234
242
|
end
|
235
243
|
|
@@ -6,15 +6,15 @@ class CreateBusinesses < ActiveRecord::Migration
|
|
6
6
|
t.integer :owner_id
|
7
7
|
t.string :name
|
8
8
|
t.string :website
|
9
|
-
t.text :address
|
9
|
+
t.text :address
|
10
10
|
t.string :summary
|
11
11
|
t.text :description
|
12
12
|
t.string :landline
|
13
13
|
t.string :mobile
|
14
|
-
t.integer :operating_days
|
14
|
+
t.integer :operating_days
|
15
15
|
t.datetime :date_established
|
16
16
|
t.datetime :next_sale
|
17
|
-
t.boolean :verified
|
17
|
+
t.boolean :verified
|
18
18
|
t.string :location, :limit=>127
|
19
19
|
t.text :awards
|
20
20
|
t.text :managers
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class ChangedBusinessesModifiedVerifiedDefaultedToTrue < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
change_column :businesses, :verified, :boolean, :default=>true
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.down
|
7
|
+
change_column :businesses, :verified, :boolean, :limit=>nil, :default=>false
|
8
|
+
end
|
9
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: migrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-05-23 00:00:00.
|
12
|
+
date: 2011-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thoughtbot-shoulda
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: minitest
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: 1.6.0
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.6.0
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: ansi
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: turn
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: sqlite3
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: simplecov
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: terminal-table
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: term-ansicolor
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: rake
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,10 +149,15 @@ dependencies:
|
|
109
149
|
version: 0.8.7
|
110
150
|
type: :development
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 0.8.7
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: simplecov
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
163
|
- - ! '>='
|
@@ -120,10 +165,15 @@ dependencies:
|
|
120
165
|
version: '0'
|
121
166
|
type: :development
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
124
174
|
- !ruby/object:Gem::Dependency
|
125
175
|
name: rails
|
126
|
-
requirement:
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
127
177
|
none: false
|
128
178
|
requirements:
|
129
179
|
- - ! '>='
|
@@ -131,10 +181,15 @@ dependencies:
|
|
131
181
|
version: 3.0.0
|
132
182
|
type: :runtime
|
133
183
|
prerelease: false
|
134
|
-
version_requirements:
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 3.0.0
|
135
190
|
- !ruby/object:Gem::Dependency
|
136
191
|
name: faker
|
137
|
-
requirement:
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
138
193
|
none: false
|
139
194
|
requirements:
|
140
195
|
- - ! '>='
|
@@ -142,10 +197,15 @@ dependencies:
|
|
142
197
|
version: '0'
|
143
198
|
type: :runtime
|
144
199
|
prerelease: false
|
145
|
-
version_requirements:
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
146
206
|
- !ruby/object:Gem::Dependency
|
147
207
|
name: term-ansicolor
|
148
|
-
requirement:
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
149
209
|
none: false
|
150
210
|
requirements:
|
151
211
|
- - ! '>='
|
@@ -153,7 +213,12 @@ dependencies:
|
|
153
213
|
version: '0'
|
154
214
|
type: :runtime
|
155
215
|
prerelease: false
|
156
|
-
version_requirements:
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
157
222
|
description: Easier schema management for Rails that complements your domain model.
|
158
223
|
email: 101pascal@gmail.com
|
159
224
|
executables: []
|
@@ -246,6 +311,7 @@ files:
|
|
246
311
|
- test/verified_output/migrations/deleted_spots.rb
|
247
312
|
- test/verified_output/migrations/estimated_value_notes.rb
|
248
313
|
- test/verified_output/migrations/landline.rb
|
314
|
+
- test/verified_output/migrations/modified_verified.rb
|
249
315
|
- test/verified_output/migrations/renamed_old_spots.rb
|
250
316
|
homepage: http://github.com/pascalh1011/migrant
|
251
317
|
licenses: []
|
@@ -267,7 +333,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
333
|
version: '0'
|
268
334
|
requirements: []
|
269
335
|
rubyforge_project:
|
270
|
-
rubygems_version: 1.8.
|
336
|
+
rubygems_version: 1.8.23
|
271
337
|
signing_key:
|
272
338
|
specification_version: 3
|
273
339
|
summary: All the fun of ActiveRecord without writing your migrations, and with a dash
|