light_operations 1.2.3 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 120f4477b3c4b1686f3d07cc4c564df3351f8578
4
- data.tar.gz: f0e1b9faba7d576412ec3893b9a9403cf292743a
3
+ metadata.gz: 6eb1ef4942cfe0f54c0ffbd0eed62d760985938e
4
+ data.tar.gz: b7abe127ef43fda487f71433bd819a4f88d99975
5
5
  SHA512:
6
- metadata.gz: 1d91b8c07498b912dab7fc457080421b4ca7100fda94c78e471f0dda274da955e8f96a63bb0d57942c95162de75d8cf42786005460bc1cec1df906c42722be1d
7
- data.tar.gz: 7577acb71547cc68c16669c84f534cb9b52d56104f0be6bcb56c7f4b458ef35897b2d93238f98f83cfc88595d06e7539136bf45bab28175922c35bb7a62452a4
6
+ metadata.gz: 489534160e4dcdf6b79fa88bfd512cf863cf93eaae3098a3df0901a7d53a918e89cef871298eabf6f1636a8ee9165e9afd428f8094c48196aec8f0a5639aa50b
7
+ data.tar.gz: d3d817d97798ceaaefea0d55cb4e422e6e841f4de20736a11595f9d59d973521ef8944de1e02d6c106875fc0db321837832f78fad1df43df8389e2e92c593b7c
@@ -40,10 +40,11 @@ Documentation:
40
40
  Enabled: false
41
41
 
42
42
  Metrics/LineLength:
43
- Max: 120
43
+ Max: 180
44
44
 
45
45
  AllCops:
46
46
  Exclude:
47
47
  - '**/Guardfile'
48
48
  - '**/model_operations.gemspec'
49
49
  - '**/spec/support/factory_helper.rb'
50
+ - '**/tmp/*.rb'
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
2
  script: bundle exec rake
3
3
  rvm:
