rubidux 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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