opera 0.2.3 → 0.2.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
  SHA256:
3
- metadata.gz: c87b8365cd3d9a0da8fce865abe9babe04df29df31253697ec01bf45ee81d897
4
- data.tar.gz: 313ba34f1abc8e4845b71a4b1f209362ad14c08d79dd30a51b120c52e364ee2f
3
+ metadata.gz: b5bbb67e42e162ac6cbea3ac242a707d270110035cf618f84ea8cc5e33a60de8
4
+ data.tar.gz: 512a3bf21c0a6e686e41e9eb25ed21634612f4e004bd7ece8c3e3177664bcbcd
5
5
  SHA512:
6
- metadata.gz: 42bdbac9178ca00ea91d998c5d1ee20a125993bc5ac830d5e5f523092527a40d1948a5504b5120d88b72200272994c71839cb2ea6d4361cd1a7402d8e9e76c16
7
- data.tar.gz: 1ba960d0d599d5cfc9c0d0c5e788420043fb8bbc4c1608f806bc751b9e4b0dd00744fd3a10a200957ff9fcce7c300c508ca27c5b2d6da3b022601dfb9587dbee
6
+ metadata.gz: 8d55665d552e5be5d23f150d17f121700b958fc8dfdd92ef1c4cc82d9d4329b03e8a4c08c8204bff87897e65d0c2858c06df8677748b9a437795476e47b6dd62
7
+ data.tar.gz: 939e7abdc56c89ff03131ff98d9721dde54224891711923073bc5377a7389f46c660b7a8f909e13204ec74f565be6217a21c12e00e522dc18ecf1cbff42a6dc6
data/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Opera Changelog
2
2
 
3
+ ### 0.2.7 - October 29, 2021
4
+
5
+ - Adds `finish_if` step to DSL
6
+
7
+ ### 0.2.6 - October 29, 2021
8
+
9
+ - New method Result#failures that returns combined errors and exceptions
10
+
11
+ ### 0.2.5 - August 3, 2021
12
+
13
+ - make sure that `default` option in accessors is always lambda
14
+
15
+ ### 0.2.4 - July 26, 2021
16
+
17
+ - prevent default from overwrite falsy values
18
+ - allow params and dependencies to get defaults
19
+
3
20
  ### 0.2.3 - July 26, 2021
4
21
 
5
22
  - Support context, params and dependencies accessors
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- opera (0.2.3)
4
+ opera (0.2.7)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -144,6 +144,8 @@ end
144
144
 
