tcravit_ruby_lib 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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ ## v 0.0.1, 2011-12-02
2
+
3
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in tcravit_ruby_lib.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ require 'rspec/core/rake_task'
2
+ require "bundler/gem_tasks"
3
+
4
+ RSpec::Core::RakeTask.new('spec')
@@ -0,0 +1,57 @@
1
+ require 'pathname'
2
+
3
+ module TcravitRubyLib #:nodoc:
4
+
5
+ # Utilities for locating a configuration directory within a tree.
6
+ #
7
+ # Unix utilities such as +git+ will look for the .git directory in a
8
+ # project by starting with the current directory and traversing upward
9
+ # until a .git folder is found. This allows local configuration in a
10
+ # subdirectory to override a global configuration file upstream.
11
+ #
12
+ # This module, inspired by a post on Practicing Ruby, implements that
13
+ # kind of traversal for Ruby applications.
14
+ module ConfigSearcher
15
+
16
+ # Locate a configuration folder by starting in the specified directory
17
+ # and traversing upward through the directory tree.
18
+ #
19
+ # === Options
20
+ #
21
+ # * +:start_in+ or +:start_dir+ - The directory in which to begin the
22
+ # search. Defaults to the current directory if unspecified or if the
23
+ # specified directory doesn't exist.
24
+ # * +:look_for+ or +:config_dir+ - The name of the configuration directory
25
+ # to look for. Defaults to +.config+ if unspecified.
26
+ # * +:only_container_dir: - If this option is true, the +:look_for+
27
+ # directory will not be returned as part of the path.
28
+ #
29
+ # === Returns
30
+ #
31
+ # If the configuration directory is found, its path will be returned as a
32
+ # string. Otherwise, an empty string will be returned. If the +start_in+
33
+ # directory doesn't exist, an exception will be raised.
34
+ def self.locate_config_dir(opts={})
35
+ start_dir = opts[:start_in] || opts[:start_dir] || "."
36
+ config_dir_name = opts[:look_for] || opts[:config_dir] || ".config"
37
+ only_container_dir = opts[:only_container_dir] || false
38
+
39
+ dir = Pathname.new(start_dir)
40
+ app_config_dir = dir + config_dir_name
41
+
42
+ if dir.children.include?(app_config_dir)
43
+ if only_container_dir
44
+ app_config_dir.to_s.split('/')[0..-2].join('/')
45
+ else
46
+ app_config_dir.expand_path.to_s
47
+ end
48
+ else
49
+ return nil if dir.expand_path.root?
50
+ # In the event the opts come from a hash that's used elsewhere, I don't
51
+ # want to modify it, so I make a copy and replace the :start_in value.
52
+ # I'm sure there's a better way to do this.
53
+ locate_config_dir(opts.reject{|k,v| k == :start_in}.merge({start_in: dir.parent.to_s}))
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,3 @@
1
+ module TcravitRubyLib
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "tcravit_ruby_lib/version"
2
+ require 'tcravit_ruby_lib/config_searcher'
3
+
4
+ module TcravitRubyLib # :nodoc:
5
+ end
@@ -0,0 +1,7 @@
1
+ require 'rspec'
2
+ require 'tcravit_ruby_lib'
3
+
4
+ RSpec.configure do |config|
5
+ config.color_enabled = true
6
+ config.formatter = 'documentation'
7
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+
4
+ describe "TcravitRubyLib" do
5
+ describe "ConfigSearcher" do
6
+
7
+ BASE_DIR = '/tmp/config_searcher_test'
8
+ DEEP_DIR = "#{BASE_DIR}/foo/bar/baz"
9
+ CONFIG_DIR = "#{BASE_DIR}/.config"
10
+
11
+ before(:all) do
12
+ FileUtils.mkdir_p DEEP_DIR
13
+ FileUtils.mkdir_p CONFIG_DIR
14
+ end
15
+
16
+ after(:all) do
17
+ FileUtils.remove_dir BASE_DIR, true
18
+ end
19
+
20
+ it "should successfully find a directory which exists" do
21
+ dir_path = TcravitRubyLib::ConfigSearcher.locate_config_dir(start_in: DEEP_DIR, look_for: ".config")
22
+ dir_path.to_s.should_not be_nil
23
+ dir_path.to_s.should == CONFIG_DIR
24
+ end
25
+
26
+ it "should not find a directory when one doesn't exist" do
27
+ dir_path = TcravitRubyLib::ConfigSearcher.locate_config_dir(start_in: DEEP_DIR, look_for: ".snausages")
28
+ dir_path.to_s.should == ""
29
+ end
30
+
31
+ it "should return the container dir when the only_container_dir option is provided" do
32
+ dir_path = TcravitRubyLib::ConfigSearcher.locate_config_dir(start_in: DEEP_DIR, look_for: ".config", only_container_dir: true)
33
+ dir_path.to_s.should == BASE_DIR
34
+ end
35
+
36
+ it "should raise an exception when the start_in directory doesn't exist" do
37
+ an_exception = nil
38
+
39
+ begin
40
+ dir_path = TcravitRubyLib::ConfigSearcher.locate_config_dir(start_in: "#{DEEP_DIR}xxxxxxx", look_for: ".snausages")
41
+ rescue => e
42
+ an_exception = e
43
+ end
44
+
45
+ an_exception.should_not be_nil
46
+ an_exception.message.should == "No such file or directory - #{DEEP_DIR}xxxxxxx"
47
+ end
48
+
49
+ it "should behave the same for the alternative option names" do
50
+ dir_path = TcravitRubyLib::ConfigSearcher.locate_config_dir(start_dir: DEEP_DIR, config_dir: ".config")
51
+ dir_path.to_s.should_not be_nil
52
+ dir_path.to_s.should == CONFIG_DIR
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "tcravit_ruby_lib/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "tcravit_ruby_lib"
7
+ s.version = TcravitRubyLib::VERSION
8
+ s.authors = ["Tammy Cravit"]
9
+ s.email = ["tcravit@taylored-software.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Random reusable ruby stuff}
12
+
13
+ s.rubyforge_project = "tcravit_ruby_lib"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency "rspec"
21
+ # s.add_runtime_dependency "rest-client"
22
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tcravit_ruby_lib
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tammy Cravit
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-02 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70131351967320 !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: *70131351967320
25
+ description:
26
+ email:
27
+ - tcravit@taylored-software.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - CHANGELOG.md
34
+ - Gemfile
35
+ - Rakefile
36
+ - lib/tcravit_ruby_lib.rb
37
+ - lib/tcravit_ruby_lib/config_searcher.rb
38
+ - lib/tcravit_ruby_lib/version.rb
39
+ - spec/spec_helper.rb
40
+ - spec/tcravit_ruby_lib/config_searcher_spec.rb
41
+ - tcravit_ruby_lib.gemspec
42
+ homepage: ''
43
+ licenses: []
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project: tcravit_ruby_lib
62
+ rubygems_version: 1.8.11
63
+ signing_key:
64
+ specification_version: 3
65
+ summary: Random reusable ruby stuff
66
+ test_files:
67
+ - spec/spec_helper.rb
68
+ - spec/tcravit_ruby_lib/config_searcher_spec.rb
69
+ has_rdoc: