velcro 0.0.1 → 0.1.0
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.
- data/bin/velcro +7 -0
- data/lib/velcro/brewfile.rb +13 -7
- data/lib/velcro/errors.rb +3 -0
- data/lib/velcro/executable.rb +19 -0
- data/lib/velcro/file_helpers.rb +14 -0
- data/lib/velcro/lockfile.rb +21 -10
- data/lib/velcro/version.rb +1 -1
- data/lib/velcro.rb +3 -3
- data/spec/velcro/brewfile_spec.rb +1 -1
- data/spec/velcro/file_helpers_spec.rb +21 -0
- data/spec/velcro/lockfile_spec.rb +13 -11
- data/spec/velcro_spec.rb +1 -1
- data/velcro.gemspec +2 -0
- metadata +28 -5
    
        data/bin/velcro
    ADDED
    
    
    
        data/lib/velcro/brewfile.rb
    CHANGED
    
    | @@ -1,14 +1,12 @@ | |
| 1 | 
            +
            require 'velcro/errors'
         | 
| 2 | 
            +
            require 'velcro/file_helpers'
         | 
| 1 3 | 
             
            require 'ostruct'
         | 
| 2 4 |  | 
| 3 5 | 
             
            class Velcro
         | 
| 4 6 | 
             
              class Brewfile
         | 
| 5 | 
            -
                 | 
| 6 | 
            -
             | 
| 7 | 
            -
                attr_accessor :path
         | 
| 7 | 
            +
                include FileHelpers
         | 
| 8 8 |  | 
| 9 | 
            -
                 | 
| 10 | 
            -
                  self.path = path
         | 
| 11 | 
            -
                end
         | 
| 9 | 
            +
                DEPENDENCY_FORMAT = %r{^brew '(?<name>\S*)'(, '(?<version>\S*)')?$}
         | 
| 12 10 |  | 
| 13 11 | 
             
                def dependencies
         | 
| 14 12 | 
             
                  parse_dependencies(content)
         | 
| @@ -29,7 +27,15 @@ class Velcro | |
| 29 27 | 
             
                end
         | 
| 30 28 |  | 
| 31 29 | 
             
                def content
         | 
| 32 | 
            -
                   | 
| 30 | 
            +
                  if location
         | 
| 31 | 
            +
                    File.read(brewfile_in(location))
         | 
| 32 | 
            +
                  else
         | 
| 33 | 
            +
                    fail BrewfileNotFound, 'Could not locate Brewfile'
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                def brewfile_in(directory)
         | 
| 38 | 
            +
                  File.join(directory, 'Brewfile')
         | 
| 33 39 | 
             
                end
         | 
| 34 40 | 
             
              end
         | 
| 35 41 | 
             
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            require 'velcro'
         | 
| 2 | 
            +
            require 'thor'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class Velcro
         | 
| 5 | 
            +
              class Executable < Thor
         | 
| 6 | 
            +
                default_task :install
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                desc 'install', 'Install dependencies defined in the Brewfile'
         | 
| 9 | 
            +
                def install
         | 
| 10 | 
            +
                  velcro.install
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                no_tasks do
         | 
| 14 | 
            +
                  def velcro
         | 
| 15 | 
            +
                    Velcro.new
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            class Velcro
         | 
| 2 | 
            +
              module FileHelpers
         | 
| 3 | 
            +
                def location
         | 
| 4 | 
            +
                  ENV['VELCRO_BREWFILE'] || recursive_search
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def recursive_search(directory = Dir.pwd)
         | 
| 8 | 
            +
                  until directory == '/'
         | 
| 9 | 
            +
                    return directory if File.exists?(brewfile_in(directory))
         | 
| 10 | 
            +
                    directory = File.expand_path(File.join(directory, '..'))
         | 
| 11 | 
            +
                  end
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
    
        data/lib/velcro/lockfile.rb
    CHANGED
    
    | @@ -1,22 +1,29 @@ | |
| 1 | 
            +
            require 'velcro/file_helpers'
         | 
