momm 0.0.4 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 88f614087dabe0ac7ecef7529fd568c0c1ddb058
4
- data.tar.gz: 03a1106a8ecaf7d43d0589b2ebdb6b0fcb79ee46
3
+ metadata.gz: 3d4fcb3d9c4bd72a12fe00f385a990f5687cde25
4
+ data.tar.gz: c7cdcb1425605cfcd312f86378bb43385ebd13ba
5
5
  SHA512:
6
- metadata.gz: f6d66f452241aeac2a0ebf7003fd42880a228b47423a99f7edb8a6a8c6fcf926a3dd9ea04844d1ec958273804cf4b12c398e2381a2d32cc0854e1e4b1973c116
7
- data.tar.gz: 12575b5a233a3c8a088a9a7b0c5f649237e1c9a7453023b4f5568b0b4bf0324b2bdb8ca3521895506c80477ec9a69df898024dd5180bb555e2dfe639bad22082
6
+ metadata.gz: 2c1df21f53643262c53f47dd2bcec2b7e947c9f209a592d481e84dc0c0e952a14bb2a7f211b3197f7cc8836d1164ff5851543e9c3f4529cc4f4a25008923e439
7
+ data.tar.gz: 176f324ad735b62a0931fa4e56399b12d0d0491165f1543e1814c48320e31022ecf089f3366283470510bb46f5196eae14d95556986ee194081d9a75b21a24f3
data/README.md CHANGED
@@ -87,6 +87,12 @@ After the gem is installed, momm provide you a command line tool. The storage en
87
87
  Momm.store :redis_store # Use redis as the default storage
88
88
 
89
89
  Momm.fed :ECB # Use ECB as the default currency exchange feeds
90
+
91
+ # Favoured way of configuration
92
+ Momm.setup do
93
+ store :redis_store, host: "127.0.0.1", namespace: "green_tea"
94
+ end
95
+
90
96
  ```
91
97
 
92
98
  ### Momm on Rails
@@ -109,8 +115,9 @@ The default Storage is Memcached, if you want to switch to Redis, you can create
109
115
  ``` ruby
110
116
 
111
117
  # momm_initialzer.rb
