kpm 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +2 -0
 - data/Gemfile +3 -0
 - data/Rakefile +5 -0
 - data/bin/kpm +10 -0
 - data/install_example.yml +21 -0
 - data/kpm.gemspec +49 -0
 - data/lib/kpm/base_artifact.rb +22 -0
 - data/lib/kpm/cli.rb +7 -0
 - data/lib/kpm/installer.rb +83 -0
 - data/lib/kpm/killbill_plugin_artifact.rb +37 -0
 - data/lib/kpm/killbill_server_artifact.rb +22 -0
 - data/lib/kpm/tasks.rb +77 -0
 - data/lib/kpm/utils.rb +42 -0
 - data/lib/kpm/version.rb +18 -0
 - data/lib/kpm.rb +19 -0
 - metadata +131 -0
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,7 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            SHA1:
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 5a964f963d2c0c0b64e07c6d64c756ff2942fb94
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 42429923060c944a9135b2d05607dc330c1c3b4a
         
     | 
| 
      
 5 
     | 
    
         
            +
            SHA512:
         
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 73795dce14f6a0b598f47e57d940fb017dcc3976906bf069309cb661b8302b66d62e6c0aebb5ba56f38fd60b12afffe88763cd1a0f27873a376305e22e9345ea
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 58b38cb7b290599fd00de043c65dcbda2b5b5e9461e56dd9b04fd3affc9f50f82400d293d8fc45160f86a9d41df30fb8fd9cbdf5fa58350c1b944b2fe25d55e8
         
     | 
    
        data/.gitignore
    ADDED
    
    
    
        data/Gemfile
    ADDED
    
    
    
        data/Rakefile
    ADDED
    
    
    
        data/bin/kpm
    ADDED
    
    
    
        data/install_example.yml
    ADDED
    
    | 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            killbill:
         
     | 
| 
      
 2 
     | 
    
         
            +
              # If no version is specified, LATEST is assumed
         
     | 
| 
      
 3 
     | 
    
         
            +
              version: LATEST
         
     | 
| 
      
 4 
     | 
    
         
            +
              webapp_path: /var/tmp/tomcat/webapps/ROOT
         
     | 
| 
      
 5 
     | 
    
         
            +
              plugins_dir: /var/tmp/bundles
         
     | 
| 
      
 6 
     | 
    
         
            +
              plugins:
         
     | 
| 
      
 7 
     | 
    
         
            +
                java:
         
     | 
| 
      
 8 
     | 
    
         
            +
                  - name: analytics-plugin
         
     | 
| 
      
 9 
     | 
    
         
            +
                    version: 0.6.0
         
     | 
| 
      
 10 
     | 
    
         
            +
                ruby:
         
     | 
| 
      
 11 
     | 
    
         
            +
                  - name: logging-plugin
         
     | 
| 
      
 12 
     | 
    
         
            +
                    version: LATEST
         
     | 
| 
      
 13 
     | 
    
         
            +
                  - name: zendesk-plugin
         
     | 
| 
      
 14 
     | 
    
         
            +
                    version: 1.3.0
         
     | 
| 
      
 15 
     | 
    
         
            +
              nexus:
         
     | 
| 
      
 16 
     | 
    
         
            +
                ssl_verify: false
         
     | 
| 
      
 17 
     | 
    
         
            +
                url: https://repository.sonatype.org
         
     | 
| 
      
 18 
     | 
    
         
            +
                repository: central-proxy
         
     | 
| 
      
 19 
     | 
    
         
            +
                # You can use https://github.com/reidmorrison/symmetric-encryption for encryption
         
     | 
| 
      
 20 
     | 
    
         
            +
                #username: bob
         
     | 
| 
      
 21 
     | 
    
         
            +
                #password: bob
         
     | 
    
        data/kpm.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright 2014 The Billing Project, LLC
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # The Billing Project licenses this file to you under the Apache License, version 2.0
         
     | 
| 
      
 5 
     | 
    
         
            +
            # (the "License"); you may not use this file except in compliance with the
         
     | 
| 
      
 6 
     | 
    
         
            +
            # License.  You may obtain a copy of the License at:
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            #    http://www.apache.org/licenses/LICENSE-2.0
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            # Unless required by applicable law or agreed to in writing, software
         
     | 
| 
      
 11 
     | 
    
         
            +
            # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
         
     | 
