class Keisan::Functions::DefaultRegistry
Constants
- CUSTOM_MATH_FUNCTIONS
Public Class Methods
registry()
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 43 def self.registry @registry ||= Registry.new.tap do |r| register_defaults!(r) end.freeze end
Private Class Methods
register_array_methods!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 120 def self.register_array_methods!(registry) %i(min max size flatten reverse).each do |method| registry.register!(method, Proc.new {|a| a.send(method)}, force: true) end registry.register!("range", Functions::Range.new, force: true) end
register_builtin_math!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 80 def self.register_builtin_math!(registry) Math.methods(false).each do |method| registry.register!( method, Proc.new {|*args| args = args.map(&:value) Math.send(method, *args) }, force: true ) end end
register_custom_math!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 95 def self.register_custom_math!(registry) factorial = Proc.new {|n| (1..n).inject(1) do |res, i| res * i end } nPk = Proc.new {|n, k| factorial.call(n) / factorial.call(n-k) } nCk = Proc.new {|n, k| factorial.call(n) / factorial.call(k) / factorial.call(n-k) } registry.register!(:factorial, factorial, force: true) registry.register!(:nPk, nPk, force: true) registry.register!(:permute, nPk, force: true) registry.register!(:nCk, nCk, force: true) registry.register!(:choose, nCk, force: true) CUSTOM_MATH_FUNCTIONS.each do |method| klass = Keisan::Functions.const_get(method.to_s.capitalize) registry.register!(method, klass.new, force: true) end end
register_date_time!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 155 def self.register_date_time!(registry) [::Date, ::Time].each do |klass| registry.register!(klass.to_s.downcase.to_sym, Proc.new {|*args| if args.count == 1 && args.first.is_a?(::String) AST.const_get(klass.to_s).new(klass.parse(args.first)) else AST.const_get(klass.to_s).new(klass.new(*args)) end }, force: true) end end
register_date_time_methods!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 133 def self.register_date_time_methods!(registry) register_date_time!(registry) registry.register!(:today, Proc.new { ::Date.today }, force: true) registry.register!(:day, Proc.new {|d| d.mday }, force: true) registry.register!(:weekday, Proc.new {|d| d.wday }, force: true) registry.register!(:month, Proc.new {|d| d.month }, force: true) registry.register!(:year, Proc.new {|d| d.year }, force: true) registry.register!(:now, Proc.new { ::Time.now }, force: true) registry.register!(:hour, Proc.new {|t| t.hour }, force: true) registry.register!(:minute, Proc.new {|t| t.min }, force: true) registry.register!(:second, Proc.new {|t| t.sec }, force: true) registry.register!(:strftime, Proc.new {|*args| args.first.strftime(*args[1..-1]) }, force: true) registry.register!(:to_time, Proc.new {|d| d.to_time }, force: true) registry.register!(:to_date, Proc.new {|t| t.to_date }, force: true) registry.register!(:epoch_seconds, Proc.new {|d| d.to_time - Time.new(1970, 1, 1, 0, 0, 0) }, force: true) registry.register!(:epoch_days, Proc.new {|t| t.to_date - Date.new(1970, 1, 1) }, force: true) end
register_defaults!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 51 def self.register_defaults!(registry) registry.register!(:let, Let.new, force: true) registry.register!(:puts, Puts.new, force: true) registry.register!(:break, Break.new, force: true) registry.register!(:continue, Continue.new, force: true) registry.register!(:if, If.new, force: true) registry.register!(:while, While.new, force: true) registry.register!(:diff, Diff.new, force: true) registry.register!(:replace, Replace.new, force: true) registry.register!(:map, Map.new, force: true) registry.register!(:collect, Map.new, force: true) registry.register!(:filter, Filter.new, force: true) registry.register!(:select, Filter.new, force: true) registry.register!(:reduce, Reduce.new, force: true) registry.register!(:inject, Reduce.new, force: true) registry.register!(:to_h, ToH.new, force: true) register_math!(registry) register_array_methods!(registry) register_random_methods!(registry) register_date_time_methods!(registry) end
register_math!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 75 def self.register_math!(registry) register_builtin_math!(registry) register_custom_math!(registry) end
register_random_methods!(registry)
click to toggle source
# File lib/keisan/functions/default_registry.rb, line 128 def self.register_random_methods!(registry) registry.register!(:rand, Rand.new, force: true) registry.register!(:sample, Sample.new, force: true) end