interface 1.0.4 → 1.2.0

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.
metadata CHANGED
@@ -1,39 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interface
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
13
+ MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MREwDwYDVQQDDAhkamJl
14
14
  cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
15
- MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
15
+ MB4XDTE4MDMxODE1MjIwN1oXDTI4MDMxNTE1MjIwN1owPzERMA8GA1UEAwwIZGpi
16
16
  ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
17
- bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
18
- Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
19
- S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
20
- gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
21
- FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
22
- zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
23
- DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
24
- nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
25
- bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
26
- ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
27
- tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
28
- /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
29
- wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
30
- EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
31
- tGSHgAmcLlkdGgan182qsE/4kKM=
17
+ bTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALgfaroVM6CI06cxr0/h
18
+ A+j+pc8fgpRgBVmHFaFunq28GPC3IvW7Nvc3Y8SnAW7pP1EQIbhlwRIaQzJ93/yj
19
+ u95KpkP7tA9erypnV7dpzBkzNlX14ACaFD/6pHoXoe2ltBxk3CCyyzx70mTqJpph
20
+ 75IB03ni9a8yqn8pmse+s83bFJOAqddSj009sGPcQO+QOWiNxqYv1n5EHcvj2ebO
21
+ 6hN7YTmhx7aSia4qL/quc4DlIaGMWoAhvML7u1fmo53CYxkKskfN8MOecq2vfEmL
22
+ iLu+SsVVEAufMDDFMXMJlvDsviolUSGMSNRTujkyCcJoXKYYxZSNtIiyd9etI0X3
23
+ ctu0uhrFyrMZXCedutvXNjUolD5r9KGBFSWH1R9u2I3n3SAyFF2yzv/7idQHLJJq
24
+ 74BMnx0FIq6fCpu5slAipvxZ3ZkZpEXZFr3cIBtO1gFvQWW7E/Y3ijliWJS1GQFq
25
+ 058qERadHGu1yu1dojmFRo6W2KZvY9al2yIlbkpDrD5MYQIDAQABo3cwdTAJBgNV
26
+ HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUFZsMapgzJimzsbaBG2Tm8j5e
27
+ AzgwHQYDVR0RBBYwFIESZGpiZXJnOTZAZ21haWwuY29tMB0GA1UdEgQWMBSBEmRq
28
+ YmVyZzk2QGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAW2tnYixXQtKxgGXq
29
+ /3iSWG2bLwvxS4go3srO+aRXZHrFUMlJ5W0mCxl03aazxxKTsVVpZD8QZxvK91OQ
30
+ h9zr9JBYqCLcCVbr8SkmYCi/laxIZxsNE5YI8cC8vvlLI7AMgSfPSnn/Epq1GjGY
31
+ 6L1iRcEDtanGCIvjqlCXO9+BmsnCfEVehqZkQHeYczA03tpOWb6pon2wzvMKSsKH
32
+ ks0ApVdstSLz1kzzAqem/uHdG9FyXdbTAwH1G4ZPv69sQAFAOCgAqYmdnzedsQtE
33
+ 1LQfaQrx0twO+CZJPcRLEESjq8ScQxWRRkfuh2VeR7cEU7L7KqT10mtUwrvw7APf
34
+ DYoeCY9KyjIBjQXfbj2ke5u1hZj94Fsq9FfbEQg8ygCgwThnmkTrrKEiMSs3alYR
35
+ ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
36
+ WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
32
37
  -----END CERTIFICATE-----
33
- date: 2016-01-08 00:00:00.000000000 Z
38
+ date: 2025-07-09 00:00:00.000000000 Z
34
39
  dependencies:
35
40
  - !ruby/object:Gem::Dependency
36
- name: test-unit
41
+ name: rake
37
42
  requirement: !ruby/object:Gem::Requirement
38
43
  requirements:
39
44
  - - ">="
@@ -47,19 +52,19 @@ dependencies:
47
52
  - !ruby/object:Gem::Version
