light_operations 0.0.6 → 0.0.7

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: 683e8b6683be4a087d4ea57b3d9bf57d1cd82764
4
- data.tar.gz: edc1018a8032118651c2ddb67402f4fc4476f8d2
3
+ metadata.gz: 9f75107bd444857e0c5b66bbdcf916088c4cc7e8
4
+ data.tar.gz: 9b69c0b871bb46dd6ecc7cfe059be02f7a1e6d42
5
5
  SHA512:
6
- metadata.gz: fc9a37763abf176bf90ec799f0d35351fe1ef573395f621fbe383452e3a31535c4c8c1020a325bd916727d97da403ed953f63e3f30b76e5fcf26e93e3d9e88e0
7
- data.tar.gz: 1ace974056dc4e168647a8a439ef340be8208bb0ee9bba3844b52d8793f46d2738d919a14fe49a5b8236f35314fc1fce22f32dae4d1cb858890db86e73b9db8d
6
+ metadata.gz: 14c25bcd15e1267126a3fe264fa49ac509b44750b1c069a38998c3e9b69d5004f01fcd24278f21dcee64c38315693a9eacb07509f5dba83d693dd7521cc8c24a
7
+ data.tar.gz: ce1aa5e31c123dc2cb836feddc310a4a1baca9ec6f31470760eee3314cafae64aead6a3f32e2c916344133437463ba676be24440416eaabc9c10d4cbcd291a31
data/.gitignore CHANGED
@@ -21,3 +21,4 @@ tmp
21
21
  *.a
22
22
  mkmf.log
23
23
  .rubocop_todo.yml
