agnostic_backend 0.9.0
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 +7 -0
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +52 -0
- data/LICENSE.txt +21 -0
- data/README.md +345 -0
- data/Rakefile +6 -0
- data/agnostic_backend.gemspec +34 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/doc/indexable.md +292 -0
- data/doc/queryable.md +0 -0
- data/lib/agnostic_backend/cloudsearch/index.rb +99 -0
- data/lib/agnostic_backend/cloudsearch/index_field.rb +103 -0
- data/lib/agnostic_backend/cloudsearch/indexer.rb +84 -0
- data/lib/agnostic_backend/cloudsearch/remote_index_field.rb +32 -0
- data/lib/agnostic_backend/index.rb +24 -0
- data/lib/agnostic_backend/indexable/config.rb +24 -0
- data/lib/agnostic_backend/indexable/content_manager.rb +51 -0
- data/lib/agnostic_backend/indexable/field.rb +26 -0
- data/lib/agnostic_backend/indexable/field_type.rb +48 -0
- data/lib/agnostic_backend/indexable/indexable.rb +125 -0
- data/lib/agnostic_backend/indexer.rb +48 -0
- data/lib/agnostic_backend/queryable/attribute.rb +22 -0
- data/lib/agnostic_backend/queryable/cloudsearch/executor.rb +100 -0
- data/lib/agnostic_backend/queryable/cloudsearch/query.rb +29 -0
- data/lib/agnostic_backend/queryable/cloudsearch/query_builder.rb +13 -0
- data/lib/agnostic_backend/queryable/cloudsearch/result_set.rb +27 -0
- data/lib/agnostic_backend/queryable/cloudsearch/visitor.rb +127 -0
- data/lib/agnostic_backend/queryable/criteria/binary.rb +47 -0
- data/lib/agnostic_backend/queryable/criteria/criterion.rb +13 -0
- data/lib/agnostic_backend/queryable/criteria/ternary.rb +36 -0
- data/lib/agnostic_backend/queryable/criteria_builder.rb +83 -0
- data/lib/agnostic_backend/queryable/executor.rb +43 -0
- data/lib/agnostic_backend/queryable/expressions/expression.rb +65 -0
- data/lib/agnostic_backend/queryable/operations/n_ary.rb +18 -0
- data/lib/agnostic_backend/queryable/operations/operation.rb +13 -0
- data/lib/agnostic_backend/queryable/operations/unary.rb +35 -0
- data/lib/agnostic_backend/queryable/query.rb +27 -0
- data/lib/agnostic_backend/queryable/query_builder.rb +98 -0
- data/lib/agnostic_backend/queryable/result_set.rb +42 -0
- data/lib/agnostic_backend/queryable/tree_node.rb +48 -0
- data/lib/agnostic_backend/queryable/validator.rb +174 -0
- data/lib/agnostic_backend/queryable/value.rb +26 -0
- data/lib/agnostic_backend/queryable/visitor.rb +124 -0
- data/lib/agnostic_backend/rspec/matchers.rb +69 -0
- data/lib/agnostic_backend/utilities.rb +207 -0
- data/lib/agnostic_backend/version.rb +3 -0
- data/lib/agnostic_backend.rb +49 -0
- metadata +199 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
module AgnosticBackend
|
2
|
+
module Queryable
|
3
|
+
class Value < TreeNode
|
4
|
+
|
5
|
+
attr_accessor :value
|
6
|
+
attr_reader :parent
|
7
|
+
|
8
|
+
def initialize(value, parent:, context:)
|
9
|
+
super([], context)
|
10
|
+
@value, @parent = value, parent
|
11
|
+
end
|
12
|
+
|
13
|
+
def ==(o)
|
14
|
+
super && o.value == value
|
15
|
+
end
|
16
|
+
|
17
|
+
def associated_attribute
|
18
|
+
parent.attribute if parent.respond_to? :attribute
|
19
|
+
end
|
20
|
+
|
21
|
+
def type
|
22
|
+
associated_attribute.type if associated_attribute.present?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module AgnosticBackend
|
2
|
+
module Queryable
|
3
|
+
class Visitor
|
4
|
+
def visit(subject)
|
5
|
+
method_name = class_to_method_name(subject.class)
|
6
|
+
send(method_name, subject)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def class_to_method_name(klass)
|
12
|
+
if klass.name.split('::').last == 'Query'
|
13
|
+
'visit_query'
|
14
|
+
else
|
15
|
+
"visit_#{klass.name.split('Queryable::').last.gsub('::', '_').underscore}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def visit_operations_equal(subject)
|
20
|
+
raise NotImplementedError
|
21
|
+
end
|
22
|
+
|
23
|
+
def visit_operations_not_equal(subject)
|
24
|
+
raise NotImplementedError
|
25
|
+
end
|
26
|
+
|
27
|
+
def visit_operations_greater(subject)
|
28
|
+
raise NotImplementedError
|
29
|
+
end
|
30
|
+
|
31
|
+
def visit_operations_less(subject)
|
32
|
+
raise NotImplementedError
|
33
|
+
end
|
34
|
+
|
35
|
+
def visit_operations_greater_equal(subject)
|
36
|
+
raise NotImplementedError
|
37
|
+
end
|
38
|
+
|
39
|
+
def visit_operations_less_equal(subject)
|
40
|
+
raise NotImplementedError
|
41
|
+
end
|
42
|
+
|
43
|
+
def visit_operations_greater_and_less(subject)
|
44
|
+
raise NotImplementedError
|
45
|
+
end
|
46
|
+
|
47
|
+
def visit_operations_greater_equal_and_less(subject)
|
48
|
+
raise NotImplementedError
|
49
|
+
end
|
50
|
+
|
51
|
+
def visit_operations_greater_and_less_equal(subject)
|
52
|
+
raise NotImplementedError
|
53
|
+
end
|
54
|
+
|
55
|
+
def visit_operations_greater_equal_and_less_equal(subject)
|
56
|
+
raise NotImplementedError
|
57
|
+
end
|
58
|
+
|
59
|
+
def visit_operations_not(subject)
|
60
|
+
raise NotImplementedError
|
61
|
+
end
|
62
|
+
|
63
|
+
def visit_operations_and(subject)
|
64
|
+
raise NotImplementedError
|
65
|
+
end
|
66
|
+
|
67
|
+
def visit_operations_or(subject)
|
68
|
+
raise NotImplementedError
|
69
|
+
end
|
70
|
+
|
71
|
+
def visit_operations_ascending(subject)
|
72
|
+
raise NotImplementedError
|
73
|
+
end
|
74
|
+
|
75
|
+
def visit_operations_descending(subject)
|
76
|
+
raise NotImplementedError
|
77
|
+
end
|
78
|
+
|
79
|
+
def visit_operations_contains(subject)
|
80
|
+
raise NotImplementedError
|
81
|
+
end
|
82
|
+
|
83
|
+
def visit_operations_starts(subject)
|
84
|
+
raise NotImplementedError
|
85
|
+
end
|
86
|
+
|
87
|
+
def visit_query(subject)
|
88
|
+
raise NotImplementedError
|
89
|
+
end
|
90
|
+
|
91
|
+
def visit_expressions_where(subject)
|
92
|
+
raise NotImplementedError
|
93
|
+
end
|
94
|
+
|
95
|
+
def visit_expressions_select(subject)
|
96
|
+
raise NotImplementedError
|
97
|
+
end
|
98
|
+
|
99
|
+
def visit_expressions_order(subject)
|
100
|
+
raise NotImplementedError
|
101
|
+
end
|
102
|
+
|
103
|
+
def visit_expressions_limit(subject)
|
104
|
+
raise NotImplementedError
|
105
|
+
end
|
106
|
+
|
107
|
+
def visit_expressions_offset(subject)
|
108
|
+
raise NotImplementedError
|
109
|
+
end
|
110
|
+
|
111
|
+
def visit_expressions_scroll_cursor(subject)
|
112
|
+
raise NotImplementedError
|
113
|
+
end
|
114
|
+
|
115
|
+
def visit_attribute(subject)
|
116
|
+
raise NotImplementedError
|
117
|
+
end
|
118
|
+
|
119
|
+
def visit_value(subject)
|
120
|
+
raise NotImplementedError
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module AgnosticBackend
|
2
|
+
module RSpec
|
3
|
+
module Matchers
|
4
|
+
class BeIndexable
|
5
|
+
def matches?(actual)
|
6
|
+
actual < AgnosticBackend::Indexable
|
7
|
+
end
|
8
|
+
|
9
|
+
def description
|
10
|
+
"include AgnosticBackend::Indexable"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def be_indexable
|
15
|
+
BeIndexable.new
|
16
|
+
end
|
17
|
+
|
18
|
+
class DefineIndexField
|
19
|
+
def initialize(name, for_index: nil, type: nil, **expected_custom_attributes)
|
20
|
+
@name = name
|
21
|
+
@for_index = for_index
|
22
|
+
@type = type
|
23
|
+
@expected_custom_attributes = expected_custom_attributes
|
24
|
+
end
|
25
|
+
|
26
|
+
def matches?(klass)
|
27
|
+
@for_index ||= klass.index_name
|
28
|
+
manager = klass.index_content_manager(@for_index)
|
29
|
+
manager.nil? and return false
|
30
|
+
field = manager.contents[@name.to_s]
|
31
|
+
field.nil? and return false
|
32
|
+
type_matches?(field, @type) &&
|
33
|
+
custom_attributes_match?(field, @expected_custom_attributes) rescue false
|
34
|
+
end
|
35
|
+
|
36
|
+
def description
|
37
|
+
expectation_message
|
38
|
+
end
|
39
|
+
|
40
|
+
def failure_message
|
41
|
+
"expected to #{expectation_message}"
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def expectation_message
|
47
|
+
"define the index field :#{@name}" +
|
48
|
+
(@type.nil? ? "" : " with type :#{@type}") +
|
49
|
+
(@for_index.nil? ? "" : " for index '#{@for_index}'" )
|
50
|
+
end
|
51
|
+
|
52
|
+
def type_matches?(field, expected_type)
|
53
|
+
return true if expected_type.nil?
|
54
|
+
field.type.matches?(expected_type)
|
55
|
+
end
|
56
|
+
|
57
|
+
def custom_attributes_match?(field, expected_attributes)
|
58
|
+
return true if expected_attributes.empty?
|
59
|
+
field.type.options == expected_attributes
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def define_index_field(*args)
|
64
|
+
DefineIndexField.new(*args)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,207 @@
|
|
1
|
+
module AgnosticBackend
|
2
|
+
module Utilities
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.send :include, InstanceMethods
|
6
|
+
base.send :extend, ClassMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
end
|
11
|
+
|
12
|
+
module InstanceMethods
|
13
|
+
|
14
|
+
def with_exponential_backoff(error, &block)
|
15
|
+
attempts = 0
|
16
|
+
|
17
|
+
begin
|
18
|
+
block.call
|
19
|
+
rescue error => e
|
20
|
+
if attempts < exponential_backoff_max_attempts
|
21
|
+
sleep(exponential_backoff_sleep_time(exponential_backoff_max_time, exponential_backoff_base, attempts))
|
22
|
+
attempts += 1
|
23
|
+
retry
|
24
|
+
else
|
25
|
+
raise e
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def exponential_backoff_max_time
|
31
|
+
@exponential_backoff_max_time ||= 4
|
32
|
+
end
|
33
|
+
|
34
|
+
def exponential_backoff_max_attempts
|
35
|
+
@exponential_backoff_max_time ||= 10
|
36
|
+
end
|
37
|
+
|
38
|
+
def exponential_backoff_base
|
39
|
+
@exponential_backoff_max_time ||= 0.2
|
40
|
+
end
|
41
|
+
|
42
|
+
def exponential_backoff_sleep_time(max, base, attempts)
|
43
|
+
temp = [max, base * 2 ** attempts].min.to_f
|
44
|
+
temp/2 + rand(0.0...temp/2)
|
45
|
+
end
|
46
|
+
|
47
|
+
def flatten(document, delimiter = '__')
|
48
|
+
def flat_hash(document, delimiter)
|
49
|
+
flatten_doc = {}
|
50
|
+
document.each do |k, v|
|
51
|
+
if v.is_a? Hash
|
52
|
+
# if we have a nested hash, traverse the hash until we find a value
|
53
|
+
# When a value is found, we return it and merge the keys with the key of the previous recursion iteration
|
54
|
+
flat_hash(v, delimiter).map do |doc_k, doc_v|
|
55
|
+
flatten_doc["#{k}"+ delimiter + "#{doc_k}"] = doc_v
|
56
|
+
end
|
57
|
+
else
|
58
|
+
flatten_doc[k.to_s] = v
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
return flatten_doc
|
63
|
+
end
|
64
|
+
|
65
|
+
flat_hash(document, delimiter)
|
66
|
+
end
|
67
|
+
|
68
|
+
def unflatten(document, delimiter='__')
|
69
|
+
unflatten = {}
|
70
|
+
|
71
|
+
def unflatten_hash(hash, delimiter)
|
72
|
+
key, value = hash.keys.first, hash.values.first
|
73
|
+
components = key.split(delimiter)
|
74
|
+
new_key = components.shift
|
75
|
+
if components.empty?
|
76
|
+
return {new_key => value}
|
77
|
+
else
|
78
|
+
unflat_hash = {}
|
79
|
+
unflat_hash[new_key] = unflatten_hash({components.join(delimiter) => value}, delimiter)
|
80
|
+
end
|
81
|
+
|
82
|
+
unflat_hash
|
83
|
+
end
|
84
|
+
|
85
|
+
document.each do |k, v|
|
86
|
+
unflatten.deep_merge!(unflatten_hash({k => v}, delimiter))
|
87
|
+
end
|
88
|
+
|
89
|
+
unflatten
|
90
|
+
end
|
91
|
+
|
92
|
+
def transform_nested_values(hash, proc)
|
93
|
+
hash.keys.each do |key|
|
94
|
+
if hash[key].kind_of? Hash
|
95
|
+
transform_nested_values(hash[key], proc)
|
96
|
+
else
|
97
|
+
hash[key] = proc.call(hash[key])
|
98
|
+
end
|
99
|
+
end
|
100
|
+
hash
|
101
|
+
end
|
102
|
+
|
103
|
+
def value_for_key(document, key)
|
104
|
+
keys = key.split('.')
|
105
|
+
key = keys.shift
|
106
|
+
if document.is_a?(Hash)
|
107
|
+
if document.has_key? key
|
108
|
+
value_for_key(document[key], keys.join('.'))
|
109
|
+
else
|
110
|
+
return nil
|
111
|
+
end
|
112
|
+
else
|
113
|
+
if document.present? && key.nil?
|
114
|
+
return document
|
115
|
+
else
|
116
|
+
return nil
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def reject_blank_values_from(flat_document)
|
122
|
+
flat_document.reject { |_, v| (v.is_a?(FalseClass) ? false : v.blank?) }
|
123
|
+
end
|
124
|
+
|
125
|
+
def convert_bool_values_to_string_in(document)
|
126
|
+
document.each do |k, v|
|
127
|
+
if v.is_a?(TrueClass)
|
128
|
+
document[k] = 'true'
|
129
|
+
elsif v.is_a?(FalseClass)
|
130
|
+
document[k] = 'false'
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def convert_to(type, value)
|
136
|
+
case type
|
137
|
+
when :integer
|
138
|
+
if value.is_a?(Fixnum)
|
139
|
+
value
|
140
|
+
elsif is_integer?(value)
|
141
|
+
value.to_i
|
142
|
+
else
|
143
|
+
value
|
144
|
+
end
|
145
|
+
when :date
|
146
|
+
if value.is_a?(Time)
|
147
|
+
value
|
148
|
+
elsif is_date?(value)
|
149
|
+
value.to_time.utc
|
150
|
+
else
|
151
|
+
value
|
152
|
+
end
|
153
|
+
when :double
|
154
|
+
if value.is_a?(Float)
|
155
|
+
value
|
156
|
+
elsif is_float?(value)
|
157
|
+
value.to_f
|
158
|
+
else
|
159
|
+
value
|
160
|
+
end
|
161
|
+
when :boolean
|
162
|
+
if value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
163
|
+
value
|
164
|
+
elsif is_boolean?(value)
|
165
|
+
convert_to_boolean(value)
|
166
|
+
else
|
167
|
+
value
|
168
|
+
end
|
169
|
+
when :string,:string_array,:text,:text_array
|
170
|
+
if value.is_a?(String)
|
171
|
+
value
|
172
|
+
else
|
173
|
+
value.to_s
|
174
|
+
end
|
175
|
+
else
|
176
|
+
value
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def is_integer?(value)
|
181
|
+
(/^[-+]?\d+$/ =~ value.to_s).present?
|
182
|
+
end
|
183
|
+
|
184
|
+
def is_float?(value)
|
185
|
+
(/^[-+]?(\d*[.])?\d+$/ =~ value.to_s).present?
|
186
|
+
end
|
187
|
+
|
188
|
+
def is_boolean?(value)
|
189
|
+
value == 'true' || value == 'false'
|
190
|
+
end
|
191
|
+
|
192
|
+
def is_date?(value)
|
193
|
+
value.to_time.present? rescue false
|
194
|
+
end
|
195
|
+
|
196
|
+
def convert_to_boolean(value)
|
197
|
+
case value
|
198
|
+
when 'true'
|
199
|
+
true
|
200
|
+
when 'false'
|
201
|
+
false
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'agnostic_backend/version'
|
2
|
+
require 'active_support/core_ext'
|
3
|
+
|
4
|
+
require 'agnostic_backend/utilities'
|
5
|
+
|
6
|
+
require 'agnostic_backend/indexable/indexable'
|
7
|
+
require 'agnostic_backend/indexable/config'
|
8
|
+
require 'agnostic_backend/indexable/field_type'
|
9
|
+
require 'agnostic_backend/indexable/field'
|
10
|
+
require 'agnostic_backend/indexable/content_manager'
|
11
|
+
|
12
|
+
require 'agnostic_backend/index'
|
13
|
+
require 'agnostic_backend/indexer'
|
14
|
+
|
15
|
+
require 'agnostic_backend/queryable/tree_node'
|
16
|
+
require 'agnostic_backend/queryable/attribute'
|
17
|
+
require 'agnostic_backend/queryable/value'
|
18
|
+
require 'agnostic_backend/queryable/criteria_builder'
|
19
|
+
require 'agnostic_backend/queryable/query_builder'
|
20
|
+
require 'agnostic_backend/queryable/executor'
|
21
|
+
require 'agnostic_backend/queryable/query'
|
22
|
+
require 'agnostic_backend/queryable/result_set'
|
23
|
+
require 'agnostic_backend/queryable/visitor'
|
24
|
+
require 'agnostic_backend/queryable/validator'
|
25
|
+
|
26
|
+
require 'agnostic_backend/queryable/criteria/criterion'
|
27
|
+
require 'agnostic_backend/queryable/criteria/binary'
|
28
|
+
require 'agnostic_backend/queryable/criteria/ternary'
|
29
|
+
|
30
|
+
require 'agnostic_backend/queryable/operations/operation'
|
31
|
+
require 'agnostic_backend/queryable/operations/unary'
|
32
|
+
require 'agnostic_backend/queryable/operations/n_ary'
|
33
|
+
|
34
|
+
require 'agnostic_backend/queryable/expressions/expression'
|
35
|
+
|
36
|
+
require 'agnostic_backend/queryable/cloudsearch/executor'
|
37
|
+
require 'agnostic_backend/queryable/cloudsearch/query'
|
38
|
+
require 'agnostic_backend/queryable/cloudsearch/query_builder'
|
39
|
+
require 'agnostic_backend/queryable/cloudsearch/result_set'
|
40
|
+
require 'agnostic_backend/queryable/cloudsearch/visitor'
|
41
|
+
|
42
|
+
require 'agnostic_backend/cloudsearch/index'
|
43
|
+
require 'agnostic_backend/cloudsearch/index_field'
|
44
|
+
require 'agnostic_backend/cloudsearch/indexer'
|
45
|
+
require 'agnostic_backend/cloudsearch/remote_index_field'
|
46
|
+
|
47
|
+
module AgnosticBackend
|
48
|
+
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: agnostic_backend
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Iasonas Gavriilidis
|
8
|
+
- Laertis Pappas
|
9
|
+
- Kyriakos Kentzoglanakis
|
10
|
+
autorequire:
|
11
|
+
bindir: exe
|
12
|
+
cert_chain: []
|
13
|
+
date: 2016-02-29 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - ">="
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.22
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 3.2.22
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: aws-sdk
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '2'
|
36
|
+
type: :runtime
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '2'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: bundler
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rake
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: rspec
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: simplecov
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
type: :development
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
- !ruby/object:Gem::Dependency
|
100
|
+
name: simplecov-html
|
101
|
+
requirement: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
type: :development
|
107
|
+
prerelease: false
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
description:
|
114
|
+
email:
|
115
|
+
- i.gavriilidis@pamediakopes.gr
|
116
|
+
- l.pappas@pamediakopes.gr
|
117
|
+
- k.kentzoglanakis@pamediakopes.gr
|
118
|
+
executables: []
|
119
|
+
extensions: []
|
120
|
+
extra_rdoc_files: []
|
121
|
+
files:
|
122
|
+
- ".gitignore"
|
123
|
+
- ".rspec"
|
124
|
+
- ".ruby-gemset"
|
125
|
+
- ".ruby-version"
|
126
|
+
- ".travis.yml"
|
127
|
+
- CODE_OF_CONDUCT.md
|
128
|
+
- Gemfile
|
129
|
+
- Gemfile.lock
|
130
|
+
- LICENSE.txt
|
131
|
+
- README.md
|
132
|
+
- Rakefile
|
133
|
+
- agnostic_backend.gemspec
|
134
|
+
- bin/console
|
135
|
+
- bin/setup
|
136
|
+
- doc/indexable.md
|
137
|
+
- doc/queryable.md
|
138
|
+
- lib/agnostic_backend.rb
|
139
|
+
- lib/agnostic_backend/cloudsearch/index.rb
|
140
|
+
- lib/agnostic_backend/cloudsearch/index_field.rb
|
141
|
+
- lib/agnostic_backend/cloudsearch/indexer.rb
|
142
|
+
- lib/agnostic_backend/cloudsearch/remote_index_field.rb
|
143
|
+
- lib/agnostic_backend/index.rb
|
144
|
+
- lib/agnostic_backend/indexable/config.rb
|
145
|
+
- lib/agnostic_backend/indexable/content_manager.rb
|
146
|
+
- lib/agnostic_backend/indexable/field.rb
|
147
|
+
- lib/agnostic_backend/indexable/field_type.rb
|
148
|
+
- lib/agnostic_backend/indexable/indexable.rb
|
149
|
+
- lib/agnostic_backend/indexer.rb
|
150
|
+
- lib/agnostic_backend/queryable/attribute.rb
|
151
|
+
- lib/agnostic_backend/queryable/cloudsearch/executor.rb
|
152
|
+
- lib/agnostic_backend/queryable/cloudsearch/query.rb
|
153
|
+
- lib/agnostic_backend/queryable/cloudsearch/query_builder.rb
|
154
|
+
- lib/agnostic_backend/queryable/cloudsearch/result_set.rb
|
155
|
+
- lib/agnostic_backend/queryable/cloudsearch/visitor.rb
|
156
|
+
- lib/agnostic_backend/queryable/criteria/binary.rb
|
157
|
+
- lib/agnostic_backend/queryable/criteria/criterion.rb
|
158
|
+
- lib/agnostic_backend/queryable/criteria/ternary.rb
|
159
|
+
- lib/agnostic_backend/queryable/criteria_builder.rb
|
160
|
+
- lib/agnostic_backend/queryable/executor.rb
|
161
|
+
- lib/agnostic_backend/queryable/expressions/expression.rb
|
162
|
+
- lib/agnostic_backend/queryable/operations/n_ary.rb
|
163
|
+
- lib/agnostic_backend/queryable/operations/operation.rb
|
164
|
+
- lib/agnostic_backend/queryable/operations/unary.rb
|
165
|
+
- lib/agnostic_backend/queryable/query.rb
|
166
|
+
- lib/agnostic_backend/queryable/query_builder.rb
|
167
|
+
- lib/agnostic_backend/queryable/result_set.rb
|
168
|
+
- lib/agnostic_backend/queryable/tree_node.rb
|
169
|
+
- lib/agnostic_backend/queryable/validator.rb
|
170
|
+
- lib/agnostic_backend/queryable/value.rb
|
171
|
+
- lib/agnostic_backend/queryable/visitor.rb
|
172
|
+
- lib/agnostic_backend/rspec/matchers.rb
|
173
|
+
- lib/agnostic_backend/utilities.rb
|
174
|
+
- lib/agnostic_backend/version.rb
|
175
|
+
homepage: https://github.com/e-travel/agnostic_backend
|
176
|
+
licenses:
|
177
|
+
- MIT
|
178
|
+
metadata: {}
|
179
|
+
post_install_message:
|
180
|
+
rdoc_options: []
|
181
|
+
require_paths:
|
182
|
+
- lib
|
183
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 2.1.0
|
188
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
189
|
+
requirements:
|
190
|
+
- - ">="
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: '0'
|
193
|
+
requirements: []
|
194
|
+
rubyforge_project:
|
195
|
+
rubygems_version: 2.4.8
|
196
|
+
signing_key:
|
197
|
+
specification_version: 4
|
198
|
+
summary: A gem to index/query ruby objects to/from remote backends
|
199
|
+
test_files: []
|