stretchy-model 0.4.0 → 0.6.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/README.md +19 -84
  4. data/lib/rails/instrumentation/railtie.rb +2 -0
  5. data/lib/stretchy/associations.rb +155 -15
  6. data/lib/stretchy/attributes/type/array.rb +20 -0
  7. data/lib/stretchy/attributes/type/base.rb +42 -0
  8. data/lib/stretchy/attributes/type/binary.rb +45 -0
  9. data/lib/stretchy/attributes/type/boolean.rb +48 -0
  10. data/lib/stretchy/attributes/type/completion.rb +25 -0
  11. data/lib/stretchy/attributes/type/constant_keyword.rb +38 -0
  12. data/lib/stretchy/attributes/type/date_time.rb +35 -0
  13. data/lib/stretchy/attributes/type/dense_vector.rb +59 -0
  14. data/lib/stretchy/attributes/type/flattened.rb +31 -0
  15. data/lib/stretchy/attributes/type/geo_point.rb +27 -0
  16. data/lib/stretchy/attributes/type/geo_shape.rb +27 -0
  17. data/lib/stretchy/attributes/type/hash.rb +40 -0
  18. data/lib/stretchy/attributes/type/histogram.rb +7 -0
  19. data/lib/stretchy/attributes/type/ip.rb +29 -0
  20. data/lib/stretchy/attributes/type/join.rb +22 -0
  21. data/lib/stretchy/attributes/type/keyword.rb +36 -10
  22. data/lib/stretchy/attributes/type/match_only_text.rb +8 -0
  23. data/lib/stretchy/attributes/type/nested.rb +25 -0
  24. data/lib/stretchy/attributes/type/numeric/base.rb +32 -0
  25. data/lib/stretchy/attributes/type/numeric/byte.rb +7 -0
  26. data/lib/stretchy/attributes/type/numeric/double.rb +7 -0
  27. data/lib/stretchy/attributes/type/numeric/float.rb +7 -0
  28. data/lib/stretchy/attributes/type/numeric/half_float.rb +7 -0
  29. data/lib/stretchy/attributes/type/numeric/integer.rb +7 -0
  30. data/lib/stretchy/attributes/type/numeric/long.rb +7 -0
  31. data/lib/stretchy/attributes/type/numeric/scaled_float.rb +23 -0
  32. data/lib/stretchy/attributes/type/numeric/short.rb +7 -0
  33. data/lib/stretchy/attributes/type/numeric/unsigned_long.rb +7 -0
  34. data/lib/stretchy/attributes/type/percolator.rb +23 -0
  35. data/lib/stretchy/attributes/type/point.rb +24 -0
  36. data/lib/stretchy/attributes/type/range/base.rb +9 -0
  37. data/lib/stretchy/attributes/type/range/date_range.rb +17 -0
  38. data/lib/stretchy/attributes/type/range/double_range.rb +17 -0
  39. data/lib/stretchy/attributes/type/range/float_range.rb +16 -0
  40. data/lib/stretchy/attributes/type/range/integer_range.rb +16 -0
  41. data/lib/stretchy/attributes/type/range/ip_range.rb +16 -0
  42. data/lib/stretchy/attributes/type/range/long_range.rb +16 -0
  43. data/lib/stretchy/attributes/type/rank_feature.rb +21 -0
  44. data/lib/stretchy/attributes/type/rank_features.rb +24 -0
  45. data/lib/stretchy/attributes/type/search_as_you_type.rb +30 -0
  46. data/lib/stretchy/attributes/type/shape.rb +24 -0
  47. data/lib/stretchy/attributes/type/sparse_vector.rb +37 -0
  48. data/lib/stretchy/attributes/type/string.rb +7 -0
  49. data/lib/stretchy/attributes/type/text.rb +51 -0
  50. data/lib/stretchy/attributes/type/token_count.rb +26 -0
  51. data/lib/stretchy/attributes/type/version.rb +21 -0
  52. data/lib/stretchy/attributes/type/wildcard.rb +35 -0
  53. data/lib/stretchy/attributes.rb +68 -2
  54. data/lib/stretchy/common.rb +5 -5
  55. data/lib/stretchy/delegation/gateway_delegation.rb +9 -5
  56. data/lib/stretchy/model/serialization.rb +1 -0
  57. data/lib/stretchy/querying.rb +4 -4
  58. data/lib/stretchy/record.rb +9 -10
  59. data/lib/stretchy/relation.rb +11 -17
  60. data/lib/stretchy/relations/finder_methods.rb +19 -2
  61. data/lib/stretchy/relations/merger.rb +5 -1
  62. data/lib/stretchy/relations/query_builder.rb +32 -3
  63. data/lib/stretchy/relations/query_methods.rb +66 -2
  64. data/lib/stretchy/scoping/named.rb +1 -1
  65. data/lib/stretchy/shared_scopes.rb +1 -1
  66. data/lib/stretchy/version.rb +1 -1
  67. data/lib/stretchy.rb +5 -3
  68. data/lib/stretchy_model.rb +9 -0
  69. metadata +49 -4
  70. data/lib/active_model/type/array.rb +0 -13
  71. data/lib/active_model/type/hash.rb +0 -15
