vidibus-timecode 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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.