class Duration
Author: Stefano Harding <riddopic@gmail.com> License: Apache License, Version 2.0 Copyright: © 2014-2015 Stefano Harding
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Constants
- DAY
- HOUR
- MINUTE
- SECOND
- SEGMENTS
- WEEK
- YEAR
Public Class Methods
[](seconds, *segments)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 32 def self.[](seconds, *segments) new(seconds, *segments) end
new(seconds=0, *segments)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 36 def initialize(seconds=0, *segments) @seconds = seconds.to_i reset_segments(*segments) end
Public Instance Methods
*(other)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 135 def *(other) self.class.new(@seconds * other.to_i, segments) end
+(other)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 127 def +(other) self.class.new(@seconds + other.to_i, segments) end
+@()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 188 def +@ self.class.new(+@seconds) end
-(other)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 131 def -(other) self.class.new(@seconds - other.to_i, segments) end
-@()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 184 def -@ self.class.new(-@seconds) end
/(other)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 139 def /(other) self.class.new(@seconds / other.to_i, segments) end
<=>(other)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 114 def <=>(other) @seconds <=> other.to_i end
==(other)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 106 def ==(other) if Duration === other other.seconds == seconds else other == seconds end end
after(time)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 196 def after(time) @seconds.after(time) end
before(time)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 192 def before(time) @seconds.before(time) end
days()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 120 def days ; to_h[:days] ; end
hours()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 121 def hours ; to_h[:hours] ; end
inspect()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 65 def inspect h = to_h segments.reverse.collect do |l| "#{h[l.to_sym]} #{l}" end.join(' ') end
minutes()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 122 def minutes ; to_h[:minutes] ; end
reset_segments(*segments)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 43 def reset_segments(*segments) case segments.size when 0 @segments = [:days, :hours, :minutes, :seconds] when 1 case segments = segments[0] when Array @segments = segments.collect { |p| (p.to_s.downcase.chomp('s') + 's').to_sym } raise ArgumentError unless @segments.all? { |s| SEGMENTS.include?(s) } else f = SEGMENTS.index(segments) @segments = SEGMENTS[f..0] end when 2 f = SEGMENTS.index(segments[0]) t = SEGMENTS.index(segments[1]) @segments = SEGMENTS[f..t] else raise ArgumentError end end
seconds()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 123 def seconds ; to_h[:seconds] ; end
segmented(*segments)
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 143 def segmented(*segments) self.class.new(@seconds, segments) end
segments()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 41 def segments; @segments; end
strftime(fmt)
click to toggle source
Format duration.
Identifiers
%w -- Number of weeks %d -- Number of days %h -- Number of hours %m -- Number of minutes %s -- Number of seconds %t -- Total number of seconds %x -- Duration#to_s %% -- Literal `%' character
Example
d = Duration.new(:weeks => 10, :days => 7) => #<Duration: 11 weeks> d.strftime("It's been %w weeks!") => "It's been 11 weeks!"
# File lib/garcon/core_ext/duration.rb, line 167 def strftime(fmt) h = to_h hx = { 'y' => h[:years] , 'w' => h[:weeks] , 'd' => h[:days] , 'h' => h[:hours] , 'm' => h[:minutes], 's' => h[:seconds], 't' => total, 'x' => to_s } fmt.gsub(/%?%(w|d|h|m|s|t|x)/) do |match| hx[match[1..1]] end.gsub('%%', '%') end
to_a()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 77 def to_a a, s = [], @seconds a[5], s = *s.divmod(YEAR) if @segments.include?(:years) a[4], s = *s.divmod(WEEK) if @segments.include?(:weeks) a[3], s = *s.divmod(DAY) if @segments.include?(:days) a[2], s = *s.divmod(HOUR) if @segments.include?(:hours) a[1], s = *s.divmod(MINUTE) if @segments.include?(:minutes) a[0], s = *s.divmod(SECOND) if @segments.include?(:seconds) a.compact.reverse end
to_f()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 73 def to_f ; @seconds.to_f ; end
to_h()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 88 def to_h h, s = {}, @seconds h[:years], s = *s.divmod(YEAR) if @segments.include?(:years) h[:weeks], s = *s.divmod(WEEK) if @segments.include?(:weeks) h[:days], s = *s.divmod(DAY) if @segments.include?(:days) h[:hours], s = *s.divmod(HOUR) if @segments.include?(:hours) h[:minutes], s = *s.divmod(MINUTE) if @segments.include?(:minutes) h[:seconds], s = *s.divmod(SECOND) if @segments.include?(:seconds) h end
to_i()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 72 def to_i ; @seconds.to_i ; end
to_s()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 99 def to_s h = to_h segments.reverse.collect do |l| "#{h[l.to_sym]} #{l}" end.join(' ') end
total()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 125 def total ; seconds ; end
weeks()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 119 def weeks ; to_h[:weeks] ; end
years()
click to toggle source
# File lib/garcon/core_ext/duration.rb, line 118 def years ; to_h[:years] ; end