meskyanichi-timer 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +68 -0
- data/Rakefile +15 -0
- data/lib/timer.rb +89 -0
- data/timer.gemspec +31 -0
- metadata +63 -0
data/README.rdoc
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
Timer
|
2
|
+
=====
|
3
|
+
|
4
|
+
Timer, a simple plugin that calculates the time between a "start time" and a "end time".
|
5
|
+
Currently Timer has the ability to take a Time object or a timestamp for the start and end times and will calculate the
|
6
|
+
time between these values in days, hours (and days in hours), minutes and seconds!
|
7
|
+
There is also the option to force it to display 2 digits at all times when you are creating a 'non-words' timer,
|
8
|
+
though would display for example "09:34:02" instead of "9:34:2". However, when you aren't forcing the two digits to be displayed
|
9
|
+
you could create a string such as: "7 days, 5 hours, 11 minutes and 56 seconds remaining..".
|
10
|
+
|
11
|
+
The output it quite limited, but it also enables you to either extend the class to create your own custom outputs.
|
12
|
+
You can of course choose not to create a whole new class to do this and just generate the strings inside of a specific helper/module,
|
13
|
+
whatever you think is best!
|
14
|
+
|
15
|
+
Example #1
|
16
|
+
=======
|
17
|
+
|
18
|
+
# New Instance of Timer
|
19
|
+
t = Timer.new
|
20
|
+
|
21
|
+
# Set the start time to the current time
|
22
|
+
t.start_time = Time.now
|
23
|
+
|
24
|
+
# Set the end time to begin 2010
|
25
|
+
t.end_time = Time.parse('2010-01-01 00:00:00')
|
26
|
+
|
27
|
+
# Output Timer
|
28
|
+
<%= "#{t.days} days, #{t.hours} hours, #{t.minutes} minutes, #{t.seconds} seconds" %>
|
29
|
+
|
30
|
+
# Outputs
|
31
|
+
313 days, 0 hours, 12 minutes, 29 seconds
|
32
|
+
|
33
|
+
|
34
|
+
Example #2
|
35
|
+
=======
|
36
|
+
|
37
|
+
# New Instance of Timer
|
38
|
+
t = Timer.new
|
39
|
+
|
40
|
+
# Set the start time to the current time
|
41
|
+
t.start_time = Time.now
|
42
|
+
|
43
|
+
# Set the end time to begin 2010
|
44
|
+
t.end_time = Time.parse('2010-01-01 00:00:00')
|
45
|
+
|
46
|
+
# Force Timer to atleast output two digits (the zero's)
|
47
|
+
t.force_two_digits = true
|
48
|
+
|
49
|
+
|
50
|
+
# Output Timer
|
51
|
+
<%= "#{t.days_in_hours}:#{t.minutes}:#{t.seconds}" %>
|
52
|
+
|
53
|
+
#Outputs (Hours:Minutes:Seconds)
|
54
|
+
7512:09:43
|
55
|
+
|
56
|
+
|
57
|
+
OR
|
58
|
+
|
59
|
+
|
60
|
+
# Output Timer
|
61
|
+
<%= "#{t.hours}:#{t.minutes}:#{t.seconds} in #{t.days} days" %>
|
62
|
+
|
63
|
+
#Outputs (Hours:Minutes:Seconds)
|
64
|
+
00:06:51 in 313 days
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
Copyright (c) 2009 [Michael van Rooijen], released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Rakefile
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rake'
|
4
|
+
require 'echoe'
|
5
|
+
|
6
|
+
Echoe.new('timer', '0.1.0') do |p|
|
7
|
+
p.description = "This is a Timer class that calculates the time between two moments."
|
8
|
+
p.url = "http://github.com/meskyanichi/timer"
|
9
|
+
p.author = "Michael van Rooijen"
|
10
|
+
p.email = "meskyan@gmail.com"
|
11
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
12
|
+
p.development_dependencies = []
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/lib/timer.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
class Timer
|
2
|
+
|
3
|
+
# Initial Values
|
4
|
+
attr_accessor :start_time
|
5
|
+
attr_accessor :end_time
|
6
|
+
|
7
|
+
# Params
|
8
|
+
attr_accessor :timer
|
9
|
+
attr_accessor :difference_in_seconds
|
10
|
+
|
11
|
+
# Booleans
|
12
|
+
attr_accessor :calculated
|
13
|
+
attr_accessor :force_two_digits
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
def days
|
18
|
+
initialze_parse_settings
|
19
|
+
return timer[:days]
|
20
|
+
end
|
21
|
+
|
22
|
+
def hours
|
23
|
+
initialze_parse_settings
|
24
|
+
return timer[:hours]
|
25
|
+
end
|
26
|
+
|
27
|
+
def days_in_hours
|
28
|
+
initialze_parse_settings
|
29
|
+
return timer[:days_in_hours]
|
30
|
+
end
|
31
|
+
|
32
|
+
def minutes
|
33
|
+
initialze_parse_settings
|
34
|
+
return timer[:minutes]
|
35
|
+
end
|
36
|
+
|
37
|
+
def seconds
|
38
|
+
initialze_parse_settings
|
39
|
+
return timer[:seconds]
|
40
|
+
end
|
41
|
+
|
42
|
+
def exceeded?
|
43
|
+
return true if start_time > end_time
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def initialze_parse_settings
|
50
|
+
update_calculations unless already_calculated?
|
51
|
+
make_2_digits if forces_two_digits?
|
52
|
+
end
|
53
|
+
|
54
|
+
def forces_two_digits?
|
55
|
+
return true if self.force_two_digits
|
56
|
+
end
|
57
|
+
|
58
|
+
def already_calculated?
|
59
|
+
if self.calculated
|
60
|
+
return true
|
61
|
+
else
|
62
|
+
self.calculated = true
|
63
|
+
return false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def update_calculations
|
68
|
+
if start_time and end_time
|
69
|
+
difference_in_seconds = end_time.to_i - start_time.to_i
|
70
|
+
end
|
71
|
+
|
72
|
+
if difference_in_seconds
|
73
|
+
self.timer = {}
|
74
|
+
self.timer[:days] = ( difference_in_seconds / 60 / 60 / 24 ).to_i
|
75
|
+
self.timer[:hours] = ( ( difference_in_seconds - ( self.timer[:days] * 60 * 60 * 24 ) ) / 60 / 60 ).to_i
|
76
|
+
self.timer[:minutes] = ( ( difference_in_seconds - ( self.timer[:days] * 60 * 60 * 24 ) - ( self.timer[:hours] * 60 * 60 ) ) / 60 ).to_i
|
77
|
+
self.timer[:seconds] = ( ( ( difference_in_seconds - ( self.timer[:days] * 60 * 60 * 24 ) - ( self.timer[:hours] * 60 * 60 ) ) - ( self.timer[:minutes] * 60 ) ) ).to_i
|
78
|
+
self.timer[:days_in_hours] = ( ( self.timer[:days] * 24) + self.timer[:hours] ).to_i
|
79
|
+
else
|
80
|
+
raise "To update calculations you need atleast a start_time and end_time."
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def make_2_digits
|
85
|
+
timers = [:hours, :minutes, :seconds, :days_in_hours]
|
86
|
+
timers.each {|t| self.timer[t] = sprintf('%02d', self.timer[t]) }
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
data/timer.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{timer}
|
5
|
+
s.version = "0.1.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Michael van Rooijen"]
|
9
|
+
s.date = %q{2009-03-30}
|
10
|
+
s.description = %q{This is a Timer class that calculates the time between two moments.}
|
11
|
+
s.email = %q{meskyan@gmail.com}
|
12
|
+
s.extra_rdoc_files = ["lib/timer.rb", "README.rdoc"]
|
13
|
+
s.files = ["lib/timer.rb", "Manifest", "Rakefile", "README.rdoc", "timer.gemspec"]
|
14
|
+
s.has_rdoc = true
|
15
|
+
s.homepage = %q{http://github.com/meskyanichi/timer}
|
16
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Timer", "--main", "README.rdoc"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = %q{timer}
|
19
|
+
s.rubygems_version = %q{1.3.1}
|
20
|
+
s.summary = %q{This is a Timer class that calculates the time between two moments.}
|
21
|
+
|
22
|
+
if s.respond_to? :specification_version then
|
23
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
+
s.specification_version = 2
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
+
else
|
28
|
+
end
|
29
|
+
else
|
30
|
+
end
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: meskyanichi-timer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael van Rooijen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-03-30 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: This is a Timer class that calculates the time between two moments.
|
17
|
+
email: meskyan@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- lib/timer.rb
|
24
|
+
- README.rdoc
|
25
|
+
files:
|
26
|
+
- lib/timer.rb
|
27
|
+
- Manifest
|
28
|
+
- Rakefile
|
29
|
+
- README.rdoc
|
30
|
+
- timer.gemspec
|
31
|
+
has_rdoc: true
|
32
|
+
homepage: http://github.com/meskyanichi/timer
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options:
|
35
|
+
- --line-numbers
|
36
|
+
- --inline-source
|
37
|
+
- --title
|
38
|
+
- Timer
|
39
|
+
- --main
|
40
|
+
- README.rdoc
|
41
|
+
require_paths:
|
42
|
+
- lib
|
43
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "1.2"
|
54
|
+
version:
|
55
|
+
requirements: []
|
56
|
+
|
57
|
+
rubyforge_project: timer
|
58
|
+
rubygems_version: 1.2.0
|
59
|
+
signing_key:
|
60
|
+
specification_version: 2
|
61
|
+
summary: This is a Timer class that calculates the time between two moments.
|
62
|
+
test_files: []
|
63
|
+
|