Sha256: d6fa098cf5472f997db4a46afa33ef7e666e0402463b42a30f11a3f6bdb2ae72

Contents?: true

Size: 1.69 KB

Versions: 5

Compression:

Stored size: 1.69 KB

Contents

# encoding: utf-8

module Doggy
  class CLI::Pull
    def initialize(options, ids_or_names)
      @options      = options
      @ids_or_names = ids_or_names
    end

    def run
      if @ids_or_names.empty?
        pull_resources('dashboards', Models::Dashboard)
        pull_resources('monitors',   Models::Monitor)
        pull_resources('screens',    Models::Screen)
        return
      end

      @ids_or_names.each do |id_or_name|
        @local_resources = Doggy::Model.all_local_resources
        if id_or_name =~ /^\d+$/
          pull_by_id(id_or_name.to_i)
        else
          pull_by_file(id_or_name)
        end
      end
    end

  private

    def pull_by_id(id)
      local_resource = @local_resources.find { |l| l.id == id }
      if !local_resource
        remote_resource = [Models::Dashboard, Models::Monitor, Models::Screen].map do |klass|
          klass.find(id)
        end.compact.first

        remote_resource.save_local
      else
        remote_resource = local_resource.class.find(local_resource.id)
        remote_resource.path = local_resource.path
        remote_resource.save_local
      end
    end

    def pull_by_file(file)
      resolved_path = Doggy.resolve_path(file)
      local_resource = @local_resources.find { |l| l.path == resolved_path }

      remote_resource = local_resource.class.find(local_resource.id)
      remote_resource.path = local_resource.path
      remote_resource.save_local
    end

    def pull_resources(name, klass)
      Doggy.ui.say "Pulling #{ name }..."
      local_resources  = klass.all_local
      remote_resources = klass.all

      klass.assign_paths(remote_resources, local_resources)
      remote_resources.each(&:save_local)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
doggy-2.0.22 lib/doggy/cli/pull.rb
doggy-2.0.21 lib/doggy/cli/pull.rb
doggy-2.0.20 lib/doggy/cli/pull.rb
doggy-2.0.19 lib/doggy/cli/pull.rb
doggy-2.0.18 lib/doggy/cli/pull.rb