module_functions 0.0.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.
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ group :rake do
4
+ gem 'rake_tasks', '~> 0.0.1'
5
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,13 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ rake (0.8.7)
5
+ rake_tasks (0.0.4)
6
+ rake (~> 0.8.7)
7
+
8
+ PLATFORMS
9
+ ruby
10
+ x86-mingw32
11
+
12
+ DEPENDENCIES
13
+ rake_tasks (~> 0.0.1)
data/README ADDED
@@ -0,0 +1,27 @@
1
+ == Welcome to ModuleFunctions
2
+
3
+ ModuleFunctions contains useful module functions.
4
+ One example is the function that adds
5
+ all public module functions to another module.
6
+
7
+ == Getting Started
8
+
9
+ 1. Install ModuleFunctions at the command prompt if you haven't yet:
10
+
11
+ gem install module_functions
12
+
13
+ 2. Require the gem in your Gemfile:
14
+
15
+ gem 'module_functions', '~> 0.0.1'
16
+
17
+ 3. Require the gem wherever you need to use it:
18
+
19
+ require 'module_functions'
20
+
21
+ == Additional Documentation
22
+
23
+ rake rdoc:app
24
+
25
+ == License
26
+
27
+ ModuleFunctions is released under the GPLv3 license.
@@ -0,0 +1,3 @@
1
+ gem_name = File.basename(__FILE__, '.rb')
2
+
3
+ require_relative File.join(gem_name, gem_name)
@@ -0,0 +1,64 @@
1
+ # This file contains useful module functions.
2
+
3
+ #--
4
+ ################################################################################
5
+ # Copyright (C) 2011 Travis Herrick #
6
+ ################################################################################
7
+ # #
8
+ # \v^V,^!v\^/ #
9
+ # ~% %~ #
10
+ # { _ _ } #
11
+ # ( * - ) #
12
+ # | / | #
13
+ # \ _, / #
14
+ # \__.__/ #
15
+ # #
16
+ ################################################################################
17
+ # This program is free software: you can redistribute it #
18
+ # and/or modify it under the terms of the GNU General Public License #
19
+ # as published by the Free Software Foundation, #
20
+ # either version 3 of the License, or (at your option) any later version. #
21
+ # #
22
+ # Commercial licensing may be available for a fee under a different license. #
23
+ ################################################################################
24
+ # This program is distributed in the hope that it will be useful, #
25
+ # but WITHOUT ANY WARRANTY; #
26
+ # without even the implied warranty of MERCHANTABILITY #
27
+ # or FITNESS FOR A PARTICULAR PURPOSE. #
28
+ # See the GNU General Public License for more details. #
29
+ # #
30
+ # You should have received a copy of the GNU General Public License #
31
+ # along with this program. If not, see <http://www.gnu.org/licenses/>. #
32
+ ################################################################################
33
+ #++
34
+
35
+ # Useful functions for modules.
36
+ module ModuleFunctions
37
+ class << self
38
+ # Imports public methods from one module into another.
39
+ # ==== Input
40
+ # [receiver : Module] This module will have new methods added to it.
41
+ # [sender : Module] This module will have it's methods
42
+ # called from <tt>receiver</tt>.
43
+ def import_public_methods(receiver, sender)
44
+ unless receiver.class == Module && sender.class == Module
45
+ raise ArgumentError, "Invalid parameter for #{__method__}. " +
46
+ "A #{Module} was expected, but was a #{receiver.class}."
47
+ end
48
+
49
+ # Create a public methods of the same name in the receiving module
50
+ # that will call the original module's methods.
51
+ (sender.public_methods - sender.class.public_methods).each do |method|
52
+ receiver.module_eval(<<-EOT, __FILE__, __LINE__)
53
+ def self.#{method}(*args)
54
+ if args.length == 0
55
+ #{sender.name}.#{method}
56
+ else
57
+ #{sender.name}.#{method}(*args)
58
+ end
59
+ end
60
+ EOT
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,27 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'module_functions'
3
+ s.version = '0.0.1'
4
+
5
+ s.summary = 'This gem contains useful module functions.'
6
+ s.description = %Q{
7
+ ModuleFunctions contains useful module functions.
8
+ One example is the function that adds
9
+ all public module functions to another module.
10
+ }.strip
11
+
12
+ s.author = 'Travis Herrick'
13
+ s.email = 'tthetoad@gmail.com'
14
+ s.homepage = 'http://www.bitbucket.org/ToadJamb/gems_module_functions'
15
+
16
+ s.license = 'GPLv3'
17
+
18
+ s.extra_rdoc_files << 'README'
19
+
20
+ s.require_paths = ['lib']
21
+ s.files = Dir['lib/**/*.rb', '*']
22
+ s.test_files = Dir['test/**/*.rb']
23
+
24
+ s.add_development_dependency 'rake_tasks', '~> 0.0.1'
25
+
26
+ s.has_rdoc = true
27
+ end
data/rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler.require :rake
@@ -0,0 +1,37 @@
1
+ # This file contains a module that is used to assist in testing this gem.
2
+
3
+ #--
4
+ ################################################################################
5
+ # Copyright (C) 2011 Travis Herrick #
6
+ ################################################################################
7
+ # #
8
+ # \v^V,^!v\^/ #
9
+ # ~% %~ #
10
+ # { _ _ } #
11
+ # ( * - ) #
12
+ # | / | #
13
+ # \ _, / #
14
+ # \__.__/ #
15
+ # #
16
+ ################################################################################
17
+ # This program is free software: you can redistribute it #
18
+ # and/or modify it under the terms of the GNU General Public License #
19
+ # as published by the Free Software Foundation, #
20
+ # either version 3 of the License, or (at your option) any later version. #
21
+ # #
22
+ # Commercial licensing may be available for a fee under a different license. #
23
+ ################################################################################
24
+ # This program is distributed in the hope that it will be useful, #
25
+ # but WITHOUT ANY WARRANTY; #
26
+ # without even the implied warranty of MERCHANTABILITY #
27
+ # or FITNESS FOR A PARTICULAR PURPOSE. #
28
+ # See the GNU General Public License for more details. #
29
+ # #
30
+ # You should have received a copy of the GNU General Public License #
31
+ # along with this program. If not, see <http://www.gnu.org/licenses/>. #
32
+ ################################################################################
33
+ #++
34
+
35
+ # This module is used to assist in testing this gem.
36
+ module EmptyModule
37
+ end
@@ -0,0 +1,55 @@
1
+ # This file contains a class that is used to assist in testing this gem.
2
+
3
+ #--
4
+ ################################################################################
5
+ # Copyright (C) 2011 Travis Herrick #
6
+ ################################################################################
7
+ # #
8
+ # \v^V,^!v\^/ #
9
+ # ~% %~ #
10
+ # { _ _ } #
11
+ # ( * - ) #
12
+ # | / | #
13
+ # \ _, / #
14
+ # \__.__/ #
15
+ # #
16
+ ################################################################################
17
+ # This program is free software: you can redistribute it #
18
+ # and/or modify it under the terms of the GNU General Public License #
19
+ # as published by the Free Software Foundation, #
20
+ # either version 3 of the License, or (at your option) any later version. #
21
+ # #
22
+ # Commercial licensing may be available for a fee under a different license. #
23
+ ################################################################################
24
+ # This program is distributed in the hope that it will be useful, #
25
+ # but WITHOUT ANY WARRANTY; #
26
+ # without even the implied warranty of MERCHANTABILITY #
27
+ # or FITNESS FOR A PARTICULAR PURPOSE. #
28
+ # See the GNU General Public License for more details. #
29
+ # #
30
+ # You should have received a copy of the GNU General Public License #
31
+ # along with this program. If not, see <http://www.gnu.org/licenses/>. #
32
+ ################################################################################
33
+ #++
34
+
35
+ # This class is used to assist in testing this gem.
36
+ class MyClass
37
+ class << self
38
+ def my_public_class_method; end
39
+
40
+ protected
41
+ def my_protected_class_method; end
42
+
43
+ private
44
+ def my_private_class_method; end
45
+ end
46
+
47
+ public
48
+ def my_public_instance_method; end
49
+
50
+ protected
51
+ def my_protected_instance_method; end
52
+
53
+ private
54
+ def my_private_instance_method; end
55
+ end
@@ -0,0 +1,68 @@
1
+ # This file contains a module that is used to assist in testing this gem.
2
+
3
+ #--
4
+ ################################################################################
5
+ # Copyright (C) 2011 Travis Herrick #
6
+ ################################################################################
7
+ # #
8
+ # \v^V,^!v\^/ #
9
+ # ~% %~ #
10
+ # { _ _ } #
11
+ # ( * - ) #
12
+ # | / | #
13
+ # \ _, / #
14
+ # \__.__/ #
15
+ # #
16
+ ################################################################################
17
+ # This program is free software: you can redistribute it #
18
+ # and/or modify it under the terms of the GNU General Public License #
19
+ # as published by the Free Software Foundation, #
20
+ # either version 3 of the License, or (at your option) any later version. #
21
+ # #
22
+ # Commercial licensing may be available for a fee under a different license. #
23
+ ################################################################################
24
+ # This program is distributed in the hope that it will be useful, #
25
+ # but WITHOUT ANY WARRANTY; #
26
+ # without even the implied warranty of MERCHANTABILITY #
27
+ # or FITNESS FOR A PARTICULAR PURPOSE. #
28
+ # See the GNU General Public License for more details. #
29
+ # #
30
+ # You should have received a copy of the GNU General Public License #
31
+ # along with this program. If not, see <http://www.gnu.org/licenses/>. #
32
+ ################################################################################
33
+ #++
34
+
35
+ # This module is used to assist in testing this gem.
36
+ module MyModule
37
+ class << self
38
+ def my_public_module_method; end
39
+
40
+ protected
41
+ def my_protected_module_method; end
42
+
43
+ private
44
+ def my_private_module_method; end
45
+ end
46
+
47
+ public
48
+ def my_public_instance_method; end
49
+
50
+ protected
51
+ def my_protected_instance_method; end
52
+
53
+ private
54
+ def my_private_instance_method; end
55
+
56
+ module_function
57
+
58
+ def my_default_module_function; end
59
+
60
+ def my_public_module_function; end
61
+ public :my_public_module_function
62
+
63
+ def my_protected_module_function; end
64
+ protected :my_protected_module_function
65
+
66
+ def my_private_module_function; end
67
+ private :my_private_module_function
68
+ end
@@ -0,0 +1,92 @@
1
+ #--
2
+ ################################################################################
3
+ # Copyright (C) 2011 Travis Herrick #
4
+ ################################################################################
5
+ # #
6
+ # \v^V,^!v\^/ #
7
+ # ~% %~ #
8
+ # { _ _ } #
9
+ # ( * - ) #
10
+ # | / | #
11
+ # \ _, / #
12
+ # \__.__/ #
13
+ # #
14
+ ################################################################################
15
+ # This program is free software: you can redistribute it #
16
+ # and/or modify it under the terms of the GNU General Public License #
17
+ # as published by the Free Software Foundation, #
18
+ # either version 3 of the License, or (at your option) any later version. #
19
+ # #
20
+ # Commercial licensing may be available for a fee under a different license. #
21
+ ################################################################################
22
+ # This program is distributed in the hope that it will be useful, #
23
+ # but WITHOUT ANY WARRANTY; #
24
+ # without even the implied warranty of MERCHANTABILITY #
25
+ # or FITNESS FOR A PARTICULAR PURPOSE. #
26
+ # See the GNU General Public License for more details. #
27
+ # #
28
+ # You should have received a copy of the GNU General Public License #
29
+ # along with this program. If not, see <http://www.gnu.org/licenses/>. #
30
+ ################################################################################
31
+ #++
32
+
33
+ require_relative 'require'
34
+
35
+ class ModuleFunctionsTest < Test::Unit::TestCase
36
+ ITEMS = {
37
+ :public_methods => [
38
+ :my_public_module_method,
39
+ :my_default_module_function,
40
+ :my_public_module_function,
41
+ :my_protected_module_function,
42
+ :my_private_module_function,
43
+ ],
44
+ :non_public_methods => [
45
+ :my_protected_module_method,
46
+ :my_private_module_method,
47
+ ],
48
+ }
49
+
50
+ def setup
51
+ super
52
+ @class = MyClass
53
+ @module = ModuleFunctions
54
+ @my_module = MyModule
55
+ @empty = EmptyModule
56
+ end
57
+
58
+ def test_import_public_methods
59
+ assert_nothing_raised {
60
+ @module.import_public_methods(@empty, @my_module) }
61
+ assert_responses @empty, ITEMS[:public_methods]
62
+ assert_no_responses @empty, ITEMS[:non_public_methods]
63
+ end
64
+
65
+ def test_import_into_class_should_fail
66
+ assert_raise(ArgumentError) {
67
+ @module.import_public_methods(@class, @my_module) }
68
+ end
69
+
70
+ def test_import_from_class_should_fail
71
+ assert_raise(ArgumentError) {
72
+ @module.import_public_methods(@my_module, @class) }
73
+ end
74
+
75
+
76
+ ############################################################################
77
+ private
78
+ ############################################################################
79
+
80
+ def assert_responses(object, methods)
81
+ methods.each do |method|
82
+ assert_respond_to object, method
83
+ end
84
+ end
85
+
86
+ def assert_no_responses(object, methods)
87
+ methods.each do |method|
88
+ assert !object.respond_to?(method),
89
+ "#{object.class} was not expected to respond to #{method}."
90
+ end
91
+ end
92
+ end
data/test/require.rb ADDED
@@ -0,0 +1,9 @@
1
+ Bundler.require :test
2
+
3
+ require 'test/unit'
4
+
5
+ require_relative '../lib/module_functions'
6
+
7
+ require_relative 'lib/my_class'
8
+ require_relative 'lib/my_module'
9
+ require_relative 'lib/empty_module'
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: module_functions
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Travis Herrick
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-08-15 00:00:00 -04:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake_tasks
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 0
30
+ - 1
31
+ version: 0.0.1
32
+ type: :development
33
+ prerelease: false
34
+ version_requirements: *id001
35
+ description: |-
36
+ ModuleFunctions contains useful module functions.
37
+ One example is the function that adds
38
+ all public module functions to another module.
39
+ email: tthetoad@gmail.com
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files:
45
+ - README
46
+ files:
47
+ - lib/module_functions/module_functions.rb
48
+ - lib/module_functions.rb
49
+ - Gemfile
50
+ - Gemfile.lock
51
+ - module_functions.gemspec
52
+ - rakefile
53
+ - README
54
+ - test/require.rb
55
+ - test/module_functions_test.rb
56
+ - test/lib/my_module.rb
57
+ - test/lib/empty_module.rb
58
+ - test/lib/my_class.rb
59
+ has_rdoc: true
60
+ homepage: http://www.bitbucket.org/ToadJamb/gems_module_functions
61
+ licenses:
62
+ - GPLv3
63
+ post_install_message:
64
+ rdoc_options: []
65
+
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: -3178384406756779379
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ requirements: []
86
+
87
+ rubyforge_project:
88
+ rubygems_version: 1.3.7
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: This gem contains useful module functions.
92
+ test_files:
93
+ - test/require.rb
94
+ - test/module_functions_test.rb
95
+ - test/lib/my_module.rb
96
+ - test/lib/empty_module.rb
97
+ - test/lib/my_class.rb