escoffier 0.0.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/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ *.log
2
+ *.gem
3
+ ._*
4
+ .idea
5
+ *~
6
+ test/fixtures/visit_raw_data_directory
7
+ doc/*
data/Manifest.txt ADDED
@@ -0,0 +1,13 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/escoffier.rb
7
+ script/console
8
+ script/destroy
9
+ script/generate
10
+ spec/escoffier_spec.rb
11
+ spec/spec.opts
12
+ spec/spec_helper.rb
13
+ tasks/rspec.rake
data/README.rdoc ADDED
@@ -0,0 +1,44 @@
1
+ = escoffier
2
+
3
+ Escoffier is a prep chef for simple administrative tasks that I need, like
4
+ managing the file system to make a local copy and unzip of large directories
5
+ and the like.
6
+
7
+ * Source at: http://github.com/kastman/escoffier
8
+
9
+ == DESCRIPTION:
10
+
11
+ You'll probably want to 'include compressible' or use the `mise` executible.
12
+
13
+ == SYNOPSIS:
14
+
15
+ mise /my/large/directory
16
+
17
+ == REQUIREMENTS:
18
+
19
+ * Unzipping is done via brianmario's bzip2-ruby gem, or if that fails (for very large files), falls back to a system call to `bzip2`
20
+
21
+ == LICENSE:
22
+
23
+ (The MIT License)
24
+
25
+ Copyright (c) 2010 Kastman
26
+
27
+ Permission is hereby granted, free of charge, to any person obtaining
28
+ a copy of this software and associated documentation files (the
29
+ 'Software'), to deal in the Software without restriction, including
30
+ without limitation the rights to use, copy, modify, merge, publish,
31
+ distribute, sublicense, and/or sell copies of the Software, and to
32
+ permit persons to whom the Software is furnished to do so, subject to
33
+ the following conditions:
34
+
35
+ The above copyright notice and this permission notice shall be
36
+ included in all copies or substantial portions of the Software.
37
+
38
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
39
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
40
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
41
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
42
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
43
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
44
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+
3
+ begin
4
+ require 'jeweler'
5
+ Jeweler::Tasks.new do |gemspec|
6
+ gemspec.name = "escoffier"
7
+ gemspec.summary = "Mise en Place Prep Tasks"
8
+ gemspec.description = "Administrative prep tasks, from mother sauces to hotel pans."
9
+ gemspec.email = "ekk@medicine.wisc.edu"
10
+ gemspec.homepage = "http://github.com/kastman/escoffier"
11
+ gemspec.authors = ["Erik Kastman"]
12
+ gemspec.add_dependency('bzip2-ruby')
13
+ gemspec.add_development_dependency('rspec')
14
+ end
15
+ Jeweler::GemcutterTasks.new
16
+ rescue LoadError
17
+ puts "Jeweler not available. Install it with: sudo gem install jeweler"
18
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
data/bin/mise ADDED
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
3
+
4
+ require 'optparse'
5
+ require 'etc'
6
+ require 'pathname'
7
+ require 'logger'
8
+ require 'tmpdir'
9
+ require 'escoffier'
10
+
11
+ def parse_options
12
+ options = Hash.new
13
+ parser = OptionParser.new do |opts|
14
+ opts.banner = "Usage: #{__FILE__} [options] paths"
15
+
16
+ opts.on('-o', '--output OUTPUT_DIRECTORY', "Output Destination Directory") do |dir|
17
+ options[:output] = dir
18
+ abort "Cannot find directory #{dir}." unless File.directory?(File.dirname(dir))
19
+ end
20
+
21
+ opts.on('-t', '--temp', "Make a temporary directory for output") do |dir|
22
+ options[:mktmpdir] = true
23
+ abort "Output directory already specified - not creating a temporary directory." if options[:dir]
24
+ end
25
+
26
+ # opts.on('-f', '--[no-]force', "Force Overwrite of the sandbox") do |f|
27
+ # options[:force] = f
28
+ # end
29
+
30
+ opts.on('-v', '--[no-]verbose', "Get detailed output") do |v|
31
+ options[:verbose] = v
32
+ end
33
+
34
+ opts.on_tail('-h', '--help', "Show this message") { puts(parser); exit }
35
+ end
36
+
37
+ parser.parse!(ARGV)
38
+ return options
39
+ end
40
+
41
+ def prep_mise(directories, options)
42
+ if options[:output]
43
+ destination = options[:output]
44
+ elsif options[:mktmpdir]
45
+ begin
46
+ destination = Dir.mktmpdir
47
+ rescue
48
+ begin
49
+ destination = Dir.tmpdir
50
+ rescue
51
+ destination = '/tmp/'
52
+ end
53
+ end
54
+ else
55
+ destination = Dir.pwd
56
+ end
57
+
58
+ directories.each do |directory|
59
+ # if options[:force]
60
+ # sandbox_dir = File.join(destination, File.basename(directory))
61
+ # if File.exist?(sandbox_dir)
62
+ # $LOG.info "Freshening up #{sandbox_dir}"
63
+ # FileUtils.rm_r(sandbox_dir)
64
+ # end
65
+ # end
66
+
67
+ directory.prep_mise_to(destination)
68
+ end
69
+
70
+ Dir.chdir(destination)
71
+
72
+ end
73
+
74
+ if File.basename(__FILE__) == File.basename($PROGRAM_NAME)
75
+ $LOG = Logger.new(STDOUT)
76
+ $LOG.level = Logger::INFO
77
+
78
+ options = parse_options
79
+ directories = ARGV.collect { |dir| Pathname.new(dir) }
80
+ prep_mise(directories, options)
81
+ end
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
3
+
4
+ # require 'rubygems'
5
+ require 'optparse'
6
+ require 'etc'
7
+ require 'logger'
8
+ require 'yaml'
9
+ require 'escoffier'
10
+
11
+
12
+
13
+ def parse_options
14
+ options = Hash.new
15
+ parser = OptionParser.new do |opts|
16
+ opts.banner = "Usage: normalize_directory.rb [options] list of directories."
17
+
18
+ # opts.on('-d', '--directory DIR', "Directory to Normalize") do |dir|
19
+ # abort
20
+ # options[:directory] = dir
21
+ # end
22
+
23
+ opts.on('-u', '--user USER', "The user who should own the files.") do |user|
24
+ abort "Cannot find user #{user}." unless Etc.getpwnam(user)
25
+ options[:user] = user
26
+ end
27
+
28
+ opts.on('-g', '--group GROUP', "The group who should own the files.") do |group|
29
+ abort "Cannot find group #{group}." unless Etc.getgrnam(group)
30
+ options[:group] = group
31
+ end
32
+
33
+ opts.on('-s', '--spec FILE', "A configuration file of directories.") do |file|
34
+ options[:specfile] = file
35
+ end
36
+
37
+ opts.on('--dry-run', "Display Ownership Changes but don't make them.") do
38
+ options[:dry_run] = true
39
+ end
40
+
41
+ opts.on_tail('-h', '--help', "Show this message") { puts(parser); exit }
42
+ opts.on_tail("Example: normalize_directory.rb -u raw -g raw /Data/vtrak1/raw")
43
+ end
44
+ parser.parse!(ARGV)
45
+ return options
46
+ end
47
+
48
+ def normalize!(options)
49
+ directories = ARGV.to_a
50
+ directories.each do |directory|
51
+ unless File.directory?(directory)
52
+ puts "Error: Cannot find directory #{dir}."
53
+ next
54
+ end
55
+ normalizer = Normalizer.new(directory, options)
56
+ normalizer.normalize_directory!
57
+ end
58
+ end
59
+
60
+ if File.basename(__FILE__) == File.basename($PROGRAM_NAME)
61
+ $LOG = Logger.new(STDOUT)
62
+
63
+ options = parse_options
64
+ if options[:spec]
65
+ directories =
66
+ end
67
+ normalize!(options)
68
+ end
data/escoffier.gemspec ADDED
@@ -0,0 +1,68 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{escoffier}
8
+ s.version = "0.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Erik Kastman"]
12
+ s.date = %q{2010-04-26}
13
+ s.description = %q{Administrative prep tasks, from mother sauces to hotel pans.}
14
+ s.email = %q{ekk@medicine.wisc.edu}
15
+ s.executables = ["normalize_directory.rb", "mise"]
16
+ s.extra_rdoc_files = [
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "Manifest.txt",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "bin/mise",
26
+ "bin/normalize_directory.rb",
27
+ "escoffier.gemspec",
28
+ "lib/escoffier.rb",
29
+ "lib/escoffier/compressible.rb",
30
+ "lib/escoffier/core_additions.rb",
31
+ "lib/escoffier/normalizer.rb",
32
+ "lib/escoffier/smepable.rb",
33
+ "spec/escoffier_spec.rb",
34
+ "spec/normalizer_spec.rb",
35
+ "spec/smepable_spec.rb",
36
+ "spec/spec.opts",
37
+ "spec/spec_helper.rb",
38
+ "tasks/rspec.rake"
39
+ ]
40
+ s.homepage = %q{http://github.com/kastman/escoffier}
41
+ s.rdoc_options = ["--charset=UTF-8"]
42
+ s.require_paths = ["lib"]
43
+ s.rubygems_version = %q{1.3.6}
44
+ s.summary = %q{Mise en Place Prep Tasks}
45
+ s.test_files = [
46
+ "spec/escoffier_spec.rb",
47
+ "spec/spec_helper.rb",
48
+ "spec/normalizer_spec.rb",
49
+ "spec/smepable_spec.rb"
50
+ ]
51
+
52
+ if s.respond_to? :specification_version then
53
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
54
+ s.specification_version = 3
55
+
56
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
57
+ s.add_runtime_dependency(%q<bzip2-ruby>, [">= 0"])
58
+ s.add_development_dependency(%q<rspec>, [">= 0"])
59
+ else
60
+ s.add_dependency(%q<bzip2-ruby>, [">= 0"])
61
+ s.add_dependency(%q<rspec>, [">= 0"])
62
+ end
63
+ else
64
+ s.add_dependency(%q<bzip2-ruby>, [">= 0"])
65
+ s.add_dependency(%q<rspec>, [">= 0"])
66
+ end
67
+ end
68
+
data/lib/escoffier.rb ADDED
@@ -0,0 +1,11 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'escoffier/core_additions'
5
+ require 'escoffier/normalizer'
6
+ require 'escoffier/compressible'
7
+ require 'escoffier/smepable'
8
+
9
+ module Escoffier
10
+ VERSION = '0.0.1'
11
+ end
@@ -0,0 +1,100 @@
1
+ module Compressible
2
+ # Unzips a file on the filesystem using the bzip2 algorithm.
3
+ # Pass in a path to a file, and optional options.
4
+ #
5
+ # options:
6
+ # :output_path => 'path' Where the file should go if not the same directory as the zipped file.
7
+ # :remove_original => [true] Specify if the original zipped file should be
8
+ # removed after unzipping.
9
+ # :recursive => [true]
10
+ def unzip(entry, options = Hash.new)
11
+
12
+ if options[:recursive]
13
+ Find.find(entry) do |entry|
14
+ next unless File.exists?(entry)
15
+ next if File.directory?(entry)
16
+ next unless entry =~ /.bz2$/
17
+
18
+ unzip_entry(entry, options)
19
+ end
20
+ else
21
+ unzip_entry(entry, options)
22
+ end
23
+
24
+ end
25
+
26
+ # Zips a file on the filesystem using the bzip2 algorithm.
27
+ # Pass in a path to a file, and optional options.
28
+ # options:
29
+ # :output_path => Where the file should go if not the same directory as the unzipped file.
30
+ # :remove_original => [true] Specify if the original zipped file should be
31
+ # removed after unzipping.
32
+ def zip(file, options = Hash.new)
33
+ if options[:output_path]
34
+ output_path = options[:output_path]
35
+ else
36
+ output_path = File.dirname(File.expand_path(file))
37
+ end
38
+
39
+ options[:remove_original] = true if options[:remove_original].nil?
40
+
41
+ decompressed_filename = File.expand_path(file)
42
+ compressed_filename = File.join(output_path, File.basename(file) + '.bz2')
43
+ puts "Compressing #{decompressed_filename} to #{compressed_filename}"
44
+ Bzip2::Writer.open(compressed_filename, 'w') do |compressed_file|
45
+ File.open(decompressed_filename, 'r') do |decompressed_file|
46
+ compressed_file << decompressed_file.read
47
+ end
48
+ end
49
+
50
+ if File.exist?(compressed_filename)
51
+ File.delete(decompressed_filename) if options[:remove_original]
52
+ end
53
+
54
+ return compressed_filename
55
+ end
56
+
57
+ private
58
+
59
+ def unzip_entry(file, options = Hash.new)
60
+ if options[:output_path]
61
+ output_path = options[:output_path]
62
+ else
63
+ output_path = File.dirname(File.expand_path(file))
64
+ end
65
+
66
+ options[:remove_original] = true if options[:remove_original].nil?
67
+
68
+ compressed_filename = File.expand_path(file)
69
+ decompressed_filename = File.join(output_path, File.basename(file, '.bz2'))
70
+ $LOG.debug "Decompressing #{compressed_filename} to #{decompressed_filename}"
71
+
72
+ begin
73
+ # raise NoMemoryError
74
+
75
+ Bzip2::Reader.open(compressed_filename, 'r') do |compressed_file|
76
+ begin
77
+ File.open(decompressed_filename, 'w') do |decompressed_file|
78
+ decompressed_file << compressed_file.read
79
+ end
80
+ rescue Bzip2::EOZError => e
81
+ raise(Bzip2::EOZError, "Problem decompressing #{compressed_filename}")
82
+ end
83
+ end
84
+
85
+ if File.exist?(decompressed_filename)
86
+ File.delete(compressed_filename) if options[:remove_original]
87
+ end
88
+ # Currently the Bzip2 library has a problem with very large files.
89
+ rescue NoMemoryError => e
90
+ # raise e
91
+ File.delete(decompressed_filename) if File.exists?(decompressed_filename)
92
+ cmd = "bunzip2 #{compressed_filename} #{decompressed_filename}"
93
+ puts cmd
94
+ system(cmd)
95
+ end
96
+
97
+
98
+ return decompressed_filename
99
+ end
100
+ end
@@ -0,0 +1,9 @@
1
+ require 'escoffier/smepable'
2
+
3
+ class Pathname
4
+ include Smepable
5
+
6
+ def prep_mise_to(output_dir)
7
+ self.prep_mise(self.to_s, output_dir)
8
+ end
9
+ end
@@ -0,0 +1,112 @@
1
+ require 'find'
2
+ require 'etc'
3
+ require 'bzip2_ext'
4
+ require 'escoffier/compressible'
5
+
6
+ class Normalizer
7
+ COMPRESSION_REGEXES = /\.bz2$/
8
+ DICOM_REGEXES = [/\d{3,5}.dcm$/, /I?.\d{4}$/ ]
9
+
10
+ include Compressible
11
+ attr_reader :entry_path
12
+
13
+ def initialize(entry_path, options = Hash.new)
14
+ if options[:user]
15
+ user = options[:user]
16
+ else
17
+ user = 'raw'
18
+ end
19
+
20
+ if options[:group]
21
+ group = options[:group]
22
+ else
23
+ group = 'raw'
24
+ end
25
+
26
+ if options[:dry_run]
27
+ @dry_run = true
28
+ else
29
+ @dry_run = false
30
+ end
31
+
32
+ unless Process.uid == 0 || @dry_run
33
+ puts "The normalizer must be run as root for correct permissions. Please use 'sudo'."
34
+ exit
35
+ end
36
+
37
+ @entry_path = entry_path
38
+ @uid, @gid, @username, @groupname = Etc.getpwnam(user).uid, Etc.getgrnam(group).gid, user, group
39
+ end
40
+
41
+ def normalize_directory!
42
+ puts "Scanning #{@entry_path}"
43
+
44
+ # Toggle Zippedness
45
+ Find.find(@entry_path) do |file|
46
+ next unless File.exists?(file)
47
+ next if File.directory?(file)
48
+
49
+ file = normalize_compression(file)
50
+ normalize_ownership(file)
51
+
52
+ end
53
+ end
54
+
55
+ def normalize_compression(file)
56
+ DICOM_REGEXES.each do |regex|
57
+ if file =~ regex
58
+ file = zip(file) unless @dry_run
59
+ end
60
+ end
61
+
62
+ # if file =~ COMPRESSION_REGEXES
63
+ # unzip(file)
64
+ # end
65
+
66
+ return file
67
+ end
68
+
69
+ def normalize_ownership(file, owner = 'raw', maximum_perms = 0755)
70
+ stat = File.stat(file)
71
+
72
+ file_uid, file_gid, mode = stat.uid, stat.gid, stat.mode
73
+
74
+ begin
75
+ if file_uid != @uid
76
+ begin
77
+ current_owner = Etc.getpwuid(file_uid).name
78
+ rescue ArgumentError # No such user; just use UID
79
+ current_owner = "uid #{file_uid}"
80
+ end
81
+ puts " CHOWN #{file}"
82
+ puts " Current owner is #{current_owner}, should be #{@username}"
83
+ File.chown(@uid, nil, file) unless @dry_run
84
+ end
85
+
86
+ if file_gid != @gid
87
+ begin
88
+ current_group = Etc.getgrgid(file_gid).name
89
+ rescue ArgumentError # No such group; just use GID
90
+ current_group = "gid #{file_gid}"
91
+ end
92
+ puts " CHOWN #{file}"
93
+ puts " Current group is #{current_group}, should be #{@groupname}"
94
+ File.chown(nil, @gid, file) unless @dry_run
95
+ end
96
+
97
+ perms = mode & 0777
98
+ should_be = perms & maximum_perms
99
+ if perms != should_be
100
+ puts " CHMOD #{file}"
101
+ puts " Current perms are #{perms.to_s(8)}, should be #{should_be.to_s(8)}"
102
+ File.chmod(perms & maximum_perms, file) unless @dry_run
103
+ end
104
+ rescue Exception => e
105
+ if e.errno == 'eperm'
106
+ puts "Cannot change ownership - insufficient permissions."
107
+ else
108
+ raise e
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,25 @@
1
+ require 'fileutils'
2
+ require 'pathname'
3
+ require 'tmpdir'
4
+ require 'logger'
5
+ require 'escoffier/compressible'
6
+
7
+ # Standard Mise en Place-able
8
+ module Smepable
9
+ $LOG ||= Logger.new(STDOUT)
10
+ include Compressible
11
+
12
+ def prep_mise(input_entry, output_directory = Dir.mktmpdir)
13
+ # destination_dirname = File.dirname(output_directory)
14
+ FileUtils.mkdir_p(output_directory) unless File.exist?(output_directory)
15
+ $LOG.info "Copying #{input_entry} to #{output_directory}"
16
+ verbose = $LOG.level <= Logger::DEBUG
17
+ source = input_entry
18
+ FileUtils.cp_r(source, output_directory, :verbose => verbose)
19
+ $LOG.info "Unzipping #{output_directory}"
20
+ unzip(output_directory, :recursive => true)
21
+
22
+ return output_directory
23
+ end
24
+
25
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ # Time to add your specs!
4
+ # http://rspec.info/
5
+ describe "Place your specs here" do
6
+
7
+ it "find this spec in spec directory" do
8
+ # violated "Be sure to write your specs"
9
+ end
10
+
11
+ end
@@ -0,0 +1,23 @@
1
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'escoffier'
6
+
7
+
8
+ describe "Normalize Compression" do
9
+
10
+ before(:all) do
11
+ options = Hash.new
12
+ options[:dry_run] = true
13
+ @normalizer = Normalizer.new('/tmp/awr011_8414_06182009', options)
14
+ end
15
+
16
+ it "should normalize compression" do
17
+ @normalizer.normalize_directory!
18
+ end
19
+
20
+ # after(:each) do
21
+ # end
22
+
23
+ end
@@ -0,0 +1,56 @@
1
+ $:.unshift File.join(File.dirname(__FILE__),'..','lib')
2
+
3
+ # require 'rubygems'
4
+ require 'spec'
5
+ require 'fileutils'
6
+ require 'logger'
7
+ require 'escoffier'
8
+ require 'escoffier/smepable'
9
+ require 'escoffier/core_additions'
10
+
11
+
12
+ describe "Test Copying and Unzipping with Standard Mise En Place SMEP" do
13
+
14
+ before(:all) do
15
+ @test_directories = {
16
+ :small_dataset => {
17
+ :raw => '/Data/vtrak1/raw/carlson.sharp.visit1/shp00005_421_02232010/006',
18
+ :source => '/tmp/shp00005_006',
19
+ :destination => '/tmp/shp00005_006_sandbox'
20
+ },
21
+ :full_visit => {
22
+ :raw => '/Data/vtrak1/raw/carlson.sharp.visit1/shp00005_421_02232010/',
23
+ :source => '/tmp/shp00005',
24
+ :destination => '/tmp/shp00005_sandbox'
25
+ }
26
+ }
27
+
28
+ @test_directories.each do |label, directory|
29
+ unless File.exists?(directory[:source])
30
+ puts "One-time preparation of Testing Source Directory"
31
+ FileUtils.cp_r(directory[:raw], directory[:source])
32
+ end
33
+ FileUtils.rm_r(directory[:destination]) if File.exists?(directory[:destination])
34
+ end
35
+
36
+ $LOG = Logger.new(STDOUT)
37
+
38
+ end
39
+
40
+ it "should unzip and decompress a small image dataset inside a sandbox" do
41
+ directory = @test_directories[:small_dataset]
42
+ d = Pathname.new(directory[:source])
43
+ d.prep_mise(directory[:source], directory[:destination])
44
+ end
45
+
46
+ it "should unzip and decompress a full visit inside a sandbox" do
47
+ directory = @test_directories[:full_visit]
48
+ d = Pathname.new(directory[:source])
49
+ d.prep_mise(directory[:source], directory[:destination])
50
+ end
51
+
52
+
53
+ # after(:each) do
54
+ # end
55
+
56
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'escoffier'
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems' unless ENV['NO_RUBYGEMS']
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: escoffier
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 0
9
+ version: 0.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Erik Kastman
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-26 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: bzip2-ruby
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :development
43
+ version_requirements: *id002
44
+ description: Administrative prep tasks, from mother sauces to hotel pans.
45
+ email: ekk@medicine.wisc.edu
46
+ executables:
47
+ - normalize_directory.rb
48
+ - mise
49
+ extensions: []
50
+
51
+ extra_rdoc_files:
52
+ - README.rdoc
53
+ files:
54
+ - .gitignore
55
+ - Manifest.txt
56
+ - README.rdoc
57
+ - Rakefile
58
+ - VERSION
59
+ - bin/mise
60
+ - bin/normalize_directory.rb
61
+ - escoffier.gemspec
62
+ - lib/escoffier.rb
63
+ - lib/escoffier/compressible.rb
64
+ - lib/escoffier/core_additions.rb
65
+ - lib/escoffier/normalizer.rb
66
+ - lib/escoffier/smepable.rb
67
+ - spec/escoffier_spec.rb
68
+ - spec/normalizer_spec.rb
69
+ - spec/smepable_spec.rb
70
+ - spec/spec.opts
71
+ - spec/spec_helper.rb
72
+ - tasks/rspec.rake
73
+ has_rdoc: true
74
+ homepage: http://github.com/kastman/escoffier
75
+ licenses: []
76
+
77
+ post_install_message:
78
+ rdoc_options:
79
+ - --charset=UTF-8
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ requirements: []
97
+
98
+ rubyforge_project:
99
+ rubygems_version: 1.3.6
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: Mise en Place Prep Tasks
103
+ test_files:
104
+ - spec/escoffier_spec.rb
105
+ - spec/spec_helper.rb
106
+ - spec/normalizer_spec.rb
107
+ - spec/smepable_spec.rb