Class: CloverSandboxSimulator::Services::Clover::EmployeeService
- Inherits:
-
BaseService
- Object
- BaseService
- CloverSandboxSimulator::Services::Clover::EmployeeService
- Defined in:
- lib/clover_sandbox_simulator/services/clover/employee_service.rb
Overview
Manages Clover employees
Constant Summary collapse
- ROLES =
Note: OWNER and ADMIN roles may not be available in sandbox
%w[MANAGER EMPLOYEE].freeze
- DEFAULT_EMPLOYEES =
Default employee names for deterministic setup
[ { name: "Alex Manager", role: "MANAGER" }, { name: "Jordan Server", role: "EMPLOYEE" }, { name: "Casey Cook", role: "EMPLOYEE" }, { name: "Riley Host", role: "EMPLOYEE" }, { name: "Morgan Bartender", role: "EMPLOYEE" } ].freeze
Instance Attribute Summary
Attributes inherited from BaseService
Instance Method Summary collapse
-
#create_employee(name:, email: nil, role: "EMPLOYEE", pin: nil) ⇒ Object
Create an employee.
-
#delete_employee(employee_id) ⇒ Object
Delete an employee.
-
#ensure_employees(count: 3, deterministic: true) ⇒ Object
Create sample employees if needed.
-
#ensure_specific_employees(employee_names) ⇒ Array<Hash>
Ensure specific employees exist by name (idempotent).
-
#get_employee(employee_id) ⇒ Object
Get a specific employee.
-
#get_employees ⇒ Object
Fetch all employees.
-
#random_employee ⇒ Object
Get a random employee.
Methods inherited from BaseService
Constructor Details
This class inherits a constructor from CloverSandboxSimulator::Services::BaseService
Instance Method Details
#create_employee(name:, email: nil, role: "EMPLOYEE", pin: nil) ⇒ Object
Create an employee
30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/clover_sandbox_simulator/services/clover/employee_service.rb', line 30 def create_employee(name:, email: nil, role: "EMPLOYEE", pin: nil) logger.info "Creating employee: #{name}" payload = { "name" => name, "role" => role } payload["email"] = email if email payload["pin"] = pin if pin request(:post, endpoint("employees"), payload: payload) end |
#delete_employee(employee_id) ⇒ Object
Delete an employee
117 118 119 120 |
# File 'lib/clover_sandbox_simulator/services/clover/employee_service.rb', line 117 def delete_employee(employee_id) logger.info "Deleting employee: #{employee_id}" request(:delete, endpoint("employees/#{employee_id}")) end |
#ensure_employees(count: 3, deterministic: true) ⇒ Object
Create sample employees if needed
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 81 82 83 84 85 |
# File 'lib/clover_sandbox_simulator/services/clover/employee_service.rb', line 55 def ensure_employees(count: 3, deterministic: true) existing = get_employees return existing if existing.size >= count needed = count - existing.size logger.info "Creating #{needed} sample employees..." new_employees = [] needed.times do |i| if deterministic && i < DEFAULT_EMPLOYEES.size emp_data = DEFAULT_EMPLOYEES[existing.size + i] || DEFAULT_EMPLOYEES.last name = emp_data[:name] role = emp_data[:role] else name = Faker::Name.name role = ROLES.sample end # Use example.com domain - Clover rejects .test domains # Remove special chars, collapse dots, strip leading/trailing dots safe_name = name.downcase.gsub(/[^a-z0-9]/, ".").gsub(/\.+/, ".").gsub(/^\.|\.$/, "") employee = create_employee( name: name, email: "#{safe_name}@example.com", role: role ) new_employees << employee if employee end existing + new_employees end |
#ensure_specific_employees(employee_names) ⇒ Array<Hash>
Ensure specific employees exist by name (idempotent)
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/clover_sandbox_simulator/services/clover/employee_service.rb', line 90 def ensure_specific_employees(employee_names) existing = get_employees existing_names = existing.map { |e| e["name"]&.downcase } new_employees = [] employee_names.each do |emp_data| next if existing_names.include?(emp_data[:name]&.downcase) safe_name = emp_data[:name].downcase.gsub(/[^a-z0-9]/, ".").gsub(/\.+/, ".").gsub(/^\.|\.$/, "") employee = create_employee( name: emp_data[:name], email: emp_data[:email] || "#{safe_name}@example.com", role: emp_data[:role] || "EMPLOYEE" ) new_employees << employee if employee end existing + new_employees end |
#get_employee(employee_id) ⇒ Object
Get a specific employee
25 26 27 |
# File 'lib/clover_sandbox_simulator/services/clover/employee_service.rb', line 25 def get_employee(employee_id) request(:get, endpoint("employees/#{employee_id}")) end |
#get_employees ⇒ Object
Fetch all employees
14 15 16 17 18 19 20 21 22 |
# File 'lib/clover_sandbox_simulator/services/clover/employee_service.rb', line 14 def get_employees logger.info "Fetching employees..." response = request(:get, endpoint("employees")) elements = response&.dig("elements") || [] # Filter active employees active = elements.select { |e| e["deleted"] != true } logger.info "Found #{active.size} active employees" active end |
#random_employee ⇒ Object
Get a random employee
111 112 113 114 |
# File 'lib/clover_sandbox_simulator/services/clover/employee_service.rb', line 111 def random_employee employees = get_employees employees.sample end |