Class: DeprecationTracker::ShardMerger
- Inherits:
-
Object
- Object
- DeprecationTracker::ShardMerger
- Defined in:
- lib/deprecation_tracker/shard_merger.rb
Instance Attribute Summary collapse
-
#base_path ⇒ Object
readonly
Returns the value of attribute base_path.
-
#delete_shards ⇒ Object
readonly
Returns the value of attribute delete_shards.
Instance Method Summary collapse
-
#initialize(base_path, delete_shards: false) ⇒ ShardMerger
constructor
A new instance of ShardMerger.
- #merge ⇒ Object
Constructor Details
#initialize(base_path, delete_shards: false) ⇒ ShardMerger
Returns a new instance of ShardMerger.
8 9 10 11 |
# File 'lib/deprecation_tracker/shard_merger.rb', line 8 def initialize(base_path, delete_shards: false) @base_path = base_path @delete_shards = delete_shards end |
Instance Attribute Details
#base_path ⇒ Object (readonly)
Returns the value of attribute base_path.
6 7 8 |
# File 'lib/deprecation_tracker/shard_merger.rb', line 6 def base_path @base_path end |
#delete_shards ⇒ Object (readonly)
Returns the value of attribute delete_shards.
6 7 8 |
# File 'lib/deprecation_tracker/shard_merger.rb', line 6 def delete_shards @delete_shards end |
Instance Method Details
#merge ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/deprecation_tracker/shard_merger.rb', line 13 def merge dirname = File.dirname(base_path) unless File.directory?(dirname) warn "Directory does not exist: #{dirname}" return { shards: 0, result: {} } end shard_files = Dir.glob(shard_glob).sort if shard_files.empty? warn "No shards found at #{shard_glob}" return { shards: 0, result: {} } end merged = {} shard_files.each do |file| parse_shard(file).each do |bucket, | merged[bucket] = (merged[bucket] || []).concat(Array()) end end result = {} merged.sort.each do |k, v| result[k] = v.sort end begin File.write(base_path, JSON.pretty_generate(result)) rescue Errno::EACCES => e raise "Cannot write to #{base_path}: #{e.}" end shard_files.each { |f| File.delete(f) } if delete_shards { shards: shard_files.size, result: result } end |