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
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/dried_interaction/instance_methods.rb', line 7 def call(*args) interaction_contract_error('Call method allows only one argument') if args.size != 1 arg = args.first contract = self.class.contract_validator contract_params = fetch_contract_params(contract) check_params_presence_in_args(contract_params, arg.keys) 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
21 22 23 24 25 26 |
# File 'lib/dried_interaction/instance_methods.rb', line 21 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
28 29 30 31 32 |
# File 'lib/dried_interaction/instance_methods.rb', line 28 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
34 35 36 |
# File 'lib/dried_interaction/instance_methods.rb', line 34 def interaction_contract_error(msgs) raise DriedInteractionError, class: self.class.to_s, errors: Array.wrap(msgs).join('; ') end |