CloudSesame 0.4.6 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -1
  3. data/cloud_sesame.gemspec +2 -2
  4. data/lib/cloud_sesame/domain/base.rb +40 -30
  5. data/lib/cloud_sesame/query/ast/field_array.rb +4 -5
  6. data/lib/cloud_sesame/query/ast/literal.rb +11 -12
  7. data/lib/cloud_sesame/query/ast/multi_expression_operator.rb +4 -9
  8. data/lib/cloud_sesame/query/ast/near.rb +3 -1
  9. data/lib/cloud_sesame/query/ast/not.rb +3 -1
  10. data/lib/cloud_sesame/query/ast/root.rb +1 -1
  11. data/lib/cloud_sesame/query/ast/single_expression_operator.rb +3 -3
  12. data/lib/cloud_sesame/query/builder.rb +20 -12
  13. data/lib/cloud_sesame/query/domain/block.rb +65 -0
  14. data/lib/cloud_sesame/query/domain/chaining_block.rb +44 -0
  15. data/lib/cloud_sesame/query/domain/literal.rb +39 -0
  16. data/lib/cloud_sesame/query/dsl/block_methods.rb +6 -27
  17. data/lib/cloud_sesame/query/dsl/field_accessors.rb +24 -0
  18. data/lib/cloud_sesame/query/dsl/field_array_methods.rb +5 -9
  19. data/lib/cloud_sesame/query/dsl/filter_query_methods.rb +3 -3
  20. data/lib/cloud_sesame/query/dsl/operator_methods.rb +8 -15
  21. data/lib/cloud_sesame/query/dsl/range_methods.rb +4 -4
  22. data/lib/cloud_sesame/query/dsl/response_methods.rb +1 -1
  23. data/lib/cloud_sesame/query/dsl/scope_accessors.rb +28 -0
  24. data/lib/cloud_sesame/query/error/scope_not_defined.rb +8 -0
  25. data/lib/cloud_sesame/query/scope.rb +21 -0
  26. data/lib/cloud_sesame.rb +14 -7
  27. data/spec/cloud_sesame/query/ast/single_expression_operator_spec.rb +1 -1
  28. data/spec/cloud_sesame/query/dsl/block_methods_spec.rb +54 -70
  29. data/spec/cloud_sesame/query/dsl/{field_methods_spec.rb → field_accessors_spec.rb} +1 -1
  30. data/spec/cloud_sesame_spec.rb +35 -22
  31. metadata +30 -34
  32. data/lib/cloud_sesame/query/ast/block_chaining_relation.rb +0 -30
  33. data/lib/cloud_sesame/query/dsl/base.rb +0 -27
  34. data/lib/cloud_sesame/query/dsl/block_chaining_methods.rb +0 -26
  35. data/lib/cloud_sesame/query/dsl/field_methods.rb +0 -16
  36. data/lib/cloud_sesame/query/dsl/scope_methods.rb +0 -33
  37. data/spec/cloud_sesame/query/ast/block_chaining_relation_spec.rb +0 -44
  38. data/spec/cloud_sesame/query/dsl/base_spec.rb +0 -31
  39. data/spec/cloud_sesame/query/dsl/block_chaining_methods_spec.rb +0 -64
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6cf32f340cf6841019d81977531954030a530ed3
4
- data.tar.gz: d7988194d15066773475a1d31727eb5c9f792f0a
3
+ metadata.gz: e496630f0f95249813a64396a44c5afb138ac417
4
+ data.tar.gz: 8b1ea78470d4452d2328fc3f64b7966064028e3e
5
5
  SHA512:
6
- metadata.gz: 7982d45b231fb2bc993ebabe4f80bd0cab1339e5bdd752ea09ba844e211461167308109a9f5125e13e6d3b8ab544507ee65e5be77976a0e610218ea7cb243933
7
- data.tar.gz: c7b726fe0702ebe5ed7238dfab3e7799346e672feaec162893430c02495d6ec1c6e738e0ffbaf3827c1717cf6981023d94a6bbdb93aff67c4f8fccdb239aeaf0
6
+ metadata.gz: a9fda75e99cc51ab852b0b08603d661c6ae9b554af033c6dbd1ecace4768a9f3d2067ff5ad31d138be426095d4222b697d2436c6e998fb31879932d97c3b5f3a
7
+ data.tar.gz: 398c9345b3d76df8114c2d83077749ed8923f22f4a8f21112b58fed691ca3a8b58d1e430923481e08632434ac3711723a5ae1437ecf77e2630e52e5b1e6da34c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- CloudSesame (0.4.6)
4
+ CloudSesame (0.5.0)
5
5
  activesupport (~> 3.2)
