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.
File without changes
data/README ADDED
@@ -0,0 +1,4 @@
1
+ README for finalizer
2
+ ====================
3
+
4
+ todo
@@ -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
@@ -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
@@ -0,0 +1,9 @@
1
+ module Finalizer #:nodoc:
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ TINY = 2
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ Dir['**/*_test.rb'].each { |test_case| require test_case }
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class FinalizerTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/finalizer'
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
+