elasticsearch_record 1.0.2 → 1.1.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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +4 -0
  3. data/Gemfile.lock +10 -14
  4. data/README.md +180 -27
  5. data/docs/CHANGELOG.md +36 -18
  6. data/docs/LICENSE.txt +1 -1
  7. data/elasticsearch_record.gemspec +42 -0
  8. data/lib/active_record/connection_adapters/elasticsearch/column.rb +20 -6
  9. data/lib/active_record/connection_adapters/elasticsearch/database_statements.rb +142 -125
  10. data/lib/active_record/connection_adapters/elasticsearch/quoting.rb +2 -23
  11. data/lib/active_record/connection_adapters/elasticsearch/schema_creation.rb +30 -0
  12. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/attribute_methods.rb +103 -0
  13. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/column_methods.rb +42 -0
  14. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/create_table_definition.rb +158 -0
  15. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_alias_definition.rb +32 -0
  16. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_definition.rb +132 -0
  17. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_mapping_definition.rb +110 -0
  18. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/table_setting_definition.rb +136 -0
  19. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions/update_table_definition.rb +174 -0
  20. data/lib/active_record/connection_adapters/elasticsearch/schema_definitions.rb +37 -0
  21. data/lib/active_record/connection_adapters/elasticsearch/schema_dumper.rb +110 -0
  22. data/lib/active_record/connection_adapters/elasticsearch/schema_statements.rb +398 -174
  23. data/lib/active_record/connection_adapters/elasticsearch/table_statements.rb +232 -0
  24. data/lib/active_record/connection_adapters/elasticsearch/type/multicast_value.rb +2 -0
  25. data/lib/active_record/connection_adapters/elasticsearch/unsupported_implementation.rb +32 -0
  26. data/lib/active_record/connection_adapters/elasticsearch_adapter.rb +112 -19
  27. data/lib/arel/collectors/elasticsearch_query.rb +0 -1
  28. data/lib/arel/visitors/elasticsearch.rb +7 -579
  29. data/lib/arel/visitors/elasticsearch_base.rb +234 -0
  30. data/lib/arel/visitors/elasticsearch_query.rb +463 -0
  31. data/lib/arel/visitors/elasticsearch_schema.rb +124 -0
  32. data/lib/elasticsearch_record/core.rb +44 -10
  33. data/lib/elasticsearch_record/errors.rb +13 -0
  34. data/lib/elasticsearch_record/gem_version.rb +6 -2
  35. data/lib/elasticsearch_record/instrumentation/log_subscriber.rb +27 -9
  36. data/lib/elasticsearch_record/model_schema.rb +5 -0
  37. data/lib/elasticsearch_record/persistence.rb +31 -26
  38. data/lib/elasticsearch_record/query.rb +56 -17
  39. data/lib/elasticsearch_record/querying.rb +17 -0
  40. data/lib/elasticsearch_record/relation/calculation_methods.rb +3 -0
  41. data/lib/elasticsearch_record/relation/core_methods.rb +57 -17
  42. data/lib/elasticsearch_record/relation/query_clause_tree.rb +38 -1
  43. data/lib/elasticsearch_record/relation/query_methods.rb +6 -0
  44. data/lib/elasticsearch_record/relation/result_methods.rb +15 -9
  45. data/lib/elasticsearch_record/result.rb +32 -5
  46. data/lib/elasticsearch_record/statement_cache.rb +2 -1
  47. data/lib/elasticsearch_record.rb +2 -2
  48. metadata +29 -11
  49. data/.ruby-version +0 -1
  50. data/lib/elasticsearch_record/schema_migration.rb +0 -30
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_record/connection_adapters/abstract/schema_dumper'
4
+
5
+ module ActiveRecord
6
+ module ConnectionAdapters
7
+ module Elasticsearch
8
+ class SchemaDumper < ActiveRecord::ConnectionAdapters::SchemaDumper # :nodoc:
9
+ private
10
+
11
+ def table(table, stream, nested_blocks: false, **)
12
+ begin
13
+ self.table_name = table
14
+
15
+ schema = @connection.table_schema(table)
16
+ definition = @connection.create_table_definition(table, **schema)
17
+
18
+ # resolve string printer
19
+ tbl = StringIO.new
20
+
21
+ tbl.print " create_table #{remove_prefix_and_suffix(table).inspect}"
22
+ tbl.print ", force: true do |t|"
23
+
24
+ # ALIASES
25
+ if (aliases = definition.aliases).present?
26
+ tbl.puts
27
+
28
+ aliases.each do |tbl_alias|
29
+ tbl.puts " t.alias #{tbl_alias.name.inspect}, #{format_attribute(tbl_alias.attributes)}"
30
+ end
31
+ end
32
+
33
+ # MAPPINGS
34
+ if (mappings = definition.mappings).present?
35
+ tbl.puts
36
+
37
+ mappings.each do |mapping|
38
+ tbl.print " t.mapping #{mapping.name.inspect}, :#{mapping.type}"
39
+
40
+ if mapping.attributes.present?
41
+ if nested_blocks && mapping.attributes.count > 1
42
+ tbl.print " do |m|"
43
+ tbl.puts
44
+ mapping.attributes.each do |key, value|
45
+ tbl.print " m.#{key} = #{format_attribute(value, true)}"
46
+ tbl.puts
47
+ end
48
+ tbl.print " end"
49
+ else
50
+ tbl.print ", #{format_attribute(mapping.attributes)}"
51
+ end
52
+ end
53
+ tbl.puts
54
+ end
55
+ end
56
+
57
+ # SETTINGS
58
+ if (settings = definition.settings).present?
59
+ tbl.puts
60
+
61
+ settings.each do |setting|
62
+ tbl.print " t.setting #{setting.name.inspect}"
63
+
64
+ if nested_blocks && setting.value.is_a?(Hash) && setting.value.count > 1
65
+ tbl.print " do |s|"
66
+ tbl.puts
67
+ setting.value.each do |key, value|
68
+ tbl.print " s.#{key} = #{format_attribute(value, true)}"
69
+ tbl.puts
70
+ end
71
+ tbl.print " end"
72
+ else
73
+ tbl.print ", #{format_attribute(setting.value)}"
74
+ end
75
+ tbl.puts
76
+ end
77
+ end
78
+
79
+ tbl.puts " end"
80
+ tbl.puts
81
+
82
+ tbl.rewind
83
+ stream.print tbl.read
84
+ rescue => e
85
+ stream.puts "# Could not dump table #{table.inspect} because of following #{e.class}"
86
+ stream.puts "# #{e.message}"
87
+ stream.puts
88
+ ensure
89
+ self.table_name = nil
90
+ end
91
+ end
92
+
93
+ def format_attribute(attribute, nested = false)
94
+ case attribute
95
+ when Array
96
+ "[#{attribute.map { |value| format_attribute(value) }.join(', ')}]"
97
+ when Hash
98
+ if nested
99
+ "{ #{format_attribute(attribute)} }"
100
+ else
101
+ attribute.map { |key, value| "#{key}: #{format_attribute(value, true)}" }.join(', ')
102
+ end
103
+ else
104
+ attribute.inspect
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end