facade 1.2.0 → 1.2.2
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGES.md +8 -0
- data/Gemfile +2 -6
- data/README.md +7 -2
- data/Rakefile +4 -2
- data/facade.gemspec +8 -7
- data/lib/facade.rb +15 -20
- data/spec/facade_spec.rb +2 -2
- data.tar.gz.sig +0 -0
- metadata +5 -8
- metadata.gz.sig +0 -0
- data/test/test_facade.rb +0 -67
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5e4a3d5ec80c68a69aa30d40587d8107e37458dee62192b0d2f678a4a42ab66f
|
|
4
|
+
data.tar.gz: 60d20595449e828bc62c1c635b34aad152a8ac8d8e0873bfac6a3a8433c566cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8b62c6fdc06d9ca5aefd0f3eaf3fccf9ad5fa5c6ad2e541a090bb2169e2c1bf6c3ed2cb7c1faf89b6bd47f2f9efc50f91ed899a5885177ba1ba5c19c64da52ea
|
|
7
|
+
data.tar.gz: 8043f0294e36f4af47dcca481498b6c34263237447a1c1432825f36614521be46a65ed14f86d35459f38ece8dc608ea0be7f42be1c6f6b86e3bc88948b4417bc
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGES.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## 1.2.2 - 24-Nov-2025
|
|
2
|
+
* Cache an extended object internally to avoid unnecessary, repeated calls.
|
|
3
|
+
* Minor spec update.
|
|
4
|
+
|
|
5
|
+
## 1.2.1 - 16-Feb-2024
|
|
6
|
+
* Mainly rubocop cleanup.
|
|
7
|
+
* Apparently I forgot to bump the version when I did this, oops.
|
|
8
|
+
|
|
1
9
|
## 1.2.0 - 30-Sep-2020
|
|
2
10
|
* Switched from test-unit to rspec, and added a Gemfile.
|
|
3
11
|
* Use markdown for text files.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
[](https://github.com/djberg96/facade/actions/workflows/ruby.yml)
|
|
2
|
+
|
|
1
3
|
## Synopsis
|
|
2
4
|
An easy way to implement the facade pattern in your classes. In short,
|
|
3
5
|
this library wraps singleton methods from another class as instance
|
|
@@ -5,9 +7,12 @@ methods of the current class.
|
|
|
5
7
|
|
|
6
8
|
## Installation
|
|
7
9
|
`gem install facade`
|
|
10
|
+
|
|
11
|
+
## Adding the trusted cert
|
|
12
|
+
`gem cert --add <(curl -Ls https://raw.githubusercontent.com/djberg96/facade/main/certs/djberg96_pub.pem)`
|
|
8
13
|
|
|
9
14
|
## Usage
|
|
10
|
-
```
|
|
15
|
+
```ruby
|
|
11
16
|
require 'facade'
|
|
12
17
|
|
|
13
18
|
class MyString < String
|
|
@@ -26,7 +31,7 @@ Eero Saynatkari, Eric Hodel and Michael Granger for ideas and code which I
|
|
|
26
31
|
shamelessly plagiarized.
|
|
27
32
|
|
|
28
33
|
## Copyright
|
|
29
|
-
Copyright (c) 2005-
|
|
34
|
+
Copyright (c) 2005-2023 Daniel J. Berger
|
|
30
35
|
|
|
31
36
|
## License
|
|
32
37
|
Apache-2.0
|
data/Rakefile
CHANGED
|
@@ -8,7 +8,7 @@ namespace :gem do
|
|
|
8
8
|
desc 'Create the facade gem'
|
|
9
9
|
task :create => [:clean] do
|
|
10
10
|
require 'rubygems/package'
|
|
11
|
-
spec =
|
|
11
|
+
spec = Gem::Specification.load('facade.gemspec')
|
|
12
12
|
spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
|
|
13
13
|
Gem::Package.build(spec)
|
|
14
14
|
end
|
|
@@ -21,6 +21,8 @@ namespace :gem do
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
desc "Run the test suite"
|
|
24
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
24
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
|
25
|
+
t.rspec_opts = "-f documentation"
|
|
26
|
+
end
|
|
25
27
|
|
|
26
28
|
task :default => :spec
|
data/facade.gemspec
CHANGED
|
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |spec|
|
|
4
4
|
spec.name = 'facade'
|
|
5
|
-
spec.version = '1.2.
|
|
5
|
+
spec.version = '1.2.2'
|
|
6
6
|
spec.author = 'Daniel J. Berger'
|
|
7
7
|
spec.license = 'Apache-2.0'
|
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
|
@@ -16,12 +16,13 @@ Gem::Specification.new do |spec|
|
|
|
16
16
|
spec.add_development_dependency('rspec', '~> 3.9')
|
|
17
17
|
|
|
18
18
|
spec.metadata = {
|
|
19
|
-
'homepage_uri'
|
|
20
|
-
'bug_tracker_uri'
|
|
21
|
-
'changelog_uri'
|
|
22
|
-
'documentation_uri'
|
|
23
|
-
'source_code_uri'
|
|
24
|
-
'wiki_uri'
|
|
19
|
+
'homepage_uri' => 'https://github.com/djberg96/facade',
|
|
20
|
+
'bug_tracker_uri' => 'https://github.com/djberg96/facade/issues',
|
|
21
|
+
'changelog_uri' => 'https://github.com/djberg96/facade/blob/main/CHANGES.md',
|
|
22
|
+
'documentation_uri' => 'https://github.com/djberg96/facade/wiki',
|
|
23
|
+
'source_code_uri' => 'https://github.com/djberg96/facade',
|
|
24
|
+
'wiki_uri' => 'https://github.com/djberg96/facade/wiki',
|
|
25
|
+
'rubygems_mfa_required' => 'true'
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
spec.description = <<-EOF
|
data/lib/facade.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Facade
|
|
2
4
|
# The version of the facade library
|
|
3
|
-
FACADE_VERSION = '1.2.
|
|
5
|
+
FACADE_VERSION = '1.2.2'
|
|
4
6
|
|
|
5
7
|
# The facade method will forward a singleton method as an instance
|
|
6
8
|
# method of the extending class. If no arguments are provided, then all
|
|
@@ -13,8 +15,8 @@ module Facade
|
|
|
13
15
|
# require 'facade'
|
|
14
16
|
#
|
|
15
17
|
# class MyString < String
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
+
# extend Facade
|
|
19
|
+
# facade File, :dirname, :basename
|
|
18
20
|
# end
|
|
19
21
|
#
|
|
20
22
|
# s = MyString.new('/home/djberge')
|
|
@@ -25,31 +27,24 @@ module Facade
|
|
|
25
27
|
methods = methods.flatten
|
|
26
28
|
|
|
27
29
|
if methods.empty? # Default to all methods
|
|
28
|
-
|
|
29
|
-
methods = klass.methods(false)
|
|
30
|
-
else
|
|
31
|
-
methods = klass.public_instance_methods(false)
|
|
32
|
-
end
|
|
30
|
+
methods = klass.is_a?(Class) ? klass.methods(false) : klass.public_instance_methods(false)
|
|
33
31
|
end
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
methods = methods.map{ |m| m.to_sym }
|
|
37
|
-
methods -= self.instance_methods.map{ |m| m.to_sym } # No clobber
|
|
33
|
+
methods -= instance_methods.map(&:to_sym) # No clobber
|
|
38
34
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
end
|
|
35
|
+
# Cache the extended object for modules to avoid creating it on every call
|
|
36
|
+
mod_proxy = klass.is_a?(Module) && !klass.is_a?(Class) ? Object.new.extend(klass) : nil
|
|
37
|
+
|
|
38
|
+
methods.each do |method_name|
|
|
39
|
+
define_method(method_name) do
|
|
40
|
+
meth = klass.is_a?(Class) ? klass.method(method_name) : mod_proxy.method(method_name)
|
|
46
41
|
|
|
47
|
-
if meth.arity.zero?
|
|
42
|
+
if meth.arity.zero?
|
|
48
43
|
meth.call
|
|
49
44
|
else
|
|
50
45
|
meth.call(self)
|
|
51
46
|
end
|
|
52
|
-
|
|
47
|
+
end
|
|
53
48
|
end
|
|
54
49
|
end
|
|
55
50
|
end
|
data/spec/facade_spec.rb
CHANGED
|
@@ -28,7 +28,7 @@ RSpec.describe Facade do
|
|
|
28
28
|
let(:string) { facade.new('/home/whatever') }
|
|
29
29
|
|
|
30
30
|
example "facade module has expected version set and it's frozen" do
|
|
31
|
-
expect(Facade::FACADE_VERSION).to eq('1.2.
|
|
31
|
+
expect(Facade::FACADE_VERSION).to eq('1.2.2')
|
|
32
32
|
expect(Facade::FACADE_VERSION).to be_frozen
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -54,7 +54,7 @@ RSpec.describe Facade do
|
|
|
54
54
|
expect(string.blockdev?).to eq('test')
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
example "
|
|
57
|
+
example "module methods behave as expected" do
|
|
58
58
|
expect(string).to respond_to(:testme)
|
|
59
59
|
expect(string.testme).to eq('/home/whatever')
|
|
60
60
|
end
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: facade
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel J. Berger
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain:
|
|
11
10
|
- |
|
|
@@ -35,7 +34,7 @@ cert_chain:
|
|
|
35
34
|
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
|
36
35
|
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
|
37
36
|
-----END CERTIFICATE-----
|
|
38
|
-
date:
|
|
37
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
39
38
|
dependencies:
|
|
40
39
|
- !ruby/object:Gem::Dependency
|
|
41
40
|
name: rake
|
|
@@ -83,18 +82,17 @@ files:
|
|
|
83
82
|
- facade.gemspec
|
|
84
83
|
- lib/facade.rb
|
|
85
84
|
- spec/facade_spec.rb
|
|
86
|
-
- test/test_facade.rb
|
|
87
85
|
homepage: https://github.com/djberg96/facade
|
|
88
86
|
licenses:
|
|
89
87
|
- Apache-2.0
|
|
90
88
|
metadata:
|
|
91
89
|
homepage_uri: https://github.com/djberg96/facade
|
|
92
90
|
bug_tracker_uri: https://github.com/djberg96/facade/issues
|
|
93
|
-
changelog_uri: https://github.com/djberg96/facade/blob/
|
|
91
|
+
changelog_uri: https://github.com/djberg96/facade/blob/main/CHANGES.md
|
|
94
92
|
documentation_uri: https://github.com/djberg96/facade/wiki
|
|
95
93
|
source_code_uri: https://github.com/djberg96/facade
|
|
96
94
|
wiki_uri: https://github.com/djberg96/facade/wiki
|
|
97
|
-
|
|
95
|
+
rubygems_mfa_required: 'true'
|
|
98
96
|
rdoc_options: []
|
|
99
97
|
require_paths:
|
|
100
98
|
- lib
|
|
@@ -109,8 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
109
107
|
- !ruby/object:Gem::Version
|
|
110
108
|
version: '0'
|
|
111
109
|
requirements: []
|
|
112
|
-
rubygems_version: 3.
|
|
113
|
-
signing_key:
|
|
110
|
+
rubygems_version: 3.6.9
|
|
114
111
|
specification_version: 4
|
|
115
112
|
summary: An easy way to implement the facade pattern in your class
|
|
116
113
|
test_files:
|
metadata.gz.sig
CHANGED
|
Binary file
|
data/test/test_facade.rb
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
#########################################################################
|
|
2
|
-
# test_facade.rb
|
|
3
|
-
#
|
|
4
|
-
# Test suite for the Facade module. This test suite should be run via
|
|
5
|
-
# the 'rake test' task.
|
|
6
|
-
#########################################################################
|
|
7
|
-
require 'test/unit'
|
|
8
|
-
require 'facade'
|
|
9
|
-
|
|
10
|
-
module Baz
|
|
11
|
-
def testme(str)
|
|
12
|
-
str
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
class FooString < String
|
|
17
|
-
extend Facade
|
|
18
|
-
facade File, :basename, 'dirname'
|
|
19
|
-
facade Dir
|
|
20
|
-
facade Baz
|
|
21
|
-
|
|
22
|
-
def blockdev?
|
|
23
|
-
'test'
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
class TC_Facade < Test::Unit::TestCase
|
|
28
|
-
def setup
|
|
29
|
-
@str = FooString.new('/home/djberge')
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def test_facade_version
|
|
33
|
-
assert_equal('1.1.1', Facade::FACADE_VERSION)
|
|
34
|
-
assert_true(Facade::FACADE_VERSION.frozen?)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def test_file_methods
|
|
38
|
-
assert_respond_to(@str, :basename)
|
|
39
|
-
assert_respond_to(@str, :dirname)
|
|
40
|
-
assert_raises(NoMethodError){ @str.executable? }
|
|
41
|
-
assert_raises(NoMethodError){ @str.chardev? }
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def test_file_method_return_values
|
|
45
|
-
assert_equal('djberge', @str.basename)
|
|
46
|
-
assert_equal('/home', @str.dirname)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def test_dir_methods
|
|
50
|
-
assert_respond_to(@str, :pwd)
|
|
51
|
-
assert_respond_to(@str, :entries)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def test_no_clobber
|
|
55
|
-
assert_respond_to(@str, :blockdev?)
|
|
56
|
-
assert_equal('test', @str.blockdev?)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def test_module_methods
|
|
60
|
-
assert_respond_to(@str, :testme)
|
|
61
|
-
assert_equal('/home/djberge', @str.testme)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def teardown
|
|
65
|
-
@str = nil
|
|
66
|
-
end
|
|
67
|
-
end
|