Module: CPEE::Persistence

Defined in:
lib/cpee/persistence.rb

Constant Summary collapse

@@obj =
'instance'

Class Method Summary collapse

Class Method Details

.each_object(opts) ⇒ Object

}}}



114
115
116
117
118
# File 'lib/cpee/persistence.rb', line 114

def self::each_object(opts)
  opts[:redis].zrevrange(@@obj + 's',0,-1).each do |instance|
    yield instance
  end
end

.exists?(id, opts) ⇒ Boolean

}}}

Returns:

  • (Boolean)


107
108
109
# File 'lib/cpee/persistence.rb', line 107

def self::exists?(id,opts) #{{{
  opts[:redis].exists?(@@obj + ":#{id}/state")
end

.exists_handler?(id, opts, key) ⇒ Boolean

}}}

Returns:

  • (Boolean)


240
241
242
# File 'lib/cpee/persistence.rb', line 240

def self::exists_handler?(id,opts,key) #{{{
  opts[:redis].exists?(@@obj + ":#{id}/handlers/#{key}")
end

.extract_handler(id, opts, key) ⇒ Object

}}}



237
238
239
# File 'lib/cpee/persistence.rb', line 237

def self::extract_handler(id,opts,key) #{{{
  opts[:redis].smembers(@@obj + ":#{id}/handlers/#{key}")
end

.extract_handlers(id, opts) ⇒ Object

}}}



243
244
245
246
247
# File 'lib/cpee/persistence.rb', line 243

def self::extract_handlers(id,opts) #{{{
  opts[:redis].smembers(@@obj + ":#{id}/handlers").map do |e|
    [e, opts[:redis].get(@@obj + ":#{id}/handlers/#{e}/url")]
  end
end

.extract_item(id, opts, item) ⇒ Object

}}}



103
104
105
# File 'lib/cpee/persistence.rb', line 103

def self::extract_item(id,opts,item) #{{{
  opts[:redis].get(@@obj + ":#{id}/#{item}")
end

.extract_list(id, opts, item) ⇒ Object

}}}



85
86
87
88
89
# File 'lib/cpee/persistence.rb', line 85

def self::extract_list(id,opts,item) #{{{
  opts[:redis].zrange(@@obj + ":#{id}/#{item}",0,-1).map do |e|
    [e,opts[:redis].get(@@obj + ":#{id}/#{item}/#{e}")]
  end
end

.extract_set(id, opts, item) ⇒ Object

}}}



80
81
82
83
84
# File 'lib/cpee/persistence.rb', line 80

def self::extract_set(id,opts,item) #{{{
  opts[:redis].smembers(@@obj + ":#{id}/#{item}").map do |e|
    [e,opts[:redis].get(@@obj + ":#{id}/#{item}/#{e}")]
  end
end

.is_member?(id, opts, item, value) ⇒ Boolean

}}}

Returns:

  • (Boolean)


110
111
112
# File 'lib/cpee/persistence.rb', line 110

def self::is_member?(id,opts,item,value) #{{{
  opts[:redis].sismember(@@obj + ":#{id}/#{item}",value)
end

.keys(id, opts) ⇒ Object



156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/cpee/persistence.rb', line 156

def self::keys(id,opts)
  res = []
  res += Persistence::keys_extract_zset(opts,id,'dataelements')
  res += Persistence::keys_extract_name(opts,id,'dataelements')
  res += Persistence::keys_extract_zset(opts,id,'attributes')
  res += Persistence::keys_extract_name(opts,id,'attributes')
  res += Persistence::keys_extract_zset(opts,id,'endpoints')
  res += Persistence::keys_extract_name(opts,id,'endpoints')
  pos = Persistence::keys_extract_set(opts,id,'positions')
  res += pos
  pos.each do |p|
    res << File.join(p,'@passthrough')
  end
  res += Persistence::keys_extract_name(opts,id,'positions')
  hnd = Persistence::keys_extract_set(opts,id,'handlers')
  res += hnd
  res += Persistence::keys_extract_name(opts,id,'handlers')
  hnd.each do |h|
    res << File.join(h,'url')
    res += Persistence::keys_extract_set_raw(opts,h)
  end
  cbs = Persistence::keys_extract_set(opts,id,'callbacks')
  res += cbs
  res += Persistence::keys_extract_name(opts,id,'callbacks')
  cbs.each do |c|
    res << "#{c}/position"
    res << "#{c}/label"
    res << "#{c}/uuid"
    res << "#{c}/type"
    res << "#{c}/subscription"
  end
  res += Persistence::keys_extract_name(opts,id,'dsl')
  res += Persistence::keys_extract_name(opts,id,'dslx')
  res += Persistence::keys_extract_name(opts,id,'status','message')
  res += Persistence::keys_extract_name(opts,id,'status','id')
  res += Persistence::keys_extract_name(opts,id,'executionhandler')
  res += Persistence::keys_extract_name(opts,id,'description')
  res += Persistence::keys_extract_name(opts,id,'state')
  res += Persistence::keys_extract_name(opts,id,'state','@changed')
  res += Persistence::keys_extract_name(opts,id,'transformation','endpoints')
  res += Persistence::keys_extract_name(opts,id,'transformation','endpoints','@type')
  res += Persistence::keys_extract_name(opts,id,'transformation','description')
  res += Persistence::keys_extract_name(opts,id,'transformation','description','@type')
  res += Persistence::keys_extract_name(opts,id,'transformation','dataelements')
  res += Persistence::keys_extract_name(opts,id,'transformation','dataelements','@type')
  res
end

.keys_extract_name(opts, id, *item) ⇒ Object



