sparkql 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZDQ2MjhlNzA5NWY1ZGM5YmM4ODEzMGE2Y2Y5ZWQ0YzkzZWYwODMxYQ==
4
+ ZjQzN2Y3YTIyNDJiZmE2YzFiZGVjZDk2OGY5NjhiYTNhMjc3ZTBiZg==
5
5
  data.tar.gz: !binary |-
6
- OTNiMjFjMjA2ODZmMmRmYWNkM2JiNjA4NDA5NjcwZDBhNTVlY2Q5NA==
6
+ MWI4NzJjZWM3YWQwN2IwZjMzYWJiMjIwMWZmMDBjZWU5NjEyODg3NA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MWFhMTU2MDQ1ZjBkZDFhOTAyNGMyNDM4MjZmZDI0ODg0ZTg3NmI1MWRkYWMz
10
- ZTI4ZDgxNTg1YWFhY2ZkOTUxOTM5ZGQ1NWEwMGMzNWVlNDc3NDYyOTMzODEx
11
- YmEwNDNmMGMwZWFkOTk1MzNkZjVkMGVmOGJjYzE0MzViYTczZGY=
9
+ ZDUyMWRiMTY1YWYwMDY1ZjNkODkwMGU2ZGY1OWQ2YTA2MTYwNDNjMzI5ODM3
10
+ MzhiZDU0NzViZjIwYmI0MTc5ZjMyNjQ2OTgzNDFkODk5MzhjNmU1YTI4ZDBm
11
+ YThkMTMxMGQ1MjM5MDRlZGQwZTU2YWQyNTgyZWEzNDM1ZTNiZjE=
12
12
  data.tar.gz: !binary |-
