Module: DriedInteraction::InstanceMethods
- Defined in:
- lib/dried_interaction/instance_methods.rb
Instance Method Summary collapse
- #call(*args) ⇒ Object
- #check_params_presence_in_args(contract_params, args_params) ⇒ Object
- #fetch_contract_params(contract) ⇒ Object
- #interaction_contract_error(msgs) ⇒ Object
Instance Method Details
#call(*args) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/dried_interaction/instance_methods.rb', line 10 def call(*args) interaction_contract_error('Call method allows only one argument') if args.size != 1 arg = args.first contract = self.class.contract_validator interaction_contract_error('Contract must be filled') if arg && !contract contract_params = fetch_contract_params(contract) check_result = check_params_presence_in_args(contract_params, arg.keys) return check_result if check_result&.failure? contract_result = contract.(arg) return interaction_contract_error(contract_result.errors) if contract_result.failure? super(arg) end |
#check_params_presence_in_args(contract_params, args_params) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/dried_interaction/instance_methods.rb', line 27 def check_params_presence_in_args(contract_params, args_params) missed_params = args_params - contract_params return if missed_params.empty? interaction_contract_error("Params (#{missed_params}) are not present in contract") end |
#fetch_contract_params(contract) ⇒ Object
34 35 36 37 38 |
# File 'lib/dried_interaction/instance_methods.rb', line 34 def fetch_contract_params(contract) schema = contract.is_a?(Dry::Schema::Params) ? contract : contract.schema schema.key_map.keys.map { |key| key.name.to_sym } end |
#interaction_contract_error(msgs) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/dried_interaction/instance_methods.rb', line 40 def interaction_contract_error(msgs) error = DriedInteractionError.new(class: self.class.to_s, errors: msgs) case self.class.contract_mode when :strict raise error when :soft Failure(error) else raise ArgumentError end end |