visibility_checker 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG +3 -0
- data/MIT-LICENSE +18 -0
- data/README.rdoc +76 -0
- data/lib/visibility_checker.rb +38 -0
- metadata +90 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0c5361039832d163132d6ed6735a0682ba89f2ba6cc25dac95f5e2a87ffd259a
|
4
|
+
data.tar.gz: db1a56409727393c6db2da6ced345647fa876698980ba567f3d64f39de82df92
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f499de1f8dfb91855e20ecd67e6158078246dfdec97c19ca2d81a37eb1685c1d081f6b85b2468ba75c086eb15b29111adc5b46846a3c88d7b7eb5c00e739cdad
|
7
|
+
data.tar.gz: ba12a25846d8f653682d1e05558168c1d66a397a538f3f3eaf6cc67b0cc4b61bbe14bf4f7a94e362b3930f31223160dcb7370270745cae9dd9d5e98f383cd8c7
|
data/CHANGELOG
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Copyright (c) 2020 Jeremy Evans
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to
|
5
|
+
deal in the Software without restriction, including without limitation the
|
6
|
+
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
7
|
+
sell copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
16
|
+
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
17
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
18
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
= VisibilityChecker
|
2
|
+
|
3
|
+
VisibilityChecker exposes a single method, visibility_changes, for returning
|
4
|
+
an array with places where any ancestor of the given class/module has changed the
|
5
|
+
visibility of any of the methods classes/modules methods.
|
6
|
+
|
7
|
+
= Installation
|
8
|
+
|
9
|
+
gem install visibility_checker
|
10
|
+
|
11
|
+
= Source Code
|
12
|
+
|
13
|
+
Source code is available on GitHub at https://github.com/jeremyevans/visibility_checker
|
14
|
+
|
15
|
+
= Usage
|
16
|
+
|
17
|
+
Here's an example showing normal use:
|
18
|
+
|
19
|
+
require 'visibility_checker'
|
20
|
+
|
21
|
+
class C
|
22
|
+
def a
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
VisibilityChecker.visibility_changes(C)
|
27
|
+
# => []
|
28
|
+
|
29
|
+
module M
|
30
|
+
def a
|
31
|
+
end
|
32
|
+
end
|
33
|
+
C.include M
|
34
|
+
|
35
|
+
VisibilityChecker.visibility_changes(C)
|
36
|
+
# => []
|
37
|
+
|
38
|
+
class C
|
39
|
+
private :a
|
40
|
+
end
|
41
|
+
|
42
|
+
VisibilityChecker.visibility_changes(C)
|
43
|
+
# => [#<struct VisibilityChecker::VisibilityChange
|
44
|
+
# method=:a, defined_in=M, original_visibility=:public,
|
45
|
+
# overridden_by=C, new_visibility=:private>]
|
46
|
+
|
47
|
+
You can also extend classes or modules with +VisibilityChecker+
|
48
|
+
and call +visibility_changes+ on them:
|
49
|
+
|
50
|
+
C.extend VisibilityChecker
|
51
|
+
C.visibility_changes
|
52
|
+
# => [#<struct VisibilityChecker::VisibilityChange ... >]
|
53
|
+
|
54
|
+
Or if you want to add the +visibility_changes+ method to all
|
55
|
+
classes and modules, have +Module+ include it:
|
56
|
+
|
57
|
+
Module.include VisibilityChecker
|
58
|
+
M.visibility_changes
|
59
|
+
# => []
|
60
|
+
|
61
|
+
+VisibilityChecker.visibility_changes+ accepts two keyword arguments:
|
62
|
+
|
63
|
+
stop_at :: The ancestor at which to stop for visibility changes, Object
|
64
|
+
by default.
|
65
|
+
skip_owners :: Skip reporting a visibility change if the method that
|
66
|
+
was overridden was defined in this module/class. Set to
|
67
|
+
Kernel by default as general Ruby practice is that Kernel
|
68
|
+
methods can be overridden (e.g. Enumerable#select).
|
69
|
+
|
70
|
+
= License
|
71
|
+
|
72
|
+
MIT
|
73
|
+
|
74
|
+
= Author
|
75
|
+
|
76
|
+
Jeremy Evans <code@jeremyevans.net>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module VisibilityChecker
|
2
|
+
# Structure holding data on method visibility changes
|
3
|
+
VisibilityChange = Struct.new(:method, :defined_in, :original_visibility, :overridden_by, :new_visibility)
|
4
|
+
|
5
|
+
# Return an array of VisibilityChanges for any changes in method visibility in any
|
6
|
+
# of the the ancestors of +klass+ before +stop_at+, unless the owner of the method is
|
7
|
+
# in +skip_owners+. This will be an empty array if there are no visibility changes.
|
8
|
+
def self.visibility_changes(klass, stop_at: Object, skip_owners: [Kernel])
|
9
|
+
meths = {}
|
10
|
+
changes = []
|
11
|
+
|
12
|
+
klass.ancestors.each do |mod|
|
13
|
+
break if mod == stop_at
|
14
|
+
|
15
|
+
[:public, :private, :protected].each do |vis_type|
|
16
|
+
mod.send("#{vis_type}_instance_methods").each do |meth|
|
17
|
+
prev_vis_type, prev_mod = meths[meth]
|
18
|
+
unless prev_vis_type.nil? || prev_vis_type == vis_type
|
19
|
+
owner = mod.instance_method(meth).owner
|
20
|
+
unless skip_owners.include?(owner)
|
21
|
+
changes << VisibilityChange.new(meth, mod.instance_method(meth).owner, vis_type, prev_mod, prev_vis_type)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
meths[meth] = [vis_type, mod]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
changes
|
30
|
+
end
|
31
|
+
|
32
|
+
# Detect visibility changes in the receiver's ancestors. This should only
|
33
|
+
# be used if you are extending a class or module with VisibilityChecker or
|
34
|
+
# including it in Class or Module.
|
35
|
+
def visibility_changes
|
36
|
+
VisibilityChecker.visibility_changes(self)
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: visibility_checker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jeremy Evans
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-04-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
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: minitest-global_expectations
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
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: |
|
42
|
+
VisibilityChecker exposes a single method, visibility_changes, for returning
|
43
|
+
an array with places where any ancestor of the given class has changed the
|
44
|
+
visibility of any of the classes's methods.
|
45
|
+
email: code@jeremyevans.net
|
46
|
+
executables: []
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files:
|
49
|
+
- README.rdoc
|
50
|
+
- CHANGELOG
|
51
|
+
- MIT-LICENSE
|
52
|
+
files:
|
53
|
+
- CHANGELOG
|
54
|
+
- MIT-LICENSE
|
55
|
+
- README.rdoc
|
56
|
+
- lib/visibility_checker.rb
|
57
|
+
homepage: http://github.com/jeremyevans/visibility_checker
|
58
|
+
licenses:
|
59
|
+
- MIT
|
60
|
+
metadata:
|
61
|
+
bug_tracker_uri: https://github.com/jeremyevans/visibility_checker/issues
|
62
|
+
changelog_uri: https://github.com/jeremyevans/visibility_checker/blob/master/CHANGELOG
|
63
|
+
source_code_uri: https://github.com/jeremyevans/visibility_checker
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options:
|
66
|
+
- "--quiet"
|
67
|
+
- "--line-numbers"
|
68
|
+
- "--inline-source"
|
69
|
+
- "--title"
|
70
|
+
- 'VisibilityChecker: Detect method visibility changes'
|
71
|
+
- "--main"
|
72
|
+
- README.rdoc
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 2.0.0
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubygems_version: 3.1.2
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Detect method visibility changes
|
90
|
+
test_files: []
|