6
6
  aws-sdk (~> 2)
7
7
 
@@ -82,3 +82,6 @@ DEPENDENCIES
82
82
  pry (~> 0)
83
83
  rspec (~> 3)
84
84
  ruby-prof
85
+
86
+ BUNDLED WITH
87
+ 1.11.2
data/cloud_sesame.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'CloudSesame'
3
- s.version = '0.4.6'
4
- s.date = '2016-01-20'
3
+ s.version = '0.5.0'
4
+ s.date = '2016-02-01'
5
5
  s.summary = "AWS CloudSearch Query DSL"
6
6
  s.description = "AWS CloudSearch Query DSL"
7
7
  s.authors = ['Scott Chu', 'Emily Fan', 'Greg Ward', 'David McHoull',
@@ -3,11 +3,14 @@ module CloudSesame
3
3
  class Base
4
4
  extend Forwardable
5
5
 
6
- attr_reader :searchable, :result
7
-
8
6
  def_delegator :client, :config
9
7
 
10
- DEFINITIONS = {}
8
+ attr_accessor :_caller
9
+ attr_reader :searchable
10
+
11
+ def self.definitions
12
+ @definitions ||= {}
13
+ end
11
14
 
12
15
  def initialize(searchable)
13
16
  @searchable = searchable
@@ -27,29 +30,28 @@ module CloudSesame
27
30
 
28
31
  # DEFAULT CONTEXT METHODS
29
32
  # =========================================
33
+
30
34
  def default_size(value)
31
35
  (context[:page] ||= {})[:size] = value
32
36
  end
33
37
 
34
- def field(name, options = {})
35
- field_name = (options[:as] || name)
36
- add_query field_name, options.delete(:query)
37
- add_facet field_name, options.delete(:facet)
38
-
39
- add_field_expression name.to_sym, options
40
- end
41
-
42
38
  def define_sloppiness(value)
43
39
  (context[:query] ||= {})[:sloppiness] = value.to_i
44
40
  end
45
41
 
46
- def define_fuzziness(proc = nil, &block)
47
- block = proc unless block_given?
42
+ def define_fuzziness(&block)
48
43
  (context[:query] ||= {})[:fuzziness] = Query::Node::Fuzziness.new(&block)
49
44
  end
50
45
 
46
+ # TODO
51
47
  def default_scope(proc, &block)
52
- scope :default, proc, &block
48
+ end
49
+
50
+ def field(name, options = {})
51
+ field_name = (options[:as] || name)
52
+ add_query field_name, options.delete(:query)
53
+ add_facet field_name, options.delete(:facet)
54
+ add_field name.to_sym, options
53
55
  end
54
56
 
55
57
  def scope(name, proc = nil, &block)
@@ -59,48 +61,56 @@ module CloudSesame
59
61
 
60
62
  private
61
63
 
62
- def ensure_hash(options)
64
+ def to_hash(options)
63
65
  options.is_a?(Hash) ? options : {}
64
66
  end
65
67
 
66
68
  def add_query(name, options)
67
- ((context[:query_options] ||= {})[:fields] ||= {})[name] = ensure_hash(options) if options
69
+ ((context[:query_options] ||= {})[:fields] ||= {})[name] = to_hash(options) if options
68
70
  end
69
71
 
70
72
  def add_facet(name, options)
71
- (context[:facet] ||= {})[name] = ensure_hash(options) if options
73
+ (context[:facet] ||= {})[name] = to_hash(options) if options
72
74
  end
73
75
 
74
- def add_field_expression(name, options)
75
- overriding_field_expression name, options
76
- create_default_field_expression name, options
77
- create_field_expression_writer name, options
76
+ def add_field(name, options)
77
+ replace_existing_field name, options
78
+ create_default_literal name, options
79
+ create_field_accessor name
80
+ (context[:filter_query][:fields] ||= {})[name] = options
78
81
  end
79
82
 
80
- def overriding_field_expression(name, options)
83
+ def replace_existing_field(name, options)
81
84
  fields = ((context[:filter_query] ||= {})[:fields] ||= {})
82
85
  if (as = options[:as]) && (existing = fields.delete(as))
83
86
  options.merge! existing
84
87
  end
85
88
  end
86
89
 
87
- def create_default_field_expression(name, options)
90
+ def create_default_literal(name, options)
88
91
  if (block = options.delete(:default))
89
- (context[:filter_query][:default] ||= []) << block
92
+ caller = block.binding.eval "self"
93
+ node = Query::Domain::Literal.new(name, options, caller)._eval(&block)
94
+ filter_query_defaults << node
90
95
  end
91
96
  end
92
97
 
93
- def create_field_expression_writer(name, options)
94
- (context[:filter_query][:fields] ||= {})[name] = options
95
- Query::DSL::FieldMethods.send(:define_method, name) do |*values|
96
- literal name, *values
98
+ def filter_query_defaults
99
+ context[:filter_query][:defaults] ||= []
100
+ end
101
+
102
+ def create_field_accessor(name)
103
+ Query::DSL::FieldAccessors.send(:define_method, name) do |*values, &block|
104
+ literal name, *values, &block
97
105
  end
98
106
  end
99
107
 
100
108
  def method_missing(name, *args, &block)
101
109
  builder.send(name, *args, &block)
102
- # rescue NoMethodError
103
- # super
110
+ rescue NoMethodError => e
111
+ _caller.send(name, *args, &block) if _caller
112
+ rescue NoMethodError => e
113
+ super
104
114
  end
105
115
 
106
116
  end
@@ -4,8 +4,8 @@ module CloudSesame
4
4
  class FieldArray < Array
5
5
  include DSL::FieldArrayMethods
6
6
 
7
- attr_accessor :dsl_return
8
- attr_reader :field, :dsl_scope, :dsl_context
7
+ attr_accessor :_scope, :_return
8
+ attr_reader :field
9
9
 
10
10
  def field=(field)
11
11
  parents.clear
@@ -16,9 +16,8 @@ module CloudSesame
16
16
  @parents ||= []
17
17
  end
18
18
 
19
- def dsl_scope=(dsl_scope)
20
- @dsl_context = dsl_scope.context
21
- @dsl_scope = dsl_scope
19
+ def _context
20
+ _scope && _scope.context
22
21
  end
23
22
 
24
23
  def compile
@@ -9,18 +9,21 @@ module CloudSesame
9
9
  attr_accessor :field
10
10
  attr_reader :options, :value
11
11
 
12
- def initialize(field, value, options = {}, &block)
13
- @field = field
14
- @value = Value.parse value if value
15
- @value = Value.parse(ValueEvaluator.new.instance_exec &block) if block_given?
12
+ def initialize(field, value = nil, options = {})
13
+ @field, @options = field, options
14
+ self.value = value
15
+ end
16
16
 
17
- @options = options
18
- is_included
17
+ def value=(value)
18
+ if value
19
+ @value = Value.parse value
20
+ is_included
21
+ end
19
22
  end
20
23
 
21
24
  def is_for(field, options = {})
22
25
  @field = field
23
- @options = options.merge @options
26
+ @options.merge! options
24
27
  end
25
28
 
26
29
  def is_included
@@ -36,7 +39,7 @@ module CloudSesame
36
39
  end
37
40
 
38
41
  def compile(detailed = false)
39
- detailed ? detailed_format : standard_format
42
+ (detailed ? detailed_format : standard_format) if value
40
43
  end
41
44
 
42
45
  private
@@ -57,10 +60,6 @@ module CloudSesame
57
60
  "'#{ data.gsub(SINGLE_QUATE) { ESCAPE_QUATE } }'"
58
61
  end
59
62
 
60
- class ValueEvaluator
61
- include DSL::RangeMethods
62
- end
63
-
64
63
  end
65
64
  end
66
65
  end
@@ -2,20 +2,15 @@ module CloudSesame
2
2
  module Query
3
3
  module AST
4
4
  class MultiExpressionOperator < Operator
5
- include DSL::Base
6
- include DSL::BlockMethods
7
- include DSL::FieldMethods
8
- include DSL::FilterQueryMethods
9
- include DSL::OperatorMethods
10
- include DSL::RangeMethods
11
- include DSL::ScopeMethods
12
5
 
13
6
  def children
14
7
  @children ||= create_children
15
8
  end
16
9
 
17
10
  def compile
18
- "(#{ symbol }#{ boost } #{ children.compile })" unless children.empty?
11
+ if !children.empty? && (compiled = children.compile) && !compiled.empty?
12
+ "(#{ symbol }#{ boost } #{ compiled })"
13
+ end
19
14
  end
20
15
 
21
16
  def <<(object)
@@ -30,7 +25,7 @@ module CloudSesame
30
25
 
31
26
  def create_children
32
27
  array = FieldArray.new
33
- array.dsl_scope = dsl_scope
28
+ array._scope = self
34
29
  array
35
30
  end
36
31
 
@@ -6,7 +6,9 @@ module CloudSesame
6
6
  SYMBOL = :near
7
7
 
8
8
  def compile(detailed = nil)
9
- "(#{ symbol }#{ boost }#{ distance } #{ child.compile operator_detailed })" if child
9
+ if child && (compiled = child.compile operator_detailed) && !compiled.empty?
10
+ "(#{ symbol }#{ boost }#{ distance } #{ compiled })"
11
+ end
10
12
  end
11
13
 
12
14
  def distance
@@ -10,7 +10,9 @@ module CloudSesame
10
10
  end
11
11
 
12
12
  def compile
13
- "(#{ symbol }#{ boost } #{ child.compile })" if child
13
+ if child && (compiled = child.compile) && !compiled.empty?
14
+ "(#{ symbol }#{ boost } #{ compiled })"
15
+ end
14
16
  end
15
17
 
16
18
  end
@@ -16,7 +16,7 @@ module CloudSesame
16
16
 
17
17
  def create_children
18
18
  array = FieldArray.new(context[:defaults] || [])
19
- array.dsl_scope = dsl_scope
19
+ array._scope = self
20
20
  array
21
21
  end
22
22
 
@@ -2,8 +2,6 @@ module CloudSesame
2
2
  module Query
3
3
  module AST
4
4
  class SingleExpressionOperator < Operator
5
- include DSL::Base
6
- include DSL::BlockMethods
7
5
 
8
6
  DETAILED = false
9
7
 
@@ -22,7 +20,9 @@ module CloudSesame
22
20
  end
23
21
 
24
22
  def compile(detailed = nil)
25
- "(#{ symbol }#{ boost } #{ child.compile operator_detailed })" if child
23
+ if child && (compiled = child.compile operator_detailed) && !compiled.empty?
24
+ "(#{ symbol }#{ boost } #{ compiled })"
25
+ end
26
26
  end
27
27
 
28
28
  def operator_detailed
@@ -1,20 +1,17 @@
1
1
  module CloudSesame
2
2
  module Query
3
3
  class Builder
4
- include DSL::Base
5
- include DSL::PageMethods
6
4
  include DSL::QueryMethods
7
- include DSL::ReturnMethods
8
- include DSL::SortMethods
9
-
10
- # # Filter Query DSL
5
+ include DSL::ResponseMethods
11
6
  include DSL::BlockMethods
12
- include DSL::FieldMethods
7
+ include DSL::FieldAccessors
13
8
  include DSL::FilterQueryMethods
14
- include DSL::ScopeMethods
15
- include DSL::ResponseMethods
9
+ include DSL::ScopeAccessors
10
+ include DSL::PageMethods
11
+ include DSL::SortMethods
12
+ include DSL::ReturnMethods
16
13
 
17
- attr_reader :context, :searchable
14
+ attr_reader :context
18
15
 
19
16
  def initialize(context, searchable)
20
17
  @context = Context.new.duplicate context
@@ -35,11 +32,22 @@ module CloudSesame
35
32
 
36
33
  private
37
34
 
38
- def dsl_scope
35
+ def _block_domain(block)
36
+ if block
37
+ caller = block.binding.eval("self")
38
+ Domain::Block.new caller, _context
39
+ end
40
+ end
41
+
42
+ def _scope
39
43
  request.filter_query.root
40
44
  end
41
45
 
42
- def dsl_return(node = nil)
46
+ def _context
47
+ _scope.context
48
+ end
49
+
50
+ def _return
43
51
  self
44
52
  end
45
53
 
@@ -0,0 +1,65 @@
1
+ module CloudSesame
2
+ module Query
3
+ module Domain
4
+ class Block
5
+ include DSL::BlockMethods
6
+ include DSL::FieldAccessors
7
+ include DSL::ScopeAccessors
8
+ include DSL::OperatorMethods
9
+ include DSL::RangeMethods
10
+ include DSL::FilterQueryMethods
11
+
12
+ attr_reader :_caller, :_context, :_scopes
13
+
14
+ def initialize(_caller, _context)
15
+ @_caller = _caller
16
+ @_context = _context
17
+ @_scopes = []
18
+
19
+ @_caller.instance_variables.each do |name|
20
+ value = @_caller.instance_variable_get name
21
+ instance_variable_set name, value
22
+ end
23
+
24
+ end
25
+
26
+ def _eval(node, _scope, _return = _scope, &block)
27
+ _scopes.push node
28
+
29
+ # must build the subtree before push (<<) to it's
30
+ # parents (_scope) in order for the parent properly
31
+ # propagate message down to all the children.
32
+ # ===============================================
33
+ instance_eval &block
34
+ _scope << node
35
+
36
+ _scopes.pop
37
+ _scope.is_a?(AST::Root) ? _return : node
38
+ end
39
+
40
+ def _scope
41
+ _scopes[-1]
42
+ end
43
+
44
+ def _return
45
+ _scope
46
+ end
47
+
48
+ def _block_domain(block)
49
+ self
50
+ end
51
+
52
+ private
53
+
54
+ # ACCESS CALLER'S METHODS
55
+ # =========================================
56
+ def method_missing(name, *args, &block)
57
+ _caller.send(name, *args, &block)
58
+ rescue NoMethodError
59
+ super
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,44 @@
1
+ module CloudSesame
2
+ module Query
3
+ module Domain
4
+ class ChainingBlock
5
+
6
+ attr_reader :_orphan_node, :_scope, :_return
7
+
8
+ def initialize(_orphan_node, _scope, _return, _block_domain)
9
+ @_orphan_node = _orphan_node
10
+ @_scope = _scope
11
+ @_return = _return
12
+ @_block_domain = _block_domain
13
+ end
14
+
15
+ # CLAUSE: NOT
16
+ # =========================================
17
+
18
+ def not(options = {}, &block)
19
+ raise missing_block unless block_given?
20
+
21
+ node = AST::Not.new _scope.context, options
22
+ _block_domain(block)._eval _orphan_node, node, &block
23
+ _scope << node
24
+
25
+ _return || node
26
+ end
27
+
28
+ private
29
+
30
+ def _block_domain(block)
31
+ @_block_domain ||= (
32
+ caller = block.binding.eval("self")
33
+ Domain::Block.new caller, _scope.context
34
+ )
35
+ end
36
+
37
+ def missing_block
38
+ Error::InvalidSyntax.new("#{ orphan_node.class::SYMBOL }.not requires a block")
39
+ end
40
+
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,39 @@
1
+ module CloudSesame
2
+ module Query
3
+ module Domain
4
+ class Literal
5
+ include DSL::RangeMethods
6
+
7
+ attr_reader :_name, :_options, :_caller
8
+
9
+ def initialize(_name, _options, _caller)
10
+ @_name = _name
11
+ @_options = _options
12
+ @_caller = _caller
13
+
14
+ _caller.instance_variables.each do |name|
15
+ value = _caller.instance_variable_get name
16
+ instance_variable_set name, value
17
+ end
18
+ end
19
+
20
+ def _eval(&block)
21
+ if block_given? && (_value = instance_exec &block)
22
+ AST::Literal.new _name, _value, _options
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ # ACCESS CALLER'S METHODS
29
+ # =========================================
30
+ def method_missing(name, *args, &block)
31
+ _caller.send(name, *args, &block)
32
+ rescue NoMethodError
33
+ super
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end
@@ -3,12 +3,10 @@ module CloudSesame
3
3
  module DSL
4
4
  module BlockMethods
5
5
 
6
- attr_accessor :orphan_node
7
-
8
6
  # CLAUSE: AND
9
7
  # =========================================
10
8
  def and(options = {}, &block)
11
- block_style_dsl AST::And, options, &block
9
+ _block_style_clause AST::And, options, &block
12
10
  end
13
11
 
14
12
  alias_method :all, :and
@@ -17,7 +15,7 @@ module CloudSesame
17
15
  # CLAUSE: OR
18
16
  # =========================================
19
17
  def or(options = {}, &block)
20
- block_style_dsl AST::Or, options, &block
18
+ _block_style_clause AST::Or, options, &block
21
19
  end
22
20
 
23
21
  alias_method :any, :or
@@ -25,34 +23,15 @@ module CloudSesame
25
23
 
26
24
  private
27
25
 
28
- def block_style_dsl(klass, options, &block)
29
- node = klass.new dsl_context, options
26
+ def _block_style_clause(klass, options, &block)
27
+ node = klass.new _context, options
30
28
  if block_given?
31
- extract_caller_from block if on_root_level?
32
- node.instance_eval &block
33
- dsl_scope << node
34
- dsl_return node
29
+ _block_domain(block)._eval node, _scope, _return, &block
35
30
  else
36
- chaining_relation_for(node)
31
+ Domain::ChainingBlock.new node, _scope, (_return if _scope.is_a?(AST::Root)), _block_domain(nil)
37
32
  end
38
33
  end
39
34
 
40
- def chaining_relation_for(node)
41
- AST::BlockChainingRelation.new(dsl_scope, dsl_return, node)
42
- end
43
-
44
- def on_root_level?
45
- dsl_scope.is_a?(AST::Root)
46
- end
47
-
48
- def extract_caller_from(block)
49
- dsl_context[:caller] = block.binding.eval "self"
50
- end
51
-
52
- def method_missing(name, *args, &block)
53
- dsl_caller ? dsl_caller.send(name, *args, &block) : super
54
- end
55
-
56
35
  end
57
36
  end
58
37
  end
@@ -0,0 +1,24 @@
1
+ module CloudSesame
2
+ module Query
3
+ module DSL
4
+ module FieldAccessors
5
+
6
+ def literal(name, *values, &block)
7
+ name = name.to_sym
8
+
9
+ if block_given?
10
+ caller = block.binding.eval "self"
11
+ options = _scope.context[:fields][name]
12
+ node = Domain::Literal.new(name, options, caller)._eval(&block)
13
+ values << node
14
+ end
15
+
16
+ _scope.children.field = name
17
+ _scope.children._return = _return
18
+ _scope.children.insert values
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -38,10 +38,10 @@ module CloudSesame
38
38
 
39
39
  def insert(values = [])
40
40
  values.each do |value|
41
- dsl_scope << create_parents(build_literal(value))
41
+ _scope << create_parents(build_literal(value))
42
42
  end
43
43
  parents.clear unless values.empty?
44
- dsl_return != dsl_scope ? dsl_return : self
44
+ _return != _scope ? _return : self
45
45
  end
46
46
 
47
47
  private
@@ -52,7 +52,7 @@ module CloudSesame
52
52
 
53
53
  def create_parents(child)
54
54
  parents.compact.each do |parent|
55
- node = parent[:klass].new dsl_context, parent[:options]
55
+ node = parent[:klass].new _context, parent[:options]
56
56
  node << child
57
57
  child = node
58
58
  end
@@ -61,17 +61,13 @@ module CloudSesame
61
61
 
62
62
  def build_literal(value)
63
63
  if value.kind_of?(AST::SingleExpressionOperator) || value.is_a?(AST::Literal)
64
- value.is_for field, field_options
64
+ value.is_for field, _context[:fields][field]
65
65
  value
66
66
  else
67
- AST::Literal.new field, value, field_options
67
+ AST::Literal.new field, value, _context[:fields][field]
68
68
  end
69
69
  end
70
70
 
71
- def field_options
72
- dsl_context[:fields][field]
73
- end
74
-
75
71
  end
76
72
  end
77
73
  end