Sha256: 720d7e1044a2d2a9f6d3d6b360596521c9284bdf278e180c75c644caa416289e

Contents?: true

Size: 709 Bytes

Versions: 1

Compression:

Stored size: 709 Bytes

Contents

module JSONAPIonify
  module UnstrictProc
    refine Proc do
      def unstrict
        return self unless lambda?
        req_count = required_parameters.count
        Proc.new do |*arguments|
          if req_count > arguments.count
            (req_count - arguments.count).times { arguments << nil }
          elsif req_count < arguments.count
            arguments = req_count == 0 ? [] : arguments[0..(req_count - 1)]
          end
          call(*arguments)
        end
      end

      private

      def parameters_hash
        parameters.each_with_object({}) { |(k, v), h| (h[k] ||= []) << v }
      end

      def required_parameters
        parameters_hash[:req] || []
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jsonapionify-0.0.1.pre lib/jsonapionify/unstrict_proc.rb