lib/key_mapable.rb in key_mapable-0.1.0 vs lib/key_mapable.rb in key_mapable-0.2.0
- old
+ new
@@ -1,42 +1,15 @@
# frozen_string_literal: true
require "key_mapable/version"
require "key_mapable/mapper"
-# Used to map the instance of the extended class to a new format.
-#
-# Usage:
-#
-# class MyClass
-# extend KeyMapable
-#
-# # Define a method called `#to_h` that use the provided map. The keys
-# # will be accessed on the provided subject.
-# define_map(:to_h, subject: :my_reader) do
-# # Map the value of `#name` to the key 'Name'.
-# key_map(:name, 'Name')
-#
-# # Map the value of `#maybe_value` to the key 'GuaranteedValue'.
-# # Transform the value by calling `#to_s` first.
-# key_map(:maybe_value, 'GuaranteedValue', &:to_s)
-#
-# # Map the key 'Name' to the value provided by the block.
-# key_value('AConstant') { 'Foo' }
-#
-# # Map every item returned from `#rows`.
-# array_key_map(:rows, 'Rows') do
-# # Map the value of `#id` to the key 'Id'.
-# key_map(:id, 'Id')
-# end
-# end
-# end
module KeyMapable
- def define_map(method_name, subject: :self, &block)
+ def define_map(method_name, resolve: ->(val) { val }, subject: :itself, &block)
define_method(method_name) do
value = public_send(subject)
mapper = Mapper.new(value)
mapper.instance_eval(&block)
- mapper.resolve
+ resolve.call(mapper.tree)
end
end
end