aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/rule_parameter_set.rb
diff options
context:
space:
mode:
authorMichel Etienne2015-01-09 16:11:33 +0100
committerMichel Etienne2015-01-09 16:11:33 +0100
commit83f9d8cf48fb832b43f0ea08d6ee53eef1be734a (patch)
tree68e44e3f377a67dbd607ff7de9d7be2558b205ae /app/models/rule_parameter_set.rb
parent913bc3b257a8e3066388a8f2260756e97756a225 (diff)
parentef4cc372d9dffe91354fb5ea5b44ef46a86677c4 (diff)
downloadchouette-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.rb120
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