Skip to content

Commit

Permalink
API-7308 rename function names to sparkql conventions. Review tweaks
Browse files Browse the repository at this point in the history
  • Loading branch information
wlmcewen committed May 5, 2021
1 parent d619113 commit 75d5589
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 26 deletions.
9 changes: 0 additions & 9 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,3 @@
source 'http://rubygems.org'

if ENV['BUILD_ROLE'] == 'ruby27'
ruby '2.7.2'
elsif ENV['BUILD_ROLE'] == 'ruby23'
ruby '2.3.3'
else
ruby '2.5.8'
end

gemspec

4 changes: 2 additions & 2 deletions lib/sparkql/function_resolver.rb
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ class FunctionResolver
resolve_for_type: true,
return_type: :integer
},
day_of_year: {
doy: {
args: [%i[field datetime date]],
resolve_for_type: true,
return_type: :integer
Expand All @@ -186,7 +186,7 @@ class FunctionResolver
resolve_for_type: true,
return_type: :integer
},
day_of_week: {
dow: {
args: [%i[field datetime date]],
resolve_for_type: true,
return_type: :integer
Expand Down
4 changes: 2 additions & 2 deletions test/unit/function_resolver_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -582,8 +582,8 @@ class FunctionResolverTest < Test::Unit::TestCase
end
end

test 'day_of_year() and day_of_week()' do
%w[day_of_year day_of_week].each do |function|
test 'day of week and day of year parse' do
%w[doy dow].each do |function|
f = FunctionResolver.new(function, [{ type: :field, value: 'OriginalEntryTimestamp' }])
f.validate
assert !f.errors?, "Errors #{f.errors.inspect}"
Expand Down
60 changes: 47 additions & 13 deletions test/unit/parser_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -125,19 +125,23 @@ def test_function_years
end

def test_function_days
d = Date.today
start = Time.utc(d.year,d.month,d.day,0,0,0)
filter = "OriginalEntryTimestamp Ge days(-7)"
dt = DateTime.new(2021, 2, 22, 0, 0, 0, 0)
DateTime.expects(:now).returns(dt)
@parser = Parser.new
expressions = @parser.parse(filter)
assert !@parser.errors?, "errors #{@parser.errors.inspect}"
assert_equal 'days(-7)', expressions.first[:condition]

vals = expressions.first[:value].split('-')
expressions = @parser.parse "ExpirationDate Gt days(10)"
assert !@parser.errors?
assert_equal "2021-03-04", expressions.first[:value]
assert_equal 'days(10)', expressions.first[:condition]
end

test_time = Time.utc(vals[0].to_i, vals[1].to_i, vals[2].to_i)

assert (-605000 < test_time - start && -604000 > test_time - start), "Time range off by more than five seconds #{test_time - start} '#{test_time} - #{start}'"
def test_function_weekdays
dt = DateTime.new(2021, 2, 22, 0, 0, 0, 0)
DateTime.expects(:now).returns(dt)
@parser = Parser.new
expressions = @parser.parse "ExpirationDate Gt weekdays(10)"
assert !@parser.errors?
assert_equal "2021-03-08", expressions.first[:value]
assert_equal 'weekdays(10)', expressions.first[:condition]
end

def test_function_now
Expand Down Expand Up @@ -388,10 +392,40 @@ def test_function_date
test "invalid regex" do
filter = "ParcelNumber Eq regex('[1234', '')"
@parser = Parser.new
expressions = @parser.parse(filter)
@parser.parse(filter)
assert @parser.errors?, "Parser error expected due to invalid regex"
end

test "doy function parses" do
filter = "doy(DatetimeField) Eq 2012"
@parser = Parser.new
expressions = @parser.parse(filter)
assert !@parser.errors?, @parser.errors.inspect
function = expressions.first[:field_manipulations]
assert_equal 'doy', function[:function_name]
assert_equal 'DatetimeField', function[:function_parameters].first
end

test "dow function parses" do
filter = "dow(DatetimeField) Eq 7"
@parser = Parser.new
expressions = @parser.parse(filter)
assert !@parser.errors?, @parser.errors.inspect
function = expressions.first[:field_manipulations]
assert_equal 'dow', function[:function_name]
assert_equal 'DatetimeField', function[:function_parameters].first
end

test "weekdays function resolves" do
filter = "doy(DatetimeField) Eq 2012"
@parser = Parser.new
expressions = @parser.parse(filter)
assert !@parser.errors?, @parser.errors.inspect
function = expressions.first[:field_manipulations]
assert_equal 'doy', function[:function_name]
assert_equal 'DatetimeField', function[:function_parameters].first
end

test "allow timezone offsets" do
values = [
"2013-07-26",
Expand All @@ -418,7 +452,7 @@ def test_function_date
assert_equal expressions.first[:value], value, "#{value} failed"
end
end

test "Location Eq polygon()" do
filter = "Location Eq polygon('35.12 -68.33, 35.13 -68.33, 35.13 -68.32, 35.12 -68.32')"
@parser = Parser.new
Expand Down

0 comments on commit 75d5589

Please sign in to comment.