4
- - 2.1.4
5
- - 2.2.0
4
+ - 2.2.5
5
+ - 2.4.1
data/README.md CHANGED
@@ -5,8 +5,8 @@
5
5
  [![Dependency Status](https://gemnasium.com/pniemczyk/light_operations.svg)](https://gemnasium.com/pniemczyk/light_operations)
6
6
  [![Code Climate](https://codeclimate.com/github/pniemczyk/light_operations/badges/gpa.svg)](https://codeclimate.com/github/pniemczyk/light_operations)
7
7
 
8
- When you want have slim controllers or some logic with several operations
9
- this gem could help you to have nice separated and clan code. CAN HELP YOU! :D
8
+ When you want to have slim controllers or some logic with several operations
9
+ this gem could help you to have nice separated and clean code. CAN HELP YOU! :D
10
10
 
11
11
  ## Installation
12
12
 
@@ -28,17 +28,17 @@ Or install it yourself as:
28
28
 
29
29
  ## How it works
30
30
 
31
- Basicly this is a Container for buissnes logic.
31
+ Basically, this is a Container for business logic.
32
32
 
33
33
  You can define dependencies during initialization and run with custom parameters.
34
34
  When you define deferred actions on `success` and `fail` before operation execution is finished,
35
- after execution one of those action depend for execution result will be executed.
36
- Actions could be a block (Proc) or you could delgate execution to method other object,
37
- by binding operation with specific object with those methods.
35
+ after execution one of those actions depend on for execution result will be executed.
36
+ Actions could be a block (Proc) or you could delegate execution to method another object,
37
+ by binding operation with the specific object with those methods.
38
38
  You also could use operation as simple execution and check status by `success?` or `fail?` method
39
39
  and then by using `subject` and `errors` method build your own logic to finish your result.
40
- There is many possible usecases where and how you could use operations.
41
- You can build csacade of opreations, use them one after the other,
40
+ There are many possible use-cases where and how you could use operations.
41
+ You can build cascade of operations, use them one after the other,
42
42
  use them recursively and a lot more.
43
43
 
44
44
 
@@ -132,7 +132,7 @@ MyOperation.new.on_success { |operation| render :done, locals: { model: operatio
132
132
  MyOperation.new.on(success: -> () { |operation| render :done, locals: { model: operation.subject } )
133
133
  ```
134
134
 
135
- When you bind operation with other object you could delegate actions to binded object methods
135
+ When you bind operation with another object you could delegate actions to bound object methods
136
136
 
137
137
  ```ruby
138
138
  # 1
@@ -207,13 +207,12 @@ Operation
207
207
 
208
208
  ```ruby
209
209
  class ArticleVoteBumperOperation < LightOperations::Core
210
- rescue_from ActiveRecord::ActiveRecordError, with: :on_ar_error
210
+ rescue_from ActiveRecord::RecordInvalid, with: :on_ar_error
211
211
 
212
212
  def execute(_params = nil)
213
- dependency(:article_model).tap do |article|
214
- article.vote = article.vote.next
215
- article.save
216
- end
213
+ article = dependency(:article_model)
214
+ article.vote = article.vote.next
215
+ article.save!
217
216
  { success: true }
218
217
  end
219
218
 
@@ -228,23 +227,19 @@ Controller
228
227
  ```ruby
229
228
  class ArticleVotesController < ApplicationController
230
229
  def up
230
+ operation = ArticleVoteBumperOperation.new(article_model: article)
231
231
  response = operation.run.success? ? response.subject : response.errors
232
232
  render :up, json: response
233
233
  end
234
234
 
235
235
  private
236
-
237
- def operation
238
- @operation ||= ArticleVoteBumperOperation.new(article_model: article)
239
- end
240
-
241
236
  def article
242
237
  Article.find(params.require(:id))
243
238
  end
244
239
  end
245
240
  ```
246
241
 
247
- #### Basic recursive execution to collect newsfeeds from 2 sources
242
+ #### Basic recursive execution to collect news feeds from 2 sources
248
243
 
249
244
  Operation
250
245
 
@@ -486,7 +481,7 @@ class AuthController < ApplicationController
486
481
  end
487
482
  ```
488
483
 
489
- Register success and fails action is avialable by `#on` like :
484
+ Register success and fails action is available by `#on` like:
490
485
 
491
486
  ```ruby
492
487
  def create
@@ -500,16 +495,16 @@ Operation have some helper methods (to improve recursive execution)
500
495
  - `#unbind!` => unbind binded object
501
496
  - `#clear_subject_with_errors!` => clear subject and errors
502
497
 
503
- When operation status is most importent we can simply use `#success?` or `#fail?` on the executed operation
498
+ When operation status is most important we can simply use `#success?` or `#fail?` on the executed operation
504
499
 
505
500
  Errors are available by `#errors` after operation is executed
506
501
 
507
502
  ### Whats new in 1.2.x
508
- New module LightOperations::Flow which gives very simple and easy way to create operation per action in controller (tested on rails).
503
+ New module LightOperations::Flow which gives very simple and easy way to create operation per action in the controller (tested on rails).
509
504
 
510
505
  #### How it works:
511
506
 
512
- include module in controller like this
507
+ include the module in a controller like this
513
508
  ```ruby
514
509
  class AccountsController < VersionController
515
510
  include LightOperations::Flow
@@ -560,7 +555,7 @@ But it is not all :D (operation params gives you a lot more)
560
555
  class AccountsController < VersionController
561
556
  include LightOperations::Flow
562
557
  operation(
563
- :accounts, # top level namespace
558
+ :accounts, # top-level namespace
564
559
  namespace: Operations, # Base namespace by default is Kernel
565
560
  actions: [:create, :show], # those are operations executed by router
566
561
  default_view: nil, # By changing this option you can have one method for render all successful operations for all actions.
@@ -570,7 +565,7 @@ class AccountsController < VersionController
570
565
  end
571
566
  ```
572
567
 
573
- This simple module should give you power to create something like this:
568
+ This simple module should give you the power to create something like this:
574
569
 
575
570
  ```ruby
576
571
  module Api
@@ -8,7 +8,7 @@ module LightOperations
8
8
  attr_reader :subject
9
9
 
10
10
  def self.subject_name(method_name)
11
- send(:define_method, method_name, proc { self.subject })
11
+ send(:define_method, method_name, proc { subject })
12
12
  end
13
13
 
14
14
  def initialize(dependencies = {})
@@ -18,7 +18,7 @@ module LightOperations
18
18
  # do no.t override this method
19
19
  def run(params = {})
20
20
  clear_subject_with_errors!
21
- @subject = execute(params)
21
+ @subject = method(:execute).arity == 0 ? execute : execute(params)
22
22
  execute_actions
23
23
  self
24
24
  rescue => exception
@@ -55,7 +55,9 @@ module LightOperations
55
55
  end
56
56
 
57
57
  def clear_subject_with_errors!
58
- @subject, @fail_errors, @errors = nil, nil, nil
58
+ @subject = nil
59
+ @fail_errors = nil
60
+ @errors = nil
59
61
  self
60
62
  end
61
63
 
@@ -7,7 +7,7 @@ module LightOperations
7
7
  attr_reader :operation_opts, :operation_dependencies
8
8
 
9
9
  module ClassMethods
10
- def operation(operation_name, namespace: Kernel, actions: [], default_view: nil, view_prefix: 'render_', default_fail_view: nil, fail_view_prefix: 'render_fail_')
10
+ def operation(operation_name, namespace: Kernel, actions: [], default_view: nil, view_prefix: 'render_', default_fail_view: nil, fail_view_prefix: 'render_fail_') # rubocop:disable all
11
11
  actions.each do |action_name|
12
12
  operation_method = "#{action_name}_op"
13
13
 
@@ -1,3 +1,3 @@
1
1
  module LightOperations
2
- VERSION = '1.2.3'
2
+ VERSION = '1.2.5'.freeze
3
3
  end
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = 'https://github.com/pniemczyk/light_operations'
14
14
  spec.license = 'MIT'
15
15
 
16
- spec.files = `git ls-files`.split($/)
16
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
@@ -50,7 +50,7 @@ describe LightOperations::Core do
50
50
  end
51
51
  end
52
52
 
53
- before { subject.on(success: lambda { |_subject| }) }
53
+ before { subject.on(success: ->(_subject) {}) }
54
54
 
55
55
  it 'is allowed when is initialized correctly' do
56
56
  expect { subject.run }.not_to raise_error
@@ -69,7 +69,7 @@ describe LightOperations::Core do
69
69
  context '.rescue_from specific error' do
70
70
  TestError = Class.new(StandardError)
71
71
 
72
- before { subject.on(success: lambda { |_subject| }) }
72
+ before { subject.on(success: ->(_subject) {}) }
73
73
 
74
74
  context 'by block' do
75
75
  subject do
@@ -139,7 +139,7 @@ describe LightOperations::Core do
139
139
  end
140
140
 
141
141
  it 'when block is used' do
142
- block_to_exec = lambda {}
142
+ block_to_exec = -> {}
143
143
  expect(block_to_exec).not_to receive(:call)
144
144
  subject.on_fail(&block_to_exec).run
145
145
  end
@@ -175,7 +175,7 @@ describe LightOperations::Core do
175
175
  end
176
176
 
177
177
  it 'when block is used' do
178
- block_to_exec = lambda {}
178
+ block_to_exec = -> {}
179
179
  expect(block_to_exec).not_to receive(:call)
180
180
  subject.on_success(&block_to_exec).run
181
181
  end
@@ -226,7 +226,7 @@ describe LightOperations::Core do
226
226
  end
227
227
 
228
228
  it '#clear_subject_with_errors!' do
229
- %w{ subject fail_errors errors }.each do |variable|
229
+ %w{subject fail_errors errors}.each do |variable|
230
230
  subject.instance_variable_set("@#{variable}", variable)
231
231
  end
232
232
  expect(subject.subject).to eq('subject')
@@ -288,4 +288,21 @@ describe LightOperations::Core do
288
288
  subject.run(result: :success)
289
289
  end
290
290
  end
291
+
292
+ context 'Operation execution without params' do
293
+ subject do
294
+ subject_factory do
295
+ def execute
296
+ 'hello world!'
297
+ end
298
+ end
299
+ end
300
+
301
+ it 'is allowed' do
302
+ subject
303
+ .bind_with(binding_object)
304
+ .on(success: :success_action, fail: :error_action)
305
+ expect(subject.run.success?).to eq(true)
306
+ end
307
+ end
291
308
  end
@@ -5,8 +5,6 @@ require 'rspec/rails'
5
5
  # prevent Test::Unit's AutoRunner from executing during RSpec's rake task
6
6
  Test::Unit.run = true if defined?(Test::Unit) && Test::Unit.respond_to?(:run=)
7
7
 
8
-
9
-
10
8
  describe 'LightOperations::Flow', type: :controller do
11
9
  RailsApp = Class.new(Rails::Application)
12
10
  RailsApp.config.secret_key_base = '5308dcbbb7dea1b44e3d1d55ea7656f9'
@@ -67,7 +65,6 @@ describe 'LightOperations::Flow', type: :controller do
67
65
  end
68
66
  end
69
67
 
70
-
71
68
  it '#render_create as success' do
72
69
  post :create, correct: true
73
70
  expect(response.body).to eq('Create OK')
@@ -94,7 +91,6 @@ describe 'LightOperations::Flow', type: :controller do
94
91
  end
95
92
  end
96
93
 
97
-
98
94
  it '#view_create as success' do
99
95
  post :create, correct: true
100
96
  expect(response.body).to eq('Create OK')
@@ -118,7 +114,6 @@ describe 'LightOperations::Flow', type: :controller do
118
114
  end
119
115
  end
120
116
 
121
-
122
117
  it '#render_create as success' do
123
118
  post :create, correct: true
124
119
  expect(response.body).to eq('Create OK')
@@ -147,7 +142,6 @@ describe 'LightOperations::Flow', type: :controller do
147
142
  end
148
143
  end
149
144
 
150
-
151
145
  it '#render_view as success' do
152
146
  post :create, correct: true
153
147
  expect(response.body).to eq('Create OK')
@@ -186,7 +180,6 @@ describe 'LightOperations::Flow', type: :controller do
186
180
  end
187
181
  end
188
182
 
189
-
190
183
  it '#render_view as success' do
191
184
  post :update, correct: true, id: 1
192
185
  expect(response.body).to eq('Update OK')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: light_operations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pawel Niemczyk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-11 00:00:00.000000000 Z
11
+ date: 2017-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -208,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
208
  version: '0'
209
209
  requirements: []
210
210
  rubyforge_project:
211
- rubygems_version: 2.4.6
211
+ rubygems_version: 2.4.8
212
212
  signing_key:
213
213
  specification_version: 4
214
214
  summary: Light operations