rbdux 0.2 → 0.3

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: 696d9041db4b07c10faa88172f0caf377671d414
4
- data.tar.gz: 0119532c811ec2326d07bc5e4a81a067901bb7dd
3
+ metadata.gz: 489d4aef2c6dd23bf3eff299d92a54fcd586b06c
4
+ data.tar.gz: 2025f4a77099e6c67fe0290dbad037cbdedc9d38
5
5
  SHA512:
6
- metadata.gz: cd12a4029311954a642eb2319afd055afee8ccadfe2ed9f9c7a679e1a7936f0329eb00cf106fd7be02a58ab4c5f4172c4aadbb93e09af393ff8c612b98c44f9b
7
- data.tar.gz: 13ff0be159045cff7f3370ae228f310ca342b47f07358c2610e859f2d4af573de3817a4e2aeae6ae725642b228f2b38e0fb88315b3f0ed5bf0d89c1bd73b5f50
6
+ metadata.gz: 70068e2274846378414c2699bb1f6a71cc57a6a033036925eff07f1b100e783acbd2d7961b916ccf23639609403f4e57ddc82ea1c2994ba8b559b2f6d669754a
7
+ data.tar.gz: 7ba0d585c7ed46c5cb85765a343f451441a12842f277b468f52580218f803babb6c7421e67b178ad67c4ac11619c63d2bcce5edb25cf4da2c4c523b0677ff892
data/lib/rbdux/store.rb CHANGED
@@ -36,13 +36,13 @@ module Rbdux
36
36
  self
37
37
  end
38
38
 
39
- def get(state_key = nil)
39
+ def fetch(state_key = nil, default_value = nil, &block)
40
40
  validate_store_container
41
41
 
42
42
  if state_key
43
- @store_container.get(state_key)
43
+ @store_container.fetch(state_key, default_value, &block)
44
44
  else
45
- @store_container.get_all
45
+ @store_container.all
46
46
  end
47
47
  end
48
48
 
@@ -60,7 +60,7 @@ module Rbdux
60
60
  def dispatch(action)
61
61
  validate_store_container
62
62
 
63
- previous_state = @store_container.get_all
63
+ previous_state = @store_container.all
64
64
 
65
65
  dispatched_action = apply_before_middleware!(action)
66
66
 
@@ -113,12 +113,12 @@ module Rbdux
113
113
 
114
114
  def apply_after_middleware!(previous_state, action)
115
115
  @after_middleware.each do |m|
116
- m.after(previous_state, get, action)
116
+ m.after(previous_state, fetch, action)
117
117
  end
118
118
  end
119
119
 
120
120
  def apply_reducer!(reducer, action)
121
- new_state = reducer.func.call(get(reducer.state_key), action)
121
+ new_state = reducer.func.call(fetch(reducer.state_key), action)
122
122
 
123
123
  return if new_state.nil?
124
124
 
@@ -7,11 +7,15 @@ module Rbdux
7
7
  ImmutableMemoryStore.new(state)
8
8
  end
9
9
 
10
- def get(key)
11
- state[key]
10
+ def fetch(key, default_value = nil)
11
+ if block_given?
12
+ state.fetch(key) { yield }
13
+ else
14
+ state.fetch(key, default_value)
15
+ end
12
16
  end
13
17
 
14
- def get_all
18
+ def all
15
19
  state.to_h
16
20
  end
17
21
 
@@ -1,3 +1,5 @@
1
+ require 'thread'
2
+
1
3
  module Rbdux
2
4
  module Stores
3
5
  class MemoryStore
@@ -5,20 +7,28 @@ module Rbdux
5
7
  MemoryStore.new(state)
6
8
  end
7
9
 
8
- def get(key)
9
- state[key]
10
+ def fetch(key, default_value = nil)
11
+ if block_given?
12
+ state.fetch(key) { yield }
13
+ else
14
+ state.fetch(key, default_value)
15
+ end
10
16
  end
11
17
 
12
- def get_all
18
+ def all
13
19
  state
14
20
  end
15
21
 
16
22
  def set(key, value)
17
- state[key] = value
23
+ @lock.synchronize do
24
+ state[key] = value
25
+ end
18
26
  end
19
27
 
20
28
  def replace(state)
21
- @state = state
29
+ @lock.synchronize do
30
+ @state = state
31
+ end
22
32
  end
23
33
 
24
34
  private
@@ -27,6 +37,7 @@ module Rbdux
27
37
 
28
38
  def initialize(state)
29
39
  @state = state
40
+ @lock = Mutex.new
30
41
  end
31
42
  end
32
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbdux
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Tompkins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-08 00:00:00.000000000 Z
11
+ date: 2016-08-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: josh@joshtompkins.com
@@ -46,5 +46,5 @@ rubyforge_project:
46
46
  rubygems_version: 2.5.1
47
47
  signing_key:
48
48
  specification_version: 4
49
- summary: A simple one-way dataflow library, inspired by Redux
49
+ summary: A simple one-way dataflow library, inspired by Redux.
50
50
  test_files: []