service_it 1.0.0 → 1.1.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
  SHA256:
3
- metadata.gz: fbc4d1a0417b325824e46ebea9bd0a0f95b9a62f4c6fdff153d7309aef20fc9c
4
- data.tar.gz: a2f728a79e46cac2e2fa9829786267269d98628cd58bd2a2c1d757a8ae3abf66
3
+ metadata.gz: 4cd3980a2426fb7838e0ae392a4a12a79ea81d0a385eae6fd5b53e3147f02f11
4
+ data.tar.gz: 4bef1fceed1af00155948b3399da13cee01b24ca65ad77dbfb8a6ac92df3165f
5
5
  SHA512:
6
- metadata.gz: 12d152f0218349f96ffa2f75b831c629d024ec074b3d327d9d248771d2cd1e57774a8b373cb645c842e817525733e1bd4d05a986aa8c16a0b74e22014e01ab85
7
- data.tar.gz: 71012594645c160acfe675067d52b6b4cc29bb85ebf5397b13d5dcaafb7a66266a535ce98b2184fe567807c0bdb62826193d1a86446dd31c12ccb9162507790a
6
+ metadata.gz: 017467fd53746def423e3456badf5a0ac6e7ff896489738b9015a5b83cca12718a13355de5489f6b28282bc05ab7cb85d7b1266a12ceedc50c8db724c4f06a9d
7
+ data.tar.gz: ce95f14007a1dbbcd1aae0c1186e6c79852f037f4e4fb4fa5c8d8cefd371855cbb6c9b45e96648a7988af46256c8284c5b35ff59e22217fb6e39c84bf237f94a
data/README.md CHANGED
@@ -1,71 +1,112 @@
1
- [![Gem Version](https://badge.fury.io/rb/service_it.svg)](https://badge.fury.io/rb/service_it) [![Build Status](https://travis-ci.org/iago-silva/service_it.svg?branch=master)](https://travis-ci.org/iago-silva/service_it) [![Code Climate](https://codeclimate.com/github/iago-silva/service_it.png)](https://codeclimate.com/github/iago-silva/service_it)
2
-
3
1
  # ServiceIt
2
+ [![Gem Version](https://badge.fury.io/rb/service_it.svg)](https://badge.fury.io/rb/service_it) [![Build Status](https://travis-ci.org/iago-silva/service_it.svg?branch=master)](https://travis-ci.org/iago-silva/service_it) [![Code Climate](https://codeclimate.com/github/iago-silva/service_it.png)](https://codeclimate.com/github/iago-silva/service_it) [![Test Coverage](https://api.codeclimate.com/v1/badges/fcc8375ebe8fa5412381/test_coverage)](https://codeclimate.com/github/iago-silva/service_it/test_coverage)
4
3
 
5
- [Service objects are a holy grail to keep your controllers and models slim and readable](https://medium.com/selleo/essential-rubyonrails-patterns-part-1-service-objects-1af9f9573ca1)
6
-
7
- <br/>
4
+ - [ServiceIt](#serviceit)
5
+ - [Installation](#installation)
6
+ - [With Bundler](#with-bundler)
7
+ - [Rails Generator](#rails-generator)
8
+ - [Usage](#usage)
9
+ - [Example](#example)
8
10
 
9
11
  ## Installation
10
12
 
11
13
  $ gem install service_it
12
-
14
+
13
15
  ## With Bundler
14
16
 
15
17
  Add this line to your `Gemfile`:
16
18
 
17
- gem 'service_it', '~> 0.2.0'
19
+ gem 'service_it', '~> 1.0.0'
18
20
 
19
21
  And then execute:
20
22
 
21
23
  $ bundle
22
-
23
- ## With Rails
24
+
25
+ ## Rails Generator
24
26
 
25
27
  You can use Rails generator to create a `Service`
26
28
 
27
29
  $ rails g service NAME
28
30
 
31
+ This will create:
32
+
33
+ ```
34
+ ├── app
35
+ ├── services
36
+    └── name.rb
37
+ ```
38
+
29
39
  ## Usage
30
40
 
31
41
  ```ruby
32
42
  class Foo < ServiceIt::Base
33
43
  def perform
34
- # here you can use params that became instance variables
44
+ # put your logic here
45
+ # you can use params that became variables
35
46
  end
36
47
  end
37
48
  ```
38
49
 
39
50
  Call your service from anywhere
51
+
40
52
  ```ruby
41
- Foo.call(params)
42
- ```
53
+ Foo.call(foo: foo, bar: bar)
54
+ ```
43
55
 
44
- ## Example
56
+ ## Example
45
57
 
46
- Simple example _using Rails_ to change status of a _transaction_ to complete
58
+ Simple example to release a _POST_
47
59
 
48
- $ rails g service CompleteTransaction
60
+ * Before
49
61
 
50
62
  ```ruby
51
- # app/services/complete_transaction.rb
52
- class CompleteTransaction < ServiceIt::Base
53
- def perform
54
- @transaction.update(:status, :complete)
63
+ # app/controllers/post_releases_controller.rb
64
+ class PostReleasesController < ApplicationController
65
+
66
+ # [...]
67
+
68
+ def update
69
+ @post.prepare_to_release # <--
70
+ if @post.update(released_at: Date.current) # <--
71
+ # [...]
72
+ else
73
+ # [...]
74
+ end
55
75
  end
76
+
77
+ # [...]
78
+
56
79
  end
57
- ```
80
+
81
+ ```
82
+
83
+ * After
58
84
 
59
85
  ```ruby
60
- if CompleteTransaction.call(transaction: transaction)
61
- puts 'Transaction complete!'
62
- end
63
- ```
86
+ # app/controllers/post_releases_controller.rb
87
+ class PostReleasesController < ApplicationController
64
88
 
65
- ## Contributing
89
+ # [...]
66
90
 
67
- Bug reports and pull requests are welcome on GitHub at https://github.com/iago-silva/service_it.
91
+ def update
92
+ if ReleasePost.call(post: @post) # <--
93
+ # [...]
94
+ else
95
+ # [...]
96
+ end
97
+ end
68
98
 
69
- ## License
99
+ # [...]
70
100
 
71
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
101
+ end
102
+ ```
103
+
104
+ ```ruby
105
+ # app/services/release_post.rb
106
+ class ReleasePost < ServiceIt::Base
107
+ def perform
108
+ post.prepare_to_release
109
+ post.update(released_at: Date.current)
110
+ end
111
+ end
112
+ ```
@@ -28,6 +28,12 @@ module ServiceIt
28
28
 
29
29
  args.each do |key, value|
30
30
  instance.instance_variable_set("@#{key}", value)
31
+
32
+ class_eval do
33
+ private
34
+
35
+ attr_accessor key.to_sym
36
+ end
31
37
  end
32
38
 
33
39
  instance
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ServiceIt
4
- VERSION = '1.0.0'.freeze
4
+ VERSION = '1.1.0'.freeze
5
5
  end
@@ -3,10 +3,18 @@ require 'spec_helper'
3
3
  describe ServiceIt do
4
4
  describe SayMyName do
5
5
  let(:name) { 'Heisenberg' }
6
- let(:perform) { described_class.call(name: name) }
6
+ let(:call) { SayMyName.call(name: 'Heisenberg') }
7
7
 
8
8
  it 'says Heisenberg' do
9
- expect(perform).to eq(name)
9
+ expect(call).to eq(name)
10
+ end
11
+ end
12
+
13
+ context 'when perform method is not defined' do
14
+ it 'raises an NotImplementedError exception' do
15
+ expect do
16
+ MissedPerformService.call
17
+ end.to raise_error(NotImplementedError)
10
18
  end
11
19
  end
12
20
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,10 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.minimum_coverage 100
4
+ SimpleCov.start do
5
+ add_filter '/spec/'
6
+ end
7
+
1
8
  $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
2
9
 
3
10
  require 'service_it'
@@ -1,5 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class SayMyName < ServiceIt::Base
2
4
  def perform
3
- @name
5
+ name
4
6
  end
5
7
  end
8
+
9
+ class MissedPerformService < ServiceIt::Base
10
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: service_it
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iago Silva
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
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'
41
55
  description: |-
42
56
  Service objects are a holy grail to keep your controllers and
43
57
  models slim and readable
@@ -76,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
90
  version: '0'
77
91
  requirements: []
78
92
  rubyforge_project:
79
- rubygems_version: 2.7.3
93
+ rubygems_version: 2.7.9
80
94
  signing_key:
81
95
  specification_version: 4
82
96
  summary: Simple gem to keep your controllers and models slim and readable