paper_trail 3.0.6 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/.rspec +1 -2
- data/.travis.yml +14 -5
- data/CHANGELOG.md +215 -8
- data/CONTRIBUTING.md +84 -0
- data/README.md +922 -502
- data/Rakefile +2 -2
- data/doc/bug_report_template.rb +65 -0
- data/gemfiles/ar3.gemfile +61 -0
- data/lib/generators/paper_trail/install_generator.rb +22 -3
- data/lib/generators/paper_trail/templates/add_object_changes_to_versions.rb +6 -1
- data/lib/generators/paper_trail/templates/add_transaction_id_column_to_versions.rb +11 -0
- data/lib/generators/paper_trail/templates/create_version_associations.rb +17 -0
- data/lib/generators/paper_trail/templates/create_versions.rb +22 -1
- data/lib/paper_trail.rb +52 -22
- data/lib/paper_trail/attributes_serialization.rb +89 -0
- data/lib/paper_trail/cleaner.rb +32 -15
- data/lib/paper_trail/config.rb +35 -2
- data/lib/paper_trail/frameworks/active_record.rb +4 -5
- data/lib/paper_trail/frameworks/active_record/models/paper_trail/version_association.rb +7 -0
- data/lib/paper_trail/frameworks/rails.rb +1 -0
- data/lib/paper_trail/frameworks/rails/controller.rb +27 -11
- data/lib/paper_trail/frameworks/rspec.rb +5 -0
- data/lib/paper_trail/frameworks/sinatra.rb +3 -1
- data/lib/paper_trail/has_paper_trail.rb +304 -148
- data/lib/paper_trail/record_history.rb +59 -0
- data/lib/paper_trail/reifier.rb +270 -0
- data/lib/paper_trail/serializers/json.rb +13 -2
- data/lib/paper_trail/serializers/yaml.rb +16 -2
- data/lib/paper_trail/version_association_concern.rb +15 -0
- data/lib/paper_trail/version_concern.rb +160 -122
- data/lib/paper_trail/version_number.rb +3 -3
- data/paper_trail.gemspec +22 -9
- data/spec/generators/install_generator_spec.rb +4 -4
- data/spec/models/animal_spec.rb +36 -0
- data/spec/models/boolit_spec.rb +48 -0
- data/spec/models/callback_modifier_spec.rb +96 -0
- data/spec/models/fluxor_spec.rb +19 -0
- data/spec/models/gadget_spec.rb +14 -12
- data/spec/models/joined_version_spec.rb +9 -9
- data/spec/models/json_version_spec.rb +103 -0
- data/spec/models/kitchen/banana_spec.rb +14 -0
- data/spec/models/not_on_update_spec.rb +19 -0
- data/spec/models/post_with_status_spec.rb +3 -3
- data/spec/models/skipper_spec.rb +46 -0
- data/spec/models/thing_spec.rb +11 -0
- data/spec/models/version_spec.rb +195 -44
- data/spec/models/widget_spec.rb +136 -76
- data/spec/modules/paper_trail_spec.rb +27 -0
- data/spec/modules/version_concern_spec.rb +8 -8
- data/spec/modules/version_number_spec.rb +16 -16
- data/spec/paper_trail/config_spec.rb +52 -0
- data/spec/paper_trail_spec.rb +17 -17
- data/spec/rails_helper.rb +34 -0
- data/spec/requests/articles_spec.rb +10 -14
- data/spec/spec_helper.rb +81 -34
- data/spec/support/alt_db_init.rb +1 -1
- data/test/dummy/app/controllers/application_controller.rb +1 -1
- data/test/dummy/app/controllers/articles_controller.rb +4 -1
- data/test/dummy/app/models/animal.rb +2 -0
- data/test/dummy/app/models/book.rb +4 -0
- data/test/dummy/app/models/boolit.rb +4 -0
- data/test/dummy/app/models/callback_modifier.rb +45 -0
- data/test/dummy/app/models/chapter.rb +9 -0
- data/test/dummy/app/models/citation.rb +5 -0
- data/test/dummy/app/models/customer.rb +4 -0
- data/test/dummy/app/models/editor.rb +4 -0
- data/test/dummy/app/models/editorship.rb +5 -0
- data/test/dummy/app/models/fruit.rb +5 -0
- data/test/dummy/app/models/kitchen/banana.rb +5 -0
- data/test/dummy/app/models/line_item.rb +4 -0
- data/test/dummy/app/models/not_on_update.rb +4 -0
- data/test/dummy/app/models/order.rb +5 -0
- data/test/dummy/app/models/paragraph.rb +5 -0
- data/test/dummy/app/models/person.rb +13 -3
- data/test/dummy/app/models/post.rb +0 -1
- data/test/dummy/app/models/quotation.rb +5 -0
- data/test/dummy/app/models/section.rb +6 -0
- data/test/dummy/app/models/skipper.rb +6 -0
- data/test/dummy/app/models/song.rb +20 -0
- data/test/dummy/app/models/thing.rb +3 -0
- data/test/dummy/app/models/whatchamajigger.rb +4 -0
- data/test/dummy/app/models/widget.rb +5 -0
- data/test/dummy/app/versions/json_version.rb +3 -0
- data/test/dummy/app/versions/kitchen/banana_version.rb +5 -0
- data/test/dummy/config/application.rb +6 -0
- data/test/dummy/config/database.postgres.yml +1 -1
- data/test/dummy/config/environments/test.rb +5 -1
- data/test/dummy/config/initializers/paper_trail.rb +6 -1
- data/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb +143 -3
- data/test/dummy/db/schema.rb +169 -25
- data/test/functional/controller_test.rb +4 -2
- data/test/functional/modular_sinatra_test.rb +1 -1
- data/test/functional/sinatra_test.rb +1 -1
- data/test/paper_trail_test.rb +7 -0
- data/test/test_helper.rb +38 -2
- data/test/time_travel_helper.rb +15 -0
- data/test/unit/associations_test.rb +726 -0
- data/test/unit/inheritance_column_test.rb +6 -6
- data/test/unit/model_test.rb +109 -125
- data/test/unit/protected_attrs_test.rb +4 -3
- data/test/unit/serializer_test.rb +6 -6
- data/test/unit/serializers/json_test.rb +17 -4
- data/test/unit/serializers/yaml_test.rb +5 -1
- data/test/unit/version_test.rb +87 -69
- metadata +172 -75
- data/gemfiles/3.0.gemfile +0 -42
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -26
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/javascripts/application.js +0 -2
- data/test/dummy/public/javascripts/controls.js +0 -965
- data/test/dummy/public/javascripts/dragdrop.js +0 -974
- data/test/dummy/public/javascripts/effects.js +0 -1123
- data/test/dummy/public/javascripts/prototype.js +0 -6001
- data/test/dummy/public/javascripts/rails.js +0 -175
- data/test/dummy/public/stylesheets/.gitkeep +0 -0
data/spec/support/alt_db_init.rb
CHANGED
@@ -9,7 +9,7 @@ configs = YAML.load_file("#{Rails.root}/config/database.yml")
|
|
9
9
|
db_directory = "#{Rails.root}/db"
|
10
10
|
# setup alternate databases
|
11
11
|
if ENV["DB"] == "sqlite"
|
12
|
-
if RUBY_VERSION
|
12
|
+
if RUBY_VERSION >= '1.9'
|
13
13
|
FileUtils.cp "#{db_directory}/test.sqlite3", "#{db_directory}/test-foo.sqlite3"
|
14
14
|
FileUtils.cp "#{db_directory}/test.sqlite3", "#{db_directory}/test-bar.sqlite3"
|
15
15
|
else
|
@@ -9,7 +9,7 @@ class ApplicationController < ActionController::Base
|
|
9
9
|
def current_user
|
10
10
|
@current_user ||= OpenStruct.new(:id => 153).tap do |obj|
|
11
11
|
# Invoking `id` returns the `object_id` value in Ruby18 unless specifically overwritten
|
12
|
-
def obj.id; 153; end if RUBY_VERSION
|
12
|
+
def obj.id; 153; end if RUBY_VERSION < '1.9'
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
@@ -9,6 +9,9 @@ class ArticlesController < ApplicationController
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def current_user
|
12
|
-
'foobar'
|
12
|
+
'foobar'.tap do |string|
|
13
|
+
# Invoking `id` returns the `object_id` value in Ruby18 by default
|
14
|
+
string.class_eval { undef_method(:id) } if RUBY_VERSION < '1.9'
|
15
|
+
end
|
13
16
|
end
|
14
17
|
end
|
@@ -1,5 +1,9 @@
|
|
1
1
|
class Book < ActiveRecord::Base
|
2
2
|
has_many :authorships, :dependent => :destroy
|
3
3
|
has_many :authors, :through => :authorships, :source => :person
|
4
|
+
|
5
|
+
has_many :editorships, :dependent => :destroy
|
6
|
+
has_many :editors, :through => :editorships
|
7
|
+
|
4
8
|
has_paper_trail
|
5
9
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class CallbackModifier < ActiveRecord::Base
|
2
|
+
has_paper_trail :on => []
|
3
|
+
|
4
|
+
def test_destroy
|
5
|
+
transaction do
|
6
|
+
run_callbacks(:destroy) do
|
7
|
+
self.deleted = true
|
8
|
+
save!
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def flagged_deleted?
|
14
|
+
deleted?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class BeforeDestroyModifier < CallbackModifier
|
19
|
+
has_paper_trail :on => []
|
20
|
+
paper_trail_on_destroy :before
|
21
|
+
end
|
22
|
+
|
23
|
+
class AfterDestroyModifier < CallbackModifier
|
24
|
+
has_paper_trail :on => []
|
25
|
+
paper_trail_on_destroy :after
|
26
|
+
end
|
27
|
+
|
28
|
+
class NoArgDestroyModifier < CallbackModifier
|
29
|
+
has_paper_trail :on => []
|
30
|
+
paper_trail_on_destroy
|
31
|
+
end
|
32
|
+
|
33
|
+
class UpdateModifier < CallbackModifier
|
34
|
+
has_paper_trail :on => []
|
35
|
+
paper_trail_on_update
|
36
|
+
end
|
37
|
+
|
38
|
+
class CreateModifier < CallbackModifier
|
39
|
+
has_paper_trail :on => []
|
40
|
+
paper_trail_on_create
|
41
|
+
end
|
42
|
+
|
43
|
+
class DefaultModifier < CallbackModifier
|
44
|
+
has_paper_trail
|
45
|
+
end
|
@@ -15,12 +15,22 @@ class Person < ActiveRecord::Base
|
|
15
15
|
|
16
16
|
# Store TimeZone objects as strings when serialized to database
|
17
17
|
class TimeZoneSerializer
|
18
|
+
class << self
|
19
|
+
def dump(zone)
|
20
|
+
zone.try(:name)
|
21
|
+
end
|
22
|
+
|
23
|
+
def load(value)
|
24
|
+
::Time.find_zone!(value) rescue nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
18
28
|
def dump(zone)
|
19
|
-
|
29
|
+
self.class.dump(zone)
|
20
30
|
end
|
21
|
-
|
31
|
+
|
22
32
|
def load(value)
|
23
|
-
|
33
|
+
self.class.load(value)
|
24
34
|
end
|
25
35
|
end
|
26
36
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# Example from 'Overwriting default accessors' in ActiveRecord::Base.
|
2
2
|
class Song < ActiveRecord::Base
|
3
3
|
has_paper_trail
|
4
|
+
attr_accessor :name
|
4
5
|
|
5
6
|
# Uses an integer of seconds to hold the length of the song
|
6
7
|
def length=(minutes)
|
@@ -9,4 +10,23 @@ class Song < ActiveRecord::Base
|
|
9
10
|
def length
|
10
11
|
read_attribute(:length) / 60
|
11
12
|
end
|
13
|
+
|
14
|
+
# override attributes hashes like some libraries do
|
15
|
+
def attributes_with_name
|
16
|
+
if name
|
17
|
+
attributes_without_name.merge(:name => name)
|
18
|
+
else
|
19
|
+
attributes_without_name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
alias_method_chain :attributes, :name
|
23
|
+
|
24
|
+
def changed_attributes_with_name
|
25
|
+
if name
|
26
|
+
changed_attributes_without_name.merge(:name => name)
|
27
|
+
else
|
28
|
+
changed_attributes_without_name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
alias_method_chain :changed_attributes, :name
|
12
32
|
end
|
@@ -1,6 +1,11 @@
|
|
1
1
|
class Widget < ActiveRecord::Base
|
2
2
|
has_paper_trail
|
3
3
|
has_one :wotsit
|
4
|
+
has_many :whatchamajiggers, :as => :owner
|
5
|
+
|
6
|
+
EXCLUDED_NAME = 'Biglet'
|
7
|
+
|
8
|
+
validates :name, :exclusion => { :in => [EXCLUDED_NAME] }
|
4
9
|
|
5
10
|
if ::ActiveRecord::VERSION::MAJOR >= 4 # `has_many` syntax for specifying order uses a lambda in Rails 4
|
6
11
|
has_many :fluxors, lambda { order(:name) }
|
@@ -59,5 +59,11 @@ module Dummy
|
|
59
59
|
|
60
60
|
# Rails 4 key for generating secret key
|
61
61
|
config.secret_key_base = 'A fox regularly kicked the screaming pile of biscuits.'
|
62
|
+
|
63
|
+
# supress warnings about raises in transactional callbacks on AR 4.2+
|
64
|
+
config.active_record.raise_in_transactional_callbacks = true if ActiveRecord::VERSION::STRING >= '4.2'
|
65
|
+
|
66
|
+
# Set test order for Test::Unit if possible
|
67
|
+
config.active_support.test_order = :sorted if config.active_support.respond_to?(:test_order=)
|
62
68
|
end
|
63
69
|
end
|
@@ -11,7 +11,11 @@ Dummy::Application.configure do
|
|
11
11
|
config.eager_load = true
|
12
12
|
|
13
13
|
# Configure static asset server for tests with Cache-Control for performance
|
14
|
-
config.
|
14
|
+
if config.respond_to?(:serve_static_files=)
|
15
|
+
config.serve_static_files = true
|
16
|
+
else
|
17
|
+
config.serve_static_assets = true
|
18
|
+
end
|
15
19
|
config.static_cache_control = "public, max-age=3600"
|
16
20
|
|
17
21
|
# Show full error reports and disable caching
|
@@ -1,5 +1,10 @@
|
|
1
|
+
# Turn on associations tracking when the test suite is run on Travis CI
|
2
|
+
PaperTrail.config.track_associations = true if ENV['TRAVIS']
|
3
|
+
|
1
4
|
module PaperTrail
|
2
5
|
class Version < ActiveRecord::Base
|
3
|
-
|
6
|
+
if ::PaperTrail.active_record_protected_attributes?
|
7
|
+
attr_accessible :answer, :action, :question, :article_id, :ip, :user_agent, :title
|
8
|
+
end
|
4
9
|
end
|
5
10
|
end
|
@@ -1,5 +1,11 @@
|
|
1
1
|
class SetUpTestTables < ActiveRecord::Migration
|
2
2
|
def self.up
|
3
|
+
create_table :skippers, :force => true do |t|
|
4
|
+
t.string :name
|
5
|
+
t.datetime :another_timestamp
|
6
|
+
t.timestamps :null => true
|
7
|
+
end
|
8
|
+
|
3
9
|
create_table :widgets, :force => true do |t|
|
4
10
|
t.string :name
|
5
11
|
t.text :a_text
|
@@ -12,7 +18,7 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
12
18
|
t.boolean :a_boolean
|
13
19
|
t.string :sacrificial_column
|
14
20
|
t.string :type
|
15
|
-
t.timestamps
|
21
|
+
t.timestamps :null => true
|
16
22
|
end
|
17
23
|
|
18
24
|
create_table :versions, :force => true do |t|
|
@@ -22,6 +28,7 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
22
28
|
t.string :whodunnit
|
23
29
|
t.text :object
|
24
30
|
t.text :object_changes
|
31
|
+
t.integer :transaction_id
|
25
32
|
t.datetime :created_at
|
26
33
|
|
27
34
|
# Metadata columns.
|
@@ -37,6 +44,14 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
37
44
|
end
|
38
45
|
add_index :versions, [:item_type, :item_id]
|
39
46
|
|
47
|
+
create_table :version_associations do |t|
|
48
|
+
t.integer :version_id
|
49
|
+
t.string :foreign_key_name, :null => false
|
50
|
+
t.integer :foreign_key_id
|
51
|
+
end
|
52
|
+
add_index :version_associations, [:version_id]
|
53
|
+
add_index :version_associations, [:foreign_key_name, :foreign_key_id], :name => 'index_version_associations_on_foreign_key'
|
54
|
+
|
40
55
|
create_table :post_versions, :force => true do |t|
|
41
56
|
t.string :item_type, :null => false
|
42
57
|
t.integer :item_id, :null => false
|
@@ -51,10 +66,41 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
51
66
|
end
|
52
67
|
add_index :post_versions, [:item_type, :item_id]
|
53
68
|
|
69
|
+
if ENV['DB'] == 'postgres' && ::ActiveRecord::VERSION::MAJOR >= 4
|
70
|
+
create_table :json_versions, :force => true do |t|
|
71
|
+
t.string :item_type, :null => false
|
72
|
+
t.integer :item_id, :null => false
|
73
|
+
t.string :event, :null => false
|
74
|
+
t.string :whodunnit
|
75
|
+
t.json :object
|
76
|
+
t.json :object_changes
|
77
|
+
t.datetime :created_at
|
78
|
+
end
|
79
|
+
add_index :json_versions, [:item_type, :item_id]
|
80
|
+
end
|
81
|
+
|
82
|
+
create_table :not_on_updates, :force => true do |t|
|
83
|
+
t.timestamps :null => true
|
84
|
+
end
|
85
|
+
|
86
|
+
create_table :bananas, :force => true do |t|
|
87
|
+
t.timestamps :null => true
|
88
|
+
end
|
89
|
+
|
90
|
+
create_table :banana_versions, :force => true do |t|
|
91
|
+
t.string :item_type, :null => false
|
92
|
+
t.integer :item_id, :null => false
|
93
|
+
t.string :event, :null => false
|
94
|
+
t.string :whodunnit
|
95
|
+
t.text :object
|
96
|
+
t.datetime :created_at
|
97
|
+
end
|
98
|
+
add_index :banana_versions, [:item_type, :item_id]
|
99
|
+
|
54
100
|
create_table :wotsits, :force => true do |t|
|
55
101
|
t.integer :widget_id
|
56
102
|
t.string :name
|
57
|
-
t.timestamps
|
103
|
+
t.timestamps :null => true
|
58
104
|
end
|
59
105
|
|
60
106
|
create_table :fluxors, :force => true do |t|
|
@@ -62,6 +108,12 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
62
108
|
t.string :name
|
63
109
|
end
|
64
110
|
|
111
|
+
create_table :whatchamajiggers, :force => true do |t|
|
112
|
+
t.string :owner_type
|
113
|
+
t.integer :owner_id
|
114
|
+
t.string :name
|
115
|
+
end
|
116
|
+
|
65
117
|
create_table :articles, :force => true do |t|
|
66
118
|
t.string :title
|
67
119
|
t.string :content
|
@@ -83,6 +135,15 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
83
135
|
t.string :time_zone
|
84
136
|
end
|
85
137
|
|
138
|
+
create_table :editorships, :force => true do |t|
|
139
|
+
t.integer :book_id
|
140
|
+
t.integer :editor_id
|
141
|
+
end
|
142
|
+
|
143
|
+
create_table :editors, :force => true do |t|
|
144
|
+
t.string :name
|
145
|
+
end
|
146
|
+
|
86
147
|
create_table :songs, :force => true do |t|
|
87
148
|
t.integer :length
|
88
149
|
end
|
@@ -110,6 +171,10 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
110
171
|
t.integer :version
|
111
172
|
end
|
112
173
|
|
174
|
+
create_table :things, :force => true do |t|
|
175
|
+
t.string :name
|
176
|
+
end
|
177
|
+
|
113
178
|
create_table :translations, :force => true do |t|
|
114
179
|
t.string :headline
|
115
180
|
t.string :content
|
@@ -120,28 +185,103 @@ class SetUpTestTables < ActiveRecord::Migration
|
|
120
185
|
create_table :gadgets, :force => true do |t|
|
121
186
|
t.string :name
|
122
187
|
t.string :brand
|
123
|
-
t.timestamps
|
188
|
+
t.timestamps :null => true
|
189
|
+
end
|
190
|
+
|
191
|
+
create_table :customers, :force => true do |t|
|
192
|
+
t.string :name
|
193
|
+
end
|
194
|
+
|
195
|
+
create_table :orders, :force => true do |t|
|
196
|
+
t.integer :customer_id
|
197
|
+
t.string :order_date
|
198
|
+
end
|
199
|
+
|
200
|
+
create_table :line_items, :force => true do |t|
|
201
|
+
t.integer :order_id
|
202
|
+
t.string :product
|
203
|
+
end
|
204
|
+
|
205
|
+
create_table :fruits, :force => true do |t|
|
206
|
+
t.string :name
|
207
|
+
t.string :color
|
208
|
+
end
|
209
|
+
|
210
|
+
create_table :boolits, :force => true do |t|
|
211
|
+
t.string :name
|
212
|
+
t.boolean :scoped, :default => true
|
213
|
+
end
|
214
|
+
|
215
|
+
create_table :callback_modifiers, :force => true do |t|
|
216
|
+
t.string :some_content
|
217
|
+
t.boolean :deleted, :default => false
|
218
|
+
end
|
219
|
+
|
220
|
+
create_table :chapters, :force => true do |t|
|
221
|
+
t.string :name
|
222
|
+
end
|
223
|
+
|
224
|
+
create_table :sections, :force => true do |t|
|
225
|
+
t.integer :chapter_id
|
226
|
+
t.string :name
|
227
|
+
end
|
228
|
+
|
229
|
+
create_table :paragraphs, :force => true do |t|
|
230
|
+
t.integer :section_id
|
231
|
+
t.string :name
|
232
|
+
end
|
233
|
+
|
234
|
+
create_table :quotations, :force => true do |t|
|
235
|
+
t.integer :chapter_id
|
236
|
+
end
|
237
|
+
|
238
|
+
create_table :citations, :force => true do |t|
|
239
|
+
t.integer :quotation_id
|
124
240
|
end
|
125
241
|
end
|
126
242
|
|
127
243
|
def self.down
|
244
|
+
drop_table :citations
|
245
|
+
drop_table :quotations
|
128
246
|
drop_table :animals
|
247
|
+
drop_table :skippers
|
248
|
+
drop_table :not_on_updates
|
129
249
|
drop_table :posts
|
130
250
|
drop_table :songs
|
251
|
+
drop_table :editors
|
252
|
+
drop_table :editorships
|
131
253
|
drop_table :people
|
132
254
|
drop_table :authorships
|
133
255
|
drop_table :books
|
134
256
|
drop_table :articles
|
257
|
+
drop_table :whatchamajiggers
|
135
258
|
drop_table :fluxors
|
136
259
|
drop_table :wotsits
|
137
260
|
remove_index :post_versions, :column => [:item_type, :item_id]
|
138
261
|
drop_table :post_versions
|
139
262
|
remove_index :versions, :column => [:item_type, :item_id]
|
140
263
|
drop_table :versions
|
264
|
+
if JsonVersion.table_exists?
|
265
|
+
remove_index :json_versions, :column => [:item_type, :item_id]
|
266
|
+
drop_table :json_versions
|
267
|
+
end
|
141
268
|
drop_table :widgets
|
142
269
|
drop_table :documents
|
143
270
|
drop_table :legacy_widgets
|
271
|
+
drop_table :things
|
144
272
|
drop_table :translations
|
145
273
|
drop_table :gadgets
|
274
|
+
drop_table :customers
|
275
|
+
drop_table :orders
|
276
|
+
drop_table :line_items
|
277
|
+
drop_table :fruits
|
278
|
+
drop_table :boolits
|
279
|
+
drop_table :chapters
|
280
|
+
drop_table :sections
|
281
|
+
drop_table :paragraphs
|
282
|
+
remove_index :version_associations, :column => [:version_id]
|
283
|
+
remove_index :version_associations, :name => 'index_version_associations_on_foreign_key'
|
284
|
+
drop_table :version_associations
|
285
|
+
drop_table :callback_modifiers
|
146
286
|
end
|
147
287
|
end
|