13
- Y2ZlNWFkYThlN2UwMjFiNzI5ZjE5NTJkNmY3OTNlODRhMzY1YjNhNjJmYTRl
14
- ODg5ZTQ4ZDJlMjU0NWRiYmNmYzViNzdjZDY0NmNmYTAxYjc3YTAxOTg0YmEy
15
- YmVjYThkZTg0ZGZiOTdlM2Y0YWYyNzY0YTE4ZTU1Y2QzN2NhMzU=
13
+ ZWQyOGEyZjJmMjhmMmFjODk5ZGM2YWYwMDZjY2FmYWNhNWE3NzU0OWQ0MzM5
14
+ NjAzYzI0ZjJkOGYzNDJkZjdiOGQ3YjY3MWFlMGVkZTdkNGNmNDcwM2JiMThi
15
+ ZTEyNTU5NDYzMzFkMGRiNThkNzkyOTBlNzk4MmVlZWFlNTRjY2I=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ v1.0.2, 2016-04-26 ([changes](https://github.com/sparkapi/sparkql/compare/v1.0.1...v1.0.2))
2
+ -------------------
3
+ * [IMPROVEMENT] Support for new range() function for character ranges
4
+
1
5
  v1.0.1, 2016-02-24 ([changes](https://github.com/sparkapi/sparkql/compare/v1.0.0...v1.0.1))
2
6
  -------------------
3
7
  * [IMPROVEMENT] Support scientific notation for floating point numbers
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.0.2
@@ -1,4 +1,4 @@
1
- require 'time'
1
+ require 'time'
2
2
  require 'geo_ruby'
3
3
  require 'sparkql/geo'
4
4
 
@@ -63,6 +63,10 @@ class Sparkql::FunctionResolver
63
63
  :args => [[:field,:datetime]],
64
64
  :resolve_for_type => true,
65
65
  :return_type => :time
66
+ },
67
+ :range => {
68
+ :args => [:character, :character],
69
+ :return_type => :character
66
70
  }
67
71
  }
68
72
 
@@ -344,6 +348,14 @@ class Sparkql::FunctionResolver
344
348
  }
345
349
  end
346
350
 
351
+ def range(start_str, end_str)
352
+ {
353
+ :type => :character,
354
+ :operator => "Bt",
355
+ :value => [start_str.to_s, end_str.to_s]
356
+ }
357
+ end
358
+
347
359
  private
348
360
 
349
361
  def is_coords?(coord_string)
data/lib/sparkql/lexer.rb CHANGED
@@ -53,7 +53,7 @@ class Sparkql::Lexer < StringScanner
53
53
  check_keywords(@current_token_value)
54
54
  when @current_token_value = scan(CUSTOM_FIELD)
55
55
  [:CUSTOM_FIELD,@current_token_value]
56
- when empty?
56
+ when eos?
57
57
  [false, false] # end of file, \Z don't work with StringScanner
58
58
  else
59
59
  [:UNKNOWN, "ERROR: '#{self.string}'"]
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.4.12
3
+ # This file is automatically generated by Racc 1.4.8
4
4
  # from Racc grammer file "".
5
5
  #
6
6
 
@@ -43,6 +43,7 @@ module Sparkql::ParserTools
43
43
  expression = {:field => field, :operator => operator, :conjunction => 'And',
44
44
  :level => @lexer.level, :block_group => block_group, :custom_field => custom_field}.merge!(field_args)
45
45
  expression = val.merge(expression) unless val.nil?
46
+ expression[:condition] ||= expression[:value]
46
47
  validate_level_depth expression
47
48
  if operator.nil?
48
49
  tokenizer_error(:token => op, :expression => expression,
@@ -127,6 +127,16 @@ class FunctionResolverTest < Test::Unit::TestCase
127
127
  assert_equal GeoRuby::SimpleFeatures::Polygon, value[:value].class
128
128
  assert_equal [[-68.33,35.12], [-68.32,35.12], [-68.32,35.13], [-68.33,35.13], [-68.33,35.12]], value[:value].to_coordinates.first, "#{value[:value].inspect} "
129
129
  end
130
+
131
+ test "range()" do
132
+ f = FunctionResolver.new('range', [{:type => :character, :value => "M01"},
133
+ {:type => :character, :value => "M05"}])
134
+ f.validate
135
+ assert !f.errors?, "Errors #{f.errors.inspect}"
136
+ value = f.call
137
+ assert_equal :character, value[:type]
138
+ assert_equal ["M01", "M05"], value[:value]
139
+ end
130
140
 
131
141
  test "invalid params" do
132
142
  f = FunctionResolver.new('now', [{:type => :character, :value=>'bad value'}])
@@ -173,6 +173,17 @@ class ParserTest < Test::Unit::TestCase
173
173
  assert -5 < test_time - start, "Time range off by more than five seconds #{test_time - start}"
174
174
  end
175
175
 
176
+ def test_function_range
177
+ start = Time.now
178
+ filter = "MapCoordinates Eq range('M01','M04')"
179
+ @parser = Parser.new
180
+ expressions = @parser.parse(filter)
181
+ assert !@parser.errors?, "errors #{@parser.errors.inspect}"
182
+ assert_equal "range('M01','M04')", expressions.first[:condition]
183
+ assert_equal 'M01', expressions.first[:value].first
184
+ assert_equal 'M04', expressions.first[:value][1]
185
+ end
186
+
176
187
  test "function data preserved in expression" do
177
188
  filter = "OriginalEntryTimestamp Ge days(-7)"
178
189
  @parser = Parser.new
@@ -513,7 +524,9 @@ class ParserTest < Test::Unit::TestCase
513
524
  "'A',' b'",
514
525
  "'A','B ',' c'",
515
526
  "radius('35.12 -68.33',1.0)",
516
- "days(-1),days(-7)"
527
+ "days(-1),days(-7)",
528
+ "2016-03-10",
529
+ "2016-03-10T10:01:15.1-06:00"
517
530
  ]
518
531
  conditions.each do |condition|
519
532
  @parser = Parser.new
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.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wade McEwen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-24 00:00:00.000000000 Z
11
+ date: 2016-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: georuby