diff options
| author | cedricnjanga | 2017-09-22 15:02:32 +0200 | 
|---|---|---|
| committer | cedricnjanga | 2017-09-22 15:02:32 +0200 | 
| commit | f59f05bbf073f90edd2ae0006f028d802b6ed675 (patch) | |
| tree | 0d44e65ba630a359f11dd38e5bca9c6a2804b62b /lib/model_attribute.rb | |
| parent | c8e5212c9cb03c891db6198d3f5cb58607a805ab (diff) | |
| parent | 82020f683977e7b0373ebfc5c6c2d4549e670990 (diff) | |
| download | chouette-core-f59f05bbf073f90edd2ae0006f028d802b6ed675.tar.bz2 | |
Merge branch 'master' into staging
Diffstat (limited to 'lib/model_attribute.rb')
| -rw-r--r-- | lib/model_attribute.rb | 100 | 
1 files changed, 100 insertions, 0 deletions
| diff --git a/lib/model_attribute.rb b/lib/model_attribute.rb new file mode 100644 index 000000000..60580e306 --- /dev/null +++ b/lib/model_attribute.rb @@ -0,0 +1,100 @@ +class ModelAttribute +  attr_reader :klass, :name, :data_type + +  def self.all +    @__all__ ||= [] +  end + +  def self.define(klass, name, data_type) +    all << new(klass, name, data_type) +  end + +  def self.classes +    all +      .map(&:klass) +      .map(&:to_s) +      .map(&:camelize) +      .uniq +  end + +  def self.group_by_class +    all.group_by(&:klass) +  end + +  def self.from_code(code) +    klass, name = code.split('#').map(&:to_sym) + +    methods_by_class(klass).select do |model_attr| +      model_attr.name == name +    end.first +  end + +  def self.methods_by_class(klass) +    all.select do |model_attr| +      model_attr.klass == klass +    end +  end + +  def self.methods_by_class_and_type(klass, type) +    methods_by_class(klass).select do |model_attr| +      model_attr.data_type == type +    end +  end + +  def initialize(klass, name, data_type) +    @klass = klass +    @name = name +    @data_type = data_type +  end + +  # Chouette::Route +  define :route, :name, :string +  define :route, :published_name, :string +  define :route, :comment, :string +  define :route, :number, :string +  define :route, :direction, :string +  define :route, :wayback, :string + +  # Chouette::JourneyPattern +  define :journey_pattern, :name, :string +  define :journey_pattern, :published_name, :string +  define :journey_pattern, :comment, :string +  define :journey_pattern, :registration_number, :string +  define :journey_pattern, :section_status, :integer + +  # Chouette::VehicleJourney +  define :vehicle_journey, :comment, :string +  define :vehicle_journey, :status_value, :string +  define :vehicle_journey, :transport_mode, :string +  define :vehicle_journey, :facility, :string +  define :vehicle_journey, :published_journey_name, :string +  define :vehicle_journey, :published_journey_identifier, :string +  define :vehicle_journey, :vehicle_type_identifier, :string +  define :vehicle_journey, :number, :integer +  define :vehicle_journey, :mobility_restricted_suitability, :boolean +  define :vehicle_journey, :flexible_service, :boolean + +  # Chouette::Footnote +  define :footnote, :code, :string +  define :footnote, :label, :string + +  # Chouette::TimeTable +  define :time_table, :version, :string +  define :time_table, :comment, :string +  define :time_table, :start_date, :date +  define :time_table, :end_date, :date +  define :time_table, :color, :string + +  # Chouette::RoutingConstraintZone +  define :routing_constraint_zone, :name, :string + +  def code +    "#{@klass}##{@name}" +  end + +  def ==(other) +    klass == other.klass && +      name == other.name && +      data_type == other.data_type +  end +end | 
