Class: DecisionAgent::ABTesting::Storage::MemoryAdapter
- Includes:
- MonitorMixin
- Defined in:
- lib/decision_agent/ab_testing/storage/memory_adapter.rb
Overview
In-memory storage adapter for A/B tests Useful for testing and development
Instance Method Summary collapse
- #assignment_count ⇒ Object
-
#clear! ⇒ Object
Additional helper methods.
- #delete_test(test_id) ⇒ Object
- #get_assignments(test_id) ⇒ Object
- #get_test(test_id) ⇒ Object
-
#initialize ⇒ MemoryAdapter
constructor
A new instance of MemoryAdapter.
- #list_tests(status: nil, limit: nil) ⇒ Object
- #save_assignment(assignment) ⇒ Object
- #save_test(test) ⇒ Object
- #test_count ⇒ Object
- #update_assignment(assignment_id, attributes) ⇒ Object
- #update_test(test_id, attributes) ⇒ Object
Constructor Details
#initialize ⇒ MemoryAdapter
Returns a new instance of MemoryAdapter.
13 14 15 16 17 18 19 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 13 def initialize super @tests = {} @assignments = {} @test_id_counter = 0 @assignment_id_counter = 0 end |
Instance Method Details
#assignment_count ⇒ Object
112 113 114 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 112 def assignment_count synchronize { @assignments.size } end |
#clear! ⇒ Object
Additional helper methods
99 100 101 102 103 104 105 106 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 99 def clear! synchronize do @tests.clear @assignments.clear @test_id_counter = 0 @assignment_id_counter = 0 end end |
#delete_test(test_id) ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 90 def delete_test(test_id) synchronize do @tests.delete(test_id.to_i) @assignments.delete_if { |_id, a| a[:ab_test_id] == test_id } true end end |
#get_assignments(test_id) ⇒ Object
83 84 85 86 87 88 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 83 def get_assignments(test_id) synchronize do assignments = @assignments.values.select { |a| a[:ab_test_id] == test_id } assignments.map { |a| ABTestAssignment.new(**a) } end end |
#get_test(test_id) ⇒ Object
31 32 33 34 35 36 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 31 def get_test(test_id) synchronize do test_data = @tests[test_id.to_i] test_data ? ABTest.new(**test_data) : nil end end |
#list_tests(status: nil, limit: nil) ⇒ Object
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 50 def list_tests(status: nil, limit: nil) synchronize do tests = @tests.values tests = tests.select { |t| t[:status] == status } if status tests = tests.last(limit) if limit tests.map { |t| ABTest.new(**t) } end end |
#save_assignment(assignment) ⇒ Object
61 62 63 64 65 66 67 68 69 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 61 def save_assignment(assignment) synchronize do @assignment_id_counter += 1 assignment_data = assignment.to_h.merge(id: @assignment_id_counter) @assignments[@assignment_id_counter] = assignment_data ABTestAssignment.new(**assignment_data) end end |
#save_test(test) ⇒ Object
21 22 23 24 25 26 27 28 29 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 21 def save_test(test) synchronize do @test_id_counter += 1 test_data = test.to_h.merge(id: @test_id_counter) @tests[@test_id_counter] = test_data ABTest.new(**test_data) end end |
#test_count ⇒ Object
108 109 110 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 108 def test_count synchronize { @tests.size } end |
#update_assignment(assignment_id, attributes) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 71 def update_assignment(assignment_id, attributes) synchronize do assignment_data = @assignments[assignment_id.to_i] raise "Assignment not found: #{assignment_id}" unless assignment_data assignment_data.merge!(attributes) @assignments[assignment_id.to_i] = assignment_data ABTestAssignment.new(**assignment_data) end end |
#update_test(test_id, attributes) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/decision_agent/ab_testing/storage/memory_adapter.rb', line 38 def update_test(test_id, attributes) synchronize do test_data = @tests[test_id.to_i] raise TestNotFoundError, "Test not found: #{test_id}" unless test_data test_data.merge!(attributes) @tests[test_id.to_i] = test_data ABTest.new(**test_data) end end |