operation 1.2.2 → 1.3.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: 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