Class: TimeInterval
- Inherits:
-
Object
- Object
- TimeInterval
- Defined in:
- lib/time_interval.rb
Constant Summary collapse
- MASK =
Constants ============================================================
(0..30).to_a.collect { |i| (1 << 31) - (1 << (30 - i)) }.freeze
- DEFAULT_SCALE =
(0..30).to_a.collect { |i| [ i, MASK[i] ] }.freeze
- DEFAULT_SCALE_NAME =
(0..30).to_a.freeze
Class Method Summary collapse
- .interval_to_i(value) ⇒ Object
- .scale ⇒ Object
- .scale_name ⇒ Object
-
.with_definition(definition) ⇒ Object
Class Methods ========================================================.
Instance Method Summary collapse
-
#initialize(value = nil) ⇒ TimeInterval
constructor
Instance Methods =====================================================.
- #to_i(at_scale = nil) ⇒ Object
Constructor Details
#initialize(value = nil) ⇒ TimeInterval
Instance Methods =====================================================
93 94 95 |
# File 'lib/time_interval.rb', line 93 def initialize(value = nil) @time = self.class.interval_to_i(value || Time.now) end |
Class Method Details
.interval_to_i(value) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/time_interval.rb', line 67 def self.interval_to_i(value) value = value.to_i if (value < 0) value = -value index = (0..30).to_a.reverse.detect do |i| MASK[i] == value & MASK[i] end value = (value ^ MASK[index]) * scale[scale_name[index]][1] end value end |
.scale ⇒ Object
83 84 85 |
# File 'lib/time_interval.rb', line 83 def self.scale DEFAULT_SCALE end |
.scale_name ⇒ Object
87 88 89 |
# File 'lib/time_interval.rb', line 87 def self.scale_name DEFAULT_SCALE_NAME end |
.with_definition(definition) ⇒ Object
Class Methods ========================================================
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/time_interval.rb', line 11 def self.with_definition(definition) scale_defn = nil scale_name_defn = [ ] case (definition) when Array case (definition[0]) when String, Symbol definition = [ 1 ] + definition end scale_defn = { } scale_factor = 1 definition.each_with_index do |element, i| case (i % 2) when 0 scale_factor *= element when 1 scale_defn[element] = [ MASK[scale_defn.length], scale_factor ] scale_name_defn << element end end else scale = [ ] 31.times do |i| scale_factor = i ** definition if (scale_factor < (1 << 31)) scale_defn.push([ MASK[i], scale_factor ]) scale_name_defn << i end end end subclass = nil if (scale_defn) subclass = Class.new(self) methods = Module.new do define_method(:scale) do scale_defn end define_method(:scale_name) do scale_name_defn end end subclass.send(:extend, methods) end subclass or self end |
Instance Method Details
#to_i(at_scale = nil) ⇒ Object
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/time_interval.rb', line 97 def to_i(at_scale = nil) case (at_scale) when nil, 0 @time else scale_details = self.class.scale[at_scale] -(scale_details[0] | (@time / scale_details[1])) end end |