| 1 2 | 
             
            require 'velcro/homebrew'
         | 
| 2 3 |  | 
| 3 4 | 
             
            class Velcro
         | 
| 4 5 | 
             
              class Lockfile
         | 
| 5 | 
            -
                 | 
| 6 | 
            +
                include FileHelpers
         | 
| 6 7 |  | 
| 7 | 
            -
                 | 
| 8 | 
            -
             | 
| 8 | 
            +
                attr_accessor :homebrew
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def initialize
         | 
| 9 11 | 
             
                  self.homebrew = Homebrew.new
         | 
| 10 12 | 
             
                end
         | 
| 11 13 |  | 
| 12 14 | 
             
                def generate(dependencies)
         | 
| 13 | 
            -
                   | 
| 14 | 
            -
                     | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 15 | 
            +
                  File.open(lockfile_in(Dir.pwd), 'w+') do |lockfile|
         | 
| 16 | 
            +
                    lockfile.write(
         | 
| 17 | 
            +
                      [
         | 
| 18 | 
            +
                        'FORMULA',
         | 
| 19 | 
            +
                        indent(generate_formula(dependencies)),
         | 
| 20 | 
            +
                        '',
         | 
| 21 | 
            +
                        'DEPENDENCIES',
         | 
| 22 | 
            +
                        indent(generate_dependencies(dependencies)),
         | 
| 23 | 
            +
                        ''
         | 
| 24 | 
            +
                      ].flatten.join("\n")
         | 
| 25 | 
            +
                    )
         | 
| 26 | 
            +
                  end
         | 
| 20 27 | 
             
                end
         | 
| 21 28 |  | 
| 22 29 | 
             
                def generate_formula(dependencies)
         | 
| @@ -51,5 +58,9 @@ class Velcro | |
| 51 58 | 
             
                    "  #{line}"
         | 
| 52 59 | 
             
                  end
         | 
| 53 60 | 
             
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                def lockfile_in(directory)
         | 
| 63 | 
            +
                  File.join(directory, 'Brewfile.lock')
         | 
| 64 | 
            +
                end
         | 
| 54 65 | 
             
              end
         | 
| 55 66 | 
             
            end
         | 
    
        data/lib/velcro/version.rb
    CHANGED
    
    
    
        data/lib/velcro.rb
    CHANGED
    
    | @@ -6,10 +6,10 @@ require 'velcro/lockfile' | |
| 6 6 | 
             
            class Velcro
         | 
| 7 7 | 
             
              attr_accessor :homebrew, :brewfile, :lockfile
         | 
| 8 8 |  | 
| 9 | 
            -
              def initialize | 
| 9 | 
            +
              def initialize
         | 
| 10 10 | 
             
                self.homebrew = Homebrew.new
         | 
| 11 | 
            -
                self.brewfile = Brewfile.new | 
| 12 | 
            -
                self.lockfile = Lockfile.new | 
| 11 | 
            +
                self.brewfile = Brewfile.new
         | 
| 12 | 
            +
                self.lockfile = Lockfile.new
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 15 | 
             
              def install
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'velcro/file_helpers'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Velcro::FileHelpers do
         | 
| 4 | 
            +
              subject { Class.new.extend(described_class) }
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              describe '#location' do
         | 
| 7 | 
            +
                let(:velcro_brewfile) { stub }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                it 'returns the brewfile location specified in the environment variable' do
         | 
| 10 | 
            +
                  ENV.stub(:[]).with('VELCRO_BREWFILE') { velcro_brewfile }
         | 
| 11 | 
            +
                  subject.location.should == velcro_brewfile
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                it 'recursively searches for the Brewfile if not specified' do
         | 
| 15 | 
            +
                  subject.stub(:recursive_search) { nil }
         | 
| 16 | 
            +
                  subject.should_receive(:recursive_search)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  subject.location
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -1,28 +1,30 @@ | |
| 1 1 | 
             
            require 'velcro/lockfile'
         | 
| 2 | 
            +
            require 'tempfile'
         | 
