mediatype_directory 0.0.2
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 +2 -0
- data/README.markdown +51 -0
- data/examples/create_pdf_dir.rb +10 -0
- data/examples/create_video_dir.rb +10 -0
- data/lib/mediatype_directory.rb +1 -0
- data/lib/mediatype_directory/mediatype_directory.rb +145 -0
- data/lib/mediatype_directory/version.rb +3 -0
- data/license.txt +20 -0
- data/mediatype_directory.gemspec +20 -0
- data/spec/mediatype_directory_spec.rb +183 -0
- data/spec/spec_helper.rb +7 -0
- metadata +89 -0
data/.gitignore
ADDED
data/README.markdown
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# MediatypeDirectory
|
2
|
+
|
3
|
+
## DESCRIPTION
|
4
|
+
|
5
|
+
MediatypeDirectory lets Linux/Mac users create a directory of (soft or hard) links to all files of a specified media type (or types) in a directory tree.
|
6
|
+
|
7
|
+
## WHY?
|
8
|
+
|
9
|
+
I store content (text files, PDFs, HTML pages, office suite files, audio files, video files, etc.) mixed together in directory trees organized by subject. For example, the directory ~/Tech/Ruby/TESTING/RSpec may hold videos, HTML files, PDFs, podcasts, etc. all related to RSpec testing in Ruby.
|
10
|
+
|
11
|
+
But when I'm programming, I often want to quickly grab a PDF reference document without searching through the directory tree. I want links to PDF files on Jasmine, RSpec, Rails, Ruby, Coffeescript, Underscore, JQuery, Javascript, Backbone, etc. all in one directory.
|
12
|
+
|
13
|
+
And when I have free time to watch videos, I'd like to quickly see the list of all available programming video files.
|
14
|
+
|
15
|
+
## REQUIREMENTS
|
16
|
+
|
17
|
+
I've run this only on Linux. It likely works on OS X. It probably won't work on Windows.
|
18
|
+
|
19
|
+
## BASIC USAGE
|
20
|
+
|
21
|
+
Create a new MediatypeDirectory object, passing in all your configuration options (or setting them on the object via setters). Then tell the new object to .create_directory:
|
22
|
+
|
23
|
+
require 'mediatype_directory'
|
24
|
+
|
25
|
+
config = {}
|
26
|
+
config[:extensions] = ['.flv','.mov','.mpg','.mp4']
|
27
|
+
config[:mediatype_dirname] = '~/path/to/dir/where/you/want/to/create/links'
|
28
|
+
config[:directory_tree] = '~/path/to/top-level-dir/you/want/to/create/mediatype-directory/for'
|
29
|
+
config[:linktype] = 'hard' # default: 'soft'
|
30
|
+
config[:test_mode] = true # default: false In test_mode, no directories or files are actually created
|
31
|
+
|
32
|
+
MediatypeDirectory.new(config).create_directory
|
33
|
+
|
34
|
+
## EXAMPLE
|
35
|
+
|
36
|
+
require 'mediatype_directory'
|
37
|
+
|
38
|
+
md = MediatypeDirectory.new({
|
39
|
+
extensions: [".flv",".mov",".mpg",'.mp4'], # List of file extensions for which you wish to generate links
|
40
|
+
directory_tree: '/home/jimmy/Tech/Ruby', # Where to look for existing files
|
41
|
+
mediatype_dirname: '~/Tech/Docs2/Videos', # Where to store links to existing files
|
42
|
+
linktype: 'hard', # Create hard links, not soft links (a.k.a. symbolic links)
|
43
|
+
test_mode: true # Show what would happen without actually creating directories or files
|
44
|
+
})
|
45
|
+
|
46
|
+
md.create_directory
|
47
|
+
|
48
|
+
## LEGAL DISCLAIMER
|
49
|
+
|
50
|
+
Please use at your own risk. I guarantee nothing about this program.
|
51
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require_relative '../lib/mediatype_directory/mediatype_directory'
|
2
|
+
|
3
|
+
md = MediatypeDirectory.new({
|
4
|
+
extensions: ['.pdf'],
|
5
|
+
directory_tree: '/home/jimmy/Tech/Ruby/DOCUMENTATION',
|
6
|
+
mediatype_dirname: '~/Tech/Docs2/PDFs',
|
7
|
+
linktype: 'hard'
|
8
|
+
})
|
9
|
+
|
10
|
+
md.create_directory
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require_relative '../lib/mediatype_directory/mediatype_directory'
|
2
|
+
|
3
|
+
md = MediatypeDirectory.new({
|
4
|
+
extensions: [".flv",".mov",".mpg",'.mp4'],
|
5
|
+
directory_tree: '/home/jimmy/Tech/Ruby',
|
6
|
+
mediatype_dirname: '~/Tech/Docs2/Videos',
|
7
|
+
linktype: 'hard'
|
8
|
+
})
|
9
|
+
|
10
|
+
md.create_directory
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'mediatype_directory/mediatype_directory'
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
# MediatypeDirectory.new takes a configuration hash and creates an object with a create_directory() method
|
6
|
+
# Calling create_directory() on the MediatypeDirectory object creates a directory, configured according to
|
7
|
+
# the configuration hash settings, containing softlinks to all files of the requested file extension(s) in
|
8
|
+
# the specified directory tree.
|
9
|
+
#
|
10
|
+
# Usage:
|
11
|
+
# MediatypeDirectory.new(options_hash).create_directory
|
12
|
+
#
|
13
|
+
# Alternative usage:
|
14
|
+
# md = MediatypeDirectory.new
|
15
|
+
# md.property = value (for all desired property-value pairs)
|
16
|
+
# md.create_directory
|
17
|
+
#
|
18
|
+
# Example:
|
19
|
+
# To create a directory at '~/Tech/Docs/PDFs' with softlinks to all PDF and ODT files under '~/Tech':
|
20
|
+
# md = MediatypeDirectory.new
|
21
|
+
# md.extensions = ['.pdf','.odt']
|
22
|
+
# md.mediatype_dirname = '~/Tech/Docs/PDFs'
|
23
|
+
# md.directory_tree = '~/Tech'
|
24
|
+
# md.create_directory
|
25
|
+
#
|
26
|
+
class MediatypeDirectory
|
27
|
+
|
28
|
+
attr_accessor :extensions, :linktype, :test_mode
|
29
|
+
attr_reader :mediatype_dirname, :directory_tree
|
30
|
+
|
31
|
+
class InvalidDirname < StandardError
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize(config)
|
35
|
+
self.extensions = config[:extensions]
|
36
|
+
self.mediatype_dirname = config[:mediatype_dirname]
|
37
|
+
self.directory_tree = config[:directory_tree]
|
38
|
+
self.linktype = config[:linktype] || 'soft'
|
39
|
+
self.test_mode = config[:test_mode] || false
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_directory
|
43
|
+
check_directories
|
44
|
+
create_links
|
45
|
+
end
|
46
|
+
|
47
|
+
def mediatype_dirname=(dirname)
|
48
|
+
@mediatype_dirname = nil_or_convert_dirname(dirname)
|
49
|
+
end
|
50
|
+
|
51
|
+
def directory_tree=(dirname)
|
52
|
+
@directory_tree = nil_or_convert_dirname(dirname)
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def hardlinks?
|
58
|
+
@linktype == 'hard'
|
59
|
+
end
|
60
|
+
|
61
|
+
def create_links
|
62
|
+
@mediatype_files = get_all_mediatype_files
|
63
|
+
#puts "Found these files: " + @mediatype_files.to_s
|
64
|
+
mediatype_files_to_links
|
65
|
+
end
|
66
|
+
|
67
|
+
# returns array of file pathnames in the directory_tree
|
68
|
+
# matching one of the file extensions
|
69
|
+
def get_all_mediatype_files
|
70
|
+
puts "Searching for files in #{directory_tree}"
|
71
|
+
Dir.chdir(directory_tree)
|
72
|
+
mediatype_files = []
|
73
|
+
@extensions.each do |ex|
|
74
|
+
search_for = File.join("**", '*' + ex) # example: "**/*.pdf"
|
75
|
+
mediatype_files.concat(Dir.glob(search_for))
|
76
|
+
end
|
77
|
+
puts "Found these files: " + mediatype_files.to_s
|
78
|
+
convert_to_pathnames(mediatype_files).delete_if { |mf| mf.dirname.to_s == @mediatype_dirname }
|
79
|
+
end
|
80
|
+
|
81
|
+
def convert_to_pathnames(filenames)
|
82
|
+
filenames.map { |mf| Pathname.new(mf).realdirpath }
|
83
|
+
end
|
84
|
+
|
85
|
+
def mediatype_files_to_links
|
86
|
+
Dir.chdir(mediatype_dirname) unless test_mode
|
87
|
+
@mediatype_files.each do |pathname|
|
88
|
+
mediatype_file_to_link pathname
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def mediatype_file_to_link(pathname)
|
93
|
+
puts "Attempting to create link for #{pathname.to_s}"
|
94
|
+
link = source_pathname_to_target_pathname(pathname)
|
95
|
+
if File.exists?(link.to_s)
|
96
|
+
puts "WARNING: #{link.to_s} already exists"
|
97
|
+
else
|
98
|
+
puts "Creating #{link.to_s}"
|
99
|
+
(hardlinks? ? FileUtils.ln(pathname.to_s, link.to_s) : FileUtils.ln_s(pathname.to_s, link.to_s)) unless test_mode
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def source_pathname_to_target_pathname(source_pathname)
|
104
|
+
Pathname.new(mediatype_dirname) + source_pathname.basename
|
105
|
+
end
|
106
|
+
|
107
|
+
def nil_or_convert_dirname(dirname)
|
108
|
+
(dirname.nil? || dirname == '') ? nil : convert_dirname(dirname)
|
109
|
+
end
|
110
|
+
|
111
|
+
def check_directories
|
112
|
+
validate_directories
|
113
|
+
create_missing_directories
|
114
|
+
end
|
115
|
+
|
116
|
+
def create_missing_directories
|
117
|
+
[mediatype_dirname, directory_tree].each do|dn|
|
118
|
+
make_dirname(dn)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def validate_directories
|
123
|
+
[mediatype_dirname, directory_tree].each do|dn|
|
124
|
+
validate_dirname(dn)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def make_dirname(dn)
|
129
|
+
unless File.directory? dn
|
130
|
+
puts "Creating directory #{dn}"
|
131
|
+
FileUtils.mkdir_p(dn) unless test_mode
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Ideally, should use a regexp that matches valid directories
|
136
|
+
# For now, a simple sanity check
|
137
|
+
def validate_dirname(dirname)
|
138
|
+
raise MediatypeDirectory::InvalidDirname, "#{dirname} is not a valid directory name" if dirname.match(/\s/) || !dirname.match(/^\//)
|
139
|
+
end
|
140
|
+
|
141
|
+
def convert_dirname(dirname)
|
142
|
+
File.expand_path(dirname)
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
data/license.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (C) 2011 by James K. Lavin
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
20
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require 'mediatype_directory/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = 'mediatype_directory'
|
6
|
+
s.version = MediatypeDirectory::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ['James Lavin']
|
9
|
+
s.email = ['mediatype_directory@futureresearch.com']
|
10
|
+
s.homepage = "https://github.com/JamesLavin/mediatype_directory"
|
11
|
+
s.summary = %q{Creates directory of links for all files with specified mediatype in subdirectory tree}
|
12
|
+
s.description = %q{Creates directory of hard or soft links for all files with specified mediatype (.pdf, .mp4, etc.) in subdirectory tree}
|
13
|
+
#s.add_runtime_dependency = ['fileutils','pathname']
|
14
|
+
s.add_development_dependency 'rspec'
|
15
|
+
s.add_development_dependency 'fakefs'
|
16
|
+
s.require_paths = ['lib']
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
#s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require_relative '../lib/mediatype_directory/mediatype_directory'
|
3
|
+
#require 'fakefs'
|
4
|
+
|
5
|
+
# Overriding FakeFS' File.expand_path
|
6
|
+
# because it delegates to the same class
|
7
|
+
# method in the REAL file system
|
8
|
+
module FakeFS
|
9
|
+
class File
|
10
|
+
def self.expand_path(*args)
|
11
|
+
args[0].gsub(/~/,'/home/xavier')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Overriding File.expand_path
|
17
|
+
# so it will provide the fake user's
|
18
|
+
# home directory
|
19
|
+
class File
|
20
|
+
def self.expand_path(*args)
|
21
|
+
args[0].gsub(/~/,'/home/xavier')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe MediatypeDirectory do
|
26
|
+
|
27
|
+
subject { MediatypeDirectory.new(config) }
|
28
|
+
|
29
|
+
let(:tilde_pdf_dir) { '~/my/pdf_dir' }
|
30
|
+
let(:tilde_dir_tree) { '~/my/techfiles' }
|
31
|
+
let(:exts) { ['.pdf','.odt'] }
|
32
|
+
|
33
|
+
before do
|
34
|
+
FileUtils.mkdir_p('/home/xavier/Tech2')
|
35
|
+
FileUtils.mkdir_p('/home/xavier/Tech2/Ruby/TESTING')
|
36
|
+
FileUtils.mkdir_p('/home/xavier/Tech2/JQuery')
|
37
|
+
FileUtils.mkdir_p('/home/xavier/Tech2/XML')
|
38
|
+
FileUtils.touch('/home/xavier/Tech2/Ruby/ruby.pdf')
|
39
|
+
FileUtils.touch('/home/xavier/Tech2/Ruby/TESTING/ruby_testing.pdf')
|
40
|
+
FileUtils.touch('/home/xavier/Tech2/JQuery/jquery.pdf')
|
41
|
+
FileUtils.touch('/home/xavier/Tech2/XML/xml.xml')
|
42
|
+
Dir.chdir('/home/xavier/Tech2')
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "test that FakeFS is properly configured" do
|
46
|
+
specify { File.exists?('/home/xavier/Tech2/Ruby/ruby.pdf') }
|
47
|
+
specify { Dir.exists?('/home/xavier/Tech2/JQuery') }
|
48
|
+
specify { Dir.pwd == '/home/xavier/Tech2' }
|
49
|
+
it "should find files using Dir.glob" do
|
50
|
+
pending "This test fails because FakeFS is broken"
|
51
|
+
# https://github.com/defunkt/fakefs/issues/142
|
52
|
+
# https://github.com/defunkt/fakefs/issues/121
|
53
|
+
Dir.chdir("/home/xavier/Tech2")
|
54
|
+
Dir.getwd.should == "/home/xavier/Tech2"
|
55
|
+
Dir.glob(File.join("**","*.pdf")).should_not == []
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "when config is empty hash" do
|
60
|
+
|
61
|
+
let(:config) { {} }
|
62
|
+
|
63
|
+
it { should be_true }
|
64
|
+
it { should respond_to :create_directory }
|
65
|
+
|
66
|
+
context "when setter sets mediatype_dirname" do
|
67
|
+
|
68
|
+
before { subject.mediatype_dirname = tilde_pdf_dir }
|
69
|
+
|
70
|
+
its(:mediatype_dirname) { should == File.expand_path(tilde_pdf_dir) }
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
context "when setter sets directory_tree" do
|
75
|
+
|
76
|
+
before { subject.directory_tree = tilde_dir_tree }
|
77
|
+
|
78
|
+
its(:directory_tree) { should == File.expand_path(tilde_dir_tree) }
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
context "when setter sets extensions" do
|
83
|
+
|
84
|
+
before do
|
85
|
+
subject.extensions = exts
|
86
|
+
end
|
87
|
+
|
88
|
+
its(:extensions) { should == exts }
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
context "when config sets mediatype_dirname" do
|
95
|
+
|
96
|
+
let(:config) { { mediatype_dirname: tilde_pdf_dir } }
|
97
|
+
|
98
|
+
it { should be_true }
|
99
|
+
|
100
|
+
#it "should set mediatype_dirname correctly" do
|
101
|
+
specify { subject.mediatype_dirname.should == File.expand_path(tilde_pdf_dir) }
|
102
|
+
#its(:mediatype_dirname) { should == File.expand_path(tilde_pdf_dir) }
|
103
|
+
#end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
context "when config sets directory_tree" do
|
108
|
+
|
109
|
+
let(:config) { { directory_tree: tilde_dir_tree } }
|
110
|
+
|
111
|
+
it { should be_true }
|
112
|
+
its(:directory_tree) { should == File.expand_path(tilde_dir_tree) }
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
context "when config sets extensions" do
|
117
|
+
|
118
|
+
let(:config) { { extensions: exts } }
|
119
|
+
|
120
|
+
it { should be_true }
|
121
|
+
its(:extensions) { should == exts }
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
describe "#create_directory" do
|
126
|
+
|
127
|
+
context "when values are set properly (with tildes)" do
|
128
|
+
|
129
|
+
let(:config) { { mediatype_dirname: tilde_pdf_dir,
|
130
|
+
directory_tree: tilde_dir_tree,
|
131
|
+
extensions: exts } }
|
132
|
+
|
133
|
+
it "should call :check directories and :create_links" do
|
134
|
+
subject.should_receive(:check_directories)
|
135
|
+
Dir.should_receive(:chdir)
|
136
|
+
subject.should_receive(:create_links)
|
137
|
+
subject.create_directory
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
context "when values are set properly (with full paths)" do
|
143
|
+
|
144
|
+
let(:xavier_docs_ruby) { '/home/xavier/Tech3/Docs/Ruby' }
|
145
|
+
let(:xavier_ruby) { '/home/xavier/Tech2/Ruby' }
|
146
|
+
let(:config) { { mediatype_dirname: xavier_docs_ruby,
|
147
|
+
directory_tree: xavier_ruby,
|
148
|
+
extensions: ['.pdf'],
|
149
|
+
linktype: 'hard' } }
|
150
|
+
|
151
|
+
it "should create the correct directory" do
|
152
|
+
subject.create_directory
|
153
|
+
Dir.exists?(xavier_docs_ruby).should be_true
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should create the correct files" do
|
157
|
+
pending "This test fails because FakeFS is broken"
|
158
|
+
subject.create_directory
|
159
|
+
Dir.exists?('/home/xavier/Tech3/Docs/Ruby').should be_true
|
160
|
+
Dir.chdir('/home/xavier/Tech3/Docs/Ruby')
|
161
|
+
Dir.getwd.should == '/home/xavier/Tech3/Docs/Ruby'
|
162
|
+
Dir.glob(File.join("**","*.pdf")).should_not == []
|
163
|
+
File.exists?('/home/xavier/Tech3/Docs/Ruby/ruby_testing.pdf').should be_true
|
164
|
+
File.exists?('/home/xavier/Tech3/Docs/Ruby/ruby.pdf').should be_true
|
165
|
+
File.exists?('/home/xavier/Tech3/Docs/jquery.pdf').should be_false
|
166
|
+
File.exists?('/home/xavier/Tech3/Docs/xml.xml').should be_false
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
context "when invalid mediatype_dirname" do
|
172
|
+
|
173
|
+
let(:config) { { mediatype_dirname: '~/techfiles/ /pd fs' } }
|
174
|
+
|
175
|
+
it "throws InvalidDirname error" do
|
176
|
+
expect { subject.create_directory }.to raise_error(MediatypeDirectory::InvalidDirname)
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mediatype_directory
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.2
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- James Lavin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :development
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: fakefs
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ! '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ! '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
46
|
+
description: Creates directory of hard or soft links for all files with specified mediatype (.pdf, .mp4, etc.) in subdirectory tree
|
47
|
+
email:
|
48
|
+
- mediatype_directory@futureresearch.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- README.markdown
|
55
|
+
- examples/create_pdf_dir.rb
|
56
|
+
- examples/create_video_dir.rb
|
57
|
+
- lib/mediatype_directory.rb
|
58
|
+
- lib/mediatype_directory/mediatype_directory.rb
|
59
|
+
- lib/mediatype_directory/version.rb
|
60
|
+
- license.txt
|
61
|
+
- mediatype_directory.gemspec
|
62
|
+
- spec/mediatype_directory_spec.rb
|
63
|
+
- spec/spec_helper.rb
|
64
|
+
homepage: https://github.com/JamesLavin/mediatype_directory
|
65
|
+
licenses: []
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
none: false
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
none: false
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 1.8.24
|
85
|
+
signing_key:
|
86
|
+
specification_version: 3
|
87
|
+
summary: Creates directory of links for all files with specified mediatype in subdirectory tree
|
88
|
+
test_files: []
|
89
|
+
...
|