lib/delorean/model.rb in delorean_lang-0.5.3 vs lib/delorean/model.rb in delorean_lang-0.5.4
- old
+ new
@@ -1,76 +1,12 @@
# frozen_string_literal: true
require 'delorean/const'
+require 'delorean/functions'
module Delorean
module Model
def self.included(base)
- base.send :extend, ClassMethods
- end
-
- module ClassMethods
- def delorean_fn(name, options = {})
- define_singleton_method(name) do |*args|
- yield(*args)
- end
-
- sig = options[:sig]
-
- raise 'no signature' unless sig
-
- if sig
- sig = [sig, sig] if sig.is_a? Integer
- raise 'Bad signature' unless sig.is_a?(Array) && (sig.length == 2)
-
- const_set(name.to_s.upcase + Delorean::SIG, sig)
- end
- end
-
- # FIXME: IDEA: we just make :cache an argument to delorean_fn.
- # That way, we don't need the cached_ flavors. It'll make all
- # this code a lot simpler. We should also just add the :private
- # mechanism here.
-
- # By default implements a VERY HACKY class-based (per process) caching
- # mechanism for database lookup results. Issues include: cached
- # values are ActiveRecord objects. Query results can be very
- # large lists which we count as one item in the cache. Caching
- # mechanism will result in large processes.
- def cached_delorean_fn(name, options = {})
- delorean_fn(name, options) do |*args|
- delorean_cache_adapter = ::Delorean::Cache.adapter
- # Check if caching should be performed
- next yield(*args) unless delorean_cache_adapter.cache_item?(
- klass: self, method_name: name, args: args
- )
-
- cache_key = delorean_cache_adapter.cache_key(
- klass: self, method_name: name, args: args
- )
- cached_item = delorean_cache_adapter.fetch_item(
- klass: self, cache_key: cache_key, default: :NF
- )
-
- next cached_item if cached_item != :NF
-
- res = yield(*args)
-
- delorean_cache_adapter.cache_item(
- klass: self, cache_key: cache_key, item: res
- )
-
- # Since we're caching this object and don't want anyone
- # changing it. FIXME: ideally should freeze this object
- # recursively.
- res.freeze if res.respond_to?(:freeze)
-
- res
- end
- end
-
- def clear_lookup_cache!
- ::Delorean::Cache.adapter.clear!(klass: self)
- end
+ base.send :extend, ::Delorean::Functions
end
end
end