Class: ASIR::Coder::Database
- Inherits:
-
ASIR::Coder
- Object
- ASIR::Coder
- ASIR::Coder::Database
- Defined in:
- lib/asir/coder/database.rb
Overview
!SLIDE Database Coder
Construct a database object from a Message or Result object.
obj = model.new(:object => partially encoded object, :original_object => original object, :payload => Binary) obj.payload
See Transport::Database:
obj.save!
Instance Attribute Summary collapse
-
#additional_data_coder ⇒ Object
The coder object => object_payload, must code to some binary String.
-
#after_model_new ⇒ Object
Callback: model_obj = call(self, obj, model_obj).
-
#before_model_new ⇒ Object
Callback: attrs = call(self, obj, attrs : Hash).
-
#message_model ⇒ Object
The model for Message objects.
-
#other_model ⇒ Object
The model for everything else.
-
#payload_coder ⇒ Object
The coder object => object_payload, must code to some binary String.
-
#result_model ⇒ Object
The model for Result objects.
Attributes included from Log
Instance Method Summary collapse
Methods inherited from ASIR::Coder
#_subclass_responsibility, #decode, #encode, #prepare
Methods included from Log
#_log, #_log_enabled=, #_log_enabled?, #_log_format, #_log_result, enabled, enabled=, included
Methods included from Initialization
Instance Attribute Details
#additional_data_coder ⇒ Object
The coder object => object_payload, must code to some binary String.
25 26 27 |
# File 'lib/asir/coder/database.rb', line 25 def additional_data_coder @additional_data_coder end |
#after_model_new ⇒ Object
Callback: model_obj = call(self, obj, model_obj)
30 31 32 |
# File 'lib/asir/coder/database.rb', line 30 def after_model_new @after_model_new end |
#before_model_new ⇒ Object
Callback: attrs = call(self, obj, attrs : Hash)
28 29 30 |
# File 'lib/asir/coder/database.rb', line 28 def before_model_new @before_model_new end |
#message_model ⇒ Object
The model for Message objects.
18 19 20 |
# File 'lib/asir/coder/database.rb', line 18 def @message_model end |
#other_model ⇒ Object
The model for everything else.
22 23 24 |
# File 'lib/asir/coder/database.rb', line 22 def other_model @other_model end |
#payload_coder ⇒ Object
The coder object => object_payload, must code to some binary String.
25 26 27 |
# File 'lib/asir/coder/database.rb', line 25 def payload_coder @payload_coder end |
#result_model ⇒ Object
The model for Result objects.
20 21 22 |
# File 'lib/asir/coder/database.rb', line 20 def result_model @result_model end |
Instance Method Details
#_decode(obj) ⇒ Object
82 83 84 |
# File 'lib/asir/coder/database.rb', line 82 def _decode obj payload_coder.prepare.decode(obj.payload) end |
#_encode(in_obj) ⇒ Object
32 33 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 80 |
# File 'lib/asir/coder/database.rb', line 32 def _encode in_obj obj = in_obj case when Message === in_obj && model = when Result === in_obj && result_model model = result_model else model = other_model end if model obj = in_obj.encode_more! # Prepare attributes for Model. attrs = { :original_object => in_obj } # Encode AdditionalData. if AdditionalData === obj and ad = obj._additional_data c = additional_data_coder || payload_coder attrs[:additional_data] = c.prepare.encode(ad) end # Results need links back to its Message. if Result === obj and = in_obj. attrs[:message_object] = # Do not encode entire Message in ResultModel#payload. obj. = nil if = [:database_id] attrs[:message_id] = end obj[:external_id] ||= [:external_id] # pp [ :Result_attrs, attrs ] end # Encode Object payload payload = payload_coder.prepare.encode(obj) attrs[:object] = obj attrs[:payload] = payload if @before_model_new attr = @before_model_new.call(self, in_obj, attrs) end m = model.new(attrs) if @after_model_new m = @after_model_new.call(self, in_obj, m) end obj = m end obj end |