diff options
author | Jamie Winsor <jamie@enmasse.com> | 2011-08-01 11:27:28 -0700 |
---|---|---|
committer | Jamie Winsor <jamie@enmasse.com> | 2011-08-03 18:01:32 -0700 |
commit | 21b19db5a30fcb6db83f4ac9302cc94c6320a0db (patch) | |
tree | 62a3b89d0f4c9b239bfd76ec77cfc3269ac041ef /spec/dummy/db/migrate/20110802081571_create_seo_meta.rb | |
parent | 3454a9c3007a4bfd10ccd0ff39dc594ebb2a0184 (diff) | |
download | refinerycms-blog-21b19db5a30fcb6db83f4ac9302cc94c6320a0db.tar.gz refinerycms-blog-21b19db5a30fcb6db83f4ac9302cc94c6320a0db.tar.bz2 refinerycms-blog-21b19db5a30fcb6db83f4ac9302cc94c6320a0db.zip |
refactor engine testing scenario
Engine is now tested standalone by leveraging a dummy rails app
Enable Guard for speedy testing
Move factories to the more standard location `spec/factories/*`
Update README with a Testing section
Rename migrations to contain datetimestamps for their version to fix migration order issues when migrating the dummy application
Diffstat (limited to 'spec/dummy/db/migrate/20110802081571_create_seo_meta.rb')
-rw-r--r-- | spec/dummy/db/migrate/20110802081571_create_seo_meta.rb | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/spec/dummy/db/migrate/20110802081571_create_seo_meta.rb b/spec/dummy/db/migrate/20110802081571_create_seo_meta.rb new file mode 100644 index 0000000..abc2178 --- /dev/null +++ b/spec/dummy/db/migrate/20110802081571_create_seo_meta.rb @@ -0,0 +1,86 @@ +class CreateSeoMeta < ActiveRecord::Migration + + def self.up + create_table :seo_meta do |t| + t.integer :seo_meta_id + t.string :seo_meta_type + + t.string :browser_title + t.string :meta_keywords + t.text :meta_description + + t.timestamps + end + + add_index :seo_meta, :id + add_index :seo_meta, [:seo_meta_id, :seo_meta_type] + + # Grab the attributes of the records that currently exist + existing_translations = ::Refinery::Page.translation_class.all.map(&:attributes) + + # Remove columns + ::SeoMeta.attributes.keys.each do |field| + if ::Refinery::Page.translation_class.column_names.map(&:to_sym).include?(field) + remove_column ::Refinery::Page.translation_class.table_name, field + end + end + + # Reset column information because otherwise the old columns will still exist. + ::Refinery::Page.translation_class.reset_column_information + + # Re-attach seo_meta + ::Refinery::Page.translation_class.send :is_seo_meta + + # Migrate data + existing_translations.each do |translation| + ::Refinery::Page.translation_class.find(translation['id']).update_attributes( + ::SeoMeta.attributes.keys.inject({}) {|attributes, name| + attributes.merge(name => translation[name.to_s]) + } + ) + end + + # Reset column information again because otherwise the old columns will still exist. + ::Refinery::Page.reset_column_information + end + + def self.down + # Grab the attributes of the records that currently exist + existing_translations = ::Refinery::Page.translation_class.all.map(&:attributes) + + # Add columns back to your model + ::SeoMeta.attributes.each do |field, field_type| + unless ::Refinery::Page.translation_class.column_names.map(&:to_sym).include?(field) + add_column ::Refinery::Page.translation_class.table_name, field, field_type + end + end + + # Reset column information because otherwise the new columns won't exist yet. + ::Refinery::Page.translation_class.reset_column_information + + # Migrate data + existing_translations.each do |translation| + ::Refinery::Page.translation_class.update_all( + ::SeoMeta.attributes.keys.inject({}) {|attributes, name| + attributes.merge(name => translation[name.to_s]) + }, :id => translation['id'] + ) + end + + ::SeoMeta.attributes.keys.each do |k| + ::Refinery::Page.translation_class.module_eval %{ + def #{k} + end + + def #{k}=(*args) + end + } + end + + # Reset column information again because otherwise the old columns will still exist. + ::Refinery::Page.reset_column_information + + drop_table :seo_meta + end + +end |