Module: Runestone::ActiveRecord::BaseMethods

Extended by:
ActiveSupport::Concern
Defined in:
lib/runestone/active_record/base_methods.rb

Instance Method Summary collapse

Instance Method Details

#create_runestonesObject



76
77
78
# File 'lib/runestone/active_record/base_methods.rb', line 76

def create_runestones
  Runestone::IndexingJob.perform_later(self, :create_runestones!)
end

#create_runestones!Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/runestone/active_record/base_methods.rb', line 80

def create_runestones!
  conn = Runestone::Model.connection
  self.runestone_settings.each do |index_name, settings|
    settings.each do |setting|
      rdata = setting.extract_attributes(self)

      ts_column_names = %w(record_type record_id name dictionary data vector).map { |name| conn.quote_column_name(name) }
      ts_values = [
        conn.quote(conn.send(:type_map).lookup('varchar').serialize(self.class.base_class.name)),
        conn.quote(conn.send(:type_map).lookup('uuid').serialize(id)),
        index_name == :default ? 'NULL' : conn.quote(conn.send(:type_map).lookup('varchar').serialize(index_name.to_s)),
        conn.quote(conn.send(:type_map).lookup('varchar').serialize(setting.dictionary)),
        conn.quote(conn.send(:type_map).lookup('jsonb').serialize(rdata)),
        setting.vectorize(rdata).join(' || ')
      ]
      conn.execute("        INSERT INTO \#{Runestone::Model.quoted_table_name} (\#{ts_column_names.join(\",\")})\n        VALUES (\#{ts_values.join(',')})\n      SQL\n\n      Runestone::Corpus.add(*setting.corpus(rdata))\n    end\n  end\nend\n")

#update_runestonesObject



105
106
107
# File 'lib/runestone/active_record/base_methods.rb', line 105

def update_runestones
  Runestone::IndexingJob.preform_later(self, :update_runestones!)
end

#update_runestones!Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/runestone/active_record/base_methods.rb', line 109

def update_runestones!
  conn = Runestone::Model.connection
  self.runestone_settings.each do |index_name, settings|
    settings.each do |setting|
      rdata = setting.extract_attributes(self)

      if conn.execute("          UPDATE \#{Runestone::Model.quoted_table_name}\n          SET\n            data = \#{conn.quote(conn.send(:type_map).lookup('jsonb').serialize(rdata))},\n            vector = \#{setting.vectorize(rdata).join(' || ')}\n          WHERE record_type = \#{conn.quote(conn.send(:type_map).lookup('varchar').serialize(self.class.base_class.name))}\n          AND record_id = \#{conn.quote(conn.send(:type_map).lookup('integer').serialize(id))}\n          AND name \#{index_name == :default ? 'IS NULL' : \"= \" + conn.quote(conn.send(:type_map).lookup('integer').serialize(index_name))}\n          AND dictionary = \#{conn.quote(conn.send(:type_map).lookup('integer').serialize(setting.dictionary))}\n          SQL\n        create_runestones!\n      else\n        Runestone::Corpus.add(*setting.corpus(rdata))\n      end\n\n    end\n  end\nend\n").cmd_tuples == 0