aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/export.rb
diff options
context:
space:
mode:
authorAlban Peignier2012-06-21 16:43:42 +0200
committerAlban Peignier2012-06-21 16:43:42 +0200
commit6a5b676c7cfa3771cca5b4827d0e8acf00968e58 (patch)
treeeebc62d0066ad32d67d46368cfea422d8708d132 /app/models/export.rb
parent0a3bdcfe5cafdb94c9aaf6a9535898c0b9cda540 (diff)
downloadchouette-core-6a5b676c7cfa3771cca5b4827d0e8acf00968e58.tar.bz2
Add Export#references
Diffstat (limited to 'app/models/export.rb')
-rw-r--r--app/models/export.rb64
1 files changed, 63 insertions, 1 deletions
diff --git a/app/models/export.rb b/app/models/export.rb
index 4fd6ff2f1..401541a13 100644
--- a/app/models/export.rb
+++ b/app/models/export.rb
@@ -46,7 +46,18 @@ class Export < ActiveRecord::Base
end
def export_options
- { :export_id => self.id }
+ { :export_id => self.id, :o => export_object_type }.tap do |options|
+ options[:id] = reference_ids.join(',') if reference_ids.present?
+ end
+ end
+
+ def export_object_type
+ case references_type
+ when "Chouette::Network"
+ "ptnetwork"
+ else
+ references_relation ? references_relation.singularize : "line"
+ end
end
before_validation :define_default_attributes, :on => :create
@@ -84,4 +95,55 @@ class Export < ActiveRecord::Base
end
end
+ @@references_types = [ Chouette::Line, Chouette::Network, Chouette::Company ]
+ cattr_reader :references_types
+
+ validates_inclusion_of :references_type, :in => references_types.map(&:to_s), :all_blank => true, :allow_nil => true
+
+ def references
+ if references_relation.present? and reference_ids.present?
+ referential.send(references_relation).find(reference_ids)
+ else
+ []
+ end
+ end
+
+ def references=(references)
+ unless references.blank?
+ self.references_type = references.first.class.name
+ self.reference_ids = references.map(&:id)
+ else
+ self.references_type = nil
+ self.reference_ids = []
+ end
+ end
+
+ def references_relation
+ if references_type.present?
+ relation = self.class.references_relation(references_type)
+ relation if referential.respond_to?(relation)
+ end
+ end
+
+ def self.references_relation(type)
+ type.to_s.demodulize.underscore.pluralize
+ end
+
+ def reference_ids
+ if raw_reference_ids
+ raw_reference_ids.split(',').map(&:to_i)
+ else
+ []
+ end
+ end
+
+ def reference_ids=(records)
+ records = Array(records)
+ write_attribute :reference_ids, (records.present? ? records.join(',') : nil)
+ end
+
+ def raw_reference_ids
+ read_attribute :reference_ids
+ end
+
end