multi_dir 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ce861e1b857ef81a8a7b636fefca4baefe2a05bc
4
+ data.tar.gz: e382dcb44de085b9ebcffedc2a4916aaf4949782
5
+ SHA512:
6
+ metadata.gz: 8a82b06f595a738d2a4bd493536f76b1260fc72251ef8e8690b1f52dc8aec26553ac0856a02e62989f8382cad47fc7e3de54c94149edcbc1dc99c71a7a68578c
7
+ data.tar.gz: 79eecdaa711d5edfeb68a15941e52f82719749c56c4777ebd159fcd2040057485f590d127c1a5186f37815a73b2c7107d55adc1736083627829589b5a2ecf4be
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ *.iml
4
+ .idea
5
+ .rbx
6
+ .bundle
7
+ .config
8
+ .yardoc
9
+ Gemfile.lock
10
+ InstalledFiles
11
+ _yardoc
12
+ coverage
13
+ doc/
14
+ lib/bundler/man
15
+ pkg
16
+ rdoc
17
+ spec/reports
18
+ test/tmp
19
+ test/version_tmp
20
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ - 1.8.7
6
+ - jruby
7
+ - rbx-19mode
8
+ - rbx-18mode
9
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in multi_dir.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Jan Graichen
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,116 @@
1
+ # MultiDir
2
+
3
+ [![Build Status](https://travis-ci.org/jgraichen/multi_dir.png?branch=master)](https://travis-ci.org/jgraichen/multi_dir)
4
+
5
+ **MultiDir** allow libraries and frameworks to request paths in a semantic
6
+ way. This allows administrators to define real paths in one global
7
+ standardized way.
8
+
9
+ No more `Rails.root.join *%w(tmp uploaded)` anymore. Give administrators the
10
+ freedom to link the temp directory to `/tmp/myapp` or any other system
11
+ specific place by just using `MultiDir.tmp.join 'uploaded'`.
12
+
13
+ *Note: MultiDir as a library is still under development but the concept sounds nice.*
14
+
15
+ ## Installation
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'multi_dir'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install multi_dir
28
+
29
+ ## Usage
30
+
31
+ ### For All
32
+
33
+ MultiDir allows to define any semantic path your app, library or framework may
34
+ need. By default the following paths are specified:
35
+
36
+ ```
37
+ MultiDir.bin # => 'bin'
38
+ MultiDir.lib # => 'lib'
39
+ MultiDir.tmp # => 'tmp'
40
+ MultiDir.cache # => 'tmp/cache'
41
+ MultiDir.files # => 'files'
42
+ MultiDir.config # => 'config
43
+ ```
44
+
45
+ ### For Administrators
46
+
47
+ **MultiDir** provides everything you need to integrate some hipster app into
48
+ your well known and proven operating system structure. It allows you to
49
+ specify which content should live where without manual patching every piece of
50
+ code.
51
+
52
+ Create or edit `dirs.yml` in the application root directory (or whereever
53
+ you're running the app) or specific the path using `MULTI_DIR_CONFIG` env
54
+ variable with the following content:
55
+
56
+ ```yaml
57
+ paths:
58
+ tmp: /tmp/myapp-srv2
59
+ files: /mnt/nfs2/storage
60
+ cache: /var/cache/apps/myapp
61
+ log: /var/log/myapp
62
+ ```
63
+
64
+ This file allows you to specify the base paths for the application.
65
+
66
+ ### For Developers
67
+
68
+ **MultiDir** makes you a developer loved by administrators as you given them
69
+ the freedom to adjust you app or library according there needs. It also makes
70
+ you happy reaching another stage of more semantic programming.
71
+
72
+ You can just use **MultiDir** like you've used `Rails.root.join` in the past.
73
+
74
+ See the following examples:
75
+
76
+ ```ruby
77
+ # Request a specific file
78
+ MultiDir.cache.join *%(pdfgen page5.pdf) # => "cache/pdfgen/page5.pdf"
79
+
80
+ # Request a file with a temporary name
81
+ MultiDir.tmp.temp_file ['basename', '.jpg'] # => "tmp/basename74hf4727f834.jpg"
82
+
83
+ # Get list of files in a additional configurable directory
84
+ MultiDir.cache[:uploads].glob '**/*.zip' # This allows admins to configure a special path for :uploads
85
+ # that if not given will be placed in 'cache'.
86
+ # => ["/media/uploads/a/virus.zip", "/media/uploads/attachments/ppt.zip"]
87
+ ```
88
+
89
+ You can even define your own new top level *semantic path*:
90
+
91
+ ```ruby
92
+ MultiDir::Paths.define :uploads, in: :tmp
93
+ ```
94
+
95
+ This allows you to use `uploads` as a top level path that will be placed in `tmp` if not configured otherwise:
96
+
97
+ ```ruby
98
+ MultiDir.uploads.join 'abrng.pdf' # => "/tmp/uploads/abrng.pdf"
99
+ ```
100
+
101
+ *More features will follow.*
102
+
103
+ ## Contributing
104
+
105
+ 1. Fork it
106
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
107
+ 3. Add specs for your feature
108
+ 4. Implement your feature
109
+ 5. Check that all specs are passing
110
+ 6. Commit your changes (`git commit -am 'Add some feature'`)
111
+ 7. Push to the branch (`git push origin my-new-feature`)
112
+ 8. Create new Pull Request
113
+
114
+ ## License
115
+
116
+ Copyright (c) 2013 Jan Graichen - MIT License
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/lib/multi_dir.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'active_support/core_ext/kernel/singleton_class'
2
+ require 'active_support/core_ext/hash/keys'
3
+
4
+ require 'multi_dir/version'
5
+ require 'multi_dir/paths'
6
+ require 'multi_dir/pathname_patch'
7
+
8
+ module MultiDir
9
+ class << self
10
+ def define_path_method(name)
11
+ name = name.to_sym
12
+ singleton_class.instance_eval do
13
+ define_method(name) { self.resolve name }
14
+ end
15
+ end
16
+
17
+ def [](symbol)
18
+ Pathname.new MultiDir::Paths.instance.resolve symbol
19
+ end
20
+ alias_method :resolve, :[]
21
+ end
22
+
23
+ [ :root, :bin, :lib, :tmp, :config, :cache, :files ].each do |path|
24
+ define_path_method path
25
+ end
26
+ end
@@ -0,0 +1,22 @@
1
+ module MultiDir
2
+
3
+ # Provide additional function to operate
4
+ # on directories.
5
+ #
6
+ module PathnamePatch
7
+
8
+ def glob(pattern)
9
+ Dir.glob File.join(to_s, pattern)
10
+ end
11
+
12
+ def [](path)
13
+ if MultiDir::Paths.instance.paths.include? path.to_sym
14
+ return MultiDir::Paths.instance.resolve(path)
15
+ end
16
+
17
+ join path.to_s
18
+ end
19
+ end
20
+
21
+ ::Pathname.send :include, PathnamePatch
22
+ end
@@ -0,0 +1,124 @@
1
+ require 'yaml'
2
+
3
+ module MultiDir
4
+
5
+ # Can resolve paths using symbols.
6
+ #
7
+ class Paths
8
+
9
+ def initialize(paths = {})
10
+ self.paths.merge! paths.symbolize_keys unless paths.nil? or paths.empty?
11
+ end
12
+
13
+ # Resolve symbolic path to real path.
14
+ #
15
+ def resolve(symbol)
16
+ case symbol
17
+ when :root
18
+ resolve_root
19
+ else
20
+ raise ArgumentError.new "Path symbol `#{symbol.inspect}` does not exist." unless paths.has_key? symbol
21
+
22
+ path = paths[symbol]
23
+ if path.is_a? Array
24
+ File.join resolve(path[0]), path[1].to_s
25
+ else
26
+ path.to_s
27
+ end
28
+ end
29
+ end
30
+
31
+ # Resolve root path.
32
+ #
33
+ def resolve_root
34
+ return paths[:root] if paths.has_key? :root
35
+ return ::Rails.root.to_s if Object.const_defined?(:Rails) && ::Rails.respond_to?(:root)
36
+ Pathname.pwd.to_s
37
+ end
38
+
39
+ def paths
40
+ @paths ||= load_paths
41
+ end
42
+
43
+ def load_paths
44
+ paths = default_paths
45
+
46
+ [ 'multi_dir.yml', ENV['MULTI_DIR_CONFIG'] ].reject(&:nil?).each do |file|
47
+ next unless File.exists? file
48
+ paths.merge! load_yaml file
49
+ end
50
+
51
+ paths
52
+ end
53
+
54
+ def default_paths
55
+ {
56
+ :bin => [:root, 'bin'],
57
+ :lib => [:root, 'lib'],
58
+ :tmp => [:root, 'tmp'],
59
+ :cache => [:tmp, 'cache'],
60
+ :config => [:root, 'config'],
61
+ :files => [:root, 'files']
62
+ }
63
+ end
64
+
65
+ def load_yaml(file)
66
+ raise ArgumentError.new "File `#{file}` does not exists." unless File.exists? file
67
+ raise ArgumentError.new "File `#{file}` is not readable." unless File.readable? file
68
+ data = YAML.load_file(file).symbolize_keys
69
+
70
+ unless data.is_a? Hash and data.has_key? :paths
71
+ raise ArgumentError.new "File `#{file}` does not contain a valid MultiDir YAML definition."
72
+ end
73
+
74
+ data[:paths].inject({}) do |memo, row|
75
+ key, path = row[0].to_sym, row[1].to_s
76
+ memo[key] = if %w(/ .).include? path[0].chr
77
+ File.expand_path path.to_s
78
+ else
79
+ [ :root, path.to_s ]
80
+ end
81
+
82
+ memo
83
+ end
84
+ end
85
+
86
+ def load_yaml!(file)
87
+ paths.merge! load_yaml file
88
+ end
89
+
90
+ def define(name, options = {})
91
+ name = name.to_s
92
+
93
+ if MultiDir.methods.include?(name)
94
+ raise ArgumentError.new "Path name `#{name}` would override already defined method on MultiDir."
95
+ end
96
+
97
+ parent = options[:id] || options[:parent]
98
+ paths[name] = [ parent, name.to_s ]
99
+
100
+ MultiDir.define_path_method name
101
+ end
102
+
103
+ class << self
104
+
105
+ def instance
106
+ @instance ||= new
107
+ end
108
+
109
+ def reset_instance
110
+ @instance = nil
111
+ end
112
+
113
+ def load_yaml(file)
114
+ instance.load_yaml! file
115
+ end
116
+
117
+ # Define a new semantic path.
118
+ #
119
+ def define(name, options = {})
120
+ instance.define name, options
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,11 @@
1
+ module MultiDir
2
+ module VERSION
3
+ MAJOR = 0
4
+ MINOR = 1
5
+ PATCH = 0
6
+ STAGE = nil
7
+ STRING = [MAJOR, MINOR, PATCH, STAGE].reject(&:nil?).join('.')
8
+
9
+ def self.to_s; STRING end
10
+ end
11
+ end
data/multi_dir.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'multi_dir/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'multi_dir'
8
+ spec.version = MultiDir::VERSION
9
+ spec.authors = ['Jan Graichen']
10
+ spec.email = %w(jg@altimos.de)
11
+ spec.description = %q{Library for semantic path configuration to make developers and operators happy.}
12
+ spec.summary = %q{Library for semantic path configuration to make developers and operators happy.}
13
+ spec.homepage = 'https://github.com/jgraichen/multi_dir'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = %w(lib)
20
+
21
+ spec.add_runtime_dependency 'activesupport'
22
+
23
+ spec.add_development_dependency 'bundler', '~> 1.3'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'coveralls'
27
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe MultiDir::Paths do
4
+ let(:config) { nil }
5
+ let(:paths) { MultiDir::Paths.new config }
6
+
7
+ describe '#load_paths' do
8
+ context 'with local file' do
9
+ it 'should load local configuration' do
10
+ Dir.chdir 'spec/support' do
11
+ expect(paths.resolve :root).to be == '/usr/lib/myapp'
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ describe '#load_yaml' do
18
+ let(:cfg) { paths.load_yaml 'spec/support/multi_dir.yml' }
19
+
20
+ it 'should load configuration from YAML file' do
21
+ expect(cfg).to include(:root, :bin, :cache, :config, :tmp, :files, :uploads)
22
+ end
23
+
24
+ it 'should detect absolute paths' do
25
+ expect(cfg[:bin]).to be == '/usr/bin'
26
+ end
27
+
28
+ it 'should detect relative paths' do
29
+ expect(cfg[:spec_support]).to be == [ :root, 'spec/support' ]
30
+ end
31
+
32
+ it 'should detect working dir relative path' do
33
+ expect(cfg[:spec_support2]).to be == Pathname.pwd.join('spec/support').to_s
34
+ end
35
+ end
36
+
37
+ describe '#resolve' do
38
+ let(:config) { { :root => '/root', :tmp => [:root, 'tmp'] } }
39
+
40
+ it 'should resolve direct path symbol' do
41
+ expect(paths.resolve :root).to be == '/root'
42
+ end
43
+
44
+ it 'should resolve indirect path symbol' do
45
+ expect(paths.resolve :tmp).to be == '/root/tmp'
46
+ end
47
+
48
+ it 'should raise error on not existing path symbols' do
49
+ expect {
50
+ paths.resolve :not_existing_symbol
51
+ }.to raise_error(ArgumentError)
52
+ end
53
+ end
54
+
55
+ describe '#resovle_root' do
56
+ context 'with configure root path' do
57
+ let(:config) { { :root => '/var/app/root' } }
58
+
59
+ it 'should resolve to configured root path' do
60
+ expect(paths.resolve_root).to be == '/var/app/root'
61
+ end
62
+ end
63
+
64
+ context 'with not configured path but loaded Rails app' do
65
+ before { module ::Rails; def self.root; Pathname.new 'app'; end end }
66
+ after { Object.send :remove_const, :Rails }
67
+
68
+ it 'should resolve to Rails root' do
69
+ expect(paths.resolve_root).to be == 'app'
70
+ end
71
+ end
72
+
73
+ context 'without configured path and rails root' do
74
+ it 'should resolve to current working dir' do
75
+ expect(paths.resolve_root).to be == Pathname.pwd.to_s
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe MultiDir do
4
+ before { MultiDir::Paths.reset_instance }
5
+ before { MultiDir::Paths.load_yaml 'spec/support/multi_dir.yml' }
6
+
7
+ it 'should resolve root path' do
8
+ expect(MultiDir.root.to_s).to be == '/usr/lib/myapp'
9
+ end
10
+
11
+ it 'should resolve bin path' do
12
+ expect(MultiDir.bin.to_s).to be == '/usr/bin'
13
+ end
14
+
15
+ it 'should resolve config path' do
16
+ expect(MultiDir.config.to_s).to be == '/etc/myapp'
17
+ end
18
+
19
+ it 'should resolve files path' do
20
+ expect(MultiDir.files.to_s).to be == '/var/files/myapp'
21
+ end
22
+
23
+ it 'should resolve tmp path' do
24
+ expect(MultiDir.tmp.to_s).to be == '/tmp/myapp'
25
+ end
26
+
27
+ it 'should resolve cache path' do
28
+ expect(MultiDir.cache.to_s).to be == '/var/cache/myapp'
29
+ end
30
+
31
+ it 'should resolve custom path' do
32
+ MultiDir::Paths.define :uploads, :in => :files
33
+ expect(MultiDir.uploads.to_s).to be == '/mnt/nfs/storage0/files'
34
+ end
35
+
36
+ it 'should resolve quick path' do
37
+ expect(MultiDir.files[:uploads].to_s).to be == '/mnt/nfs/storage0/files'
38
+ end
39
+
40
+ it 'should resolve not configured quick path' do
41
+ expect(MultiDir.files[:attachments].to_s).to be == '/var/files/myapp/attachments'
42
+ end
43
+
44
+ it 'should allow to glob path' do
45
+ expect(MultiDir[:spec_support2].glob('*.yml').sort).to be == [
46
+ File.expand_path('spec/support/multi_dir.yml'),
47
+ File.expand_path('spec/support/multi_dir_2.yml')
48
+ ]
49
+ end
50
+
51
+ it 'should allow to join path' do
52
+ expect(MultiDir.root.join('app', 'controllers').to_s).to be == '/usr/lib/myapp/app/controllers'
53
+ end
54
+ end
@@ -0,0 +1,28 @@
1
+ require 'multi_dir'
2
+ require 'coveralls'
3
+ Coveralls.wear! do
4
+ add_filter 'spec'
5
+ end
6
+
7
+ Dir[File.expand_path('spec/support/**/*.rb')].each {|f| require f}
8
+
9
+ RSpec.configure do |config|
10
+ # ## Mock Framework
11
+ #
12
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
13
+ #
14
+ # config.mock_with :mocha
15
+ # config.mock_with :flexmock
16
+ # config.mock_with :rr
17
+
18
+ # Run specs in random order to surface order dependencies. If you find an
19
+ # order dependency and want to debug it, you can fix the order by providing
20
+ # the seed, which is printed after each run.
21
+ # --seed 1234
22
+ config.order = 'random'
23
+
24
+ config.expect_with :rspec do |c|
25
+ # Only allow expect syntax
26
+ c.syntax = :expect
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ paths:
2
+ root: /usr/lib/myapp
3
+ bin: /usr/bin
4
+ tmp: /tmp/myapp
5
+ cache: /var/cache/myapp
6
+ config: /etc/myapp
7
+ files: /var/files/myapp
8
+ uploads: /mnt/nfs/storage0/files
9
+ spec_support: spec/support
10
+ spec_support2: ./spec/support
@@ -0,0 +1,2 @@
1
+ paths:
2
+ root: /var/lib/myapp2
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: multi_dir
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jan Graichen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Library for semantic path configuration to make developers and operators
84
+ happy.
85
+ email:
86
+ - jg@altimos.de
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - .gitignore
92
+ - .travis.yml
93
+ - Gemfile
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - lib/multi_dir.rb
98
+ - lib/multi_dir/pathname_patch.rb
99
+ - lib/multi_dir/paths.rb
100
+ - lib/multi_dir/version.rb
101
+ - multi_dir.gemspec
102
+ - spec/multi_dir/paths_spec.rb
103
+ - spec/multi_dir_spec.rb
104
+ - spec/spec_helper.rb
105
+ - spec/support/multi_dir.yml
106
+ - spec/support/multi_dir_2.yml
107
+ homepage: https://github.com/jgraichen/multi_dir
108
+ licenses:
109
+ - MIT
110
+ metadata: {}
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.0.3
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Library for semantic path configuration to make developers and operators
131
+ happy.
132
+ test_files:
133
+ - spec/multi_dir/paths_spec.rb
134
+ - spec/multi_dir_spec.rb
135
+ - spec/spec_helper.rb
136
+ - spec/support/multi_dir.yml
137
+ - spec/support/multi_dir_2.yml
138
+ has_rdoc: