RubyExt 0.1.0 → 0.1.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.
Files changed (100) hide show
  1. data/README +846 -0
  2. data/lib/RubyExt/Cache.rb +101 -0
  3. data/lib/RubyExt/Cache.res/multiple_version_with_args.txt +12 -0
  4. data/lib/RubyExt/Cache.res/multiple_version_without_args.txt +11 -0
  5. data/lib/RubyExt/Cache.res/single_version_with_args.txt +11 -0
  6. data/lib/RubyExt/Cache.res/single_version_without_args.txt +10 -0
  7. data/lib/RubyExt/ClassLoader.rb +142 -0
  8. data/lib/RubyExt/Debug.rb +24 -0
  9. data/lib/RubyExt/ExtraBlankSlate.rb +14 -0
  10. data/lib/RubyExt/ImportAll.rb +9 -0
  11. data/lib/RubyExt/Localization/Module.rb +12 -0
  12. data/lib/RubyExt/Localization/Object.rb +19 -0
  13. data/lib/RubyExt/Localization/require.rb +3 -0
  14. data/lib/RubyExt/Localization.rb +28 -0
  15. data/lib/RubyExt/Log.config.sample +57 -0
  16. data/lib/RubyExt/Log.rb +59 -0
  17. data/lib/RubyExt/OpenConstructor.rb +51 -0
  18. data/lib/RubyExt/Path.rb +91 -0
  19. data/lib/RubyExt/Resource/file_system_provider.rb +244 -0
  20. data/lib/RubyExt/StateMashine.rb +176 -0
  21. data/lib/RubyExt/Synchronizer.rb +29 -0
  22. data/lib/RubyExt/array.rb +24 -0
  23. data/lib/RubyExt/assert.rb +111 -0
  24. data/lib/RubyExt/class.rb +0 -0
  25. data/lib/RubyExt/debug.rb +71 -0
  26. data/lib/RubyExt/false_class.rb +5 -0
  27. data/lib/RubyExt/file.rb +23 -0
  28. data/lib/RubyExt/ideas.txt +17 -0
  29. data/lib/RubyExt/kernel.rb +61 -0
  30. data/lib/RubyExt/module.rb +102 -0
  31. data/lib/RubyExt/nil_class.rb +5 -0
  32. data/lib/RubyExt/object.rb +7 -0
  33. data/lib/RubyExt/observable.rb +25 -0
  34. data/lib/RubyExt/require.rb +56 -0
  35. data/lib/RubyExt/require_base.rb +35 -0
  36. data/lib/RubyExt/resource.rb +198 -0
  37. data/lib/RubyExt/string.rb +21 -0
  38. data/lib/RubyExt/symbol.rb +21 -0
  39. data/lib/RubyExt/true_class +0 -0
  40. data/lib/RubyExt/true_class.rb +5 -0
  41. data/rakefile +49 -0
  42. data/spec/RubyExt/ForClassLoader/ClassA.rb +4 -0
  43. data/spec/RubyExt/ForClassLoader/LoadCount.rb +1 -0
  44. data/spec/RubyExt/ForClassLoader/ModuleA/ClassB.rb +3 -0
  45. data/spec/RubyExt/ForClassLoader/ModuleA/ClassInsideAnonymousClass.rb +3 -0
  46. data/spec/RubyExt/ForClassLoader/ModuleA/InfinityLoop.rb +3 -0
  47. data/spec/RubyExt/ForClassLoader/ModuleA/ModuleB/ClassC.rb +3 -0
  48. data/spec/RubyExt/ForClassLoader/ModuleA/SameName/SomeClass.rb +2 -0
  49. data/spec/RubyExt/ForClassLoader/ModuleA/SameName.rb +2 -0
  50. data/spec/RubyExt/ForClassLoader/Scope/ScopeA1.rb +3 -0
  51. data/spec/RubyExt/ForClassLoader/Scope/ScopeB1.rb +5 -0
  52. data/spec/RubyExt/ForKernel/Raise2.rb +5 -0
  53. data/spec/RubyExt/ForKernel/RaiseWithoutSelf.rb +9 -0
  54. data/spec/RubyExt/ForLocalization/NS/A.rb +3 -0
  55. data/spec/RubyExt/ForLocalization/NS/A.ru.localization.yaml +2 -0
  56. data/spec/RubyExt/ForLocalization/NS/B.rb +22 -0
  57. data/spec/RubyExt/ForLocalization/NS/B.ru.localization.yaml +3 -0
  58. data/spec/RubyExt/ForLocalization/NS.ru.localization.yaml +2 -0
  59. data/spec/RubyExt/ForModule/NS1/A.data +1 -0
  60. data/spec/RubyExt/ForModule/NS1/A.rb +1 -0
  61. data/spec/RubyExt/ForModule/NS1/A2.rb +1 -0
  62. data/spec/RubyExt/ForModule/NS1/B.rb +2 -0
  63. data/spec/RubyExt/ForModule/NS1/B2.rb +1 -0
  64. data/spec/RubyExt/ForModule/NS1.data +1 -0
  65. data/spec/RubyExt/ForModule/NS2/A.data +1 -0
  66. data/spec/RubyExt/ForModule/NS2/A.rb +3 -0
  67. data/spec/RubyExt/ForModule/NS2/B.rb +3 -0
  68. data/spec/RubyExt/ForModule/NS2/M.data +1 -0
  69. data/spec/RubyExt/ForModule/NS2/M.rb +3 -0
  70. data/spec/RubyExt/ForResource/ChangedClass.rb +1 -0
  71. data/spec/RubyExt/ForResource/ChangedClass.res/Text.txt +0 -0
  72. data/spec/RubyExt/ForResource/ChangedClass.txt +0 -0
  73. data/spec/RubyExt/ForResource/ProviderChaining/ProviderABaseDir/ChainTest.rb +3 -0
  74. data/spec/RubyExt/ForResource/ProviderChaining/ProviderABaseDir/ChainTest.resource +1 -0
  75. data/spec/RubyExt/ForResource/ProviderChaining/ProviderABaseDir/ClassExistOnlyInProviderA.rb +3 -0
  76. data/spec/RubyExt/ForResource/ProviderChaining/ProviderBBaseDir/ChainTest.rb +3 -0
  77. data/spec/RubyExt/ForResource/ProviderChaining/ProviderBBaseDir/ChainTest.resource +1 -0
  78. data/spec/RubyExt/ForResource/ResourceExtension.rb +1 -0
  79. data/spec/RubyExt/ForResource/ResourceExtension.res/Data.yaml +2 -0
  80. data/spec/RubyExt/ForResource/ResourceTest/Test.rb +1 -0
  81. data/spec/RubyExt/ForResource/ResourceTest/Test.res/Data.txt +1 -0
  82. data/spec/RubyExt/ForResource/ResourceTest/Test.res/txt +1 -0
  83. data/spec/array_spec.rb +27 -0
  84. data/spec/assert_spec.rb +18 -0
  85. data/spec/cache_spec.rb +95 -0
  86. data/spec/class_loader_spec.rb +94 -0
  87. data/spec/import_all_spec.rb +21 -0
  88. data/spec/kernel_spec.rb +38 -0
  89. data/spec/localization_spec.rb +49 -0
  90. data/spec/module_spec.rb +135 -0
  91. data/spec/object_spec.rb +8 -0
  92. data/spec/observable_spec.rb +44 -0
  93. data/spec/open_constructor_spec.rb +38 -0
  94. data/spec/path_spec.rb +169 -0
  95. data/spec/resource_spec.rb +135 -0
  96. data/spec/state_machine_spec.rb +201 -0
  97. data/spec/synchronizer_spec.rb +66 -0
  98. metadata +130 -10
  99. data/lib/RubyExt.rb +0 -1
  100. data/lib/hello_gem.rb +0 -5
