diff options
| author | Alban Peignier | 2012-06-21 16:43:42 +0200 | 
|---|---|---|
| committer | Alban Peignier | 2012-06-21 16:43:42 +0200 | 
| commit | 6a5b676c7cfa3771cca5b4827d0e8acf00968e58 (patch) | |
| tree | eebc62d0066ad32d67d46368cfea422d8708d132 /app/models/export.rb | |
| parent | 0a3bdcfe5cafdb94c9aaf6a9535898c0b9cda540 (diff) | |
| download | chouette-core-6a5b676c7cfa3771cca5b4827d0e8acf00968e58.tar.bz2 | |
Add Export#references
Diffstat (limited to 'app/models/export.rb')
| -rw-r--r-- | app/models/export.rb | 64 | 
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  | 
