diff options
| author | Michel Etienne | 2015-01-26 13:12:24 +0100 |
|---|---|---|
| committer | Michel Etienne | 2015-01-26 13:12:24 +0100 |
| commit | 34dcd6afff1fc8581649cb1b400a66969b0f65ae (patch) | |
| tree | 59132309c796770ce2275e0317e8bb283ab8612f /app/models | |
| parent | 657966f57ab15234effcc56d58ff49dace885576 (diff) | |
| parent | c3ed60be997734921c8305f24b78e997e52a9cd3 (diff) | |
| download | chouette-core-34dcd6afff1fc8581649cb1b400a66969b0f65ae.tar.bz2 | |
merge branch V2_5
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/rule_parameter_set.rb | 120 | ||||
| -rw-r--r-- | app/models/stop_area_copy.rb | 16 |
2 files changed, 124 insertions, 12 deletions
diff --git a/app/models/rule_parameter_set.rb b/app/models/rule_parameter_set.rb index 0c7a98300..01c2e48a6 100644 --- a/app/models/rule_parameter_set.rb +++ b/app/models/rule_parameter_set.rb @@ -16,8 +16,43 @@ class RuleParameterSet < ActiveRecord::Base inter_connection_link_distance_max walk_default_speed_max walk_occasional_traveller_speed_max walk_frequent_traveller_speed_max walk_mobility_restricted_traveller_speed_max inter_access_link_distance_max inter_stop_duration_max facility_stop_area_distance_max - vehicle_journey_number_max vehicle_journey_number_min check_allowed_transport_modes) + check_allowed_transport_modes check_lines_in_groups check_line_routes + check_stop_parent check_connection_link_on_physical) end + + def self.validable_objects + [Chouette::Network,Chouette::Company,Chouette::GroupOfLine, + Chouette::StopArea,Chouette::AccessPoint,Chouette::AccessLink,Chouette::ConnectionLink, + Chouette::TimeTable,Chouette::Line,Chouette::Route, + Chouette::JourneyPattern,Chouette::VehicleJourney] + end + + def self.validable_object_names + ["network","company","group_of_line", + "stop_area","access_point","access_link","connection_link", + "time_table","line","route", + "journey_pattern","vehicle_journey"] + end + + def self.validable_columns + {"network" => ['objectid','name','registration_number'], + "company" => ['objectid','name','registration_number'], + "group_of_line" => ['objectid','name','registration_number'], + "stop_area" => ['objectid','name','registration_number','city_name','country_code','zip_code'], + "access_point" => ['objectid','name','city_name','country_code','zip_code'], + "access_link" => ['objectid','name','link_distance','default_duration'], + "connection_link" => ['objectid','name','link_distance','default_duration'], + "time_table" => ['objectid','comment','version'], + "line" => ['objectid','name','registration_number','number','published_name'], + "route" => ['objectid','name','number','published_name'], + "journey_pattern" => ['objectid','name','registration_number','published_name'], + "vehicle_journey" => ['objectid','published_journey_name','published_journey_identifier','number'] } + end + + def self.column_attribute_prefixes + %w( unique pattern min_size max_size ) + end + def self.all_modes Chouette::TransportMode.all.map { |m| m.to_s} end @@ -28,6 +63,14 @@ class RuleParameterSet < ActiveRecord::Base mode_attribute_prefixes.include?( $1) && self.class.all_modes.include?( $2) end + + def self.column_attribute?( method_name ) + pattern = /(\w+)_column_(\w+)_object_(\w+)/ + return false unless method_name.match( pattern) + return false unless validable_object_names.include?($3) + column_attribute_prefixes.include?( $1) && validable_columns[$3].include?( $2) + end + def self.mode_of_mode_attribute( method_name ) method_name.match( /(\w+)_mode_(\w+)/) $2 @@ -37,6 +80,20 @@ class RuleParameterSet < ActiveRecord::Base $1 end + def self.object_of_column_attribute( method_name ) + method_name.match( /(\w+)_column_(\w+)_object_(\w+)/) + $3 + end + def self.column_of_column_attribute( method_name ) + method_name.match( /(\w+)_column_(\w+)_object_(\w+)/) + $2 + end + def self.attribute_of_column_attribute( method_name ) + method_name.match( /(\w+)_column_(\w+)_object_(\w+)/) + $1 + end + + def self.mode_parameter(name) name = name.to_s attr_accessible name @@ -52,6 +109,37 @@ class RuleParameterSet < ActiveRecord::Base ((self.parameters ||= {})["mode_#{mode}"] ||= {})[attribute_name] = prefix end end + + def self.column_parameter(obj,column,prefix) + name = "#{prefix}_column_#{column}_object_#{obj}" + attr_accessible name + define_method(name) do + attribute_name, column, obj = prefix, column, obj + self.parameters and self.parameters[obj] and + self.parameters[obj][column] and self.parameters[obj][column][attribute_name] + end + + define_method("#{name}=") do |key| + attribute_name, column, obj = prefix, column, obj + (((self.parameters ||= {})[obj] ||= {})[column]||= {})[attribute_name] = key + end + + end + + def self.object_parameter(clazz) + name = clazz.table_name.singularize + attr_accessible name + + parameter "check_#{clazz.table_name.singularize}" + validable_columns[name].each do |column| + column_attribute_prefixes.each do |prefix| + column_parameter name,column,prefix + end + + end + + end + def self.parameter(name) name = name.to_s attr_accessible name @@ -77,7 +165,11 @@ class RuleParameterSet < ActiveRecord::Base :inter_access_link_distance_max => 300, :inter_stop_duration_max => 40, :facility_stop_area_distance_max => 300, - :check_allowed_transport_modes => false + :check_allowed_transport_modes => false, + :check_lines_in_groups => false, + :check_line_routes => false, + :check_stop_parent => false, + :check_connection_link_on_physical => false } if mode && self.mode_default_params[ mode.to_sym] base.merge!( self.mode_default_params[ mode.to_sym]) @@ -231,21 +323,41 @@ class RuleParameterSet < ActiveRecord::Base def allowed(mode) return true unless self.check_allowed_transport_modes - puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s + # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s return self.send("allowed_transport_mode_#{mode}") == "1" end + + def selected(object) + # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s + return self.send("check_#{object}") == "1" + end + + def selected_column(object,column) + # puts "#{mode} = "+self.send("allowed_transport_mode_#{mode}").to_s + return self.send("unique_column_#{column}_object_#{object}") == "1" || + self.send("pattern_column_#{column}_object_#{object}") != "0" || + !self.send("min_size_column_#{column}_object_#{object}").empty? || + !self.send("max_size_column_#{column}_object_#{object}").empty? + end + all_modes.each do |mode| mode_attribute_prefixes.each do |prefix| mode_parameter "#{prefix}_mode_#{mode}".to_sym end end - + general_attributes.each do |attribute| parameter attribute.to_sym unless attribute == "stop_areas_area" || attribute == "check_allowed_transport_modes" validates attribute.to_sym, :numericality => true, :allow_nil => true, :allow_blank => true end end + + + validable_objects.each do |obj| + object_parameter obj + end + end diff --git a/app/models/stop_area_copy.rb b/app/models/stop_area_copy.rb index 796aba567..041d30eb9 100644 --- a/app/models/stop_area_copy.rb +++ b/app/models/stop_area_copy.rb @@ -5,7 +5,7 @@ class StopAreaCopy include ActiveModel::Conversion extend ActiveModel::Naming - attr_accessor :source_id, :hierarchy, :area_type, :source + attr_accessor :source_id, :hierarchy, :area_type, :source, :copy validates_presence_of :source_id, :hierarchy, :area_type @@ -40,17 +40,17 @@ class StopAreaCopy begin if self.valid? self.source ||= Chouette::StopArea.find self.source_id - copy = source.duplicate - copy.name = source.name - copy.area_type = self.area_type.camelcase + self.copy = source.duplicate + self.copy.name = source.name + self.copy.area_type = self.area_type.camelcase Chouette::StopArea.transaction do if self.hierarchy == "child" - copy.parent_id = source.id + self.copy.parent_id = source.id end - copy.save! + self.copy.save! if self.hierarchy == "parent" - source.parent_id = copy.id - source.save! + self.source.parent_id = copy.id + self.source.save! end end true |
