Module: Document

Included in:
Rhoconnect::Client, Rhoconnect::Source
Defined in:
lib/rhoconnect/document.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
# File 'lib/rhoconnect/document.rb', line 3

def included(base)
  base.extend ClassMethods
end

Instance Method Details

#clone(srcdoctype, dstdocname) ⇒ Object



129
130
131
132
# File 'lib/rhoconnect/document.rb', line 129

def clone(srcdoctype, dstdocname)
  verify_doctype(srcdoctype)
  Store.get_store(store_index(srcdoctype)).clone(docname(srcdoctype), dstdocname)
end

#compute_store_index(doctype, source, user_id) ⇒ Object



144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/rhoconnect/document.rb', line 144

def compute_store_index(doctype, source, user_id)
  index = 0
  # app-partitioned sources go to 0
  # everything else if sharded
  if(source.partition == :user)
    index_char = Digest::SHA1.hexdigest("#{source.partition_name}:#{source.name}")[0]
    # designate Store 0 only for system data
    num_user_stores = Store.num_stores - 1
    if num_user_stores > 0
      index = index_char.hex/(16/num_user_stores)
      if index >= num_user_stores
        index = num_user_stores - 1
      end
      # make up for fact that user store index starts from 1
      index += 1
    end
  end
  index
end

#compute_token(doc_key) ⇒ Object

Computes token for a single client request



198
199
200
201
202
203
# File 'lib/rhoconnect/document.rb', line 198

def compute_token(doc_key)
  verify_doctype(doc_key)
  token = get_token
  Store.get_store(store_index(doc_key)).put_value(docname(doc_key),token)
  token.to_s
end

#delete_data(doctype, data) ⇒ Object



108
109
110
111
# File 'lib/rhoconnect/document.rb', line 108

def delete_data(doctype,data)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).delete_data(docname(doctype),data)
end

#docname(doctype) ⇒ Object

Generate the fully-qualified docname



135
136
137
# File 'lib/rhoconnect/document.rb', line 135

def docname(doctype)
  "#{self.class.class_prefix(self.class)}:#{self.app_id}:#{self.doc_suffix(doctype)}"
end

#exists?(dockey) ⇒ Boolean

Returns:

  • (Boolean)


164
165
166
167
# File 'lib/rhoconnect/document.rb', line 164

def exists?(dockey)
  verify_doctype(dockey)
  Store.get_store(store_index(dockey)).exists?(docname(dockey))
end

#flush_data(doctype) ⇒ Object



113
114
115
116
# File 'lib/rhoconnect/document.rb', line 113

def flush_data(doctype)
  verify_doctype(doctype)
  Store.flush_data(docname(doctype))
end

#get_data(doctype, type = Hash) ⇒ Object

Store wrapper methods for document



49
50
51
52
# File 'lib/rhoconnect/document.rb', line 49

def get_data(doctype,type=Hash)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).get_data(docname(doctype), type)
end

#get_db_doc(doctype) ⇒ Object



43
44
45
46
# File 'lib/rhoconnect/document.rb', line 43

def get_db_doc(doctype)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).get_db_doc(docname(doctype))
end

#get_diff_data(srcdoctype, dstdocname, p_size = nil) ⇒ Object

interface for doc diffs



182
183
184
185
# File 'lib/rhoconnect/document.rb', line 182

def get_diff_data(srcdoctype, dstdocname, p_size = nil)
  verify_doctype(srcdoctype)
  Store.get_store(store_index(srcdoctype)).get_diff_data(docname(srcdoctype), dstdocname, p_size)
end

#get_diff_data_bruteforce(srcdoctype, dstdocname, p_size = nil) ⇒ Object



187
188
189
190
# File 'lib/rhoconnect/document.rb', line 187

def get_diff_data_bruteforce(srcdoctype, dstdocname, p_size = nil)
  verify_doctype(srcdoctype)
  Store.get_store(store_index(srcdoctype)).get_diff_data_bruteforce(docname(srcdoctype), dstdocname, p_size)
end

#get_list(doctype) ⇒ Object



64
65
66
67
# File 'lib/rhoconnect/document.rb', line 64

def get_list(doctype)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).get_list(docname(doctype))
end

#get_object(doctype, key) ⇒ Object



54
55
56
57
# File 'lib/rhoconnect/document.rb', line 54

def get_object(doctype, key)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).get_object(docname(doctype), key)
end

