geoffrey 0.0.5 → 0.0.6

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/Gemfile.lock CHANGED
@@ -1,26 +1,26 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- geoffrey (0.0.4)
4
+ geoffrey (0.0.5)
5
5
  plist4r
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  bluecloth (2.0.7)
11
- haml (3.0.17)
11
+ haml (3.0.18)
12
12
  libxml-ruby (1.1.4)
13
13
  libxml4r (0.2.6)
14
14
  libxml-ruby (>= 1.1.3)
15
15
  mocha (0.9.8)
16
16
  rake
17
- plist4r (1.1.1)
17
+ plist4r (1.1.5)
18
18
  haml
19
19
  libxml-ruby
20
20
  libxml4r
21
21
  rake (0.8.7)
22
22
  rspec (1.3.0)
23
- yard (0.5.8)
23
+ yard (0.6.0)
24
24
 
25
25
  PLATFORMS
26
26
  ruby
@@ -32,4 +32,4 @@ DEPENDENCIES
32
32
  mocha (~> 0.9.8)
33
33
  plist4r
34
34
  rspec (~> 1.3.0)
35
- yard (~> 0.5.8)
35
+ yard (~> 0.6.0)
data/README.md CHANGED
@@ -4,12 +4,12 @@ geoffrey
4
4
  ## ALERT!
5
5
 
6
6
  This is very early alpha code, use with precaution. It's a spinoff of myself willing to