@@ -0,0 +1,61 @@
1
+ module Kernel
2
+ def raise_without_self *args
3
+ error, message, the_self = nil
4
+ if args.size == 1
5
+ error = RuntimeError
6
+ message = args[0]
7
+ the_self = self
8
+ elsif args.size == 2
9
+ message, the_self = args
10
+ error = RuntimeError
11
+ elsif args.size == 3
12
+ error, message, the_self = args
13
+ else
14
+ raise RuntimeError, "Invalid arguments!", caller
15
+ end
16
+
17
+ the_self = the_self.is_a?(Array) ? the_self : [the_self]
18
+
19
+ list = []
20
+ the_self.each do |s|
21
+ klass = (s.class == Class or s.class == Module) ? s : s.class
22
+ klass.ancestors.each do |a|
23
+ next if a == Object or a == Module
24
+ name = a.name
25
+ path = nil
26
+ if RubyExt::Resource.class_exist?(name)
27
+ path = RubyExt::Resource.class_to_virtual_file(name)
28
+ path.sub!(".rb", "")
29
+ else
30
+ path = name.gsub("::", "/")
31
+ end
32
+ list << /#{path}/
33
+ end
34
+ end
35
+
36
+ stack = caller
37
+ stack = stack.delete_if do |line|
38
+ list.any?{|re| line =~ re} and line !~ /\/spec\// # Do not exclude Spec stacktrace.
39
+ end
40
+ raise error, message, stack
41
+ end
42
+
43
+ def respond_to sym, *args
44
+ return nil if not respond_to? sym
45
+ send sym, *args
46
+ end
47
+
48
+ # def _ &b
49
+ # raise "Block isn't provided!" unless b
50
+ # return b
51
+ # end
52
+
53
+ def singleton_class(&block)
54
+ if block_given?
55
+ (class << self; self; end).class_eval(&block)
56
+ self
57
+ else
58
+ (class << self; self; end)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,102 @@
1
+ class Module
2
+ def namespace
3
+ if @module_namespace_defined
4
+ @module_namespace
5
+ else
6
+ @module_namespace_defined = true
7
+ @module_namespace = Module.namespace_for name
8
+ end
9
+ end
10
+
11
+ def each_namespace &block
12
+ current = namespace
13
+ while current do
14
+ block.call current
15
+ current = current.namespace
16
+ end
17
+ end
18
+
19
+ def each_ancestor include_standard = false, &block
20
+ if include_standard
21
+ ancestors.each{|a| block.call a unless a == self}
22
+ else
23
+ exclude = [self, Object, Kernel]
24
+ ancestors.each do |a|
25
+ block.call a unless exclude.include? a
26
+ end
27
+ end
28
+ end
29
+
30
+ def self_ancestors_and_namespaces &b
31
+ b.call self
32
+ each_ancestor &b
33
+ each_namespace &b
34
+ end
35
+
36
+ def self.namespace_for class_name
37
+ list = class_name.split("::")
38
+ if list.size > 1
39
+ list.pop
40
+ return eval list.join("::"), TOPLEVEL_BINDING, __FILE__, __LINE__
41
+ else
42
+ return nil
43
+ end
44
+ end
45
+
46
+ def wrap_method( sym, prefix = "old_", &blk )
47
+ old_method = "#{prefix}_#{sym}".to_sym
48
+ alias_method old_method, sym
49
+ define_method(sym) do |*args|
50
+ instance_exec(old_method, *args, &blk)
51
+ end
52
+ end
53
+
54
+ def is?(base)
55
+ ancestors.include?(base)
56
+ end
57
+
58
+ def resource_exist? resource_name
59
+ self_ancestors_and_namespaces do |klass|
60
+ return true if RubyExt::Resource.resource_exist? klass, resource_name
61
+ end
62
+ return false
63
+ end
64
+
65
+ def [] resource_name
66
+ self_ancestors_and_namespaces do |klass|
67
+ if RubyExt::Resource.resource_exist? klass, resource_name
68
+ return RubyExt::Resource.resource_get(klass, resource_name)
69
+ end
70
+ end
71
+ raise RubyExt::Resource::NotExist, "Resource '#{resource_name}' for Class '#{self.name}' doesn't exist!", caller
72
+ end
73
+
74
+ def []= resource_name, value
75
+ RubyExt::Resource.resource_set self.name, resource_name, value
76
+ end
77
+
78
+ def inherited_instance_methods
79
+ im = Set.new
80
+ ancestors.each do |a|
81
+ next if a == self
82
+ im.merge a.instance_methods
83
+ end
84
+ return im.to_a
85
+ end
86
+
87
+ def inherit *modules
88
+ modules.each do |amodule|
89
+ include amodule
90
+
91
+ processed = []
92
+ amodule.ancestors.each do |a|
93
+ if a.const_defined? :ClassMethods
94
+ class_methods = a.const_get :ClassMethods
95
+ next if processed.include? class_methods
96
+ processed << class_methods
97
+ extend class_methods
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,5 @@
1
+ class NilClass
2
+ # def copy
3
+ # nil
4
+ # end
5
+ end
@@ -0,0 +1,7 @@
1
+ class Object
2
+ def self; self end
3
+
4
+ # def copy
5
+ # Marshal.load(Marshal.dump self) # Stub
6
+ # end
7
+ end
@@ -0,0 +1,25 @@
1
+ module RubyExt
2
+ module Observable
3
+ def add_observer observer
4
+ @observable_observers ||= []
5
+ @observable_observers << observer unless @observable_observers.include? observer
6
+ end
7
+
8
+ def notify_observers method, *args
9
+ method.should! :be_a, Symbol
10
+ @observable_observers.each{|observer| observer.respond_to method, *args} if @observable_observers
11
+ end
12
+
13
+ def delete_observer observer
14
+ @observable_observers.delete observer if @observable_observers
15
+ end
16
+
17
+ def delete_observers
18
+ @observable_observers.clear if @observable_observers
19
+ end
20
+
21
+ def observers_count
22
+ @observable_observers ? @observable_observers.size : 0
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,56 @@
1
+ require 'RubyExt/require_base'
2
+
3
+ # Ruby Classes extensions
4
+ %w{
5
+ symbol string array false_class true_class nil_class
6
+ }.each{|n| require "RubyExt/#{n}"}
7
+
8
+ Path = RubyExt::Path
9
+ Log = RubyExt::Log
10
+ Observable = RubyExt::Observable
11
+ OpenConstructor = RubyExt::OpenConstructor
12
+ Cache = RubyExt::Cache
13
+
14
+ # Facets
15
+ require 'facets/elementor'
16
+ require 'facets/blankslate'
17
+ # Dictionary, Crypt, BiCrypt, Duration, LRUCache, LinkedList, Timer, Memoizer,
18
+ # Recorder, attr_validator
19
+ # "TreeTop" - cool Ruby Parser DSL.
20
+
21
+ # ResourceProcessing
22
+ require 'yaml'
23
+ module RubyExt
24
+ Resource.register_resource_extension(
25
+ ".yaml",
26
+ lambda{|data, klass, name| YAML.load(data)},
27
+ lambda{|data, klass, name| YAML.dump(data)}
28
+ )
29
+
30
+ Resource.register_resource_extension(
31
+ ".rb",
32
+ lambda{|data, klass, name|
33
+ script = ClassLoader.wrap_inside_namespace(klass, data)
34
+ eval script, TOPLEVEL_BINDING, "#{klass.name}/#{name}"
35
+ },
36
+ lambda{|data, klass, name| raise "Writing '.rb' Resource isn't supported!"}
37
+ )
38
+ end
39
+
40
+ # Cache
41
+ Cache.cached_with_params :class, Module, :resource_exist?, :[]
42
+
43
+ # Others
44
+ require 'fileutils'
45
+ # Undef
46
+ #[
47
+ #:select, :autoload, :autoload?, :chomp, :chomp!, :chop, :chop!, :fail, :format, :gsub,
48
+ #:gsub!, :iterator?, :open, :print, :printf, :puts, :putc, :readline, :readlines, :scan,
49
+ #:split, :sub, :sub!, :test, :trap, :warn
50
+ #].each do |m|
51
+ # Kernel.send :undef_method, m
52
+ #end
53
+
54
+ # select
55
+
56
+ require 'RubyExt/debug'
@@ -0,0 +1,35 @@
1
+ require 'monitor'
2
+ require 'singleton'
3
+ require 'set'
4
+
5
+ class NotDefined; end
6
+
7
+ # Core Classes, can't be excluded.
8
+ %w{
9
+ kernel module object class file
10
+ }.each{|n| require "RubyExt/#{n}"}
11
+
12
+ require 'RubyExt/assert'
13
+ require 'RubyExt/observable'
14
+
15
+ require 'RubyExt/resource'
16
+ require 'RubyExt/Resource/file_system_provider'
17
+
18
+ # Need this complex loading for correct work of 'raise_without_self''
19
+ module RubyExt
20
+ # libraries_in_working_dir = Dir.glob("*/**/lib").select{|f| File.directory? f}.collect{|f| File.expand_path f}
21
+ # specs_in_working_dir = Dir.glob("*/**/spec").select{|f| File.directory? f}.collect{|f| File.expand_path f}
22
+ directories = lambda do
23
+ $LOAD_PATH.select{|f| ![/site_ruby/, /vendor_ruby/, /bin$/].any?{|re| f =~ re}}\
24
+ .collect{|f| File.expand_path f}
25
+ # $LOAD_PATH.select{|dir| dir =~ /gems.+lib/}
26
+ # $LOAD_PATH.select{|dir| dir =~ /gems.+spec/} +
27
+ # [Dir.getwd] +
28
+ # libraries_in_working_dir
29
+ # specs_in_working_dir
30
+ end
31
+ Resource.add_resource_provider FileSystemProvider.new(directories)
32
+
33
+ script = Resource.class_get "RubyExt::ClassLoader"
34
+ eval script, TOPLEVEL_BINDING, Resource.class_to_virtual_file("RubyExt::ClassLoader")
35
+ end
@@ -0,0 +1,198 @@
1
+ module RubyExt
2
+ module Resource
3
+ @monitor = Monitor.new
4
+ @providers = []
5
+ @resource_extensions = {}
6
+
7
+ class NotExist < RuntimeError
8
+
9
+ end
10
+
11
+ class << self
12
+ include Observable
13
+
14
+ def add_resource_provider provider
15
+ @providers.unshift provider
16
+ end
17
+
18
+ def providers
19
+ raise "There's no any Resource Provider!" if @providers.empty?
20
+ @providers
21
+ end
22
+
23
+ def register_resource_extension extension, load, save
24
+ @monitor.synchronize do
25
+ @resource_extensions[extension] = load, save
26
+ end
27
+ end
28
+
29
+ def unregister_resource_extension extension
30
+ @monitor.synchronize do
31
+ @resource_extensions.delete extension
32
+ end
33
+ end
34
+
35
+ # Returns from first Provider that contains this Class.
36
+ def class_get class_name
37
+ @monitor.synchronize do
38
+ providers.each do |p|
39
+ begin
40
+ return p.class_get(class_name)
41
+ rescue NotExist;
42
+ end
43
+ end
44
+ raise "Class '#{class_name}' doesn't exist!"
45
+ end
46
+ end
47
+
48
+ # Search for first Provider that contains Class Namespace and creates Class in it, then exits.
49
+ def class_set class_name, data, *args
50
+ @monitor.synchronize do
51
+ namespace = Module.namespace_for class_name
52
+ namespace = namespace ? namespace.to_s : nil
53
+ found = true
54
+ providers.each do |p|
55
+ next unless !namespace or p.class_exist?(namespace)
56
+ p.class_set class_name, data, *args
57
+ break
58
+ end
59
+ raise "Namespace '#{namespace}' doesn't exist!" unless found
60
+ end
61
+ end
62
+
63
+ def class_exist? class_name
64
+ @monitor.synchronize do
65
+ providers.any?{|p| p.class_exist? class_name}
66
+ end
67
+ end
68
+
69
+ # Deletes in each Providers.
70
+ def class_delete class_name
71
+ @monitor.synchronize do
72
+ providers.each{|p| p.class_delete class_name}
73
+ end
74
+ end
75
+
76
+ # def class_namespace_exist? namespace_name
77
+ # @monitor.synchronize do
78
+ # providers.any?{|p| p.class_namespace_exist? namespace_name}
79
+ # end
80
+ # end
81
+
82
+ # Search each Provider that contains this Class and returns first found Resource.
83
+ def resource_get klass, resource_name
84
+ @monitor.synchronize do
85
+ providers.each do |p|
86
+ next unless p.class_exist?(klass.name)
87
+ begin
88
+ data = p.resource_get(klass.name, resource_name)
89
+
90
+ if data
91
+ extension = File.extname(resource_name)
92
+ if @resource_extensions.include? extension
93
+ load, save = @resource_extensions[extension]
94
+ data = load.call data, klass, resource_name
95
+ end
96
+ end
97
+
98
+ return data
99
+ rescue NotExist;
100
+ end
101
+ end
102
+ raise "Resource '#{resource_name}' for Class '#{klass.name}' doesn't exist!"
103
+ end
104
+ end
105
+
106
+ # Deletes Resource in all Providers.
107
+ def resource_delete klass, resource_name
108
+ @monitor.synchronize do
109
+ providers.each do |p|
110
+ next unless p.class_exist?(klass.name)
111
+ p.resource_delete klass.name, resource_name
112
+ end
113
+ end
114
+ end
115
+
116
+ # Set Resource in fist Provider that contains this Class.
117
+ def resource_set klass, resource_name, data
118
+ @monitor.synchronize do
119
+ extension = File.extname(resource_name)
120
+ if @resource_extensions.include? extension
121
+ load, save = @resource_extensions[extension]
122
+ data = save.call data, klass, resource_name
123
+ end
124
+
125
+ found = false
126
+ providers.each do |p|
127
+ next unless p.class_exist?(klass.name)
128
+ p.resource_set klass.name, resource_name, data
129
+ found = true
130
+ break
131
+ end
132
+
133
+ raise "Class '#{klass.name}' doesn't exist!" unless found
134
+ end
135
+ end
136
+
137
+ # Check also for Class existence.
138
+ def resource_exist? klass, resource_name
139
+ @monitor.synchronize do
140
+ providers.any? do |p|
141
+ next unless p.class_exist?(klass.name)
142
+ p.resource_exist? klass.name, resource_name
143
+ end
144
+ end
145
+ end
146
+
147
+ def start_watching interval = 2
148
+ stop_watching
149
+ @watch_thread = Thread.new do
150
+ providers.each{|p| p.reset_changed_files}
151
+ while true
152
+ sleep interval
153
+ begin
154
+ providers.each do |p|
155
+ p.check_for_changed_files.each do |type, klass, res|
156
+ notify_observers :update_resource, type, klass, res
157
+ end
158
+ end
159
+ rescue Exception => e
160
+ warn e
161
+ end
162
+ end
163
+ end
164
+ end
165
+
166
+ def stop_watching
167
+ if @watch_thread
168
+ @watch_thread.kill
169
+ @watch_thread = nil
170
+ end
171
+ end
172
+
173
+ def class_to_virtual_file class_name
174
+ @monitor.synchronize do
175
+ providers.each do |p|
176
+ begin
177
+ return p.class_to_virtual_file class_name
178
+ rescue NotExist;
179
+ end
180
+ end
181
+ raise "Class '#{class_name}' doesn't exist!"
182
+ end
183
+ end
184
+
185
+ # def class_to_virtual_path class_name
186
+ # @monitor.synchronize do
187
+ # providers.each do |p|
188
+ # begin
189
+ # return p.class_to_virtual_path class_name
190
+ # rescue NotExist;
191
+ # end
192
+ # end
193
+ # raise "Class '#{class_name}' doesn't exist!"
194
+ # end
195
+ # end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,21 @@
1
+ class String
2
+ def to_reader
3
+ self.to_sym
4
+ end
5
+
6
+ def to_writer
7
+ "#{self}=".to_sym
8
+ end
9
+
10
+ def to_iv
11
+ "@#{self}"
12
+ end
13
+
14
+ def substitute binding
15
+ binding.should! :be_a, Binding
16
+ return gsub(/\#\{.+?\}/) do |term|
17
+ identifier = term.slice(2 .. term.size-2)
18
+ binding.eval identifier
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ class Symbol
2
+ def <=> other
3
+ self.to_s <=> other.to_s
4
+ end
5
+
6
+ def to_reader
7
+ self
8
+ end
9
+
10
+ def to_writer
11
+ "#{self}=".to_sym
12
+ end
13
+
14
+ def to_iv
15
+ "@#{self}"
16
+ end
17
+
18
+ def + other
19
+ (self.to_s + other.to_s).to_sym
20
+ end
21
+ end
File without changes
@@ -0,0 +1,5 @@
1
+ class TrueClass
2
+ def copy
3
+ true
4
+ end
5
+ end
data/rakefile ADDED
@@ -0,0 +1,49 @@
1
+ require 'rake'
2
+ require 'spec/rake/spectask'
3
+
4
+ Dir.chdir File.dirname(__FILE__)
5
+
6
+ task :default => :spec
7
+
8
+ Spec::Rake::SpecTask.new('spec') do |t|
9
+ t.spec_files = FileList["spec/**/*_spec.rb"]
10
+ t.libs = ["lib", "spec"]
11
+ end
12
+
13
+ require 'rake/clean'
14
+ require 'rake/gempackagetask'
15
+ require 'fileutils'
16
+
17
+ spec = Gem::Specification.new do |s|
18
+ s.name = "RubyExt"
19
+ s.version = "0.1.1"
20
+ s.summary = "A set of Ruby language extensions, mainly for ActivePoint Project"
21
+ s.description = "A set of Ruby language extensions, mainly for ActivePoint Project"
22
+ s.author = "Alexey Petrushin"
23
+ # s.email = ""
24
+ s.homepage = "http://www.bos-tec.com"
25
+ s.rubyforge_project = "RubyExt"
26
+
27
+ s.platform = Gem::Platform::RUBY
28
+ s.has_rdoc = true
29
+ s.extra_rdoc_files = ["README"]
30
+
31
+ s.files = (%w{rakefile README} + Dir.glob("{lib,spec}/**/*"))\
32
+ .select{|f| f !~ /^\./}
33
+ # s.executables = ['restclient']
34
+ # s.add_dependency("BlueCloth", ">= 0.0.4")
35
+
36
+ s.require_path = "lib"
37
+ end
38
+
39
+ Rake::GemPackageTask.new(spec) do |p|
40
+ package_dir = "#{File.expand_path File.dirname(__FILE__)}/../build"
41
+ FileUtils.mkdir package_dir unless File.exist? package_dir
42
+ p.need_tar = true if RUBY_PLATFORM !~ /mswin/
43
+ p.need_zip = true
44
+ p.package_dir = package_dir
45
+ end
46
+
47
+ CLEAN.include [ 'pkg', '*.gem']
48
+
49
+ task :release => [:gem, :clean]
@@ -0,0 +1,4 @@
1
+ class ClassA
2
+
3
+ end
4
+ # Do not delete this comment on last line! It's the Test!
@@ -0,0 +1 @@
1
+ class LoadCount; end
@@ -0,0 +1,3 @@
1
+ class ClassB
2
+ end
3
+ # Do not delete this comment on last line! It's the Test!
@@ -0,0 +1,3 @@
1
+ class ClassInsideAnonymousClass
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class InvalidInfinityLoopName
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class ClassC
2
+ ClassB
3
+ end
@@ -0,0 +1,2 @@
1
+ class SomeClass
2
+ end
@@ -0,0 +1,2 @@
1
+ class SameName
2
+ end
@@ -0,0 +1,3 @@
1
+ class ScopeA1
2
+
3
+ end
@@ -0,0 +1,5 @@
1
+ class ScopeB1
2
+ class InnerClass; end
3
+
4
+ InnerClass::ScopeA1
5
+ end
@@ -0,0 +1,5 @@
1
+ class Raise2
2
+ def test o
3
+ o.test2
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class RaiseWithoutSelf
2
+ def test
3
+ raise_without_self "Error"
4
+ end
5
+
6
+ def test2
7
+ raise_without_self "Error", [RaiseWithoutSelf, Raise2]
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ class A
2
+
3
+ end
@@ -0,0 +1,2 @@
1
+ ---
2
+ "Class Hierarchy English": "Class Hierarchy Russian"