sparkql 1.1.14 → 1.1.15
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 +8 -8
- data/CHANGELOG.md +4 -0
- data/VERSION +1 -1
- data/lib/sparkql/function_resolver.rb +40 -0
- data/test/unit/function_resolver_test.rb +40 -0
- data/test/unit/parser_test.rb +58 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZWExMjRhNmFjYzM3NTdjYWNkMjdmOWRjYzBhYTJiNGVjMTRjOTViZg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YzhiYTlhMWM0OTRkNWE4ZTFjMTQzYzE4MmNjYzJiZWQ3MDdhMmFiYQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Mzk5MGUxM2M0ZWQ2M2QxMTQ2ZDM3MTMxNTEwODVhZTc0NzJlZWJhYzkzODA4
|
10
|
+
NDIxZTUxNzE4OTYxYmI3MTJiNzkxMGU1MzVjMGQ3ZDdkMzIzZDQ5OGExMmI5
|
11
|
+
YmM1NDU2M2IzM2JhMWU2OTY3Y2NhYzM5MDNiMjllNmVkYjA2NDM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTRjZDEyN2U5N2IwZTA5NGEwZjZjMmEyMzM5ZTA4YWUwMDcxNWEwZTZjODli
|
14
|
+
OWNmZDBjNmU0YzNiNWZiNjc3MWRkYmRjNjc1ZTg4MjNlNWVlNzAzYTVhY2Uz
|
15
|
+
NzU2OTg2NzAzZTA4ZjdmMDFkZDdhMzY3NTU4ZTQxNTRhODkyNDQ=
|
data/CHANGELOG.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.15
|
@@ -74,6 +74,16 @@ class Sparkql::FunctionResolver
|
|
74
74
|
:resolve_for_type => true,
|
75
75
|
:return_type => :integer
|
76
76
|
},
|
77
|
+
:ceiling => {
|
78
|
+
:args => [[:field, :decimal]],
|
79
|
+
:resolve_for_type => true,
|
80
|
+
:return_type => :integer
|
81
|
+
},
|
82
|
+
:floor => {
|
83
|
+
:args => [[:field, :decimal]],
|
84
|
+
:resolve_for_type => true,
|
85
|
+
:return_type => :integer
|
86
|
+
},
|
77
87
|
:startswith => {
|
78
88
|
:args => [:character],
|
79
89
|
:return_type => :startswith
|
@@ -468,6 +478,36 @@ class Sparkql::FunctionResolver
|
|
468
478
|
}
|
469
479
|
end
|
470
480
|
|
481
|
+
def floor_decimal(arg)
|
482
|
+
{
|
483
|
+
:type => :integer,
|
484
|
+
:value => arg.floor.to_s
|
485
|
+
}
|
486
|
+
end
|
487
|
+
|
488
|
+
def floor_field(arg)
|
489
|
+
{
|
490
|
+
:type => :function,
|
491
|
+
:value => "floor",
|
492
|
+
:args => [arg]
|
493
|
+
}
|
494
|
+
end
|
495
|
+
|
496
|
+
def ceiling_decimal(arg)
|
497
|
+
{
|
498
|
+
:type => :integer,
|
499
|
+
:value => arg.ceil.to_s
|
500
|
+
}
|
501
|
+
end
|
502
|
+
|
503
|
+
def ceiling_field(arg)
|
504
|
+
{
|
505
|
+
:type => :function,
|
506
|
+
:value => "ceiling",
|
507
|
+
:args => [arg]
|
508
|
+
}
|
509
|
+
end
|
510
|
+
|
471
511
|
def round_decimal(arg)
|
472
512
|
{
|
473
513
|
:type => :integer,
|
@@ -239,6 +239,46 @@ class FunctionResolverTest < Test::Unit::TestCase
|
|
239
239
|
assert_equal '9999-12-31T23:59:59+00:00', value[:value]
|
240
240
|
end
|
241
241
|
|
242
|
+
test "floor(float)" do
|
243
|
+
f = FunctionResolver.new('floor', [{:type => :decimal, :value => 0.5}])
|
244
|
+
f.validate
|
245
|
+
assert !f.errors?, "Errors #{f.errors.inspect}"
|
246
|
+
value = f.call
|
247
|
+
assert_equal :integer, value[:type]
|
248
|
+
assert_equal '0', value[:value]
|
249
|
+
end
|
250
|
+
|
251
|
+
test "floor(Field)" do
|
252
|
+
f = FunctionResolver.new('floor', [{:type => :field, :value => 'ListPrice'}])
|
253
|
+
f.validate
|
254
|
+
assert !f.errors?, "Errors #{f.errors.inspect}"
|
255
|
+
value = f.call
|
256
|
+
|
257
|
+
assert_equal :function, value[:type]
|
258
|
+
assert_equal 'floor', value[:value]
|
259
|
+
assert_equal "ListPrice", value[:args].first
|
260
|
+
end
|
261
|
+
|
262
|
+
test "ceiling(float)" do
|
263
|
+
f = FunctionResolver.new('ceiling', [{:type => :decimal, :value => 0.5}])
|
264
|
+
f.validate
|
265
|
+
assert !f.errors?, "Errors #{f.errors.inspect}"
|
266
|
+
value = f.call
|
267
|
+
assert_equal :integer, value[:type]
|
268
|
+
assert_equal '1', value[:value]
|
269
|
+
end
|
270
|
+
|
271
|
+
test "ceiling(Field)" do
|
272
|
+
f = FunctionResolver.new('ceiling', [{:type => :field, :value => 'ListPrice'}])
|
273
|
+
f.validate
|
274
|
+
assert !f.errors?, "Errors #{f.errors.inspect}"
|
275
|
+
value = f.call
|
276
|
+
|
277
|
+
assert_equal :function, value[:type]
|
278
|
+
assert_equal 'ceiling', value[:value]
|
279
|
+
assert_equal "ListPrice", value[:args].first
|
280
|
+
end
|
281
|
+
|
242
282
|
test "days()" do
|
243
283
|
d = Date.new(2012,10,20)
|
244
284
|
Date.expects(:today).returns(d)
|
data/test/unit/parser_test.rb
CHANGED
@@ -695,6 +695,64 @@ class ParserTest < Test::Unit::TestCase
|
|
695
695
|
assert_equal(["FieldName"], expression[:function_parameters])
|
696
696
|
end
|
697
697
|
|
698
|
+
def test_ceiling_with_literal
|
699
|
+
filter = "ListPrice Eq ceiling(0.5)"
|
700
|
+
@parser = Parser.new
|
701
|
+
expression = @parser.parse(filter).first
|
702
|
+
assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
|
703
|
+
|
704
|
+
assert_equal :integer, expression[:type]
|
705
|
+
assert_equal "1", expression[:value]
|
706
|
+
|
707
|
+
filter = "ListPrice Eq ceiling(-0.5)"
|
708
|
+
@parser = Parser.new
|
709
|
+
expression = @parser.parse(filter).first
|
710
|
+
assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
|
711
|
+
|
712
|
+
assert_equal :integer, expression[:type]
|
713
|
+
assert_equal "0", expression[:value]
|
714
|
+
end
|
715
|
+
|
716
|
+
def test_ceiling_with_field
|
717
|
+
filter = "ListPrice Eq ceiling(FieldName)"
|
718
|
+
@parser = Parser.new
|
719
|
+
expression = @parser.parse(filter).first
|
720
|
+
assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
|
721
|
+
|
722
|
+
assert_equal 'ceiling', expression[:function_name]
|
723
|
+
assert_equal 'ceiling(FieldName)', expression[:condition]
|
724
|
+
assert_equal(["FieldName"], expression[:function_parameters])
|
725
|
+
end
|
726
|
+
|
727
|
+
def test_floor_with_literal
|
728
|
+
filter = "ListPrice Eq floor(0.5)"
|
729
|
+
@parser = Parser.new
|
730
|
+
expression = @parser.parse(filter).first
|
731
|
+
assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
|
732
|
+
|
733
|
+
assert_equal :integer, expression[:type]
|
734
|
+
assert_equal "0", expression[:value]
|
735
|
+
|
736
|
+
filter = "ListPrice Eq floor(-0.5)"
|
737
|
+
@parser = Parser.new
|
738
|
+
expression = @parser.parse(filter).first
|
739
|
+
assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
|
740
|
+
|
741
|
+
assert_equal :integer, expression[:type]
|
742
|
+
assert_equal "-1", expression[:value]
|
743
|
+
end
|
744
|
+
|
745
|
+
def test_floor_with_field
|
746
|
+
filter = "ListPrice Eq floor(FieldName)"
|
747
|
+
@parser = Parser.new
|
748
|
+
expression = @parser.parse(filter).first
|
749
|
+
assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
|
750
|
+
|
751
|
+
assert_equal 'floor', expression[:function_name]
|
752
|
+
assert_equal 'floor(FieldName)', expression[:condition]
|
753
|
+
assert_equal(["FieldName"], expression[:function_parameters])
|
754
|
+
end
|
755
|
+
|
698
756
|
private
|
699
757
|
|
700
758
|
def parser_errors(filter)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sparkql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wade McEwen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: georuby
|