Module: ShopifyCLI::MethodObject

Overview

The MethodObject mixin can be included in any class that implements call to ensure that

  • call will always return a ShopifyCLI::Result by prepending a module that takes care of the result wrapping and
  • a to_proc method that allows instances of this class to be passed as a block.

For convenience, this mixin also adds the corresponding class methods: call and to_proc. Method and result objects pair nicely as they greatly simplify the creation of complex processing chains:

class Serialize
include MethodObject

def call(attrs)
  attrs.to_json
end
end

class Deserialize
include MethodObject

def call(json)
  JSON.parse(json)
end
end

Serialize
.call(firstname: "John", lastname: "Doe")
.then(&Deserialize)
.map { |attrs| OpenStruct.new(attrs) }
.unwrap(nil)

While this example is contrived, it still illustrates some key advantages of this programming paradigm:

  • chaining operations is as simple as repeatedly calling then or map,
  • method objects don't have to be manually instantiated but can be constructed using the & operator,
  • error handling is deferred until the result is unwrapped.

Please see the section for ShopifyCLI::Result, ShopifyCLI::Result::Success, and ShopifyCLI::Result::Failure for more information on the API of result objects.

Defined Under Namespace

Modules: AutoCreateResultObject, ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(method_object_implementation) ⇒ Object

is invoked when this mixin is included into a class. This results in

  • including SmartProperties,
  • prepending the result wrapping mechanism, and
  • adding the class methods .call and .to_proc.


109
110
111
112
113
# File 'lib/shopify_cli/method_object.rb', line 109

def self.included(method_object_implementation)
  method_object_implementation.prepend(AutoCreateResultObject)
  method_object_implementation.include(SmartProperties)
  method_object_implementation.extend(ClassMethods)
end

Instance Method Details

#to_proc ⇒ Object

returns a proc that invokes call with all arguments it receives when called itself.



119
120
121
# File 'lib/shopify_cli/method_object.rb', line 119

def to_proc
  method(:call).to_proc
end