rubidux 0.0.8 → 0.0.9

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: 852ffb26464ab705f8939b49a69668ab9a91568c
4
- data.tar.gz: b4547d84ddae4276a32a68f3cfff4988f4873421
3
+ metadata.gz: 8751a6350f4ba0c1c4f3f817a0b3dc9335b92a35
4
+ data.tar.gz: 4419eb5ec1d693741befdb730ce97e1956e493df
5
5
  SHA512:
6
- metadata.gz: 2a8431da9e841771a7f178bf0badbf31072939fbb80f37ad204e9d515a60ec221324de296ca04103e0f52d7cfce40a9f05df75f9d0a247548dc44e15df233c67
7
- data.tar.gz: 93a145c9d686f3761cdf21cb75bf04fd9b6a8e6ac07bc7e220e08c5dbae8a9605b5d87cef9e1effad95014b6ebfa68de0a6af2536d7c98d2816844f9ffaef6f5
6
+ metadata.gz: 146c28eaecf12d6eff47ca737876a45c6a379f116e502c13b1f9078782ba588c00ae3c3bbe2302644ade14bd20bab88770506129e67f44ec681880560eb38428
7
+ data.tar.gz: ae28736c964ac50955c902d144b2069b85ffae7ab25f53dd7a37f5fc093221d051874b519ccc3cd008905d847d39b281a45422d26b89f065afc372b207ab12f0
data/.gitignore CHANGED
@@ -8,4 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  /debug.rb
11
- /*.gem
11
+ /*.gem
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3.0
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/davidjuin0519/rubidux.svg?branch=master)](https://travis-ci.org/davidjuin0519/rubidux.svg?branch=master)
2
+
1
3
  # Rubidux
2
4
 
3
5
  Rubidux is a tiny state management library inspired by [Redux](https://github.com/reactjs/redux)
@@ -1,24 +1,30 @@
1
1
  module Rubidux
2
- class Middleware
3
- def self.init(&block)
4
- -> (**middleware_api) {
5
- -> (_next) {
6
- -> (action) {
7
- block.(_next, action, **middleware_api)
2
+ module Middleware
3
+ def create
4
+ -> fn {
5
+ -> **middleware_api {
6
+ -> _next {
7
+ -> action {
8
+ fn.(_next, action, **middleware_api)
9
+ }
8
10
  }
9
11
  }
10
12
  }
11
13
  end
12
14
 
13
- def self.apply(*middlewares)
14
- -> (get_state, dispatch) {
15
- middleware_api = {
16
- get_state: get_state,
17
- dispatch: -> (action) { dispatch.(action) }
15
+ def apply
16
+ -> *middlewares {
17
+ -> (get_state, dispatch) {
18
+ middleware_api = {
19
+ get_state: get_state,
20
+ dispatch: -> action { new_dispatch.(action) }
21
+ }
22
+ chain = middlewares.map { |middleware| middleware.(middleware_api) }
23
+ new_dispatch = Rebidux::Util.compose.(*chain).(dispatch)
18
24
  }
19
- chain = middlewares.map { |middleware| middleware.(middleware_api) }
20
- new_dispatch = Rebidux::Util.compose(*chain).(dispatch)
21
25
  }
22
26
  end
27
+
28
+ module_function :create, :apply
23
29
  end
24
30
  end
@@ -1,14 +1,18 @@
1
1
  module Rubidux
2
- class Reducer
3
- def self.combine(**reducers)
4
- -> (state, action) {
5
- state ||= {}
6
- reducers.
7
- lazy.
8
- select { |key, reducer| reducer.is_a? Proc }.
9
- map { |key, reducer| [key, reducer.(state[key], action)] }.
10
- to_h
2
+ module Reducer
3
+ def combine
4
+ -> **reducers {
5
+ -> (state, action) {
6
+ state ||= {}
7
+ reducers.
8
+ lazy.
9
+ select { |key, reducer| reducer.is_a? Proc }.
10
+ map { |key, reducer| [key, reducer.(state[key], action)] }.
11
+ to_h
12
+ }
11
13
  }
12
14
  end
15
+
16
+ module_function :combine
13
17
  end
14
18
  end
data/lib/rubidux/store.rb CHANGED
@@ -1,26 +1,38 @@
1
1
  module Rubidux
2
2
  class Store
3
3
  attr_reader :state
4
- attr_reader :reducer
5
- attr_reader :listeners
6
4
  attr_reader :dispatch
7
5
  attr_reader :subscribe
6
+ attr_reader :listeners
7
+ attr_accessor :reducer
8
+
9
+ INITIALIZE = :INITIALIZE
8
10
 
9
- def initialize(reducer, preload_state, enhancer = nil)
11
+ def initialize(reducer:, preloaded_state: {}, enhancer: nil)
12
+ raise ArgumentError.new("Expect preloaded state to be a Hash.") unless preloaded_state.is_a? Hash
10
13
  raise ArgumentError.new("Expect reducer to be a Proc.") unless reducer.is_a? Proc
11
- @state = preload_state || {}
12
- @listeners = []
14
+ raise ArgumentError.new("Expect enhancer to be a Proc.") unless (!enhancer || enhancer.is_a?(Proc))
15
+
16
+ @state = {}
13
17
  @reducer = reducer
14
- @dispatch = _dispatch
18
+ @listeners = []
15
19
  @subscribe = _subscribe
16
20
 
17
- @dispatch = enhancer.(-> { @state }, @dispatch) if enhancer
21
+ @dispatch = enhancer ? enhancer.(-> { @state }, _dispatch) : _dispatch
22
+ @dispatch.({ type: INITIALIZE })
23
+
24
+ @state = @state.merge preloaded_state
18
25
  end
19
26
 
20
27
  private
21
28
 
29
+ attr_writer :state
30
+ attr_writer :dispatch
31
+ attr_writer :subscribe
32
+ attr_writer :listeners
33
+
22
34
  def _dispatch
23
- -> (action) {
35
+ -> action {
24
36
  raise ArgumentError.new("Expect action to have key 'type'.") unless action[:type]
25
37
  @state = @reducer.(@state, action)
26
38
  @listeners.each(&:call)
@@ -29,19 +41,11 @@ module Rubidux
29
41
  end
30
42
 
31
43
  def _subscribe
32
- -> (listener) {
44
+ -> listener {
33
45
  raise ArgumentError.new("Expect listener to be a Proc.") unless listener.is_a? Proc
34
46
  @listeners.push listener
35
47
  -> { @listeners.delete listener }
36
48
  }
37
49
  end
38
50
  end
39
-
40
- private
41
-
42
- attr_writer :state
43
- attr_writer :reducer
44
- attr_writer :listeners
45
- attr_writer :dispatch
46
- attr_writer :subscribe
47
51
  end
data/lib/rubidux/util.rb CHANGED
@@ -1,13 +1,17 @@
1
1
  module Rebidux
2
- class Util
3
- def self.compose(*funcs)
4
- if funcs.size == 1
5
- funcs[0]
6
- else
7
- last = funcs[funcs.size-1]
8
- rest = funcs[0..funcs.size-2].reverse
9
- -> (*args) { rest.reduce(last.(*args)) { |composed, f| f.(composed) } }
10
- end
2
+ module Util
3
+ def compose
4
+ -> *funcs {
5
+ if funcs.size == 1
6
+ funcs[0]
7
+ else
8
+ last = funcs[funcs.size-1]
9
+ rest = funcs[0..funcs.size-2].reverse
10
+ -> (*args) { rest.reduce(last.(*args)) { |composed, f| f.(composed) } }
11
+ end
12
+ }
11
13
  end
14
+
15
+ module_function :compose
12
16
  end
13
17
  end
@@ -1,3 +1,3 @@
1
1
  module Rubidux
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
data/rubidux.gemspec CHANGED
@@ -25,4 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "rake", ">= 10.0"
26
26
  spec.add_development_dependency "minitest", ">= 5.8"
27
27
  spec.add_development_dependency "minitest-reporters", ">= 1.1"
28
+ spec.add_development_dependency "pry"
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubidux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juin Chiu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-31 00:00:00.000000000 Z
11
+ date: 2016-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: A tiny ruby framework inspired by Redux
70
84
  email:
71
85
  - davidjuin0519@gmail.com
@@ -74,6 +88,7 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - ".gitignore"
91
+ - ".travis.yml"
77
92
  - Gemfile
78
93
  - LICENSE.txt
79
94
  - README.md