Просмотр исходного кода

Created initial object link model

- add link(s)
- remove links
- get links

todo:
- exception handling
- checks
- unit tests
Johannes Nickel 12 лет назад
Родитель
Сommit
7be711dc26

+ 4 - 1
.gitignore

@@ -17,4 +17,7 @@
 # Ignore .project files
 /.project
 
-db/schema.rb
+db/schema.rb
+Gemfile.lock
+
+.DS_Store

+ 1 - 1
app/controllers/getting_started_controller.rb

@@ -5,7 +5,7 @@ class GettingStartedController < ApplicationController
     # check if first user already exists
     master_user = 0
     count = User.all.count()
-    if count >= 2
+    if count == 1
       master_user = 1
     end
 

+ 110 - 4
app/models/link.rb

@@ -1,7 +1,113 @@
 class Link < ActiveRecord::Base
-  class Object < ActiveRecord::Base
-  end
 
-  class Type < ActiveRecord::Base
-  end
+ #before_create :check_object
+ #after_create            :after_create, :cache_delete
+ #after_update            :cache_delete
+ #after_destroy           :cache_delete
+
+=begin
+ Link.add(:link_types_id=>12,
+        :link_object_source => 'Ticket',
+        :link_object_source_value => 1,
+        :link_object_target=> 'Ticket',
+        :link_object_target_value=> 1)
+
+ Link.add(:link_types_id=>12,
+        :link_object_source_id => '1',
+        :link_object_source_value => 1,
+        :link_object_target_id=> '1',
+        :link_object_target_value=> 1)
+ 
+ Link.get_links_for_source_object(:link_object => 'Ticket',
+                                :link_object_value => 1)
+ 
+ Link.get_links_for_target_object(:link_object => 'Ticket',
+                                :link_object_value => 1)
+
+ Link.delete_link_by_source(:source_value=>1)
+ 
+ Link.delete_link_by_target(:target_value=>1)
+ 
+ Link.delete_all_links_by_value(:object_value=>1)
+=end
+ 
+ has_many :link_types
+ 
+	def self.get_links_for_source_object(data)
+		linkobject_id = self.get_linktype_by_name(:name=>data[:link_object])
+		if linkobject_id
+			where(:link_object_source_id=>linkobject_id,:link_object_source_value=>data[:link_object_value])
+		end	
+	end
+
+	def self.get_links_for_target_object(data)
+		linkobject_id = self.get_linktype_by_name(:name=>data[:link_object])
+        if linkobject_id
+		  where(:link_object_target_id=>linkobject_id,:link_object_target_value=>data[:link_object_value])
+	    end
+    end
+
+    def self.add(data)
+        if data.has_key?(:link_object_source)
+            # it exists we have to delete it
+            linkobject_id = self.get_linktype_by_name(:name=>data[:link_object_source])
+            data[:link_object_source_id] = linkobject_id
+            data.delete(:link_object_source)
+        end
+                  
+        if data.has_key?(:link_object_target)
+            # it exists we have to delete it
+            linkobject_id = self.get_linktype_by_name(:name=>data[:link_object_target])
+            data[:link_object_target_id] = linkobject_id
+            data.delete(:link_object_target)            
+        end
+
+        Link.create(data)
+    end
+
+    def self.delete_link_by_source(data)
+       Link.where(:link_object_source_value=>data[:source_value]).destroy_all
+    end
+
+    def self.delete_link_by_target(data)
+        Link.where(:link_object_target_value => data[:target_value]).destroy_all
+    end
+
+    def self.delete_all_links_by_value(data)
+        Link.where(["link_object_source_value = ? or link_object_target_value = ?", data[:object_value],data[:object_value]]).destroy_all
+    end
+
+
+  private
+    def self.get_linktype_by_name(data)
+            
+            linkid = Link::Object.where(:name=>data[:name]).first
+            if linkid
+                return linkid.id
+            else
+                return nil
+            end
+        return linkid
+    end    
+
+  	#checks for a valid link type
+    def check_valid_link_type
+    	Rails.logger.info "Logger Test"
+    	puts "pre check link type"
+    end
+
+    def get_linkobject_by_key
+        puts "check for exisiting link"
+    end
+
+ 	#checks for an exisiting ling
+    def check_existing_link
+    	puts "check for exisiting link"
+    end
+end
+
+class Link::Type < ActiveRecord::Base
 end
+
+class Link::Object < ActiveRecord::Base
+end

+ 6 - 6
db/migrate/20120101000010_create_ticket.rb

@@ -186,14 +186,14 @@ class CreateTicket < ActiveRecord::Migration
     add_index :link_objects, [:name],   :unique => true
 
     create_table :links do |t|
-      t.references :link_types,                           :null => false
-      t.column :source_object_id, :integer,               :null => false
-      t.column :source_key,       :string,  :limit => 50, :null => false
-      t.column :target_object_id, :integer,               :null => false
-      t.column :target_key,       :string,  :limit => 50, :null => false
+      t.references :link_types,               :null => false
+      t.column :link_object_source_id,        :integer,               :null => false
+      t.column :link_object_source_value,     :integer,               :null => false
+      t.column :link_object_target_id,        :integer,               :null => false
+      t.column :link_object_target_value,     :integer,               :null => false
       t.timestamps
     end
-    add_index :links, [:source_object_id, :source_key, :target_object_id, :target_key, :link_types_id], :unique => true, :name => 'links_uniq_total'
+    add_index :links, [:link_object_source_id, :link_object_source_value, :link_object_target_id, :link_object_target_value, :link_types_id], :unique => true, :name => 'links_uniq_total'
   end
 
   def self.down