class PostJson::QueryTranslator

Public Class Methods

new(relation) click to toggle source
# File lib/post_json/query_translator.rb, line 6
def initialize(relation)
  @relation = relation
end

Public Instance Methods

create(attributes = {}) click to toggle source
# File lib/post_json/query_translator.rb, line 48
def create(attributes = {})
  relation_query.create(attributes.with_indifferent_access)
end
each(&block) click to toggle source
# File lib/post_json/query_translator.rb, line 22
def each(&block)
  relation_query.each(&block)
end
execute(ignore_dynamic_indexes = false, &block) click to toggle source
# File lib/post_json/query_translator.rb, line 26
def execute(ignore_dynamic_indexes = false, &block)
  if ignore_dynamic_indexes == true || model_class.use_dynamic_index != true
    block.call(relation_query)
  else
    result = block.call(relation_query)
    select_query = ActiveRecord::Base.connection.last_select_query
    select_duration = ActiveRecord::Base.connection.last_select_query_duration * 1000
    if model_class.use_dynamic_index == true &&
       model_class.create_dynamic_index_milliseconds_threshold < select_duration
      selectors = select_query.scan(/.*?json_selector\('(.*?)', \"post_json_documents\"\.__doc__body\)/).flatten.uniq
      model_class.ensure_dynamic_index(*selectors)
    end
    result
  end
end
model_class() click to toggle source
# File lib/post_json/query_translator.rb, line 10
def model_class
  @relation.klass
end
primary_key() click to toggle source
# File lib/post_json/query_translator.rb, line 14
def primary_key
  model_class.primary_key
end
relation_query() click to toggle source
# File lib/post_json/query_translator.rb, line 42
def relation_query
  active_record_send_invocations.inject(@relation) do |query, send_arguments|
    query.send(*send_arguments)
  end
end
table_name() click to toggle source
# File lib/post_json/query_translator.rb, line 18
def table_name
  model_class.table_name
end