CloudSesame 0.7.4 → 0.7.5
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 +4 -4
- data/Gemfile.lock +1 -1
- data/Guardfile +2 -2
- data/cloud_sesame.gemspec +1 -1
- data/coverage/.last_run.json +1 -1
- data/coverage/.resultset.json +233 -1307
- data/lib/cloud_sesame/query/ast/abstract/value.rb +10 -0
- data/lib/cloud_sesame/query/ast/date_value.rb +21 -3
- data/lib/cloud_sesame/query/ast/value.rb +1 -1
- data/spec/cloud_sesame/query/ast/date_value_spec.rb +49 -0
- data/spec/profiling_spec.rb +1 -1
- metadata +3 -1
@@ -8,6 +8,8 @@ module CloudSesame
|
|
8
8
|
|
9
9
|
RANGE_FORMAT = Regexp.new(/\A(\[|{)(.*),(.*)(\}|\])\z/).freeze
|
10
10
|
DIGIT_FORMAT = Regexp.new(/\A\d+(.\d+)?\z/).freeze
|
11
|
+
DATETIME_FORMAT = Regexp.new(/\d+{4}-\d+{2}-\d+{2}T\d+{2}:\d+{2}:\d+{2}/).freeze
|
12
|
+
DATE_FORMAT = Regexp.new(/\d+{4}-\d+{2}-\d+{2}/).freeze
|
11
13
|
|
12
14
|
attr_reader :value, :changed, :compiled
|
13
15
|
|
@@ -31,6 +33,14 @@ module CloudSesame
|
|
31
33
|
value.kind_of?(Date) || value.kind_of?(Time)
|
32
34
|
end
|
33
35
|
|
36
|
+
def self.string_datetime?(value)
|
37
|
+
value.is_a?(String) && DATETIME_FORMAT =~ value
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.string_date?(value)
|
41
|
+
value.is_a?(String) && DATE_FORMAT =~ value
|
42
|
+
end
|
43
|
+
|
34
44
|
def initialize(value, type = nil)
|
35
45
|
self.value = value
|
36
46
|
@type = type
|
@@ -3,10 +3,20 @@ module CloudSesame
|
|
3
3
|
module AST
|
4
4
|
class DateValue < StringValue
|
5
5
|
|
6
|
-
|
6
|
+
COMPILE_FORMAT = '%FT%TZ'.freeze
|
7
|
+
DATETIME_FORMAT = '%FT%T'.freeze
|
8
|
+
DATE_FORMAT = '%F'.freeze
|
7
9
|
|
8
10
|
def self.parse(value)
|
9
|
-
|
11
|
+
if value.kind_of?(RangeValue)
|
12
|
+
value.type = self
|
13
|
+
return value
|
14
|
+
end
|
15
|
+
|
16
|
+
range?(value) || string_range?(value) ? RangeValue.new(value, self) :
|
17
|
+
string_datetime?(value) ? new(parse_datetime(value)) :
|
18
|
+
string_date?(value) ? new(parse_date(value)) :
|
19
|
+
new(value)
|
10
20
|
end
|
11
21
|
|
12
22
|
def to_s
|
@@ -15,12 +25,20 @@ module CloudSesame
|
|
15
25
|
|
16
26
|
private
|
17
27
|
|
28
|
+
def self.parse_datetime(string)
|
29
|
+
DateTime.strptime(string, DATETIME_FORMAT)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.parse_date(string)
|
33
|
+
Date.strptime(string, DATE_FORMAT)
|
34
|
+
end
|
35
|
+
|
18
36
|
def recompile(value)
|
19
37
|
super strip format value
|
20
38
|
end
|
21
39
|
|
22
40
|
def format(value)
|
23
|
-
value.strftime
|
41
|
+
value.strftime COMPILE_FORMAT
|
24
42
|
end
|
25
43
|
|
26
44
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module CloudSesame
|
2
|
+
module Query
|
3
|
+
module AST
|
4
|
+
describe DateValue do
|
5
|
+
|
6
|
+
subject { DateValue.parse(value) }
|
7
|
+
|
8
|
+
describe '.parse' do
|
9
|
+
context 'when value is a date or datetime object' do
|
10
|
+
let(:value) { DateTime.now }
|
11
|
+
it 'should return an DateValue object' do
|
12
|
+
expect(subject).to be_kind_of(DateValue)
|
13
|
+
expect(subject.value).to be_kind_of(Date)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
context 'when value is a datetime in string format' do
|
17
|
+
let(:value) { "2016-03-09T13:50:41+00:00" }
|
18
|
+
it 'should return an DateValue object' do
|
19
|
+
expect(subject).to be_kind_of(DateValue)
|
20
|
+
expect(subject.value).to be_kind_of(Date)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
context 'when value is a date in string format' do
|
24
|
+
let(:value) { "2016-03-09" }
|
25
|
+
it 'should return an DateValue object' do
|
26
|
+
expect(subject).to be_kind_of(DateValue)
|
27
|
+
expect(subject.value).to be_kind_of(Date)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
context 'when value is a RangeValue object' do
|
31
|
+
let(:value) { RangeValue.new.gt(Date.today).lt(Date.today + 3) }
|
32
|
+
it 'should return an RangeValue object contains DateValue inside' do
|
33
|
+
expect(subject).to be_kind_of(RangeValue)
|
34
|
+
expect(subject.value[1, 2]).to include(DateValue)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
context 'when value is a range object' do
|
38
|
+
let(:value) { "[2016-03-09T13:50:41+00:00,2016-03-10]" }
|
39
|
+
it 'should return an RangeValue object contains DateValue inside' do
|
40
|
+
expect(subject).to be_kind_of(RangeValue)
|
41
|
+
expect(subject.value[1, 2]).to include(DateValue)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/spec/profiling_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: CloudSesame
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Chu
|
@@ -230,6 +230,7 @@ files:
|
|
230
230
|
- spec/cloud_sesame/query/ast/abstract/single_expression_operator_spec.rb
|
231
231
|
- spec/cloud_sesame/query/ast/abstract/value_spec.rb
|
232
232
|
- spec/cloud_sesame/query/ast/and_spec.rb
|
233
|
+
- spec/cloud_sesame/query/ast/date_value_spec.rb
|
233
234
|
- spec/cloud_sesame/query/ast/numeric_value_spec.rb
|
234
235
|
- spec/cloud_sesame/query/ast/or_spec.rb
|
235
236
|
- spec/cloud_sesame/query/ast/range_value_spec.rb
|
@@ -293,6 +294,7 @@ test_files:
|
|
293
294
|
- spec/cloud_sesame/query/ast/abstract/single_expression_operator_spec.rb
|
294
295
|
- spec/cloud_sesame/query/ast/abstract/value_spec.rb
|
295
296
|
- spec/cloud_sesame/query/ast/and_spec.rb
|
297
|
+
- spec/cloud_sesame/query/ast/date_value_spec.rb
|
296
298
|
- spec/cloud_sesame/query/ast/numeric_value_spec.rb
|
297
299
|
- spec/cloud_sesame/query/ast/or_spec.rb
|
298
300
|
- spec/cloud_sesame/query/ast/range_value_spec.rb
|