Advertisement
terraplane

instances_counter_per_class_module_spec

Jun 3rd, 2021 (edited)
1,609
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rails 1.01 KB | None | 0 0
  1. require 'spec_helper'
  2.  
  3. module Counter
  4.   def self.included(base)
  5.     base.class_eval do
  6.       @@counters = {}
  7.  
  8.       def self.instances_count
  9.         @@counters[self]
  10.       end
  11.     end
  12.   end
  13.  
  14.   def self.reset_counters
  15.     @@counters = {}
  16.   end
  17.  
  18.   def initialize
  19.     @@counters[self.class] ||= 0
  20.     @@counters[self.class] += 1
  21.   end
  22. end
  23.  
  24. class Car
  25.   include Counter
  26. end
  27.  
  28. class Truck
  29.   include Counter
  30. end
  31.  
  32. class Van
  33.   include Counter
  34. end
  35.  
  36. describe 'Instance counter' do
  37.   before { Counter.reset_counters }
  38.  
  39.   it 'works with car, van and truck' do
  40.     Car.new
  41.     Van.new
  42.     Truck.new
  43.  
  44.     expect(Car.instances_count).to eq(1)
  45.     expect(Van.instances_count).to eq(1)
  46.     expect(Truck.instances_count).to eq(1)
  47.   end
  48.  
  49.   it 'works with 2 cars, 4 vans and 3 trucks' do
  50.     2.times { Car.new }
  51.     4.times { Van.new }
  52.     3.times { Truck.new }
  53.  
  54.     expect(Car.instances_count).to eq(2)
  55.     expect(Van.instances_count).to eq(4)
  56.     expect(Truck.instances_count).to eq(3)
  57.   end
  58. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement