lib/momm.rb in momm-0.0.4 vs lib/momm.rb in momm-0.0.5

- old
+ new

@@ -4,65 +4,44 @@ require "momm/feeds/ecb" require "momm/storage" require "momm/memcached" require "momm/redis_store" require "momm/calculator" +require "momm/bridge" require "momm/rails" module Momm class << self extend ::Forwardable - # Inject the storage into class variable + # Default options setup # - # == Parameters - # storage_name:: - # :redis_store or memcached. Memcached is set as default. + # == Example + # Momm.setup do + # store :redis_store, host: "127.0.0.1" + # end # - # == Returns - # the picked storage - # - # == Examples - # store :redis_store, port: 12345 - # - def store(storage_name, **kv) - @storage = begin - name = storage_name.to_s.split('_').map(&:capitalize).join - klass = Kernel.const_get("Momm::#{name}") - - klass.new **kv - end + def setup(&block) + bridge.instance_eval(&block) end - # Inject the storage into class variable - # - # == Parameters - # feed_name:: - # currently only support ECB - # - # == Returns - # the picked feed - # - # == Examples - # source :ECB (which is by default) - # - def source(feed_name) - @feed = Kernel.const_get("Momm::Feeds::#{feed_name}").instance - end - - attr_reader :storage, :feed - # delegate the exchange, :currencies, exchange_rate, # as well as meta programmed methods to module level delegate [:currencies, :exchange, :exchange_rate, :method_missing, :respond_to?, :update! ] => :calculator + delegate [:store, :source ] => :bridge + private # Delegate the calculator def calculator - @calculator = Calculator.new( - (storage || Memcached.new), (feed || Feeds::ECB.instance)) + @calculator = Calculator.new bridge.storage, bridge.feed + end + + # Delegate the bridge + def bridge + @bridge ||= Bridge.new end end # YAS BANNER = <<-EOS \ No newline at end of file