aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXinhui2016-05-11 15:06:11 +0200
committerXinhui2016-05-11 15:06:11 +0200
commit781142afdb90bb0ca62783435f582725794f4f57 (patch)
tree83d37e168f4cd02422088c0c15d39160c1e6a8bd
parentf0b822710320a3dde22782334b436b87f5d47054 (diff)
downloadchouette-core-781142afdb90bb0ca62783435f582725794f4f57.tar.bz2
Disable Line foreign key
Refs #825
-rw-r--r--app/models/chouette/group_of_line.rb8
-rw-r--r--db/migrate/20160511094753_disable_line_foreign_keys.rb21
-rw-r--r--db/schema.rb64
-rw-r--r--spec/models/chouette/active_record_spec.rb16
-rw-r--r--spec/models/chouette/group_of_line_spec.rb2
5 files changed, 72 insertions, 39 deletions
diff --git a/app/models/chouette/group_of_line.rb b/app/models/chouette/group_of_line.rb
index f00db3164..9443a34e5 100644
--- a/app/models/chouette/group_of_line.rb
+++ b/app/models/chouette/group_of_line.rb
@@ -2,17 +2,17 @@ class Chouette::GroupOfLine < Chouette::TridentActiveRecord
include GroupOfLineRestrictions
# FIXME http://jira.codehaus.org/browse/JRUBY-6358
self.primary_key = "id"
-
+
has_and_belongs_to_many :lines, :class_name => 'Chouette::Line', :order => 'lines.name'
validates_presence_of :name
attr_reader :line_tokens
-
+
def self.nullable_attributes
[:comment]
end
-
+
def commercial_stop_areas
Chouette::StopArea.joins(:children => [:stop_points => [:route => [:line => :group_of_lines] ] ]).where(:group_of_lines => {:id => self.id}).uniq
end
@@ -20,7 +20,7 @@ class Chouette::GroupOfLine < Chouette::TridentActiveRecord
def stop_areas
Chouette::StopArea.joins(:stop_points => [:route => [:line => :group_of_lines] ]).where(:group_of_lines => {:id => self.id})
end
-
+
def line_tokens=(ids)
self.line_ids = ids.split(",")
end
diff --git a/db/migrate/20160511094753_disable_line_foreign_keys.rb b/db/migrate/20160511094753_disable_line_foreign_keys.rb
new file mode 100644
index 000000000..ffc665344
--- /dev/null
+++ b/db/migrate/20160511094753_disable_line_foreign_keys.rb
@@ -0,0 +1,21 @@
+class DisableLineForeignKeys < ActiveRecord::Migration
+ def change
+ disable_foreign_key :lines, :line_company_fkey
+ disable_foreign_key :lines, :line_ptnetwork_fkey
+ disable_foreign_key :routing_constraints_lines, :routingconstraint_line_fkey
+ disable_foreign_key :routes, :route_line_fkey
+ disable_foreign_key :group_of_lines_lines, :groupofline_line_fkey
+ end
+
+ def disable_foreign_key(table, name)
+ if foreign_key?(table, name)
+ remove_foreign_key table, name: name
+ end
+ end
+
+ def foreign_key?(table, name)
+ @connection.foreign_keys(table).any? do |foreign_key|
+ foreign_key.options[:name] == name.to_s
+ end
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 61f64707f..dcd0e162f 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20160511082825) do
+ActiveRecord::Schema.define(version: 20160511094753) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -209,18 +209,6 @@ ActiveRecord::Schema.define(version: 20160511082825) do
t.integer "line_id", limit: 8
end
- create_table "jobs", force: true do |t|
- t.string "action"
- t.datetime "created"
- t.string "filename"
- t.text "parameters"
- t.string "referential"
- t.datetime "started"
- t.string "status"
- t.string "type"
- t.datetime "updated"
- end
-
create_table "journey_frequencies", force: true do |t|
t.integer "vehicle_journey_id", limit: 8
t.time "scheduled_headway_interval", null: false
@@ -249,7 +237,7 @@ ActiveRecord::Schema.define(version: 20160511082825) do
create_table "journey_patterns", force: true do |t|
t.integer "route_id", limit: 8
- t.string "objectid", null: false
+ t.string "objectid", null: false
t.integer "object_version"
t.datetime "creation_time"
t.string "creator_id"
@@ -259,12 +247,10 @@ ActiveRecord::Schema.define(version: 20160511082825) do
t.string "published_name"
t.integer "departure_stop_point_id", limit: 8
t.integer "arrival_stop_point_id", limit: 8
- t.integer "route_section_ids", default: [], array: true
- t.integer "section_status", default: 0, null: false
+ t.integer "section_status", default: 0, null: false
end
add_index "journey_patterns", ["objectid"], :name => "journey_patterns_objectid_key", :unique => true
- add_index "journey_patterns", ["route_section_ids"], :name => "index_journey_patterns_on_route_section_ids"
create_table "journey_patterns_stop_points", id: false, force: true do |t|
t.integer "journey_pattern_id", limit: 8
@@ -310,12 +296,6 @@ ActiveRecord::Schema.define(version: 20160511082825) do
add_index "lines", ["objectid"], :name => "lines_objectid_key", :unique => true
add_index "lines", ["registration_number"], :name => "lines_registration_number_key"
- create_table "links", id: false, force: true do |t|
- t.integer "job_id", limit: 8, null: false
- t.string "rel"
- t.string "type"
- end
-
create_table "networks", force: true do |t|
t.string "objectid", null: false
t.integer "object_version"
@@ -373,8 +353,8 @@ ActiveRecord::Schema.define(version: 20160511082825) do
end
create_table "route_sections", force: true do |t|
- t.integer "departure_id"
- t.integer "arrival_id"
+ t.integer "departure_id", limit: 8
+ t.integer "arrival_id", limit: 8
t.string "objectid", null: false
t.integer "object_version"
t.datetime "creation_time"
@@ -627,12 +607,44 @@ ActiveRecord::Schema.define(version: 20160511082825) do
add_index "vehicle_journeys", ["route_id"], :name => "index_vehicle_journeys_on_route_id"
Foreigner.load
+ add_foreign_key "access_links", "access_points", name: "aclk_acpt_fkey", dependent: :delete
+
+ add_foreign_key "group_of_lines_lines", "group_of_lines", name: "groupofline_group_fkey", dependent: :delete
+
add_foreign_key "journey_frequencies", "timebands", name: "journey_frequencies_timeband_id_fk", dependent: :nullify
add_foreign_key "journey_frequencies", "vehicle_journeys", name: "journey_frequencies_vehicle_journey_id_fk", dependent: :nullify
add_foreign_key "journey_pattern_sections", "journey_patterns", name: "journey_pattern_sections_journey_pattern_id_fk", dependent: :delete
add_foreign_key "journey_pattern_sections", "route_sections", name: "journey_pattern_sections_route_section_id_fk", dependent: :delete
- add_foreign_key "links", "jobs", name: "fk_n5ypxycc1stckgkm6ust2l6on"
+ add_foreign_key "journey_patterns", "routes", name: "jp_route_fkey", dependent: :delete
+ add_foreign_key "journey_patterns", "stop_points", name: "arrival_point_fkey", column: "arrival_stop_point_id", dependent: :nullify
+ add_foreign_key "journey_patterns", "stop_points", name: "departure_point_fkey", column: "departure_stop_point_id", dependent: :nullify
+
+ add_foreign_key "journey_patterns_stop_points", "journey_patterns", name: "jpsp_jp_fkey", dependent: :delete
+ add_foreign_key "journey_patterns_stop_points", "stop_points", name: "jpsp_stoppoint_fkey", dependent: :delete
+
+ add_foreign_key "routes", "routes", name: "route_opposite_route_fkey", column: "opposite_route_id", dependent: :nullify
+
+ add_foreign_key "stop_areas", "stop_areas", name: "area_parent_fkey", column: "parent_id", dependent: :nullify
+
+ add_foreign_key "stop_areas_stop_areas", "stop_areas", name: "stoparea_child_fkey", column: "child_id", dependent: :delete
+ add_foreign_key "stop_areas_stop_areas", "stop_areas", name: "stoparea_parent_fkey", column: "parent_id", dependent: :delete
+
+ add_foreign_key "stop_points", "routes", name: "stoppoint_route_fkey", dependent: :delete
+
+ add_foreign_key "time_table_dates", "time_tables", name: "tm_date_fkey", dependent: :delete
+
+ add_foreign_key "time_table_periods", "time_tables", name: "tm_period_fkey", dependent: :delete
+
+ add_foreign_key "time_tables_vehicle_journeys", "time_tables", name: "vjtm_tm_fkey", dependent: :delete
+ add_foreign_key "time_tables_vehicle_journeys", "vehicle_journeys", name: "vjtm_vj_fkey", dependent: :delete
+
+ add_foreign_key "vehicle_journey_at_stops", "stop_points", name: "vjas_sp_fkey", dependent: :delete
+ add_foreign_key "vehicle_journey_at_stops", "vehicle_journeys", name: "vjas_vj_fkey", dependent: :delete
+
+ add_foreign_key "vehicle_journeys", "companies", name: "vj_company_fkey", dependent: :nullify
+ add_foreign_key "vehicle_journeys", "journey_patterns", name: "vj_jp_fkey", dependent: :delete
+ add_foreign_key "vehicle_journeys", "routes", name: "vj_route_fkey", dependent: :delete
end
diff --git a/spec/models/chouette/active_record_spec.rb b/spec/models/chouette/active_record_spec.rb
index 087e41576..110807e51 100644
--- a/spec/models/chouette/active_record_spec.rb
+++ b/spec/models/chouette/active_record_spec.rb
@@ -7,9 +7,9 @@ describe Chouette::ActiveRecord, :type => :model do
describe "table_name" do
it "should return line for Chouette::Line" do
- expect(Chouette::Line.table_name).to eq("lines")
+ expect(Chouette::Line.table_name).to eq("public.lines")
end
-
+
it "should return ptnetwork for Chouette::Network" do
expect(Chouette::Network.table_name).to eq("networks")
end
@@ -25,7 +25,7 @@ describe Chouette::ActiveRecord, :type => :model do
end
describe "method_missing" do
-
+
it "should support method with additionnal underscores" do
stop_area = Chouette::StopArea.new
expect(stop_area.area_type).to eq(stop_area.area_type)
@@ -35,7 +35,7 @@ describe Chouette::ActiveRecord, :type => :model do
describe "respond_to?" do
-
+
it "should respond to method with additionnal underscores" do
stop_area = Chouette::StopArea.new
expect(stop_area.respond_to?(:area_type)).to be_truthy
@@ -49,7 +49,7 @@ describe Chouette::ActiveRecord, :type => :model do
# let(:name) { :lines }
# let(:options) { {} }
# let(:active_record) { Chouette::Network }
-
+
# let(:modified_options) { {:modified => true} }
# it "should invoke create_reflection_without_chouette_naming with modified options" do
@@ -87,7 +87,7 @@ end
# end
# describe "class_name" do
-
+
# it "should be Chouette::Line when name is line" do
# allow(subject).to receive_messages :name => "line"
# expect(subject.class_name).to eq("Chouette::Line")
@@ -102,7 +102,7 @@ end
# describe "options" do
-
+
# it "should define class_name if not" do
# allow(subject).to receive_messages :options => {}, :class_name => "class_name"
# expect(subject.options_with_default[:class_name]).to eq("class_name")
@@ -114,7 +114,7 @@ end
# end
# end
-
+
# end
diff --git a/spec/models/chouette/group_of_line_spec.rb b/spec/models/chouette/group_of_line_spec.rb
index 66932cfd6..d49329118 100644
--- a/spec/models/chouette/group_of_line_spec.rb
+++ b/spec/models/chouette/group_of_line_spec.rb
@@ -16,7 +16,7 @@ describe Chouette::GroupOfLine, :type => :model do
expect(subject.stop_areas.count).to eq(route.stop_points.count)
end
end
-
+
context "#line_tokens=" do
let!(:line1){create(:line)}
let!(:line2){create(:line)}