loader 2.1.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ad3783bf1820c1767808c4f18415a836a3886d1
4
- data.tar.gz: e249da6f02da8f4ad0fd54b9d56b5856c6687a06
3
+ metadata.gz: 02599efb933b64f6bd6b100181f487c1dc7bf78d
4
+ data.tar.gz: ddd99341ee26528275ab5e833e86557f1c4f28a2
5
5
  SHA512:
6
- metadata.gz: 985dae6027aec5cd31181e046ccec617a9365e2415af9554b47b2644b8b6344e106968a13ad0c374864b3f803778e784834e55290cc7f38c94b2580e39b2e4b1
7
- data.tar.gz: 55d8ebc7f30b4814ae6ea36d361069f6dc230f99720654bb791dcad77640c77b59e5df2bce938612fc101df005eba146fbdef8955d9e7cff7a792c50b55b4c66
6
+ metadata.gz: fc9b57c5be9f33c5655293f1126233583fca686d63729bd42c5581c8c1b084dfa743bb46605fcd64e4678c74ebe47dddad2f45ab50646121c54c9211052e8d8f
7
+ data.tar.gz: 530795f8061e254d6507eb4de1d0d086e818e769849ddd80cedaee4799a93aaf029f43548f6495f48d2c4e3143f7dfaef72f2c17ce0523784828bce1336247d7
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.0
1
+ 2.2.1
@@ -1,8 +1,8 @@
1
1
  #encoding: UTF-8
2
-
3
2
  module Loader
4
3
  end
5
4
 
6
5
  require 'loader/meta'
6
+ require 'loader/helpers'
7
7
  require 'loader/require'
8
8
  require 'loader/autoload'
