Class: CloverSandboxSimulator::Services::Clover::TenderService
- Inherits:
-
BaseService
- Object
- BaseService
- CloverSandboxSimulator::Services::Clover::TenderService
- Defined in:
- lib/clover_sandbox_simulator/services/clover/tender_service.rb
Overview
Manages Clover payment tenders (Cash, Gift Card, etc.)
Constant Summary collapse
- SANDBOX_SAFE_TENDERS =
Tenders that work reliably in Clover sandbox NOTE: Credit Card and Debit Card are BROKEN in sandbox - do not use!
%w[ com.clover.tender.cash com.clover.tender.check com.clover.tender.external_gift_card com.clover.tender.external_payment ].freeze
Instance Attribute Summary
Attributes inherited from BaseService
Instance Method Summary collapse
-
#cash_tender ⇒ Object
Get cash tender.
-
#create_tender(label:, label_key: nil, enabled: true, opens_cash_drawer: false) ⇒ Object
Create a custom tender.
-
#find_tender_by_label(label) ⇒ Object
Get a specific tender by label.
-
#get_safe_tenders ⇒ Object
Get sandbox-safe tenders (excludes credit/debit cards).
-
#get_tenders ⇒ Object
Fetch all tenders.
-
#select_split_tenders(num_splits: nil) ⇒ Object
Select random safe tenders for split payment Returns array of tender IDs with split percentages.
Methods inherited from BaseService
Constructor Details
This class inherits a constructor from CloverSandboxSimulator::Services::BaseService
Instance Method Details
#cash_tender ⇒ Object
Get cash tender
55 56 57 |
# File 'lib/clover_sandbox_simulator/services/clover/tender_service.rb', line 55 def cash_tender find_tender_by_label("Cash") || get_safe_tenders.first end |
#create_tender(label:, label_key: nil, enabled: true, opens_cash_drawer: false) ⇒ Object
Create a custom tender
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/clover_sandbox_simulator/services/clover/tender_service.rb', line 60 def create_tender(label:, label_key: nil, enabled: true, opens_cash_drawer: false) logger.info "Creating tender: #{label}" payload = { "label" => label, "labelKey" => label_key || "com.clover.tender.#{label.downcase.gsub(/\s+/, '_')}", "enabled" => enabled, "opensCashDrawer" => opens_cash_drawer } request(:post, endpoint("tenders"), payload: payload) end |
#find_tender_by_label(label) ⇒ Object
Get a specific tender by label
49 50 51 52 |
# File 'lib/clover_sandbox_simulator/services/clover/tender_service.rb', line 49 def find_tender_by_label(label) tenders = get_tenders tenders.find { |t| t["label"]&.downcase == label.downcase } end |
#get_safe_tenders ⇒ Object
Get sandbox-safe tenders (excludes credit/debit cards)
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/clover_sandbox_simulator/services/clover/tender_service.rb', line 30 def get_safe_tenders tenders = get_tenders safe = tenders.reject do |tender| label = tender["label"]&.downcase || "" label_key = tender["labelKey"]&.downcase || "" # Exclude credit and debit cards - they're broken in sandbox label.include?("credit") || label.include?("debit") || label_key.include?("credit") || label_key.include?("debit") end logger.info "Found #{safe.size} sandbox-safe tenders" safe end |
#get_tenders ⇒ Object
Fetch all tenders
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/clover_sandbox_simulator/services/clover/tender_service.rb', line 18 def get_tenders logger.info "Fetching tenders..." response = request(:get, endpoint("tenders")) elements = response&.dig("elements") || [] # Filter to enabled tenders only enabled = elements.select { |t| t["enabled"] == true } logger.info "Found #{enabled.size} enabled tenders" enabled end |
#select_split_tenders(num_splits: nil) ⇒ Object
Select random safe tenders for split payment Returns array of tender IDs with split percentages
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/clover_sandbox_simulator/services/clover/tender_service.rb', line 75 def select_split_tenders(num_splits: nil) tenders = get_safe_tenders return [] if tenders.empty? # Determine number of splits (1-3) num_splits ||= rand(1..3) num_splits = [num_splits, tenders.size].min # Select random tenders selected = tenders.sample(num_splits) # Generate random split percentages that sum to 100 percentages = generate_split_percentages(num_splits) selected.zip(percentages).map do |tender, percentage| { tender: tender, percentage: percentage } end end |