search_path 0.0.1
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/.document +4 -0
- data/.gitignore +6 -0
- data/.rspec +3 -0
- data/ChangeLog.rdoc +4 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +22 -0
- data/README.md +71 -0
- data/Rakefile +38 -0
- data/lib/search_path/version.rb +3 -0
- data/lib/search_path.rb +122 -0
- data/search_path.gemspec +28 -0
- data/spec/search_path/search_path_spec.rb +147 -0
- data/spec/spec_helper.rb +4 -0
- metadata +178 -0
data/.document
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/ChangeLog.rdoc
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Thomas Baustert
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
## SearchPath
|
2
|
+
|
3
|
+
Allows to define search paths to find files in.
|
4
|
+
|
5
|
+
Useful for example to configure a few template directories to find a template in.
|
6
|
+
|
7
|
+
## Install via Bundler
|
8
|
+
|
9
|
+
Add to Gemfile:
|
10
|
+
|
11
|
+
# Gemfile
|
12
|
+
gem "search_path"
|
13
|
+
|
14
|
+
And run bundler:
|
15
|
+
|
16
|
+
$ bundle install
|
17
|
+
|
18
|
+
## Install without Bundler
|
19
|
+
|
20
|
+
$ gem install search_path
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
### Example with find
|
25
|
+
|
26
|
+
# Define the search paths. Search paths are considered in the order given, first given first searched.
|
27
|
+
search_path = SearchPath.new(["/custom/path/to/files", "/standard/path/to/files"])
|
28
|
+
|
29
|
+
# Case 1: File not in "/custom/path/to/files" but in "/standard/path/to/files":
|
30
|
+
search_path.find("template.erb") # => "/standard/path/to/files/template.erb"
|
31
|
+
|
32
|
+
# Case 2: File in "/custom/path/to/files" and in "/standard/path/to/files":
|
33
|
+
search_path.find("template.erb") # => "/custom/path/to/files/template.erb"
|
34
|
+
|
35
|
+
# Case 3: File not in "/custom/path/to/files" and not in "/standard/path/to/files":
|
36
|
+
search_path.find("template.erb") # => nil
|
37
|
+
|
38
|
+
### Example with find!
|
39
|
+
|
40
|
+
Same as `find` but raises `SearchPath::FileNotFoundError` if file cannot be found:
|
41
|
+
|
42
|
+
search_path.find!("template.erb") # => "/custom/path/to/files/template.erb"
|
43
|
+
search_path.find!("not_exists.erb") # => SearchPath::FileNotFoundError
|
44
|
+
|
45
|
+
### Verify that search paths exists
|
46
|
+
|
47
|
+
In case you wanna make sure the given search paths exists use option `verify_paths`:
|
48
|
+
|
49
|
+
# Raises SearchPath::SearchPathNotExistError if "/path1/to/files" or "/path2/to/files" not exist.
|
50
|
+
search_path = SearchPath.new(["/path1/to/files", "/path2/to/files"], :verify_paths => true)
|
51
|
+
|
52
|
+
### Search paths must be absolute
|
53
|
+
|
54
|
+
Note that each search path must be an absolute path. Using a relative path will raise an error:
|
55
|
+
|
56
|
+
# This Raises SearchPath::SearchPathNotAbsoluteError:
|
57
|
+
search_path = SearchPath.new("relative/path/to/files")
|
58
|
+
|
59
|
+
Because you want to avoid using hardcoded absolute paths in your code you define the paths
|
60
|
+
relative to search_path initialization code for example:
|
61
|
+
|
62
|
+
search_dir = File.expand("../../relative/path/to/files", __FILE__)
|
63
|
+
search_path = SearchPath.new([search_dir])
|
64
|
+
|
65
|
+
## Contact
|
66
|
+
|
67
|
+
For comments and question feel free to contact me: business@thomasbaustert.de
|
68
|
+
|
69
|
+
Copyright © 2012 [Thomas Baustert](http://thomasbaustert.de), released under the MIT license
|
70
|
+
|
71
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bundler'
|
7
|
+
rescue LoadError => e
|
8
|
+
warn e.message
|
9
|
+
warn "Run `gem install bundler` to install Bundler."
|
10
|
+
exit -1
|
11
|
+
end
|
12
|
+
|
13
|
+
begin
|
14
|
+
Bundler.setup(:development)
|
15
|
+
rescue Bundler::BundlerError => e
|
16
|
+
warn e.message
|
17
|
+
warn "Run `bundle install` to install missing gems."
|
18
|
+
exit e.status_code
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'rake'
|
22
|
+
|
23
|
+
require 'rdoc/task'
|
24
|
+
RDoc::Task.new do |rdoc|
|
25
|
+
rdoc.title = "search_path"
|
26
|
+
end
|
27
|
+
task :doc => :rdoc
|
28
|
+
|
29
|
+
require 'rspec/core/rake_task'
|
30
|
+
RSpec::Core::RakeTask.new
|
31
|
+
|
32
|
+
task :test => :spec
|
33
|
+
task :default => :spec
|
34
|
+
|
35
|
+
require 'rubygems/tasks'
|
36
|
+
Gem::Tasks.new
|
37
|
+
|
38
|
+
Bundler::GemHelper.install_tasks
|
data/lib/search_path.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'search_path/version'
|
2
|
+
|
3
|
+
class SearchPath
|
4
|
+
|
5
|
+
# Raised if search path is not absolute.
|
6
|
+
class SearchPathNotAbsoluteError < StandardError; end
|
7
|
+
|
8
|
+
# Raised if one or more given search paths does not exist.
|
9
|
+
class SearchPathNotExistError < StandardError; end
|
10
|
+
|
11
|
+
# Raised if given file was not found in the given search paths.
|
12
|
+
class FileNotFoundError < StandardError; end
|
13
|
+
|
14
|
+
|
15
|
+
attr_reader :search_paths
|
16
|
+
|
17
|
+
##
|
18
|
+
# Initialize a new +SearchPath+ instance with the given search paths.
|
19
|
+
#
|
20
|
+
# == Parameters
|
21
|
+
#
|
22
|
+
# * +search_paths+ - The search paths to find a filename in.
|
23
|
+
#
|
24
|
+
# == Options
|
25
|
+
#
|
26
|
+
# * +:verify_paths+ - If +true+ verify the existence of each search path and raise an +SearchPathNotExistError+ exception if path not exists.
|
27
|
+
#
|
28
|
+
# ==== Examples
|
29
|
+
#
|
30
|
+
# search_path = SearchPath.new("/path1/to/files")
|
31
|
+
# search_path = SearchPath.new(["/path1/to/files", "/path2/to/files"])
|
32
|
+
#
|
33
|
+
# # => raises SearchPathNotAbsoluteError
|
34
|
+
# search_path = SearchPath.new(["a/relative/path"])
|
35
|
+
#
|
36
|
+
# # => raises SearchPathNotExistError for "/not/existing/path"
|
37
|
+
# search_path = SearchPath.new(["/existing/path", "/not/existing/path"], :verify_paths => true)
|
38
|
+
#
|
39
|
+
def initialize(search_paths, options = {})
|
40
|
+
@search_paths = Array(search_paths)
|
41
|
+
|
42
|
+
verify_search_paths_are_absolute!
|
43
|
+
verify_search_paths_exists! if options[:verify_paths] == true
|
44
|
+
end
|
45
|
+
|
46
|
+
##
|
47
|
+
# Finds the given +filename+ in the search paths. Returns the full path to the file
|
48
|
+
# or +nil+ if the file could not be found in one of the search paths.
|
49
|
+
#
|
50
|
+
# == Parameters
|
51
|
+
#
|
52
|
+
# * +filename+ - The filename to find.
|
53
|
+
#
|
54
|
+
# ==== Examples
|
55
|
+
#
|
56
|
+
# search_path = SearchPath.new(["/path1/to/files", "/path2/to/files"])
|
57
|
+
#
|
58
|
+
# # File "searched_file.txt" exists in "/path1/to/files"
|
59
|
+
# search_path.find("searched_file.txt") # => "/path1/to/files/searched_file.txt"
|
60
|
+
#
|
61
|
+
# # File "searched_file.txt" exists in "/path2/to/files"
|
62
|
+
# search_path.find("searched_file.txt") # => "/path2/to/files/searched_file.txt"
|
63
|
+
#
|
64
|
+
# # File "searched_file.txt" exists in none
|
65
|
+
# search_path.find("searched_file.txt") # => nil
|
66
|
+
#
|
67
|
+
def find(filename)
|
68
|
+
search_paths.each do |path|
|
69
|
+
if File.exists?("#{path}/#{filename}")
|
70
|
+
return "#{path}/#{filename}"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
nil
|
75
|
+
end
|
76
|
+
|
77
|
+
##
|
78
|
+
# Same as #find but raises +FileNotFoundError+ exception if the file could not be found.
|
79
|
+
#
|
80
|
+
def find!(filename)
|
81
|
+
find(filename) || raise_file_not_found!(filename)
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def verify_search_paths_are_absolute!
|
87
|
+
not_absolute_paths = search_paths.inject([]) do |list, path|
|
88
|
+
list << path unless Pathname.new(path).absolute?
|
89
|
+
list
|
90
|
+
end
|
91
|
+
|
92
|
+
raise raise_search_path_not_absolute!(not_absolute_paths) unless not_absolute_paths.empty?
|
93
|
+
end
|
94
|
+
|
95
|
+
def verify_search_paths_exists!
|
96
|
+
not_existing_paths = search_paths.inject([]) do |list, path|
|
97
|
+
list << path unless existing_directory?(path)
|
98
|
+
list
|
99
|
+
end
|
100
|
+
|
101
|
+
raise raise_search_path_not_exists!(not_existing_paths) unless not_existing_paths.empty?
|
102
|
+
end
|
103
|
+
|
104
|
+
def existing_directory?(path)
|
105
|
+
File.exists?(path) && File.directory?(path)
|
106
|
+
end
|
107
|
+
|
108
|
+
def raise_search_path_not_absolute!(paths)
|
109
|
+
raise SearchPathNotAbsoluteError.new("Search path(s) #{paths.inspect} is not absolute.")
|
110
|
+
end
|
111
|
+
|
112
|
+
def raise_search_path_not_exists!(paths)
|
113
|
+
raise SearchPathNotExistError.new("Search path(s) #{paths.inspect} does not exists.")
|
114
|
+
end
|
115
|
+
|
116
|
+
def raise_file_not_found!(filename)
|
117
|
+
raise FileNotFoundError.new("File '#{filename}' not found in search paths #{search_paths.inspect}.")
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
|
data/search_path.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path('../lib/search_path/version', __FILE__)
|
4
|
+
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gem.name = "search_path"
|
7
|
+
gem.version = SearchPath::VERSION
|
8
|
+
gem.summary = %q{Allows to define search paths to find files in.}
|
9
|
+
gem.description = %q{Allows to define search paths to find files in.}
|
10
|
+
gem.license = "MIT"
|
11
|
+
gem.authors = ["Thomas Baustert"]
|
12
|
+
gem.email = "business@thomasbaustert.de"
|
13
|
+
gem.homepage = "https://github.com/thomasbaustert/search_path"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ['lib']
|
19
|
+
|
20
|
+
gem.add_development_dependency 'fakefs'
|
21
|
+
gem.add_development_dependency 'rubygems-tasks'
|
22
|
+
gem.add_development_dependency 'bundler'
|
23
|
+
gem.add_development_dependency 'rake'
|
24
|
+
gem.add_development_dependency 'rdoc'
|
25
|
+
gem.add_development_dependency 'rspec'
|
26
|
+
gem.add_development_dependency 'fuubar'
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SearchPath do
|
4
|
+
|
5
|
+
describe "#initialize" do
|
6
|
+
|
7
|
+
context "given relative path" do
|
8
|
+
it "raises exception" do
|
9
|
+
FakeFS do
|
10
|
+
create_dir("/absolute/path/to/")
|
11
|
+
Dir.chdir("/absolute/path/to") do
|
12
|
+
lambda {
|
13
|
+
SearchPath.new(["a/not/existing/relative/path"])
|
14
|
+
}.should raise_error(SearchPath::SearchPathNotAbsoluteError, "Search path(s) [\"a/not/existing/relative/path\"] is not absolute.")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "verification existence of search paths" do
|
21
|
+
|
22
|
+
context "given not existing search path" do
|
23
|
+
context "as absolute path" do
|
24
|
+
it "raises exception if path not exists" do
|
25
|
+
lambda {
|
26
|
+
SearchPath.new(["/not/existing/path"], :verify_paths => true)
|
27
|
+
}.should raise_error(SearchPath::SearchPathNotExistError, "Search path(s) [\"/not/existing/path\"] does not exists.")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "raises exception if one path not exists" do
|
32
|
+
FakeFS do
|
33
|
+
create_dir("/existing/path")
|
34
|
+
lambda {
|
35
|
+
SearchPath.new(["/existing/path", "/not/existing/path"], :verify_paths => true)
|
36
|
+
}.should raise_error(SearchPath::SearchPathNotExistError, "Search path(s) [\"/not/existing/path\"] does not exists.")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "raises exception if path is not a directory" do
|
41
|
+
FakeFS do
|
42
|
+
create_filename("/existing/path/to/file.txt")
|
43
|
+
lambda {
|
44
|
+
SearchPath.new(["/existing/path/to/file.txt"], :verify_paths => true)
|
45
|
+
}.should raise_error(SearchPath::SearchPathNotExistError, "Search path(s) [\"/existing/path/to/file.txt\"] does not exists.")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#search_paths" do
|
53
|
+
context "given search paths is nil" do
|
54
|
+
it "converts string to empty array" do
|
55
|
+
search_path = SearchPath.new(nil)
|
56
|
+
search_path.search_paths.should eq []
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "given search paths is as string" do
|
61
|
+
it "converts string to array with one element" do
|
62
|
+
search_path = SearchPath.new("/path/to/files")
|
63
|
+
search_path.search_paths.should eq ["/path/to/files"]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context "given search paths is an array of strings" do
|
68
|
+
it "returns array as given" do
|
69
|
+
search_path = SearchPath.new(["/path1/to/files", "/path2/to/more/files"])
|
70
|
+
search_path.search_paths.should eq ["/path1/to/files", "/path2/to/more/files"]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#find" do
|
76
|
+
context "empty search path given" do
|
77
|
+
it "should return nil" do
|
78
|
+
SearchPath.new(nil).find("searched_file.txt").should be_nil
|
79
|
+
SearchPath.new([]).find("searched_file.txt").should be_nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "search path given" do
|
84
|
+
context "file not exists in search path" do
|
85
|
+
it "should return nil" do
|
86
|
+
FakeFS do
|
87
|
+
search_path = SearchPath.new(["/not/existing/path"])
|
88
|
+
search_path.find("searched_file.txt").should be_nil
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "file exists in search path" do
|
94
|
+
it "should return full path to file" do
|
95
|
+
FakeFS do
|
96
|
+
create_filename("/path/to/files/searched_file.txt")
|
97
|
+
search_path = SearchPath.new(["/path/to/files"])
|
98
|
+
search_path.find("searched_file.txt").should eq "/path/to/files/searched_file.txt"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "#find!" do
|
106
|
+
context "empty search path given" do
|
107
|
+
it "should raise exception" do
|
108
|
+
lambda { SearchPath.new(nil).find!("searched_file.txt") }.should(
|
109
|
+
raise_error(SearchPath::FileNotFoundError, "File 'searched_file.txt' not found in search paths []."))
|
110
|
+
lambda { SearchPath.new([]).find!("searched_file.txt") }.should raise_error(SearchPath::FileNotFoundError)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context "search path given" do
|
115
|
+
context "file not exists in search path" do
|
116
|
+
it "should raise exception" do
|
117
|
+
FakeFS do
|
118
|
+
search_path = SearchPath.new(["/not/existing/path"])
|
119
|
+
lambda { search_path.find!("searched_file.txt") }.should raise_error(SearchPath::FileNotFoundError)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context "file exists in search path" do
|
125
|
+
it "should return full path to file" do
|
126
|
+
FakeFS do
|
127
|
+
create_filename("/path/to/files/searched_file.txt")
|
128
|
+
search_path = SearchPath.new(["/path/to/files"])
|
129
|
+
search_path.find!("searched_file.txt").should eq "/path/to/files/searched_file.txt"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
def create_filename(filename, content = "RESULT")
|
139
|
+
create_dir(File.dirname(filename))
|
140
|
+
File.open(filename, "w") { |file| file.write(content) }
|
141
|
+
end
|
142
|
+
|
143
|
+
def create_dir(dirname)
|
144
|
+
FileUtils.mkdir_p(dirname)
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: search_path
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Thomas Baustert
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fakefs
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rubygems-tasks
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rdoc
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rspec
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: fuubar
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: Allows to define search paths to find files in.
|
127
|
+
email: business@thomasbaustert.de
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- .document
|
133
|
+
- .gitignore
|
134
|
+
- .rspec
|
135
|
+
- ChangeLog.rdoc
|
136
|
+
- Gemfile
|
137
|
+
- LICENSE.txt
|
138
|
+
- README.md
|
139
|
+
- Rakefile
|
140
|
+
- lib/search_path.rb
|
141
|
+
- lib/search_path/version.rb
|
142
|
+
- search_path.gemspec
|
143
|
+
- spec/search_path/search_path_spec.rb
|
144
|
+
- spec/spec_helper.rb
|
145
|
+
homepage: https://github.com/thomasbaustert/search_path
|
146
|
+
licenses:
|
147
|
+
- MIT
|
148
|
+
post_install_message:
|
149
|
+
rdoc_options: []
|
150
|
+
require_paths:
|
151
|
+
- lib
|
152
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
hash: 4409282025559043119
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
segments:
|
168
|
+
- 0
|
169
|
+
hash: 4409282025559043119
|
170
|
+
requirements: []
|
171
|
+
rubyforge_project:
|
172
|
+
rubygems_version: 1.8.24
|
173
|
+
signing_key:
|
174
|
+
specification_version: 3
|
175
|
+
summary: Allows to define search paths to find files in.
|
176
|
+
test_files:
|
177
|
+
- spec/search_path/search_path_spec.rb
|
178
|
+
- spec/spec_helper.rb
|