cater 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e00ef1983a66d6aa5a74101eec34d8ce85b18f3
4
- data.tar.gz: 643a6e626254cfd2b1d19f6728803b11ff6f44cb
3
+ metadata.gz: a70b24427d3f3da3eae3d0f13c10063596d3c9ef
4
+ data.tar.gz: be28add58ddf410018e4890b9a2f7855bd89a38e
5
5
  SHA512:
6
- metadata.gz: c10f30989cfdeb5162de0391cf3d167f7ac77a9ea73b495abd7e9f245953db3745dabf5eb55e110e2d39ae7633da1469bec22d0129dd5eff69f5107c93a5781c
7
- data.tar.gz: 021c163b231ea3e937829ae1907dc95cea851f2ec265cd70589ee1bf21611d73937eae9c52bc2f58f8142d6c017446269efc2cd5c1ec3ad785c97c792b73c1f3
6
+ metadata.gz: 1bb2b4e33a008586e697b1fbae4ce84482d3ab201ee7ad84810f9325734137766d6193a1e2eeee1b3494bbc2425c952466aef9950ac6211096b42811addfc42b
7
+ data.tar.gz: 49f3e59219bdd005838c6943bc82566c5878c352476ddbb0c17064609a64cbb536fc1026a3fec752d77815445ed4c5cd2b51b96b4d051f0ba465aea8df99aa0a
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # Cater
1
+ [![Circle CI](https://circleci.com/gh/rubakas/cater.svg?style=shield&circle-token=5cab92a48428dd8408acf50bf2982b15af81dfed)](https://circleci.com/gh/rubakas/cater)
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/cater`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ # Cater
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ Cater is a modular implementation of ServiceObject pattern
6
6
 
7
7
  ## Installation
8
8
 
@@ -22,7 +22,36 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ ```ruby
26
+ class MyBusinessBehavior
27
+ # include module
28
+ include ::Cater::Service
29
+
30
+ after_serve :_log_stuff
31
+
32
+ def serve(parameter)
33
+ error! unless parameter
34
+ end
35
+
36
+ def _log_stuff
37
+ Rails.logger.fatal("Stuff logged")
38
+ end
39
+ end
40
+
41
+ # Now feel free to invoke .serve class method
42
+ successful_service = MyBusinessBehavior.serve(true)
43
+ successful_service.success?
44
+ # true
45
+ successful_service.error?
46
+ # false
47
+
48
+ error_service = MyBusinessBehavior.serve(false)
49
+ error_service.error?
50
+ # true
51
+ error_service.success?
52
+ # false
53
+
54
+ ```
26
55
 
27
56
  ## Development
28
57
 
@@ -32,6 +61,8 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
61
 
33
62
  ## Contributing
34
63
 
64
+ Please stick to `git flow` branch convention
65
+
35
66
  Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/cater. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
36
67
 
37
68
 
data/cater.gemspec CHANGED
@@ -27,6 +27,8 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
+ spec.add_dependency "activesupport", ">= 4.2.5"
31
+
30
32
  spec.add_development_dependency "bundler", "~> 1.11"
31
33
  spec.add_development_dependency "rake", "~> 10.0"
32
34
  spec.add_development_dependency "minitest", "~> 5.0"
data/circle.yml ADDED
@@ -0,0 +1,3 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.3.0
data/lib/cater/service.rb CHANGED
@@ -1,40 +1,58 @@
1
+ require 'active_support/concern'
2
+ require 'active_support/callbacks'
3
+
1
4
  module Cater
2
5
  class ServiceError < Exception; end
3
6
 
4
7
  module Service
5
- def self.included(base)
6
- base.extend ClassMethods
7
- base.class_eval do
8
- attr_accessor :message
8
+ extend ActiveSupport::Concern
9
9
 
10
- def success?
11
- fail "Service was not called yet" if @_service_success.nil?
12
- @_service_success
13
- end
10
+ included do
11
+ include ActiveSupport::Callbacks
14
12
 
15
- def error!(message=nil)
16
- message = message
17
- raise ServiceError
18
- end
13
+ attr_accessor :message
14
+ define_callbacks :serve
19
15
 
20
- def error?
21
- !success?
22
- end
16
+ def success?
17
+ fail "Service was not called yet" if @_service_success.nil?
18
+ @_service_success
19
+ end
23
20
 
24
- private
25
-
26
- def _service_success=(result)
27
- @_service_success = result
28
- end
21
+ def error!(message=nil)
22
+ message = message
23
+ raise ServiceError
24
+ end
25
+
26
+ def error?
27
+ !success?
28
+ end
29
29
 
30
+ private
31
+
32
+ def _service_success=(result)
33
+ @_service_success = result
30
34
  end
31
35
  end
32
36
 
33
- module ClassMethods
37
+ class_methods do
38
+ def after_serve(*filters, &blk)
39
+ set_callback(:serve, :after, *filters, &blk)
40
+ end
41
+
42
+ def around_serve(*filters, &blk)
43
+ set_callback(:serve, :around, *filters, &blk)
44
+ end
45
+
46
+ def before_serve(*filters, &blk)
47
+ set_callback(:serve, :before, *filters, &blk)
48
+ end
49
+
34
50
  def serve(*args)
35
51
  instance = self.new
36
52
  begin
37
- instance.serve(*args)
53
+ instance.run_callbacks :serve do
54
+ instance.serve(*args)
55
+ end
38
56
  instance.send(:_service_success=, true)
39
57
  rescue ServiceError
40
58
  instance.send(:_service_success=, false)
@@ -45,52 +63,4 @@ module Cater
45
63
  end
46
64
 
47
65
  end
48
- end
49
-
50
-
51
- # require 'active_support/concern'
52
-
53
- # module Service
54
-
55
- # class ServiceError < Exception; end
56
- # extend ActiveSupport::Concern
57
-
58
- # included do
59
- # attr_accessor :success, :message
60
-
61
- # def success?
62
- # fail "Service was not called!" if success.nil?
63
- # !!success
64
- # end
65
-
66
- # def error?
67
- # fail "Service was not called!" if success.nil?
68
- # !success
69
- # end
70
-
71
- # def error(message=nil)
72
- # message = message
73
- # fail ServiceError.new(message)
74
- # end
75
- # end
76
-
77
- # class_methods do
78
- # def sync_execution_method(method_name)
79
- # end
80
-
81
- # def async_execution_method(method_name)
82
- # end
83
-
84
- # def call(*args)
85
- # begin
86
- # instance = self.new(*args)
87
- # instance.call!
88
- # instance.success = true
89
- # rescue ServiceError
90
- # instance.success = false
91
- # end
92
- # instance
93
- # end
94
- # end
95
-
96
- # end
66
+ end
data/lib/cater/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cater
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cater
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andriy Tyurnikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-01-03 00:00:00.000000000 Z
11
+ date: 2016-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.5
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -69,6 +83,7 @@ files:
69
83
  - bin/console
70
84
  - bin/setup
71
85
  - cater.gemspec
86
+ - circle.yml
72
87
  - lib/cater.rb
73
88
  - lib/cater/service.rb
74
89
  - lib/cater/version.rb