pathological 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
- Pathological
2
- ============
1
+ # Pathological
3
2
 
4
3
  Pathological is a Ruby tool that provides a lightweight mechanism for managing your project's load path.
5
4
 
6
- The problem
7
- -----------
5
+ [![Build Status](https://secure.travis-ci.org/ooyala/pathological.png)](http://travis-ci.org/ooyala/pathological)
6
+
7
+ ## The problem
8
8
 
9
9
  When you're writing a gem, you don't have to worry about paths much, because Rubygems makes sure that `lib/`
10
10
  makes it into your path for you. On the other hand, if you have large Ruby projects which aren't organized as
@@ -22,8 +22,7 @@ gems, you may encounter some of the following problems:
22
22
 
23
23
  Pathological provides one way to manage these issues.
24
24
 
25
- Using pathological
26
- ------------------
25
+ ## Using pathological
27
26
 
28
27
  Getting started with pathological is easy. First, make a file called `Pathfile` at your project root:
29
28
 
@@ -51,8 +50,7 @@ Pathological (and of course you should have `gem "pathological"` in your `Gemfil
51
50
 
52
51
  `Pathfile`s should be kept in version control.
53
52
 
54
- Adding other paths to your load path
55
- ------------------------------------
53
+ ## Adding other paths to your load path
56
54
 
57
55
  To add more paths to your load path, just put the paths in your `Pathfile`. The paths are relative to the
58
56
  location of the `Pathfile`. The paths will be inserted in the order they appear; the project root itself will
@@ -84,15 +82,13 @@ require "common"
84
82
  # ...
85
83
  ```
86
84
 
87
- Installation
88
- ------------
85
+ ## Installation
89
86
 
90
87
  Pathological is packaged as a Rubygem and hence can be trivially installed with
91
88
 
92
89
  $ gem install pathological
93
90
 
94
- Advanced usage
95
- --------------
91
+ ## Advanced usage
96
92
 
97
93
  In some cases, you might want slightly different behavior. This customization is done through the use of
98
94
  custom modes. You may use any combination of modes.
@@ -139,11 +135,10 @@ A quicker way is also provided: if you only need to use one special mode, then t
139
135
  can require:
140
136
 
141
137
  ``` ruby
142
- require "pathological/bundlerize"
138
+ require "pathological/debug"
143
139
  ```
144
140
 
145
- Public API
146
- ----------
141
+ ## Public API
147
142
 
148
143
  For even more configurable custom integration with Pathological, a public API is provided. See the generated
149
144
  documentation for details on the following public methods:
@@ -154,8 +149,26 @@ documentation for details on the following public methods:
154
149
  * `Pathological#reset!`
155
150
  * `Pathological#copy_outside_paths!`
156
151
 
157
- Authors
158
- -------
152
+ ## Notes and gotchas
153
+
154
+ Pathological is intended as a replacement for manually munging the load path in your application when you want
155
+ to load code from other locations. If you can turn each of your dependencies into a gem and then use bundler
156
+ to manage the dependencies, **do that instead**.
157
+
158
+ Pathological does its best to figure out where the Pathfile it should use is located, based on the call stack.
159
+ For instance, if you run `/foo/bar.rb` and that requires Pathological, then it will search for `/foo/Pathfile`
160
+ and -- failing that -- `/Pathfile`. However, if `/foo/bar.rb` does not require Pathological, but loads a ruby
161
+ file in `/baz/quux.rb`, and *that* file requires Pathological, then Pathological searches for `/baz/Pathfile`
162
+ and then `/Pathfile`.
163
+
164
+ Any code loading situation which does not preserve a sane load path will be incompatible with Pathological.
165
+ For instance, if you `eval()` some code that requires Pathological, Pathological has no way of telling where
166
+ that code originally lived, and will probably behave in an unexpected way. One place this commonly occurs is
167
+ with rack webservers (e.g., Rackup, Unicorn) that load a `config.ru`. This file is `instance_eval`ed and so
168
+ requiring Pathological from your `config.ru` will not work as expected. In these cases, require Pathological
169
+ in your app directly.
170
+
171
+ ## Authors
159
172
 
160
173
  Pathological was written by the following Ooyala engineers:
161
174
 
@@ -164,25 +177,21 @@ Pathological was written by the following Ooyala engineers:
164
177
  * [Sami Abu-El-Haija](mailto:sami@ooyala.com)
165
178
  * [Evan Chan](mailto:ev@ooyala.com)
166
179
 
167
- Credits
168
- -------
180
+ ## Credits
169
181
 
170
182
  * Harry Robertson for the idea to *not* use a dot-prefixed configuration file
171
183
 
172
- Metadata
173
- --------
184
+ ## Metadata
174
185
 
175
186
  * [Hosted on Github](https://github.com/ooyala/pathological)
176
187
  * [Rubygems page](https://rubygems.org/gems/pathological)
177
188
  * [Documentation](http://rubydoc.info/github/ooyala/pathological/master/frames)
178
189
 
179
- Contributing
180
- ------------
190
+ ## Contributing
181
191
 
182
192
  If you would like to commit a patch, great! Just do the usual github pull request stuff and we'll check it
183
193
  out[.](http://www.randomkittengenerator.com/)
184
194
 
185
- License
186
- -------
195
+ ## License
187
196
 
188
197
  Pathological is licensed under the MIT license.
data/Rakefile CHANGED
@@ -12,3 +12,4 @@ namespace :test do
12
12
  end
13
13
  end
14
14
 
15
+ task :default => ["test:units"]
@@ -234,17 +234,20 @@ module Pathological
234
234
 
235
235
  # Searches the call stack for the file that required pathological. If no file can be found, falls back to
236
236
  # the currently executing file ($0). This handles the case where the app was launched by another executable
237
- # (rake, thin, rackup, etc.)
237
+ # (rake, thin, etc.)
238
238
  #
239
239
  # @return [String] name of file requiring pathological, or the currently executing file.
240
240
  def self.requiring_filename
241
+ # Match paths like .../gems/pathological-0.2.2.1/lib/pathological/base.rb and also
242
+ # .../gems/pathological-0.2.2.1/lib/pathological.rb
243
+ pathological_file_pattern = %r{/pathological(/[^/]+|)\.rb}
241
244
  requiring_file = Kernel.caller.find do |stack_line|
242
245
  if RUBY_VERSION.start_with?("1.9")
243
246
  # In Ruby 1.9, top-level files will have the string "top (required)" included in the stack listing.
244
- stack_line.include?("top (required)") && !stack_line.include?("pathological.rb")
247
+ stack_line.include?("top (required)") && stack_line !~ pathological_file_pattern
245
248
  else
246
249
  # In Ruby 1.8, top-level files are listed with their relative path and without a line number.
247
- !stack_line.match(/:\d+:in/) && !stack_line.include?("pathological.rb")
250
+ stack_line !~ /:\d+:in/ && stack_line !~ pathological_file_pattern
248
251
  end
249
252
  end
250
253
  requiring_file ? requiring_file.match(/(.+):\d+/)[1] : $0 rescue $0
@@ -1,3 +1,3 @@
1
1
  module Pathological
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
@@ -102,7 +102,7 @@ module Pathological
102
102
 
103
103
  context "#requiring_filename" do
104
104
  setup do
105
- @full_stacktrace = %Q{
105
+ @full_19_stacktrace = %Q{
106
106
  /Users/test/ruby/gems/1.9.1/gems/pathological-0.2.2.1/lib/pathological/base.rb:61:in `find_pathfile'
107
107
  /Users/test/gems/pathological-0.2.2.1/lib/pathological/base.rb:36:in `find_load_paths'
108
108
  /Users/test/gems/pathological-0.2.2.1/lib/pathological/base.rb:15:in `add_paths!'
@@ -112,15 +112,28 @@ module Pathological
112
112
  /Users/test/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
113
113
  /Users/test/repos/pathological/test/rackup/app.rb:1:in `<top (required)>'
114
114
  /Users/test/.rubies/1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
115
- }.split("\n")
115
+ }.split("\n").reject(&:empty?)
116
+ @full_18_stacktrace = %Q{
117
+ /Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:61:in `find_pathfile'
118
+ /Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:36:in `find_load_paths'
119
+ /Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological/base.rb:15:in `add_paths!'
120
+ /Users/test/ruby/gems/1.8/gems/pathological-0.2.5/lib/pathological.rb:3
121
+ /Users/test/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `gem_original_require'
122
+ /Users/test/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `require'
123
+ app.rb:2
124
+ }.split("\n").reject(&:empty?)
116
125
  @bad_stacktrace = %Q{
117
126
  /Users/test/repos/pathological/test/rackup/app.rb !!! `<top (required)>'
118
- }.split("\n")
127
+ }.split("\n").reject(&:empty?)
119
128
  @empty_stacktrace = []
120
129
  end
121
130
 
122
131
  should "find root file from a stacktrace" do
123
- stub(Kernel).caller { @full_stacktrace }
132
+ if RUBY_VERSION.start_with?("1.9")
133
+ stub(Kernel).caller { @full_19_stacktrace }
134
+ else
135
+ stub(Kernel).caller { @full_18_stacktrace }
136
+ end
124
137
  assert_equal "app.rb", File.basename(Pathological.requiring_filename)
125
138
  end
126
139
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pathological
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-09-04 00:00:00.000000000Z
14
+ date: 2012-09-18 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rr
18
- requirement: &27117160 !ruby/object:Gem::Requirement
18
+ requirement: &19178940 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: 1.0.3
24
24
  type: :development
25
25
  prerelease: false
26
- version_requirements: *27117160
26
+ version_requirements: *19178940
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: scope
29
- requirement: &27091120 !ruby/object:Gem::Requirement
29
+ requirement: &19178380 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: 0.2.3
35
35
  type: :development
36
36
  prerelease: false
37
- version_requirements: *27091120
37
+ version_requirements: *19178380
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: fakefs
40
- requirement: &27090740 !ruby/object:Gem::Requirement
40
+ requirement: &19177920 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ! '>='
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: '0'
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *27090740
48
+ version_requirements: *19177920
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rake
51
- requirement: &27090280 !ruby/object:Gem::Requirement
51
+ requirement: &19171820 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ! '>='
@@ -56,7 +56,7 @@ dependencies:
56
56
  version: '0'
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *27090280
59
+ version_requirements: *19171820
60
60
  description: ! " Pathological provides a way to manage a project's require paths
61
61
  by using a small config file that\n indicates all directories to include in the
62
62
  load path.\n"
@@ -68,9 +68,9 @@ executables: []
68
68
  extensions: []
69
69
  extra_rdoc_files: []
70
70
  files:
71
+ - .travis.yml
71
72
  - .yardopts
72
73
  - Gemfile
73
- - Gemfile.lock
74
74
  - LICENSE
75
75
  - README.md
76
76
  - Rakefile
@@ -1,24 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- pathological (0.2.5)
5
-
6
- GEM
7
- remote: http://rubygems.org/
8
- specs:
9
- fakefs (0.4.0)
10
- minitest (2.5.1)
11
- rake (0.9.2.2)
12
- rr (1.0.3)
13
- scope (0.2.3)
14
- minitest
15
-
16
- PLATFORMS
17
- ruby
18
-
19
- DEPENDENCIES
20
- fakefs
21
- pathological!
22
- rake
23
- rr (>= 1.0.3)
24
- scope (>= 0.2.3)