@@ -0,0 +1,59 @@
1
+ # Public: Defines a dense vector attribute for the model.
2
+ #
3
+ # name - The Symbol name of the attribute.
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :element_type - The String data type used to encode vectors. Can be 'float' or 'byte'.
6
+ # 'float' indexes a 4-byte floating-point value per dimension.
7
+ # 'byte' indexes a 1-byte integer value per dimension.
8
+ # Vectors using 'byte' require dimensions with integer values between -128 to 127.
9
+ # :dims - The Integer number of vector dimensions. Can’t exceed 4096.
10
+ # If not specified, it will be set to the length of the first vector added to the field.
11
+ # :index - The Boolean indicating if you can search this field using the kNN search API (default: true).
12
+ # :similarity - The String vector similarity metric to use in kNN search. Can be 'l2_norm', 'dot_product', 'cosine', or 'max_inner_product'.
13
+ # This parameter can only be specified when :index is true.
14
+ # :index_options - The Hash that configures the kNN indexing algorithm. Can only be specified when :index is true.
15
+ # :type - The String type of kNN algorithm to use. Can be either 'hnsw' or 'int8_hnsw'.
16
+ # :m - The Integer number of neighbors each node will be connected to in the HNSW graph.
17
+ # :ef_construction - The Integer number of candidates to track while assembling the list of nearest neighbors for each new node.
18
+ # :confidence_interval - The Float confidence interval to use when quantizing the vectors. Only applicable to 'int8_hnsw' index types.
19
+ #
20
+ # Examples
21
+ #
22
+ # class MyModel
23
+ # include StretchyModel
24
+ # attribute :vector_embeddings, :dense_vector, element_type: 'float', dims: 3
25
+ # end
26
+ #
27
+ # Returns nothing.
28
+ module Stretchy
29
+ module Attributes
30
+ module Type
31
+ class DenseVector < Stretchy::Attributes::Type::Base
32
+ OPTIONS = [:element_type, :dims, :index, :similarity, :index_options]
33
+ attr_reader *OPTIONS
34
+
35
+ def initialize(**args)
36
+ args.each do |k, v|
37
+ instance_variable_set("@#{k}", v) if OPTIONS.include?(k)
38
+ args.delete(k)
39
+ end
40
+ super
41
+ end
42
+
43
+ def type
44
+ :dense_vector
45
+ end
46
+
47
+ def mappings(name)
48
+ options = {type: type}
49
+ OPTIONS.each { |_| options[_] = self.send(_) }
50
+ {
51
+ properties: {
52
+ "#{name}.tokens": options
53
+ }
54
+ }.as_json
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,31 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a flattened attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :depth_limit - The Integer maximum allowed depth of the flattened object field. Defaults to 20.
6
+ # :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
7
+ # :eager_global_ordinals - The Boolean indicating if global ordinals should be loaded eagerly on refresh. Defaults to false.
8
+ # :ignore_above - The Integer limit for the length of leaf values. Values longer than this limit will not be indexed. By default, there is no limit.
9
+ # :index - The Boolean indicating if the field should be searchable. Defaults to true.
10
+ # :index_options - The String indicating what information should be stored in the index for scoring purposes. Defaults to 'docs'.
11
+ # :null_value - The String value to be substituted for any explicit null values. Defaults to null.
12
+ # :similarity - The String scoring algorithm or similarity to be used. Defaults to 'BM25'.
13
+ # :split_queries_on_whitespace - The Boolean indicating if full text queries should split the input on whitespace. Defaults to false.
14
+ # :time_series_dimensions - The Array of Strings indicating the fields inside the flattened object that are dimensions of the time series.
15
+ #
16
+ # Examples
17
+ #
18
+ # class MyModel
19
+ # include StretchyModel
20
+ # attribute :metadata, :flattened, depth_limit: 10, index_options: 'freqs'
21
+ # end
22
+ #
23
+ # Returns nothing.
24
+ class Flattened < Stretchy::Attributes::Type::Base
25
+ OPTIONS = [:depth_limit, :doc_values, :eager_global_ordinals, :ignore_above, :index, :index_options, :null_value, :similarity, :split_queries_on_whitespace, :time_series_dimensions]
26
+
27
+ def type
28
+ :flattened
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a geo_point attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :ignore_malformed - The Boolean indicating if malformed geopoints should be ignored. Defaults to false.
6
+ # :ignore_z_value - The Boolean indicating if three dimension points should be accepted but only latitude and longitude values should be indexed. Defaults to true.
7
+ # :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
8
+ # :null_value - The GeoPoint value to be substituted for any explicit null values. Defaults to null.
9
+ # :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
10
+ # :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
11
+ #
12
+ # Examples
13
+ #
14
+ # class MyModel
15
+ # include StretchyModel
16
+ # attribute :location, :geo_point, ignore_malformed: true
17
+ # end
18
+ #
19
+ # Returns nothing.
20
+ class GeoPoint < Stretchy::Attributes::Type::Base
21
+ OPTIONS = [:ignore_malformed, :ignore_z_value, :index, :null_value, :on_script_error, :script]
22
+
23
+ def type
24
+ :geo_point
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a geo_shape attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :orientation - The String default orientation for the field’s WKT polygons. Can be 'right', 'counterclockwise', 'ccw', 'left', 'clockwise', or 'cw'. Defaults to 'right'.
6
+ # :ignore_malformed - The Boolean indicating if malformed GeoJSON or WKT shapes should be ignored. Defaults to false.
7
+ # :ignore_z_value - The Boolean indicating if three dimension points should be accepted but only latitude and longitude values should be indexed. Defaults to true.
8
+ # :coerce - The Boolean indicating if unclosed linear rings in polygons should be automatically closed. Defaults to false.
9
+ # :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
10
+ # :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
11
+ #
12
+ # Examples
13
+ #
14
+ # class MyModel
15
+ # include StretchyModel
16
+ # attribute :boundary, :geo_shape, orientation: 'left', coerce: true
17
+ # end
18
+ #
19
+ # Returns nothing.
20
+ class GeoShape < Stretchy::Attributes::Type::Base
21
+ OPTIONS = [:orientation, :ignore_malformed, :ignore_z_value, :coerce, :index, :doc_values]
22
+
23
+ def type
24
+ :geo_shape
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a hash attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :dynamic - The String indicating if new properties should be added dynamically to an existing object. Can be 'true', 'runtime', 'false', or 'strict'. Defaults to 'true'.
6
+ # :enabled - The Boolean indicating if the JSON value for the object field should be parsed and indexed. Defaults to true.
7
+ # :subobjects - The Boolean indicating if the object can hold subobjects. Defaults to true.
8
+ # :properties - The Hash of fields within the object, which can be of any data type, including object.
9
+ #
10
+ # Examples
11
+ #
12
+ # class MyModel < Stretchy::Record
13
+ # attribute :metadata, :hash, dynamic: 'strict', subobjects: false
14
+ # end
15
+ #
16
+ # Returns nothing.
17
+ class Hash < Stretchy::Attributes::Type::Base
18
+ OPTIONS = [:dynamic, :enabled, :subobjects, :properties]
19
+
20
+ def type
21
+ :hash
22
+ end
23
+
24
+ def type_for_database
25
+ :object
26
+ end
27
+
28
+ def mappings(name)
29
+ options = {}
30
+ OPTIONS.each { |option| options[option] = send(option) unless send(option).nil? }
31
+ { name => options }.as_json
32
+ end
33
+
34
+ private
35
+
36
+ def cast_value(value)
37
+ Elasticsearch::Model::HashWrapper[value]
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type
2
+ class Histogram < Stretchy::Attributes::Type::Base
3
+ def type
4
+ :histogram
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,29 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines an IP attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
6
+ # :ignore_malformed - The Boolean indicating if malformed IP addresses should be ignored. Defaults to false.
7
+ # :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
8
+ # :null_value - The String IPv4 or IPv6 value to be substituted for any explicit null values. Defaults to null.
9
+ # :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'reject' or 'ignore'.
10
+ # :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
11
+ # :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
12
+ # :time_series_dimension - The Boolean indicating if the field is a time series dimension. Defaults to false.
13
+ #
14
+ # Examples
15
+ #
16
+ # class MyModel
17
+ # include StretchyModel
18
+ # attribute :ip_address, :ip, ignore_malformed: true, time_series_dimension: true
19
+ # end
20
+ #
21
+ # Returns nothing.
22
+ class IP < Stretchy::Attributes::Type::Base
23
+ OPTIONS = [:doc_values, :ignore_malformed, :index, :null_value, :on_script_error, :script, :store, :time_series_dimension]
24
+
25
+ def type
26
+ :ip
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a join attribute for the model.
3
+ #
4
+ # opts - The Hash options used to define the parent/child relation within documents of the same index (default: {}):
5
+ # :relations - The Hash defining a set of possible relations within the documents, each relation being a parent name and a child name.
6
+ #
7
+ # Examples
8
+ #
9
+ # class MyModel
10
+ # include StretchyModel
11
+ # attribute :relation, :join, relations: { question: :answer }
12
+ # end
13
+ #
14
+ # Returns nothing.
15
+ class Join < Stretchy::Attributes::Type::Base
16
+ OPTIONS = [:relations]
17
+
18
+ def type
19
+ :join
20
+ end
21
+ end
22
+ end
@@ -1,11 +1,37 @@
1
- module Stretchy
2
- module Attributes
3
- module Type
4
- class Keyword < ActiveModel::Type::String # :nodoc:
5
- def type
6
- :keyword
7
- end
8
- end
9
- end
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a keyword attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ #
6
+ # :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
7
+ # :eager_global_ordinals - The Boolean indicating if global ordinals should be loaded eagerly on refresh. Defaults to false.
8
+ # :fields - The Hash of multi-fields for the same string value to be indexed in multiple ways.
9
+ # :ignore_above - The Integer limit for the length of the string. Strings longer than this limit will not be indexed. Defaults to 2147483647.
10
+ # :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
11
+ # :index_options - The String indicating what information should be stored in the index for scoring purposes. Defaults to 'docs'.
12
+ # :meta - The Hash metadata about the field.
13
+ # :norms - The Boolean indicating if field-length should be taken into account when scoring queries. Defaults to false.
14
+ # :null_value - The String value to be substituted for any explicit null values. Defaults to null.
15
+ # :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
16
+ # :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
17
+ # :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
18
+ # :similarity - The String scoring algorithm or similarity to be used. Defaults to 'BM25'.
19
+ # :normalizer - The String pre-processor for the keyword prior to indexing. Defaults to null.
20
+ # :split_queries_on_whitespace - The Boolean indicating if full text queries should split the input on whitespace. Defaults to false.
21
+ # :time_series_dimension - The Boolean indicating if the field is a time series dimension. Defaults to false.
22
+ #
23
+ # Examples
24
+ # class MyModel
25
+ # include StretchyModel
26
+ # attribute :tag, :keyword, ignore_above: 256, time_series_dimension: true
27
+ # end
28
+ #
29
+ # Returns nothing.
30
+ class Keyword < Stretchy::Attributes::Type::Base
31
+ OPTIONS = [:doc_values, :eager_global_ordinals, :fields, :ignore_above, :index, :index_options, :meta, :norms, :null_value, :on_script_error, :script, :store, :similarity, :normalizer, :split_queries_on_whitespace, :time_series_dimension]
32
+
33
+ def type
34
+ :keyword
35
+ end
10
36
  end
