Class: Kennel::Syncer

Inherits:
Object
  • Object
show all
Defined in:
lib/kennel/syncer.rb

Constant Summary collapse

CACHE_FILE =

keep in sync with .travis.yml caching

"tmp/cache/details"
TRACKING_FIELDS =
[:message, :description].freeze

Instance Method Summary collapse

Constructor Details

#initialize(api, expected, project: nil) ⇒ Syncer

Returns a new instance of Syncer.



7
8
9
10
11
12
13
14
# File 'lib/kennel/syncer.rb', line 7

def initialize(api, expected, project: nil)
  @api = api
  @project_filter = project
  @expected = expected
  @expected = @expected.select { |e| e.project.kennel_id == @project_filter } if @project_filter
  @expected.each { |e| add_tracking_id e }
  calculate_diff
end

Instance Method Details

#confirmObject



27
28
29
# File 'lib/kennel/syncer.rb', line 27

def confirm
  ENV["CI"] || !STDIN.tty? || Utils.ask("Execute Plan ?") unless noop?
end

#planObject



16
17
18
19
20
21
22
23
24
25
# File 'lib/kennel/syncer.rb', line 16

def plan
  puts "Plan:"
  if noop?
    puts Utils.color(:green, "Nothing to do")
  else
    print_plan "Create", @create, :green
    print_plan "Update", @update, :yellow
    print_plan "Delete", @delete, :red
  end
end

#updateObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/kennel/syncer.rb', line 31

def update
  @create.each do |_, e|
    reply = @api.create e.class.api_resource, e.as_json
    reply = unnest(e.class.api_resource, reply)
    puts "Created #{e.class.api_resource} #{tracking_id(e.as_json)} #{e.url(reply.fetch(:id))}"
  end

  block_irreversible_partial_updates
  @update.each do |id, e|
    @api.update e.class.api_resource, id, e.as_json
    puts "Updated #{e.class.api_resource} #{tracking_id(e.as_json)} #{e.url(id)}"
  end

  @delete.each do |id, _, a|
    @api.delete a.fetch(:api_resource), id
    puts "Deleted #{a.fetch(:api_resource)} #{tracking_id(a)} #{id}"
  end
end