From 8958fe8d632e2f95226c4990bab11111ff9b033f Mon Sep 17 00:00:00 2001
From: Israel Barreto Sant'Anna <ibsa14@inf.ufpr.br>
Date: Wed, 30 Sep 2015 09:22:12 -0300
Subject: [PATCH] down methods implemented on migration classes and drop task
 created

Signed-off-by: Israel Barreto Sant'Anna <ibsa14@inf.ufpr.br>
---
 config/orientdb.yml                                |  2 +-
 lib/orient_db/migration.rb                         |  8 ++++++++
 lib/orient_db/migrations.rb                        | 11 +++++++----
 lib/orient_db/migrations/create_attribute.rb       |  2 +-
 lib/orient_db/migrations/create_belongs_to.rb      |  2 +-
 lib/orient_db/migrations/create_collection.rb      |  2 +-
 lib/orient_db/migrations/create_comment.rb         |  2 +-
 lib/orient_db/migrations/create_commented_by.rb    |  2 +-
 lib/orient_db/migrations/create_comments.rb        |  2 +-
 lib/orient_db/migrations/create_has_attr.rb        |  2 +-
 lib/orient_db/migrations/create_institution.rb     |  2 +-
 lib/orient_db/migrations/create_is_about.rb        |  2 +-
 lib/orient_db/migrations/create_learning_object.rb |  2 +-
 lib/orient_db/migrations/create_like.rb            |  2 +-
 lib/orient_db/migrations/create_main_page.rb       |  2 +-
 lib/orient_db/migrations/create_object.rb          |  2 +-
 lib/orient_db/migrations/create_published_by.rb    |  2 +-
 lib/orient_db/migrations/create_subject.rb         |  2 +-
 lib/orient_db/migrations/create_user.rb            |  2 +-
 lib/tasks/orientdb.rake                            |  9 ++++++++-
 20 files changed, 40 insertions(+), 22 deletions(-)

diff --git a/config/orientdb.yml b/config/orientdb.yml
index 07945002..7c25a5c8 100644
--- a/config/orientdb.yml
+++ b/config/orientdb.yml
@@ -1,6 +1,6 @@
 development: &development
   host: localhost
-  database: PortalMEC
+  database: Teste2
   username: admin
   password: admin
   port: 2480
diff --git a/lib/orient_db/migration.rb b/lib/orient_db/migration.rb
index 12d0f8a5..0d282d31 100644
--- a/lib/orient_db/migration.rb
+++ b/lib/orient_db/migration.rb
@@ -29,15 +29,23 @@ module OrientDb
       end
     end
 
+    def drop_class(klass)
+      if @client.class_exists? klass
+        @client.drop_class(klass, :mode => :strict)
+      end
+    end
+
     def add_index(klass, property, type, engine=nil, metadata=nil)
       engine = engine.nil? ? "" : " ENGINE #{engine}"
       metadata = metadata.nil? ? "" : " METADATA #{metadata.to_s}"
       begin
         @client.command "CREATE INDEX #{klass}.#{property} ON #{klass} (#{property}) #{type}#{engine}#{metadata}"
       rescue Orientdb4r::ServerError => e
+        # If the index already exists OrientDB will give an error containing this message
         unless e.message.include? "Index with name #{klass.downcase}.#{property.downcase}"
           puts "Error at index creation"
           p e.message
+          p.backtrace
         end
       end
     end
diff --git a/lib/orient_db/migrations.rb b/lib/orient_db/migrations.rb
index 056a5779..debed17e 100644
--- a/lib/orient_db/migrations.rb
+++ b/lib/orient_db/migrations.rb
@@ -5,16 +5,15 @@ class OrientDb::Migrations
 
   def initialize(client)
     @migrations = []
-    # Vertices inheriting from V
+    # Vertices
     @migrations << CreateUser.new(client)
     @migrations << CreateAttribute.new(client)
     @migrations << CreateComment.new(client)
-
-    # Vertices inheriting from Object
     @migrations << CreateObject.new(client)
+    # Vertices inheriting from Object
     @migrations << CreateInstitution.new(client)
-    # Vertices inheriting from LearningObject
     @migrations << CreateLearningObject.new(client)
+    # Vertices inheriting from LearningObject
     @migrations << CreateCollection.new(client)
     @migrations << CreateSubject.new(client)
     @migrations << CreateMainPage.new(client)
@@ -34,4 +33,8 @@ class OrientDb::Migrations
   def run
     @migrations.each { |m| m.up }
   end
