mabbre 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/README.md +2 -0
- data/lib/mabbre/compatibility.rb +49 -0
- data/lib/mabbre/interpreter.rb +12 -0
- data/lib/mabbre/patch/object_mixin/respond_to_missing.rb +36 -0
- data/lib/mabbre/version.rb +1 -1
- data/lib/mabbre.rb +1 -0
- data/mabbre.gemspec +8 -3
- data/spec/lib/mabbre/mixin_spec.rb +6 -23
- data/spec/lib/mabbre/patch/object_mixin/respond_to_missing_spec.rb +27 -0
- metadata +12 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c016656016fd3c08ce23dfa62e5c13068d7ad20d
|
4
|
+
data.tar.gz: 543dfd9db25ba624fa8f7a5295313b624ec9c347
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 08ff8ad423c2967b4eef88c51450533917cb3adcf570d66a87406256d2e9a928af095e46ffa311f9996f87d82f57e2fd4818d329b5eef7e6dec55c5e3f5de7ae
|
7
|
+
data.tar.gz: 98a2a1222e1e7dbd2544f29f8b5adabea5d4860322277bc58b5b9264ea2ebaee7a131ced8fb4c173246fd856b87678daedf632b68f4e788394d4cc6cea0d4732
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
module MAbbre # rubocop:disable Style/Documentation
|
2
|
+
##
|
3
|
+
# This is a temporary module that is run when loading MAbbre in order to add patches on some Ruby
|
4
|
+
# versions/implementations. After the environment is patched it will be automatically removed.
|
5
|
+
module Compatibility
|
6
|
+
##
|
7
|
+
# Relative path to the directory where patch files for the Object class live.
|
8
|
+
PATH_TO_OBJECT_PATCHES = "mabbre/patch/object_mixin".freeze
|
9
|
+
|
10
|
+
##
|
11
|
+
# A hash of patch names for the Object class. Each patch name has a +true+ or +false+ value assigned that represents
|
12
|
+
# if they need to be applied or not.
|
13
|
+
OBJECT_PATCHES = {
|
14
|
+
:respond_to_missing => !Object.private_instance_methods.map(&:to_sym).include?(:respond_to_missing?)
|
15
|
+
}.freeze
|
16
|
+
|
17
|
+
class << self
|
18
|
+
private
|
19
|
+
|
20
|
+
##
|
21
|
+
# call-seq:
|
22
|
+
# init_self() => nil
|
23
|
+
#
|
24
|
+
# This method is automatically called by this module in order to apply all patches.
|
25
|
+
#
|
26
|
+
# Returns a +nil+ value.
|
27
|
+
def init_self
|
28
|
+
check_object
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# call-seq:
|
34
|
+
# check_object() => Object or nil
|
35
|
+
#
|
36
|
+
# Checks all available patches for the Object class and applies the ones that are needed.
|
37
|
+
#
|
38
|
+
# Returns Object if patches were applied or +nil+ otherwise.
|
39
|
+
def check_object
|
40
|
+
OBJECT_PATCHES.each {|patch, needed| require "#{PATH_TO_OBJECT_PATCHES}/#{patch}" if needed }
|
41
|
+
Object.instance_eval { include Patch::ObjectMixin } if OBJECT_PATCHES.values.any?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
init_self
|
46
|
+
end
|
47
|
+
|
48
|
+
remove_const :Compatibility
|
49
|
+
end
|
data/lib/mabbre/interpreter.rb
CHANGED
@@ -19,5 +19,17 @@ module MAbbre
|
|
19
19
|
super
|
20
20
|
end
|
21
21
|
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# call-seq:
|
25
|
+
# respond_to_missing?(name, include_all) => true or false
|
26
|
+
#
|
27
|
+
# Checks if this object responds to abbreviation +name+. The +include_all+ parameter is not used but it will
|
28
|
+
# be passed to +super+ if no suitable candidate is found.
|
29
|
+
#
|
30
|
+
# Returns +true+ if this object responds to +name+, or whatever +super+ returns otherwise.
|
31
|
+
def respond_to_missing?(name, include_all)
|
32
|
+
self.class.tracked_methods(MAbbre).one? {|m| m.to_s =~ /\A#{name}/ } or super
|
33
|
+
end
|
22
34
|
end
|
23
35
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module MAbbre
|
2
|
+
##
|
3
|
+
# Contains all compatibility patches that may be added to the environment depending on the current Ruby
|
4
|
+
# version/implementation. This module won't be defined in an environment were no patches were applied.
|
5
|
+
module Patch
|
6
|
+
##
|
7
|
+
# Contains all patches related to the Object class. The methods contained within will only be defined if they are
|
8
|
+
# needed.
|
9
|
+
module ObjectMixin
|
10
|
+
##
|
11
|
+
# call-seq:
|
12
|
+
# respond_to?(name, include_all = false) => true or false
|
13
|
+
#
|
14
|
+
# Passes +name+ and +include_all+ to +super+, and if +false+ is returned then #respond_to_missing? will be
|
15
|
+
# called.
|
16
|
+
#
|
17
|
+
# Returns +true+ if this object responds to +name+, and +false+ otherwise.
|
18
|
+
def respond_to?(name, include_all = false)
|
19
|
+
super or respond_to_missing?(name, include_all)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
##
|
25
|
+
# call-seq:
|
26
|
+
# respond_to_missing?(name, include_all) => false
|
27
|
+
#
|
28
|
+
# This is used as the base implementation of #respond_to_missing?.
|
29
|
+
#
|
30
|
+
# Returns +false+ irregardless of the value of +name+ and +include_all+.
|
31
|
+
def respond_to_missing?(_name, _include_all)
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/mabbre/version.rb
CHANGED
data/lib/mabbre.rb
CHANGED
data/mabbre.gemspec
CHANGED
@@ -8,8 +8,13 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = MAbbre::VERSION
|
9
9
|
spec.authors = ["Gabriel de Oliveira"]
|
10
10
|
spec.email = ["deoliveira.gab@gmail.com"]
|
11
|
-
spec.summary = "
|
12
|
-
spec.description = "
|
11
|
+
spec.summary = "Enable shortened method names on classes and modules."
|
12
|
+
spec.description = <<-EOS.strip.gsub(/\n/, "").gsub(/\s{2,}/, " ")
|
13
|
+
MAbbre allows a group of methods in a Class or a
|
14
|
+
Module to be accessed using an abbreviated form.
|
15
|
+
These methods can be defined anywhere within a
|
16
|
+
hierarchy of inclusion and/or inheritance.
|
17
|
+
EOS
|
13
18
|
spec.homepage = "https://github.com/gdeoliveira/mabbre"
|
14
19
|
spec.license = "MIT"
|
15
20
|
|
@@ -17,5 +22,5 @@ Gem::Specification.new do |spec|
|
|
17
22
|
spec.test_files = spec.files.grep(/^(test|spec|features)\//)
|
18
23
|
spec.require_paths = ["lib"]
|
19
24
|
|
20
|
-
spec.add_dependency "mtrack", "~> 1.1
|
25
|
+
spec.add_dependency "mtrack", "~> 1.1"
|
21
26
|
end
|
@@ -150,29 +150,6 @@ describe MAbbre::Mixin do
|
|
150
150
|
:meth_11_extra, :meth_12_extra, :meth_13_extra,
|
151
151
|
:meth_21_extra, :meth_22_extra, :meth_23_extra])
|
152
152
|
end
|
153
|
-
|
154
|
-
describe "instance" do
|
155
|
-
subject { super_class.new }
|
156
|
-
|
157
|
-
it "avoids calling ambiguous methods" do
|
158
|
-
expect { subject.meth }.to raise_error(NoMethodError)
|
159
|
-
expect { subject.meth_0 }.to raise_error(NoMethodError)
|
160
|
-
expect { subject.meth_1 }.to raise_error(NoMethodError)
|
161
|
-
expect { subject.meth_2 }.to raise_error(NoMethodError)
|
162
|
-
end
|
163
|
-
|
164
|
-
it "calls resolvable methods that can be abbreviated" do
|
165
|
-
expect(subject.meth_01).to be(:meth_01_extra)
|
166
|
-
expect(subject.meth_12).to be(:meth_12_extra)
|
167
|
-
expect(subject.meth_23).to be(:meth_23_extra)
|
168
|
-
end
|
169
|
-
|
170
|
-
it "avoids calling resolvable methods that can't be abbreviated" do
|
171
|
-
expect { subject.meth_00 }.to raise_error(NoMethodError)
|
172
|
-
expect { subject.meth_10 }.to raise_error(NoMethodError)
|
173
|
-
expect { subject.meth_20 }.to raise_error(NoMethodError)
|
174
|
-
end
|
175
|
-
end
|
176
153
|
end
|
177
154
|
|
178
155
|
context "sub class" do
|
@@ -188,6 +165,8 @@ describe MAbbre::Mixin do
|
|
188
165
|
describe "instance" do
|
189
166
|
subject { sub_class.new }
|
190
167
|
|
168
|
+
it { should_not respond_to(:meth, :meth_0, :meth_1, :meth_2, :meth_3) }
|
169
|
+
|
191
170
|
it "avoids calling ambiguous methods" do
|
192
171
|
expect { subject.meth }.to raise_error(NoMethodError)
|
193
172
|
expect { subject.meth_0 }.to raise_error(NoMethodError)
|
@@ -196,6 +175,8 @@ describe MAbbre::Mixin do
|
|
196
175
|
expect { subject.meth_3 }.to raise_error(NoMethodError)
|
197
176
|
end
|
198
177
|
|
178
|
+
it { should respond_to(:meth_01, :meth_12, :meth_23, :meth_31) }
|
179
|
+
|
199
180
|
it "calls resolvable methods that can be abbreviated" do
|
200
181
|
expect(subject.meth_02).to be(:meth_02_extra)
|
201
182
|
expect(subject.meth_13).to be(:meth_13_extra)
|
@@ -203,6 +184,8 @@ describe MAbbre::Mixin do
|
|
203
184
|
expect(subject.meth_32).to be(:meth_32_extra)
|
204
185
|
end
|
205
186
|
|
187
|
+
it { should_not respond_to(:meth_00, :meth_10, :meth_20, :meth_30) }
|
188
|
+
|
206
189
|
it "avoids calling resolvable methods that can't be abbreviated" do
|
207
190
|
expect { subject.meth_09 }.to raise_error(NoMethodError)
|
208
191
|
expect { subject.meth_19 }.to raise_error(NoMethodError)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "mabbre/patch/object_mixin/respond_to_missing"
|
3
|
+
|
4
|
+
describe MAbbre::Patch::ObjectMixin do
|
5
|
+
subject do
|
6
|
+
dc = described_class
|
7
|
+
Class.new.instance_eval { include dc }.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#respond_to?" do
|
11
|
+
it "calls #respond_to_missing? at least once" do
|
12
|
+
expect(subject).to receive(:respond_to_missing?).with(:test_method, false).at_least(:once)
|
13
|
+
subject.respond_to? :test_method
|
14
|
+
end
|
15
|
+
|
16
|
+
it "calls #respond_to_missing? at most twice" do
|
17
|
+
expect(subject).to receive(:respond_to_missing?).with(:test_method, false).at_most(:twice)
|
18
|
+
subject.respond_to? :test_method
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#respond_to_missing?" do
|
23
|
+
it "returns false" do
|
24
|
+
expect(subject.send(:respond_to_missing?, :test_method, true)).to be(false)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mabbre
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel de Oliveira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mtrack
|
@@ -16,15 +16,17 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.1
|
19
|
+
version: '1.1'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.1
|
27
|
-
description:
|
26
|
+
version: '1.1'
|
27
|
+
description: MAbbre allows a group of methods in a Class or a Module to be accessed
|
28
|
+
using an abbreviated form. These methods can be defined anywhere within a hierarchy
|
29
|
+
of inclusion and/or inheritance.
|
28
30
|
email:
|
29
31
|
- deoliveira.gab@gmail.com
|
30
32
|
executables: []
|
@@ -41,13 +43,16 @@ files:
|
|
41
43
|
- README.md
|
42
44
|
- Rakefile
|
43
45
|
- lib/mabbre.rb
|
46
|
+
- lib/mabbre/compatibility.rb
|
44
47
|
- lib/mabbre/extension.rb
|
45
48
|
- lib/mabbre/interpreter.rb
|
46
49
|
- lib/mabbre/mixin.rb
|
50
|
+
- lib/mabbre/patch/object_mixin/respond_to_missing.rb
|
47
51
|
- lib/mabbre/version.rb
|
48
52
|
- mabbre.gemspec
|
49
53
|
- spec/.rubocop.yml
|
50
54
|
- spec/lib/mabbre/mixin_spec.rb
|
55
|
+
- spec/lib/mabbre/patch/object_mixin/respond_to_missing_spec.rb
|
51
56
|
- spec/lib/mabbre/version_spec.rb
|
52
57
|
- spec/spec_helper.rb
|
53
58
|
- tasks/console.rb
|
@@ -75,9 +80,10 @@ rubyforge_project:
|
|
75
80
|
rubygems_version: 2.4.4
|
76
81
|
signing_key:
|
77
82
|
specification_version: 4
|
78
|
-
summary:
|
83
|
+
summary: Enable shortened method names on classes and modules.
|
79
84
|
test_files:
|
80
85
|
- spec/.rubocop.yml
|
81
86
|
- spec/lib/mabbre/mixin_spec.rb
|
87
|
+
- spec/lib/mabbre/patch/object_mixin/respond_to_missing_spec.rb
|
82
88
|
- spec/lib/mabbre/version_spec.rb
|
83
89
|
- spec/spec_helper.rb
|