145
145
  [Success](#user-content-success)
146
146
 
147
+ [Finish if](#user-content-finish-if)
148
+
147
149
  [Inner Operation](#user-content-inner-operation)
148
150
 
149
151
  [Inner Operations](#user-content-inner-operations)
@@ -712,6 +714,67 @@ Profile::Create.call(params: {
712
714
  #<Opera::Operation::Result:0x007fd0248e5638 @errors={"mailer"=>["Missing dependency"]}, @exceptions={}, @information={}, @executions=[:profile_schema, :populate, :create, :update, :send_email, :output], @output={:model=>#<Profile id: 40, user_id: nil, linkedin_uid: nil, picture: nil, headline: nil, summary: nil, first_name: "foo", last_name: "bar", created_at: "2019-01-03 12:21:35", updated_at: "2019-01-02 12:21:35", agree_to_terms_and_conditions: nil, registration_status: "", account_id: 1, start_date: nil, supervisor_id: nil, picture_processing: false, statistics: {}, data: {}, notification_timestamps: {}, suggestions: {}, notification_settings: {}, contact_information: []>}>
713
715
  ```
714
716
 
717
+ ### Finish If
718
+
719
+ ```ruby
720
+ class Profile::Create < Opera::Operation::Base
721
+ context_accessor :profile
722
+ dependencies_reader :current_account, :mailer
723
+
724
+ validate :profile_schema
725
+
726
+ step :create
727
+ finish_if :profile_create_only
728
+ step :update
729
+
730
+ success do
731
+ step :send_email
732
+ step :output
733
+ end
734
+
735
+ def profile_schema
736
+ Dry::Validation.Schema do
737
+ required(:first_name).filled
738
+ end.call(params)
739
+ end
740
+
741
+ def create
742
+ self.profile = current_account.profiles.create(params)
743
+ end
744
+
745
+ def profile_create_only
746
+ dependencies[:create_only].present?
747
+ end
748
+
749
+ def update
750
+ profile.update(updated_at: 1.day.ago)
751
+ end
752
+
753
+ # NOTE: We can add an error in this step and it won't break the execution
754
+ def send_email
755
+ result.add_error('mailer', 'Missing dependency')
756
+ mailer&.send_mail(profile: profile)
757
+ end
758
+
759
+ def output
760
+ result.output = { model: context[:profile] }
761
+ end
762
+ end
763
+ ```
764
+
765
+ #### Example with information (real and total) from benchmark
766
+
767
+ ```ruby
768
+ Profile::Create.call(params: {
769
+ first_name: :foo,
770
+ last_name: :bar
771
+ }, dependencies: {
772
+ create_only: true,
773
+ current_account: Account.find(1)
774
+ })
775
+ #<Opera::Operation::Result:0x007fd0248e5638 @errors={}, @exceptions={}, @information={}, @executions=[:profile_schema, :create, :profile_create_only], @output={}>
776
+ ```
777
+
715
778
  ### Inner Operation
716
779
 
717
780
  ```ruby
@@ -60,7 +60,13 @@ module Opera
60
60
  check_method_availability!(attribute)
61
61
 
62
62
  define_method(attribute) do
63
- send(method)[attribute] ||= options[:default]
63
+ value = send(method).key?(attribute) ? send(method)[attribute] : self.instance_exec(&options[:default])
64
+
65
+ if send(method).frozen?
66
+ send(method)[attribute] || value
67
+ else
68
+ send(method)[attribute] ||= value
69
+ end
64
70
  end
65
71
  end
66
72
  end
@@ -3,7 +3,7 @@
3
3
  module Opera
4
4
  module Operation
5
5
  module Builder
6
- INSTRUCTIONS = %I[validate transaction benchmark step success operation operations].freeze
6
+ INSTRUCTIONS = %I[validate transaction benchmark step success finish_if operation operations].freeze
7
7
 
8
8
  def self.included(base)
9
9
  base.extend(ClassMethods)
@@ -46,6 +46,8 @@ module Opera
46
46
  Instructions::Executors::Transaction.new(operation).call(instruction)
47
47
  when :benchmark
48
48
  Instructions::Executors::Benchmark.new(operation).call(instruction)
49
+ when :finish_if
50
+ Instructions::Executors::FinishIf.new(operation).call(instruction)
49
51
  else
50
52
  raise(UnknownInstructionError, "Unknown instruction #{instruction[:kind]}")
51
53
  end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Opera
4
+ module Operation
5
+ module Instructions
6
+ module Executors
7
+ class FinishIf < Executor
8
+ def call(instruction)
9
+ instruction[:kind] = :step
10
+ operation.finish! if super
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -28,6 +28,10 @@ module Opera
28
28
  !failure?
29
29
  end
30
30
 
31
+ def failures
32
+ errors.merge(exceptions)
33
+ end
34
+
31
35
  # rubocop:disable Metrics/MethodLength
32
36
  def add_error(field, message)
33
37
  @errors[field] ||= []
@@ -8,6 +8,7 @@ require 'opera/operation/config'
8
8
  require 'opera/operation/instructions/executors/success'
9
9
  require 'opera/operation/instructions/executors/transaction'
10
10
  require 'opera/operation/instructions/executors/benchmark'
11
+ require 'opera/operation/instructions/executors/finish_if'
11
12
  require 'opera/operation/instructions/executors/validate'
12
13
  require 'opera/operation/instructions/executors/operation'
13
14
  require 'opera/operation/instructions/executors/operations'
@@ -15,6 +16,5 @@ require 'opera/operation/instructions/executors/step'
15
16
 
16
17
  module Opera
17
18
  module Operation
18
-
19
19
  end
20
20
  end
data/lib/opera/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Opera
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opera
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - ProFinda Development Team
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-26 00:00:00.000000000 Z
11
+ date: 2021-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-validation
@@ -84,6 +84,7 @@ files:
84
84
  - lib/opera/operation/config.rb
85
85
  - lib/opera/operation/executor.rb
86
86
  - lib/opera/operation/instructions/executors/benchmark.rb
87
+ - lib/opera/operation/instructions/executors/finish_if.rb
87
88
  - lib/opera/operation/instructions/executors/operation.rb
88
89
  - lib/opera/operation/instructions/executors/operations.rb
89
90
  - lib/opera/operation/instructions/executors/step.rb