+
+  def drop
+    @migrations.reverse_each { |m| m.down }
+  end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_attribute.rb b/lib/orient_db/migrations/create_attribute.rb
index 0e9b333f..db0de647 100644
--- a/lib/orient_db/migrations/create_attribute.rb
+++ b/lib/orient_db/migrations/create_attribute.rb
@@ -11,6 +11,6 @@ class OrientDb::Migrations::CreateAttribute < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Attribute'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_belongs_to.rb b/lib/orient_db/migrations/create_belongs_to.rb
index 4552941b..6ceff5b0 100644
--- a/lib/orient_db/migrations/create_belongs_to.rb
+++ b/lib/orient_db/migrations/create_belongs_to.rb
@@ -5,6 +5,6 @@ class OrientDb::Migrations::CreateBelongsTo < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'BelongsTo'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_collection.rb b/lib/orient_db/migrations/create_collection.rb
index cc9e6fc2..20347685 100644
--- a/lib/orient_db/migrations/create_collection.rb
+++ b/lib/orient_db/migrations/create_collection.rb
@@ -8,6 +8,6 @@ class OrientDb::Migrations::CreateCollection < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Collection'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_comment.rb b/lib/orient_db/migrations/create_comment.rb
index 8fa4307b..a53be2dd 100644
--- a/lib/orient_db/migrations/create_comment.rb
+++ b/lib/orient_db/migrations/create_comment.rb
@@ -9,6 +9,6 @@ class OrientDb::Migrations::CreateComment < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Comment'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_commented_by.rb b/lib/orient_db/migrations/create_commented_by.rb
index 9d2c1db1..c3551562 100644
--- a/lib/orient_db/migrations/create_commented_by.rb
+++ b/lib/orient_db/migrations/create_commented_by.rb
@@ -5,6 +5,6 @@ class OrientDb::Migrations::CreateCommentedBy < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'CommentedBy'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_comments.rb b/lib/orient_db/migrations/create_comments.rb
index 03235483..adc6b6d5 100644
--- a/lib/orient_db/migrations/create_comments.rb
+++ b/lib/orient_db/migrations/create_comments.rb
@@ -5,6 +5,6 @@ class OrientDb::Migrations::CreateComments < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Comments'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_has_attr.rb b/lib/orient_db/migrations/create_has_attr.rb
index 40a4ce4b..7a7613c5 100644
--- a/lib/orient_db/migrations/create_has_attr.rb
+++ b/lib/orient_db/migrations/create_has_attr.rb
@@ -5,6 +5,6 @@ class OrientDb::Migrations::CreateHasAttr < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'HasAttr'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_institution.rb b/lib/orient_db/migrations/create_institution.rb
index 1f8b50cf..2c23aa48 100644
--- a/lib/orient_db/migrations/create_institution.rb
+++ b/lib/orient_db/migrations/create_institution.rb
@@ -11,6 +11,6 @@ class OrientDb::Migrations::CreateInstitution < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Institution'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_is_about.rb b/lib/orient_db/migrations/create_is_about.rb
index 3c3b0254..242fc251 100644
--- a/lib/orient_db/migrations/create_is_about.rb
+++ b/lib/orient_db/migrations/create_is_about.rb
@@ -5,6 +5,6 @@ class OrientDb::Migrations::CreateIsAbout < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'IsAbout'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_learning_object.rb b/lib/orient_db/migrations/create_learning_object.rb
index f8dea7b1..194fedb4 100644
--- a/lib/orient_db/migrations/create_learning_object.rb
+++ b/lib/orient_db/migrations/create_learning_object.rb
@@ -12,6 +12,6 @@ class OrientDb::Migrations::CreateLearningObject < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'LearningObject'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_like.rb b/lib/orient_db/migrations/create_like.rb
index e66f0625..5bbb2bff 100644
--- a/lib/orient_db/migrations/create_like.rb
+++ b/lib/orient_db/migrations/create_like.rb
@@ -5,6 +5,6 @@ class OrientDb::Migrations::CreateLike < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Like'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_main_page.rb b/lib/orient_db/migrations/create_main_page.rb
index 6756abb2..bdcbc099 100644
--- a/lib/orient_db/migrations/create_main_page.rb
+++ b/lib/orient_db/migrations/create_main_page.rb
@@ -7,6 +7,6 @@ class OrientDb::Migrations::CreateMainPage < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'MainPage'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_object.rb b/lib/orient_db/migrations/create_object.rb
index 27f49c3c..d25a6d96 100644
--- a/lib/orient_db/migrations/create_object.rb
+++ b/lib/orient_db/migrations/create_object.rb
@@ -9,6 +9,6 @@ class OrientDb::Migrations::CreateObject < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Object'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_published_by.rb b/lib/orient_db/migrations/create_published_by.rb
index 99973157..07df1d07 100644
--- a/lib/orient_db/migrations/create_published_by.rb
+++ b/lib/orient_db/migrations/create_published_by.rb
@@ -5,6 +5,6 @@ class OrientDb::Migrations::CreatePublishedBy < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'PublishedBy'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_subject.rb b/lib/orient_db/migrations/create_subject.rb
index 4e680a59..cee8e817 100644
--- a/lib/orient_db/migrations/create_subject.rb
+++ b/lib/orient_db/migrations/create_subject.rb
@@ -7,6 +7,6 @@ class OrientDb::Migrations::CreateSubject < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'Subject'
   end
 end
\ No newline at end of file
diff --git a/lib/orient_db/migrations/create_user.rb b/lib/orient_db/migrations/create_user.rb
index 248027eb..887c6be7 100644
--- a/lib/orient_db/migrations/create_user.rb
+++ b/lib/orient_db/migrations/create_user.rb
@@ -8,6 +8,6 @@ class OrientDb::Migrations::CreateUser < OrientDb::Migration
   end
 
   def down
-    # TODO
+    drop_class 'User'
   end
 end
\ No newline at end of file
diff --git a/lib/tasks/orientdb.rake b/lib/tasks/orientdb.rake
index 55a0dd8c..a31919ef 100644
--- a/lib/tasks/orientdb.rake
+++ b/lib/tasks/orientdb.rake
@@ -2,12 +2,19 @@ namespace :orientdb do
   desc "Orient DB integration tasks"
 
   task migrate: :environment do
-    desc "Migrate orient db schema"
+    desc "Migrate OrientDB schema"
 
     migrations = OrientDb::Migrations.new(OrientDb::Client.instance)
     migrations.run
   end
 
+  task drop: :environment do
+    desc "Drop OrientDB schema"
+
+    migrations = OrientDb::Migrations.new(OrientDb::Client.instance)
+    migrations.drop
+  end
+
   task create_learning_object_relations: :environment do
     desc "Create LearningObject relations based on its metadata"
 
-- 
GitLab