Class: InOrder::Element

Inherits:
ApplicationRecord show all
Extended by:
Aux::GetKeys
Defined in:
app/models/in_order/element.rb

Overview

An element of a persisted linked-list

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.delete_elements(*keys) ⇒ Object



73
74
75
76
77
# File 'app/models/in_order/element.rb', line 73

def delete_elements(*keys)
  transaction do
    by_keys(get_keys keys).map {|element| element.destroy }
  end
end

.delete_list(*keys) ⇒ Object



79
80
81
# File 'app/models/in_order/element.rb', line 79

def delete_list(*keys)
  by_keys(get_keys keys).delete_all
end

.fetch_with_keys(*keys) ⇒ Object Also known as: fetch_with_key



68
69
70
# File 'app/models/in_order/element.rb', line 68

def fetch_with_keys(*keys)
  find_with_keys(keys).include_all
end

.find_with_keys(*keys) ⇒ Object Also known as: find_with_key



61
62
63
64
65
# File 'app/models/in_order/element.rb', line 61

def find_with_keys(*keys)
  keys = get_keys(keys)

  by_owner_keys(*keys.owner_key.to_a).by_scope(keys.scope)
end

.first_element(*keys) ⇒ Object



83
84
85
86
87
88
89
# File 'app/models/in_order/element.rb', line 83

def first_element(*keys)
  keyed = by_keys(get_keys keys)

  if keyed.exists?
    keyed.where.not(id: keyed.pluck(:element_id)).first
  end
end

.for_subject(*keys) ⇒ Object



95
96
97
98
99
# File 'app/models/in_order/element.rb', line 95

def for_subject(*keys)
  poly_key = Aux::PolyKey.new(yield)

  by_keys(get_keys keys).by_subject_keys(*poly_key.to_a)
end

.has_subject?(*keys, &block) ⇒ Boolean

Returns:

  • (Boolean)


101
102
103
# File 'app/models/in_order/element.rb', line 101

def has_subject?(*keys, &block)
  for_subject(keys, &block).exists?
end

.last_element(*keys) ⇒ Object



91
92
93
# File 'app/models/in_order/element.rb', line 91

def last_element(*keys)
  by_keys(get_keys keys).null_element.first
end


105
106
107
# File 'app/models/in_order/element.rb', line 105

def link_elements(end_of_former, beginning_of_latter)
  end_of_former.update_attribute :element, beginning_of_latter
end

Instance Method Details

#as_jsonObject



43
44
45
46
47
# File 'app/models/in_order/element.rb', line 43

def as_json(*)
  super except: %i(created_at updated_at),
        #include: :subject,
        methods: :value
end

#iteratorObject



56
57
58
# File 'app/models/in_order/element.rb', line 56

def iterator
  Aux::ElementIterator.new(to_keys)
end

#to_keysObject



52
53
54
# File 'app/models/in_order/element.rb', line 52

def to_keys
  Aux::Keys.new(owner, scope)
end

#to_sObject



39
40
41
# File 'app/models/in_order/element.rb', line 39

def to_s
  call.to_s
end

#valueObject



48
49
50
# File 'app/models/in_order/element.rb', line 48

def value
  subject.as_json
end