qreport_time_parser 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ require "qreport_time_parser/version"
2
+
3
+ module QreportTimeParser
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,3 @@
1
+ module QreportTimeParser
2
+ VERSION = "0.0.2"
3
+ end
@@ -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
+
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+
3
+ gem 'simplecov'
4
+ require 'simplecov'
5
+ SimpleCov.start do
6
+ add_filter "spec/"
7
+ end
8
+
9
+ RSpec.configure do |config|
10
+ config.order = "random"
11
+ end
12
+
13
+ $:.unshift File.expand_path('../../lib', __FILE__)
14
+
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