arelastic 0.0.1

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.
Files changed (72) hide show
  1. data/README.rdoc +0 -0
  2. data/lib/arelastic/arities/binary.rb +31 -0
  3. data/lib/arelastic/arities/polyadic.rb +26 -0
  4. data/lib/arelastic/arities/unary.rb +27 -0
  5. data/lib/arelastic/arities.rb +3 -0
  6. data/lib/arelastic/builders/facet.rb +19 -0
  7. data/lib/arelastic/builders/filter.rb +77 -0
  8. data/lib/arelastic/builders/query.rb +39 -0
  9. data/lib/arelastic/builders/search.rb +25 -0
  10. data/lib/arelastic/builders/sort.rb +15 -0
  11. data/lib/arelastic/builders.rb +4 -0
  12. data/lib/arelastic/facets/facet.rb +6 -0
  13. data/lib/arelastic/facets/histogram.rb +19 -0
  14. data/lib/arelastic/facets/range.rb +0 -0
  15. data/lib/arelastic/facets/terms.rb +22 -0
  16. data/lib/arelastic/facets.rb +5 -0
  17. data/lib/arelastic/filters/and.rb +7 -0
  18. data/lib/arelastic/filters/exists.rb +15 -0
  19. data/lib/arelastic/filters/filter.rb +17 -0
  20. data/lib/arelastic/filters/ids.rb +16 -0
  21. data/lib/arelastic/filters/limit.rb +15 -0
  22. data/lib/arelastic/filters/missing.rb +20 -0
  23. data/lib/arelastic/filters/not.rb +15 -0
  24. data/lib/arelastic/filters/or.rb +7 -0
  25. data/lib/arelastic/filters/prefix.rb +7 -0
  26. data/lib/arelastic/filters/range.rb +7 -0
  27. data/lib/arelastic/filters/term.rb +7 -0
  28. data/lib/arelastic/filters/terms.rb +7 -0
  29. data/lib/arelastic/filters.rb +13 -0
  30. data/lib/arelastic/nodes/hash_group.rb +18 -0
  31. data/lib/arelastic/nodes/node.rb +17 -0
  32. data/lib/arelastic/nodes.rb +2 -0
  33. data/lib/arelastic/queries/constant_score.rb +7 -0
  34. data/lib/arelastic/queries/field.rb +7 -0
  35. data/lib/arelastic/queries/filtered.rb +15 -0
  36. data/lib/arelastic/queries/match_all.rb +9 -0
  37. data/lib/arelastic/queries/prefix.rb +7 -0
  38. data/lib/arelastic/queries/query.rb +6 -0
  39. data/lib/arelastic/queries/query_string.rb +17 -0
  40. data/lib/arelastic/queries/term.rb +7 -0
  41. data/lib/arelastic/queries/terms.rb +7 -0
  42. data/lib/arelastic/queries.rb +10 -0
  43. data/lib/arelastic/searches/facets.rb +14 -0
  44. data/lib/arelastic/searches/filter.rb +7 -0
  45. data/lib/arelastic/searches/from.rb +7 -0
  46. data/lib/arelastic/searches/query.rb +7 -0
  47. data/lib/arelastic/searches/search.rb +6 -0
  48. data/lib/arelastic/searches/size.rb +7 -0
  49. data/lib/arelastic/searches/sort.rb +7 -0
  50. data/lib/arelastic/searches.rb +8 -0
  51. data/lib/arelastic.rb +8 -0
  52. data/test/arelastic/arities/binary_test.rb +12 -0
  53. data/test/arelastic/arities/polyadic_test.rb +13 -0
  54. data/test/arelastic/arities/unary_test.rb +12 -0
  55. data/test/arelastic/builders/filter_test.rb +56 -0
  56. data/test/arelastic/builders/query_test.rb +45 -0
  57. data/test/arelastic/builders/search_test.rb +4 -0
  58. data/test/arelastic/builders/sort_test.rb +5 -0
  59. data/test/arelastic/facets/histogram_test.rb +17 -0
  60. data/test/arelastic/facets/terms_test.rb +17 -0
  61. data/test/arelastic/filters/exists_test.rb +9 -0
  62. data/test/arelastic/filters/filter_test.rb +30 -0
  63. data/test/arelastic/filters/ids_test.rb +9 -0
  64. data/test/arelastic/filters/missing_test.rb +15 -0
  65. data/test/arelastic/filters/not_test.rb +9 -0
  66. data/test/arelastic/nodes/node_test.rb +18 -0
  67. data/test/arelastic/queries/filtered_test.rb +10 -0
  68. data/test/arelastic/queries/match_all_test.rb +10 -0
  69. data/test/arelastic/queries/query_string_test.rb +10 -0
  70. data/test/arelastic/queries/query_test.rb +5 -0
  71. data/test/helper.rb +4 -0
  72. metadata +117 -0
