light-services 2.0.0.beta1 → 2.0.0.rc1

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: 9f6aea8958d622cea908db1b8697ab34919a55b8a90ae08dcd1308498e5963ec
4
- data.tar.gz: d4a1226609083ba01282c7d1bc273e75c394b2d39a2c17cca53792bc7eff74ab
3
+ metadata.gz: 3274d2f86c3525ce73f2bcdc5e90f3da5e09979ee4f5f6425a5a41ef482489a2
4
+ data.tar.gz: 2b4a0f8657f730b184b22c5eccd3273e7bdfc8abcfe7c9ec61852b38260eee48
5
5
  SHA512:
6
- metadata.gz: e1dcc97d1d3cf6d48062a2dcb7061ecaccf602224dfbb68111c83a499614d221c17b3b1c0301ca448e58d27bcbd495d5303b5577fb1facdf16140ac591b40c1c
7
- data.tar.gz: 0d3d5f2282f56fbe07f786f54c098f9235a5f84906f70aaac1214da61c3fbef847c2af9754228c9b6eb9a682a40f2dd1bb1737755457e67a1a6bb5dc56816ffc
6
+ metadata.gz: 1420e6b25d7b48cc2924a02fde1fc0f9aa9701a9c2d0faf0643ebc508e6d2eca3be6e650b42ecdd3947683899acb9ca47388bf392d0372157b73208b17f8b294
7
+ data.tar.gz: 44e1641a0ce332a8f4904ee278f3d116452335cb5186025536242a7b9714aedea55c0a3e629159b6d46feb82f4b979d1fab41baef0e4fa5fb35aa47151c778fe
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ # Common
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /_yardoc/
@@ -8,5 +9,9 @@
8
9
  /tmp/
9
10
  /.idea/
10
11
 
11
- # rspec failure tracking
12
+ # RSpec failure tracking
12
13
  .rspec_status
14
+
15
+ # Ignore IDE files
16
+ /.idea
17
+ *.iml
@@ -26,8 +26,14 @@ module Light
26
26
  mount_class_based_collection :outputs, item_class: Settings::Output, shortcut: :output
27
27
  mount_class_based_collection :arguments, item_class: Settings::Argument, shortcut: :arg, allow_redefine: true
28
28
 
29
+ # Arguments
30
+ # TODO: Rename internal arguments
31
+ arg :benchmark, default: false
32
+ arg :deepness, default: 0, context: true
33
+
29
34
  # Steps
30
35
  step :load_defaults_and_validate
36
+ step :log_header, if: :benchmark?
31
37
 
32
38
  # Getters
33
39
  attr_reader :outputs, :arguments, :errors, :warnings
@@ -62,11 +68,18 @@ module Light
62
68
  end
63
69
 
64
70
  def call
65
- run_steps
66
- run_steps_with_always
71
+ time = Benchmark.ms do
72
+ run_steps
73
+ run_steps_with_always
74
+
75
+ copy_warnings_to_parent_service
76
+ copy_errors_to_parent_service
77
+ end
78
+
79
+ return unless benchmark
67
80
 
68
- copy_warnings_to_parent_service
69
- copy_errors_to_parent_service
81
+ log "🟢 Finished #{self.class} in #{time}ms"
82
+ puts
70
83
  end
71
84
 
72
85
  class << self
@@ -83,6 +96,11 @@ module Light
83
96
  end
84
97
  end
85
98
 
99
+ # TODO: Add possibility to specify logger
100
+ def log(message)
101
+ puts "#{' ' * deepness}→ #{message}"
102
+ end
103
+
86
104
  private
87
105
 
88
106
  def initialize_errors
@@ -104,7 +122,7 @@ module Light
104
122
  def run_steps
105
123
  within_transaction do
106
124
  self.class.steps.each do |name, step|
107
- @launched_steps << name if step.run(self)
125
+ @launched_steps << name if step.run(self, benchmark: benchmark)
108
126
 
109
127
  break if @errors.break? || @warnings.break?
110
128
  end
@@ -146,6 +164,10 @@ module Light
146
164
  @arguments.validate!
147
165
  end
148
166
 
167
+ def log_header
168
+ log "🏎 Run service #{self.class}"
169
+ end
170
+
149
171
  def within_transaction
150
172
  if @config[:use_transactions] && defined?(ActiveRecord::Base)
151
173
  ActiveRecord::Base.transaction(requires_new: true) { yield }
@@ -22,10 +22,11 @@ module Light
22
22
  private
23
23
 
24
24
  def extend_arguments(args)
25
- return args unless @parent_service
26
-
27
25
  # TODO: Do we need `.dup` here?
28
- @parent_service.arguments.extend_with_context(args)
26
+ args = @parent_service.arguments.extend_with_context(args) if @parent_service
27
+ args[:deepness] += 1 if args[:deepness]
28
+
29
+ args
29
30
  end
30
31
  end
31
32
  end
@@ -22,11 +22,20 @@ module Light
22
22
  end
23
23
  end
24
24
 
25
- def run(instance)
25
+ def run(instance, benchmark: false)
26
26
  return false unless run?(instance)
27
27
 
28
28
  if instance.respond_to?(name, true)
29
- instance.send(name)
29
+ if benchmark
30
+ time = Benchmark.ms do
31
+ instance.send(name)
32
+ end
33
+
34
+ instance.log "⏱️ Step #{name} took #{time}ms"
35
+ else
36
+ instance.send(name)
37
+ end
38
+
30
39
  true
31
40
  else
32
41
  raise Light::Services::NoStepError, "Cannot find step `#{name}` in service `#{@service_class}`"
@@ -48,7 +57,7 @@ module Light
48
57
  def check_condition(condition, instance)
49
58
  case condition
50
59
  when Symbol
51
- instance.public_send(condition)
60
+ instance.send(condition)
52
61
  when Proc
53
62
  condition.call
54
63
  else
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Light
4
4
  module Services
5
- VERSION = "2.0.0.beta1"
5
+ VERSION = "2.0.0.rc1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: light-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta1
4
+ version: 2.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Emelianenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-22 00:00:00.000000000 Z
11
+ date: 2021-06-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Powerful implementation of Service Object pattern for Ruby and Rails
14
14
  email:
@@ -20,12 +20,6 @@ files:
20
20
  - ".github/config/rubocop_linter_action.yml"
21
21
  - ".github/workflows/ci.yml"
22
22
  - ".gitignore"
23
- - ".idea/.gitignore"
24
- - ".idea/inspectionProfiles/Project_Default.xml"
25
- - ".idea/light-services.iml"
26
- - ".idea/misc.xml"
27
- - ".idea/modules.xml"
28
- - ".idea/vcs.xml"
29
23
  - ".rspec"
30
24
  - ".rubocop.yml"
31
25
  - CHANGELOG.md