152
153
154
# File 'lib/cpee/persistence.rb', line 152

def self::keys_extract_name(opts,id,*item)
  [@@obj + ":#{id}/#{File.join(*item)}"]
end

.keys_extract_set(opts, id, item) ⇒ Object



141
142
143
144
145
146
# File 'lib/cpee/persistence.rb', line 141

def self::keys_extract_set(opts,id,item)
  path = @@obj + ":#{id}/#{item}"
  opts[:redis].smembers(path).map do |e|
    File.join(path,e)
  end
end

.keys_extract_set_raw(opts, path) ⇒ Object



147
148
149
150
151
# File 'lib/cpee/persistence.rb', line 147

def self::keys_extract_set_raw(opts,path)
  opts[:redis].smembers(path).map do |e|
    File.join(File.dirname(path),e)
  end
end

.keys_extract_zset(opts, id, item) ⇒ Object



135
136
137
138
139
140
# File 'lib/cpee/persistence.rb', line 135

def self::keys_extract_zset(opts,id,item)
  path = @@obj + ":#{id}/#{item}"
  opts[:redis].zrange(path,0,-1).map do |e|
    File.join(path,e)
  end
end

.new_object(opts) ⇒ Object



120
121
122
123
124
# File 'lib/cpee/persistence.rb', line 120

def self::new_object(opts)
  id = opts[:redis].zrevrange(@@obj + 's', 0, 0).first.to_i + 1
  opts[:redis].zadd(@@obj + 's',id,id)
  id
end

.new_static_object(id, opts) ⇒ Object



125
126
127
128
# File 'lib/cpee/persistence.rb', line 125

def self::new_static_object(id,opts)
  opts[:redis].set(File.join(@@obj + ":#{id}",'state'),'')
  nil
end

.objObject

{{{



23
24
25
# File 'lib/cpee/persistence.rb', line 23

def self::obj #{{{
  @@obj
end

.obj=(it) ⇒ Object

}}}



26
27
28
# File 'lib/cpee/persistence.rb', line 26

def self::obj=(it) #{{{
  @@obj = it
end

.set_handler(id, opts, key, url, values, update = false) ⇒ Object

{{{



204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
# File 'lib/cpee/persistence.rb', line 204

def self::set_handler(id,opts,key,url,values,update=false) #{{{
  exis = opts[:redis].smembers(@@obj + ":#{id}/handlers/#{key}")

  if update == false && exis.length > 0
    return 405
  end

  ah = AttributesHelper.new
  attributes = Persistence::extract_list(id,opts,'attributes').to_h
  dataelements = Persistence::extract_list(id,opts,'dataelements').to_h
  endpoints = Persistence::extract_list(id,opts,'endpoints').to_h

  deleted = exis - values

  CPEE::Message::send(
    :event,
    'handler/change',
    opts[:url],
    id,
    Persistence::extract_item(id,opts,'attributes/uuid'),
    Persistence::extract_item(id,opts,'attributes/info'),
    {
      :key => key,
      :url => url,
      :changed => values,
      :deleted => deleted,
      :attributes => ah.translate(attributes,dataelements,endpoints),
    },
    opts[:redis]
  )

  200
end

.set_item(id, opts, item, value) ⇒ Object

}}}



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/cpee/persistence.rb', line 91

def self::set_item(id,opts,item,value) #{{{
  CPEE::Message::send(
    :event,
    File.join(item,'change'),
    opts[:url],
    id,
    Persistence::extract_item(id,opts,'attributes/uuid'),
    Persistence::extract_item(id,opts,'attributes/info'),
    value,
    opts[:redis]
  )
end

.set_list(id, opts, item, values, diff = false, delete = false, deletions = []) ⇒ Object

{{{



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/cpee/persistence.rb', line 34

def self::set_list(id,opts,item,values,diff=false,delete=false,deletions=[]) #{{{
  ah = AttributesHelper.new
  attributes = Persistence::extract_list(id,opts,'attributes').to_h
  dataelements = Persistence::extract_list(id,opts,'dataelements').to_h
  endpoints = Persistence::extract_list(id,opts,'endpoints').to_h
  oldvalues = case item
    when 'attributes' then attributes
    when 'endpoints' then endpoints
    when 'dataelements' then dataelements
  end
  if diff
    deletions = oldvalues.keys - values.keys
    values.delete_if do |k,v|
      oldvalues[k] && oldvalues[k] == v
    end
  end
  payload = {
    :values => oldvalues.merge(values).transform_values{|val| JSON::parse(val) rescue val },
    :attributes => ah.translate(attributes,dataelements,endpoints),
  }
  CPEE::Message::send(
    :event,
    File.join(item,'modify'),
    opts[:url],
    id,
    Persistence::extract_item(id,opts,'attributes/uuid'),
    Persistence::extract_item(id,opts,'attributes/info'),
    payload,
    opts[:redis]
  )
  payload[:values] = values.transform_values{|val| JSON::parse(val) rescue val }
  payload[:changed] = values.keys
  if delete
    payload[:deleted] = deletions
  end
  CPEE::Message::send(
    :event,
    File.join(item,'change'),
    opts[:url],
    id,
    Persistence::extract_item(id,opts,'attributes/uuid'),
    Persistence::extract_item(id,opts,'attributes/info'),
    payload,
    opts[:redis]
  )
end

.wait(opts) ⇒ Object

}}}



30
31
32
# File 'lib/cpee/persistence.rb', line 30

def self::wait(opts)
  CPEE::Message::wait(opts[:redis],opts[:redis_dyn].call('Temporary Storage Transaction Subscriber'))
end