class TimeCursor::Elements
Constants
- DATE_ALIAS
- RE_ALL
- RE_LIST
- RE_WILD
Public Class Methods
build( target, range = nil )
click to toggle source
# File lib/time_cursor/elements.rb, line 15 def self.build( target, range = nil ) case target when Array target = target.join(',') when Symbol target = target.to_s end case target when NilClass Elements.new( [] ) when Range Elements.new( target.to_a ) when Numeric Elements.new( [target] ) when String factors = DATE_ALIAS.inject( target.downcase ) do |s, (k, v)| s.gsub( k, v ) end items = factors.split(',').map do |factor| if m = RE_ALL.match( factor ) [] elsif m = RE_WILD.match( factor ) if range.nil? raise ArgumentError, "disallow wildcard without range : '#{target}'" end from = range.first to = range.last step = ( m[2] || 1 ).to_i expand( from, to, step, range ) elsif m = RE_LIST.match( factor ) from = ( m[1] ).to_i to = ( m[3] || m[1] ).to_i step = ( m[5] || 1 ).to_i expand( from, to, step, range ) else raise ArgumentError, "format invalid : '#{target}'" end end Elements.new( items.flatten.sort.uniq ) else raise ArgumentError, "type invalid : '#{target}'" end end
expand( from, to, step, range )
click to toggle source
# File lib/time_cursor/elements.rb, line 65 def self.expand( from, to, step, range ) result = [] cur = from if from <= to loop do result << cur cur += step break if cur > to end else loop do result << cur cur += step break if cur > range.last end cur = range.first loop do result << cur cur += step break if cur > to end end result end
Public Instance Methods
correspond?( item )
click to toggle source
# File lib/time_cursor/elements.rb, line 104 def correspond?( item ) self.empty? || self.include?( item ) end
left( item )
click to toggle source
# File lib/time_cursor/elements.rb, line 97 def left( item ) (self.size-1).downto(0) do |i| return self[i] if self[i] < item end nil end
right( item )
click to toggle source
# File lib/time_cursor/elements.rb, line 90 def right( item ) 0.upto(self.size-1) do |i| return self[i] if item < self[i] end nil end