| 
      
 12 
     | 
    
         
            +
            # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
         
     | 
| 
      
 13 
     | 
    
         
            +
            # License for the specific language governing permissions and limitations
         
     | 
| 
      
 14 
     | 
    
         
            +
            # under the License.
         
     | 
| 
      
 15 
     | 
    
         
            +
            #
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
         
     | 
| 
      
 18 
     | 
    
         
            +
            require 'kpm/version'
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 21 
     | 
    
         
            +
              s.name        = 'kpm'
         
     | 
| 
      
 22 
     | 
    
         
            +
              s.version     = KPM::Version.to_s
         
     | 
| 
      
 23 
     | 
    
         
            +
              s.summary     = 'Kill Bill package manager.'
         
     | 
| 
      
 24 
     | 
    
         
            +
              s.description = 'A package manager for Kill Bill.'
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              s.required_ruby_version = '>= 1.8.6'
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              s.license = 'Apache License (2.0)'
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              s.author   = 'Kill Bill core team'
         
     | 
| 
      
 31 
     | 
    
         
            +
              s.email    = 'killbilling-users@googlegroups.com'
         
     | 
| 
      
 32 
     | 
    
         
            +
              s.homepage = 'http://kill-bill.org'
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              s.files         = `git ls-files`.split("\n")
         
     | 
| 
      
 35 
     | 
    
         
            +
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         
     | 
| 
      
 36 
     | 
    
         
            +
              s.bindir        = 'bin'
         
     | 
| 
      
 37 
     | 
    
         
            +
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         
     | 
| 
      
 38 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              s.rdoc_options << '--exclude' << '.'
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              s.add_dependency 'highline', '~> 1.6.21'
         
     | 
| 
      
 43 
     | 
    
         
            +
              s.add_dependency 'nexus_cli', '~> 4.1.0'
         
     | 
| 
      
 44 
     | 
    
         
            +
              s.add_dependency 'thor', '~> 0.19.1'
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              s.add_development_dependency 'rake', '>= 10.0.0'
         
     | 
| 
      
 47 
     | 
    
         
            +
              s.add_development_dependency 'rspec', '~> 2.12.0'
         
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'nexus_cli'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module KPM
         
     | 
| 
      
 4 
     | 
    
         
            +
              class BaseArtifact
         
     | 
| 
      
 5 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 6 
     | 
    
         
            +
                  KILLBILL_GROUP_ID = 'org.kill-bill.billing'
         
     | 
| 
      
 7 
     | 
    
         
            +
                  KILLBILL_JAVA_PLUGIN_GROUP_ID = 'org.kill-bill.billing.plugin.java'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  KILLBILL_RUBY_PLUGIN_GROUP_ID = 'org.kill-bill.billing.plugin.ruby'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def nexus_remote(overrides={}, ssl_verify=true)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    nexus_remote ||= NexusCli::RemoteFactory.create(nexus_defaults.merge(overrides || {}), ssl_verify)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def nexus_defaults
         
     | 
| 
      
 15 
     | 
    
         
            +
                    {
         
     | 
| 
      
 16 
     | 
    
         
            +
                      url: 'https://repository.sonatype.org',
         
     | 
| 
      
 17 
     | 
    
         
            +
                      repository: 'central-proxy'
         
     | 
| 
      
 18 
     | 
    
         
            +
                    }
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/kpm/cli.rb
    ADDED
    
    
| 
         @@ -0,0 +1,83 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'logger'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module KPM
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Installer
         
     | 