48
53
  version: '0'
49
54
  - !ruby/object:Gem::Dependency
50
- name: rake
55
+ name: rspec
51
56
  requirement: !ruby/object:Gem::Requirement
52
57
  requirements:
53
- - - ">="
58
+ - - "~>"
54
59
  - !ruby/object:Gem::Version
55
- version: '0'
60
+ version: '3.9'
56
61
  type: :development
57
62
  prerelease: false
58
63
  version_requirements: !ruby/object:Gem::Requirement
59
64
  requirements:
60
- - - ">="
65
+ - - "~>"
61
66
  - !ruby/object:Gem::Version
62
- version: '0'
67
+ version: '3.9'
63
68
  description: |2
64
69
  The interface library implements Java style interfaces for Ruby.
65
70
  It lets you define a set a methods that must be defined in the
@@ -67,32 +72,38 @@ description: |2
67
72
  email: djberg96@gmail.com
68
73
  executables: []
69
74
  extensions: []
70
- extra_rdoc_files:
71
- - README
72
- - CHANGES
73
- - MANIFEST
75
+ extra_rdoc_files: []
74
76
  files:
75
- - certs
77
+ - CHANGES.md
78
+ - Gemfile
79
+ - LICENSE
80
+ - MANIFEST.md
81
+ - README.md
82
+ - Rakefile
76
83
  - certs/djberg96_pub.pem
77
- - CHANGES
78
- - examples
84
+ - examples/enhanced_features_demo.rb
79
85
  - examples/example_instance.rb
80
86
  - examples/example_interface.rb
81
87
  - examples/example_sub.rb
82
88
  - examples/example_unrequire.rb
83
89
  - interface.gemspec
84
- - lib
85
90
  - lib/interface.rb
86
- - MANIFEST
87
- - Rakefile
88
- - README
89
- - test
90
- - test/test_interface.rb
91
+ - spec/interface_enhanced_spec.rb
92
+ - spec/interface_spec.rb
91
93
  homepage: http://github.com/djberg96/interface
92
94
  licenses:
93
- - Artistic 2.0
94
- metadata: {}
95
- post_install_message:
95
+ - Artistic-2.0
96
+ metadata:
97
+ homepage_uri: https://github.com/djberg96/interface
98
+ bug_tracker_uri: https://github.com/djberg96/interface/issues
99
+ changelog_uri: https://github.com/djberg96/interface/blob/main/CHANGES.md
100
+ documentation_uri: https://github.com/djberg96/interface/wiki
101
+ source_code_uri: https://github.com/djberg96/interface
102
+ wiki_uri: https://github.com/djberg96/interface/wiki
103
+ rubygems_mfa_required: 'true'
104
+ github_repo: https://github.com/djberg96/interface
105
+ funding_uri: https://github.com/sponsors/djberg96
106
+ post_install_message:
96
107
  rdoc_options: []
97
108
  require_paths:
98
109
  - lib
@@ -107,10 +118,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
118
  - !ruby/object:Gem::Version
108
119
  version: '0'
109
120
  requirements: []
110
- rubyforge_project:
111
- rubygems_version: 2.5.1
112
- signing_key:
121
+ rubygems_version: 3.5.22
122
+ signing_key:
113
123
  specification_version: 4
114
124
  summary: Java style interfaces for Ruby
115
125
  test_files:
116
- - test/test_interface.rb
126
+ - spec/interface_spec.rb
metadata.gz.sig CHANGED
Binary file
data/README DELETED
@@ -1,74 +0,0 @@
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-2016 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
@@ -1,63 +0,0 @@
1
- #####################################################
2
- # test_interface.rb
3
- #
4
- # Test suite for the Interface module.
5
- #####################################################
6
- require 'test-unit'
7
- require 'interface'
8
-
9
- class TC_Interface < Test::Unit::TestCase
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.4', 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
63
- end