Class: Realm::Elasticsearch::Repository

Inherits:
Object
  • Object
show all
Defined in:
lib/realm/elasticsearch/repository.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Repository

Returns a new instance of Repository.



21
22
23
# File 'lib/realm/elasticsearch/repository.rb', line 21

def initialize(client)
  @client = client
end

Class Method Details

.index_name(value = :not_provided) ⇒ Object



15
16
17
18
19
# File 'lib/realm/elasticsearch/repository.rb', line 15

def self.index_name(value = :not_provided)
  @index_name = value.to_sym unless value == :not_provided
  @index_name = repo_name.pluralize unless defined?(@index_name)
  @index_name
end

.repo_name(value = :not_provided) ⇒ Object



9
10
11
12
13
# File 'lib/realm/elasticsearch/repository.rb', line 9

def self.repo_name(value = :not_provided)
  @repo_name = value.to_sym unless value == :not_provided
  @repo_name = name.demodulize.underscore unless defined?(@repo_name)
  @repo_name
end

Instance Method Details

#allObject



31
32
33
# File 'lib/realm/elasticsearch/repository.rb', line 31

def all
  multiple(raw_search(query: { match_all: {} }))
end

#create(id: nil, **attrs) ⇒ Object



35
36
37
38
39
# File 'lib/realm/elasticsearch/repository.rb', line 35

def create(id: nil, **attrs)
  client.index(index: index_name, type: '_doc', id: id, body: attrs, refresh: refresh?)
rescue ::Elasticsearch::Transport::Transport::Errors::Conflict
  raise Realm::Persistence::Conflict
end

#delete(id:) ⇒ Object



49
50
51
52
53
54
# File 'lib/realm/elasticsearch/repository.rb', line 49

def delete(id:)
  client.delete(index: index_name, type: '_doc', id: id, refresh: refresh?)
  true
rescue ::Elasticsearch::Transport::Transport::Errors::NotFound
  false
end

#delete_by(params) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/realm/elasticsearch/repository.rb', line 60

def delete_by(params)
  client.delete_by_query(
    index: index_name,
    refresh: refresh?,
    body: { query: {
      bool: {
        must: match_params(params),
      },
    } },
  )
end

#find(id:) ⇒ Object



25
26
27
28
29
# File 'lib/realm/elasticsearch/repository.rb', line 25

def find(id:)
  single(client.get(index: index_name, id: id))
rescue ::Elasticsearch::Transport::Transport::Errors::NotFound
  nil
end

#raw_search(yaml: nil, options: {}, **body) ⇒ Object



76
77
78
# File 'lib/realm/elasticsearch/repository.rb', line 76

def raw_search(yaml: nil, options: {}, **body)
  client.search(index: index_name, body: yaml ? YAML.safe_load(yaml) : body, **options)
end

#raw_update(id, body = {}) ⇒ Object



72
73
74
# File 'lib/realm/elasticsearch/repository.rb', line 72

def raw_update(id, body = {})
  client.update(index: index_name, type: '_doc', id: id, body: body, refresh: refresh?)
end

#search_by(params) ⇒ Object



56
57
58
# File 'lib/realm/elasticsearch/repository.rb', line 56

def search_by(params)
  multiple(raw_search(query: { bool: { must: match_params(params) } }))
end

#truncate!Object



80
81
82
83
84
85
86
87
# File 'lib/realm/elasticsearch/repository.rb', line 80

def truncate!
  client.delete_by_query(
    index: index_name,
    body: { query: { match_all: {} } },
    conflicts: 'proceed',
    refresh: refresh?,
  )
end

#update(id:, **attrs) ⇒ Object



41
42
43
# File 'lib/realm/elasticsearch/repository.rb', line 41

def update(id:, **attrs)
  raw_update(id, doc: attrs)
end

#upsert(id:, **attrs) ⇒ Object



45
46
47
# File 'lib/realm/elasticsearch/repository.rb', line 45

def upsert(id:, **attrs)
  raw_update(id, doc: attrs, doc_as_upsert: true)
end