diff options
| author | Luc Donnet | 2015-01-29 16:53:30 +0100 | 
|---|---|---|
| committer | Luc Donnet | 2015-01-29 16:53:30 +0100 | 
| commit | f0a1afd8947a4c16af737b86f6c1c97b94c4710d (patch) | |
| tree | f257d18828ff385588c09895b80b94a847f5f4f0 /app/models/rule_parameter_set.rb | |
| parent | 0bf25cd563d38da17c9265570a98bff210044424 (diff) | |
| parent | c3ed60be997734921c8305f24b78e997e52a9cd3 (diff) | |
| download | chouette-core-f0a1afd8947a4c16af737b86f6c1c97b94c4710d.tar.bz2 | |
Merge with V2_5 development
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 b8c5a2f8f..227e2cddf 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  | 
