qreport_time_parser 0.0.2
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +187 -0
- data/Rakefile +13 -0
- data/example/example-gen.rb +43 -0
- data/example/examples.rb +152 -0
- data/lib/qreport/report_runner/time_parse.rb +33 -0
- data/lib/qreport/time_parser.rb +441 -0
- data/lib/qreport/time_parser/examples.rb +64 -0
- data/lib/qreport/time_parser/time_interval.rb +117 -0
- data/lib/qreport/time_parser/time_range.rb +46 -0
- data/lib/qreport/time_parser/time_relative.rb +77 -0
- data/lib/qreport/time_parser/time_unit.rb +110 -0
- data/lib/qreport/time_parser/time_with_unit.rb +155 -0
- data/lib/qreport_time_parser.rb +5 -0
- data/lib/qreport_time_parser/version.rb +3 -0
- data/qreport_time_parser.gemspec +27 -0
- data/spec/lib/qreport/report_runner/time_parse_spec.rb +47 -0
- data/spec/lib/qreport/time_parser/time_interval_spec.rb +45 -0
- data/spec/lib/qreport/time_parser/time_range_spec.rb +14 -0
- data/spec/lib/qreport/time_parser/time_with_unit_spec.rb +26 -0
- data/spec/lib/qreport/time_parser_spec.rb +38 -0
- data/spec/spec_helper.rb +14 -0
- metadata +159 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'qreport_time_parser/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "qreport_time_parser"
|
8
|
+
spec.version = QreportTimeParser::VERSION
|
9
|
+
spec.authors = ["Kurt Stephens"]
|
10
|
+
spec.email = ["ks.github@kurtstephens.com"]
|
11
|
+
spec.description = %q{Parse time expressions with accuracy ranges.}
|
12
|
+
spec.summary = %q{Parse time expressions with accuracy ranges.}
|
13
|
+
spec.homepage = "http://github.com/kstephens/qreport_time_parser"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency 'rake', '>= 0.9.0'
|
23
|
+
spec.add_development_dependency 'rspec', '~> 2.12'
|
24
|
+
spec.add_development_dependency 'simplecov', '~> 0.7.1'
|
25
|
+
spec.add_development_dependency "guard", "~> 1.8.0"
|
26
|
+
spec.add_development_dependency "guard-rspec", "~> 3.0.2"
|
27
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qreport/report_runner/time_parse'
|
3
|
+
|
4
|
+
describe Qreport::ReportRunner::TimeParse do
|
5
|
+
context "time_parse" do
|
6
|
+
subject do
|
7
|
+
Qreport::ReportRunner.time_parser = p
|
8
|
+
Qreport::ReportRunner::TimeParse
|
9
|
+
end
|
10
|
+
let(:p) do
|
11
|
+
p = Qreport::TimeParser.new
|
12
|
+
p.now = now
|
13
|
+
p
|
14
|
+
end
|
15
|
+
let(:now) { ::Time.parse("2011-04-27T08:23:37.981304") }
|
16
|
+
|
17
|
+
it "should leave nil alone." do
|
18
|
+
subject.time_parse(nil).should == nil
|
19
|
+
end
|
20
|
+
it "should leave Time alone." do
|
21
|
+
now = Time.now
|
22
|
+
subject.time_parse(now).should == now
|
23
|
+
end
|
24
|
+
it "should parse :now" do
|
25
|
+
subject.time_parse(:now).should == Qreport::ReportRunner.time_parser.now
|
26
|
+
end
|
27
|
+
it "should parse 'now'." do
|
28
|
+
subject.time_parse("now").should == (now ... now + 1)
|
29
|
+
end
|
30
|
+
it "should parse 'now' with unit_for_now[:now] = :now." do
|
31
|
+
pending "interval should be 0 width"
|
32
|
+
p.unit_for_now[:now] = :now
|
33
|
+
subject.time_parse("now").should == (now ... now)
|
34
|
+
end
|
35
|
+
it "should parse 't' with unit_for_now[:t] = :now." do
|
36
|
+
pending "interval should be 0 width"
|
37
|
+
subject.time_parse("t - 10 sec").should == ((now - 10) ... (now - 10))
|
38
|
+
end
|
39
|
+
it "should parse relative date." do
|
40
|
+
subject.time_parse("yesterday").should == (::Time.parse("2011-04-26T00:00:00") ... ::Time.parse("2011-04-27T00:00:00"))
|
41
|
+
end
|
42
|
+
it "should parse relative time." do
|
43
|
+
subject.time_parse("previous hour").should == (::Time.parse("2011-04-27T07:00:00") ... ::Time.parse("2011-04-27T08:00:00"))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qreport/time_parser/time_interval'
|
3
|
+
|
4
|
+
describe Qreport::TimeParser do
|
5
|
+
describe Qreport::TimeParser::TimeInterval do
|
6
|
+
let(:a) { Qreport::TimeParser::TimeInterval.new(123, nil) }
|
7
|
+
let(:b) { Qreport::TimeParser::TimeInterval.new(123, :sec) }
|
8
|
+
let(:c) { Qreport::TimeParser::TimeInterval.new(123, :min) }
|
9
|
+
let(:d) { Qreport::TimeParser::TimeInterval.new(123, :hr) }
|
10
|
+
it "should handle +" do
|
11
|
+
(a + a).inspect.should == "#<Qreport::TimeParser::TimeInterval 246 :sec>"
|
12
|
+
(a + b).inspect.should == "#<Qreport::TimeParser::TimeInterval 246 :sec>"
|
13
|
+
(a + c).inspect.should == "#<Qreport::TimeParser::TimeInterval 7503 :sec>"
|
14
|
+
(a + d).inspect.should == "#<Qreport::TimeParser::TimeInterval 442923 :sec>"
|
15
|
+
end
|
16
|
+
it "should handle -" do
|
17
|
+
(a - a).inspect.should == "#<Qreport::TimeParser::TimeInterval 0 :sec>"
|
18
|
+
(a - b).inspect.should == "#<Qreport::TimeParser::TimeInterval 0 :sec>"
|
19
|
+
(a - c).inspect.should == "#<Qreport::TimeParser::TimeInterval -7257 :sec>"
|
20
|
+
(a - d).inspect.should == "#<Qreport::TimeParser::TimeInterval -442677 :sec>"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should handle * Numeric" do
|
24
|
+
(a * 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 246 nil>"
|
25
|
+
(b * 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 246 :sec>"
|
26
|
+
(c * 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 246 :min>"
|
27
|
+
(d * 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 246 :hour>"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should handle / Numeric" do
|
31
|
+
(a / 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 61 nil>"
|
32
|
+
(b / 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 61 :sec>"
|
33
|
+
(c / 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 61 :min>"
|
34
|
+
(d / 2).inspect.should == "#<Qreport::TimeParser::TimeInterval 61 :hour>"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should handle / TimeInterval" do
|
38
|
+
(a / a).should == 1
|
39
|
+
(b / a).should == 1
|
40
|
+
(c / a).should == 60
|
41
|
+
(d / a).should == 3600
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qreport/time_parser/time_range'
|
3
|
+
|
4
|
+
describe Qreport::TimeParser do
|
5
|
+
describe Qreport::TimeParser::TimeRange do
|
6
|
+
let(:a) { Qreport::TimeParser.new.parse("2013-01-23T12:34:56.901234Z") }
|
7
|
+
let(:b) { a + 123456 }
|
8
|
+
let(:r) { Qreport::TimeParser::TimeRange.new(a, b) }
|
9
|
+
it "should return inspect" do
|
10
|
+
r.inspect.should == "#<Qreport::TimeParser::TimeRange nil 2013-01-23T12:34:56.000000-06:00 ... nil 2013-01-24T22:52:32.000000-06:00>"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qreport/time_parser/time_with_unit'
|
3
|
+
|
4
|
+
describe Qreport::TimeParser do
|
5
|
+
describe Qreport::TimeParser::TimeWithUnit do
|
6
|
+
let(:a) { Qreport::TimeParser.new.parse("2013-01-23 12:34") }
|
7
|
+
let(:b) { a + a.interval(123456, :sec) }
|
8
|
+
let(:c) { a + a.interval(60) }
|
9
|
+
it "should be a TimeWithUnit" do
|
10
|
+
a.should be_a(Qreport::TimeParser::TimeWithUnit)
|
11
|
+
b.should be_a(Qreport::TimeParser::TimeWithUnit)
|
12
|
+
end
|
13
|
+
it "should handle -" do
|
14
|
+
(b - a).inspect.should == "#<Qreport::TimeParser::TimeInterval 123456.0 nil>"
|
15
|
+
end
|
16
|
+
it "should handle -" do
|
17
|
+
(c - a).inspect.should == "#<Qreport::TimeParser::TimeInterval 3600.0 nil>"
|
18
|
+
end
|
19
|
+
it "should #inspect." do
|
20
|
+
a.inspect.should == "#<Qreport::TimeParser::TimeWithUnit :min 2013-01-23T00:34:00.000000-06:00>"
|
21
|
+
end
|
22
|
+
it "should convert to Range of Time." do
|
23
|
+
a.to_range.should == (a.to_time ... (a.to_time + 60))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'qreport/time_parser'
|
3
|
+
require 'qreport/time_parser/examples'
|
4
|
+
|
5
|
+
describe Qreport::TimeParser do
|
6
|
+
context "intervals" do
|
7
|
+
let(:p) { Qreport::TimeParser.new(:p_interval) }
|
8
|
+
it "should parse intervals." do
|
9
|
+
p.parse("10 seconds").inspect.should == "#<Qreport::TimeParser::TimeInterval 10 :sec>"
|
10
|
+
p.parse("10 centuries").inspect.should == "#<Qreport::TimeParser::TimeInterval 10 :century>"
|
11
|
+
p.parse("hour").inspect.should == "#<Qreport::TimeParser::TimeInterval 1 :hour>"
|
12
|
+
p.parse("2013-01-23T12:34:56.901234Z").inspect.should == "nil"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'examples' do
|
17
|
+
examples = Qreport::TimeParser.examples
|
18
|
+
now = examples[:now]
|
19
|
+
examples.each do | expr, val |
|
20
|
+
next if Symbol === expr
|
21
|
+
it "should translate #{expr.inspect} to #{val.inspect}" do
|
22
|
+
val, time_range = val if Array === val
|
23
|
+
t = nil
|
24
|
+
begin
|
25
|
+
tp = Qreport::TimeParser.new
|
26
|
+
tp.now = now
|
27
|
+
# tp.debug = true if expr =~ /between/i
|
28
|
+
t = tp.parse(expr)
|
29
|
+
rescue Qreport::TimeParser::Error => exc
|
30
|
+
t = exc.inspect
|
31
|
+
end
|
32
|
+
t.to_s.should == val
|
33
|
+
t.to_TimeRange.to_s.should == time_range.to_s if time_range
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: qreport_time_parser
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kurt Stephens
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-06-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.12'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.12'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.7.1
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.7.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.8.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.8.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.0.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 3.0.2
|
97
|
+
description: Parse time expressions with accuracy ranges.
|
98
|
+
email:
|
99
|
+
- ks.github@kurtstephens.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- Gemfile
|
106
|
+
- Guardfile
|
107
|
+
- LICENSE.txt
|
108
|
+
- README.md
|
109
|
+
- Rakefile
|
110
|
+
- example/example-gen.rb
|
111
|
+
- example/examples.rb
|
112
|
+
- lib/qreport/report_runner/time_parse.rb
|
113
|
+
- lib/qreport/time_parser.rb
|
114
|
+
- lib/qreport/time_parser/examples.rb
|
115
|
+
- lib/qreport/time_parser/time_interval.rb
|
116
|
+
- lib/qreport/time_parser/time_range.rb
|
117
|
+
- lib/qreport/time_parser/time_relative.rb
|
118
|
+
- lib/qreport/time_parser/time_unit.rb
|
119
|
+
- lib/qreport/time_parser/time_with_unit.rb
|
120
|
+
- lib/qreport_time_parser.rb
|
121
|
+
- lib/qreport_time_parser/version.rb
|
122
|
+
- qreport_time_parser.gemspec
|
123
|
+
- spec/lib/qreport/report_runner/time_parse_spec.rb
|
124
|
+
- spec/lib/qreport/time_parser/time_interval_spec.rb
|
125
|
+
- spec/lib/qreport/time_parser/time_range_spec.rb
|
126
|
+
- spec/lib/qreport/time_parser/time_with_unit_spec.rb
|
127
|
+
- spec/lib/qreport/time_parser_spec.rb
|
128
|
+
- spec/spec_helper.rb
|
129
|
+
homepage: http://github.com/kstephens/qreport_time_parser
|
130
|
+
licenses:
|
131
|
+
- MIT
|
132
|
+
metadata: {}
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
requirements: []
|
148
|
+
rubyforge_project:
|
149
|
+
rubygems_version: 2.2.2
|
150
|
+
signing_key:
|
151
|
+
specification_version: 4
|
152
|
+
summary: Parse time expressions with accuracy ranges.
|
153
|
+
test_files:
|
154
|
+
- spec/lib/qreport/report_runner/time_parse_spec.rb
|
155
|
+
- spec/lib/qreport/time_parser/time_interval_spec.rb
|
156
|
+
- spec/lib/qreport/time_parser/time_range_spec.rb
|
157
|
+
- spec/lib/qreport/time_parser/time_with_unit_spec.rb
|
158
|
+
- spec/lib/qreport/time_parser_spec.rb
|
159
|
+
- spec/spec_helper.rb
|