diff --git a/bin/console b/bin/console index 5917f05..3460194 100755 --- a/bin/console +++ b/bin/console @@ -15,4 +15,11 @@ require_relative "../lib/fun-ruby" require_relative "../tooling/generators/module" +class Container + extend F::Container::DSL + + namespace :math do + f(:sum) { ->(x, y) { x + y}} + end +end IRB.start(__FILE__) diff --git a/lib/fun_ruby.rb b/lib/fun_ruby.rb index 7a6fdcc..df5e997 100644 --- a/lib/fun_ruby.rb +++ b/lib/fun_ruby.rb @@ -2,6 +2,7 @@ require_relative "fun_ruby/container" require_relative "fun_ruby/container/define" +require_relative "fun_ruby/container/dsl" # Top-level namespace module FunRuby diff --git a/lib/fun_ruby/container/dsl.rb b/lib/fun_ruby/container/dsl.rb new file mode 100644 index 0000000..06476b3 --- /dev/null +++ b/lib/fun_ruby/container/dsl.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require "forwardable" + +module FunRuby + module Container + # Holds DSL for allowing using in classes/modules + module DSL + def_delegator :_fun_ruby_define_api, :function, :f, :namespace + + def [](key) + _fun_ruby_resolve_api.call(key0) + end + + private + + def _fun_ruby_container + @_fun_ruby_container ||= Container.new( + Config.new(override: true) + ) + end + + def _fun_ruby_define_api + @_fun_ruby_define_api ||= Define.build(_fun_ruby_container) + end + + def _fun_ruby_resolve_api + @_fun_ruby_resolve_api ||= Resolve.build(_fun_ruby_container) + end + end + end +end