load_path 0.0.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTg3NWQ4MDBjNzYwY2ZiNjU0ZTE3YWJmMmUwODE2MDQzNDBhOGMxOA==
5
+ data.tar.gz: !binary |-
6
+ MjJhOGZkMDJiNWE4MmExZjY5NDlmZWRkNGFmMTdhMzFlNDNiNTRlOA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MmUyNjYxNGQxYzI5MGY5YzRjZDA5N2RiYjk5Njc2MzI5ZjQ5NTNlNDBjZjVk
10
+ NzgyYzZhMjIxYjUzODlmZTUxODk1MjgxMGI5MWFiYjE1YzRjZjFhZjRmNmIw
11
+ ODMwZThiOWRhMTAxZDc3Yzc1MDRiMjcxNjk2MGU1NGQ5MDAxYmY=
12
+ data.tar.gz: !binary |-
13
+ ZTA5OGNiYmVjYWZkYzFhYzQwOGFhMWE1ZTgyZTUzZWQwNDk3M2QyZTJkMTJk
14
+ YTM4N2QyMjRmNGQ3NWZjNWJlM2MyMTNjZDVkNTA0OWViODE2YjI3MjU5MzJj
15
+ YmUzZWMzNjYxYWU0OGU2ZmM4Njg1NDQyN2ZhODc2ZWRhNjE1MDY=
data/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ #### 0.0.1
2
+ * Ability to configure load path and require files
3
+
4
+ #### 0.1.0
5
+ * Adds a `PathHelper` and `PathBuilder` class for constructing paths.
6
+
7
+ #### 0.2.0
8
+ * Adds default option of blank to file_path. The way the calling class is inferred is changed and alot of bug fixes gone into the configure block.
9
+
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # <img src="https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRb1vaCQj_2gIgEdX5Fly1vMjfbFKYkuLW1P5c4-3dcFyQ3OqgZoTiOto_8" height="50"> Load Path
2
2
 
3
- This gem is written to make it easy to configure the load path in Ruby files. Simple use a *configure* block to setup your load path without ugly code to interact with the file system.
3
+ This gem is written to make it easy to configure the load path in Ruby files. Simple use a *configure* block to setup your load path without ugly code to interact with the file system.
4
4
 
5
5
  ===================
6
6
 
@@ -8,45 +8,50 @@ This gem is written to make it easy to configure the load path in Ruby files. Si
8
8
 
9
9
  For questions and to report bugs, <nayyara.samuel@opower.com>. For contributing to code, send a pull request with a detailed description of changes to this repo.
10
10
 
11
- ### Installing
11
+ ### Building
12
12
 
13
13
  To build the gem use the rake commands for gem tasks. To install:
14
14
 
15
15
  rake install
16
16
 
17
17
  ### Usage
18
- If you have been programming Ruby you will notice that `require_relative` is not encouraged.
19
- The alternative is to setup your load path with code that looks something like the following:
18
+ If you have been programming Ruby you will notice that `require_relative` is not encouraged.
19
+ The alternative is to setup your load path with code that looks something like the following:
20
20
 
21
21
  ```
22
22
  this_dir = File.dirname(__FILE__)
23
23
 
24
- #Add the folder lib 2 levels above
24
+ #Add the folder `lib` 2 levels above
25
25
  lib_dir = File.join(this_dir, '..', '..', 'lib')
26
26
  $: << lib_dir
27
27
 
28
- #Add the folder utils to load path
28
+ #Add the folder `utils` to load path
29
29
  utils_dir = File.join(this_dir, '..', 'utils')
30
30
  $: << utils_dir
31
31
 
32
- #Add the folder others under this directory to load path
32
+ #Add the folder `others` under this directory to load path
33
33
  others_dir = File.join(this_dir, 'others')
34
34
  $: << others_dir
35
35
 
36
+ #Add the folder `bin` on the same level as `lib` folder
37
+ bin_dir = File.join(this_dir, '..', '..', 'bin')
38
+
36
39
  ```
37
40
 
38
- And so forth. You can make the code look nicer but the line `$: << some_directory` looks ugly. With **LoadPath** your code looks something like this:
41
+ And so forth. You can make the code look nicer but the line `$: << some_directory` looks ugly. With **LoadPath** your code looks something like this:
39
42
 
