interface 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 23d3e90da2f1b1e9211caa134f5cbf2fa7500080
4
+ data.tar.gz: 582c023b875152e4c92b549968d11d952469b331
5
+ SHA512:
6
+ metadata.gz: 0d1d5fafe57cd928828aa00e6f08037dc275e7a420f9ca1714dc016799d5aceb052910ff89d29e8df0ee446d79a9ef2ed1db8728928dbbc6f016abe6fb50b807
7
+ data.tar.gz: f59cddb23c7ea032f150d907135826bad6b8cd0a0f4bd5d40d8aec14704194948965c984d037fb9e04ec59f782cb5dadb78c1e2a2e1d5f362e7a2604b770d005
data/CHANGES CHANGED
@@ -1,3 +1,6 @@
1
+ == 1.0.3 - 12-Oct-2014
2
+ * Rakefile, gemspec and README updates.
3
+
1
4
  == 1.0.2 - 7-Oct-2009
2
5
  * Fixed packaging bug in the gemspec, and made some other minor changes.
3
6
  * Added the 'gem' rake task.
@@ -20,4 +23,4 @@
20
23
  * Some test suite and doc changes.
21
24
 
22
25
  == 0.1.0 - 9-May-2004
23
- * Initial release
26
+ * Initial release
data/README CHANGED
@@ -1,77 +1,74 @@
1
- == Description
2
- This module provides Java style interfaces for Ruby, including a fairly
3
- similar syntax. I don't necessarily believe in interfaces, but I wanted to
4
- put it out there as proof that it could be done. Frankly, Java needs mixins
5
- more than Ruby needs interfaces, but here you go.
6
-
7
- == Installation
8
-
9
- === Manual
10
- rake install
11
-
12
- === Gem Install
13
- gem install interface
14
-
15
- == Synopsis
16
- require "interface"
17
-
18
- MyInterface = interface{
19
- required_methods :foo, :bar, :baz
20
- }
21
-
22
- # Raises an error until 'baz' is defined
23
- class MyClass
24
- def foo
25
- puts "foo"
26
- end
27
- def bar
28
- puts "bar"
29
- end
30
- implements MyInterface
31
- end
32
-
33
- == General Notes
34
- Subinterfaces work as well. See the test_sub.rb file under the 'test'
35
- directory for a sample.
36
-
37
- == Developer's Notes
38
- A discussion on IRC with Mauricio Fernandez got us talking about traits.
39
- During that discussion I remembered a blog entry by David Naseby. I
40
- revisited his blog entry (at http://homepages.ihug.com.au/~naseby/33.html)
41
- and took a closer look.
42
-
43
- Keep in mind that I also happened to be thinking about Java at the moment
44
- because of a recent job switch that involved coding in Java. I was also
45
- trying to figure out what the purpose of interfaces were.
46
-
47
- As I read the first page of David Naseby's article I realized that,
48
- whether intended or not, he had implemented a rudimentary form of interfaces
49
- for Ruby. When I discovered this, I talked about it some more with Mauricio
50
- and he and I (mostly him) fleshed out the rest of the module, including some
51
- syntax improvements. The result is syntax and functionality that is nearly
52
- identical to Java.
53
-
54
- I should note that, although I am listed as the author, this was mostly the
55
- combined work of David Naseby and Mauricio Fernandez. I just happened to be
56
- the guy that put it all together.
57
-
58
- == Acknowledgements
59
- This module was largely inspired and somewhat copied from a post by
60
- David Naseby at http://homepages.ihug.com.au/~naseby/33.html. It was
61
- subsequently modified almost entirely by Mauricio Fernandez through a
62
- series of discussions on IRC.
63
-
64
- == Copyright
65
- (C) 2004-2009 Daniel J. Berger
66
- All rights reserved.
67
-
68
- == Warranty
69
- This package is provided "as is" and without any express or
70
- implied warranties, including, without limitation, the implied
71
- warranties of merchantability and fitness for a particular purpose.
72
-
73
- == License
74
- Artistic 2.0
75
-
76
- == Author
77
- Daniel J. Berger
1
+ == Description
2
+ This module provides Java style interfaces for Ruby, including a fairly
3
+ similar syntax. I don't necessarily believe in interfaces, but I wanted to
4
+ put it out there as proof that it could be done. Frankly, Java needs mixins
5
+ more than Ruby needs interfaces, but here you go.
6
+
7
+ == Installation
8
+ gem install interface
9
+
10
+ == Synopsis
11
+ require 'interface'
12
+
13
+ MyInterface = interface{
14
+ required_methods :foo, :bar, :baz
15
+ }
16
+
17
+ # Raises an error until 'baz' is defined
18
+ class MyClass
19
+ def foo
20
+ puts "foo"
21
+ end
22
+
23
+ def bar
24
+ puts "bar"
25
+ end
26
+
27
+ implements MyInterface
28
+ end
29
+
30
+ == General Notes
31
+ Subinterfaces work as well. See the test_sub.rb file under the 'test'
32
+ directory for a sample.
33
+
34
+ == Developer's Notes
35
+ A discussion on IRC with Mauricio Fernandez got us talking about traits.
36
+ During that discussion I remembered a blog entry by David Naseby. I
37
+ revisited his blog entry and took a closer look:
38
+
39
+ http://ruby-naseby.blogspot.com/2008/11/traits-in-ruby.html
40
+
41
+ Keep in mind that I also happened to be thinking about Java at the moment
42
+ because of a recent job switch that involved coding in Java. I was also
43
+ trying to figure out what the purpose of interfaces were.
44
+
45
+ As I read the first page of David Naseby's article I realized that,
46
+ whether intended or not, he had implemented a rudimentary form of interfaces
47
+ for Ruby. When I discovered this, I talked about it some more with Mauricio
48
+ and he and I (mostly him) fleshed out the rest of the module, including some
49
+ syntax improvements. The result is syntax and functionality that is nearly
50
+ identical to Java.
51
+
52
+ I should note that, although I am listed as the author, this was mostly the
53
+ combined work of David Naseby and Mauricio Fernandez. I just happened to be
54
+ the guy that put it all together.
55
+
56
+ == Acknowledgements
57
+ This module was largely inspired and somewhat copied from a post by
58
+ David Naseby (see URL above). It was subsequently modified almost entirely
59
+ by Mauricio Fernandez through a series of discussions on IRC.
60
+
61
+ == Copyright
62
+ (C) 2004-2014 Daniel J. Berger
63
+ All rights reserved.
64
+
65
+ == Warranty
66
+ This package is provided "as is" and without any express or
67
+ implied warranties, including, without limitation, the implied
68
+ warranties of merchantability and fitness for a particular purpose.
69
+
70
+ == License
71
+ Artistic 2.0
72
+
73
+ == Author
74
+ Daniel J. Berger
data/Rakefile CHANGED
@@ -1,46 +1,53 @@
1
1
  require 'rake'
2
+ require 'rake/clean'
2
3
  require 'rake/testtask'
3
- require 'rbconfig'
4
- include Config
5
-
6
- desc 'Install the interface library (non-gem)'
7
- task :install do
8
- sitelibdir = CONFIG["sitelibdir"]
9
- file = "lib/interface.rb"
10
- FileUtils.cp(file, sitelibdir, :verbose => true)
11
- end
12
-
13
- task :gem do
14
- spec = eval(IO.read('interface.gemspec'))
15
- Gem::Builder.new(spec).build
16
- end
17
-
18
- task :install_gem => [:gem] do
19
- file = Dir["*.gem"].first
20
- sh "gem install #{file}"
21
- end
22
-
23
- desc 'Run the example_instance.rb sample program'
24
- task :example_instance do
25
- ruby '-Ilib examples/example_instance.rb'
26
- end
27
-
28
- desc 'Run the example_interface.rb sample program'
29
- task :example_interface do
30
- ruby '-Ilib examples/example_interface.rb'
31
- end
32
4
 
33
- desc 'Run the example_sub.rb sample program'
34
- task :example_sub do
35
- ruby '-Ilib examples/example_sub.rb'
36
- end
37
-
38
- desc 'Run the example_unrequire.rb sample program'
39
- task :example_unrequire do
40
- ruby '-Ilib examples/example_unrequire.rb'
5
+ CLEAN.include("**/*.gem", "**/*.rbc")
6
+
7
+ namespace :gem do
8
+ desc "Create the interface gem"
9
+ task :create => [:clean] do
10
+ spec = eval(IO.read('interface.gemspec'))
11
+ if Gem::VERSION < "2.0"
12
+ Gem::Builder.new(spec).build
13
+ else
14
+ require 'rubygems/package'
15
+ Gem::Package.build(spec)
16
+ end
17
+ end
18
+
19
+ desc "Install the interface gem"
20
+ task :install => [:create] do
21
+ file = Dir["*.gem"].first
22
+ sh "gem install -l #{file}"
23
+ end
24
+ end
25
+
26
+ namespace :example do
27
+ desc 'Run the example_instance.rb sample program'
28
+ task :instance do
29
+ ruby '-Ilib examples/example_instance.rb'
30
+ end
31
+
32
+ desc 'Run the example_interface.rb sample program'
33
+ task :interface do
34
+ ruby '-Ilib examples/example_interface.rb'
35
+ end
36
+
37
+ desc 'Run the example_sub.rb sample program'
38
+ task :sub do
39
+ ruby '-Ilib examples/example_sub.rb'
40
+ end
41
+
42
+ desc 'Run the example_unrequire.rb sample program'
43
+ task :unrequire do
44
+ ruby '-Ilib examples/example_unrequire.rb'
45
+ end
41
46
  end
42
47
 
43
48
  Rake::TestTask.new do |t|
44
- t.verbose = true
45
- t.warning = true
49
+ t.verbose = true
50
+ t.warning = true
46
51
  end
52
+
53
+ task :default => :test
@@ -2,18 +2,18 @@
2
2
  # example_instance.rb
3
3
  #
4
4
  # Sample program to demonstrate extending an interface to an instance
5
- # of a class. You can run this program via the 'rake example_instance'
5
+ # of a class. You can run this program via the 'rake example:instance'
6
6
  # task. Modify as you see fit.
7
7
  #######################################################################
8
8
  require 'interface'
9
9
 
10
10
  MyInterface = interface{
11
- required_methods :foo, :bar
11
+ required_methods :foo, :bar
12
12
  }
13
13
 
14
14
  class Foo
15
- def foo; end
16
- def bar; end
15
+ def foo; end
16
+ def bar; end
17
17
  end
18
18
 
19
19
  class Bar
@@ -26,5 +26,5 @@ b = Bar.new
26
26
 
27
27
  # This will blow up
28
28
  class << b
29
- include MyInterface
30
- end
29
+ include MyInterface
30
+ end
@@ -2,26 +2,27 @@
2
2
  # example_interface.rb
3
3
  #
4
4
  # Sample test script that demonstrates a typical interface. You can
5
- # run this example via the 'rake example_interface' task. Modify this
5
+ # run this example via the 'rake example:interface' task. Modify this
6
6
  # code as you see fit.
7
7
  #######################################################################
8
8
  require 'interface'
9
9
 
10
10
  MyInterface = interface{
11
- required_methods :foo, :bar
11
+ required_methods :foo, :bar
12
12
  }
13
13
 
14
14
  class MyClass
15
- def foo; end
16
- def bar; end
17
- include MyInterface
15
+ def foo; end
16
+ def bar; end
17
+ include MyInterface
18
18
  end
19
19
 
20
20
  =begin
21
21
  # Raises an error until bar is defined
22
22
  class Foo
23
- def foo
24
- puts "foo"
25
- end
23
+ def foo
24
+ puts "foo"
25
+ end
26
+ include MyInterface
26
27
  end
27
- =end
28
+ =end
@@ -2,33 +2,33 @@
2
2
  # example_sub.rb
3
3
  #
4
4
  # Sample program to demonstrate extending a sub-interface. You can
5
- # run this program via the 'rake example_sub' task. Modify this code
5
+ # run this program via the 'rake example:sub' task. Modify this code
6
6
  # as you see fit.
7
7
  #######################################################################
8
8
  require 'interface'
9
9
 
10
10
  module MyInterface
11
- extend Interface
12
- required_methods :foo, :bar
11
+ extend Interface
12
+ required_methods :foo, :bar
13
13
  end
14
14
 
15
15
  module MySubInterface
16
- extend Interface
17
- extend MyInterface
18
- required_methods :baz
16
+ extend Interface
17
+ extend MyInterface
18
+ required_methods :baz
19
19
  end
20
20
 
21
21
  class MyClass
22
- def baz; end
23
- def bar; end
24
- def foo; end
25
- include MySubInterface
22
+ def baz; end
23
+ def bar; end
24
+ def foo; end
25
+ include MySubInterface
26
26
  end
27
27
 
28
28
  =begin
29
29
  # Raises an error
30
30
  class MyClass
31
- def baz; end
32
- include MyInterface
31
+ def baz; end
32
+ include MyInterface
33
33
  end
34
- =end
34
+ =end
@@ -2,25 +2,25 @@
2
2
  # example_unrequire.rb
3
3
  #
4
4
  # Sample test script for to verify that unrequired_methods works properly.
5
- # You can run this code via the 'rake example_unrequire' rake task. Modify
5
+ # You can run this code via the 'rake example:unrequire' rake task. Modify
6
6
  # this code as you see fit.
7
7
  ###########################################################################
8
8
  require 'interface'
9
9
 
10
10
  MyInterface = interface{
11
- required_methods :foo, :bar
11
+ required_methods :foo, :bar
12
12
  }
13
13
 
14
14
  # require foo and baz, but not bar
15
15
  MySubInterface = interface{
16
- extends MyInterface
17
- required_methods :baz
18
- unrequired_methods :bar
16
+ extends MyInterface
17
+ required_methods :baz
18
+ unrequired_methods :bar
19
19
  }
20
20
 
21
21
  # No error
22
22
  class MyClass
23
- def foo; end
24
- def baz; end
25
- include MySubInterface
26
- end
23
+ def foo; end
24
+ def baz; end
25
+ include MySubInterface
26
+ end
@@ -1,25 +1,24 @@
1
1
  require 'rubygems'
2
2
 
3
- Gem::Specification.new do |gem|
4
- gem.name = 'interface'
5
- gem.version = '1.0.2'
6
- gem.author = 'Daniel J. Berger'
7
- gem.license = 'Artistic 2.0'
8
- gem.email = 'djberg96@gmail.com'
9
- gem.homepage = 'http://www.rubyforge.org/projects/shards'
10
- gem.summary = 'Java style interfaces for Ruby'
11
- gem.test_file = 'test/test_interface.rb'
12
- gem.has_rdoc = true
13
- gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'interface'
5
+ spec.version = '1.0.3'
6
+ spec.author = 'Daniel J. Berger'
7
+ spec.license = 'Artistic 2.0'
8
+ spec.email = 'djberg96@gmail.com'
9
+ spec.homepage = 'https://github.com/djberg96/interface'
10
+ spec.summary = 'Java style interfaces for Ruby'
11
+ spec.test_file = 'test/test_interface.rb'
12
+ spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
14
13
 
15
- gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
16
- gem.rubyforge_project = 'shards'
14
+ spec.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
17
15
 
18
- gem.add_development_dependency('test-unit', '>= 2.0.3')
16
+ spec.add_development_dependency('test-unit')
17
+ spec.add_development_dependency('rake')
19
18
 
20
- gem.description = <<-EOF
21
- The interface library implements Java style interfaces for Ruby.
22
- It lets you define a set a methods that must be defined in the
23
- including class or module, or an error is raised.
24
- EOF
19
+ spec.description = <<-EOF
20
+ The interface library implements Java style interfaces for Ruby.
21
+ It lets you define a set a methods that must be defined in the
22
+ including class or module, or an error is raised.
23
+ EOF
25
24
  end
@@ -4,98 +4,104 @@
4
4
  # http://java.sun.com/docs/books/tutorial/java/concepts/interface.html
5
5
  #
6
6
  module Interface
7
- # The version of the interface library.
8
- Interface::VERSION = '1.0.2'
7
+ # The version of the interface library.
8
+ Interface::VERSION = '1.0.3'
9
9
 
10
- # Raised if a class or instance does not meet the interface requirements.
11
- class MethodMissing < RuntimeError; end
10
+ # Raised if a class or instance does not meet the interface requirements.
11
+ class MethodMissing < RuntimeError; end
12
12
 
13
- alias :extends :extend
13
+ alias :extends :extend
14
14
 
15
- private
15
+ private
16
16
 
17
- def extend_object(obj)
18
- return append_features(obj) if Interface === obj
19
- append_features(class << obj; self end)
20
- included(obj)
21
- end
22
-
23
- def append_features(mod)
24
- return super if Interface === mod
17
+ def extend_object(obj)
18
+ return append_features(obj) if Interface === obj
19
+ append_features(class << obj; self end)
20
+ included(obj)
21
+ end
22
+
23
+ def append_features(mod)
24
+ return super if Interface === mod
25
25
 
26
- inherited = (self.ancestors-[self]).select{ |x| Interface === x }
27
- inherited = inherited.map{ |x| x.instance_variable_get('@ids') }
26
+ # Is this a sub-interface?
27
+ inherited = (self.ancestors-[self]).select{ |x| Interface === x }
28
+ inherited = inherited.map{ |x| x.instance_variable_get('@ids') }
28
29
 
29
- ids = @ids + inherited.flatten
30
- @unreq ||= []
30
+ # Store required method ids
31
+ ids = @ids + inherited.flatten
32
+ @unreq ||= []
31
33
 
32
- (ids - @unreq).uniq.each do |id|
33
- id = id.to_s if RUBY_VERSION.to_f < 1.9
34
- unless mod.instance_methods(true).include?(id)
35
- raise Interface::MethodMissing, id
36
- end
34
+ # Iterate over the methods, minus the unrequired methods, and raise
35
+ # an error if the method has not been defined.
36
+ (ids - @unreq).uniq.each do |id|
37
+ id = id.to_s if RUBY_VERSION.to_f < 1.9
38
+ unless mod.instance_methods(true).include?(id)
39
+ raise Interface::MethodMissing, id
37
40
  end
41
+ end
38
42
 
39
- super mod
40
- end
43
+ super mod
44
+ end
41
45
 
42
- public
46
+ public
43
47
 
44
- # Accepts an array of method names that define the interface. When this
45
- # module is included/implemented, those method names must have already been
46
- # defined.
47
- #
48
- def required_methods(*ids)
49
- @ids = ids
50
- end
48
+ # Accepts an array of method names that define the interface. When this
49
+ # module is included/implemented, those method names must have already been
50
+ # defined.
51
+ #
52
+ def required_methods(*ids)
53
+ @ids = ids
54
+ end
51
55
 
52
- # Accepts an array of method names that are removed as a requirement for
53
- # implementation. Presumably you would use this in a sub-interface where
54
- # you only wanted a partial implementation of an existing interface.
55
- #
56
- def unrequired_methods(*ids)
57
- @unreq ||= []
58
- @unreq += ids
59
- end
56
+ # Accepts an array of method names that are removed as a requirement for
57
+ # implementation. Presumably you would use this in a sub-interface where
58
+ # you only wanted a partial implementation of an existing interface.
59
+ #
60
+ def unrequired_methods(*ids)
61
+ @unreq ||= []
62
+ @unreq += ids
63
+ end
60
64
  end
61
65
 
62
- # The interface method creates an interface module which typically sets
63
- # a list of methods that must be defined in the including class or module.
64
- # If the methods are not defined, an Interface::MethodMissing error is raised.
65
- #
66
- # A interface can extend an existing interface as well. These are called
67
- # sub-interfaces, and they can included the rules for their parent interface
68
- # by simply extending it.
69
- #
70
- # Example:
71
- #
72
- # # Require 'alpha' and 'beta' methods
73
- # AlphaInterface = interface{
74
- # required_methods :alpha, :beta
75
- # }
76
- #
77
- # # A sub-interface that requires 'beta' and 'gamma' only
78
- # GammaInterface = interface{
79
- # extends AlphaInterface
80
- # required_methods :gamma
81
- # unrequired_methods :alpha
82
- # }
83
- #
84
- # # Raises an Interface::MethodMissing error because :beta is not defined.
85
- # class MyClass
86
- # def alpha
87
- # # ...
88
- # end
89
- # implements AlphaInterface
90
- # end
91
- #
92
- def interface(&block)
93
- mod = Module.new
94
- mod.extend(Interface)
95
- mod.instance_eval(&block)
96
- mod
66
+ class Object
67
+ # The interface method creates an interface module which typically sets
68
+ # a list of methods that must be defined in the including class or module.
69
+ # If the methods are not defined, an Interface::MethodMissing error is raised.
70
+ #
71
+ # A interface can extend an existing interface as well. These are called
72
+ # sub-interfaces, and they can included the rules for their parent interface
73
+ # by simply extending it.
74
+ #
75
+ # Example:
76
+ #
77
+ # # Require 'alpha' and 'beta' methods
78
+ # AlphaInterface = interface{
79
+ # required_methods :alpha, :beta
80
+ # }
81
+ #
82
+ # # A sub-interface that requires 'beta' and 'gamma' only
83
+ # GammaInterface = interface{
84
+ # extends AlphaInterface
85
+ # required_methods :gamma
86
+ # unrequired_methods :alpha
87
+ # }
88
+ #
89
+ # # Raises an Interface::MethodMissing error because :beta is not defined.
90
+ # class MyClass
91
+ # def alpha
92
+ # # ...
93
+ # end
94
+ # implements AlphaInterface
95
+ # end
96
+ #
97
+ def interface(&block)
98
+ mod = Module.new
99
+ mod.extend(Interface)
100
+ mod.instance_eval(&block)
101
+ mod
102
+ end
97
103
  end
98
104
 
99
105
  class Module
100
- alias :implements :include
106
+ alias :implements :include
101
107
  end
@@ -3,64 +3,61 @@
3
3
  #
4
4
  # Test suite for the Interface module.
5
5
  #####################################################
6
- require 'rubygems'
7
- gem 'test-unit'
8
-
9
- require 'test/unit'
6
+ require 'test-unit'
10
7
  require 'interface'
11
8
 
12
9
  class TC_Interface < Test::Unit::TestCase
13
- def self.startup
14
- alpha_interface = interface{
15
- required_methods :alpha, :beta
16
- }
17
-
18
- gamma_interface = interface{
19
- extends alpha_interface
20
- required_methods :gamma
21
- unrequired_methods :alpha
22
- }
23
-
24
- # Workaround for 1.9.x
25
- @@alpha_interface = alpha_interface
26
- @@gamma_interface = gamma_interface
27
-
28
- eval("class A; end")
29
-
30
- eval("
31
- class B
32
- def alpha; end
33
- def beta; end
34
- end
35
- ")
36
-
37
- eval("
38
- class C
39
- def beta; end
40
- def gamma; end
41
- end
42
- ")
43
- end
44
-
45
- def test_version
46
- assert_equal('1.0.2', Interface::VERSION)
47
- end
48
-
49
- def test_interface_requirements_not_met
50
- assert_raise(Interface::MethodMissing){ A.extend(@@alpha_interface) }
51
- assert_raise(Interface::MethodMissing){ A.new.extend(@@alpha_interface) }
52
- end
53
-
54
- def test_sub_interface_requirements_not_met
55
- assert_raise(Interface::MethodMissing){ B.extend(@@gamma_interface) }
56
- assert_raise(Interface::MethodMissing){ B.new.extend(@@gamma_interface) }
57
- end
58
-
59
- def test_alpha_interface_requirements_met
60
- assert_nothing_raised{ B.new.extend(@@alpha_interface) }
61
- end
62
-
63
- def test_gamma_interface_requirements_met
64
- assert_nothing_raised{ C.new.extend(@@gamma_interface) }
65
- end
10
+ def self.startup
11
+ alpha_interface = interface{
12
+ required_methods :alpha, :beta
13
+ }
14
+
15
+ gamma_interface = interface{
16
+ extends alpha_interface
17
+ required_methods :gamma
18
+ unrequired_methods :alpha
19
+ }
20
+
21
+ # Workaround for 1.9.x
22
+ @@alpha_interface = alpha_interface
23
+ @@gamma_interface = gamma_interface
24
+
25
+ eval("class A; end")
26
+
27
+ eval("
28
+ class B
29
+ def alpha; end
30
+ def beta; end
31
+ end
32
+ ")
33
+
34
+ eval("
35
+ class C
36
+ def beta; end
37
+ def gamma; end
38
+ end
39
+ ")
40
+ end
41
+
42
+ def test_version
43
+ assert_equal('1.0.3', Interface::VERSION)
44
+ end
45
+
46
+ def test_interface_requirements_not_met
47
+ assert_raise(Interface::MethodMissing){ A.extend(@@alpha_interface) }
48
+ assert_raise(Interface::MethodMissing){ A.new.extend(@@alpha_interface) }
49
+ end
50
+
51
+ def test_sub_interface_requirements_not_met
52
+ assert_raise(Interface::MethodMissing){ B.extend(@@gamma_interface) }
53
+ assert_raise(Interface::MethodMissing){ B.new.extend(@@gamma_interface) }
54
+ end
55
+
56
+ def test_alpha_interface_requirements_met
57
+ assert_nothing_raised{ B.new.extend(@@alpha_interface) }
58
+ end
59
+
60
+ def test_gamma_interface_requirements_met
61
+ assert_nothing_raised{ C.new.extend(@@gamma_interface) }
62
+ end
66
63
  end
metadata CHANGED
@@ -1,76 +1,89 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: interface
3
- version: !ruby/object:Gem::Version
4
- version: 1.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.3
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Daniel J. Berger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
-
12
- date: 2009-10-07 00:00:00 -06:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
11
+ date: 2014-10-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
16
14
  name: test-unit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
17
20
  type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
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:
21
31
  - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 2.0.3
24
- version:
25
- description: " The interface library implements Java style interfaces for Ruby.\n It lets you define a set a methods that must be defined in the\n including class or module, or an error is raised.\n"
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'
41
+ description: |2
42
+ The interface library implements Java style interfaces for Ruby.
43
+ It lets you define a set a methods that must be defined in the
44
+ including class or module, or an error is raised.
26
45
  email: djberg96@gmail.com
27
46
  executables: []
28
-
29
47
  extensions: []
30
-
31
- extra_rdoc_files:
48
+ extra_rdoc_files:
32
49
  - README
33
50
  - CHANGES
34
51
  - MANIFEST
35
- files:
52
+ files:
36
53
  - CHANGES
54
+ - MANIFEST
55
+ - README
56
+ - Rakefile
37
57
  - examples/example_instance.rb
38
58
  - examples/example_interface.rb
39
59
  - examples/example_sub.rb
40
60
  - examples/example_unrequire.rb
41
61
  - interface.gemspec
42
62
  - lib/interface.rb
43
- - MANIFEST
44
- - Rakefile
45
- - README
46
63
  - test/test_interface.rb
47
- has_rdoc: true
48
- homepage: http://www.rubyforge.org/projects/shards
49
- licenses:
64
+ homepage: https://github.com/djberg96/interface
65
+ licenses:
50
66
  - Artistic 2.0
67
+ metadata: {}
51
68
  post_install_message:
52
69
  rdoc_options: []
53
-
54
- require_paths:
70
+ require_paths:
55
71
  - lib
56
- required_ruby_version: !ruby/object:Gem::Requirement
57
- requirements:
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
58
74
  - - ">="
59
- - !ruby/object:Gem::Version
60
- version: "0"
61
- version:
62
- required_rubygems_version: !ruby/object:Gem::Requirement
63
- requirements:
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
64
79
  - - ">="
65
- - !ruby/object:Gem::Version
66
- version: "0"
67
- version:
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
68
82
  requirements: []
69
-
70
- rubyforge_project: shards
71
- rubygems_version: 1.3.5
83
+ rubyforge_project:
84
+ rubygems_version: 2.4.1
72
85
  signing_key:
73
- specification_version: 3
86
+ specification_version: 4
74
87
  summary: Java style interfaces for Ruby
75
- test_files:
88
+ test_files:
76
89
  - test/test_interface.rb