Module: Legion::Extensions::Audit::Runners::ApprovalQueue
- Extended by:
- ApprovalQueue
- Includes:
- Helpers::Lex
- Included in:
- ApprovalQueue
- Defined in:
- lib/legion/extensions/audit/runners/approval_queue.rb
Instance Method Summary collapse
- #approve(id:, reviewer_id:) ⇒ Object
- #list_pending(tenant_id: nil, limit: 50) ⇒ Object
- #reject(id:, reviewer_id:) ⇒ Object
- #show_approval(id:) ⇒ Object
- #submit(approval_type:, payload:, requester_id:, tenant_id: nil, resume_routing_key: nil, resume_exchange: nil) ⇒ Object
Instance Method Details
#approve(id:, reviewer_id:) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 32 def approve(id:, reviewer_id:, **) define_approval_queue_model record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue[id] return { success: false, reason: :not_found } unless record return { success: false, reason: :already_decided } unless record.status == 'pending' record.update(status: 'approved', reviewer_id: reviewer_id, reviewed_at: Time.now.utc) publish_event('approval_decided', record) resumed = resume_pipeline(record) { success: true, approval_id: id, status: 'approved', resumed: resumed } end |
#list_pending(tenant_id: nil, limit: 50) ⇒ Object
56 57 58 59 60 61 62 |
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 56 def list_pending(tenant_id: nil, limit: 50, **) define_approval_queue_model dataset = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue.where(status: 'pending').order(Sequel.desc(:created_at)) dataset = dataset.where(tenant_id: tenant_id) if tenant_id dataset = dataset.limit(limit) { success: true, approvals: dataset.all.map(&:values), count: dataset.count } end |
#reject(id:, reviewer_id:) ⇒ Object
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 45 def reject(id:, reviewer_id:, **) define_approval_queue_model record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue[id] return { success: false, reason: :not_found } unless record return { success: false, reason: :already_decided } unless record.status == 'pending' record.update(status: 'rejected', reviewer_id: reviewer_id, reviewed_at: Time.now.utc) publish_event('approval_decided', record) { success: true, approval_id: id, status: 'rejected' } end |
#show_approval(id:) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 64 def show_approval(id:, **) define_approval_queue_model record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue[id] return { success: false, reason: :not_found } unless record { success: true, approval: record.values } end |
#submit(approval_type:, payload:, requester_id:, tenant_id: nil, resume_routing_key: nil, resume_exchange: nil) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/legion/extensions/audit/runners/approval_queue.rb', line 11 def submit(approval_type:, payload:, requester_id:, tenant_id: nil, resume_routing_key: nil, resume_exchange: nil, **) define_approval_queue_model json_payload = json_dump({ data: payload }) create_hash = { approval_type: approval_type, payload: json_payload, requester_id: requester_id, status: 'pending', tenant_id: tenant_id, created_at: Time.now.utc } create_hash[:resume_routing_key] = resume_routing_key if resume_routing_key create_hash[:resume_exchange] = resume_exchange if resume_exchange record = Legion::Extensions::Audit::Runners::ApprovalQueue::ApprovalQueue.create(create_hash) publish_event('approval_needed', record) { success: true, approval_id: record.id, status: 'pending' } end |