data/README.rdoc ADDED
File without changes
@@ -0,0 +1,31 @@
1
+ module Arelastic
2
+ module Arities
3
+ module Binary
4
+ def binary(predicate)
5
+ @predicate = predicate
6
+ include Methods
7
+
8
+ singleton_class.class_eval do
9
+ attr_reader :predicate
10
+ end
11
+
12
+ attr_reader :field, :value
13
+ end
14
+
15
+ module Methods
16
+ def initialize field, value
17
+ @field = field
18
+ @value = value
19
+ end
20
+
21
+ def as_elastic
22
+ {
23
+ self.class.predicate => {
24
+ field => convert_to_elastic(value)
25
+ }
26
+ }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,26 @@
1
+ module Arelastic
2
+ module Arities
3
+ module Polyadic
4
+ def polyadic(operator)
5
+ @operator = operator
6
+ include Methods
7
+
8
+ singleton_class.class_eval do
9
+ attr_reader :operator
10
+ end
11
+
12
+ attr_reader :children
13
+ end
14
+
15
+ module Methods
16
+ def initialize children
17
+ @children = children
18
+ end
19
+
20
+ def as_elastic
21
+ {self.class.operator => children.map { |child| convert_to_elastic(child) }}
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ module Arelastic
2
+ module Arities
3
+ module Unary
4
+ def unary(field, options = {})
5
+ @field = field
6
+ include Methods
7
+
8
+ singleton_class.class_eval do
9
+ attr_reader :field
10
+ end
11
+
12
+ attr_reader :expr
13
+ end
14
+
15
+ module Methods
16
+ def initialize expr
17
+ # raise "#{expr.inspect} must be an Arelastic::Filters::Filter" unless expr.is_a?(Arelastic::Filters::Filter)
18
+ @expr = expr
19
+ end
20
+
21
+ def as_elastic
22
+ {self.class.field => convert_to_elastic(expr)}
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ require 'arelastic/arities/binary'
2
+ require 'arelastic/arities/polyadic'
3
+ require 'arelastic/arities/unary'
@@ -0,0 +1,19 @@
1
+ module Arelastic
2
+ module Builders
3
+ class Facet < Struct.new :name
4
+ class << self
5
+ def [](name)
6
+ new(name)
7
+ end
8
+ end
9
+
10
+ def terms field, options = {}
11
+ Arelastic::Facets::Terms.new name, field, options
12
+ end
13
+
14
+ def histogram options
15
+ Arelastic::Facets::Histogram.new name, options
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,77 @@
1
+ module Arelastic
2
+ module Builders
3
+ class Filter < Struct.new :field
4
+ class << self
5
+ def [](field)
6
+ new(field)
7
+ end
8
+
9
+ def ids *ids
10
+ Arelastic::Filters::Ids.new ids.flatten
11
+ end
12
+ end
13
+
14
+ def eq other
15
+ Arelastic::Filters::Term.new field, other
16
+ end
17
+
18
+ def not_eq other
19
+ self.not eq(other)
20
+ end
21
+
22
+ def in other
23
+ case other
24
+ when Range
25
+ if other.exclude_end?
26
+ range 'gte' => other.begin, 'lt' => other.end
27
+ else
28
+ range 'gte' => other.begin, 'lte' => other.end
29
+ end
30
+ else
31
+ Arelastic::Filters::Terms.new field, other
32
+ end
33
+ end
34
+
35
+ def not_in other
36
+ self.not self.in(other)
37
+ end
38
+
39
+ def prefix other
40
+ Arelastic::Filters::Prefix.new field, other
41
+ end
42
+
43
+ def exists
44
+ Arelastic::Filters::Exists.new field
45
+ end
46
+
47
+ def missing(options = {})
48
+ Arelastic::Filters::Missing.new field, options
49
+ end
50
+
51
+ def gteq other
52
+ range 'gte' => other
53
+ end
54
+
55
+ def gt other
56
+ range 'gt' => other
57
+ end
58
+
59
+ def lteq other
60
+ range 'lte' => other
61
+ end
62
+
63
+ def lt other
64
+ range 'lt' => other
65
+ end
66
+
67
+ def not other
68
+ Arelastic::Filters::Not.new other
69
+ end
70
+
71
+ private
72
+ def range options
73
+ Arelastic::Filters::Range.new field, options
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,39 @@
1
+ module Arelastic
2
+ module Builders
3
+ class Query < Struct.new :name
4
+ class << self
5
+ def [](field)
6
+ new(field)
7
+ end
8
+ def constant_score(filter_or_query)
9
+ query Arelastic::Queries::ConstantScore.new(filter_or_query)
10
+ end
11
+
12
+ def filtered(query, filter)
13
+ query Arelastic::Queries::Filtered.new(query, filter)
14
+ end
15
+
16
+ def match_all
17
+ query Arelastic::Queries::MatchAll.new
18
+ end
19
+
20
+ private
21
+ def query value
22
+ Arelastic::Searches::Query.new value
23
+ end
24
+ end
25
+
26
+ def field other
27
+ Arelastic::Queries::Field.new name, other
28
+ end
29
+
30
+ def term other
31
+ Arelastic::Queries::Term.new name, other
32
+ end
33
+
34
+ def terms other
35
+ Arelastic::Queries::Terms.new name, other
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ module Arelastic
2
+ module Builders
3
+ class Search
4
+ def filter
5
+ Arelastic::Builders::Filter
6
+ end
7
+
8
+ def [](field)
9
+ filter[field]
10
+ end
11
+
12
+ def facet
13
+ Arelastic::Builders::Facet
14
+ end
15
+
16
+ def query
17
+ Arelastic::Builders::Query
18
+ end
19
+
20
+ def sort
21
+ Arelastic::Builders::Sort
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ module Arelastic
2
+ module Builders
3
+ class Sort < Struct.new :field
4
+ class << self
5
+ def [](field)
6
+ new(field)
7
+ end
8
+ end
9
+
10
+ def asc
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ require 'arelastic/builders/filter'
2
+ require 'arelastic/builders/facet'
3
+ require 'arelastic/builders/query'
4
+ require 'arelastic/builders/search'
@@ -0,0 +1,6 @@
1
+ module Arelastic
2
+ module Facets
3
+ class Facet < Arelastic::Nodes::Node
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,19 @@
1
+ module Arelastic
2
+ module Facets
3
+ class Histogram < Arelastic::Facets::Facet
4
+ attr_accessor :name, :options
5
+ def initialize name, options
6
+ @name = name
7
+ @options = options
8
+ end
9
+
10
+ def as_elastic
11
+ {
12
+ name => {
13
+ "histogram" => options
14
+ }
15
+ }
16
+ end
17
+ end
18
+ end
19
+ end
File without changes
@@ -0,0 +1,22 @@
1
+ module Arelastic
2
+ module Facets
3
+ class Terms < Arelastic::Facets::Facet
4
+ attr_accessor :name, :field, :options
5
+ def initialize name, field, options = {}
6
+ @name = name
7
+ @field = field
8
+ @options = options
9
+ end
10
+
11
+ def as_elastic
12
+ params = {"field" => field}.update(options)
13
+
14
+ {
15
+ name => {
16
+ "terms" => params
17
+ }
18
+ }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ require 'arelastic/facets/facet'
2
+
3
+ require 'arelastic/facets/histogram'
4
+ require 'arelastic/facets/range'
5
+ require 'arelastic/facets/terms'
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Filters
3
+ class And < Arelastic::Filters::Filter
4
+ polyadic 'and'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Exists < Arelastic::Filters::Filter
4
+ attr_reader :field
5
+
6
+ def initialize field
7
+ @field = field
8
+ end
9
+
10
+ def as_elastic
11
+ {"exists" => { "field" => field }}
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Filter < Arelastic::Nodes::Node
4
+ def or other
5
+ Arelastic::Filters::Or.new [self, other]
6
+ end
7
+
8
+ def and other
9
+ Arelastic::Filters::And.new [self, other]
10
+ end
11
+
12
+ def negate
13
+ Arelastic::Filters::Not.new self
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Ids < Arelastic::Filters::Filter
4
+ attr_reader :values
5
+
6
+ def initialize values
7
+ @values = values
8
+ end
9
+
10
+ def as_elastic
11
+ { "ids" => { "values" => values }}
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,15 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Limit < Arelastic::Filters::Filter
4
+ attr_reader :value
5
+
6
+ def initialize value
7
+ @value = value
8
+ end
9
+
10
+ def as_elastic
11
+ {"limit" => {"value" => value}}
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Missing < Arelastic::Filters::Filter
4
+ attr_reader :field, :options
5
+
6
+ # Options:
7
+ # "existence" => true defaults to true
8
+ # "null_value" => true defaults to false
9
+ def initialize field, options = {}
10
+ @field = field
11
+ @options = options
12
+ end
13
+
14
+ def as_elastic
15
+ params = {"field" => field}.update(options)
16
+ {"missing" => params}
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Not < Arelastic::Filters::Filter
4
+ attr_reader :expr
5
+
6
+ def initialize expr
7
+ @expr = expr
8
+ end
9
+
10
+ def as_elastic
11
+ {"not" => convert_to_elastic(expr)}
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Or < Arelastic::Filters::Filter
4
+ polyadic 'or'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Prefix < Arelastic::Filters::Filter
4
+ binary 'prefix'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Range < Arelastic::Filters::Filter
4
+ binary 'range'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Term < Arelastic::Filters::Filter
4
+ binary 'term'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Filters
3
+ class Terms < Arelastic::Filters::Filter
4
+ binary 'terms'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ require 'arelastic/filters/filter'
2
+
3
+ require 'arelastic/filters/and'
4
+ require 'arelastic/filters/exists'
5
+ require 'arelastic/filters/ids'
6
+ require 'arelastic/filters/limit'
7
+ require 'arelastic/filters/missing'
8
+ require 'arelastic/filters/not'
9
+ require 'arelastic/filters/or'
10
+ require 'arelastic/filters/prefix'
11
+ require 'arelastic/filters/range'
12
+ require 'arelastic/filters/term'
13
+ require 'arelastic/filters/terms'
@@ -0,0 +1,18 @@
1
+ module Arelastic
2
+ module Nodes
3
+ class HashGroup < Arelastic::Nodes::Node
4
+ attr_accessor :nodes
5
+ def initialize nodes
6
+ @nodes = nodes
7
+ end
8
+
9
+ def as_elastic
10
+ result = {}
11
+ nodes.each do |node|
12
+ result.merge! convert_to_elastic(node)
13
+ end
14
+ result
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ module Arelastic
2
+ module Nodes
3
+ class Node
4
+ extend Arelastic::Arities::Binary
5
+ extend Arelastic::Arities::Polyadic
6
+ extend Arelastic::Arities::Unary
7
+
8
+ def convert_to_elastic(expr)
9
+ expr.respond_to?(:as_elastic) ? expr.as_elastic : expr
10
+ end
11
+
12
+ def ==(other)
13
+ as_elastic == other.as_elastic
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,2 @@
1
+ require 'arelastic/nodes/node'
2
+ require 'arelastic/nodes/hash_group'
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Queries
3
+ class ConstantScore < Arelastic::Queries::Query
4
+ unary 'constant_score'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Queries
3
+ class Field < Arelastic::Queries::Query
4
+ binary 'field'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ module Arelastic
2
+ module Queries
3
+ class Filtered < Arelastic::Queries::Query
4
+ attr_accessor :query, :filter
5
+ def initialize(query, filter)
6
+ @query = query
7
+ @filter = filter
8
+ end
9
+
10
+ def as_elastic
11
+ { "filtered" => Arelastic::Nodes::HashGroup.new([query, filter]).as_elastic }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module Arelastic
2
+ module Queries
3
+ class MatchAll
4
+ def as_elastic
5
+ {"match_all" => {}}
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Queries
3
+ class Prefix < Arelastic::Queries::Query
4
+ binary 'prefix'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module Arelastic
2
+ module Queries
3
+ class Query < Arelastic::Nodes::Node
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,17 @@
1
+ module Arelastic
2
+ module Queries
3
+ class QueryString < Arelastic::Queries::Query
4
+ attr_accessor :query_string
5
+ attr_accessor :options
6
+
7
+ def initialize(query_string, options = {})
8
+ @query_string = query_string
9
+ @options = options
10
+ end
11
+
12
+ def as_elastic
13
+ {"query_string" => {"query" => query_string}}
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Queries
3
+ class Term < Arelastic::Queries::Query
4
+ binary 'term'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Queries
3
+ class Terms < Arelastic::Queries::Query
4
+ binary 'terms'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'arelastic/queries/query'
2
+
3
+ require 'arelastic/queries/constant_score'
4
+ require 'arelastic/queries/field'
5
+ require 'arelastic/queries/filtered'
6
+ require 'arelastic/queries/match_all'
7
+ require 'arelastic/queries/prefix'
8
+ require 'arelastic/queries/query_string'
9
+ require 'arelastic/queries/terms'
10
+ require 'arelastic/queries/term'
@@ -0,0 +1,14 @@
1
+ module Arelastic
2
+ module Searches
3
+ class Facets < Arelastic::Searches::Search
4
+ attr_accessor :grouping
5
+ def initialize facets
6
+ @grouping = Arelastic::Nodes::HashGroup.new facets
7
+ end
8
+
9
+ def as_elastic
10
+ { "facets" => convert_to_elastic(grouping) }
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Searches
3
+ class Filter < Arelastic::Searches::Search
4
+ unary 'filter', expects: Arelastic::Filters::Filter
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Searches
3
+ class From < Arelastic::Searches::Search
4
+ unary 'from'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Searches
3
+ class Query < Arelastic::Searches::Search
4
+ unary 'query', expects: Arelastic::Queries::Query
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module Arelastic
2
+ module Searches
3
+ class Search < Arelastic::Nodes::Node
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Searches
3
+ class Size < Arelastic::Searches::Search
4
+ unary 'size'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Arelastic
2
+ module Searches
3
+ class Sort < Arelastic::Searches::Search
4
+ unary 'sort'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ require 'arelastic/searches/search'
2
+
3
+ require 'arelastic/searches/facets'
4
+ require 'arelastic/searches/filter'
5
+ require 'arelastic/searches/from'
6
+ require 'arelastic/searches/query'
7
+ require 'arelastic/searches/size'
8
+ require 'arelastic/searches/sort'
data/lib/arelastic.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'arelastic/arities'
2
+ require 'arelastic/nodes'
3
+ require 'arelastic/facets'
4
+ require 'arelastic/filters'
5
+ require 'arelastic/queries'
6
+ require 'arelastic/searches'
7
+
8
+ require 'arelastic/builders'
@@ -0,0 +1,12 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Arities::BinaryTest < MiniTest::Spec
4
+ def test_binary
5
+ node = Class.new(Arelastic::Nodes::Node) do
6
+ binary 'suffix'
7
+ end
8
+
9
+ expected = {'suffix' => {'phone' => '666'}}
10
+ assert_equal expected, node.new('phone', '666').as_elastic
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Arities::PolyadicTest < MiniTest::Spec
4
+ def test_polyadic
5
+ expr = Struct.new(:as_elastic)
6
+ node = Class.new(Arelastic::Nodes::Node) do
7
+ polyadic 'xor'
8
+ end
9
+
10
+ expected = {'xor' => [{'a' => 'b'}, {'x' => 'y'}]}
11
+ assert_equal expected, node.new([expr.new('a' => 'b'), expr.new('x' => 'y')]).as_elastic
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Arities::UnaryTest < MiniTest::Spec
4
+ def test_unary
5
+ node = Class.new(Arelastic::Nodes::Node) do
6
+ unary 'unicorn'
7
+ end
8
+
9
+ expected = {'unicorn' => 'serenity'}
10
+ assert_equal expected, node.new('serenity').as_elastic
11
+ end
12
+ end
@@ -0,0 +1,56 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Builders::FilterTest < MiniTest::Spec
4
+ def test_ids
5
+ expected = {"ids" => {"values"=>["5", "6"]}}
6
+ assert_equal expected, Arelastic::Builders::Filter.ids('5', '6').as_elastic
7
+ end
8
+
9
+ def test_eq
10
+ expected = {"term"=>{"color"=>"blue"}}
11
+ assert_equal expected, builder.eq('blue').as_elastic
12
+ end
13
+
14
+ def test_not_eq
15
+ expected = {"not" => {"term" => {"color"=>"blue"}}}
16
+ assert_equal expected, builder.not_eq('blue').as_elastic
17
+ end
18
+
19
+ def test_in
20
+ expected = {"terms" => {"color"=>["blue"]}}
21
+ assert_equal expected, builder.in(['blue']).as_elastic
22
+ end
23
+
24
+ def test_in_with_range
25
+ expected = {"range" => {"color" => {"gte"=>1, "lte"=>3}}}
26
+ assert_equal expected, builder.in(1..3).as_elastic
27
+
28
+ expected = {"range" => {"color" => {"gte"=>1, "lt"=>3}}}
29
+ assert_equal expected, builder.in(1...3).as_elastic
30
+ end
31
+
32
+ def test_not_in
33
+ expected = {"not" => {"terms" => {"color"=>["blue"]}}}
34
+ assert_equal expected, builder.not_in(['blue']).as_elastic
35
+ end
36
+
37
+ def test_prefix
38
+ expected = {"prefix" => {"color" => "blu"}}
39
+ assert_equal expected, builder.prefix('blu').as_elastic
40
+ end
41
+
42
+ def test_exists
43
+ expected = {"exists" => {"field"=>"color"}}
44
+ assert_equal expected, builder.exists.as_elastic
45
+ end
46
+
47
+ def test_range
48
+ expected = {"range" => {"color" => {"lt" => 5}}}
49
+ assert_equal expected, builder.lt(5).as_elastic
50
+ end
51
+
52
+ private
53
+ def builder
54
+ @builder ||= Arelastic::Builders::Filter['color']
55
+ end
56
+ end
@@ -0,0 +1,45 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Builders::QueryTest < MiniTest::Spec
4
+ def test_constant_score
5
+ query = Arelastic::Builders::Query.constant_score({"foo" => "bar"})
6
+ expected = {"query" => {"constant_score" => {"foo" => "bar"}}}
7
+
8
+ assert_equal expected, query.as_elastic
9
+ end
10
+
11
+ def test_filtered
12
+ query = Arelastic::Builders::Query.filtered({"query" => "foo"}, {"filter" => "bar"})
13
+ expected = {"query" => {"filtered" => {"query" => "foo", "filter" => "bar"}}}
14
+
15
+ assert_equal expected, query.as_elastic
16
+ end
17
+
18
+ def test_match_all
19
+ query = Arelastic::Builders::Query.match_all
20
+ expected = {"query" => {"match_all" => {}}}
21
+
22
+ assert_equal expected, query.as_elastic
23
+ end
24
+
25
+ def test_field
26
+ query = Arelastic::Builders::Query['user'].field 'kimchy'
27
+ expected = { "field" => { "user" => "kimchy" } }
28
+
29
+ assert_equal expected, query.as_elastic
30
+ end
31
+
32
+ def test_term
33
+ query = Arelastic::Builders::Query['user'].term 'kimchy'
34
+ expected = {"term" => { "user" => "kimchy" }}
35
+
36
+ assert_equal expected, query.as_elastic
37
+ end
38
+
39
+ def test_term
40
+ query = Arelastic::Builders::Query['tags'].terms ['blue', 'pill']
41
+ expected = {"terms" => { "tags" => ["blue", "pill"] }}
42
+
43
+ assert_equal expected, query.as_elastic
44
+ end
45
+ end
@@ -0,0 +1,4 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Builders::SearchTest < MiniTest::Spec
4
+ end
@@ -0,0 +1,5 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Builders::SortTest < MiniTest::Spec
4
+
5
+ end
@@ -0,0 +1,17 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Facets::TermsTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ facet = Arelastic::Facets::Histogram.new('histo', "field" => "field_name", "interval" => 100)
6
+ expected = {
7
+ "histo" => {
8
+ "histogram" => {
9
+ "field" => "field_name",
10
+ "interval" => 100
11
+ }
12
+ }
13
+ }
14
+
15
+ assert_equal expected, facet.as_elastic
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Facets::TermsTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ facet = Arelastic::Facets::Terms.new('foo', 'tags', "size" => 10)
6
+ expected = {
7
+ "foo" => {
8
+ "terms" => {
9
+ "field" => "tags",
10
+ "size" => 10,
11
+ }
12
+ }
13
+ }
14
+
15
+ assert_equal expected, facet.as_elastic
16
+ end
17
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Filters::ExistsTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ expected = {"exists" => { "field" => "color" }}
6
+
7
+ assert_equal expected, Arelastic::Filters::Exists.new('color').as_elastic
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::FilterTest < MiniTest::Spec
4
+ def test_or
5
+ filter = Arelastic::Filters::Filter.new
6
+
7
+ and_filter = filter.and(filter)
8
+
9
+ assert and_filter.is_a?(Arelastic::Filters::And)
10
+ assert_equal [filter, filter], and_filter.children
11
+ end
12
+
13
+ def test_and
14
+ filter = Arelastic::Filters::Filter.new
15
+
16
+ and_filter = filter.or(filter)
17
+
18
+ assert and_filter.is_a?(Arelastic::Filters::Or)
19
+ assert_equal [filter, filter], and_filter.children
20
+ end
21
+
22
+ def test_negate
23
+ filter = Arelastic::Filters::Term.new 'foo', 'bar'
24
+
25
+ negated_filter = filter.negate
26
+
27
+ assert negated_filter.is_a?(Arelastic::Filters::Not)
28
+ assert_equal filter, negated_filter.expr
29
+ end
30
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Filters::IdsTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ expected = {"ids" => {"values" => ["foo", "bar"]}}
6
+
7
+ assert_equal expected, Arelastic::Filters::Ids.new(['foo', 'bar']).as_elastic
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Filters::MissingTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ expected = {"missing" => { "field" => "color" }}
6
+
7
+ assert_equal expected, Arelastic::Filters::Missing.new('color').as_elastic
8
+ end
9
+
10
+ def test_with_options
11
+ expected = {"missing" => { "field" => "color", "null_value" => true }}
12
+
13
+ assert_equal expected, Arelastic::Filters::Missing.new('color', 'null_value' => true).as_elastic
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Filters::NotTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ expected = {"not" => { "foo" => "bar" }}
6
+
7
+ assert_equal expected, Arelastic::Filters::Not.new('foo' => 'bar').as_elastic
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Nodes::NodeTest < MiniTest::Spec
4
+ def test_equality
5
+ node = Class.new(Arelastic::Nodes::Node) do
6
+ def initialize(value)
7
+ @value = value
8
+ end
9
+
10
+ def as_elastic
11
+ {"value" => @value}
12
+ end
13
+ end
14
+
15
+ assert_equal node.new('foo'), node.new('foo')
16
+ refute_equal node.new('foo'), node.new('bar')
17
+ end
18
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Queries::FilteredTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ filtered = Arelastic::Queries::Filtered.new({"query" => "bar"}, {"filter" => "baz"})
6
+ expected = {"filtered" => {"query" => "bar", "filter" => "baz"}}
7
+
8
+ assert_equal expected, filtered.as_elastic
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Queries::MatchAllTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ match_all = Arelastic::Queries::MatchAll.new
6
+ expected = {"match_all" => {}}
7
+
8
+ assert_equal expected, match_all.as_elastic
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Queries::QueryStringTest < MiniTest::Spec
4
+ def test_as_elastic
5
+ query_string = Arelastic::Queries::QueryString.new('foo')
6
+ expected = {"query_string" => {"query" => "foo"}}
7
+
8
+ assert_equal expected, query_string.as_elastic
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ require 'helper'
2
+
3
+ class Arelastic::Queries::QueryTest < MiniTest::Spec
4
+
5
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'bundler/setup'
2
+ Bundler.require
3
+
4
+ require 'minitest/autorun'
metadata ADDED
@@ -0,0 +1,117 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: arelastic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matthew Higgins
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-07-23 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Build Elastic Search queries with objects
15
+ email: developer@matthewhiggins.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files:
19
+ - README.rdoc
20
+ files:
21
+ - lib/arelastic/arities/binary.rb
22
+ - lib/arelastic/arities/polyadic.rb
23
+ - lib/arelastic/arities/unary.rb
24
+ - lib/arelastic/arities.rb
25
+ - lib/arelastic/builders/facet.rb
26
+ - lib/arelastic/builders/filter.rb
27
+ - lib/arelastic/builders/query.rb
28
+ - lib/arelastic/builders/search.rb
29
+ - lib/arelastic/builders/sort.rb
30
+ - lib/arelastic/builders.rb
31
+ - lib/arelastic/facets/facet.rb
32
+ - lib/arelastic/facets/histogram.rb
33
+ - lib/arelastic/facets/range.rb
34
+ - lib/arelastic/facets/terms.rb
35
+ - lib/arelastic/facets.rb
36
+ - lib/arelastic/filters/and.rb
37
+ - lib/arelastic/filters/exists.rb
38
+ - lib/arelastic/filters/filter.rb
39
+ - lib/arelastic/filters/ids.rb
40
+ - lib/arelastic/filters/limit.rb
41
+ - lib/arelastic/filters/missing.rb
42
+ - lib/arelastic/filters/not.rb
43
+ - lib/arelastic/filters/or.rb
44
+ - lib/arelastic/filters/prefix.rb
45
+ - lib/arelastic/filters/range.rb
46
+ - lib/arelastic/filters/term.rb
47
+ - lib/arelastic/filters/terms.rb
48
+ - lib/arelastic/filters.rb
49
+ - lib/arelastic/nodes/hash_group.rb
50
+ - lib/arelastic/nodes/node.rb
51
+ - lib/arelastic/nodes.rb
52
+ - lib/arelastic/queries/constant_score.rb
53
+ - lib/arelastic/queries/field.rb
54
+ - lib/arelastic/queries/filtered.rb
55
+ - lib/arelastic/queries/match_all.rb
56
+ - lib/arelastic/queries/prefix.rb
57
+ - lib/arelastic/queries/query.rb
58
+ - lib/arelastic/queries/query_string.rb
59
+ - lib/arelastic/queries/term.rb
60
+ - lib/arelastic/queries/terms.rb
61
+ - lib/arelastic/queries.rb
62
+ - lib/arelastic/searches/facets.rb
63
+ - lib/arelastic/searches/filter.rb
64
+ - lib/arelastic/searches/from.rb
65
+ - lib/arelastic/searches/query.rb
66
+ - lib/arelastic/searches/search.rb
67
+ - lib/arelastic/searches/size.rb
68
+ - lib/arelastic/searches/sort.rb
69
+ - lib/arelastic/searches.rb
70
+ - lib/arelastic.rb
71
+ - test/arelastic/arities/binary_test.rb
72
+ - test/arelastic/arities/polyadic_test.rb
73
+ - test/arelastic/arities/unary_test.rb
74
+ - test/arelastic/builders/filter_test.rb
75
+ - test/arelastic/builders/query_test.rb
76
+ - test/arelastic/builders/search_test.rb
77
+ - test/arelastic/builders/sort_test.rb
78
+ - test/arelastic/facets/histogram_test.rb
79
+ - test/arelastic/facets/terms_test.rb
80
+ - test/arelastic/filters/exists_test.rb
81
+ - test/arelastic/filters/filter_test.rb
82
+ - test/arelastic/filters/ids_test.rb
83
+ - test/arelastic/filters/missing_test.rb
84
+ - test/arelastic/filters/not_test.rb
85
+ - test/arelastic/nodes/node_test.rb
86
+ - test/arelastic/queries/filtered_test.rb
87
+ - test/arelastic/queries/match_all_test.rb
88
+ - test/arelastic/queries/query_string_test.rb
89
+ - test/arelastic/queries/query_test.rb
90
+ - test/helper.rb
91
+ - README.rdoc
92
+ homepage: http://github.com/matthuhiggins/arelastic
93
+ licenses:
94
+ - MIT
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: 1.9.3
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.8.11
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 1.8.24
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: Elastic Search query builder
117
+ test_files: []