MSP 1.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.
- checksums.yaml +7 -0
- data/lib/MSP.rb +17 -0
- data/lib/MSP/service.rb +11 -0
- data/lib/MSP/singleton_service.rb +11 -0
- data/spec/MSP/service_spec.rb +51 -0
- data/spec/MSP/singleton_service_spec.rb +41 -0
- data/spec/MSP_spec.rb +40 -0
- data/spec/spec_helper.rb +5 -0
- metadata +136 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7754aef088468f8c9e0015cfece9a4689ba1586e
|
4
|
+
data.tar.gz: 55cc0512adacb9a486bb668e397eea07e537905c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 19a9eb3bfc320a7764b87bd0b7c2316c4ef6e7c287228721bcb988d557796326a51c9a9bb41eb18fc50be056d614a42bdc183b220e5235a2f18acb0d13550ca0
|
7
|
+
data.tar.gz: 8ea71eaefd98b9e854d2f174919a5b9ea9acc9c1dd15f8138da1501230a9a92a88ea883b31e06c50333c77d5cce5d210ec6dac5f4d6d58a16a0ae8f8c8adfc90
|
data/lib/MSP.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
require_relative 'MSP/service'
|
3
|
+
require_relative 'MSP/singleton_service'
|
4
|
+
|
5
|
+
# Managed Service Provider module
|
6
|
+
# when included it includes the correspondent correct module
|
7
|
+
# to define the method_missing based on whether the class included this modeule
|
8
|
+
# is a Singleton or not
|
9
|
+
module MSP
|
10
|
+
def self.included(klass)
|
11
|
+
if klass.included_modules.include? Singleton
|
12
|
+
klass.singleton_class.send(:include, MSP::SingletonService)
|
13
|
+
else
|
14
|
+
klass.singleton_class.send(:include, MSP::Service)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/MSP/service.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
module MSP
|
2
|
+
# Service Module
|
3
|
+
module Service
|
4
|
+
# When class method is called
|
5
|
+
# Try initializing an object of the class
|
6
|
+
# and call the method passed with it's arguments
|
7
|
+
def method_missing(method, *args)
|
8
|
+
new.send(method.to_sym, *args)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module MSP
|
2
|
+
# Singletone Service Module
|
3
|
+
module SingletonService
|
4
|
+
# When class method is called
|
5
|
+
# Try calling the method passed with it's arguments
|
6
|
+
# on the singleton instance
|
7
|
+
def method_missing(method, *args)
|
8
|
+
instance.send(method.to_sym, *args)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class DummyClass
|
2
|
+
include MSP
|
3
|
+
|
4
|
+
def pub(param); end
|
5
|
+
|
6
|
+
protected
|
7
|
+
|
8
|
+
def pro(param); end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def pri(param); end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe MSP::Service do
|
16
|
+
subject { DummyClass.new }
|
17
|
+
describe '#method_missing' do
|
18
|
+
it 'calls #pub public method' do
|
19
|
+
expect_any_instance_of(DummyClass).to receive(:pub).with('arg')
|
20
|
+
DummyClass.pub('arg')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'calls #pro protected method' do
|
24
|
+
expect_any_instance_of(DummyClass).to receive(:pro).with('arg')
|
25
|
+
DummyClass.pro('arg')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'calls #pri private method' do
|
29
|
+
expect_any_instance_of(DummyClass).to receive(:pri).with('arg')
|
30
|
+
DummyClass.pri('arg')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'does not call methods on existing objects' do
|
34
|
+
expect(subject).not_to receive(:pub)
|
35
|
+
expect(subject).not_to receive(:pro)
|
36
|
+
expect(subject).not_to receive(:pri)
|
37
|
+
|
38
|
+
DummyClass.pub('arg')
|
39
|
+
DummyClass.pro('arg')
|
40
|
+
DummyClass.pri('arg')
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'raises NoMethodError' do
|
44
|
+
expect { DummyClass.wtf }.to raise_error NoMethodError
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'raises ArgumentError' do
|
48
|
+
expect { DummyClass.pub }.to raise_error ArgumentError
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class DummySingletonClass
|
2
|
+
include Singleton
|
3
|
+
include MSP
|
4
|
+
|
5
|
+
def pub(param); end
|
6
|
+
|
7
|
+
protected
|
8
|
+
|
9
|
+
def pro(param); end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def pri(param); end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe MSP::SingletonService do
|
17
|
+
describe '#method_missing' do
|
18
|
+
it 'calls #pub public method' do
|
19
|
+
expect(DummySingletonClass.instance).to receive(:pub).with('arg')
|
20
|
+
DummySingletonClass.pub('arg')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'calls #pro protected method' do
|
24
|
+
expect(DummySingletonClass.instance).to receive(:pro).with('arg')
|
25
|
+
DummySingletonClass.pro('arg')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'calls #pri private method' do
|
29
|
+
expect(DummySingletonClass.instance).to receive(:pri).with('arg')
|
30
|
+
DummySingletonClass.pri('arg')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'raises NoMethodError' do
|
34
|
+
expect { DummySingletonClass.wtf }.to raise_error NoMethodError
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'raises ArgumentError' do
|
38
|
+
expect { DummySingletonClass.pub }.to raise_error ArgumentError
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/MSP_spec.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
describe MSP do
|
4
|
+
describe '.included' do
|
5
|
+
describe 'class' do
|
6
|
+
class DummyClass
|
7
|
+
include MSP
|
8
|
+
end
|
9
|
+
|
10
|
+
class DummySingletonClass
|
11
|
+
include Singleton
|
12
|
+
include MSP
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'includes MSP::Service' do
|
16
|
+
expect(DummyClass).to be_a_kind_of(MSP::Service)
|
17
|
+
expect(DummySingletonClass).not_to be_a_kind_of(MSP::Service)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'includes MSP::SingletonService' do
|
21
|
+
expect(DummyClass).not_to be_a_kind_of(MSP::SingletonService)
|
22
|
+
expect(DummySingletonClass).to be_a_kind_of(MSP::SingletonService)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'module' do
|
27
|
+
module DummyModule
|
28
|
+
include MSP
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'does not include MSP::SingletonService' do
|
32
|
+
expect(DummyModule).not_to be_a_kind_of(MSP::SingletonService)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'includes MSP::Service' do
|
36
|
+
expect(DummyModule).to be_a_kind_of(MSP::Service)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: MSP
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- mad-raz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-04-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
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: rake
|
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
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry-byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: codeclimate-test-reporter
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Automatically defines class methods for service providers or any general
|
98
|
+
ruby class
|
99
|
+
email:
|
100
|
+
- abdelrazzak.ahmed@gmail.com
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- lib/MSP.rb
|
106
|
+
- lib/MSP/service.rb
|
107
|
+
- lib/MSP/singleton_service.rb
|
108
|
+
- spec/MSP/service_spec.rb
|
109
|
+
- spec/MSP/singleton_service_spec.rb
|
110
|
+
- spec/MSP_spec.rb
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
homepage: https://github.com/mad-raz/MSP
|
113
|
+
licenses:
|
114
|
+
- MIT
|
115
|
+
metadata: {}
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.0.0
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 2.5.1
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: Managed Service Provider for Rails Apps (or any PORO)
|
136
|
+
test_files: []
|