112
- Momm.store :redis_store, host: "127.0.0.1"
113
- Momm.source :ECB
118
+ Momm.setup do
119
+ store :redis_store, host: "127.0.0.1", namespace: "green_tea"
120
+ end
114
121
  ```
115
122
 
116
123
  After boot your rails application, you can visit '/momm'. A mounted app has already been in place.
@@ -0,0 +1,3 @@
1
+ Momm.setup do
2
+ store :redis_store, host: "127.0.0.1", namespace: "green_tea"
3
+ end
data/lib/momm.rb CHANGED
@@ -6,62 +6,41 @@ require "momm/storage"
6
6
  require "momm/memcached"
7
7
  require "momm/redis_store"
8
8
  require "momm/calculator"
9
+ require "momm/bridge"
9
10
  require "momm/rails"
10
11
  module Momm
11
12
 
12
13
  class << self
13
14
  extend ::Forwardable
14
15
 
15
- # Inject the storage into class variable
16
+ # Default options setup
16
17
  #
17
- # == Parameters
18
- # storage_name::
19
- # :redis_store or memcached. Memcached is set as default.
18
+ # == Example
19
+ # Momm.setup do
20
+ # store :redis_store, host: "127.0.0.1"
21
+ # end
20
22
  #
21
- # == Returns
22
- # the picked storage
23
- #
24
- # == Examples
25
- # store :redis_store, port: 12345
26
- #
27
- def store(storage_name, **kv)
28
- @storage = begin
29
- name = storage_name.to_s.split('_').map(&:capitalize).join
30
- klass = Kernel.const_get("Momm::#{name}")
31
-
32
- klass.new **kv
33
- end
23
+ def setup(&block)
24
+ bridge.instance_eval(&block)
34
25
  end
35
26
 
36
- # Inject the storage into class variable
37
- #
38
- # == Parameters
39
- # feed_name::
40
- # currently only support ECB
41
- #
42
- # == Returns
43
- # the picked feed
44
- #
45
- # == Examples
46
- # source :ECB (which is by default)
47
- #
48
- def source(feed_name)
49
- @feed = Kernel.const_get("Momm::Feeds::#{feed_name}").instance
50
- end
51
-
52
- attr_reader :storage, :feed
53
-
54
27
  # delegate the exchange, :currencies, exchange_rate,
55
28
  # as well as meta programmed methods to module level
56
29
  delegate [:currencies, :exchange, :exchange_rate,
57
30
  :method_missing, :respond_to?, :update! ] => :calculator
58
31
 
32
+ delegate [:store, :source ] => :bridge
33
+
59
34
  private
60
35
 
61
36
  # Delegate the calculator
62
37
  def calculator
63
- @calculator = Calculator.new(
64
- (storage || Memcached.new), (feed || Feeds::ECB.instance))
38
+ @calculator = Calculator.new bridge.storage, bridge.feed
39
+ end
40
+
41
+ # Delegate the bridge
42
+ def bridge
43
+ @bridge ||= Bridge.new
65
44
  end
66
45
  end
67
46
 
@@ -0,0 +1,47 @@
1
+ module Momm
2
+ class Bridge
3
+ def initialize(options={})
4
+ @storage = options[:store] || Memcached.new
5
+ @feed = options[:feed] || Feeds::ECB.instance
6
+ end
7
+
8
+ # Inject the storage
9
+ #
10
+ # == Parameters
11
+ # storage_name::
12
+ # :redis_store or memcached. Memcached is set as default.
13
+ #
14
+ # == Returns
15
+ # the picked storage
16
+ #
17
+ # == Examples
18
+ # store :redis_store, port: 12345
19
+ #
20
+ def store(storage_name, **kv)
21
+ @storage = begin
22
+ name = storage_name.to_s.split('_').map(&:capitalize).join
23
+ klass = Kernel.const_get("Momm::#{name}")
24
+
25
+ klass.new **kv
26
+ end
27
+ end
28
+
29
+ # Inject the feed
30
+ #
31
+ # == Parameters
32
+ # feed_name::
33
+ # currently only support ECB
34
+ #
35
+ # == Returns
36
+ # the picked feed
37
+ #
38
+ # == Examples
39
+ # source :ECB (which is by default)
40
+ #
41
+ def source(feed_name)
42
+ @feed = Kernel.const_get("Momm::Feeds::#{feed_name}").instance
43
+ end
44
+
45
+ attr_reader :storage, :feed
46
+ end
47
+ end
data/lib/momm/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Momm
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Momm::Bridge do
4
+ describe '#initialize' do
5
+ it 'should have default' do
6
+ bridge = Momm::Bridge.new
7
+
8
+ bridge.storage.should be_a(Momm::Memcached)
9
+ bridge.feed.should be_a(Momm::Feeds::ECB)
10
+ end
11
+ end
12
+
13
+ describe '#store' do
14
+ let(:bridge) { Momm::Bridge.new }
15
+
16
+ it 'should change the storage' do
17
+ bridge.store :redis_store
18
+ bridge.storage.should be_a(Momm::RedisStore)
19
+ end
20
+
21
+ it 'should change the ECB' do
22
+ bridge.source :ECB
23
+ bridge.feed.should be_a(Momm::Feeds::ECB)
24
+ end
25
+ end
26
+ end
@@ -23,11 +23,29 @@ describe Momm do
23
23
  end
24
24
  end
25
25
 
26
- context ".store" do
26
+ describe "bridge delegation" do
27
27
  it "should be successfully switch to redis store halfway" do
28
28
  Momm.store :redis_store
29
29
  Momm.send(:calculator).storage.client.should be_a(Redis::Namespace)
30
30
  Momm.store :memcached
31
31
  end
32
+
33
+ it "should be successfully switch to ECB halfway" do
34
+ Momm.source :ECB
35
+ Momm.send(:calculator).feed.should be_a(Momm::Feeds::ECB)
36
+ end
37
+ end
38
+
39
+ describe ".setup" do
40
+ it "can config" do
41
+ Momm.setup do
42
+ store :redis_store
43
+ end
44
+
45
+ Momm.send(:calculator).storage.should be_a(Momm::RedisStore)
46
+ Momm.send(:calculator).feed.should be_a(Momm::Feeds::ECB)
47
+
48
+ Momm.store :memcached
49
+ end
32
50
  end
33
51
  end
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe 'momm version' do
4
4
  it 'should be correct' do
5
- Momm::VERSION.should == '0.0.4'
5
+ Momm::VERSION.should == '0.0.5'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: momm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jingkai He
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-23 00:00:00.000000000 Z
11
+ date: 2014-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -171,7 +171,7 @@ files:
171
171
  - examples/rails_app/config/initializers/filter_parameter_logging.rb
172
172
  - examples/rails_app/config/initializers/inflections.rb
173
173
  - examples/rails_app/config/initializers/mime_types.rb
174
- - examples/rails_app/config/initializers/momm.rb
174
+ - examples/rails_app/config/initializers/momm_initializer.rb
175
175
  - examples/rails_app/config/initializers/secret_token.rb
176
176
  - examples/rails_app/config/initializers/session_store.rb
177
177
  - examples/rails_app/config/initializers/wrap_parameters.rb
@@ -189,6 +189,7 @@ files:
189
189
  - examples/rails_app/vendor/assets/javascripts/.keep
190
190
  - examples/rails_app/vendor/assets/stylesheets/.keep
191
191
  - lib/momm.rb
192
+ - lib/momm/bridge.rb
192
193
  - lib/momm/calculator.rb
193
194
  - lib/momm/feeds/ecb.rb
194
195
  - lib/momm/memcached.rb
@@ -198,6 +199,7 @@ files:
198
199
  - lib/momm/version.rb
199
200
  - lib/momm/web.rb
200
201
  - momm.gemspec
202
+ - spec/momm/bridge_spec.rb
201
203
  - spec/momm/calculator_spec.rb
202
204
  - spec/momm/feeds/ecb_spec.rb
203
205
  - spec/momm/memcached_spec.rb
@@ -235,6 +237,7 @@ signing_key:
235
237
  specification_version: 4
236
238
  summary: A Currency Exchange Calculator
237
239
  test_files:
240
+ - spec/momm/bridge_spec.rb
238
241
  - spec/momm/calculator_spec.rb
239
242
  - spec/momm/feeds/ecb_spec.rb
240
243
  - spec/momm/memcached_spec.rb
@@ -1,2 +0,0 @@
1
- Momm.store :redis_store, host: "127.0.0.1"
2
- Momm.source :ECB