brick_and_mortar 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0a832c15da1ec2ebcad40df466335b36434abd4
4
- data.tar.gz: 6021f5e00022c249666bb4afe24384fab7d1e762
3
+ metadata.gz: 6ae4d6b7011a033487e95f47f3ee1e96d0219ff4
4
+ data.tar.gz: c2bf30d10e15d6628bd50400219eb9a9be4ad22b
5
5
  SHA512:
6
- metadata.gz: ac5b1d00efe92c2a8139ac95d0cbf9875c6c223506ef838db977fccdc6091e972e02f2fac88bd0d6c724e319360893092bc321b00cfda5ed9981303d36fd3f38
7
- data.tar.gz: 7d1dd84e234a0d02b6f83632aac032510b5028464bec99822a50a2ec66790b62ae3829257530d2a7ba8d4970ce29a7982d612887676d7c4af114e2919a681ccb
6
+ metadata.gz: cda000b1014f4c39fa205037399463588a4783715c89e09578c57a0bc57dba120d814bdc1cdfe0bb30aa277cd545a533f7a3cc86b67f3f1456d5268870614d33
7
+ data.tar.gz: 6ea7d7d6c5aad4a11db5ec486056cde3142207df44e9aa79db3c4081bd86a3f01c090d213123d9e9cc68ede69213c3233cad660bbbc2d6de7d283a1a894c75eb
data/.gitignore CHANGED
@@ -27,9 +27,9 @@ build/
27
27
 
28
28
  # for a library or gem, you might want to ignore these files since the code is
29
29
  # intended to run in multiple environments; otherwise, check them in:
30
- # Gemfile.lock
31
- # .ruby-version
32
- # .ruby-gemset
30
+ Gemfile.lock
31
+ .ruby-version
32
+ .ruby-gemset
33
33
 
34
34
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
35
35
  .rvmrc
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.3.0
5
+ before_install: gem install bundler -v 1.12.5
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015 Dustin Morrill
3
+ Copyright (c) 2015-2017 Dustin Morrill
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
-
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  BrickAndMortar: A Solid Foundation for Software Projects
2
2
  ================================================
3
3
 
