vidibus-timecode 0.1.0 → 0.1.1

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/.rspec CHANGED
@@ -1 +1,2 @@
1
1
  --format nested
2
+ --colour
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :gemcutter
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in vidibus-timecode.gemspec
4
4
  gemspec
data/LICENSE CHANGED
@@ -1,4 +1,6 @@
1
- Copyright (c) 2011 Andre Pankratz
1
+ MIT License
2
+
3
+ Copyright (c) 2011-2013 Andre Pankratz
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
data/README.md ADDED
@@ -0,0 +1,107 @@
1
+ # Vidibus::Timecode [![](http://travis-ci.org/vidibus/vidibus-timecode.png)](http://travis-ci.org/vidibus/vidibus-timecode)
2
+
3
+ Timecodes are a simple, yet powerful way to notate times.
4
+
5
+ This gem is part of [Vidibus](http://vidibus.org), an open source toolset for building distributed (video) applications.
6
+
7
+
8
+ ## Installation
9
+
10
+ Add `gem "vidibus-timecode"` to your Gemfile. Then call `bundle install` on your console.
11
+
12
+
13
+ ## Usage
14
+
15
+ A timecode instance requires at least one parameter. Valid inputs are time objects and timecode strings:
16
+
17
+ ```ruby
18
+ Vidibus::Timecode.new(Time.now)
19
+ Vidibus::Timecode.new("2011/12/07@21:00")
20
+ ```
21
+
22
+ A timecode instance provides two methods, `timecode` and `time`:
23
+
24
+ ```ruby
25
+ Vidibus::Timecode.new(Time.now).timecode
26
+ # => "2011/12/07@21:00"
27
+
28
+ Vidibus::Timecode.new("2011/12/07@21:00").time
29
+ # => Wed Dec 07 21:00:00 +0100 2011
30
+ ```
31
+
32
+
33
+ ## Syntax
34
+
35
+ Timecodes may be used to describe single, definite times or multiple, even random times. Each timecode is
36
+ comprised of a date and a time part, joined by "@": `#{date}@#{time}`
37
+
38
+ As shown above, a timecode object may represent a single time:
39
+
40
+ ```ruby
41
+ "2011/12/07@21:00" # Wed Dec 07 21:00:00 +0100 2011
42
+ ```
43
+
44
+ But timecodes may also be used to define repeating times, like cron. Timcode will return the next future time:
45
+
46
+ ```ruby
47
+ "7@21:00" # next 7th of a month, e.g. Thu Jul 07 21:00:00 +0200 2011
48
+ ```
49
+
50
+
51
+ ### Examples
52
+
53
+ Some syntax examples:
54
+
55
+ ```ruby
56
+ # each 7th of every month at 21:00
57
+ "7@21"
58
+
59
+ # each 7th of every month at 21:00
60
+ "7@21:00"
61
+
62
+ # each 7th of december every year at 21:00
63
+ "12/7@21:00"
64
+
65
+ # on 7th of december 2011 at 21:00
66
+ "2011/12/07@21:00"
67
+ ```
68
+
69
+
70
+ ### More Examples (not implemented yet)
71
+
72
+ In the future Vidibus::Timecode will be able to handle collections, ranges and random times:
73
+
74
+ ```ruby
75
+ # on 7th and 23rd of december 2011 at 21:00
76
+ "2011/12/07+23@21:00"
77
+
78
+ # from 7th to 23rd of december 2011 at 21:00
79
+ "2011/12/07-23@21:00"
80
+
81
+ # on 7th or 23rd of december 2011 at 21:00
82
+ "2011/12/07,23@21:00"
83
+
84
+ # on one day between 7th and 23rd of december 2011 at 21:00
85
+ "2011/12/07~23@21:00"
86
+
87
+ # from 7th to 23rd of november and from 7th to 23rd of december 2011 at 21:00
88
+ "2011/11+12/07-23@21:00"
89
+
90
+ # between 7th and 23rd of november or december 2011 at 21:00
91
+ "2011/11,12/07-23@21:00"
92
+ ```
93
+
94
+
95
+ ## TODO
96
+
97
+ * Allow range input
98
+ * Allow list input
99
+ * Allow precision option: `:miliseconds`
100
+ * Make precision `:seconds` default
101
+ * Add method `explain` to print timecode in words
102
+ * Allow timecodes without date or time: `"@21" # everyday at 21:00`
103
+
104
+
105
+ ## Copyright
106
+
107
+ © 2011 Andre Pankratz. See LICENSE for details.
data/Rakefile CHANGED
@@ -8,18 +8,10 @@ Bundler::GemHelper.install_tasks
8
8
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
9
9
  require "vidibus/timecode"
10
10
 
11
- RSpec::Core::RakeTask.new(:rcov) do |t|
12
- t.pattern = "spec/**/*_spec.rb"
13
- t.rcov = true
14
- t.rcov_opts = ["--exclude", "^spec,/gems/"]
15
- end
16
-
17
11
  Rake::RDocTask.new do |rdoc|
18
12
  rdoc.rdoc_dir = "rdoc"
19
- rdoc.title = "vidibus-sysinfo #{Vidibus::Timecode::VERSION}"
13
+ rdoc.title = "vidibus-timecode #{Vidibus::Timecode::VERSION}"
20
14
  rdoc.rdoc_files.include("README*")
21
15
  rdoc.rdoc_files.include("lib/**/*.rb")
22
16
  rdoc.options << "--charset=utf-8"
23
17
  end
24
-
25
- task :default => :rcov
@@ -1,2 +1 @@
1
- require "time"
2
1
  require "vidibus/timecode"
@@ -1,25 +1,29 @@
1
1
  module Vidibus
2
2
  class Timecode
3
- VERSION = "0.1.0"
3
+ VERSION = '0.1.1'
4
4
 
5
5
  YEAR_REGEXP = /(\d{3,4}(?:[,\-]\d{3,4})?)/
6
6
  MONTH_REGEXP = /(\d{1,2}(?:[,\-]\d{1,2})?)/
7
7
  DAY_REGEXP = /(\d{1,2}(?:[,\-]\d{1,2})?)/
8
8
  TIME_REGEXP = /(\d{1,2}(?:[,\-]\d{1,2})?)/
9
- REGEXP = /^(?:#{YEAR_REGEXP}\/)?(?:#{MONTH_REGEXP}\/)?#{DAY_REGEXP}@#{TIME_REGEXP}(?:\:#{TIME_REGEXP}){0,2}$/
9
+ REGEXP = /^(?:#{YEAR_REGEXP}\/)?(?:#{MONTH_REGEXP}\/)?#{DAY_REGEXP}@#{TIME_REGEXP}(?:\:#{TIME_REGEXP})?(?:\:#{TIME_REGEXP})?$/
10
10
 
11
11
  class Error < StandardError; end
12
12
  class InputError < Error; end
13
13
  class FormatError < Error; end
14
14
 
15
15
  def initialize(*args)
16
- options = extract_options!(args)
16
+ @options = extract_options!(args) || {}
17
17
  @input = args.first or raise_input_error
18
18
  process_input
19
19
  end
20
20
 
21
21
  def timecode
22
- @timecode ||= @time.strftime("%Y/%m/%d@%H:%M")
22
+ @timecode ||= begin
23
+ format = '%Y/%m/%d@%H:%M'
24
+ format << ':%S' if @options[:precision].to_s == 'seconds'
25
+ @time.strftime(format)
26
+ end
23
27
  end
24
28
 
25
29
  def time
@@ -50,8 +54,9 @@ module Vidibus
50
54
  day = m[3]
51
55
  hour = m[4].to_i
52
56
  minute = m[5].to_i
57
+ second = m[6].to_i
53
58
 
54
- Time.local(year, month, day, hour, minute).tap do |time|
59
+ Time.local(year, month, day, hour, minute, second).tap do |time|
55
60
  time.in_time_zone if time.respond_to?(:in_time_zone)
56
61
  end
57
62
  else
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,9 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter '/spec/'
4
+ end
5
+
6
+ $:.unshift File.expand_path('../../', __FILE__)
3
7
 
4
8
  require "rubygems"
5
9
  require "rspec"
@@ -10,15 +10,16 @@ describe "Vidibus::Timecode" do
10
10
  end
11
11
 
12
12
  it "should accept a Time" do
13
- expect {Vidibus::Timecode.new(time)}.not_to raise_error(Vidibus::Timecode::InputError)
13
+ expect {Vidibus::Timecode.new(time)}.not_to raise_error
14
14
  end
15
15
 
16
16
  it "should accept a Timecode string" do
17
- expect {Vidibus::Timecode.new(timecode)}.not_to raise_error(Vidibus::Timecode::InputError)
17
+ expect {Vidibus::Timecode.new(timecode)}.not_to raise_error
18
18
  end
19
19
 
20
20
  it "should raise an FormatError for invalid Timecode input" do
21
- expect {Vidibus::Timecode.new("2011/12/07")}.to raise_error(Vidibus::Timecode::FormatError)
21
+ expect {Vidibus::Timecode.new("2011/12/07")}.
22
+ to raise_error(Vidibus::Timecode::FormatError)
22
23
  end
23
24
  end
24
25
 
@@ -37,6 +38,15 @@ describe "Vidibus::Timecode" do
37
38
  it "should return a local time object by default" do
38
39
  this.time.should eql(time.localtime)
39
40
  end
41
+
42
+ context 'with seconds' do
43
+ let(:time) { Time.parse('2011-12-07 21:00:39') }
44
+ let(:timecode) { '2011/12/07@21:00:39' }
45
+
46
+ it "should return the timecode of a given time" do
47
+ this.time.should eql(time.localtime)
48
+ end
49
+ end
40
50
  end
41
51
 
42
52
  describe "#timecode" do
@@ -49,6 +59,16 @@ describe "Vidibus::Timecode" do
49
59
  it "should return the timecode of a given time" do
50
60
  this.timecode.should eql(timecode)
51
61
  end
62
+
63
+ context 'with precision: :seconds' do
64
+ let(:time) { Time.parse('2011-12-07 21:00:39') }
65
+ let(:timecode) { '2011/12/07@21:00:39' }
66
+ let(:this) { Vidibus::Timecode.new(time, precision: :seconds) }
67
+
68
+ it "should return the timecode of a given time" do
69
+ this.timecode.should eql(timecode)
70
+ end
71
+ end
52
72
  end
53
73
 
54
74
  # describe "speed test" do
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.homepage = "https://github.com/vidibus/vidibus-timecode"
15
15
  s.summary = "Timecodes are a simple, yet powerful way to notate times."
16
16
  s.description = "Timecodes may be used to describe single, definite times or multiple, even random times."
17
+ s.license = 'MIT'
17
18
 
18
19
  s.required_rubygems_version = ">= 1.3.6"
19
20
  s.rubyforge_project = "vidibus-timecode"
@@ -21,7 +22,7 @@ Gem::Specification.new do |s|
21
22
  s.add_development_dependency "bundler", ">= 1.0.0"
22
23
  s.add_development_dependency "rake"
23
24
  s.add_development_dependency "rdoc"
24
- s.add_development_dependency "rcov"
25
+ s.add_development_dependency "simplecov"
25
26
  s.add_development_dependency "rspec", "~> 2"
26
27
  s.add_development_dependency "rr"
27
28
 
metadata CHANGED
@@ -1,165 +1,157 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: vidibus-timecode
3
- version: !ruby/object:Gem::Version
4
- hash: 27
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Andre Pankratz
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-07-09 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2013-09-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: bundler
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 23
30
- segments:
31
- - 1
32
- - 0
33
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
34
21
  version: 1.0.0
35
22
  type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: rake
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
41
33
  none: false
42
- requirements:
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- hash: 3
46
- segments:
47
- - 0
48
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
49
38
  type: :development
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: rdoc
53
39
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rdoc
48
+ requirement: !ruby/object:Gem::Requirement
55
49
  none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
63
54
  type: :development
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
- name: rcov
67
55
  prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: simplecov
64
+ requirement: !ruby/object:Gem::Requirement
69
65
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
77
70
  type: :development
78
- version_requirements: *id004
79
- - !ruby/object:Gem::Dependency
80
- name: rspec
81
71
  prerelease: false
82
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
83
81
  none: false
84
- requirements:
82
+ requirements:
85
83
  - - ~>
86
- - !ruby/object:Gem::Version
87
- hash: 7
88
- segments:
89
- - 2
90
- version: "2"
84
+ - !ruby/object:Gem::Version
85
+ version: '2'
91
86
  type: :development
92
- version_requirements: *id005
93
- - !ruby/object:Gem::Dependency
94
- name: rr
95
87
  prerelease: false
96
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
97
89
  none: false
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '2'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rr
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
105
102
  type: :development
106
- version_requirements: *id006
107
- description: Timecodes may be used to describe single, definite times or multiple, even random times.
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: Timecodes may be used to describe single, definite times or multiple,
111
+ even random times.
108
112
  email: andre@vidibus.com
109
113
  executables: []
110
-
111
114
  extensions: []
112
-
113
115
  extra_rdoc_files: []
114
-
115
- files:
116
+ files:
116
117
  - .gitignore
117
118
  - .rspec
118
119
  - .travis.yml
119
120
  - Gemfile
120
121
  - LICENSE
121
- - README.rdoc
122
+ - README.md
122
123
  - Rakefile
123
124
  - lib/vidibus-timecode.rb
124
125
  - lib/vidibus/timecode.rb
125
126
  - spec/spec_helper.rb
126
127
  - spec/vidibus/timecode_spec.rb
127
128
  - vidibus-timecode.gemspec
128
- has_rdoc: true
129
129
  homepage: https://github.com/vidibus/vidibus-timecode
130
- licenses: []
131
-
130
+ licenses:
131
+ - MIT
132
132
  post_install_message:
133
133
  rdoc_options: []
134
-
135
- require_paths:
134
+ require_paths:
136
135
  - lib
137
- required_ruby_version: !ruby/object:Gem::Requirement
136
+ required_ruby_version: !ruby/object:Gem::Requirement
138
137
  none: false
139
- requirements:
140
- - - ">="
141
- - !ruby/object:Gem::Version
142
- hash: 3
143
- segments:
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ segments:
144
143
  - 0
145
- version: "0"
146
- required_rubygems_version: !ruby/object:Gem::Requirement
144
+ hash: 1613326113527692330
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
146
  none: false
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- hash: 23
152
- segments:
153
- - 1
154
- - 3
155
- - 6
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
156
150
  version: 1.3.6
157
151
  requirements: []
158
-
159
152
  rubyforge_project: vidibus-timecode
160
- rubygems_version: 1.6.2
153
+ rubygems_version: 1.8.24
161
154
  signing_key:
162
155
  specification_version: 3
163
156
  summary: Timecodes are a simple, yet powerful way to notate times.
164
157
  test_files: []
165
-
data/README.rdoc DELETED
@@ -1,67 +0,0 @@
1
- = Vidibus::Timecode
2
-
3
- Timecodes are a simple, yet powerful way to notate times.
4
-
5
- This gem is part of {Vidibus}[http://vidibus.org], an open source toolset for building distributed (video) applications.
6
-
7
-
8
- == Compatibility
9
-
10
- http://travis-ci.org/vidibus/vidibus-timecode.png
11
-
12
- Vidibus::Secure is tested against Ruby 1.8.7. {Build History}[http://travis-ci.org/vidibus/vidibus-timecode]
13
-
14
-
15
- == Installation
16
-
17
- Add the dependency to the Gemfile of your application:
18
-
19
- gem "vidibus-timecode"
20
-
21
- Then call bundle install on your console.
22
-
23
-
24
- == Usage
25
-
26
- Timecodes may be used to describe single, definite times or multiple, even random times. Each timecode is
27
- comprised of a date and a time part, joined by "@":
28
- #{date}@#{time}
29
-
30
- In it's basic form, a timecode object will return a single time:
31
- 2011/12/07@21:00 # => Wed Dec 07 21:00:00 +0100 2011
32
-
33
- But timecodes may also be used to define repeating times, like cron. Timcode will return the next future time:
34
- 7@21:00 # => next 7th of a month, e.g. Thu Jul 07 21:00:00 +0200 2011
35
-
36
- When defining a range, Timecode will output a random time within range defined:
37
- 2011/12/07@21:00-23:55 # => e.g. Wed Dec 07 22:13:45 +0100 2011
38
-
39
- Please note: Only the basic for has been implemented already.
40
-
41
-
42
- == Examples
43
-
44
- Some usage examples:
45
-
46
- 7@21 # each 7th of each month at 21:00
47
- 7@21:00 # each 7th of each month at 21:00
48
- 12/7@21:00 # each 7th of each december at 21:00
49
- 2011/12/07@21:00 # on 7th of december 2011 at 21:00
50
- 2011/12/07,23@21:00 # on 7th and 23rd of december 2011 at 21:00
51
- 2011/12/07-23@21:00 # between 7th and 23rd of december 2011 at 21:00
52
- 2011/11,12/07-23@21:00 # between 7th and 23rd of november and between 7th and 23rd of december 2011 at 21:00
53
- 2011/11-12/07-23@21:00 # between 7th and 23rd of november or december 2011 at 21:00
54
- 2011/12/07,2012/01/04@21:00,22:30 # on 7th of december 2011 and on 4th of january 2012 at 21:00 and 22:30
55
-
56
-
57
- == TODO
58
-
59
- * Allow range input
60
- * Allow list input
61
- * Allow precision option: :seconds or :miliseconds
62
- * Add method #explain to print timecode in words
63
-
64
-
65
- == Copyright
66
-
67
- Copyright (c) 2011 Andre Pankratz. See LICENSE for details.