24
+ .ruby-version
data/.travis.yml CHANGED
@@ -3,4 +3,5 @@ script: bundle exec rake
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
- - 2.1.0
6
+ - 2.1.0
7
+ - 2.1.4
data/README.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # LightOperations
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/light_operations.svg)](http://badge.fury.io/rb/light_operations)
4
+ [![Build Status](https://travis-ci.org/pniemczyk/light_operations.svg)](https://travis-ci.org/pniemczyk/light_operations)
5
+ [![Dependency Status](https://gemnasium.com/pniemczyk/light_operations.svg)](https://gemnasium.com/pniemczyk/light_operations)
6
+ [![Code Climate](https://codeclimate.com/github/pniemczyk/light_operations/badges/gpa.svg)](https://codeclimate.com/github/pniemczyk/light_operations)
7
+
3
8
  When you want have slim controllers or some logic with several operations
4
9
  this gem could help you to have nice separated and clan code. CAN HELP YOU! :D
5
10
 
@@ -102,7 +102,8 @@ module LightOperations
102
102
  action.call(subject, errors) if action.is_a?(Proc)
103
103
  end
104
104
 
105
- def fail!(errors = [])
105
+ def fail!(errors = true)
106
+ @errors = nil
106
107
  @fail_errors = errors
107
108
  end
108
109
 
@@ -0,0 +1,124 @@
1
+ require 'active_support'
2
+
3
+ module CrudOperations
4
+ class Core
5
+ include ::ActiveSupport::Rescuable
6
+ MissingDependency = Class.new(StandardError)
7
+
8
+ attr_reader :dependencies, :bind_object, :subject
9
+
10
+ def initialize(dependencies = {})
11
+ @dependencies = dependencies
12
+ end
13
+
14
+ # do no.t override this method
15
+ def run(params = {})
16
+ clear_subject_with_errors!
17
+ @subject = execute(params)
18
+ execute_actions
19
+ self
20
+ rescue => exception
21
+ rescue_with_handler(exception) || raise
22
+ self
23
+ end
24
+
25
+ def on_success(binded_method = nil, &block)
26
+ actions[:success] = binded_method || block
27
+ self
28
+ end
29
+
30
+ def on_fail(binded_method = nil, &block)
31
+ actions[:fail] = binded_method || block
32
+ self
33
+ end
34
+
35
+ def on(actions_with_responses = {})
36
+ actions_assign(actions_with_responses, :success, :fail)
37
+ self
38
+ end
39
+
40
+ def clear!
41
+ clear_actions!
42
+ unbind!
43
+ clear_subject_with_errors!
44
+ self
45
+ end
46
+
47
+ def unbind!
48
+ @bind_object = nil
49
+ self
50
+ end
51
+
52
+ def clear_subject_with_errors!
53
+ @subject, @fail_errors, @errors = nil, nil, nil
54
+ self
55
+ end
56
+
57
+ def clear_actions!
58
+ @actions = {}
59
+ self
60
+ end
61
+
62
+ def bind_with(bind_object)
63
+ @bind_object = bind_object
64
+ self
65
+ end
66
+
67
+ def errors
68
+ @errors ||= fail_errors || (subject.respond_to?(:errors) ? subject.errors : [])
69
+ end
70
+
71
+ def fail?
72
+ !success?
73
+ end
74
+
75
+ def success?
76
+ errors.respond_to?(:empty?) ? errors.empty? : !errors
77
+ end
78
+
79
+ protected
80
+
81
+ attr_reader :fail_errors
82
+
83
+ def actions_assign(hash, *keys)
84
+ keys.each { |key| actions[key] = hash[key] if hash.key?(key) }
85
+ end
86
+
87
+ def execute_actions
88
+ success? ? execute_success_action : execute_fail_action
89
+ end
90
+
91
+ def execute_success_action
92
+ return unless actions.key?(:success)
93
+ action = actions[:success]
94
+ bind_object.send(action, subject) if action.is_a?(Symbol) && bind_object
95
+ action.call(subject) if action.is_a?(Proc)
96
+ end
97
+
98
+ def execute_fail_action
99
+ return unless actions.key?(:fail)
100
+ action = actions[:fail]
101
+ bind_object.send(action, subject, errors) if action.is_a?(Symbol) && bind_object
102
+ action.call(subject, errors) if action.is_a?(Proc)
103
+ end
104
+
105
+ def fail!(errors = [])
106
+ @errors = nil
107
+ @fail_errors = errors
108
+ end
109
+
110
+ def actions
111
+ @actions ||= {}
112
+ end
113
+
114
+ def execute(_params = {})
115
+ fail 'Not implemented yet'
116
+ end
117
+
118
+ def dependency(name)
119
+ dependencies.fetch(name)
120
+ rescue KeyError => e
121
+ raise MissingDependency, e.message
122
+ end
123
+ end
124
+ end
@@ -1,3 +1,3 @@
1
1
  module LightOperations
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_runtime_dependency 'activesupport', '>= 3.0.2'
22
- spec.add_development_dependency 'bundler', '~> 1.7'
22
+ spec.add_development_dependency 'bundler', '>= 1.6'
23
23
  spec.add_development_dependency 'rake', '~> 10.4'
24
24
  spec.add_development_dependency 'rspec', '~> 3.0'
25
25
  spec.add_development_dependency 'guard', '~> 2.12'
@@ -39,7 +39,7 @@ describe LightOperations::Core do
39
39
  end
40
40
  end
41
41
 
42
- before { subject.on(success: -> (_subject) {}) }
42
+ before { subject.on(success: lambda { |_subject| }) }
43
43
 
44
44
  it 'is allowed when is initialized correctly' do
45
45
  expect { subject.run }.not_to raise_error
@@ -58,7 +58,7 @@ describe LightOperations::Core do
58
58
  context '.rescue_from specific error' do
59
59
  TestError = Class.new(StandardError)
60
60
 
61
- before { subject.on(success: -> (_subject) {}) }
61
+ before { subject.on(success: lambda { |_subject| }) }
62
62
 
63
63
  context 'by block' do
64
64
  subject do
@@ -128,7 +128,7 @@ describe LightOperations::Core do
128
128
  end
129
129
 
130
130
  it 'when block is used' do
131
- block_to_exec = -> () {}
131
+ block_to_exec = lambda {}
132
132
  expect(block_to_exec).not_to receive(:call)
133
133
  subject.on_fail(&block_to_exec).run
134
134
  end
@@ -164,7 +164,7 @@ describe LightOperations::Core do
164
164
  end
165
165
 
166
166
  it 'when block is used' do
167
- block_to_exec = -> () {}
167
+ block_to_exec = lambda {}
168
168
  expect(block_to_exec).not_to receive(:call)
169
169
  subject.on_success(&block_to_exec).run
170
170
  end
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: 0.0.6
4
+ version: 0.0.7
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-03-01 00:00:00.000000000 Z
11
+ date: 2015-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.7'
33
+ version: '1.6'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.7'
40
+ version: '1.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -154,6 +154,7 @@ files:
154
154
  - Rakefile
155
155
  - lib/light_operations.rb
156
156
  - lib/light_operations/core.rb
157
+ - lib/light_operations/crud_core.rb
157
158
  - lib/light_operations/version.rb
158
159
  - light_operations.gemspec
159
160
  - spec/lib/core_spec.rb
@@ -178,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
179
  version: '0'
179
180
  requirements: []
180
181
  rubyforge_project:
181
- rubygems_version: 2.4.3
182
+ rubygems_version: 2.4.5
182
183
  signing_key:
183
184
  specification_version: 4
184
185
  summary: Light operations