lib/artifactory.rb



#
# Copyright 2014 Chef Software, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

require 'pathname'
require 'artifactory/version'

module Artifactory
  autoload :Client,       'artifactory/client'
  autoload :Configurable, 'artifactory/configurable'
  autoload :Defaults,     'artifactory/defaults'
  autoload :Error,        'artifactory/errors'
  autoload :Util,         'artifactory/util'

  module Collection
    autoload :Artifact, 'artifactory/collections/artifact'
    autoload :Base,     'artifactory/collections/base'
    autoload :Build, 'artifactory/collections/build'
  end

  module Resource
    autoload :Artifact,         'artifactory/resources/artifact'
    autoload :Backup,           'artifactory/resources/backup'
    autoload :Base,             'artifactory/resources/base'
    autoload :Build,            'artifactory/resources/build'
    autoload :BuildComponent,   'artifactory/resources/build_component'
    autoload :Group,            'artifactory/resources/group'
    autoload :Layout,           'artifactory/resources/layout'
    autoload :LDAPSetting,      'artifactory/resources/ldap_setting'
    autoload :MailServer,       'artifactory/resources/mail_server'
    autoload :PermissionTarget, 'artifactory/resources/permission_target'
    autoload :Plugin,           'artifactory/resources/plugin'
    autoload :Repository,       'artifactory/resources/repository'
    autoload :System,           'artifactory/resources/system'
    autoload :URLBase,          'artifactory/resources/url_base'
    autoload :User,             'artifactory/resources/user'
  end

  class << self
    include Artifactory::Configurable

    #
    # The root of the Artifactory gem. This method is useful for finding files
    # relative to the root of the repository.
    #
    # @return [Pathname]
    #
    def root
      @root ||= Pathname.new(File.expand_path('../../', __FILE__))
    end

    #
    # API client object based off the configured options in {Configurable}.
    #
    # @return [Artifactory::Client]
    #
    def client
      unless defined?(@client) && @client.same_options?(options)
        @client = Artifactory::Client.new(options)
      end

      @client
    end

    #
    # Delegate all methods to the client object, essentially making the module
    # object behave like a {Client}.
    #
    def method_missing(m, *args, &block)
      if client.respond_to?(m)
        client.send(m, *args, &block)
      else
        super
      end
    end

    #
    # Delegating +respond_to+ to the {Client}.
    #
    def respond_to_missing?(m, include_private = false)
      client.respond_to?(m) || super
    end
  end
end

# Load the initial default values
Artifactory.setup