4
+ [![Build Status](https://travis-ci.org/dmorrill10/brick_and_mortar.svg?branch=master)](https://travis-ci.org/dmorrill10/brick_and_mortar)
5
+
4
6
  What is BrickAndMortar?
5
7
  ---------------
6
8
 
@@ -16,7 +18,7 @@ It is not nearly as fancy a tool as *Bundler* or the like that does dependency c
16
18
  Supported Systems
17
19
  -----------------
18
20
 
19
- Currently only targeted for Linux, and only tested on Ubuntu.
21
+ Currently only targeted for *nix. Tested on Ubuntu and Mac OS X.
20
22
 
21
23
 
22
24
  Requirements
@@ -30,7 +32,7 @@ Usage
30
32
 
31
33
  1. Install `brick_and_mortar` gem with `gem install brick_and_mortar`
32
34
  2. Write a `Brickfile` in your project's root directory that has the following fields:
33
-
35
+
34
36
  `name`
35
37
  ~ The name of the dependency. The directory or link that will be present in the `vendor` directory will have this name.
36
38
 
@@ -38,7 +40,7 @@ Usage
38
40
  ~ The version of the brick as a string in whatever format is natural for it. This will be appended to the directory name of the copy of the brick downloaded in the `$BRICK_STORE_PREFIX/.brick_store` directory.
39
41
 
40
42
  `location`
41
- ~ Location of the brick. Either local system path, version control repository (*Git*, *Mercurial*, and *Subversion* currently supported), or URL.
43
+ ~ Location of the brick. Either local system path, version control repository (*Git*, *Mercurial*, and *Subversion* currently supported), or URL. *zip*, *tar.gz*, and *tar.bz2* are the only currently supported compressed URL package formats.
42
44
 
43
45
  3. Run `mortar` to install bricks to `vendor`, downloading them if necessary to `$BRICK_STORE_PREFIX/.brick_store`.
44
46
 
@@ -54,8 +56,8 @@ Write a `$HOME/.brick_and_mortarrc` file to specify:
54
56
  ~ The directory that contains `.brick_store`. As the name suggests, `.brick_store` is where all bricks will be stored before they are linked or copied into the `vendor` directories of individual projects.
55
57
 
56
58
  `DEFAULT_BRICK_SHARING_POLICY`
57
- ~ Specify the default behavior when placing bricks in projects. Accepts either
58
- - `copy`, where the brick will be copied into `vendor`, or
59
+ ~ Specify the default behavior when placing bricks in projects. Accepts either
60
+ - `copy`, where the brick will be copied into `vendor`, or
59
61
  - `link`, where the brick will be symbolically linked into `vendor`.
60
62
  Defaults to `link`.
61
63
 
@@ -63,6 +65,6 @@ Write a `$HOME/.brick_and_mortarrc` file to specify:
63
65
  License
64
66
  -------
65
67
 
66
- Copyright Dustin Morrill, 2015
68
+ Copyright Dustin Morrill, 2015-2017
67
69
 
68
70
  MIT License
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'git'
22
22
  spec.add_dependency 'rubyzip'
23
+ spec.add_dependency 'bzip2-ffi'
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.6'
25
26
  spec.add_development_dependency 'rake'
@@ -11,13 +11,20 @@ module BrickAndMortar
11
11
  end
12
12
  attr_reader :method, :path, :format
13
13
 
14
- FORMATS = {:plain => 'plain', :zip => 'zip', :tar_gz => 'tar.gz'}
14
+ FORMATS = {
15
+ :plain => 'plain',
16
+ :zip => 'zip',
17
+ :tar_gz => 'tar.gz',
18
+ :tar_bz2 => 'tar.bz2'
19
+ }
15
20
 
16
21
  def self.url_to_format(url)
17
- if url.match(/\.zip$/)
22
+ if url.match(/\.#{FORMATS[:zip]}$/)
18
23
  FORMATS[:zip]
19
- elsif url.match(/\.tar.gz$/)
24
+ elsif url.match(/\.#{FORMATS[:tar_gz]}$/)
20
25
  FORMATS[:tar_gz]
26
+ elsif url.match(/\.#{FORMATS[:tar_bz2]}$/)
27
+ FORMATS[:tar_bz2]
21
28
  else
22
29
  FORMATS[:plain]
23
30
  end
@@ -110,10 +117,10 @@ module BrickAndMortar
110
117
  end
111
118
  if @location.format == Location::FORMATS[:zip]
112
119
  Download.get_and_unpack_zip(@location.path, @destination)
113
- elsif
114
- if @location.format == Location::FORMATS[:tar_gz]
115
- Download.get_and_unpack_tar_gz(@location.path, @destination)
116
- end
120
+ elsif @location.format == Location::FORMATS[:tar_gz]
121
+ Download.get_and_unpack_tar_gz(@location.path, @destination)
122
+ elsif @location.format == Location::FORMATS[:tar_bz2]
123
+ Download.get_and_unpack_tar_bz2(@location.path, @destination)
117
124
  else
118
125
  raise UnrecognizedFormat.new(@location.format)
119
126
  end
@@ -8,6 +8,7 @@ OpenURI::Buffer.const_set 'StringMax', 0
8
8
  require 'zip'
9
9
  require 'zlib'
10
10
  require 'rubygems/package'
11
+ require 'bzip2/ffi'
11
12
 
12
13
  module BrickAndMortar
13
14
  module Download
@@ -37,9 +38,9 @@ module BrickAndMortar
37
38
  # Thanks to TomCZ
38
39
  # http://stackoverflow.com/questions/856891/unzip-zip-tar-tag-gz-files-with-ruby
39
40
  # for this
40
- def self.deflate_tar_gz(tar_gz_archive, destination = Dir.pwd)
41
+ def self.deflate_tar(tar_string, destination = Dir.pwd)
41
42
  first_directory = nil
42
- Gem::Package::TarReader.new(Zlib::GzipReader.open(tar_gz_archive)) do |tar|
43
+ Gem::Package::TarReader.new(tar_string) do |tar|
43
44
  dest = nil
44
45
  tar.each do |entry|
45
46
  if entry.full_name == TAR_LONGLINK
@@ -81,6 +82,21 @@ module BrickAndMortar
81
82
  end
82
83
  first_directory
83
84
  end
85
+ def self.deflate_tar_gz(tar_gz_archive, destination = Dir.pwd)
86
+ deflate_tar(Zlib::GzipReader.open(tar_gz_archive), destination)
87
+ end
88
+ def self.deflate_tar_bz2(archive, destination = Dir.pwd)
89
+ Bzip2::FFI::Reader.open(archive) do |reader|
90
+ File.open("#{destination}.tar", 'w') do |tar|
91
+ tar.write reader.read
92
+ end
93
+ end
94
+ first_directory = File.open("#{destination}.tar", 'r') do |tar|
95
+ deflate_tar(tar)
96
+ end
97
+ FileUtils.rm "#{destination}.tar"
98
+ first_directory
99
+ end
84
100
  def self.get_and_unpack_zip(url, name = nil, options = {})
85
101
  unless name
86
102
  name = name_from_path url
@@ -95,5 +111,12 @@ module BrickAndMortar
95
111
  uncompressed_dir_name = deflate_tar_gz(open(url))
96
112
  FileUtils.mv uncompressed_dir_name, name
97
113
  end
114
+ def self.get_and_unpack_tar_bz2(url, name = nil, options = {})
115
+ unless name
116
+ name = name_from_path url
117
+ end
118
+ uncompressed_dir_name = deflate_tar_bz2(open(url))
119
+ FileUtils.mv uncompressed_dir_name, name
120
+ end
98
121
  end
99
122
  end
@@ -1,3 +1,3 @@
1
1
  module BrickAndMortar
2
- VERSION = '0.0.4'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -35,4 +35,24 @@ describe BrickAndMortar::Download do
35
35
  end
36
36
  end
37
37
  end
38
+
39
+ describe 'given tar.bz2 url brick configuration' do
40
+ tar_bz2_url_brick_configruation = MockBrickConfiguration.new(
41
+ 'mock_brick',
42
+ '0.0.1',
43
+ MockBrickLocation.new('download', 'http://www.computerpokercompetition.org/downloads/code/competition_server/project_acpc_server_v1.0.41.tar.bz2')
44
+ )
45
+
46
+ it 'downloads the brick' do
47
+ Dir.mktmpdir do |dir|
48
+ Dir.chdir dir do |d|
49
+ BrickAndMortar::Download.get_and_unpack_tar_bz2(
50
+ tar_bz2_url_brick_configruation.location.url,
51
+ tar_bz2_url_brick_configruation.destination
52
+ )
53
+ File.directory?(File.join(dir, tar_bz2_url_brick_configruation.destination)).must_equal true
54
+ end
55
+ end
56
+ end
57
+ end
38
58
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick_and_mortar
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dustin Morrill
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-15 00:00:00.000000000 Z
11
+ date: 2017-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bzip2-ffi
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -104,6 +118,7 @@ extra_rdoc_files: []
104
118
  files:
105
119
  - ".gitattributes"
106
120
  - ".gitignore"
121
+ - ".travis.yml"
107
122
  - Gemfile
108
123
  - LICENSE
109
124
  - README.md
@@ -188,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
203
  version: '0'
189
204
  requirements: []
190
205
  rubyforge_project:
191
- rubygems_version: 2.2.2
206
+ rubygems_version: 2.5.1
192
207
  signing_key:
193
208
  specification_version: 4
194
209
  summary: 'BrickAndMortar: A Solid Foundation for Software Projects'
@@ -210,4 +225,3 @@ test_files:
210
225
  - spec/support/test_files/test_project/Brickfile
211
226
  - spec/support/test_files/url_brickfile.yml
212
227
  - spec/svn_spec.rb
213
- has_rdoc: