isomorfeus-redux 4.2.0 → 22.9.0.rc1

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.
Files changed (236) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +176 -0
  3. data/lib/app_state.rb +25 -0
  4. data/lib/isomorfeus/browser_store_api.rb +0 -16
  5. data/lib/isomorfeus/redux/config.rb +97 -14
  6. data/lib/isomorfeus/redux/handler.rb +35 -0
  7. data/lib/isomorfeus/redux/version.rb +5 -0
  8. data/lib/isomorfeus/redux_imports.rb +14 -0
  9. data/lib/{redux/reducers.rb → isomorfeus/redux_reducers.rb} +15 -13
  10. data/lib/isomorfeus-redux.rb +18 -30
  11. data/lib/local_store.rb +27 -30
  12. data/lib/redux/store.rb +156 -120
  13. data/lib/session_store.rb +28 -30
  14. metadata +24 -247
  15. data/lib/app_store.rb +0 -42
  16. data/lib/isomorfeus/core_ext/hash/deep_merge.rb +0 -34
  17. data/lib/isomorfeus/core_ext/kernel.rb +0 -30
  18. data/lib/isomorfeus/execution_environment.rb +0 -67
  19. data/lib/isomorfeus/redux/imports.rb +0 -17
  20. data/lib/redux/version.rb +0 -3
  21. data/lib/redux.rb +0 -118
  22. data/node_modules/.package-lock.json +0 -31
  23. data/node_modules/@babel/runtime/LICENSE +0 -22
  24. data/node_modules/@babel/runtime/README.md +0 -19
  25. data/node_modules/@babel/runtime/helpers/AsyncGenerator.js +0 -99
  26. data/node_modules/@babel/runtime/helpers/AwaitValue.js +0 -6
  27. data/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js +0 -31
  28. data/node_modules/@babel/runtime/helpers/arrayLikeToArray.js +0 -12
  29. data/node_modules/@babel/runtime/helpers/arrayWithHoles.js +0 -6
  30. data/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js +0 -8
  31. data/node_modules/@babel/runtime/helpers/assertThisInitialized.js +0 -10
  32. data/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate.js +0 -57
  33. data/node_modules/@babel/runtime/helpers/asyncIterator.js +0 -16
  34. data/node_modules/@babel/runtime/helpers/asyncToGenerator.js +0 -38
  35. data/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js +0 -8
  36. data/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js +0 -8
  37. data/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js +0 -23
  38. data/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js +0 -10
  39. data/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js +0 -14
  40. data/node_modules/@babel/runtime/helpers/classCallCheck.js +0 -8
  41. data/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js +0 -8
  42. data/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js +0 -8
  43. data/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js +0 -10
  44. data/node_modules/@babel/runtime/helpers/classNameTDZError.js +0 -6
  45. data/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js +0 -11
  46. data/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js +0 -11
  47. data/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js +0 -9
  48. data/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js +0 -10
  49. data/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js +0 -8
  50. data/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js +0 -12
  51. data/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js +0 -10
  52. data/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js +0 -9
  53. data/node_modules/@babel/runtime/helpers/classPrivateMethodSet.js +0 -6
  54. data/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js +0 -14
  55. data/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js +0 -14
  56. data/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js +0 -15
  57. data/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js +0 -9
  58. data/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet.js +0 -6
  59. data/node_modules/@babel/runtime/helpers/construct.js +0 -26
  60. data/node_modules/@babel/runtime/helpers/createClass.js +0 -18
  61. data/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js +0 -61
  62. data/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js +0 -25
  63. data/node_modules/@babel/runtime/helpers/createSuper.js +0 -25
  64. data/node_modules/@babel/runtime/helpers/decorate.js +0 -401
  65. data/node_modules/@babel/runtime/helpers/defaults.js +0 -17
  66. data/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js +0 -25
  67. data/node_modules/@babel/runtime/helpers/defineProperty.js +0 -17
  68. data/node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js +0 -95
  69. data/node_modules/@babel/runtime/helpers/esm/AwaitValue.js +0 -3
  70. data/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js +0 -28
  71. data/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +0 -9
  72. data/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +0 -3
  73. data/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js +0 -4
  74. data/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +0 -7
  75. data/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js +0 -54
  76. data/node_modules/@babel/runtime/helpers/esm/asyncIterator.js +0 -13
  77. data/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js +0 -35
  78. data/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js +0 -4
  79. data/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js +0 -5
  80. data/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js +0 -20
  81. data/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js +0 -7
  82. data/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js +0 -11
  83. data/node_modules/@babel/runtime/helpers/esm/classCallCheck.js +0 -5
  84. data/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js +0 -5
  85. data/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js +0 -5
  86. data/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js +0 -7
  87. data/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js +0 -3
  88. data/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js +0 -6
  89. data/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js +0 -6
  90. data/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js +0 -5
  91. data/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js +0 -7
  92. data/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js +0 -4
  93. data/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js +0 -7
  94. data/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js +0 -7
  95. data/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js +0 -5
  96. data/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js +0 -3
  97. data/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js +0 -8
  98. data/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js +0 -8
  99. data/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js +0 -9
  100. data/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js +0 -5
  101. data/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js +0 -3
  102. data/node_modules/@babel/runtime/helpers/esm/construct.js +0 -18
  103. data/node_modules/@babel/runtime/helpers/esm/createClass.js +0 -15
  104. data/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js +0 -57
  105. data/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js +0 -21
  106. data/node_modules/@babel/runtime/helpers/esm/createSuper.js +0 -19
  107. data/node_modules/@babel/runtime/helpers/esm/decorate.js +0 -396
  108. data/node_modules/@babel/runtime/helpers/esm/defaults.js +0 -14
  109. data/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js +0 -22
  110. data/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -14
  111. data/node_modules/@babel/runtime/helpers/esm/extends.js +0 -17
  112. data/node_modules/@babel/runtime/helpers/esm/get.js +0 -20
  113. data/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js +0 -6
  114. data/node_modules/@babel/runtime/helpers/esm/inherits.js +0 -15
  115. data/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js +0 -6
  116. data/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js +0 -9
  117. data/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js +0 -3
  118. data/node_modules/@babel/runtime/helpers/esm/instanceof.js +0 -7
  119. data/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js +0 -5
  120. data/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js +0 -51
  121. data/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js +0 -3
  122. data/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js +0 -12
  123. data/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +0 -3
  124. data/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js +0 -29
  125. data/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimitLoose.js +0 -14
  126. data/node_modules/@babel/runtime/helpers/esm/jsx.js +0 -46
  127. data/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js +0 -9
  128. data/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js +0 -5
  129. data/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +0 -3
  130. data/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +0 -3
  131. data/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js +0 -3
  132. data/node_modules/@babel/runtime/helpers/esm/objectSpread.js +0 -19
  133. data/node_modules/@babel/runtime/helpers/esm/objectSpread2.js +0 -39
  134. data/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +0 -19
  135. data/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +0 -14
  136. data/node_modules/@babel/runtime/helpers/esm/package.json +0 -3
  137. data/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js +0 -11
  138. data/node_modules/@babel/runtime/helpers/esm/readOnlyError.js +0 -3
  139. data/node_modules/@babel/runtime/helpers/esm/set.js +0 -51
  140. data/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +0 -8
  141. data/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js +0 -7
  142. data/node_modules/@babel/runtime/helpers/esm/slicedToArray.js +0 -7
  143. data/node_modules/@babel/runtime/helpers/esm/slicedToArrayLoose.js +0 -7
  144. data/node_modules/@babel/runtime/helpers/esm/superPropBase.js +0 -9
  145. data/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js +0 -11
  146. data/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js +0 -8
  147. data/node_modules/@babel/runtime/helpers/esm/tdz.js +0 -3
  148. data/node_modules/@babel/runtime/helpers/esm/temporalRef.js +0 -5
  149. data/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js +0 -1
  150. data/node_modules/@babel/runtime/helpers/esm/toArray.js +0 -7
  151. data/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +0 -7
  152. data/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -13
  153. data/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -6
  154. data/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -15
  155. data/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +0 -9
  156. data/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js +0 -6
  157. data/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js +0 -37
  158. data/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js +0 -65
  159. data/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js +0 -3
  160. data/node_modules/@babel/runtime/helpers/extends.js +0 -21
  161. data/node_modules/@babel/runtime/helpers/get.js +0 -27
  162. data/node_modules/@babel/runtime/helpers/getPrototypeOf.js +0 -10
  163. data/node_modules/@babel/runtime/helpers/inherits.js +0 -19
  164. data/node_modules/@babel/runtime/helpers/inheritsLoose.js +0 -10
  165. data/node_modules/@babel/runtime/helpers/initializerDefineProperty.js +0 -12
  166. data/node_modules/@babel/runtime/helpers/initializerWarningHelper.js +0 -6
  167. data/node_modules/@babel/runtime/helpers/instanceof.js +0 -10
  168. data/node_modules/@babel/runtime/helpers/interopRequireDefault.js +0 -8
  169. data/node_modules/@babel/runtime/helpers/interopRequireWildcard.js +0 -54
  170. data/node_modules/@babel/runtime/helpers/isNativeFunction.js +0 -6
  171. data/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js +0 -15
  172. data/node_modules/@babel/runtime/helpers/iterableToArray.js +0 -6
  173. data/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js +0 -32
  174. data/node_modules/@babel/runtime/helpers/iterableToArrayLimitLoose.js +0 -17
  175. data/node_modules/@babel/runtime/helpers/jsx.js +0 -50
  176. data/node_modules/@babel/runtime/helpers/maybeArrayLike.js +0 -13
  177. data/node_modules/@babel/runtime/helpers/newArrowCheck.js +0 -8
  178. data/node_modules/@babel/runtime/helpers/nonIterableRest.js +0 -6
  179. data/node_modules/@babel/runtime/helpers/nonIterableSpread.js +0 -6
  180. data/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js +0 -6
  181. data/node_modules/@babel/runtime/helpers/objectSpread.js +0 -23
  182. data/node_modules/@babel/runtime/helpers/objectSpread2.js +0 -42
  183. data/node_modules/@babel/runtime/helpers/objectWithoutProperties.js +0 -23
  184. data/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +0 -17
  185. data/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js +0 -16
  186. data/node_modules/@babel/runtime/helpers/readOnlyError.js +0 -6
  187. data/node_modules/@babel/runtime/helpers/set.js +0 -55
  188. data/node_modules/@babel/runtime/helpers/setPrototypeOf.js +0 -12
  189. data/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js +0 -10
  190. data/node_modules/@babel/runtime/helpers/slicedToArray.js +0 -14
  191. data/node_modules/@babel/runtime/helpers/slicedToArrayLoose.js +0 -14
  192. data/node_modules/@babel/runtime/helpers/superPropBase.js +0 -13
  193. data/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js +0 -14
  194. data/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js +0 -11
  195. data/node_modules/@babel/runtime/helpers/tdz.js +0 -6
  196. data/node_modules/@babel/runtime/helpers/temporalRef.js +0 -10
  197. data/node_modules/@babel/runtime/helpers/temporalUndefined.js +0 -4
  198. data/node_modules/@babel/runtime/helpers/toArray.js +0 -14
  199. data/node_modules/@babel/runtime/helpers/toConsumableArray.js +0 -14
  200. data/node_modules/@babel/runtime/helpers/toPrimitive.js +0 -17
  201. data/node_modules/@babel/runtime/helpers/toPropertyKey.js +0 -11
  202. data/node_modules/@babel/runtime/helpers/typeof.js +0 -22
  203. data/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +0 -13
  204. data/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js +0 -10
  205. data/node_modules/@babel/runtime/helpers/wrapNativeSuper.js +0 -45
  206. data/node_modules/@babel/runtime/helpers/wrapRegExp.js +0 -72
  207. data/node_modules/@babel/runtime/helpers/writeOnlyError.js +0 -6
  208. data/node_modules/@babel/runtime/package.json +0 -848
  209. data/node_modules/@babel/runtime/regenerator/index.js +0 -1
  210. data/node_modules/redux/LICENSE.md +0 -21
  211. data/node_modules/redux/README.md +0 -322
  212. data/node_modules/redux/dist/redux.js +0 -768
  213. data/node_modules/redux/dist/redux.min.js +0 -1
  214. data/node_modules/redux/es/redux.js +0 -716
  215. data/node_modules/redux/es/redux.mjs +0 -1
  216. data/node_modules/redux/index.d.ts +0 -776
  217. data/node_modules/redux/lib/redux.js +0 -730
  218. data/node_modules/redux/package.json +0 -108
  219. data/node_modules/redux/src/applyMiddleware.js +0 -41
  220. data/node_modules/redux/src/bindActionCreators.js +0 -52
  221. data/node_modules/redux/src/combineReducers.js +0 -175
  222. data/node_modules/redux/src/compose.js +0 -22
  223. data/node_modules/redux/src/createStore.js +0 -347
  224. data/node_modules/redux/src/index.js +0 -37
  225. data/node_modules/redux/src/utils/actionTypes.js +0 -17
  226. data/node_modules/redux/src/utils/formatProdErrorMessage.js +0 -15
  227. data/node_modules/redux/src/utils/isPlainObject.js +0 -14
  228. data/node_modules/redux/src/utils/kindOf.js +0 -70
  229. data/node_modules/redux/src/utils/symbol-observable.js +0 -3
  230. data/node_modules/redux/src/utils/warning.js +0 -19
  231. data/node_modules/regenerator-runtime/LICENSE +0 -21
  232. data/node_modules/regenerator-runtime/README.md +0 -31
  233. data/node_modules/regenerator-runtime/package.json +0 -19
  234. data/node_modules/regenerator-runtime/path.js +0 -11
  235. data/node_modules/regenerator-runtime/runtime.js +0 -754
  236. data/package.json +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 682f48e71ab65fc379f01b587c50b7e57702ac8f384ffc9601e5eddb168a52a6
