diff options
| author | Michel Etienne | 2015-01-09 16:11:33 +0100 |
|---|---|---|
| committer | Michel Etienne | 2015-01-09 16:11:33 +0100 |
| commit | 83f9d8cf48fb832b43f0ea08d6ee53eef1be734a (patch) | |
| tree | 68e44e3f377a67dbd607ff7de9d7be2558b205ae /app/models/rule_parameter_set.rb | |
| parent | 913bc3b257a8e3066388a8f2260756e97756a225 (diff) | |
| parent | ef4cc372d9dffe91354fb5ea5b44ef46a86677c4 (diff) | |
| download | chouette-core-83f9d8cf48fb832b43f0ea08d6ee53eef1be734a.tar.bz2 | |
add tests for hub export
Diffstat (limited to 'app/models/rule_parameter_set.rb')
| -rw-r--r-- | app/models/rule_parameter_set.rb | 120 |
1 files changed, 116 insertions, 4 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 |