40
43
  ```
41
- require 'load_path`
44
+ require 'load_path'
42
45
 
43
- LoadPath.configure do
46
+ LoadPath.configure do
44
47
  add parent_directory('lib', up: 2)
45
48
  add sibling_directory('utils')
46
49
  add child_directory('others')
50
+ add path_buider { parent_directory('lib', up: 2).sibling_directory('bin') }
47
51
  end
48
52
  ```
49
-
53
+ Notice the use of the `path_builder` block. This is required if you wish you chain paths together.
54
+
50
55
  You can then proceed to require the files with `require` instead of `require_relative` as normal. **NOTE**: You must first have the desired directory on the load path before requiring files from it.
51
56
 
52
57
  The configure block also lets you require your files in bulk. For example to require all files in the lib folder 2 levels above, you would write code like this:
@@ -55,11 +60,13 @@ The configure block also lets you require your files in bulk. For example to req
55
60
  Dir.glob(File.join(this_dir, '..', '..', 'lib', '*.rb')) do |file|
56
61
  require File.basename(file)
57
62
  end
58
- ```
63
+ ```
59
64
 
60
65
  Which can be made cleaner with:
61
66
 
62
67
  ```
68
+ require 'load_path'
69
+
63
70
  LoadPath.configure do
64
71
  add parent_directory('lib', up: 2)
65
72
  add sibling_directory('utils')
@@ -69,8 +76,19 @@ LoadPath.configure do
69
76
  require_all sibling_directory('utils')
70
77
  end