4
- data.tar.gz: 042dd944df15bb97ae485b3387fdc097d7b0579655e033a3eeaced2a62c9d0cc
3
+ metadata.gz: cb2a80f69bf9d2fd8072da217b8688c44371ee042cdd5606b0121993f9853fe0
4
+ data.tar.gz: 9eada94e693fcb7c773186d477826791ae9ec6dd8a8d005338e529ea4a795a48
5
5
  SHA512:
6
- metadata.gz: fa11f3a04fa2e05153855e6721d3ea6d26e59afd49d589e58237d47740ddf1ef8f0949e9bdaba0e4c24eeba875be99e73baab458f673da0819fab67d3534d4e7
7
- data.tar.gz: 5edea2b02691953d1868fa3d2333068e98a286f6b6edc522521fa896722b352693c77c35639392ba365161fc143a44ed4df27d764bf94ad16d39c811e64c84ee
6
+ metadata.gz: 3e253576a134048de72a7dbf89c564d9d9c62be911c076fdf6a07c4386bbffff889a886aea99f2d9d98f8cfcfb4c88b434f9cf5f580132c8e627f3a82f624ecb
7
+ data.tar.gz: 97e17080904cf7491f04d8776b0257e1b6aa6969be6b23d24c003b275c308aecb9535f342c865bed41e827a2da06b10226c1909b5ab99f3cdb58b8967f23a6b8
data/README.md ADDED
@@ -0,0 +1,176 @@
1
+ <h1 align="center">
2
+ <img src="https://github.com/isomorfeus/isomorfeus-project/blob/master/isomorfeus-redux/Logo.png?raw=true" align="center" width="234" height="112"/><br/>
3
+ Isomorfeus Redux<br/>
4
+ </h1>
5
+
6
+ Redux implemented in Ruby (kinda) for the Isomorfeus Framework Project.
7
+
8
+ ### Community and Support
9
+ At the [Isomorfeus Framework Project](https://isomorfeus.com)
10
+
11
+ ## Versioning
12
+ As of version 22.8 isomorfeus-redux implements its own redux like behavior in ruby without depending on the javascript redux package anymore.
13
+
14
+ ## Installation
15
+ Simply add it to the Gemfile:
16
+ ```ruby
17
+ gem 'isomorfeus-redux'
18
+ ```
19
+ then `bundle install`
20
+ and to your client code add:
21
+ ```ruby
22
+ require 'isomorfeus-redux'
23
+ ```
24
+
25
+ ## Usage within Isomorfeus
26
+
27
+ Lucid Components have store access integrated, see the isomorfeus-preact documentation.
28
+
29
+ The following stores are available:
30
+ - AppState - reactive state managed by redux
31
+ - LocalStore - convenient access to the Browsers localStorage, changes from within ruby can be subscribed to
32
+ - SessionStore - convenient access to the Browsers sessionStorage, changes from within ruby can be subscribed to
33
+
34
+ ### AppState
35
+ All keys must be Strings or Symbols! All values must be serializable, simple types preferred!
36
+
37
+ Example Usage:
38
+ ```ruby
39
+ # setting a value:
40
+ AppState.set_state(some_key: 10)
41
+
42
+ # getting a value:
43
+ val = AppStore[:some_key]
44
+ val = AppStore.get(:some_key)
45
+
46
+ # or use dig
47
+ val = AppStore.dig(:some_key, :some_other_key)
48
+
49
+ # subscribing to changes
50
+ unsub = AppStore.subscribe do
51
+ @val = AppStore.some_key
52
+ end
53
+
54
+ # unsubscribe if notification of changes is no longer wanted
55
+ AppStore.unsubscribe(unsub)
56
+ ```
57
+
58
+ ### LocalStore
59
+ All keys and values must be Strings or Symbols!
60
+
61
+ ```ruby
62
+ # setting a value:
63
+ LocalStore[:some_key] = 10
64
+ LocalStore.set(:some_key, 10)
65
+
66
+ # getting a value:
67
+ val = LocalStore[:some_key]
68
+ val = LocalStore.get(:some_key)
69
+
70
+ # deleting a value
71
+ LocalStore.delete(:some_key)
72
+
73
+ # clearing the store
74
+ LocalStore.clear
75
+
76
+ # subscribing to changes
77
+ unsub = LocalStore.subscribe do
78
+ @val = LocalStore.some_key
79
+ end
80
+
81
+ # unsubscribe if notification of changes is no longer wanted
82
+ LocalStore.unsubscribe(unsub)
83
+ ```
84
+
85
+ ### SessionStore
86
+ All keys and values must be Strings or Symbols!
87
+
88
+ ```ruby
89
+ # setting a value:
90
+ SessionStore[:some_key] = 10
91
+ SessionStore.set(:some_key, 10)
92
+
93
+ # getting a value:
94
+ val = SessionStore[:some_key]
95
+ val = SessionStore.get(:some_key)
96
+
97
+ # deleting a value
98
+ SessionStore.delete(:some_key)
99
+
100
+ # clearing the store
101
+ SessionStore.clear
102
+
103
+ # subscribing to changes
104
+ unsub = SessionStore.subscribe do
105
+ @val = SessionStore.some_key
106
+ end
107
+
108
+ # unsubscribe if notification of changes is no longer wanted
109
+ LocalStore.unsubscribe(unsub)
110
+ ```
111
+
112
+ ## Advanced Usage
113
+
114
+ ### Creating a Store
115
+ A store can be created using:
116
+ ```ruby
117
+ reducer_hash = { your_store_key_name: reducer }
118
+ preloaded_state = { your_store_key_name: { key: "Value" }}
119
+ store = Redux::Store.new(reducer_hash, preloaded_state, middleware)
120
+ ```
121
+ - **reducer** is a ruby proc.
122
+ - **reducer_hash** Multiple keys with procs may be given in the Hash.
123
+ - **preloaded_state** optional, can be a Ruby Hash. If provided, Hash keys must be equal to the keys of the reducer hash
124
+ - **middleware** optional, a ruby proc or array of ruby procs.
125
+
126
+ ### Creating a Reducer
127
+ A reducer is simply a ruby proc:
128
+ ```ruby
129
+ reducer = proc do |prev_state, action|
130
+ # do something here
131
+ {}.merge(prev_state)
132
+ end
133
+ ```
134
+
135
+ ### Adding a reducer to the global store
136
+ ```ruby
137
+ Redux::Store.add_reducers(your_store_key_name: reducer)
138
+ ```
139
+ ### Middleware
140
+
141
+ A middleware must be ruby proc with the following signature:
142
+ ```ruby
143
+ middleware = proc do |action, next_middleware|
144
+ # do something useful and when finished and if desired, call the next middleware
145
+ next_middleware.call(action)
146
+ # not calling the next middleware will prevent the store update
147
+ end
148
+ ```
149
+
150
+ ### Global Store
151
+ The store is available from anywhere within Opal Ruby context as:
152
+ ```ruby
153
+ Isomorfeus.store
154
+ ```
155
+
156
+ ### Other Rubyfications
157
+ - `dispatch` accepts a Ruby Hash
158
+ - `get_state` returns a Ruby Hash
159
+ - `subscribe` accepts a Ruby proc or block as listener:
160
+ ```ruby
161
+ Isomorfeus.store.subscribe do
162
+ # something useful here
163
+ end
164
+ ```
165
+
166
+ ### Setup
167
+ If isomorfeus-redux is used in isolation, these methods can be used:
168
+ ```ruby
169
+ Redux::Store.add_middleware(middleware) # middleware must be ruby proc
170
+ Redux::Store.init! # initializes the global store
171
+ ```
172
+
173
+ ### Specs and Benchmarks
174
+ - clone repo
175
+ - `bundle install`
176
+ - `rake`
data/lib/app_state.rb ADDED
@@ -0,0 +1,25 @@
1
+ class AppState
2
+ class << self
3
+ def [](key)
4
+ Isomorfeus.store.get_state.dig(:application_state, key)
5
+ end
6
+ alias get []
7
+
8
+ def dig(key, *other_keys)
9
+ Isomorfeus.store.get_state.dig(:application_state, key, *other_keys)
10
+ end
11
+
12
+ def set_state(update)
13
+ action = { type: 'APPLICATION_STATE', state: update }
14
+ Isomorfeus.store.deferred_dispatch(action)
15
+ end
16
+
17
+ def subscribe(&block)
18
+ Isomorfeus.store.subscribe(&block)
19
+ end
20
+
21
+ def unsubscribe(unsubscriber)
22
+ Isomorfeus.store.unsubscribe(unsubscriber)
23
+ end
24
+ end
25
+ end
@@ -1,21 +1,5 @@
1
1
  module Isomorfeus
2
2
  module BrowserStoreApi
3
- def promise_get(key)
4
- Promise.new.resolve(get(key))
5
- end
6
-
7
- def promise_set(key, value)
8
- Promise.new.resolve(set(key, value))
9
- end
10
-
11
- def promise_delete(key)
12
- Promise.new.resolve(delete(key))
13
- end
14
-
15
- def promise_clear
16
- Promise.new.resolve(clear)
17
- end
18
-
19
3
  def subscribe(&block)
20
4
  key = SecureRandom.uuid
21
5
  subscribers[key] = block
@@ -1,19 +1,102 @@
1
1
  module Isomorfeus
2
- class << self
3
- attr_reader :store_initialized
4
- attr_reader :store
5
-
6
- def init_store
7
- return if store_initialized
8
- @store_initialized = true
9
- force_init_store!
2
+ if RUBY_ENGINE == 'opal'
3
+ class << self
4
+ attr_reader :store_initialized
5
+ attr_reader :store
6
+
7
+ def client_init_after_store_class_names
8
+ @client_init_after_store_class_names ||= []
9
+ end
10
+
11
+ def add_client_init_after_store_class_name(init_class_name)
12
+ client_init_after_store_class_names << init_class_name
13
+ end
14
+
15
+ def execute_init_classes
16
+ client_init_class_names.each do |constant|
17
+ constant.constantize.send(:init)
18
+ end
19
+ end
20
+
21
+ def execute_init_after_store_classes
22
+ client_init_after_store_class_names.each do |constant_name|
23
+ constant_name.constantize.send(:init)
24
+ end
25
+ end
26
+
27
+ def init_store
28
+ return if store_initialized
29
+ @store_initialized = true
30
+ force_init_store!
31
+ end
32
+
33
+ def force_init_store!
34
+ # at least one reducer must have been added at this stage
35
+ # this happened in isomorfeus-react.rb, where the component reducers were added
36
+ @store = ::Redux::Store.init!
37
+ `Opal.Isomorfeus.store = #@store`
38
+ end
39
+
40
+ def something_loading!
41
+ @something_loading = true
42
+ end
43
+
44
+ def something_loading?
45
+ res = @something_loading
46
+ @something_loading = false
47
+ res
48
+ end
49
+
50
+ def reset_something_loading
51
+ @something_loading = false
52
+ end
10
53
  end
54
+ else # RUBY_ENGINE
55
+ class << self
56
+ attr_accessor :server_init_class_names
11
57
 
12
- def force_init_store!
13
- # at least one reducer must have been added at this stage
14
- # this happened in isomorfeus-react.rb, where the component reducers were added
15
- @store = Redux::Store.init!
16
- `Opal.Isomorfeus.store = #@store`
58
+ def execute_init_classes
59
+ server_init_class_names.each do |constant|
60
+ constant.constantize.send(:init)
61
+ end
62
+ end
63
+
64
+ def store_initialized
65
+ Thread.current[:@_isomorfeus_store_initialized]
66
+ end
67
+
68
+ def store
69
+ Thread.current[:@_isomorfeus_store]
70
+ end
71
+
72
+ def init_store
73
+ return if store_initialized
74
+ Thread.current[:@_isomorfeus_store_initialized] = true
75
+ force_init_store!
76
+ end
77
+
78
+ def force_init_store!
79
+ # at least one reducer must have been added at this stage
80
+ # this happened in isomorfeus-preact.rb, where the component reducers were added
81
+ Thread.current[:@_isomorfeus_store] = ::Redux::Store.init!
82
+ end
83
+
84
+
85
+ def something_loading!
86
+ Thread.current[:isomorfeus_something_loading] = true
87
+ end
88
+
89
+ def something_loading?
90
+ res = Thread.current[:isomorfeus_something_loading]
91
+ Thread.current[:isomorfeus_something_loading] = false
92
+ res
93
+ end
94
+
95
+ def reset_something_loading
96
+ Thread.current[:isomorfeus_something_loading] = false
97
+ end
17
98
  end
18
- end
99
+
100
+ server_init_class_names = []
101
+ end # RUBY_ENGINE
19
102
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Isomorfeus
4
+ module Redux
5
+ class Handler < LucidHandler
6
+ # responsible for handling LucidObject and LucidQuery
7
+
8
+ def process_request(response_agent)
9
+ # promise_send_path('Isomorfeus::Redux::Handler', [actions...])
10
+ response_agent.outer_result = { state: {} } unless response_agent.outer_result
11
+ Isomorfeus.init_store
12
+ isto = Isomorfeus.store
13
+ response_agent.request.each do |action|
14
+ action.transform_keys!(&:to_sym)
15
+ isto.clear!
16
+ if current_user.respond_to?(:reload)
17
+ cu = current_user
18
+ Thread.current[:isomorfeus_user] = LocalSystem.new
19
+ begin
20
+ cu.reload
21
+ ensure
22
+ Thread.current[:isomorfeus_user] = cu
23
+ end
24
+ end
25
+ isto.dispatch(action)
26
+ response_agent.outer_result[:state].deep_merge!(isto.get_state)
27
+ end
28
+ response_agent.agent_result = { success: 'ok' }
29
+ rescue Exception => e
30
+ STDERR.puts "Isomorfeus::Redux::Handler exception #{e.message}\n#{e.backtrace&.join("\n")}" if Isomorfeus.development?
31
+ response_agent.error = { error: "Isomorfeus::Redux::Handler: #{e.message}\n#{e.backtrace&.join("\n") if !Isomorfeus.production?}" }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ module Isomorfeus
2
+ module Redux
3
+ VERSION = '22.9.0.rc1'
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ module Isomorfeus
2
+ module ReduxImports
3
+ def self.add
4
+ # make sure static app stylesheets are imported first, if provided
5
+ imports_path = File.join(Isomorfeus.app_root, 'imports')
6
+ if Dir.exist?(imports_path)
7
+ %w[sass scss css].each do |ending|
8
+ styles_file = File.join(imports_path, 'stylesheets.' + ending)
9
+ Isomorfeus.add_web_js_import(styles_file) if File.exist?(styles_file)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,21 +1,22 @@
1
- module Redux
2
- module Reducers
3
- def self.add_application_reducers_to_store
1
+ module Isomorfeus
2
+ module ReduxReducers
3
+ def self.add_application_reducers
4
4
  unless @_application_reducers_added
5
5
  @_application_reducers_added = true
6
- app_reducer = Redux.create_reducer do |prev_state, action|
6
+
7
+ app_reducer = proc do |prev_state, action|
7
8
  case action[:type]
8
9
  when 'APPLICATION_STATE'
9
10
  if action.key?(:set_state)
10
11
  action[:set_state]
11
12
  else
12
- new_state = {}.merge!(prev_state) # make a copy of state
13
+ new_state = prev_state.dup # make a copy of state
13
14
  if action.key?(:collected)
14
15
  action[:collected].each do |act|
15
- new_state.merge!(act[:name] => act[:value])
16
+ new_state.merge!(act[:state])
16
17
  end
17
18
  else
18
- new_state.merge!(action[:name] => action[:value])
19
+ new_state.merge!(action[:state])
19
20
  end
20
21
  new_state
21
22
  end
@@ -24,21 +25,21 @@ module Redux
24
25
  end
25
26
  end
26
27
 
27
- class_reducer = Redux.create_reducer do |prev_state, action|
28
+ class_reducer = proc do |prev_state, action|
28
29
  case action[:type]
29
30
  when 'CLASS_STATE'
30
31
  if action.key?(:set_state)
31
32
  action[:set_state]
32
33
  else
33
- new_state = {}.merge!(prev_state) # make a copy of state
34
+ new_state = prev_state.dup # make a copy of state
34
35
  if action.key?(:collected)
35
36
  action[:collected].each do |act|
36
37
  new_state[act[:class]] = {} unless new_state.key?(act[:class])
37
- new_state[act[:class]].merge!(act[:name] => act[:value])
38
+ new_state[act[:class]].merge!(act[:state])
38
39
  end
39
40
  else
40
41
  new_state[action[:class]] = {} unless new_state.key?(action[:class])
41
- new_state[action[:class]].merge!(action[:name] => action[:value])
42
+ new_state[action[:class]].merge!(action[:state])
42
43
  end
43
44
  new_state
44
45
  end
@@ -46,8 +47,9 @@ module Redux
46
47
  prev_state.nil? ? {} : prev_state
47
48
  end
48
49
  end
49
- Redux::Store.preloaded_state_merge!(application_state: {}, class_state: {})
50
- Redux::Store.add_reducers(application_state: app_reducer, class_state: class_reducer)
50
+
51
+ ::Redux::Store.preloaded_state_merge!(application_state: {}, class_state: {})
52
+ ::Redux::Store.add_reducers(application_state: app_reducer, class_state: class_reducer)
51
53
  end
52
54
  end
53
55
  end
@@ -1,35 +1,23 @@
1
1
  require 'opal'
2
- require 'isomorfeus/execution_environment'
3
- require 'isomorfeus/core_ext/kernel'
2
+ require 'isomorfeus-transport'
3
+ require 'isomorfeus/redux/config'
4
+ require 'redux/store'
5
+ require 'isomorfeus/redux_reducers'
6
+ require 'isomorfeus/browser_store_api'
7
+ require 'local_store'
8
+ require 'session_store'
9
+ require 'app_state'
4
10
 
5
- if RUBY_ENGINE == 'opal'
6
- require 'native'
7
- require 'promise'
8
- require 'securerandom'
9
- require 'isomorfeus/core_ext/hash/deep_merge'
10
- require 'redux'
11
- require 'redux/store'
12
- require 'redux/reducers'
13
- require 'isomorfeus/redux/config'
14
- require 'isomorfeus/browser_store_api'
15
- require 'local_store'
16
- require 'session_store'
17
- require 'app_store'
11
+ Isomorfeus::ReduxReducers.add_application_reducers
18
12
 
19
- Redux::Reducers::add_application_reducers_to_store
20
- Isomorfeus.init_store
21
- else
22
- opal_path = Gem::Specification.find_by_name('opal').full_gem_path
23
- promise_path = File.join(opal_path, 'stdlib', 'promise.rb')
24
- require promise_path
25
- require 'redux/version'
26
-
27
- Opal.append_path(__dir__.untaint)
28
-
29
- require 'isomorfeus-speednode'
30
- Isomorfeus.node_paths << File.expand_path(File.join(File.dirname(__FILE__), '..', 'node_modules'))
31
-
13
+ if RUBY_ENGINE != 'opal'
14
+ require 'isomorfeus/redux/version'
32
15
  require 'isomorfeus-asset-manager'
33
- require 'isomorfeus/redux/imports'
34
- Isomorfeus::Redux::Imports.add
16
+ require 'isomorfeus/redux_imports'
17
+ Isomorfeus::ReduxImports.add
18
+
19
+ require 'isomorfeus/redux/handler'
20
+
21
+ require 'iso_opal'
22
+ Opal.append_path(__dir__.untaint) unless IsoOpal.paths.include?(__dir__.untaint)
35
23
  end
data/lib/local_store.rb CHANGED
@@ -2,40 +2,37 @@ class LocalStore
2
2
  extend Isomorfeus::BrowserStoreApi
3
3
 
4
4
  class << self
5
- def method_missing(key, *args, &block)
6
- if Isomorfeus.on_browser?
7
- if `args.length > 0`
8
- key = `key.endsWith('=')` ? key.chop : key
9
- value = args[0]
10
- `Opal.global.localStorage.setItem(key, value)`
11
- notify_subscribers
12
- value
13
- else
14
- # check store for value
15
- value = `Opal.global.localStorage.getItem(key)`
16
- return value if value
17
- end
5
+ if RUBY_ENGINE == 'opal'
6
+ def [](key)
7
+ value = `Opal.global.localStorage.getItem(key)`
8
+ return nil if `value == null`
9
+ value
18
10
  end
19
- # otherwise return nil
20
- return nil
21
- end
22
-
23
- alias [] method_missing
24
- alias []= method_missing
25
11
 
26
- alias get method_missing
27
- alias set method_missing
12
+ def []=(key, value)
13
+ `Opal.global.localStorage.setItem(key, value)`
14
+ notify_subscribers
15
+ value
16
+ end
28
17
 
29
- def delete(key)
30
- `Opal.global.localStorage.removeItem(key)`
31
- notify_subscribers
32
- nil
33
- end
18
+ def delete(key)
19
+ `Opal.global.localStorage.removeItem(key)`
20
+ notify_subscribers
21
+ nil
22
+ end
34
23
 
35
- def clear
36
- `Opal.global.localStorage.clear()`
37
- notify_subscribers
38
- nil
24
+ def clear
25
+ `Opal.global.localStorage.clear()`
26
+ notify_subscribers
27
+ nil
28
+ end
29
+ else
30
+ def [](key); end
31
+ def []=(key, value); end
32
+ def delete(key); end
33
+ def clear; end
39
34
  end
35
+ alias get []
36
+ alias set []=
40
37
  end
41
38
  end