finalizer 0.0.2
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/CHANGELOG +0 -0
- data/README +4 -0
- data/Rakefile +79 -0
- data/lib/finalizer.rb +58 -0
- data/lib/finalizer/version.rb +9 -0
- data/test/all_tests.rb +1 -0
- data/test/finalizer_test.rb +11 -0
- data/test/test_helper.rb +2 -0
- metadata +64 -0
data/CHANGELOG
ADDED
File without changes
|
data/README
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/packagetask'
|
5
|
+
require 'rake/gempackagetask'
|
6
|
+
require 'rake/rdoctask'
|
7
|
+
require 'rake/contrib/rubyforgepublisher'
|
8
|
+
require 'fileutils'
|
9
|
+
include FileUtils
|
10
|
+
require File.join(File.dirname(__FILE__), 'lib', 'finalizer', 'version')
|
11
|
+
|
12
|
+
AUTHOR = "Haakon Sorensen"
|
13
|
+
EMAIL = "haakon@thesorensens.org"
|
14
|
+
DESCRIPTION = "prevent child methods from overriding final methods"
|
15
|
+
HOMEPATH = 'http://finalizer.rubyforge.org'
|
16
|
+
|
17
|
+
|
18
|
+
NAME = "finalizer"
|
19
|
+
REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
20
|
+
VERS = ENV['VERSION'] || (Finalizer::VERSION::STRING + (REV ? ".#{REV}" : ""))
|
21
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
22
|
+
RDOC_OPTS = ['--quiet', '--title', "finalizer documentation",
|
23
|
+
"--opname", "index.html",
|
24
|
+
"--line-numbers",
|
25
|
+
"--main", "README",
|
26
|
+
"--inline-source"]
|
27
|
+
BIN_FILES = %w( )
|
28
|
+
|
29
|
+
desc "Packages up finalizer gem."
|
30
|
+
task :default => [:test]
|
31
|
+
task :package => [:clean]
|
32
|
+
|
33
|
+
task :test do
|
34
|
+
require File.dirname(__FILE__) + '/test/all_tests.rb'
|
35
|
+
end
|
36
|
+
|
37
|
+
spec =
|
38
|
+
Gem::Specification.new do |s|
|
39
|
+
s.name = NAME
|
40
|
+
s.version = VERS
|
41
|
+
s.platform = Gem::Platform::RUBY
|
42
|
+
s.has_rdoc = true
|
43
|
+
s.extra_rdoc_files = ["README", "CHANGELOG"]
|
44
|
+
s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
|
45
|
+
s.summary = DESCRIPTION
|
46
|
+
s.description = DESCRIPTION
|
47
|
+
s.author = AUTHOR
|
48
|
+
s.email = EMAIL
|
49
|
+
s.homepage = HOMEPATH
|
50
|
+
s.executables = BIN_FILES
|
51
|
+
s.bindir = "bin"
|
52
|
+
s.require_path = "lib"
|
53
|
+
|
54
|
+
#s.add_dependency('activesupport', '>=1.3.1')
|
55
|
+
#s.required_ruby_version = '>= 1.8.2'
|
56
|
+
|
57
|
+
s.files = %w(README CHANGELOG Rakefile) +
|
58
|
+
Dir.glob("{bin,doc,test,lib,templates,extras,website,script}/**/*") +
|
59
|
+
Dir.glob("ext/**/*.{h,c,rb}") +
|
60
|
+
Dir.glob("examples/**/*.rb") +
|
61
|
+
Dir.glob("tools/*.rb")
|
62
|
+
|
63
|
+
# s.extensions = FileList["ext/**/extconf.rb"].to_a
|
64
|
+
end
|
65
|
+
|
66
|
+
Rake::GemPackageTask.new(spec) do |p|
|
67
|
+
p.need_tar = false
|
68
|
+
p.gem_spec = spec
|
69
|
+
end
|
70
|
+
|
71
|
+
task :install do
|
72
|
+
name = "#{NAME}-#{VERS}.gem"
|
73
|
+
sh %{rake package}
|
74
|
+
sh %{sudo gem install pkg/#{name}}
|
75
|
+
end
|
76
|
+
|
77
|
+
task :uninstall => [:clean] do
|
78
|
+
sh %{sudo gem uninstall #{NAME}}
|
79
|
+
end
|
data/lib/finalizer.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
=begin rdoc
|
2
|
+
|
3
|
+
Using finalizer, you can specify a method to be 'final', which prevents child classes from overriding the method.
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'finalizer'
|
7
|
+
|
8
|
+
class Foo
|
9
|
+
final :bar
|
10
|
+
|
11
|
+
def bar
|
12
|
+
puts 'bar'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Bar < Foo
|
17
|
+
def bar
|
18
|
+
puts 'mybar'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Results in:
|
23
|
+
|
24
|
+
RuntimeError: Child class 'Bar' should not override parent class method 'Foo.bar'.
|
25
|
+
|
26
|
+
=end
|
27
|
+
class Object
|
28
|
+
@@final_methods = {}
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def prevent_override?(method_name)
|
32
|
+
@@final_methods.each do |class_name, final_methods|
|
33
|
+
ancestors = self.ancestors
|
34
|
+
ancestors.shift # remove myself from the list
|
35
|
+
|
36
|
+
if ancestors.include?(class_name) && final_methods.include?(method_name)
|
37
|
+
raise "Child class '#{self}' should not override parent class method '#{class_name}.#{method_name}'."
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def method_added(method_name)
|
43
|
+
prevent_override?(method_name)
|
44
|
+
end
|
45
|
+
|
46
|
+
=begin rdoc
|
47
|
+
Specifies the list of method names which cannot be overriden by any child classes:
|
48
|
+
|
49
|
+
class MyClass
|
50
|
+
final :method_one, :method_two
|
51
|
+
end
|
52
|
+
=end
|
53
|
+
def final(*names)
|
54
|
+
@@final_methods[self] = names
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/test/all_tests.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Dir['**/*_test.rb'].each { |test_case| require test_case }
|
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.11
|
3
|
+
specification_version: 1
|
4
|
+
name: finalizer
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.0.2
|
7
|
+
date: 2006-11-10 00:00:00 +00:00
|
8
|
+
summary: prevent child methods from overriding final methods
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: haakon@thesorensens.org
|
12
|
+
homepage: http://finalizer.rubyforge.org
|
13
|
+
rubyforge_project:
|
14
|
+
description: prevent child methods from overriding final methods
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
authors:
|
29
|
+
- Haakon Sorensen
|
30
|
+
files:
|
31
|
+
- README
|
32
|
+
- CHANGELOG
|
33
|
+
- Rakefile
|
34
|
+
- test/all_tests.rb
|
35
|
+
- test/test_helper.rb
|
36
|
+
- test/finalizer_test.rb
|
37
|
+
- lib/finalizer.rb
|
38
|
+
- lib/finalizer
|
39
|
+
- lib/finalizer/version.rb
|
40
|
+
test_files: []
|
41
|
+
|
42
|
+
rdoc_options:
|
43
|
+
- --quiet
|
44
|
+
- --title
|
45
|
+
- finalizer documentation
|
46
|
+
- --opname
|
47
|
+
- index.html
|
48
|
+
- --line-numbers
|
49
|
+
- --main
|
50
|
+
- README
|
51
|
+
- --inline-source
|
52
|
+
- --exclude
|
53
|
+
- ^(examples|extras)/
|
54
|
+
extra_rdoc_files:
|
55
|
+
- README
|
56
|
+
- CHANGELOG
|
57
|
+
executables: []
|
58
|
+
|
59
|
+
extensions: []
|
60
|
+
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
dependencies: []
|
64
|
+
|