Class: Wongi::Engine::JoinResults

Inherits:
Object
  • Object
show all
Defined in:
lib/wongi-engine/join_results.rb

Instance Method Summary collapse

Constructor Details

#initializeJoinResults

Returns a new instance of JoinResults.



6
7
8
9
10
# File 'lib/wongi-engine/join_results.rb', line 6

def initialize
  @by_wme = Hash.new { |h, k| h[k] = {} }
  @by_token = Hash.new { |h, k| h[k] = {} }
  @hidden = {}
end

Instance Method Details

#add(jr) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/wongi-engine/join_results.rb', line 30

def add(jr)
  if hidden.key?(jr)
    hidden.delete(jr)
  else
    by_wme[jr.wme][jr] = true
    by_token[jr.token.object_id][jr] = true
  end
end

#for(wme: nil, token: nil) ⇒ Object



12
13
14
15
16
17
18
19
20
# File 'lib/wongi-engine/join_results.rb', line 12

def for(wme: nil, token: nil)
  if wme
    by_wme.key?(wme) ? by_wme[wme].keys : []
  elsif token
    by_token.key?(token.object_id) ? by_token[token.object_id].keys : []
  else
    []
  end
end

#has?(jr) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/wongi-engine/join_results.rb', line 22

def has?(jr)
  by_wme.key?(jr.wme) && by_wme[jr.wme].key?(jr)
end

#hidden?(jr) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/wongi-engine/join_results.rb', line 26

def hidden?(jr)
  hidden.key?(jr)
end

#hide(jr) ⇒ Object



60
61
62
# File 'lib/wongi-engine/join_results.rb', line 60

def hide(jr)
  hidden[jr] = true
end

#remove(jr) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/wongi-engine/join_results.rb', line 39

def remove(jr)
  unless has?(jr)
    hide(jr)
    return
  end

  if by_wme.key?(jr.wme)
    by_wme[jr.wme].delete(jr)
    if by_wme[jr.wme].empty?
      by_wme.delete(jr.wme)
    end
  end

  if by_token.key?(jr.token.object_id)
    by_token[jr.token.object_id].delete(jr)
    if by_token[jr.token.object_id].empty?
      by_token.delete(jr.token.object_id)
    end
  end
end

#remove_token(token) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/wongi-engine/join_results.rb', line 64

def remove_token(token)
  return unless by_token.key?(token.object_id)

  by_token[token.object_id].keys.each do |jr|
    remove(jr)
  end
end

#remove_wme(wme) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/wongi-engine/join_results.rb', line 72

def remove_wme(wme)
  return unless by_wme.key?(wme)

  by_wme[wme].keys do |jr|
    remove(jr)
  end
end