11
- end
37
+ end
@@ -0,0 +1,8 @@
1
+ # a space-optimized variant of text that disables scoring and performs slower on queries that need positions. It is best suited for indexing log messages.
2
+ module Stretchy::Attributes::Type
3
+ class MatchOnlyText < Stretchy::Attributes::Type::Text
4
+ def type
5
+ :match_only_text
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,25 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a nested attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :dynamic - The String indicating if new properties should be added dynamically to an existing nested object. Can be 'true', 'false', or 'strict'. Defaults to 'true'.
6
+ # :properties - The Hash of fields within the nested object, which can be of any data type, including nested.
7
+ # :include_in_parent - The Boolean indicating if all fields in the nested object are also added to the parent document as standard fields. Defaults to false.
8
+ # :include_in_root - The Boolean indicating if all fields in the nested object are also added to the root document as standard fields. Defaults to false.
9
+ #
10
+ # Examples
11
+ #
12
+ # class MyModel
13
+ # include StretchyModel
14
+ # attribute :metadata, :nested, dynamic: 'strict', include_in_parent: true
15
+ # end
16
+ #
17
+ # Returns nothing.
18
+ class Nested < Stretchy::Attributes::Type::Base
19
+ OPTIONS = [:dynamic, :properties, :include_in_parent, :include_in_root]
20
+
21
+ def type
22
+ :nested
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,32 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ # Public: Defines a numeric attribute for the model. This is a base class for numeric types.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :coerce - The Boolean indicating if strings should be converted to numbers and fractions truncated for integers. Defaults to true.
6
+ # :doc_values - The Boolean indicating if the field should be stored on disk in a column-stride fashion. Defaults to true.
7
+ # :ignore_malformed - The Boolean indicating if malformed numbers should be ignored. Defaults to false.
8
+ # :index - The Boolean indicating if the field should be quickly searchable. Defaults to true.
9
+ # :meta - The Hash metadata about the field.
10
+ # :null_value - The Numeric value to be substituted for any explicit null values. Defaults to null.
11
+ # :on_script_error - The String defining what to do if the script defined by the :script parameter throws an error at indexing time. Can be 'fail' or 'continue'.
12
+ # :script - The String script that will index values generated by this script, rather than reading the values directly from the source.
13
+ # :store - The Boolean indicating if the field value should be stored and retrievable separately from the _source field. Defaults to false.
14
+ # :time_series_dimension - The Boolean indicating if the field is a time series dimension. Defaults to false.
15
+ # :time_series_metric - The String indicating if the field is a time series metric. Can be 'counter', 'gauge', or 'null'.
16
+ #
17
+ # Examples
18
+ #
19
+ # class MyModel
20
+ # include StretchyModel
21
+ # attribute :age, :integer, coerce: false, time_series_dimension: true
22
+ # end
23
+ #
24
+ # Returns nothing.
25
+ class Base < Stretchy::Attributes::Type::Base
26
+ OPTIONS = [:coerce, :doc_values, :ignore_malformed, :index, :meta, :null_value, :on_script_error, :script, :store, :time_series_dimension, :time_series_metric]
27
+
28
+ def type
29
+ raise NotImplementedError, "You must use one of the numeric types: integer, long, short, byte, double, float, half_float, scaled_float."
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class Byte < Base
3
+ def type
4
+ :byte
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class Double < Base
3
+ def type
4
+ :double
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class Float < Base
3
+ def type
4
+ :float
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class HalfFloat < Base
3
+ def type
4
+ :half_float
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class Integer < Stretchy::Attributes::Type::Base # :nodoc:
3
+ def type
4
+ :integer
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class Long < Base
3
+ def type
4
+ :long
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+
3
+ # Public: Defines a scaled_float attribute for the model.
4
+ #
5
+ # opts - The Hash options used to refine the attribute (default: {}):
6
+ # :scaling_factor - The Integer scaling factor to use when encoding values. This parameter is required.
7
+ #
8
+ # Examples
9
+ #
10
+ # class MyModel
11
+ # include StretchyModel
12
+ # attribute :rating, :scaled_float, scaling_factor: 10
13
+ # end
14
+ #
15
+ # Returns nothing.
16
+ class ScaledFloat < Base
17
+ OPTIONS = Base::OPTIONS + [:scaling_factor]
18
+
19
+ def type
20
+ :scaled_float
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class Short < Base
3
+ def type
4
+ :short
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Stretchy::Attributes::Type::Numeric
2
+ class UnsignedLong < Stretchy::Attributes::Type::Numeric::Base
3
+ def type
4
+ :unsigned_long
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a percolator attribute for the model.
3
+ #
4
+ # The percolator field type parses a JSON structure into a native query and stores that query,
5
+ # so that the percolate query can use it to match provided documents.
6
+ #
7
+ # Any field that contains a JSON object can be configured to be a percolator field.
8
+ # The percolator field type has no settings. Just configuring the percolator field type
9
+ # is sufficient to instruct Elasticsearch to treat a field as a query.
10
+ #
11
+ # Examples
12
+ #
13
+ # class MyModel < Stretchy::Record
14
+ # attribute :query, :percolator
15
+ # end
16
+ #
17
+ # Returns nothing.
18
+ class Percolator < Stretchy::Attributes::Type::Base
19
+ def type
20
+ :percolator
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a point attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :ignore_malformed - The Boolean indicating if malformed points should be ignored. Defaults to false.
6
+ # :ignore_z_value - The Boolean indicating if the z value of three dimension points should be ignored. Defaults to true.
7
+ # :null_value - The Point value to be substituted for any explicit null values. Defaults to null.
8
+ #
9
+ # Examples
10
+ #
11
+ # class MyModel
12
+ # include StretchyModel
13
+ # attribute :location, :point, ignore_malformed: true
14
+ # end
15
+ #
16
+ # Returns nothing.
17
+ class Point < Stretchy::Attributes::Type::Base
18
+ OPTIONS = [:ignore_malformed, :ignore_z_value, :null_value]
19
+
20
+ def type
21
+ :point
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ module Stretchy::Attributes::Type::Range
2
+ class Base < Stretchy::Attributes::Type::Base
3
+ OPTIONS = [:coerce, :index, :store]
4
+
5
+ def type
6
+ raise NotImplementedError, "You must use one of the range types: integer_range, float_range, long_range, double_range, date_range, or ip_range."
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ module Stretchy::Attributes::Type::Range
2
+ # Public: Defines a date_range attribute for the model.
3
+ #
4
+ # Examples
5
+ #
6
+ # class MyModel < Stretchy::Record
7
+ # attribute :birth_date_range, :date_range
8
+ # end
9
+ #
10
+ # Returns nothing.
11
+ class DateRange < Base
12
+
13
+ def type
14
+ :date_range
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Stretchy::Attributes::Type::Range
2
+ # Public: Defines a double_range attribute for the model.
3
+ #
4
+ # Examples
5
+ #
6
+ # class MyModel < Stretchy::Record
7
+ # attribute :weight_range, :double_range
8
+ # end
9
+ #
10
+ # Returns nothing.
11
+ class DoubleRange < Base
12
+
13
+ def type
14
+ :double_range
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ module Stretchy::Attributes::Type::Range
2
+ # Public: Defines a float_range attribute for the model.
3
+ #
4
+ # Examples
5
+ #
6
+ # class MyModel < Stretchy::Record
7
+ # attribute :rating_range, :float_range
8
+ # end
9
+ #
10
+ # Returns nothing.
11
+ class FloatRange < Base
12
+ def type
13
+ :float_range
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Stretchy::Attributes::Type::Range
2
+ # Public: Defines an integer_range attribute for the model.
3
+ #
4
+ # Examples
5
+ #
6
+ # class MyModel < Stretchy::Record
7
+ # attribute :age_range, :integer_range
8
+ # end
9
+ #
10
+ # Returns nothing.
11
+ class IntegerRange < Base
12
+ def type
13
+ :integer_range
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Stretchy::Attributes::Type::Range
2
+ # Public: Defines an ip_range attribute for the model.
3
+ #
4
+ # Examples
5
+ #
6
+ # class MyModel < Stretchy::Record
7
+ # attribute :ip_range, :ip_range
8
+ # end
9
+ #
10
+ # Returns nothing.
11
+ class IpRange < Base
12
+ def type
13
+ :ip_range
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ module Stretchy::Attributes::Type::Range
2
+ # Public: Defines a long_range attribute for the model.
3
+ #
4
+ # Examples
5
+ #
6
+ # class MyModel < Stretchy::Record
7
+ # attribute :population_range, :long_range
8
+ # end
9
+ #
10
+ # Returns nothing.
11
+ class LongRange < Base
12
+ def type
13
+ :long_range
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ module Stretchy::Attributes::Type
2
+ # Public: Defines a rank_feature attribute for the model.
3
+ #
4
+ # opts - The Hash options used to refine the attribute (default: {}):
5
+ # :positive_score_impact - The Boolean indicating if features correlate positively with the score. If set to false, the score decreases with the value of the feature instead of increasing. Defaults to true.
6
+ #
7
+ # Examples
8
+ #
9
+ # class MyModel < Stretchy::Record
10
+ # attribute :url_length, :rank_feature, positive_score_impact: false
11
+ # end
12
+ #
13
+ # Returns nothing.
14
+ class RankFeature < Stretchy::Attributes::Type::Base
15
+ OPTIONS = [:positive_score_impact]
16
+
17
+ def type
18
+ :rank_feature
19
+ end
20
+ end
21
+ end