class_loader 0.3.7 → 0.3.8

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/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rake_ext'
2
2
 
3
3
  project(
4
4
  :name => "class_loader",
5
- :version => "0.3.7",
5
+ :version => "0.3.8",
6
6
  :summary => "Automatically finds and loads classes",
7
7
 
8
8
  :author => "Alexey Petrushin",
@@ -11,7 +11,7 @@ module ClassLoader
11
11
  attr_accessor :error_on_defined_constant
12
12
  def loaded_classes; @loaded_classes ||= {} end
13
13
 
14
- def load_class namespace, const, reload = false
14
+ def load_class namespace, const, reload = false
15
15
  SYNC.synchronize do
16
16
  namespace = nil if namespace == Object or namespace == Module
17
17
  target_namespace = namespace
@@ -38,7 +38,6 @@ module ClassLoader
38
38
  raise_without_self NameError, "Class '#{class_name}' is not defined in the '#{target_namespace}' Namespace!"
39
39
  else
40
40
  warn "Warn: Class '#{class_name}' is not defined in the '#{target_namespace}' Namespace!"
41
- puts caller
42
41
  end
43
42
  end
44
43
  end
@@ -65,8 +64,8 @@ module ClassLoader
65
64
  name = class_name.sub(/^#{namespace}::/, "")
66
65
 
67
66
  # removing old class
68
- class_container = (namespace || Object)
69
- class_container.send :remove_const, name if class_container.const_defined? name
67
+ # class_container = (namespace || Object)
68
+ # class_container.send :remove_const, name if class_container.const_defined? name
70
69
 
71
70
  return load_class namespace, name, true
72
71
  end
@@ -1,15 +1,18 @@
1
1
  module ClassLoader
2
2
  class CamelCaseTranslator
3
- def self.to_class_name file_path
4
- file_path.sub(/^\//, '').gsub('/', '::')
3
+ def self.to_class_name normalized_file_name
4
+ raise "internall error, invalid format for #{normalized_file_name}!" if normalized_file_name =~ /^\//
5
+ normalized_file_name.gsub('/', '::')
5
6
  end
6
7
 
7
8
  def self.to_file_path class_name
8
- class_name.sub(/^::/, '').gsub('::', '/')
9
+ raise "internall error, invalid format for #{class_name}!" if class_name =~ /^::/
10
+ class_name.gsub('::', '/')
9
11
  end
10
12
 
11
- def self.is_it_class? file_name
12
- file_name !~ /_/
13
+ def self.is_it_class? normalized_file_name
14
+ raise "internall error, invalid format for #{normalized_file_name}!" if normalized_file_name =~ /^\//
15
+ normalized_file_name[0..0] =~ /[A-Z]/
13
16
  end
14
17
  end
15
18
  end
@@ -1,15 +1,18 @@
1
1
  module ClassLoader
2
2
  class UnderscoredTranslator
3
- def self.to_class_name file_path
4
- file_path.sub(/^\//, '').camelize
3
+ def self.to_class_name normalized_file_name
4
+ raise "internall error, invalid format for #{normalized_file_name}!" if normalized_file_name =~ /^\//
5
+ normalized_file_name.camelize
5
6
  end
6
7
 
7
8
  def self.to_file_path class_name
8
- class_name.sub(/^::/, '').underscore
9
+ raise "internall error, invalid format for #{class_name}!" if class_name =~ /^::/
10
+ class_name.underscore
9
11
  end
10
12
 
11
- def self.is_it_class? file_name
12
- file_name !~ /[A-Z]/
13
+ def self.is_it_class? normalized_file_name
14
+ raise "internall error, invalid format for #{normalized_file_name}!" if normalized_file_name =~ /^\//
15
+ normalized_file_name[0..0] =~ /[a-z]/
13
16
  end
14
17
  end
15
18
  end
@@ -59,7 +59,7 @@ module ClassLoader
59
59
 
60
60
  paths.each do |base_path|
61
61
  if normalized_path.start_with? base_path
62
- normalized_name = normalized_path.sub(base_path, '')
62
+ normalized_name = normalized_path.sub(base_path + '/', '')
63
63
  if translator.is_it_class? normalized_name
64
64
  return translator.to_class_name(normalized_name)
65
65
  end
@@ -102,7 +102,7 @@ module ClassLoader
102
102
  Dir.glob("#{base_path}/**/*.rb").each do |file_path|
103
103
  normalized_path = file_path.sub(/\.rb$/, "")
104
104
 
105
- normalized_name = normalized_path.sub(base_path, '')
105
+ normalized_name = normalized_path.sub(base_path + "/", '')
106
106
  class_name = translator.to_class_name(normalized_name)
107
107
  block.call class_name
108
108
  end
@@ -112,8 +112,9 @@ module ClassLoader
112
112
  def each_watched_file &block
113
113
  @watched_paths.each do |base_path|
114
114
  Dir.glob("#{base_path}/**/*.rb").each do |file_path|
115
- file_name = file_path.sub(base_path, '')
116
- if translator.is_it_class? file_name
115
+ file_name = file_path.sub(base_path + '/', '')
116
+
117
+ if translator.is_it_class? file_name
117
118
  block.call file_path, file_name
118
119
  end
119
120
  end
data/readme.md CHANGED
@@ -38,7 +38,7 @@ There's currently a known bug in Ruby 1.8.x - class loading isn't thread safe, s
38
38
 
39
39
  ## Installation
40
40
 
41
- $ gem install class-loader
41
+ $ gem install class_loader
42
42
 
43
43
  ## Please let me know about bugs and your proposals, there's the 'Issues' tab at the top, feel free to submit.
44
44
 
@@ -115,13 +115,14 @@ RUBY
115
115
  ClassLoader.reload_class(ClassReloadingSpec.name)
116
116
  ClassReloadingSpec.check.should == :another_value
117
117
  end
118
-
119
- it "should unload old classes before reloading" do
120
- autoload_dir "#{@dir}/unload_old_class"
121
- UnloadOldClass.instance_variable_set "@value", :value
122
- ClassLoader.reload_class(UnloadOldClass.name)
123
- UnloadOldClass.instance_variable_get("@value").should == nil
124
- end
118
+
119
+ # Outdated
120
+ # it "should unload old classes before reloading" do
121
+ # autoload_dir "#{@dir}/unload_old_class"
122
+ # UnloadOldClass.instance_variable_set "@value", :value
123
+ # ClassLoader.reload_class(UnloadOldClass.name)
124
+ # UnloadOldClass.instance_variable_get("@value").should == nil
125
+ # end
125
126
  end
126
127
 
127
128
  it "should be able to preload all classes in production" do
@@ -1,17 +1,12 @@
1
1
  require "rspec_ext"
2
-
3
- require "class_loader/support"
4
- require "class_loader/file_system_adapter/camel_case_translator"
5
- require "class_loader/file_system_adapter/underscored_translator"
6
- require "class_loader/file_system_adapter"
7
- require "class_loader/chained_adapter"
2
+ require "class_loader"
8
3
 
9
4
  describe ClassLoader::FileSystemAdapter do
10
5
  before :all do
11
6
  @dir = prepare_spec_data __FILE__
12
7
  end
13
8
 
14
- before :each do
9
+ before :each do
15
10
  @fs_adapter = ClassLoader::FileSystemAdapter.new(ClassLoader::CamelCaseTranslator)
16
11
 
17
12
  # Actually we are testing both ChainedAdapter and FileSystemAdapter
@@ -107,11 +102,11 @@ describe ClassLoader::FileSystemAdapter do
107
102
  it "should watch only files understable by it's translator (CamelCase shouldn't load Underscored)" do
108
103
  watched = []
109
104
  @camel_case_adapter.each_watched_file{|file_path, relative_name| watched << relative_name}
110
- watched.should == ["/CamelCaseClass.rb"]
105
+ watched.should == ["CamelCaseClass.rb"]
111
106
 
112
107
  watched = []
113
108
  @underscored_adapter.each_watched_file{|file_path, relative_name| watched << relative_name}
114
- watched.should == ["/underscored_class.rb"]
109
+ watched.should == ["underscored_class.rb"]
115
110
  end
116
111
 
117
112
  it "CamelCase to_class_name shouldn't translate Underscored" do
@@ -0,0 +1,35 @@
1
+ require 'rspec_ext'
2
+ require 'class_loader/file_system_adapter/camel_case_translator'
3
+ require 'class_loader/file_system_adapter/underscored_translator'
4
+
5
+ describe "Translators" do
6
+ describe "CamelCase" do
7
+ before :all do
8
+ @t = ClassLoader::CamelCaseTranslator
9
+ end
10
+
11
+ it "is_it_class?" do
12
+ @t.is_it_class?("SomeClass.rb").should be_true
13
+ @t.is_it_class?("SomeNamespace/SomeClass.rb").should be_true
14
+
15
+ @t.is_it_class?("someclass.rb").should be_false
16
+ @t.is_it_class?("some_class.rb").should be_false
17
+ @t.is_it_class?("some_namespace/some_class.rb").should be_false
18
+ end
19
+ end
20
+
21
+ describe "Underscored" do
22
+ before :all do
23
+ @t = ClassLoader::UnderscoredTranslator
24
+ end
25
+
26
+ it "is_it_class?" do
27
+ @t.is_it_class?("SomeClass.rb").should be_false
28
+ @t.is_it_class?("SomeNamespace/SomeClass.rb").should be_false
29
+
30
+ @t.is_it_class?("someclass.rb").should be_true
31
+ @t.is_it_class?("some_class.rb").should be_true
32
+ @t.is_it_class?("some_namespace/some_class.rb").should be_true
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: class_loader
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 3
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 7
10
- version: 0.3.7
9
+ - 8
10
+ version: 0.3.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alexey Petrushin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-15 00:00:00 +04:00
18
+ date: 2010-10-22 00:00:00 +04:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -57,6 +57,7 @@ files:
57
57
  - spec/file_system_adapter_spec_data/multiple_class_paths/path_b/ClassInPathB.rb
58
58
  - spec/file_system_adapter_spec_data/shouldnt_mess/CamelCaseClass.rb
59
59
  - spec/file_system_adapter_spec_data/shouldnt_mess/underscored_class.rb
60
+ - spec/translators_spec.rb
60
61
  has_rdoc: true
61
62
  homepage: http://github.com/alexeypetrushin/class_loader
62
63
  licenses: []