services_base 0.1.0 → 0.2.0
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
- data/.gitignore +2 -0
- data/Guardfile +0 -28
- data/README.md +16 -7
- data/lib/services/base.rb +22 -0
- data/lib/services/responses/base.rb +20 -0
- data/lib/services/responses/error.rb +15 -0
- data/lib/services/responses/success.rb +9 -0
- data/lib/services/version.rb +3 -0
- data/lib/services_base.rb +5 -22
- data/services_base.gemspec +4 -4
- metadata +9 -5
- data/lib/services_base/version.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d38d697b9e9bd7f2c9f293a7f19142299b3aaaf2
|
4
|
+
data.tar.gz: 3327ca26383ffa8af40a3ae39831824c548f03e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a128d2158525202c356a78cdfd5ba3da0a7d2c91eadbf3001cd87131a439ad7a23c8dcea47699140637f2d595c454a3cf3a9ca65180c108ab7dd9fa863617e7e
|
7
|
+
data.tar.gz: 3617ee100b4ad20aa0cfc5f38b1fefc8ccb0baf69b37e7206f2e257cabe13ae1d01b7577af39a1f98830b656099967c5c8670c44d1b0c0b581bf8426834e5557
|
data/Guardfile
CHANGED
@@ -11,32 +11,4 @@ guard :rspec, cmd: "bundle exec rspec" do
|
|
11
11
|
# Ruby files
|
12
12
|
ruby = dsl.ruby
|
13
13
|
dsl.watch_spec_files_for(ruby.lib_files)
|
14
|
-
|
15
|
-
# # Rails files
|
16
|
-
# rails = dsl.rails(view_extensions: %w(erb haml slim))
|
17
|
-
# dsl.watch_spec_files_for(rails.app_files)
|
18
|
-
# dsl.watch_spec_files_for(rails.views)
|
19
|
-
|
20
|
-
# watch(rails.controllers) do |m|
|
21
|
-
# [
|
22
|
-
# rspec.spec.call("routing/#{m[1]}_routing"),
|
23
|
-
# rspec.spec.call("controllers/#{m[1]}_controller"),
|
24
|
-
# rspec.spec.call("acceptance/#{m[1]}")
|
25
|
-
# ]
|
26
|
-
# end
|
27
|
-
|
28
|
-
# # Rails config changes
|
29
|
-
# watch(rails.spec_helper) { rspec.spec_dir }
|
30
|
-
# watch(rails.routes) { "#{rspec.spec_dir}/routing" }
|
31
|
-
# watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
|
32
|
-
|
33
|
-
# # Capybara features specs
|
34
|
-
# watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
|
35
|
-
# watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }
|
36
|
-
|
37
|
-
# # Turnip features and steps
|
38
|
-
# watch(%r{^spec/acceptance/(.+)\.feature$})
|
39
|
-
# watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
|
40
|
-
# Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
|
41
|
-
# end
|
42
14
|
end
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# ServicesBase
|
2
2
|
|
3
|
-
ServicesBase is a very simple
|
3
|
+
ServicesBase is a very simple skeleton for implementing Service Objects and Micro-Services in Ruby.
|
4
|
+
|
5
|
+
It implements a Base module for your service objects (`Services::Base`) and two Response classes (`Services::Responses::Success` and `Services::Responses::Error`).
|
4
6
|
|
5
7
|
It was heavily inspired by Chris Holtz's excellent article [Organize your app with service objects](http://chrisholtz.com/blog/organize-your-app-with-service-objects/). You should read it.
|
6
8
|
|
@@ -21,15 +23,22 @@ Or install it yourself as:
|
|
21
23
|
$ gem install services_base
|
22
24
|
|
23
25
|
## Usage
|
26
|
+
```ruby
|
27
|
+
class Services::MyService
|
28
|
+
include Services::Base
|
24
29
|
|
25
|
-
|
26
|
-
|
30
|
+
def call(id)
|
31
|
+
# do something
|
32
|
+
result_object = { foo: 'bar' }
|
27
33
|
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
34
|
+
# and return success
|
35
|
+
return Services::Responses::Success.new(result_object)
|
32
36
|
|
37
|
+
# or if there's an error:
|
38
|
+
return Services::Responses::Error.new(result_object, error_message: 'Something went wrong', error_code: 123)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
```
|
33
42
|
|
34
43
|
## License
|
35
44
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Significantly inspired by http://chrisholtz.com/blog/organize-your-app-with-service-objects/
|
2
|
+
module Services
|
3
|
+
module Base
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
base.include InstanceMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def call(*args, &block)
|
11
|
+
@instance ||= self.new
|
12
|
+
@instance.call *args, &block
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module InstanceMethods
|
17
|
+
def call(*args, &block)
|
18
|
+
raise NotImplementedError
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Services
|
2
|
+
module Responses
|
3
|
+
class Base
|
4
|
+
attr_reader :result
|
5
|
+
|
6
|
+
def initialize(result = nil)
|
7
|
+
@result = result
|
8
|
+
end
|
9
|
+
|
10
|
+
def success?
|
11
|
+
raise NotImplementedError
|
12
|
+
end
|
13
|
+
|
14
|
+
def error?
|
15
|
+
!success?
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Services
|
2
|
+
module Responses
|
3
|
+
class Error < Services::Responses::Base
|
4
|
+
attr_accessor :error_message, :error_code
|
5
|
+
|
6
|
+
def initialize(result, error_message: nil, error_code: nil)
|
7
|
+
@result, @error_message, @error_code = result, error_message, error_code
|
8
|
+
end
|
9
|
+
|
10
|
+
def success?
|
11
|
+
false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/services_base.rb
CHANGED
@@ -1,22 +1,5 @@
|
|
1
|
-
require "
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
base.extend ClassMethods
|
7
|
-
base.include InstanceMethods
|
8
|
-
end
|
9
|
-
|
10
|
-
module ClassMethods
|
11
|
-
def call(*args, &block)
|
12
|
-
@instance ||= self.new
|
13
|
-
@instance.call *args, &block
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
module InstanceMethods
|
18
|
-
def call(*args, &block)
|
19
|
-
raise NotImplementedError
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
1
|
+
require "services/version"
|
2
|
+
require "services/base"
|
3
|
+
require "services/responses/base"
|
4
|
+
require "services/responses/error"
|
5
|
+
require "services/responses/success"
|
data/services_base.gemspec
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require '
|
4
|
+
require 'services/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "services_base"
|
8
|
-
spec.version =
|
8
|
+
spec.version = Services::VERSION
|
9
9
|
spec.authors = ["Carl Mercier"]
|
10
10
|
spec.email = ["carl@varagesale.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{Simple
|
13
|
-
spec.description = %q{Simple
|
12
|
+
spec.summary = %q{Simple skeleton for implementing consistent Service Objects and Micro-Services in Ruby}
|
13
|
+
spec.description = %q{Simple skeleton for implementing consistent Service Objects and Micro-Services in Ruby}
|
14
14
|
spec.homepage = "https://github.com/varagesale/services_base"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: services_base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Carl Mercier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description: Simple
|
83
|
+
description: Simple skeleton for implementing consistent Service Objects and Micro-Services
|
84
84
|
in Ruby
|
85
85
|
email:
|
86
86
|
- carl@varagesale.com
|
@@ -98,8 +98,12 @@ files:
|
|
98
98
|
- Rakefile
|
99
99
|
- bin/console
|
100
100
|
- bin/setup
|
101
|
+
- lib/services/base.rb
|
102
|
+
- lib/services/responses/base.rb
|
103
|
+
- lib/services/responses/error.rb
|
104
|
+
- lib/services/responses/success.rb
|
105
|
+
- lib/services/version.rb
|
101
106
|
- lib/services_base.rb
|
102
|
-
- lib/services_base/version.rb
|
103
107
|
- services_base.gemspec
|
104
108
|
homepage: https://github.com/varagesale/services_base
|
105
109
|
licenses:
|
@@ -124,6 +128,6 @@ rubyforge_project:
|
|
124
128
|
rubygems_version: 2.5.1
|
125
129
|
signing_key:
|
126
130
|
specification_version: 4
|
127
|
-
summary: Simple
|
131
|
+
summary: Simple skeleton for implementing consistent Service Objects and Micro-Services
|
128
132
|
in Ruby
|
129
133
|
test_files: []
|