#get_objects(doctype, keys) ⇒ Object



59
60
61
62
# File 'lib/rhoconnect/document.rb', line 59

def get_objects(doctype, keys)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).get_objects(docname(doctype), keys)
end

#get_value(doctype) ⇒ Object



69
70
71
72
# File 'lib/rhoconnect/document.rb', line 69

def get_value(doctype)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).get_value(docname(doctype))
end

#put_data(doctype, data, append = false) ⇒ Object



79
80
81
82
# File 'lib/rhoconnect/document.rb', line 79

def put_data(doctype,data,append=false)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).put_data(docname(doctype),data,append)
end

#put_list(doctype, data, append = false) ⇒ Object



88
89
90
91
# File 'lib/rhoconnect/document.rb', line 88

def put_list(doctype,data,append=false)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).put_list(docname(doctype),data,append)
end

#put_object(doctype, key, data = {}) ⇒ Object



74
75
76
77
# File 'lib/rhoconnect/document.rb', line 74

def put_object(doctype, key, data={})
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).put_object(docname(doctype), key, data)
end

#put_tmp_data(doctype, data, append = false) ⇒ Object



84
85
86
# File 'lib/rhoconnect/document.rb', line 84

def put_tmp_data(doctype, data, append=false)
  Store.get_store(store_index(doctype)).put_tmp_data(docname(doctype),data,append)  
end

#put_value(doctype, data) ⇒ Object



103
104
105
106
# File 'lib/rhoconnect/document.rb', line 103

def put_value(doctype,data)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).put_value(docname(doctype),data)
end

#remove_objects(doctype, deletes) ⇒ Object



98
99
100
101
# File 'lib/rhoconnect/document.rb', line 98

def remove_objects(doctype,deletes)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).delete_objects(docname(doctype),deletes)
end

#rename(srcdoctype, dstdoctype) ⇒ Object



118
119
120
121
122
# File 'lib/rhoconnect/document.rb', line 118

def rename(srcdoctype,dstdoctype)
  verify_doctype(srcdoctype)
  verify_doctype(dstdoctype)
  Store.get_store(store_index(srcdoctype)).rename(docname(srcdoctype),docname(dstdoctype))
end

#rename_tmp_data(srcdoctype, dstdoctype) ⇒ Object



124
125
126
127
# File 'lib/rhoconnect/document.rb', line 124

def rename_tmp_data(srcdoctype,dstdoctype)
  verify_doctype(dstdoctype)
  Store.get_store(store_index(srcdoctype)).rename_tmp_data(docname(srcdoctype),docname(dstdoctype))
end

#set_db_doc(doctype, data, append = false) ⇒ Object



38
39
40
41
# File 'lib/rhoconnect/document.rb', line 38

def set_db_doc(doctype, data, append=false)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).set_db_doc(docname(doctype), data, append)
end

#store_index(doctype) ⇒ Object

default data sharding



140
141
142
# File 'lib/rhoconnect/document.rb', line 140

def store_index(doctype)
  0
end

#update_count(doctype, count) ⇒ Object

Update count for a given document



170
171
172
173
# File 'lib/rhoconnect/document.rb', line 170

def update_count(doctype,count)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).update_count(docname(doctype), count)
end

#update_elements(doctype, inserts_elements_map, deletes_elements_map) ⇒ Object



192
193
194
195
# File 'lib/rhoconnect/document.rb', line 192

def update_elements(doctype, inserts_elements_map, deletes_elements_map)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).update_elements(docname(doctype), inserts_elements_map, deletes_elements_map)
end

#update_objects(doctype, updates) ⇒ Object



93
94
95
96
# File 'lib/rhoconnect/document.rb', line 93

def update_objects(doctype,updates)
  verify_doctype(doctype)
  Store.get_store(store_index(doctype)).update_objects(docname(doctype),updates)
end

#verify_doctype(doctype) ⇒ Object



175
176
177
178
179
# File 'lib/rhoconnect/document.rb', line 175

def verify_doctype(doctype)
  # doctype must be in the list (or list must be empty - which is default for 'all documents are valid')
  return true if !self.class.enforce_valid_doctypes or self.class.valid_doctypes.member?(doctype.to_sym) or (self.class.valid_doctypes.size == 0)
  raise Rhoconnect::InvalidDocumentException.new("Invalid document type #{doctype} for #{self.class.name}")
end