@@ -1,95 +1,7 @@
1
- module Loader
2
-
3
- module AutoLoad
4
- module Support
5
- class << self
6
-
7
- def pwd
8
- if !!ENV['BUNDLE_GEMFILE']
9
- ENV['BUNDLE_GEMFILE'].split(File::Separator)[0..-2].join(File::Separator)
10
- elsif defined?(Rails) && Rails.respond_to?(:root) && Rails.root
11
- Rails.root.to_s
12
- else
13
- Dir.pwd
14
- end
15
- end
16
-
17
- def try_load_by(caller_class,name)
18
- levels = generate_levels(caller_class, name)
19
- [
20
- nil,
21
- 'lib',
22
- File.join('{application,app,api}','*'),
23
- File.join('**','*')
24
- ].each do |folder|
25
- return if load_by_folder(levels,folder)
26
- end
27
- end
28
-
29
- def load_by_folder(levels,folder=nil)
30
-
31
- desc_ary(levels.map{|str| File.join(*[pwd,folder,"#{underscore(str)}.rb"].compact)}).each do |path_constructor|
32
- desc_ary(Dir.glob(path_constructor)).each do |path|
33
- return true if File.exist?(path) && require(path)
34
- end
35
- end
36
-
37
- return false
38
-
39
- end
40
-
41
- def desc_ary(array)
42
- array.sort{|a,b| b.length <=> a.length }
43
- end
44
-
45
- def generate_levels(klass, name)
46
- levels = klass.to_s.split('::').reduce([]) { |m, c|
47
- m << [(last_obj = m.last), c].compact.join('::');m
48
- }.map { |str| [str, name].join('::') }
49
- levels.unshift(name.to_s)
50
- return levels
51
- end
52
-
53
- def try_fetch_constant(caller_class, name)
54
- levels = Support.generate_levels(caller_class, name).map { |str| Regexp.escape(str) }
55
- ObjectSpace.each_object(Module) { |obj|
56
- if !!(obj.to_s =~ /^(#{levels.join('|')})$/)
57
- return obj
58
- end
59
- };nil
60
- end
61
-
62
- # Based on ActiveSupport, removed inflections.
63
- # https://github.com/rails/rails/blob/v4.1.0.rc1/activesupport/lib/active_support/inflector/methods.rb
64
- def underscore(camel_cased_word)
65
- word = camel_cased_word.to_s.gsub('::', '/')
66
- word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
67
- word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
68
- word.tr!("-", "_")
69
- word.downcase!
70
- word
71
- end
72
-
73
- end
74
- end
75
-
76
- def const_missing(name)
77
-
78
- Support.try_load_by(self,name)
79
- constant = Support.try_fetch_constant(self, name)
80
-
81
- if constant
82
- return constant
83
- else
84
- super
85
- end
86
-
87
- end
88
-
89
- end
90
-
91
- def self.autoload
92
- ::Module.__send__(:prepend,Loader::AutoLoad)
93
- end
94
-
1
+ require 'loader'
2
+ module Loader::AutoLoad
3
+ require 'loader/autoload/module_patch'
4
+ require 'loader/autoload/loader_patch'
5
+ require 'loader/autoload/fetcher'
6
+ Loader.__send__(:extend,Loader::AutoLoad::LoaderPatch)
95
7
  end
@@ -0,0 +1,55 @@
1
+ module Loader::AutoLoad::Fetcher
2
+
3
+ extend self
4
+ extend ::Loader::Helpers
5
+
6
+ def try_load_by(caller_class, name)
7
+ levels = generate_levels(caller_class, name)
8
+ [
9
+ nil,
10
+ 'lib',
11
+ File.join('{application,app,api}', '*'),
12
+ File.join('**', '*')
13
+ ].each do |folder|
14
+ return if load_by_folder(levels, folder)
15
+ end
16
+ end
17
+
18
+ def load_by_folder(levels, folder=nil)
19
+
20
+ Loader.project_folders.each do |project_folder|
21
+
22
+ desc_ary(levels.map { |str| File.join(*[project_folder, folder, "#{underscore(str)}.rb"].compact) }).each do |path_constructor|
23
+ desc_ary(Dir.glob(path_constructor)).each do |path|
24
+ return true if File.exist?(path) && require(path)
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ return false
31
+
32
+ end
33
+
34
+ def desc_ary(array)
35
+ array.sort { |a, b| b.length <=> a.length }
36
+ end
37
+
38
+ def generate_levels(klass, name)
39
+ levels = klass.to_s.split('::').reduce([]) { |m, c|
40
+ m << [(last_obj = m.last), c].compact.join('::'); m
41
+ }.map { |str| [str, name].join('::') }
42
+ levels.unshift(name.to_s)
43
+ return levels
44
+ end
45
+
46
+ def try_fetch_constant(caller_class, name)
47
+ levels = generate_levels(caller_class, name).map { |str| Regexp.escape(str) }
48
+ ObjectSpace.each_object(Module) { |obj|
49
+ if !!(obj.to_s =~ /^(#{levels.join('|')})$/)
50
+ return obj
51
+ end
52
+ }; nil
53
+ end
54
+
55
+ end
@@ -0,0 +1,12 @@
1
+ module Loader::AutoLoad::LoaderPatch
2
+
3
+ def project_folders
4
+ @project_folders ||= []
5
+ end
6
+
7
+ def autoload(project_folder=Loader::Helpers.pwd)
8
+ project_folders.push(project_folder)
9
+ ::Module.__send__(:prepend, Loader::AutoLoad::ModulePatch)
10
+ end
11
+
12
+ end
@@ -0,0 +1,10 @@
1
+ module Loader::AutoLoad::ModulePatch
2
+
3
+ def const_missing(name)
4
+ c = Loader::AutoLoad::Fetcher
5
+ c.try_load_by(self,name)
6
+ constant = c.try_fetch_constant(self, name)
7
+ constant ? constant : super
8
+ end
9
+
10
+ end
@@ -0,0 +1,27 @@
1
+ require 'loader'
2
+ module Loader::Helpers
3
+
4
+ extend self
5
+
6
+ def pwd
7
+ if !!ENV['BUNDLE_GEMFILE']
8
+ ENV['BUNDLE_GEMFILE'].split(File::Separator)[0..-2].join(File::Separator)
9
+ elsif defined?(Rails) && Rails.respond_to?(:root) && Rails.root
10
+ Rails.root.to_s
11
+ else
12
+ Dir.pwd
13
+ end
14
+ end
15
+
16
+ # Based on ActiveSupport, removed inflections.
17
+ # https://github.com/rails/rails/blob/v4.1.0.rc1/activesupport/lib/active_support/inflector/methods.rb
18
+ def underscore(camel_cased_word)
19
+ word = camel_cased_word.to_s.gsub('::', '/')
20
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
21
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
22
+ word.tr!("-", "_")
23
+ word.downcase!
24
+ word
25
+ end
26
+
27
+ end
@@ -1,76 +1,74 @@
1
- module Loader
1
+ require 'loader'
2
+ module Loader::ObjectExtension
2
3
 
3
- module ObjectRequireEXT
4
+ # require sender relative directory's files
5
+ # return the directory and the sub directories file names (rb/ru)
6
+ def require_relative_directory(*args)
4
7
 
5
- # require sender relative directory's files
6
- # return the directory and the sub directories file names (rb/ru)
7
- def require_relative_directory *args
8
+ folder= args.select { |e| (e.class <= ::String) }.join(File::Separator)
9
+ opts= {}
10
+ args.select { |e| (e.class <= ::Hash) }.each { |hash| hash.each { |sk, sv| opts[sk]=sv } }
11
+ args.select! { |e| (e.class <= ::Symbol) }
8
12
 
9
- folder= args.select{|e|(e.class <= ::String)}.join(File::Separator)
10
- opts= {}
11
- args.select{|e|(e.class <= ::Hash)}.each{|hash| hash.each{|sk,sv| opts[sk]=sv } }
12
- args.select!{|e|(e.class <= ::Symbol)}
13
+ opts[:recursive] ||= opts.delete(:r) || opts.delete(:R) || !([:recursive, :r, :R,].select { |e| args.include?(e) }.empty?)
14
+ opts[:recursive] = !!opts[:recursive]
13
15
 
14
- opts[:recursive] ||= opts.delete(:r) || opts.delete(:R) || !([:recursive,:r, :R,].select{|e| args.include?(e)}.empty?)
15
- opts[:recursive] = !!opts[:recursive]
16
+ # inclusion and exclusion
17
+ [[:exclude, [:ex, :e, :EX, :E]], [:include, [:in, :i, :IN, :I]]].each do |name, aliases|
16
18
 
17
- # inclusion and exclusion
18
- [[:exclude,[:ex,:e,:EX,:E]],[:include,[:in,:i,:IN,:I]]].each do |name,aliases|
19
-
20
- aliases.each do |one_alias|
21
- opts[name] ||= opts.delete(one_alias)
22
- end
19
+ aliases.each do |one_alias|
20
+ opts[name] ||= opts.delete(one_alias)
21
+ end
23
22
 
24
- opts[name] ||= []
23
+ opts[name] ||= []
25
24
 
26
- # should be REGEXP collection
27
- opts[name] = [*opts[name]].map{|e| !(e.class <= ::Regexp) ? Regexp.new(e.to_s) : e }
25
+ # should be REGEXP collection
26
+ opts[name] = [*opts[name]].map { |e| !(e.class <= ::Regexp) ? Regexp.new(e.to_s) : e }
28
27
 
29
- end
28
+ end
30
29
 
31
30
 
32
- opts[:caller_folder] ||= opts.delete(:f) || opts.delete(:folder) || ::Loader.caller_folder
31
+ opts[:caller_folder] ||= opts.delete(:f) || opts.delete(:folder) || ::Loader.caller_folder
33
32
 
34
- unless folder.to_s[0] == File::Separator
35
- folder= [opts[:caller_folder],folder]
36
- end
33
+ unless folder.to_s[0] == File::Separator
34
+ folder= [opts[:caller_folder], folder]
35
+ end
37
36
 
38
- #> recursive option
39
- begin
40
- path_parts= [*folder]
41
- if opts[:recursive]
42
- path_parts.push("**")
43
- end
44
- path_parts.push("*.{rb,ru}")
37
+ #> recursive option
38
+ begin
39
+ path_parts= [*folder]
40
+ if opts[:recursive]
41
+ path_parts.push("**")
45
42
  end
43
+ path_parts.push("*.{rb,ru}")
44
+ end
46
45
 
47
- return Dir.glob(File.join(*path_parts)).sort_by{|e| e.split(File::Separator).size }.map { |one_path|
46
+ return Dir.glob(File.join(*path_parts)).sort_by { |e| e.split(File::Separator).size }.map { |one_path|
48
47
 
49
- next unless opts[:exclude].select{|regex| one_path =~ regex ? true : false }.empty?
48
+ next unless opts[:exclude].select { |regex| one_path =~ regex ? true : false }.empty?
50
49
 
51
- if opts[:include].empty?
52
- require(one_path);one_path
53
- else
54
- opts[:include].each do |regex|
55
- if one_path =~ regex
56
- require(one_path);one_path
57
- end
50
+ if opts[:include].empty?
51
+ require(one_path); one_path
52
+ else
53
+ opts[:include].each do |regex|
54
+ if one_path =~ regex
55
+ require(one_path); one_path
58
56
  end
59
57
  end
58
+ end
60
59
 
61
- }.compact
62
-
63
- end
60
+ }.compact
64
61
 
65
- alias :require_directory :require_relative_directory
62
+ end
66
63
 
67
- def require_relative_directory_r *args
68
- require_relative_directory *args, r: true, f: Loader.caller_folder
69
- end
70
- alias :require_directory_r :require_relative_directory_r
64
+ alias :require_directory :require_relative_directory
71
65
 
66
+ def require_relative_directory_r(*args)
67
+ require_relative_directory *args, r: true, f: Loader.caller_folder
72
68
  end
73
69
 
70
+ alias :require_directory_r :require_relative_directory_r
71
+
74
72
  end
75
73
 
76
- Object.__send__ :include, Loader::ObjectRequireEXT
74
+ Object.__send__ :include, Loader::ObjectExtension
@@ -20,4 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.require_paths = ['lib']
22
22
 
23
+ spec.add_development_dependency('rspec')
24
+ spec.add_development_dependency('rake')
25
+
23
26
  end
@@ -0,0 +1,51 @@
1
+ require_relative '../spec_helper'
2
+ describe Loader::Helpers do
3
+
4
+ let(:project_folder) { 'Path/To/Project/Folder' }
5
+ subject { Loader::Helpers }
6
+
7
+ describe '#pwd' do
8
+
9
+ before do
10
+ allow(ENV).to receive(:[]).with('BUNDLE_GEMFILE').and_return(nil)
11
+ end
12
+
13
+ context 'bundler envernioment variable set' do
14
+
15
+ before do
16
+ allow(ENV).to receive(:[]).with('BUNDLE_GEMFILE').and_return(File.join(project_folder,'Gemfile'))
17
+ end
18
+
19
+ it 'should return the project root folder by bundler gemfile env' do
20
+ expect(subject.pwd).to eq project_folder
21
+ end
22
+
23
+ end
24
+
25
+ context 'Rails is present and the root methot return not nil object' do
26
+
27
+ let(:rails) { double('rails', root: project_folder) }
28
+ before { stub_const('Rails', rails) }
29
+
30
+ it 'should fetch rails root path' do
31
+ expect(subject.pwd).to eq project_folder
32
+ end
33
+
34
+ end
35
+
36
+ context 'when everything fails, fall back use build in Dir module' do
37
+
38
+ it 'should use dir pwd on fallback' do
39
+
40
+ expect(Dir).to receive(:pwd).and_return(project_folder)
41
+ expect(subject.pwd).to eq project_folder
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+
49
+
50
+
51
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift(File.join(__dir__,'..','lib'))
2
+
3
+ require 'rspec'
4
+ require 'loader'
@@ -0,0 +1,7 @@
1
+ $LOAD_PATH.unshift(File.join(__dir__,'..','lib'))
2
+ require 'loader'
3
+
4
+ Loader.autoload __dir__
5
+
6
+ p Cat
7
+
@@ -2,7 +2,7 @@ require_relative 'helper'
2
2
  describe Loader::AutoLoad do
3
3
 
4
4
  before do
5
- Loader::AutoLoad::Support.__send__(:define_singleton_method,:pwd){ __dir__ }
5
+ Loader::Helpers.__send__(:define_singleton_method,:pwd){ __dir__ }
6
6
  end
7
7
 
8
8
  it 'should raise an constant missing error than' do
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Luzsi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-01 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2015-04-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
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: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  description: " easy to use File loader that allow directories/project both Lazy Load
14
42
  and Eager load for files and constants. The Eager load for relative directory made
15
43
  for gems by default "
@@ -21,9 +49,7 @@ extra_rdoc_files: []
21
49
  files:
22
50
  - ".gitignore"
23
51
  - ".idea/.name"
24
- - ".idea/.rakeTasks"
25
52
  - ".idea/encodings.xml"
26
- - ".idea/loader.iml"
27
53
  - ".idea/misc.xml"
28
54
  - ".idea/modules.xml"
29
55
  - ".idea/scopes/scope_settings.xml"
@@ -44,15 +70,22 @@ files:
44
70
  - files.rb
45
71
  - lib/loader.rb
46
72
  - lib/loader/autoload.rb
73
+ - lib/loader/autoload/fetcher.rb
74
+ - lib/loader/autoload/loader_patch.rb
75
+ - lib/loader/autoload/module_patch.rb
76
+ - lib/loader/helpers.rb
47
77
  - lib/loader/meta.rb
48
78
  - lib/loader/require.rb
49
79
  - loader.gemspec
80
+ - spec/loader/helpers_spec.rb
81
+ - spec/spec_helper.rb
50
82
  - test/app/controllers/samples_controller.rb
51
83
  - test/helper.rb
52
84
  - test/lib/cat.rb
53
85
  - test/lib/cat/sup.rb
54
86
  - test/lib/cat/tail.rb
55
87
  - test/lib/dog.rb
88
+ - test/manual_test.rb
56
89
  - test/sub/test2.rb
57
90
  - test/test.rb
58
91
  - test/test_autoload.rb
@@ -75,19 +108,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
108
  version: '0'
76
109
  requirements: []
77
110
  rubyforge_project:
78
- rubygems_version: 2.4.5
111
+ rubygems_version: 2.2.2
79
112
  signing_key:
80
113
  specification_version: 4
81
114
  summary: easy to use File loader that allow directories/project both Lazy Load and
82
115
  Eager load for files and constants. The Eager load for relative directory made for
83
116
  gems by default
84
117
  test_files:
118
+ - spec/loader/helpers_spec.rb
119
+ - spec/spec_helper.rb
85
120
  - test/app/controllers/samples_controller.rb
86
121
  - test/helper.rb
87
122
  - test/lib/cat.rb
88
123
  - test/lib/cat/sup.rb
89
124
  - test/lib/cat/tail.rb
90
125
  - test/lib/dog.rb
126
+ - test/manual_test.rb
91
127
  - test/sub/test2.rb
92
128
  - test/test.rb
93
129
  - test/test_autoload.rb
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Settings><!--This file was automatically generated by Ruby plugin.
3
- You are allowed to:
4
- 1. Remove rake task
5
- 2. Add existing rake tasks
6
- To add existing rake tasks automatically delete this file and reload the project.
7
- --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build loader-1.4.2.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Build and install loader-1.4.2.gem into system gems" fullCmd="install" taksId="install" /><RakeTask description="Create tag v1.4.2 and build and push loader-1.4.2.gem to Rubygems" fullCmd="release" taksId="release" /></RakeGroup></Settings>
@@ -1,20 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="FacetManager">
4
- <facet type="gem" name="Ruby Gem">
5
- <configuration>
6
- <option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$" />
7
- <option name="GEM_APP_TEST_PATH" value="$MODULE_DIR$/test" />
8
- <option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/lib" />
9
- </configuration>
10
- </facet>
11
- </component>
12
- <component name="NewModuleRootManager">
13
- <content url="file://$MODULE_DIR$">
14
- <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
15
- </content>
16
- <orderEntry type="inheritedJdk" />
17
- <orderEntry type="sourceFolder" forTests="false" />
18
- <orderEntry type="library" scope="PROVIDED" name="bundler (v1.7.12, RVM: ruby-2.1.2) [gem]" level="application" />
19
- </component>
20
- </module>