Sha256: 8bd5b9d25f15e725a84d5cb9c4fcfda224d183c7362f916172ddd6670b9ec412

Contents?: true

Size: 1.56 KB

Versions: 2

Compression:

Stored size: 1.56 KB

Contents

module Volt
  module RepoCache
    module Util
      module_function

      def setter(getter)
        :"#{getter}="
      end

      def creator(getter)
        prefix_method(getter, 'new')
      end

      def adder(getter)
        prefix_method(getter, 'add')
      end

      def remover(getter)
        prefix_method(getter, 'remove')
      end

      def prefix_method(getter, prefix)
        :"#{prefix}_#{getter.to_s.singularize}"
      end

      def arrify(object)
        object.respond_to?(:to_a) ? object.to_a : [object]
      end

      def unsupported(method)
        fail "#{method} is an unsupported operation for #{self.class.name}"
      end

      def not_yet_implemented(method)
        fail "#{method} is not yet implemented for #{self.class.name}"
      end

      def subclass_responsibility(method)
        fail "#{method} is responsibility of #{self.class.name}"
      end

      def friends_only(__method__, caller)
        unless friend?(caller)
          fail "#{self.class.name}##{__method__} for Volt::RepoCache use only, not #{caller.class.name}"
        end
      end

      def friend?(object)
        if object
          if object.is_a?(Volt::Model)
            object.respond_to?(:patched_for_cache?)
          else
            (object.class.name =~ /^Volt::RepoCache/) == 0
          end
        else
          false
        end
      end

      def time(method, line, msg = nil)
        t1 = Time.now
        r = yield
        t2 = Time.now
        debug 1, ->{['nil file', line, method, "#{msg} : took #{t2 - t1} seconds"]}
        r
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
volt-repo_cache-0.1.8 lib/volt/repo_cache/util.rb
volt-repo_cache-0.1.7 lib/volt/repo_cache/util.rb