Class: Coverband::Collectors::AbstractTracker
- Inherits:
-
Object
- Object
- Coverband::Collectors::AbstractTracker
show all
- Defined in:
- lib/coverband/collectors/abstract_tracker.rb
Overview
This abstract class makes it easy to track any used/unused with timestamp set of usage
Constant Summary
collapse
- REPORT_ROUTE =
"/"
- TITLE =
"abstract"
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of AbstractTracker.
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 18
def initialize(options = {})
raise NotImplementedError, "#{self.class.name} requires a newer version of Rails" unless self.class.supported_version?
raise "Coverband: #{self.class.name} initialized before configuration!" if !Coverband.configured? && ENV["COVERBAND_TEST"] == "test"
@ignore_patterns = Coverband.configuration.ignore
@store = options.fetch(:store) { Coverband.configuration.store }
@logger = options.fetch(:logger) { Coverband.configuration.logger }
@target = options.fetch(:target) do
concrete_target
end
@one_time_timestamp = false
@logged_keys = Set.new
@keys_to_record = Set.new
end
|
Instance Attribute Details
#ignore_patterns ⇒ Object
Returns the value of attribute ignore_patterns.
16
17
18
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 16
def ignore_patterns
@ignore_patterns
end
|
#logger ⇒ Object
Returns the value of attribute logger.
16
17
18
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 16
def logger
@logger
end
|
#store ⇒ Object
Returns the value of attribute store.
16
17
18
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 16
def store
@store
end
|
#target ⇒ Object
Returns the value of attribute target.
15
16
17
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 15
def target
@target
end
|
Class Method Details
.supported_version? ⇒ Boolean
This is the basic rails version supported, if there is something more unique over ride in subclass
111
112
113
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 111
def self.supported_version?
defined?(Rails) && defined?(Rails::VERSION) && Rails::VERSION::STRING.split(".").first.to_i >= 5
end
|
Instance Method Details
#all_keys ⇒ Object
59
60
61
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 59
def all_keys
target.uniq
end
|
#as_json ⇒ Object
68
69
70
71
72
73
74
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 68
def as_json
used_keys = self.used_keys
{
unused_keys: unused_keys(used_keys),
used_keys: used_keys
}.to_json
end
|
#clear_key!(key) ⇒ Object
89
90
91
92
93
94
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 89
def clear_key!(key)
return unless key
puts "#{tracker_key} key #{key}"
redis_store.hdel(tracker_key, key)
@logged_keys.delete(key)
end
|
#keys_to_record ⇒ Object
39
40
41
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 39
def keys_to_record
@keys_to_record.to_a
end
|
#logged_keys ⇒ Object
35
36
37
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 35
def logged_keys
@logged_keys.to_a
end
|
#reset_recordings ⇒ Object
84
85
86
87
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 84
def reset_recordings
redis_store.del(tracker_key)
redis_store.del(tracker_time_key)
end
|
#route ⇒ Object
115
116
117
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 115
def route
self.class::REPORT_ROUTE
end
|
#save_report ⇒ Object
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 96
def save_report
redis_store.set(tracker_time_key, Time.now.to_i) unless @one_time_timestamp || tracker_time_key_exists?
@one_time_timestamp = true
reported_time = Time.now.to_i
@keys_to_record.to_a.each do |key|
redis_store.hset(tracker_key, key.to_s, reported_time)
end
@keys_to_record.clear
rescue => e
logger&.error "Coverband: #{self.class.name} failed to store, error #{e.class.name} info #{e.message}"
end
|
#title ⇒ Object
119
120
121
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 119
def title
self.class::TITLE
end
|
#track_key(key) ⇒ Object
This method is called on every translation usage
46
47
48
49
50
51
52
53
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 46
def track_key(key)
if key
if newly_seen_key?(key)
@logged_keys << key
@keys_to_record << key if track_key?(key)
end
end
end
|
#tracking_since ⇒ Object
76
77
78
79
80
81
82
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 76
def tracking_since
if (tracking_time = redis_store.get(tracker_time_key))
Time.at(tracking_time.to_i).iso8601
else
"N/A"
end
end
|
#unused_keys(used_keys = nil) ⇒ Object
63
64
65
66
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 63
def unused_keys(used_keys = nil)
recently_used_keys = (used_keys || self.used_keys).keys
all_keys.reject { |k| recently_used_keys.include?(k.to_s) }
end
|
#used_keys ⇒ Object
55
56
57
|
# File 'lib/coverband/collectors/abstract_tracker.rb', line 55
def used_keys
redis_store.hgetall(tracker_key)
end
|