operation 1.2.2 → 1.3.0

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: e7e8a1eefcc41e4464a3c86e301dbcbae4b0f7ef
4
- data.tar.gz: af2e7a02187ea51123404fb7e89279faba1a64ad
3
+ metadata.gz: 350d9462e55e2a29b24502967a4c5f96559bf41f
4
+ data.tar.gz: 31b2e4cdc6e21409be85a770a42fa93287e03c7b
5
5
  SHA512:
6
- metadata.gz: 88838ab8ebb3bd7e56086d7947386f80c07d62efd74e3e87e36a1e40c31d4ee9e672bf4e5988f8cb335412cfff8946abc665e4f17522e8f754b7a9c5d9ef4764
7
- data.tar.gz: 66506b9496bea6a25f47c67c7e5b9aaae966ff62c40e0b7006247a1bf40e0f4114ab2977c7869d67bec8d56189da3be7d0aa58e3cd964e879fbce2ef2011bbb3
6
+ metadata.gz: eac059b32ff9ee284ad0c024e742fdd6e95e469b5b239ddf3b1f7909408d75560a5aa8209bd5413f82d0f1e0281ba53d3ecd946536de0d1a9387e53355062854
7
+ data.tar.gz: 6aa9eea323fe338cf322fc4a0257c4e7aadc8807d98845a3d8637bd7b175b22dfd6b2c661d9cbd1a7b6bf62cd75198a68a09182ae02e46ace0104ce0f702edc4
data/lib/operation.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'operation/deferrable'
2
- require 'operation/progress'
3
2
  require 'operation/core'
4
3
  require 'operations'
5
4
 
@@ -1,5 +1,4 @@
1
1
  class Operation
2
- include ::Operation::Deferrable
3
2
  attr_reader :metadata, :code
4
3
 
5
4
  def initialize(options = {})
@@ -2,6 +2,8 @@ class Operation
2
2
  module Deferrable
3
3
  attr_reader :arguments
4
4
 
5
+ # Public Callbacks
6
+
5
7
  def on_progress(&block)
6
8
  return unless block
7
9
  progressables.unshift block
@@ -30,6 +32,17 @@ class Operation
30
32
  self
31
33
  end
32
34
 
35
+ # Public State Getters
36
+
37
+ def status
38
+ @status ||= :unknown
39
+ end
40
+
41
+ def percent
42
+ return 100 if succeeded?
43
+ @percent ||= 0
44
+ end
45
+
33
46
  def succeeded?
34
47
  status == :succeeded
35
48
  end
@@ -38,12 +51,40 @@ class Operation
38
51
  status == :failed
39
52
  end
40
53
 
41
- def status
42
- @status ||= :unknown
54
+ # Public State Setters
55
+
56
+ def progress!(new_percent, code = nil)
57
+ return if succeeded? || failed?
58
+ @percent = new_percent.to_i
59
+ @status = code unless %i(succeeded failed).include?(code)
60
+
61
+ progressables.each do |callback|
62
+ callback.call self
63
+ end
64
+ end
65
+
66
+ def sub_progress!(from, till, sub)
67
+ if sub.percent.zero?
68
+ new_percent = 0
69
+ else
70
+ factor = (till.to_f - from.to_f) * (sub.percent.to_f / 100)
71
+ new_percent = from.to_i + factor.to_i
72
+ end
73
+ progress! new_percent, sub.status
74
+ end
75
+
76
+ def succeed!(*args)
77
+ set_status :succeeded, *args
78
+ end
79
+
80
+ def fail!(*args)
81
+ set_status :failed, *args
43
82
  end
44
83
 
84
+ # Status Setters
85
+
45
86
  def set_status(new_status, *args)
46
- @arguments = args
87
+ @arguments = args unless args.empty?
47
88
  @status = new_status
48
89
 
49
90
  if succeeded? && !successables.empty?
@@ -60,25 +101,7 @@ class Operation
60
101
  end
61
102
  end
62
103
 
63
- def progress(percent, code = nil)
64
- return if succeeded? || failed?
65
-
66
- progressables.each do |callback|
67
- if percent.is_a?(::Operation::Progress)
68
- callback.call percent
69
- else
70
- callback.call ::Operation::Progress.new(percent, code)
71
- end
72
- end
73
- end
74
-
75
- def succeed!(*args)
76
- set_status :succeeded, *args
77
- end
78
-
79
- def fail!(*args)
80
- set_status :failed, *args
81
- end
104
+ # Internal Methods
82
105
 
83
106
  def successables
84
107
  @successables ||= []
@@ -94,3 +117,10 @@ class Operation
94
117
 
95
118
  end
96
119
  end
120
+
121
+ class Operation
122
+ class Defer
123
+ include ::Operation::Deferrable
124
+ end
125
+ end
126
+
@@ -1,8 +1,8 @@
1
1
  class Operation
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 2
5
- TINY = 2
4
+ MINOR = 3
5
+ TINY = 0
6
6
  PRE = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join '.'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: operation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - halo
@@ -80,7 +80,6 @@ files:
80
80
  - lib/operation.rb
81
81
  - lib/operation/core.rb
82
82
  - lib/operation/deferrable.rb
83
- - lib/operation/progress.rb
84
83
  - lib/operation/version.rb
85
84
  - lib/operations.rb
86
85
  homepage: https://github.com/halo/operation
@@ -1,23 +0,0 @@
1
- class Operation
2
- class Progress
3
-
4
- def initialize(percent, code = nil)
5
- @percent, @code = percent, code
6
- end
7
-
8
- def percent
9
- @percent.to_i
10
- end
11
-
12
- def code
13
- return if @code.to_s == ''
14
- @code.to_s.to_sym
15
- end
16
-
17
- def of(total)
18
- partial_percent = (percent.to_f / total.to_i).to_i
19
- self.class.new partial_percent, code
20
- end
21
-
22
- end
23
- end