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
- #clone(srcdoctype, dstdocname) ⇒ Object
- #compute_store_index(doctype, source, user_id) ⇒ Object
-
#compute_token(doc_key) ⇒ Object
Computes token for a single client request.
- #delete_data(doctype, data) ⇒ Object
-
#docname(doctype) ⇒ Object
Generate the fully-qualified docname.
- #exists?(dockey) ⇒ Boolean
- #flush_data(doctype) ⇒ Object
-
#get_data(doctype, type = Hash) ⇒ Object
Store wrapper methods for document.
- #get_db_doc(doctype) ⇒ Object
-
#get_diff_data(srcdoctype, dstdocname, p_size = nil) ⇒ Object
interface for doc diffs.
- #get_diff_data_bruteforce(srcdoctype, dstdocname, p_size = nil) ⇒ Object
- #get_list(doctype) ⇒ Object
- #get_object(doctype, key) ⇒ Object
- #get_objects(doctype, keys) ⇒ Object
- #get_value(doctype) ⇒ Object
- #put_data(doctype, data, append = false) ⇒ Object
- #put_list(doctype, data, append = false) ⇒ Object
- #put_object(doctype, key, data = {}) ⇒ Object
- #put_tmp_data(doctype, data, append = false) ⇒ Object
- #put_value(doctype, data) ⇒ Object
- #remove_objects(doctype, deletes) ⇒ Object
- #rename(srcdoctype, dstdoctype) ⇒ Object
- #rename_tmp_data(srcdoctype, dstdoctype) ⇒ Object
- #set_db_doc(doctype, data, append = false) ⇒ Object
-
#store_index(doctype) ⇒ Object
default data sharding.
-
#update_count(doctype, count) ⇒ Object
Update count for a given document.
- #update_elements(doctype, inserts_elements_map, deletes_elements_map) ⇒ Object
- #update_objects(doctype, updates) ⇒ Object
- #verify_doctype(doctype) ⇒ Object
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
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 |