aboutsummaryrefslogtreecommitdiffstats
path: root/app/models/chouette/direction.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/chouette/direction.rb')
-rw-r--r--app/models/chouette/direction.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/app/models/chouette/direction.rb b/app/models/chouette/direction.rb
new file mode 100644
index 000000000..93bc1318b
--- /dev/null
+++ b/app/models/chouette/direction.rb
@@ -0,0 +1,60 @@
+class Chouette::Direction < ActiveSupport::StringInquirer
+
+ def initialize(text_code, numerical_code)
+ super text_code.to_s
+ @numerical_code = numerical_code
+ end
+
+ def self.new(text_code, numerical_code = nil)
+ if text_code and numerical_code
+ super
+ elsif self === text_code
+ text_code
+ else
+ if Fixnum === text_code
+ text_code, numerical_code = definitions.rassoc(text_code)
+ else
+ text_code, numerical_code = definitions.assoc(text_code.to_s)
+ end
+
+ super text_code, numerical_code
+ end
+ end
+
+ def to_i
+ @numerical_code
+ end
+
+ def inspect
+ "#{to_s}/#{to_i}"
+ end
+
+ def name
+ to_s
+ end
+
+ @@definitions = [
+ ["straight_forward", 0],
+ ["backward", 1],
+ ["clock_wise", 2],
+ ["counter_clock_wise", 3],
+ ["north", 4],
+ ["north_west", 5],
+ ["west", 6],
+ ["south_west", 7],
+ ["south", 8],
+ ["south_east", 9],
+ ["east", 10],
+ ["north_east", 11]
+ ]
+ cattr_reader :definitions
+
+ @@all = nil
+ def self.all
+ @@all ||= definitions.collect do |text_code, numerical_code|
+ new(text_code, numerical_code)
+ end
+ end
+
+end
+