Class: Twilic::Core::Session::ShapeTable
- Inherits:
-
Data
- Object
- Data
- Twilic::Core::Session::ShapeTable
- Defined in:
- lib/twilic/core/session.rb
Instance Attribute Summary collapse
-
#by_id ⇒ Object
readonly
Returns the value of attribute by_id.
-
#by_keys ⇒ Object
readonly
Returns the value of attribute by_keys.
-
#next_id ⇒ Object
readonly
Returns the value of attribute next_id.
-
#observations ⇒ Object
readonly
Returns the value of attribute observations.
Class Method Summary collapse
Instance Method Summary collapse
- #clear ⇒ Object
- #get_id(keys) ⇒ Object
- #get_keys(id) ⇒ Object
- #observe(keys) ⇒ Object
- #register(keys) ⇒ Object
- #register_with_id(shape_id, keys) ⇒ Object
- #shape_key(keys) ⇒ Object
Instance Attribute Details
#by_id ⇒ Object (readonly)
Returns the value of attribute by_id
73 74 75 |
# File 'lib/twilic/core/session.rb', line 73 def by_id @by_id end |
#by_keys ⇒ Object (readonly)
Returns the value of attribute by_keys
73 74 75 |
# File 'lib/twilic/core/session.rb', line 73 def by_keys @by_keys end |
#next_id ⇒ Object (readonly)
Returns the value of attribute next_id
73 74 75 |
# File 'lib/twilic/core/session.rb', line 73 def next_id @next_id end |
#observations ⇒ Object (readonly)
Returns the value of attribute observations
73 74 75 |
# File 'lib/twilic/core/session.rb', line 73 def observations @observations end |
Class Method Details
.new_table ⇒ Object
74 75 76 |
# File 'lib/twilic/core/session.rb', line 74 def self.new_table new(by_keys: {}, by_id: {}, observations: {}, next_id: 0) end |
Instance Method Details
#clear ⇒ Object
129 130 131 |
# File 'lib/twilic/core/session.rb', line 129 def clear new(by_keys: {}, by_id: {}, observations: {}, next_id: 0) end |
#get_id(keys) ⇒ Object
82 83 84 85 |
# File 'lib/twilic/core/session.rb', line 82 def get_id(keys) id = by_keys[shape_key(keys)] id ? [id, true] : [0, false] end |
#get_keys(id) ⇒ Object
87 88 89 90 |
# File 'lib/twilic/core/session.rb', line 87 def get_keys(id) keys = by_id[id] keys ? [keys, true] : [nil, false] end |
#observe(keys) ⇒ Object
122 123 124 125 126 127 |
# File 'lib/twilic/core/session.rb', line 122 def observe(keys) sk = shape_key(keys) count = (observations[sk] || 0) + 1 replace(observations: observations.merge(sk => count)) count end |
#register(keys) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/twilic/core/session.rb', line 92 def register(keys) sk = shape_key(keys) id = by_keys[sk] return id if id id = next_id keys_copy = keys.dup new( by_keys: by_keys.merge(sk => id), by_id: by_id.merge(id => keys_copy), observations: observations, next_id: id + 1 ).then { |t| t.by_keys[sk] } end |
#register_with_id(shape_id, keys) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/twilic/core/session.rb', line 107 def register_with_id(shape_id, keys) sk = shape_key(keys) if by_id.key?(shape_id) return shape_key(by_id[shape_id]) == sk end return false if by_keys.key?(sk) && by_keys[sk] != shape_id keys_copy = keys.dup new_by_id = by_id.merge(shape_id => keys_copy) new_by_keys = by_keys.merge(sk => shape_id) new_next = [next_id, shape_id + 1].max replace(by_id: new_by_id, by_keys: new_by_keys, next_id: new_next) true end |
#shape_key(keys) ⇒ Object
78 79 80 |
# File 'lib/twilic/core/session.rb', line 78 def shape_key(keys) keys.join("\0") end |