MSP 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,5 @@
1
+ require 'codeclimate-test-reporter'
2
+ CodeClimate::TestReporter.start
3
+
4
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
5
+ require 'MSP'
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: []