| 
      
 6 
     | 
    
         
            +
                LATEST_VERSION = 'LATEST'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                def self.from_file(config_path, logger=nil)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  Installer.new(YAML::load_file(config_path), logger)
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def initialize(raw_config, logger=nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  raise(ArgumentError, 'killbill section must be specified') if raw_config['killbill'].nil?
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @config = raw_config['killbill']
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  if logger.nil?
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @logger = Logger.new(STDOUT)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @logger.level = Logger::INFO
         
     | 
| 
      
 19 
     | 
    
         
            +
                  else
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @logger = logger
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                def install
         
     | 
| 
      
 25 
     | 
    
         
            +
                  install_killbill_server
         
     | 
| 
      
 26 
     | 
    
         
            +
                  install_plugins
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                private
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                def install_killbill_server
         
     | 
| 
      
 32 
     | 
    
         
            +
                  version = @config['version'] || LATEST_VERSION
         
     | 
| 
      
 33 
     | 
    
         
            +
                  webapp_path = @config['webapp_path'] || KPM::root
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  webapp_dir = File.dirname(webapp_path)
         
     | 
| 
      
 36 
     | 
    
         
            +
                  FileUtils.mkdir_p(webapp_dir)
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                  @logger.info "Installing Kill Bill server #{version} to #{webapp_path}"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  file = KillbillServerArtifact.pull(version, webapp_dir, @config['nexus'], @config['nexus']['ssl_verify'])
         
     | 
| 
      
 40 
     | 
    
         
            +
                  FileUtils.mv file[:file_path], webapp_path
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def install_plugins
         
     | 
| 
      
 44 
     | 
    
         
            +
                  bundles_dir = @config['plugins_dir']
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                  install_java_plugins(bundles_dir)
         
     | 
| 
      
 47 
     | 
    
         
            +
                  install_ruby_plugins(bundles_dir)
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def install_java_plugins(bundles_dir)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  return if @config['plugins'].nil? or @config['plugins']['java'].nil?
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  @config['plugins']['java'].each do |plugin|
         
     | 
| 
      
 54 
     | 
    
         
            +
                    artifact_id = plugin['name']
         
     | 
| 
      
 55 
     | 
    
         
            +
                    version = plugin['version'] || LATEST_VERSION
         
     | 
| 
      
 56 
     | 
    
         
            +
                    destination = "#{bundles_dir}/plugins/java/#{artifact_id}/#{version}"
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                    FileUtils.mkdir_p(destination)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    @logger.info "Installing Kill Bill Java plugin #{artifact_id} #{version} to #{destination}"
         
     | 
| 
      
 61 
     | 
    
         
            +
                    KillbillPluginArtifact.pull(artifact_id, version, :java, destination, @config['nexus'], @config['nexus']['ssl_verify'])
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def install_ruby_plugins(bundles_dir)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  return if @config['plugins'].nil? or @config['plugins']['ruby'].nil?
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                  @config['plugins']['ruby'].each do |plugin|
         
     | 
| 
      
 69 
     | 
    
         
            +
                    artifact_id = plugin['name']
         
     | 
| 
      
 70 
     | 
    
         
            +
                    version = plugin['version'] || LATEST_VERSION
         
     | 
| 
      
 71 
     | 
    
         
            +
                    destination = "#{bundles_dir}/plugins/ruby"
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                    FileUtils.mkdir_p(destination)
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    @logger.info "Installing Kill Bill Ruby plugin #{artifact_id} #{version} to #{destination}"
         
     | 
| 
      
 76 
     | 
    
         
            +
                    archive = KillbillPluginArtifact.pull(artifact_id, version, :ruby, destination, @config['nexus'], @config['nexus']['ssl_verify'])
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    Utils.unpack_tgz(archive[:file_path], destination)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    FileUtils.rm archive[:file_path]
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rexml/document'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'set'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module KPM
         
     | 
| 
      
 5 
     | 
    
         
            +
              class KillbillPluginArtifact < BaseArtifact
         
     | 
| 
      
 6 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 7 
     | 
    
         
            +
                  def pull(artifact_id, version='LATEST', type=:java, destination=nil, overrides={}, ssl_verify=true)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    if type == :java
         
     | 
| 
      
 9 
     | 
    
         
            +
                      group_id = KILLBILL_JAVA_PLUGIN_GROUP_ID
         
     | 
| 
      
 10 
     | 
    
         
            +
                      packaging = 'jar'
         
     | 
| 
      
 11 
     | 
    
         
            +
                    else
         
     | 
| 
      
 12 
     | 
    
         
            +
                      group_id = KILLBILL_RUBY_PLUGIN_GROUP_ID
         
     | 
| 
      
 13 
     | 
    
         
            +
                      packaging = 'tar.gz'
         
     | 
| 
      
 14 
     | 
    
         
            +
                    end
         
     | 
| 
      
 15 
     | 
    
         
            +
                    coordinates = "#{group_id}:#{artifact_id}:#{packaging}:#{version}"
         
     | 
| 
      
 16 
     | 
    
         
            +
                    nexus_remote(overrides, ssl_verify).pull_artifact(coordinates, destination)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def versions(overrides={}, ssl_verify=true)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    plugins = { :java => {}, :ruby => {} }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    nexus = nexus_remote(overrides, ssl_verify)
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    [[:java, KILLBILL_JAVA_PLUGIN_GROUP_ID], [:ruby, KILLBILL_RUBY_PLUGIN_GROUP_ID]].each do |type_and_group_id|
         
     | 
| 
      
 25 
     | 
    
         
            +
                      response = REXML::Document.new nexus.search_for_artifacts(type_and_group_id[1])
         
     | 
| 
      
 26 
     | 
    
         
            +
                      response.elements.each('search-results/data/artifact') do |element|
         
     | 
| 
      
 27 
     | 
    
         
            +
                        artifact_id = element.elements['artifactId'].text
         
     | 
| 
      
 28 
     | 
    
         
            +
                        plugins[type_and_group_id[0]][artifact_id] ||= SortedSet.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                        plugins[type_and_group_id[0]][artifact_id] << element.elements['version'].text
         
     | 
| 
      
 30 
     | 
    
         
            +
                      end
         
     | 
| 
      
 31 
     | 
    
         
            +
                    end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                    plugins
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rexml/document'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'set'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module KPM
         
     | 
| 
      
 5 
     | 
    
         
            +
              class KillbillServerArtifact < BaseArtifact
         
     | 
| 
      
 6 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 7 
     | 
    
         
            +
                  KILLBILL_SERVER_ARTIFACT_ID = 'killbill-server'
         
     | 
| 
      
 8 
     | 
    
         
            +
                  KILLBILL_SERVER_WAR = "#{KILLBILL_GROUP_ID}:#{KILLBILL_SERVER_ARTIFACT_ID}:war:jar-with-dependencies"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def pull(version='LATEST', destination=nil, overrides={}, ssl_verify=true)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    nexus_remote(overrides, ssl_verify).pull_artifact("#{KILLBILL_SERVER_WAR}:#{version}", destination)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def versions(overrides={}, ssl_verify=true)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    response = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(KILLBILL_SERVER_WAR)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    versions = SortedSet.new
         
     | 
| 
      
 17 
     | 
    
         
            +
                    response.elements.each("search-results/data/artifact/version") { |element| versions << element.text }
         
     | 
| 
      
 18 
     | 
    
         
            +
                    versions
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/kpm/tasks.rb
    ADDED
    
    | 
         @@ -0,0 +1,77 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'highline'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'thor'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module KPM
         
     | 
| 
      
 5 
     | 
    
         
            +
              module Tasks
         
     | 
| 
      
 6 
     | 
    
         
            +
                def self.included(base)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  base.send :include, ::Thor::Actions
         
     | 
| 
      
 8 
     | 
    
         
            +
                  base.class_eval do
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    class_option :overrides,
         
     | 
| 
      
 11 
     | 
    
         
            +
                                 :type => :hash,
         
     | 
| 
      
 12 
     | 
    
         
            +
                                 :default => nil,
         
     | 
| 
      
 13 
     | 
    
         
            +
                                 :desc => "A hashed list of overrides. Available options are 'url', 'repository', 'username', and 'password'."
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    class_option :ssl_verify,
         
     | 
| 
      
 16 
     | 
    
         
            +
                                 :type => :boolean,
         
     | 
| 
      
 17 
     | 
    
         
            +
                                 :default => true,
         
     | 
| 
      
 18 
     | 
    
         
            +
                                 :desc => "Set to false to disable SSL Verification."
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    desc "install", "Install Kill Bill server and plugins according to the specified YAML configuration file."
         
     | 
| 
      
 21 
     | 
    
         
            +
                    def install(config_file)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      Installer.from_file(config_file).install
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    method_option :destination,
         
     | 
| 
      
 26 
     | 
    
         
            +
                                  :type => :string,
         
     | 
| 
      
 27 
     | 
    
         
            +
                                  :default => nil,
         
     | 
| 
      
 28 
     | 
    
         
            +
                                  :desc => "A different folder other than the current working directory."
         
     | 
| 
      
 29 
     | 
    
         
            +
                    desc "pull_kb_server_war version", "Pulls Kill Bill server war from Sonatype and places it on your machine."
         
     | 
| 
      
 30 
     | 
    
         
            +
                    def pull_kb_server_war(version='LATEST')
         
     | 
| 
      
 31 
     | 
    
         
            +
                      response = KillbillServerArtifact.pull(version, options[:destination], options[:overrides], options[:ssl_verify])
         
     | 
| 
      
 32 
     | 
    
         
            +
                      say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
         
     | 
| 
      
 33 
     | 
    
         
            +
                    end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    desc "search_for_kb_server", "Searches for all versions of Kill Bill server and prints them to the screen."
         
     | 
| 
      
 36 
     | 
    
         
            +
                    def search_for_kb_server
         
     | 
| 
      
 37 
     | 
    
         
            +
                      say "Available versions: #{KillbillServerArtifact.versions(options[:overrides], options[:ssl_verify]).to_a.join(', ')}", :green
         
     | 
| 
      
 38 
     | 
    
         
            +
                    end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                    method_option :destination,
         
     | 
| 
      
 41 
     | 
    
         
            +
                                  :type => :string,
         
     | 
| 
      
 42 
     | 
    
         
            +
                                  :default => nil,
         
     | 
| 
      
 43 
     | 
    
         
            +
                                  :desc => "A different folder other than the current working directory."
         
     | 
| 
      
 44 
     | 
    
         
            +
                    desc "pull_java_plugin artifact_id", "Pulls a java plugin from Sonatype and places it on your machine."
         
     | 
| 
      
 45 
     | 
    
         
            +
                    def pull_java_plugin(artifact_id, version='LATEST')
         
     | 
| 
      
 46 
     | 
    
         
            +
                      response = KillbillPluginArtifact.pull(artifact_id, version, :java, options[:destination], options[:overrides], options[:ssl_verify])
         
     | 
| 
      
 47 
     | 
    
         
            +
                      say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
         
     | 
| 
      
 48 
     | 
    
         
            +
                    end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                    method_option :destination,
         
     | 
| 
      
 51 
     | 
    
         
            +
                                  :type => :string,
         
     | 
| 
      
 52 
     | 
    
         
            +
                                  :default => nil,
         
     | 
| 
      
 53 
     | 
    
         
            +
                                  :desc => "A different folder other than the current working directory."
         
     | 
| 
      
 54 
     | 
    
         
            +
                    desc "pull_ruby_plugin artifact_id", "Pulls a ruby plugin from Sonatype and places it on your machine."
         
     | 
| 
      
 55 
     | 
    
         
            +
                    def pull_ruby_plugin(artifact_id, version='LATEST')
         
     | 
| 
      
 56 
     | 
    
         
            +
                      response = KillbillPluginArtifact.pull(artifact_id, version, :ruby, options[:destination], options[:overrides], options[:ssl_verify])
         
     | 
| 
      
 57 
     | 
    
         
            +
                      say "Artifact has been retrieved and can be found at path: #{response[:file_path]}", :green
         
     | 
| 
      
 58 
     | 
    
         
            +
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    desc "search_for_plugins", "Searches for all available plugins and prints them to the screen."
         
     | 
| 
      
 61 
     | 
    
         
            +
                    def search_for_plugins
         
     | 
| 
      
 62 
     | 
    
         
            +
                      all_plugins = KillbillPluginArtifact.versions(options[:overrides], options[:ssl_verify])
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                      result = ''
         
     | 
| 
      
 65 
     | 
    
         
            +
                      all_plugins.each do |type, plugins|
         
     | 
| 
      
 66 
     | 
    
         
            +
                        result << "Available #{type} plugins:\n"
         
     | 
| 
      
 67 
     | 
    
         
            +
                        Hash[plugins.sort].each do |name, versions|
         
     | 
| 
      
 68 
     | 
    
         
            +
                          result << "  #{name}: #{versions.to_a.join(', ')}\n"
         
     | 
| 
      
 69 
     | 
    
         
            +
                        end
         
     | 
| 
      
 70 
     | 
    
         
            +
                      end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                      say result, :green
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/kpm/utils.rb
    ADDED
    
    | 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'pathname'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rubygems/package'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'zlib'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module KPM
         
     | 
| 
      
 6 
     | 
    
         
            +
              class Utils
         
     | 
| 
      
 7 
     | 
    
         
            +
                class << self
         
     | 
| 
      
 8 
     | 
    
         
            +
                  TAR_LONGLINK = '././@LongLink'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def unpack_tgz(tar_gz_archive, destination)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    Gem::Package::TarReader.new(Zlib::GzipReader.open(tar_gz_archive)) do |tar|
         
     | 
| 
      
 12 
     | 
    
         
            +
                      dest = nil
         
     | 
| 
      
 13 
     | 
    
         
            +
                      tar.each do |entry|
         
     | 
| 
      
 14 
     | 
    
         
            +
                        if entry.full_name == TAR_LONGLINK
         
     | 
| 
      
 15 
     | 
    
         
            +
                          dest = File.join destination, path_with_skipped_top_level_dir(entry.read.strip)
         
     | 
| 
      
 16 
     | 
    
         
            +
                          next
         
     | 
| 
      
 17 
     | 
    
         
            +
                        end
         
     | 
| 
      
 18 
     | 
    
         
            +
                        dest ||= File.join destination, path_with_skipped_top_level_dir(entry.full_name)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                        if entry.directory?
         
     | 
| 
      
 21 
     | 
    
         
            +
                          File.delete dest if File.file? dest
         
     | 
| 
      
 22 
     | 
    
         
            +
                          FileUtils.mkdir_p dest, :mode => entry.header.mode, :verbose => false
         
     | 
| 
      
 23 
     | 
    
         
            +
                        elsif entry.file?
         
     | 
| 
      
 24 
     | 
    
         
            +
                          FileUtils.rm_rf dest if File.directory? dest
         
     | 
| 
      
 25 
     | 
    
         
            +
                          File.open dest, "wb" do |f|
         
     | 
| 
      
 26 
     | 
    
         
            +
                            f.print entry.read
         
     | 
| 
      
 27 
     | 
    
         
            +
                          end
         
     | 
| 
      
 28 
     | 
    
         
            +
                          FileUtils.chmod entry.header.mode, dest, :verbose => false
         
     | 
| 
      
 29 
     | 
    
         
            +
                        elsif entry.header.typeflag == '2' # Symlink
         
     | 
| 
      
 30 
     | 
    
         
            +
                          File.symlink entry.header.linkname, dest
         
     | 
| 
      
 31 
     | 
    
         
            +
                        end
         
     | 
| 
      
 32 
     | 
    
         
            +
                        dest = nil
         
     | 
| 
      
 33 
     | 
    
         
            +
                      end
         
     | 
| 
      
 34 
     | 
    
         
            +
                    end
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  def path_with_skipped_top_level_dir(path)
         
     | 
| 
      
 38 
     | 
    
         
            +
                    Pathname(path).each_filename.to_a[1..-1].join(File::SEPARATOR)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/kpm/version.rb
    ADDED
    
    
    
        data/lib/kpm.rb
    ADDED
    
    | 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module KPM
         
     | 
| 
      
 2 
     | 
    
         
            +
              autoload :Utils, 'kpm/utils'
         
     | 
| 
      
 3 
     | 
    
         
            +
              autoload :BaseArtifact, 'kpm/base_artifact'
         
     | 
| 
      
 4 
     | 
    
         
            +
              autoload :KillbillServerArtifact, 'kpm/killbill_server_artifact'
         
     | 
| 
      
 5 
     | 
    
         
            +
              autoload :KillbillPluginArtifact, 'kpm/killbill_plugin_artifact'
         
     | 
| 
      
 6 
     | 
    
         
            +
              autoload :Installer, 'kpm/installer'
         
     | 
| 
      
 7 
     | 
    
         
            +
              autoload :Tasks, 'kpm/tasks'
         
     | 
| 
      
 8 
     | 
    
         
            +
              autoload :Cli, 'kpm/cli'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 11 
     | 
    
         
            +
                def root
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @root ||= Pathname.new(File.expand_path('../', File.dirname(__FILE__)))
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def ui
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @ui ||= Thor::Shell::Color.new
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    ADDED
    
    | 
         @@ -0,0 +1,131 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            --- !ruby/object:Gem::Specification
         
     | 
| 
      
 2 
     | 
    
         
            +
            name: kpm
         
     | 
| 
      
 3 
     | 
    
         
            +
            version: !ruby/object:Gem::Version
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.1
         
     | 
| 
      
 5 
     | 
    
         
            +
            platform: ruby
         
     | 
| 
      
 6 
     | 
    
         
            +
            authors:
         
     | 
| 
      
 7 
     | 
    
         
            +
            - Kill Bill core team
         
     | 
| 
      
 8 
     | 
    
         
            +
            autorequire: 
         
     | 
| 
      
 9 
     | 
    
         
            +
            bindir: bin
         
     | 
| 
      
 10 
     | 
    
         
            +
            cert_chain: []
         
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2014-03-31 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: highline
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 1.6.21
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 1.6.21
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: nexus_cli
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: 4.1.0
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: 4.1.0
         
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: thor
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: 0.19.1
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: 0.19.1
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: rake
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: 10.0.0
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: 10.0.0
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: rspec
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 74 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: 2.12.0
         
     | 
| 
      
 76 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 77 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 79 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: 2.12.0
         
     | 
| 
      
 83 
     | 
    
         
            +
            description: A package manager for Kill Bill.
         
     | 
| 
      
 84 
     | 
    
         
            +
            email: killbilling-users@googlegroups.com
         
     | 
| 
      
 85 
     | 
    
         
            +
            executables:
         
     | 
| 
      
 86 
     | 
    
         
            +
            - kpm
         
     | 
| 
      
 87 
     | 
    
         
            +
            extensions: []
         
     | 
| 
      
 88 
     | 
    
         
            +
            extra_rdoc_files: []
         
     | 
| 
      
 89 
     | 
    
         
            +
            files:
         
     | 
| 
      
 90 
     | 
    
         
            +
            - ".gitignore"
         
     | 
| 
      
 91 
     | 
    
         
            +
            - Gemfile
         
     | 
| 
      
 92 
     | 
    
         
            +
            - Rakefile
         
     | 
| 
      
 93 
     | 
    
         
            +
            - bin/kpm
         
     | 
| 
      
 94 
     | 
    
         
            +
            - install_example.yml
         
     | 
| 
      
 95 
     | 
    
         
            +
            - kpm.gemspec
         
     | 
| 
      
 96 
     | 
    
         
            +
            - lib/kpm.rb
         
     | 
| 
      
 97 
     | 
    
         
            +
            - lib/kpm/base_artifact.rb
         
     | 
| 
      
 98 
     | 
    
         
            +
            - lib/kpm/cli.rb
         
     | 
| 
      
 99 
     | 
    
         
            +
            - lib/kpm/installer.rb
         
     | 
| 
      
 100 
     | 
    
         
            +
            - lib/kpm/killbill_plugin_artifact.rb
         
     | 
| 
      
 101 
     | 
    
         
            +
            - lib/kpm/killbill_server_artifact.rb
         
     | 
| 
      
 102 
     | 
    
         
            +
            - lib/kpm/tasks.rb
         
     | 
| 
      
 103 
     | 
    
         
            +
            - lib/kpm/utils.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
            - lib/kpm/version.rb
         
     | 
| 
      
 105 
     | 
    
         
            +
            homepage: http://kill-bill.org
         
     | 
| 
      
 106 
     | 
    
         
            +
            licenses:
         
     | 
| 
      
 107 
     | 
    
         
            +
            - Apache License (2.0)
         
     | 
| 
      
 108 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
      
 109 
     | 
    
         
            +
            post_install_message: 
         
     | 
| 
      
 110 
     | 
    
         
            +
            rdoc_options:
         
     | 
| 
      
 111 
     | 
    
         
            +
            - "--exclude"
         
     | 
| 
      
 112 
     | 
    
         
            +
            - "."
         
     | 
| 
      
 113 
     | 
    
         
            +
            require_paths:
         
     | 
| 
      
 114 
     | 
    
         
            +
            - lib
         
     | 
| 
      
 115 
     | 
    
         
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 116 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 117 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 118 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 119 
     | 
    
         
            +
                  version: 1.8.6
         
     | 
| 
      
 120 
     | 
    
         
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
      
 121 
     | 
    
         
            +
              requirements:
         
     | 
| 
      
 122 
     | 
    
         
            +
              - - ">="
         
     | 
| 
      
 123 
     | 
    
         
            +
                - !ruby/object:Gem::Version
         
     | 
| 
      
 124 
     | 
    
         
            +
                  version: '0'
         
     | 
| 
      
 125 
     | 
    
         
            +
            requirements: []
         
     | 
| 
      
 126 
     | 
    
         
            +
            rubyforge_project: 
         
     | 
| 
      
 127 
     | 
    
         
            +
            rubygems_version: 2.2.2
         
     | 
| 
      
 128 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 129 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
      
 130 
     | 
    
         
            +
            summary: Kill Bill package manager.
         
     | 
| 
      
 131 
     | 
    
         
            +
            test_files: []
         
     |