Class: Sbmt::Outbox::BaseItem
- Inherits:
-
Object
- Object
- Sbmt::Outbox::BaseItem
- Defined in:
- app/models/sbmt/outbox/base_item.rb
Direct Known Subclasses
Class Method Summary collapse
- .box_id ⇒ Object
- .box_name ⇒ Object
- .box_type ⇒ Object
- .bucket_partitions ⇒ Object
- .calc_bucket_partitions(count) ⇒ Object
- .config ⇒ Object
- .partition_buckets ⇒ Object
Instance Method Summary collapse
- #add_error(ex_or_msg) ⇒ Object
- #for_processing? ⇒ Boolean
- #increment_errors_counter ⇒ Object
- #log_details ⇒ Object
- #max_retries_exceeded? ⇒ Boolean
- #options ⇒ Object
- #partition ⇒ Object
- #payload ⇒ Object
- #payload=(value) ⇒ Object
- #payload_builder ⇒ Object
- #proto_payload ⇒ Object
- #proto_payload=(value) ⇒ Object
- #retriable? ⇒ Boolean
- #touch_processed_at ⇒ Object
- #transports ⇒ Object
Class Method Details
.box_id ⇒ Object
25 26 27 |
# File 'app/models/sbmt/outbox/base_item.rb', line 25 def box_id @box_id ||= name.underscore.tr("/", "-").dasherize end |
.box_name ⇒ Object
21 22 23 |
# File 'app/models/sbmt/outbox/base_item.rb', line 21 def box_name @box_name ||= name.underscore end |
.box_type ⇒ Object
17 18 19 |
# File 'app/models/sbmt/outbox/base_item.rb', line 17 def box_type raise NotImplementedError end |
.bucket_partitions ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'app/models/sbmt/outbox/base_item.rb', line 45 def bucket_partitions @bucket_partitions ||= partition_buckets.each_with_object({}) do |(partition, buckets), m| buckets.each do |bucket| m[bucket] = partition end end end |
.calc_bucket_partitions(count) ⇒ Object
33 34 35 36 37 38 39 |
# File 'app/models/sbmt/outbox/base_item.rb', line 33 def calc_bucket_partitions(count) (0...count).to_a .index_with do |x| (0...config.bucket_size).to_a .select { |p| p % count == x } end end |
.config ⇒ Object
29 30 31 |
# File 'app/models/sbmt/outbox/base_item.rb', line 29 def config @config ||= lookup_config.new(box_id: box_id, box_name: box_name) end |
.partition_buckets ⇒ Object
41 42 43 |
# File 'app/models/sbmt/outbox/base_item.rb', line 41 def partition_buckets @partition_buckets ||= calc_bucket_partitions(config.partition_size) end |
Instance Method Details
#add_error(ex_or_msg) ⇒ Object
153 154 155 156 157 158 159 |
# File 'app/models/sbmt/outbox/base_item.rb', line 153 def add_error(ex_or_msg) increment_errors_counter return unless has_attribute?(:error_log) self.error_log = "-----\n#{Time.zone.now} \n #{ex_or_msg}\n #{add_backtrace(ex_or_msg)}" end |
#for_processing? ⇒ Boolean
104 105 106 |
# File 'app/models/sbmt/outbox/base_item.rb', line 104 def for_processing? pending? end |
#increment_errors_counter ⇒ Object
149 150 151 |
# File 'app/models/sbmt/outbox/base_item.rb', line 149 def increment_errors_counter increment(:errors_count) end |
#log_details ⇒ Object
126 127 128 |
# File 'app/models/sbmt/outbox/base_item.rb', line 126 def log_details default_log_details.deep_merge(extra_log_details) end |
#max_retries_exceeded? ⇒ Boolean
142 143 144 145 146 147 |
# File 'app/models/sbmt/outbox/base_item.rb', line 142 def max_retries_exceeded? return false if config.strict_order return true unless retriable? errors_count > config.max_retries end |
#options ⇒ Object
108 109 110 111 112 |
# File 'app/models/sbmt/outbox/base_item.rb', line 108 def = (self[:options] || {}).symbolize_keys = .deep_merge().deep_merge() .symbolize_keys end |
#partition ⇒ Object
161 162 163 |
# File 'app/models/sbmt/outbox/base_item.rb', line 161 def partition self.class.bucket_partitions.fetch(bucket) end |
#payload ⇒ Object
88 89 90 91 92 93 94 |
# File 'app/models/sbmt/outbox/base_item.rb', line 88 def payload if has_attribute?(:proto_payload) proto_payload else self[:payload] end end |
#payload=(value) ⇒ Object
96 97 98 99 100 101 102 |
# File 'app/models/sbmt/outbox/base_item.rb', line 96 def payload=(value) if has_attribute?(:proto_payload) self.proto_payload = value else self[:payload] = value end end |
#payload_builder ⇒ Object
130 131 132 |
# File 'app/models/sbmt/outbox/base_item.rb', line 130 def payload_builder nil end |
#proto_payload ⇒ Object
72 73 74 75 76 77 78 |
# File 'app/models/sbmt/outbox/base_item.rb', line 72 def proto_payload if has_attribute?(:payload) payload else self[:proto_payload] end end |
#proto_payload=(value) ⇒ Object
80 81 82 83 84 85 86 |
# File 'app/models/sbmt/outbox/base_item.rb', line 80 def proto_payload=(value) if has_attribute?(:payload) self.payload = value else self[:proto_payload] = value end end |
#retriable? ⇒ Boolean
138 139 140 |
# File 'app/models/sbmt/outbox/base_item.rb', line 138 def retriable? config.max_retries > 0 end |
#touch_processed_at ⇒ Object
134 135 136 |
# File 'app/models/sbmt/outbox/base_item.rb', line 134 def touch_processed_at self.processed_at = Time.current end |
#transports ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 |
# File 'app/models/sbmt/outbox/base_item.rb', line 114 def transports if config.transports.empty? raise Error, "Transports are not defined" end if has_attribute?(:event_name) config.transports.fetch(event_name) else config.transports.fetch(:_all_) end end |