7
- improve my [dotfiles project](http://github.com/albertllop/dotfiles) a step further. All
7
+ improve my [dotfiles project](http://github.com/mrsimo/dotfiles) a step further. All
8
8
  code examples in this README come from it.
9
9
 
10
10
  ## Links
11
11
 
12
- * [Documentation](http://rdoc.info/projects/albertllop/geoffrey) (this README is better viewed there ;)
12
+ * [Documentation](http://rubydoc.info/gems/geoffrey/frames) (this README is better viewed there ;)
13
13
 
14
14
  ## Introduction
15
15
 
@@ -60,7 +60,7 @@ up and running with Pro scheme, Menlo Font 14pt, and a size 520x100.
60
60
  options["Default Window Settings"] = "Pro"
61
61
  options["Startup Window Settings"] = "Pro"
62
62
  options["HasMigratedDefaults"] = true
63
- options["Window Settings"]["Pro"]["Font"] = "bplist00\xD4\x01\x02\x03\x04\x05\x06\x18\x19X$versionX$objectsY$archiverT$top\x12\x00\x01\x86\xA0\xA4\a\b\x11\x12U$null\xD4\t\n\v\f\r\x0E\x0F\x10V$classVNSNameVNSSizeXNSfFlags\x80\x03\x80\x02\#@,\x00\x00\x00\x00\x00\x00\x10\x10]Menlo-Regular\xD2\x13\x14\x15\x16Z$classnameX$classesVNSFont\xA2\x15\x17XNSObject_\x10\x0FNSKeyedArchiver\xD1\x1A\eTroot\x80\x01\b\x11\x1A#-27<BKRY`ikmvx\x86\x8B\x96\x9F\xA6\xA9\xB2\xC4\xC7\xCC\x00\x00\x00\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x1C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xCE"
63
+ options["Window Settings"]["Pro"]["Font"] = "bplist00\xD4\x01\x02\x03\x04\x05\x06\x18\x19X$version(..)"
64
64
  options["Window Settings"]["Pro"]["Font"].blob = true
65
65
  options["Window Settings"]["Pro"]["columnCount"] = 520
66
66
  options["Window Settings"]["Pro"]["rowCount"] = 100
@@ -71,6 +71,6 @@ See {Geoffrey::plist} for extended documentation.
71
71
  ## A few words
72
72
 
73
73
  This is work done in my free hours, it's not yet finished. The code is dirty and mainly undocumented. It all started on #whyday,
74
- but I'm so lazy that I've needed a lot of time to do just this.
74
+ but I'm so lazy that I've needed a lot of time to do just this.
75
75
 
76
76
  Thanks!
data/geoffrey.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.add_development_dependency "bundler", "~> 1.0.0.rc.5"
18
18
  s.add_development_dependency "rspec", "~> 1.3.0"
19
19
  s.add_development_dependency "mocha", "~> 0.9.8"
20
- s.add_development_dependency "yard", "~> 0.5.8"
20
+ s.add_development_dependency "yard", "~> 0.6.0"
21
21
  s.add_development_dependency "bluecloth", "~> 2.0.7"
22
22
 
23
23
  s.add_dependency 'plist4r'
@@ -5,9 +5,10 @@ require 'fileutils'
5
5
 
6
6
  module Geoffrey
7
7
 
8
+ class NotFoundError < Exception; end
9
+ class DecompressionError < Exception; end
10
+
8
11
  # This class helps installing packages and other apps into your system.
9
- #--
10
- # TODO add support for .dmg files would be great
11
12
  class Package
12
13
  attr_accessor :url, :options, :format, :filename, :dir, :file
13
14
 
@@ -29,30 +30,35 @@ module Geoffrey
29
30
  # Uses the url provided to download the file.
30
31
  # Checks the options first to see if it shouldn't be done.
31
32
  #--
32
- # TODO raise some error if the file can't be found or something
33
33
  # TODO add some option to define the file name for weird url's
34
34
  def download_and_decompress
35
35
  return unless should_install
36
36
 
37
- @filename = @url.split("/").last
38
- unless @url.nil?
39
- get_format
40
-
37
+ begin
41
38
  @file = Tempfile.new("geoffrey")
42
39
  @file.write open(@url).read
43
40
  @file.close
44
41
 
42
+ @filename = @url.split("/").last
43
+ get_format
44
+
45
+
45
46
  @dir = "#{Dir.tmpdir}/#{filename}"
46
47
  FileUtils.rm_rf dir if File.exist?(dir)
47
48
  FileUtils.mkdir_p dir
48
-
49
- decompress
49
+ rescue
50
+ raise NotFoundError
50
51
  end
52
+
53
+ decompress
51
54
  end
52
55
 
53
56
  # Does the actual installing of the package
57
+ # For .pkg files it executes installer.
58
+ # For .app files it just moves it to /Applications
54
59
  #--
55
- # TODO add support for .app files
60
+ # TODO maybe add more customization options
61
+ # TODO investigate other possible extensions.
56
62
  def install
57
63
  return unless should_install
58
64
 
@@ -66,8 +72,6 @@ module Geoffrey
66
72
 
67
73
  # If it was specified through options, then get that, otherwise
68
74
  # get the first file with .pkg extension
69
- #--
70
- # TODO Also use .app when support is added
71
75
  def file_to_install
72
76
  return @file_to_install if defined?(@file_to_install)
73
77
  @file_to_install = if @options[:file]
@@ -98,7 +102,7 @@ module Geoffrey
98
102
  if String === command
99
103
  opts = @options.merge(opts)
100
104
  command = "sudo #{command}" if opts[:sudo]
101
- puts "Executing: #{command}" if $verbose
105
+ command = "#{command} > /dev/null 2>&1" unless opts[:verbose]
102
106
  `#{command}`
103
107
  end
104
108
  end
@@ -117,11 +121,15 @@ module Geoffrey
117
121
  # Actual decompressing of the file. Does so into a directory we created in
118
122
  # +#{Dir.tmpdir}/#{filename}+
119
123
  #--
120
- # TODO better isolate each download inside the tmpdir?
124
+ # TODO control errors. Maybe it's .zip but just doesn't work.
125
+ # TODO better isolate each download inside the tmpdir? When debugging it's
126
+ # misleading to have a folder with the file name and extension.
127
+ # * Timestamp if clash?
128
+ # * Random string?
121
129
  def decompress
122
130
  command = case format
123
131
  when :zip
124
- execute "unzip -o #{file.path} -d #{dir} 1> /dev/null", :sudo => false
132
+ execute "unzip -o #{file.path} -d #{dir}", :sudo => false
125
133
  when :tar
126
134
  execute "tar xf #{file.path} -C #{dir}", :sudo => false
127
135
  when :tgz
@@ -133,14 +141,16 @@ module Geoffrey
133
141
  when :dmg
134
142
  extract_from_dmg
135
143
  end
136
- end
137
144
 
145
+ # Might be that the decompression failed
146
+ raise DecompressionError unless $?.success?
147
+ end
138
148
 
139
149
  # Mount the dmg file, copy contents to tmpdir, unmount, remove dmg
140
150
  def extract_from_dmg
141
151
  execute("mv #{file.path} #{dir}.dmg")
142
- str = execute("hdiutil attach #{dir}.dmg")
143
- unless $?.exitstatus > 0
152
+ str = execute("hdiutil attach #{dir}.dmg 2> /dev/null", :verbose => true)
153
+ if $?.success?
144
154
  info = str.split("\t")
145
155
  dmg_dir = info.last.chomp
146
156
  device = info.first.strip.split("/").last
@@ -1,3 +1,3 @@
1
1
  module Geoffrey
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
data/spec/package_spec.rb CHANGED
@@ -18,10 +18,17 @@ describe Geoffrey::Package do
18
18
  context "package installation" do
19
19
 
20
20
  # No idea how to test this
21
+ # TODO find a way
22
+ # Ideas:
23
+ # * Just suppose that the instruction is executed
21
24
  it "installs basic package stuff" do
22
25
  end
23
26
 
24
27
  # No idea how to test this either
28
+ # TODO find a way
29
+ # Ideas:
30
+ # * Have an "install directory" which is different in test environment
31
+ # * Then check that files are inside and with proper permissions
25
32
  it "installs .app stuff" do
26
33
  end
27
34
 
@@ -47,6 +54,20 @@ describe Geoffrey::Package do
47
54
  # method should return where it is.
48
55
  context 'package downloading/uncompressing' do
49
56
 
57
+ it "raises an error if the file can't be found/read" do
58
+ package = Geoffrey::Package.new
59
+ package.url 'really/impossible/to/exist.dmg'
60
+ lambda { package.download_and_decompress}.should raise_exception(Geoffrey::NotFoundError)
61
+ end
62
+
63
+ it "raises an error if the file has bad format" do
64
+ ["zip","tar.gz","gz","dmg"].each do |extension|
65
+ package = Geoffrey::Package.new
66
+ package.url(File.dirname(__FILE__) + "/static/test.error.#{extension}")
67
+ lambda { package.download_and_decompress }.should raise_exception(Geoffrey::DecompressionError)
68
+ end
69
+ end
70
+
50
71
  it "doesn't do anything if it's an unknown format" do
51
72
  package = Geoffrey::Package.new
52
73
  package.url(File.dirname(__FILE__) + "/static/test.txt")
@@ -0,0 +1 @@
1
+ foo
@@ -0,0 +1 @@
1
+ foo
@@ -0,0 +1 @@
1
+ foo
@@ -0,0 +1 @@
1
+ foo
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geoffrey
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 19
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 0
8
- - 5
9
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
10
11
  platform: ruby
11
12
  authors:
12
13
  - Albert Llop
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-08-30 00:00:00 +02:00
18
+ date: 2010-08-31 00:00:00 +02:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ~>
27
28
  - !ruby/object:Gem::Version
29
+ hash: 15424063
28
30
  segments:
29
31
  - 1
30
32
  - 0
@@ -42,6 +44,7 @@ dependencies:
42
44
  requirements:
43
45
  - - ~>
44
46
  - !ruby/object:Gem::Version
47
+ hash: 27
45
48
  segments:
46
49
  - 1
47
50
  - 3
@@ -57,6 +60,7 @@ dependencies:
57
60
  requirements:
58
61
  - - ~>
59
62
  - !ruby/object:Gem::Version
63
+ hash: 43
60
64
  segments:
61
65
  - 0
62
66
  - 9
@@ -72,11 +76,12 @@ dependencies:
72
76
  requirements:
73
77
  - - ~>
74
78
  - !ruby/object:Gem::Version
79
+ hash: 7
75
80
  segments:
76
81
  - 0
77
- - 5
78
- - 8
79
- version: 0.5.8
82
+ - 6
83
+ - 0
84
+ version: 0.6.0
80
85
  type: :development
81
86
  version_requirements: *id004
82
87
  - !ruby/object:Gem::Dependency
@@ -87,6 +92,7 @@ dependencies:
87
92
  requirements:
88
93
  - - ~>
89
94
  - !ruby/object:Gem::Version
95
+ hash: 1
90
96
  segments:
91
97
  - 2
92
98
  - 0
@@ -102,6 +108,7 @@ dependencies:
102
108
  requirements:
103
109
  - - ">="
104
110
  - !ruby/object:Gem::Version
111
+ hash: 3
105
112
  segments:
106
113
  - 0
107
114
  version: "0"
@@ -133,6 +140,10 @@ files:
133
140
  - spec/spec_helper.rb
134
141
  - spec/static/example.plist
135
142
  - spec/static/test.dmg
143
+ - spec/static/test.error.dmg
144
+ - spec/static/test.error.gz
145
+ - spec/static/test.error.tar.gz
146
+ - spec/static/test.error.zip
136
147
  - spec/static/test.tar.gz
137
148
  - spec/static/test.tgz
138
149
  - spec/static/test.txt
@@ -152,6 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
152
163
  requirements:
153
164
  - - ">="
154
165
  - !ruby/object:Gem::Version
166
+ hash: 3
155
167
  segments:
156
168
  - 0
157
169
  version: "0"
@@ -160,6 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
160
172
  requirements:
161
173
  - - ">="
162
174
  - !ruby/object:Gem::Version
175
+ hash: 23
163
176
  segments:
164
177
  - 1
165
178
  - 3