| 2 3 |  | 
| 3 4 | 
             
            describe Velcro::Lockfile do
         | 
| 4 | 
            -
              subject { described_class.new | 
| 5 | 
            +
              subject { described_class.new }
         | 
| 5 6 |  | 
| 6 7 | 
             
              let(:postgresql) { OpenStruct.new(name: 'postgresql', version: nil) }
         | 
| 7 | 
            -
              let(:redis) | 
| 8 | 
            +
              let(:redis)      { OpenStruct.new(name: 'redis', version: '2.4.16') }
         | 
| 9 | 
            +
              let(:ossp_uuid)  { OpenStruct.new(name: 'ossp-uuid', version: '1.6.2') }
         | 
| 10 | 
            +
              let(:readline)   { OpenStruct.new(name: 'readline', version: '6.2.4') }
         | 
| 11 | 
            +
             | 
| 8 12 | 
             
              let(:dependencies) { [postgresql, redis] }
         | 
| 13 | 
            +
              let(:child_dependencies) { [ossp_uuid, readline] }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              let(:lockfile) { Tempfile.new('lockfile') }
         | 
| 9 16 |  | 
| 10 17 | 
             
              before do
         | 
| 11 | 
            -
                subject.homebrew.stub(: | 
| 12 | 
            -
                subject.homebrew.stub(:child_dependencies).with(postgresql) {
         | 
| 13 | 
            -
                  [
         | 
| 14 | 
            -
                    OpenStruct.new(name: 'ossp-uuid', version: '1.6.2'),
         | 
| 15 | 
            -
                    OpenStruct.new(name: 'readline', version: '6.2.4')
         | 
| 16 | 
            -
                  ]
         | 
| 17 | 
            -
                }
         | 
| 18 | 
            +
                subject.homebrew.stub(:child_dependencies).with(postgresql) { child_dependencies }
         | 
| 18 19 | 
             
                subject.homebrew.stub(:child_dependencies).with(redis) { [] }
         | 
| 19 20 | 
             
                subject.homebrew.stub(:versions).with(postgresql) { '9.1.4' }
         | 
| 20 | 
            -
                subject. | 
| 21 | 
            +
                subject.stub(:lockfile_in) { lockfile }
         | 
| 21 22 | 
             
              end
         | 
| 22 23 |  | 
| 23 24 | 
             
              describe '#generate' do
         | 
| 24 25 | 
             
                it 'creates a Brewfile.lock for the installed dependencies' do
         | 
| 25 | 
            -
                  subject.generate(dependencies) | 
| 26 | 
            +
                  subject.generate(dependencies)
         | 
| 27 | 
            +
                  File.read(lockfile).should == <<-END.gsub(/^ {8}/, '')
         | 
| 26 28 | 
             
                    FORMULA
         | 
| 27 29 | 
             
                      postgresql (9.1.4)
         | 
| 28 30 | 
             
                        ossp-uuid (1.6.2)
         | 
    
        data/spec/velcro_spec.rb
    CHANGED
    
    
    
        data/velcro.gemspec
    CHANGED
    
    | @@ -15,6 +15,8 @@ Gem::Specification.new do |gem| | |
| 15 15 | 
             
              gem.test_files    = `git ls-files -- spec/*`.split
         | 
| 16 16 | 
             
              gem.require_paths = ['lib']
         | 
| 17 17 |  | 
| 18 | 
            +
              gem.add_dependency 'thor' , '~> 0.16.0'
         | 
| 19 | 
            +
             | 
| 18 20 | 
             
              gem.add_development_dependency 'rspec', '~> 2.11.0'
         | 
| 19 21 | 
             
              gem.add_development_dependency 'pry'
         | 
| 20 22 | 
             
              gem.add_development_dependency 'rake'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: velcro
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -10,8 +10,24 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2012-08- | 
| 13 | 
            +
            date: 2012-08-21 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 16 | 
            +
              name: thor
         | 
| 17 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 18 | 
            +
                none: false
         | 
| 19 | 
            +
                requirements:
         | 
| 20 | 
            +
                - - ~>
         | 
| 21 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 22 | 
            +
                    version: 0.16.0
         | 
| 23 | 
            +
              type: :runtime
         | 
| 24 | 
            +
              prerelease: false
         | 
| 25 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 26 | 
            +
                none: false
         | 
| 27 | 
            +
                requirements:
         | 
| 28 | 
            +
                - - ~>
         | 
| 29 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 30 | 
            +
                    version: 0.16.0
         | 
| 15 31 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 32 | 
             
              name: rspec
         | 
| 17 33 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -64,7 +80,8 @@ description: Manage your dependencies with homebrew like you manage your gems wi | |
| 64 80 | 
             
              bundler
         | 
| 65 81 | 
             
            email:
         | 
| 66 82 | 
             
            - vanstee@highgroove.com
         | 
| 67 | 
            -
            executables: | 
| 83 | 
            +
            executables:
         | 
| 84 | 
            +
            - velcro
         | 
| 68 85 | 
             
            extensions: []
         | 
| 69 86 | 
             
            extra_rdoc_files: []
         | 
| 70 87 | 
             
            files:
         | 
| @@ -75,12 +92,17 @@ files: | |
| 75 92 | 
             
            - LICENSE.txt
         | 
| 76 93 | 
             
            - README.md
         | 
| 77 94 | 
             
            - Rakefile
         | 
| 95 | 
            +
            - bin/velcro
         | 
| 78 96 | 
             
            - lib/velcro.rb
         | 
| 79 97 | 
             
            - lib/velcro/brewfile.rb
         | 
| 98 | 
            +
            - lib/velcro/errors.rb
         | 
| 99 | 
            +
            - lib/velcro/executable.rb
         | 
| 100 | 
            +
            - lib/velcro/file_helpers.rb
         | 
| 80 101 | 
             
            - lib/velcro/homebrew.rb
         | 
| 81 102 | 
             
            - lib/velcro/lockfile.rb
         | 
| 82 103 | 
             
            - lib/velcro/version.rb
         | 
| 83 104 | 
             
            - spec/velcro/brewfile_spec.rb
         | 
| 105 | 
            +
            - spec/velcro/file_helpers_spec.rb
         | 
| 84 106 | 
             
            - spec/velcro/homebrew_spec.rb
         | 
| 85 107 | 
             
            - spec/velcro/lockfile_spec.rb
         | 
| 86 108 | 
             
            - spec/velcro_spec.rb
         | 
| @@ -99,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 99 121 | 
             
                  version: '0'
         | 
| 100 122 | 
             
                  segments:
         | 
| 101 123 | 
             
                  - 0
         | 
| 102 | 
            -
                  hash:  | 
| 124 | 
            +
                  hash: 555263360612235969
         | 
| 103 125 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 104 126 | 
             
              none: false
         | 
| 105 127 | 
             
              requirements:
         | 
| @@ -108,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 108 130 | 
             
                  version: '0'
         | 
| 109 131 | 
             
                  segments:
         | 
| 110 132 | 
             
                  - 0
         | 
| 111 | 
            -
                  hash:  | 
| 133 | 
            +
                  hash: 555263360612235969
         | 
| 112 134 | 
             
            requirements: []
         | 
| 113 135 | 
             
            rubyforge_project: 
         | 
| 114 136 | 
             
            rubygems_version: 1.8.23
         | 
| @@ -117,6 +139,7 @@ specification_version: 3 | |
| 117 139 | 
             
            summary: Manage your dependencies with homebrew like you manage your gems with bundler
         | 
| 118 140 | 
             
            test_files:
         | 
| 119 141 | 
             
            - spec/velcro/brewfile_spec.rb
         | 
| 142 | 
            +
            - spec/velcro/file_helpers_spec.rb
         | 
| 120 143 | 
             
            - spec/velcro/homebrew_spec.rb
         | 
| 121 144 | 
             
            - spec/velcro/lockfile_spec.rb
         | 
| 122 145 | 
             
            - spec/velcro_spec.rb
         |