| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 | module Chouette
  class Line < Chouette::ActiveRecord
    has_paper_trail
    include LineRestrictions
    include LineReferentialSupport
    include ObjectidSupport
    include StifTransportModeEnumerations
    include StifTransportSubmodeEnumerations
    extend ActiveModel::Naming
    # FIXME http://jira.codehaus.org/browse/JRUBY-6358
    self.primary_key = "id"
    belongs_to :company
    belongs_to :network
    belongs_to :line_referential
    has_array_of :secondary_companies, class_name: 'Chouette::Company'
    has_many :routes, :dependent => :destroy
    has_many :journey_patterns, :through => :routes
    has_many :vehicle_journeys, :through => :journey_patterns
    has_many :routing_constraint_zones, through: :routes
    has_and_belongs_to_many :group_of_lines, :class_name => 'Chouette::GroupOfLine', :order => 'group_of_lines.name'
    has_many :footnotes, :inverse_of => :line, :validate => :true, :dependent => :destroy
    accepts_nested_attributes_for :footnotes, :reject_if => :all_blank, :allow_destroy => true
    attr_reader :group_of_line_tokens
    # validates_presence_of :network
    # validates_presence_of :company
    validates_format_of :registration_number, :with => %r{\A[\d\w_\-]+\Z}, :allow_nil => true, :allow_blank => true
    validates_format_of :stable_id, :with => %r{\A[\d\w_\-]+\Z}, :allow_nil => true, :allow_blank => true
    validates_format_of :url, :with => %r{\Ahttps?:\/\/([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?\Z}, :allow_nil => true, :allow_blank => true
    validates_format_of :color, :with => %r{\A[0-9a-fA-F]{6}\Z}, :allow_nil => true, :allow_blank => true
    validates_format_of :text_color, :with => %r{\A[0-9a-fA-F]{6}\Z}, :allow_nil => true, :allow_blank => true
    validates_presence_of :name
    scope :by_text, ->(text) { where('lower(name) LIKE :t or lower(published_name) LIKE :t or lower(objectid) LIKE :t or lower(comment) LIKE :t or lower(number) LIKE :t',
      t: "%#{text.downcase}%") }
    def self.nullable_attributes
      [:published_name, :number, :comment, :url, :color, :text_color, :stable_id]
    end
    def geometry_presenter
      Chouette::Geometry::LinePresenter.new self
    end
    def commercial_stop_areas
      Chouette::StopArea.joins(:children => [:stop_points => [:route => :line] ]).where(:lines => {:id => self.id}).uniq
    end
    def stop_areas
      Chouette::StopArea.joins(:stop_points => [:route => :line]).where(:lines => {:id => self.id})
    end
    def stop_areas_last_parents
      Chouette::StopArea.joins(:stop_points => [:route => :line]).where(:lines => {:id => self.id}).collect(&:root).flatten.uniq
    end
    def group_of_line_tokens=(ids)
      self.group_of_line_ids = ids.split(",")
    end
    def vehicle_journey_frequencies?
      self.vehicle_journeys.unscoped.where(journey_category: 1).count > 0
    end
    def display_name
      [self.get_objectid.short_id, number, name, company.try(:name)].compact.join(' - ')
    end
    def companies
      line_referential.companies.where(id: ([company_id] + Array(secondary_company_ids)).compact)
    end
  end
end
 |