mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
inflector backport
This commit is contained in:
parent
a0665105ec
commit
0b76166ad1
62
lib/freedom_patches/inflector_backport.rb
Normal file
62
lib/freedom_patches/inflector_backport.rb
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# review per rails release, this speeds up the inflector, we are not inflecting too much at the moment, except in dev
|
||||||
|
#
|
||||||
|
# note: I am working with the rails team on including this in official rails
|
||||||
|
|
||||||
|
module ActiveSupport
|
||||||
|
module Inflector
|
||||||
|
|
||||||
|
LRU_CACHE_SIZE = 200
|
||||||
|
LRU_CACHES = []
|
||||||
|
|
||||||
|
def self.clear_memoize!
|
||||||
|
LRU_CACHES.each(&:clear)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.memoize(*args)
|
||||||
|
args.each do |method_name|
|
||||||
|
cache = LruRedux::ThreadSafeCache.new(LRU_CACHE_SIZE)
|
||||||
|
LRU_CACHES << cache
|
||||||
|
|
||||||
|
uncached = "#{method_name}_without_cache"
|
||||||
|
alias_method uncached, method_name
|
||||||
|
|
||||||
|
define_method(method_name) do |*args|
|
||||||
|
# this avoids recursive locks
|
||||||
|
found = true
|
||||||
|
data = cache.fetch(args){found = false}
|
||||||
|
unless found
|
||||||
|
cache[args] = data = send(uncached, *args)
|
||||||
|
end
|
||||||
|
data
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
memoize :pluralize, :singularize, :camelize, :underscore, :humanize,
|
||||||
|
:titleize, :tableize, :classify, :foreign_key
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module ActiveSupport
|
||||||
|
module Inflector
|
||||||
|
class Inflections
|
||||||
|
def self.clear_memoize(*args)
|
||||||
|
args.each do |method_name|
|
||||||
|
orig = "#{method_name}_without_clear_memoize"
|
||||||
|
alias_method orig, method_name
|
||||||
|
define_method(method_name) do |*args|
|
||||||
|
ActiveSupport::Inflector.clear_memoize!
|
||||||
|
send(orig, *args)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
clear_memoize :acronym, :plural, :singular, :irregular, :uncountable, :human, :clear
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user