71
78
  ```
79
+
80
+ There is also a `PathBuilder` class to help you construct paths in your code. Here is how the class can be used:
81
+
82
+ ```
83
+ require 'path_builder'
84
+
85
+ path_builder = LoadPath::PathBuilder.new('.')
86
+ config_file = path_builder.child_directory('config').file_path('config.yml')
87
+
88
+ ```
89
+
72
90
  ### Examples
73
91
 
74
- See also the example under Rspec tests with directory structure:
92
+ See also the example under tests directory. The following file system structure is used by the test:
75
93
 
76
- <img src="https://github.va.opower.it/nayyara-samuel/load-path/raw/master/img/test_case.png" height="250">
94
+ <img src="https://github.com/nayyara84/load-path/blob/master/img/test_case.png?raw=true" height="250">
data/lib/load_path.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'path_builder'
1
2
  #
2
3
  # This module makes the setting up of the load path for Ruby projects easy
3
4
  # by the use of a simple configure() block. Also your statements to setup the load path
@@ -20,7 +21,7 @@ module LoadPath
20
21
  # Construct the file location/path of the file that is using this module
21
22
  def self.calling_class_path(call_stack)
22
23
  me = __FILE__
23
- configure_call_index = call_stack.rindex { |call| call =~ /#{me}.*\:in.*configure/ }
24
+ configure_call_index = call_stack.index { |call| call =~ /#{me}.*\:in.*configure/ }
24
25
  external_call = call_stack[configure_call_index + 1]
25
26
  begin
26
27
  external_file_name = (external_call.match /(.*):\d+:in/)[1]
@@ -32,18 +33,12 @@ module LoadPath
32
33
  end
33
34
 
34
35
  # Helper class to setup the load path
35
- class LoadPathSetup
36
- attr_accessor :root_dir
37
-
38
- # Construct with a root
39
- def initialize(root_dir)
40
- @root_dir = root_dir
41
- end
36
+ class LoadPathSetup < PathHelper
42
37
 
43
38
  # Require all files matching the pattern in the directory
44
39
  def require_files(directory, file_pattern='*.rb')
45
40
  Dir.glob(File.join(directory, file_pattern)) do |file|
46
- require File.basename(file)
41
+ require File.basename(file.to_s)
47
42
  end
48
43
  end
49
44
 
@@ -52,21 +47,12 @@ module LoadPath
52
47
  $: << directory
53
48
  end
54
49
 
55
- # Construct a parent relative to the root by name
56
- def parent_directory(directory_name, levels_up={up: 1})
57
- levels_up = levels_up[:up].to_i + 1
58
- File.join(root_dir, levels_up.times.map { |_| '..' }, directory_name)
59
- end
60
-
61
- # Construct a child relative to the root by name
62
- def child_directory(*directory_list)
63
- File.join(root_dir, directory_list)
64
- end
65
-
66
- # Construct a sibling relative to the root by name
67
- def sibling_directory(directory_name)
68
- parent_directory(directory_name, up: 0)
50
+ def path_builder(&block)
51
+ builder = LoadPath::PathBuilder.new(self.file_path)
52
+ builder.instance_eval(&block)
53
+ builder.file_path
69
54
  end
70
55
  end
71
56
 
72
- end
57
+ end
58
+
@@ -0,0 +1,75 @@
1
+ #
2
+ # A helper for building path on the file system
3
+ # Author: Nayyara Samuel (nayyara.samuel@opower.com)
4
+ #
5
+ module LoadPath
6
+ class PathHelper
7
+ attr_accessor :root_dir
8
+
9
+ # Construct with a root
10
+ def initialize(root_dir, expand_path=false)
11
+ if (expand_path)
12
+ @root_dir = File.expand_path(root_dir)
13
+ else
14
+ @root_dir = root_dir
15
+ end
16
+ end
17
+
18
+ # Construct a parent relative to the root by name
19
+ def parent_directory(directory_name, levels_up={up: 1})
20
+ levels_up = levels_up[:up].to_i + 1
21
+ File.join(root_dir, levels_up.times.map { |_| '..' }, directory_name)
22
+ end
23
+
24
+ # Construct a child relative to the root by name
25
+ def child_directory(*directory_list)
26
+ File.join(root_dir, directory_list)
27
+ end
28
+
29
+ # Construct a sibling relative to the root by name
30
+ def sibling_directory(directory_name)
31
+ parent_directory(directory_name, up: 0)
32
+ end
33
+
34
+ def file_path(file_name=nil)
35
+ if (file_name)
36
+ File.join(root_dir, file_name)
37
+ else
38
+ root_dir
39
+ end
40
+ end
41
+ end
42
+
43
+ # Builder for path helper
44
+ class PathBuilder
45
+ attr_accessor :path_helper
46
+
47
+ def initialize(root_dir, expand_path=false)
48
+ @path_helper = PathHelper.new(root_dir, expand_path)
49
+ end
50
+
51
+ def parent_directory(*args)
52
+ @path_helper = PathHelper.new(@path_helper.parent_directory(*args))
53
+ self
54
+ end
55
+
56
+ def child_directory(*args)
57
+ @path_helper = PathHelper.new(@path_helper.child_directory(*args))
58
+ self
59
+ end
60
+
61
+ def sibling_directory(*args)
62
+ @path_helper = PathHelper.new(@path_helper.sibling_directory(*args))
63
+ self
64
+ end
65
+
66
+ def file_path(file_name=nil)
67
+ @path_helper.file_path(file_name)
68
+ end
69
+
70
+ def to_s
71
+ file_path
72
+ end
73
+ end
74
+
75
+ end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: load_path
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nayyara Samuel
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-14 00:00:00.000000000 Z
11
+ date: 2013-09-15 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description:
15
14
  email: nayyara.samuel@opower.com
@@ -19,11 +18,14 @@ extra_rdoc_files:
19
18
  - README.md
20
19
  files:
21
20
  - lib/load_path.rb
21
+ - lib/path_builder.rb
22
+ - CHANGELOG.md
22
23
  - Gemfile
23
24
  - Rakefile
24
25
  - README.md
25
26
  homepage: https://github.com/nayyara84/load-path
26
27
  licenses: []
28
+ metadata: {}
27
29
  post_install_message:
28
30
  rdoc_options:
29
31
  - --title
@@ -35,21 +37,19 @@ require_paths:
35
37
  - lib
36
38
  - lib
37
39
  required_ruby_version: !ruby/object:Gem::Requirement
38
- none: false
39
40
  requirements:
40
41
  - - ! '>='
41
42
  - !ruby/object:Gem::Version
42
43
  version: '0'
43
44
  required_rubygems_version: !ruby/object:Gem::Requirement
44
- none: false
45
45
  requirements:
46
46
  - - ! '>='
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0'
49
49
  requirements: []
50
50
  rubyforge_project:
51
- rubygems_version: 1.8.24
51
+ rubygems_version: 2.1.3
52
52
  signing_key:
53
- specification_version: 3
53
+ specification_version: 4
54
54
  summary: Cleaner way to setup your load path
55
55
  test_files: []