ae_easy-core 0.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.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +7 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +57 -0
  7. data/LICENSE +21 -0
  8. data/README.md +16 -0
  9. data/Rakefile +22 -0
  10. data/ae_easy-core.gemspec +49 -0
  11. data/doc/AeEasy.html +117 -0
  12. data/doc/AeEasy/Core.html +1622 -0
  13. data/doc/AeEasy/Core/Config.html +311 -0
  14. data/doc/AeEasy/Core/Exception.html +117 -0
  15. data/doc/AeEasy/Core/Exception/OutdatedError.html +135 -0
  16. data/doc/AeEasy/Core/Helper.html +117 -0
  17. data/doc/AeEasy/Core/Helper/Cookie.html +1070 -0
  18. data/doc/AeEasy/Core/Mock.html +282 -0
  19. data/doc/AeEasy/Core/Mock/FakeDb.html +2316 -0
  20. data/doc/AeEasy/Core/Mock/FakeExecutor.html +2226 -0
  21. data/doc/AeEasy/Core/Mock/FakeParser.html +275 -0
  22. data/doc/AeEasy/Core/Mock/FakeSeeder.html +269 -0
  23. data/doc/AeEasy/Core/Plugin.html +117 -0
  24. data/doc/AeEasy/Core/Plugin/CollectionVault.html +299 -0
  25. data/doc/AeEasy/Core/Plugin/ConfigBehavior.html +541 -0
  26. data/doc/AeEasy/Core/Plugin/ContextIntegrator.html +445 -0
  27. data/doc/AeEasy/Core/Plugin/InitializeHook.html +220 -0
  28. data/doc/AeEasy/Core/Plugin/Parser.html +259 -0
  29. data/doc/AeEasy/Core/Plugin/ParserBehavior.html +420 -0
  30. data/doc/AeEasy/Core/Plugin/Seeder.html +635 -0
  31. data/doc/AeEasy/Core/Plugin/SeederBehavior.html +282 -0
  32. data/doc/AeEasy/Core/SmartCollection.html +1386 -0
  33. data/doc/_index.html +329 -0
  34. data/doc/class_list.html +51 -0
  35. data/doc/css/common.css +1 -0
  36. data/doc/css/full_list.css +58 -0
  37. data/doc/css/style.css +496 -0
  38. data/doc/file.README.html +91 -0
  39. data/doc/file_list.html +56 -0
  40. data/doc/frames.html +17 -0
  41. data/doc/index.html +91 -0
  42. data/doc/js/app.js +292 -0
  43. data/doc/js/full_list.js +216 -0
  44. data/doc/js/jquery.js +4 -0
  45. data/doc/method_list.html +811 -0
  46. data/doc/top-level-namespace.html +110 -0
  47. data/lib/ae_easy/core.rb +241 -0
  48. data/lib/ae_easy/core/config.rb +25 -0
  49. data/lib/ae_easy/core/exception.rb +8 -0
  50. data/lib/ae_easy/core/exception/outdated_error.rb +9 -0
  51. data/lib/ae_easy/core/helper.rb +8 -0
  52. data/lib/ae_easy/core/helper/cookie.rb +209 -0
  53. data/lib/ae_easy/core/mock.rb +44 -0
  54. data/lib/ae_easy/core/mock/fake_db.rb +280 -0
  55. data/lib/ae_easy/core/mock/fake_executor.rb +207 -0
  56. data/lib/ae_easy/core/mock/fake_parser.rb +31 -0
  57. data/lib/ae_easy/core/mock/fake_seeder.rb +28 -0
  58. data/lib/ae_easy/core/plugin.rb +15 -0
  59. data/lib/ae_easy/core/plugin/collection_vault.rb +23 -0
  60. data/lib/ae_easy/core/plugin/config_behavior.rb +43 -0
  61. data/lib/ae_easy/core/plugin/context_integrator.rb +60 -0
  62. data/lib/ae_easy/core/plugin/initialize_hook.rb +17 -0
  63. data/lib/ae_easy/core/plugin/parser.rb +19 -0
  64. data/lib/ae_easy/core/plugin/parser_behavior.rb +39 -0
  65. data/lib/ae_easy/core/plugin/seeder.rb +34 -0
  66. data/lib/ae_easy/core/plugin/seeder_behavior.rb +21 -0
  67. data/lib/ae_easy/core/smart_collection.rb +236 -0
  68. data/lib/ae_easy/core/version.rb +6 -0
  69. metadata +225 -0
@@ -0,0 +1,282 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Module: AeEasy::Core::Plugin::SeederBehavior
8
+
9
+ &mdash; Documentation by YARD 0.9.18
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../../../css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../../../css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "AeEasy::Core::Plugin::SeederBehavior";
19
+ relpath = '../../../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../../../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../../../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../../../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../../../_index.html">Index (S)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../../../AeEasy.html" title="AeEasy (module)">AeEasy</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../Core.html" title="AeEasy::Core (module)">Core</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Plugin.html" title="AeEasy::Core::Plugin (module)">Plugin</a></span></span>
41
+ &raquo;
42
+ <span class="title">SeederBehavior</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../../../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Module: AeEasy::Core::Plugin::SeederBehavior
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+ <dl>
75
+ <dt>Includes:</dt>
76
+ <dd><span class='object_link'><a href="ContextIntegrator.html" title="AeEasy::Core::Plugin::ContextIntegrator (module)">ContextIntegrator</a></span></dd>
77
+ </dl>
78
+
79
+
80
+
81
+
82
+ <dl>
83
+ <dt>Included in:</dt>
84
+ <dd><span class='object_link'><a href="Seeder.html" title="AeEasy::Core::Plugin::Seeder (module)">Seeder</a></span></dd>
85
+ </dl>
86
+
87
+
88
+
89
+ <dl>
90
+ <dt>Defined in:</dt>
91
+ <dd>lib/ae_easy/core/plugin/seeder_behavior.rb</dd>
92
+ </dl>
93
+
94
+ </div>
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ <h2>Instance Attribute Summary</h2>
103
+
104
+ <h3 class="inherited">Attributes included from <span class='object_link'><a href="ContextIntegrator.html" title="AeEasy::Core::Plugin::ContextIntegrator (module)">ContextIntegrator</a></span></h3>
105
+ <p class="inherited"><span class='object_link'><a href="ContextIntegrator.html#context-instance_method" title="AeEasy::Core::Plugin::ContextIntegrator#context (method)">#context</a></span></p>
106
+
107
+
108
+
109
+ <h2>
110
+ Instance Method Summary
111
+ <small><a href="#" class="summary_toggle">collapse</a></small>
112
+ </h2>
113
+
114
+ <ul class="summary">
115
+
116
+ <li class="public ">
117
+ <span class="summary_signature">
118
+
119
+ <a href="#enqueue-instance_method" title="#enqueue (instance method)">#<strong>enqueue</strong>(pages) &#x21d2; Object </a>
120
+
121
+
122
+
123
+ </span>
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+ <span class="summary_desc"><div class='inline'>
134
+ <p><span class='object_link'><a href="ParserBehavior.html#enqueue-instance_method" title="AeEasy::Core::Plugin::ParserBehavior#enqueue (method)">ParserBehavior#enqueue</a></span>.</p>
135
+ </div></span>
136
+
137
+ </li>
138
+
139
+
140
+ <li class="public ">
141
+ <span class="summary_signature">
142
+
143
+ <a href="#save-instance_method" title="#save (instance method)">#<strong>save</strong>(outputs) &#x21d2; Object </a>
144
+
145
+
146
+
147
+ </span>
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+ <span class="summary_desc"><div class='inline'>
158
+ <p><span class='object_link'><a href="ParserBehavior.html#save-instance_method" title="AeEasy::Core::Plugin::ParserBehavior#save (method)">ParserBehavior#save</a></span>.</p>
159
+ </div></span>
160
+
161
+ </li>
162
+
163
+
164
+ </ul>
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="ContextIntegrator.html" title="AeEasy::Core::Plugin::ContextIntegrator (module)">ContextIntegrator</a></span></h3>
177
+ <p class="inherited"><span class='object_link'><a href="ContextIntegrator.html#initialize_hook_core_context_integrator-instance_method" title="AeEasy::Core::Plugin::ContextIntegrator#initialize_hook_core_context_integrator (method)">#initialize_hook_core_context_integrator</a></span>, <span class='object_link'><a href="ContextIntegrator.html#mock_context-instance_method" title="AeEasy::Core::Plugin::ContextIntegrator#mock_context (method)">#mock_context</a></span></p>
178
+
179
+
180
+ <div id="instance_method_details" class="method_details_list">
181
+ <h2>Instance Method Details</h2>
182
+
183
+
184
+ <div class="method_details first">
185
+ <h3 class="signature first" id="enqueue-instance_method">
186
+
187
+ #<strong>enqueue</strong>(pages) &#x21d2; <tt>Object</tt>
188
+
189
+
190
+
191
+
192
+
193
+ </h3><div class="docstring">
194
+ <div class="discussion">
195
+
196
+ <p><span class='object_link'><a href="ParserBehavior.html#enqueue-instance_method" title="AeEasy::Core::Plugin::ParserBehavior#enqueue (method)">ParserBehavior#enqueue</a></span></p>
197
+
198
+
199
+ </div>
200
+ </div>
201
+ <div class="tags">
202
+
203
+
204
+ </div><table class="source_code">
205
+ <tr>
206
+ <td>
207
+ <pre class="lines">
208
+
209
+
210
+ 8
211
+ 9
212
+ 10
213
+ 11</pre>
214
+ </td>
215
+ <td>
216
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/plugin/seeder_behavior.rb', line 8</span>
217
+
218
+ <span class='kw'>def</span> <span class='id identifier rubyid_enqueue'>enqueue</span> <span class='id identifier rubyid_pages'>pages</span>
219
+ <span class='id identifier rubyid_pages'>pages</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_pages'>pages</span><span class='rbracket'>]</span> <span class='kw'>unless</span> <span class='id identifier rubyid_pages'>pages</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>Array</span>
220
+ <span class='id identifier rubyid_save_pages'>save_pages</span> <span class='id identifier rubyid_pages'>pages</span>
221
+ <span class='kw'>end</span></pre>
222
+ </td>
223
+ </tr>
224
+ </table>
225
+ </div>
226
+
227
+ <div class="method_details ">
228
+ <h3 class="signature " id="save-instance_method">
229
+
230
+ #<strong>save</strong>(outputs) &#x21d2; <tt>Object</tt>
231
+
232
+
233
+
234
+
235
+
236
+ </h3><div class="docstring">
237
+ <div class="discussion">
238
+
239
+ <p><span class='object_link'><a href="ParserBehavior.html#save-instance_method" title="AeEasy::Core::Plugin::ParserBehavior#save (method)">ParserBehavior#save</a></span></p>
240
+
241
+
242
+ </div>
243
+ </div>
244
+ <div class="tags">
245
+
246
+
247
+ </div><table class="source_code">
248
+ <tr>
249
+ <td>
250
+ <pre class="lines">
251
+
252
+
253
+ 14
254
+ 15
255
+ 16
256
+ 17</pre>
257
+ </td>
258
+ <td>
259
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/plugin/seeder_behavior.rb', line 14</span>
260
+
261
+ <span class='kw'>def</span> <span class='id identifier rubyid_save'>save</span> <span class='id identifier rubyid_outputs'>outputs</span>
262
+ <span class='id identifier rubyid_outputs'>outputs</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_outputs'>outputs</span><span class='rbracket'>]</span> <span class='kw'>unless</span> <span class='id identifier rubyid_outputs'>outputs</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>Array</span>
263
+ <span class='id identifier rubyid_save_outputs'>save_outputs</span> <span class='id identifier rubyid_outputs'>outputs</span>
264
+ <span class='kw'>end</span></pre>
265
+ </td>
266
+ </tr>
267
+ </table>
268
+ </div>
269
+
270
+ </div>
271
+
272
+ </div>
273
+
274
+ <div id="footer">
275
+ Generated on Wed Feb 13 21:43:51 2019 by
276
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
277
+ 0.9.18 (ruby-2.5.3).
278
+ </div>
279
+
280
+ </div>
281
+ </body>
282
+ </html>
@@ -0,0 +1,1386 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Class: AeEasy::Core::SmartCollection
8
+
9
+ &mdash; Documentation by YARD 0.9.18
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../../css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../../css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "AeEasy::Core::SmartCollection";
19
+ relpath = '../../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../../_index.html">Index (S)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../../AeEasy.html" title="AeEasy (module)">AeEasy</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Core.html" title="AeEasy::Core (module)">Core</a></span></span>
41
+ &raquo;
42
+ <span class="title">SmartCollection</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Class: AeEasy::Core::SmartCollection
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName">Array</span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next">Array</li>
78
+
79
+ <li class="next">AeEasy::Core::SmartCollection</li>
80
+
81
+ </ul>
82
+ <a href="#" class="inheritanceTree">show all</a>
83
+
84
+ </dd>
85
+ </dl>
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+ <dl>
98
+ <dt>Defined in:</dt>
99
+ <dd>lib/ae_easy/core/smart_collection.rb</dd>
100
+ </dl>
101
+
102
+ </div>
103
+
104
+ <h2>Overview</h2><div class="docstring">
105
+ <div class="discussion">
106
+
107
+ <p>Smart collection capable to avoid duplicates on insert by matching id</p>
108
+
109
+ <pre class="code ruby"><code class="ruby">defined fields along events.
110
+ </code></pre>
111
+
112
+
113
+ </div>
114
+ </div>
115
+ <div class="tags">
116
+
117
+
118
+ </div>
119
+
120
+ <h2>
121
+ Constant Summary
122
+ <small><a href="#" class="constants_summary_toggle">collapse</a></small>
123
+ </h2>
124
+
125
+ <dl class="constants">
126
+
127
+ <dt id="EVENTS-constant" class="">EVENTS =
128
+ <div class="docstring">
129
+ <div class="discussion">
130
+
131
+ <p>Implemented event list.</p>
132
+
133
+
134
+ </div>
135
+ </div>
136
+ <div class="tags">
137
+
138
+
139
+ </div>
140
+ </dt>
141
+ <dd><pre class="code"><span class='lbracket'>[</span>
142
+ <span class='symbol'>:before_defaults</span><span class='comma'>,</span>
143
+ <span class='symbol'>:before_match</span><span class='comma'>,</span>
144
+ <span class='symbol'>:before_insert</span><span class='comma'>,</span>
145
+ <span class='symbol'>:after_insert</span>
146
+ <span class='rbracket'>]</span></pre></dd>
147
+
148
+ </dl>
149
+
150
+
151
+
152
+
153
+
154
+ <h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
155
+ <ul class="summary">
156
+
157
+ <li class="public ">
158
+ <span class="summary_signature">
159
+
160
+ <a href="#defaults-instance_method" title="#defaults (instance method)">#<strong>defaults</strong> &#x21d2; Object </a>
161
+
162
+
163
+
164
+ </span>
165
+
166
+
167
+
168
+
169
+ <span class="note title readonly">readonly</span>
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+ <span class="summary_desc"><div class='inline'>
180
+ <p>Default fields values.</p>
181
+ </div></span>
182
+
183
+ </li>
184
+
185
+
186
+ <li class="public ">
187
+ <span class="summary_signature">
188
+
189
+ <a href="#key_fields-instance_method" title="#key_fields (instance method)">#<strong>key_fields</strong> &#x21d2; Object </a>
190
+
191
+
192
+
193
+ </span>
194
+
195
+
196
+
197
+
198
+ <span class="note title readonly">readonly</span>
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+ <span class="summary_desc"><div class='inline'>
209
+ <p>Key fields, analog to primary keys.</p>
210
+ </div></span>
211
+
212
+ </li>
213
+
214
+
215
+ </ul>
216
+
217
+
218
+
219
+
220
+
221
+ <h2>
222
+ Instance Method Summary
223
+ <small><a href="#" class="summary_toggle">collapse</a></small>
224
+ </h2>
225
+
226
+ <ul class="summary">
227
+
228
+ <li class="public ">
229
+ <span class="summary_signature">
230
+
231
+ <a href="#<<-instance_method" title="#&lt;&lt; (instance method)">#<strong>&lt;&lt;</strong>(item) &#x21d2; Object </a>
232
+
233
+
234
+
235
+ </span>
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+ <span class="summary_desc"><div class='inline'>
246
+ <p>Add/remplace an item avoiding duplicates.</p>
247
+ </div></span>
248
+
249
+ </li>
250
+
251
+
252
+ <li class="public ">
253
+ <span class="summary_signature">
254
+
255
+ <a href="#apply_defaults-instance_method" title="#apply_defaults (instance method)">#<strong>apply_defaults</strong>(item) &#x21d2; Hash </a>
256
+
257
+
258
+
259
+ </span>
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+ <span class="summary_desc"><div class='inline'>
270
+ <p>Apply default values into item.</p>
271
+ </div></span>
272
+
273
+ </li>
274
+
275
+
276
+ <li class="public ">
277
+ <span class="summary_signature">
278
+
279
+ <a href="#bind_event-instance_method" title="#bind_event (instance method)">#<strong>bind_event</strong>(key, &amp;block) &#x21d2; Object </a>
280
+
281
+
282
+
283
+ </span>
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+ <span class="summary_desc"><div class='inline'>
294
+ <p>Add event binding by key and block.</p>
295
+ </div></span>
296
+
297
+ </li>
298
+
299
+
300
+ <li class="public ">
301
+ <span class="summary_signature">
302
+
303
+ <a href="#call_event-instance_method" title="#call_event (instance method)">#<strong>call_event</strong>(key, default = nil, *args) &#x21d2; Object </a>
304
+
305
+
306
+
307
+ </span>
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+ <span class="summary_desc"><div class='inline'>
318
+ <p>Call an event.</p>
319
+ </div></span>
320
+
321
+ </li>
322
+
323
+
324
+ <li class="public ">
325
+ <span class="summary_signature">
326
+
327
+ <a href="#events-instance_method" title="#events (instance method)">#<strong>events</strong> &#x21d2; Object </a>
328
+
329
+
330
+
331
+ </span>
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+ <span class="summary_desc"><div class='inline'>
342
+ <p>Asigned events.</p>
343
+ </div></span>
344
+
345
+ </li>
346
+
347
+
348
+ <li class="public ">
349
+ <span class="summary_signature">
350
+
351
+ <a href="#find_match-instance_method" title="#find_match (instance method)">#<strong>find_match</strong>(filter) &#x21d2; Hash|nil </a>
352
+
353
+
354
+
355
+ </span>
356
+
357
+
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+ <span class="summary_desc"><div class='inline'>
366
+ <p>Find an item by matching filter keys.</p>
367
+ </div></span>
368
+
369
+ </li>
370
+
371
+
372
+ <li class="public ">
373
+ <span class="summary_signature">
374
+
375
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(key_fields, opts = {}) &#x21d2; SmartCollection </a>
376
+
377
+
378
+
379
+ </span>
380
+
381
+
382
+ <span class="note title constructor">constructor</span>
383
+
384
+
385
+
386
+
387
+
388
+
389
+
390
+
391
+ <span class="summary_desc"><div class='inline'>
392
+ <p>Initialize collection.</p>
393
+ </div></span>
394
+
395
+ </li>
396
+
397
+
398
+ <li class="public ">
399
+ <span class="summary_signature">
400
+
401
+ <a href="#match_keys%3F-instance_method" title="#match_keys? (instance method)">#<strong>match_keys?</strong>(item_a, item_b) &#x21d2; Boolean </a>
402
+
403
+
404
+
405
+ </span>
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+ <span class="summary_desc"><div class='inline'>
416
+ <p>Check whenever two items keys match.</p>
417
+ </div></span>
418
+
419
+ </li>
420
+
421
+
422
+ </ul>
423
+
424
+
425
+
426
+ <div id="constructor_details" class="method_details_list">
427
+ <h2>Constructor Details</h2>
428
+
429
+ <div class="method_details first">
430
+ <h3 class="signature first" id="initialize-instance_method">
431
+
432
+ #<strong>initialize</strong>(key_fields, opts = {}) &#x21d2; <tt><span class='object_link'><a href="" title="AeEasy::Core::SmartCollection (class)">SmartCollection</a></span></tt>
433
+
434
+
435
+
436
+
437
+
438
+ </h3><div class="docstring">
439
+ <div class="discussion">
440
+
441
+ <div class="note notetag">
442
+ <strong>Note:</strong>
443
+ <div class='inline'>
444
+ <p>Defaults will apply to missing fields and null values only.</p>
445
+ </div>
446
+ </div>
447
+
448
+
449
+ <p>Initialize collection</p>
450
+
451
+
452
+ </div>
453
+ </div>
454
+ <div class="tags">
455
+
456
+ <div class="examples">
457
+ <p class="tag_title">Examples:</p>
458
+
459
+
460
+ <p class="example_title"><div class='inline'>
461
+ <p>With default values.</p>
462
+ </div></p>
463
+
464
+ <pre class="example code"><code><span class='id identifier rubyid_count'>count</span> <span class='op'>=</span> <span class='int'>0</span>
465
+ <span class='id identifier rubyid_defaults'>defaults</span> <span class='op'>=</span> <span class='lbrace'>{</span>
466
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>id</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_lambda'>lambda</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_item'>item</span><span class='op'>|</span> <span class='id identifier rubyid_count'>count</span> <span class='op'>+=</span> <span class='int'>1</span><span class='rbrace'>}</span><span class='comma'>,</span>
467
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>aaa</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>111</span><span class='comma'>,</span>
468
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bbb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_proc'>proc</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_item'>item</span><span class='op'>|</span> <span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ccc</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>No ccc</span><span class='tstring_end'>&#39;</span></span> <span class='op'>:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Has ccc</span><span class='tstring_end'>&#39;</span></span><span class='rbrace'>}</span>
469
+ <span class='rbrace'>}</span>
470
+ <span class='id identifier rubyid_values'>values</span> <span class='op'>=</span> <span class='lbracket'>[</span>
471
+ <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>aaa</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Defaults apply on nil values only</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bbb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>nil</span><span class='rbrace'>}</span><span class='comma'>,</span>
472
+ <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ccc</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ddd</span><span class='tstring_end'>&#39;</span></span><span class='rbrace'>}</span><span class='comma'>,</span>
473
+ <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>id</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>abc123</span><span class='tstring_end'>&#39;</span></span><span class='rbrace'>}</span>
474
+ <span class='rbracket'>]</span>
475
+ <span class='id identifier rubyid_new_item'>new_item</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bbb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Look mom! no ccc</span><span class='tstring_end'>&#39;</span></span><span class='rbrace'>}</span>
476
+ <span class='id identifier rubyid_collection'>collection</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="" title="AeEasy::Core::SmartCollection (class)">SmartCollection</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>id</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>defaults:</span> <span class='id identifier rubyid_defaults'>defaults</span>
477
+ <span class='id identifier rubyid_collection'>collection</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_new_item'>new_item</span>
478
+ <span class='id identifier rubyid_collection'>collection</span>
479
+ <span class='comment'># =&gt; [
480
+ </span><span class='comment'># {&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; &#39;Defaults apply on nil values only&#39;, &#39;bbb&#39; =&gt; &#39;No ccc&#39;},
481
+ </span><span class='comment'># {&#39;id&#39; =&gt; 2, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; &#39;Has ccc&#39;, &#39;ccc&#39; =&gt; &#39;ddd&#39;},
482
+ </span><span class='comment'># {&#39;id&#39; =&gt; &#39;abc123&#39;, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; &#39;No ccc&#39;},
483
+ </span><span class='comment'># {&#39;id&#39; =&gt; 3, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; &#39;Look mom! no ccc&#39;}
484
+ </span><span class='comment'># ]</span></code></pre>
485
+
486
+ </div>
487
+ <p class="tag_title">Parameters:</p>
488
+ <ul class="param">
489
+
490
+ <li>
491
+
492
+ <span class='name'>key_fields</span>
493
+
494
+
495
+ <span class='type'>(<tt>Array</tt>)</span>
496
+
497
+
498
+
499
+ &mdash;
500
+ <div class='inline'>
501
+ <p>Key fields, analog to primary keys.</p>
502
+ </div>
503
+
504
+ </li>
505
+
506
+ <li>
507
+
508
+ <span class='name'>opts</span>
509
+
510
+
511
+ <span class='type'>(<tt>Hash</tt>)</span>
512
+
513
+
514
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
515
+
516
+
517
+ &mdash;
518
+ <div class='inline'>
519
+ <p>({}) Configuration options.</p>
520
+ </div>
521
+
522
+ </li>
523
+
524
+ </ul>
525
+
526
+
527
+
528
+
529
+
530
+
531
+ <p class="tag_title">Options Hash (<tt>opts</tt>):</p>
532
+ <ul class="option">
533
+
534
+ <li>
535
+ <span class="name">:values</span>
536
+ <span class="type">(<tt>Array</tt>)</span>
537
+ <span class="default">
538
+
539
+ &mdash; default:
540
+ <tt>[]</tt>
541
+
542
+ </span>
543
+
544
+ &mdash; <div class='inline'>
545
+ <p>Initial values; will avoid duplicates on insert.</p>
546
+ </div>
547
+
548
+ </li>
549
+
550
+ <li>
551
+ <span class="name">:defaults</span>
552
+ <span class="type">(<tt>Hash</tt>)</span>
553
+ <span class="default">
554
+
555
+ &mdash; default:
556
+ <tt>{}</tt>
557
+
558
+ </span>
559
+
560
+ &mdash; <div class='inline'>
561
+ <p>Default values. `proc` values will be executed to get default value.</p>
562
+ </div>
563
+
564
+ </li>
565
+
566
+ </ul>
567
+
568
+
569
+
570
+ </div><table class="source_code">
571
+ <tr>
572
+ <td>
573
+ <pre class="lines">
574
+
575
+
576
+ 50
577
+ 51
578
+ 52
579
+ 53
580
+ 54
581
+ 55</pre>
582
+ </td>
583
+ <td>
584
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 50</span>
585
+
586
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span> <span class='id identifier rubyid_key_fields'>key_fields</span><span class='comma'>,</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
587
+ <span class='ivar'>@key_fields</span> <span class='op'>=</span> <span class='id identifier rubyid_key_fields'>key_fields</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
588
+ <span class='ivar'>@defaults</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:defaults</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
589
+ <span class='kw'>super</span> <span class='int'>0</span>
590
+ <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:values</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_item'>item</span><span class='op'>|</span> <span class='kw'>self</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_item'>item</span><span class='rbrace'>}</span>
591
+ <span class='kw'>end</span></pre>
592
+ </td>
593
+ </tr>
594
+ </table>
595
+ </div>
596
+
597
+ </div>
598
+
599
+ <div id="instance_attr_details" class="attr_details">
600
+ <h2>Instance Attribute Details</h2>
601
+
602
+
603
+ <span id=""></span>
604
+ <div class="method_details first">
605
+ <h3 class="signature first" id="defaults-instance_method">
606
+
607
+ #<strong>defaults</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
608
+
609
+
610
+
611
+
612
+
613
+ </h3><div class="docstring">
614
+ <div class="discussion">
615
+
616
+ <p>Default fields values. Apply to missing fields and null values.</p>
617
+
618
+
619
+ </div>
620
+ </div>
621
+ <div class="tags">
622
+
623
+
624
+ </div><table class="source_code">
625
+ <tr>
626
+ <td>
627
+ <pre class="lines">
628
+
629
+
630
+ 17
631
+ 18
632
+ 19</pre>
633
+ </td>
634
+ <td>
635
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 17</span>
636
+
637
+ <span class='kw'>def</span> <span class='id identifier rubyid_defaults'>defaults</span>
638
+ <span class='ivar'>@defaults</span>
639
+ <span class='kw'>end</span></pre>
640
+ </td>
641
+ </tr>
642
+ </table>
643
+ </div>
644
+
645
+
646
+ <span id=""></span>
647
+ <div class="method_details ">
648
+ <h3 class="signature " id="key_fields-instance_method">
649
+
650
+ #<strong>key_fields</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
651
+
652
+
653
+
654
+
655
+
656
+ </h3><div class="docstring">
657
+ <div class="discussion">
658
+
659
+ <p>Key fields, analog to primary keys.</p>
660
+
661
+
662
+ </div>
663
+ </div>
664
+ <div class="tags">
665
+
666
+
667
+ </div><table class="source_code">
668
+ <tr>
669
+ <td>
670
+ <pre class="lines">
671
+
672
+
673
+ 15
674
+ 16
675
+ 17</pre>
676
+ </td>
677
+ <td>
678
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 15</span>
679
+
680
+ <span class='kw'>def</span> <span class='id identifier rubyid_key_fields'>key_fields</span>
681
+ <span class='ivar'>@key_fields</span>
682
+ <span class='kw'>end</span></pre>
683
+ </td>
684
+ </tr>
685
+ </table>
686
+ </div>
687
+
688
+ </div>
689
+
690
+
691
+ <div id="instance_method_details" class="method_details_list">
692
+ <h2>Instance Method Details</h2>
693
+
694
+
695
+ <div class="method_details first">
696
+ <h3 class="signature first" id="<<-instance_method">
697
+
698
+ #<strong>&lt;&lt;</strong>(item) &#x21d2; <tt>Object</tt>
699
+
700
+
701
+
702
+
703
+
704
+ </h3><div class="docstring">
705
+ <div class="discussion">
706
+
707
+ <p>Add/remplace an item avoiding duplicates</p>
708
+
709
+
710
+ </div>
711
+ </div>
712
+ <div class="tags">
713
+
714
+
715
+ </div><table class="source_code">
716
+ <tr>
717
+ <td>
718
+ <pre class="lines">
719
+
720
+
721
+ 224
722
+ 225
723
+ 226
724
+ 227
725
+ 228
726
+ 229
727
+ 230
728
+ 231
729
+ 232
730
+ 233</pre>
731
+ </td>
732
+ <td>
733
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 224</span>
734
+
735
+ <span class='kw'>def</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_item'>item</span>
736
+ <span class='id identifier rubyid_item'>item</span> <span class='op'>=</span> <span class='id identifier rubyid_call_event'>call_event</span> <span class='symbol'>:before_defaults</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span>
737
+ <span class='id identifier rubyid_apply_defaults'>apply_defaults</span> <span class='id identifier rubyid_item'>item</span>
738
+ <span class='id identifier rubyid_item'>item</span> <span class='op'>=</span> <span class='id identifier rubyid_call_event'>call_event</span> <span class='symbol'>:before_match</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span>
739
+ <span class='id identifier rubyid_match'>match</span> <span class='op'>=</span> <span class='id identifier rubyid_find_match'>find_match</span> <span class='id identifier rubyid_item'>item</span>
740
+ <span class='id identifier rubyid_item'>item</span> <span class='op'>=</span> <span class='id identifier rubyid_call_event'>call_event</span> <span class='symbol'>:before_insert</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span><span class='comma'>,</span> <span class='id identifier rubyid_match'>match</span>
741
+ <span class='id identifier rubyid_delete'>delete</span> <span class='id identifier rubyid_match'>match</span> <span class='kw'>unless</span> <span class='id identifier rubyid_match'>match</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
742
+ <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='kw'>super</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='rparen'>)</span>
743
+ <span class='id identifier rubyid_call_event'>call_event</span> <span class='symbol'>:after_insert</span><span class='comma'>,</span> <span class='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span><span class='comma'>,</span> <span class='id identifier rubyid_match'>match</span>
744
+ <span class='kw'>end</span></pre>
745
+ </td>
746
+ </tr>
747
+ </table>
748
+ </div>
749
+
750
+ <div class="method_details ">
751
+ <h3 class="signature " id="apply_defaults-instance_method">
752
+
753
+ #<strong>apply_defaults</strong>(item) &#x21d2; <tt>Hash</tt>
754
+
755
+
756
+
757
+
758
+
759
+ </h3><div class="docstring">
760
+ <div class="discussion">
761
+
762
+ <p>Apply default values into item.</p>
763
+
764
+
765
+ </div>
766
+ </div>
767
+ <div class="tags">
768
+ <p class="tag_title">Parameters:</p>
769
+ <ul class="param">
770
+
771
+ <li>
772
+
773
+ <span class='name'>item</span>
774
+
775
+
776
+ <span class='type'>(<tt>Hash</tt>)</span>
777
+
778
+
779
+
780
+ &mdash;
781
+ <div class='inline'>
782
+ <p>Item to apply defaults.</p>
783
+ </div>
784
+
785
+ </li>
786
+
787
+ </ul>
788
+
789
+ <p class="tag_title">Returns:</p>
790
+ <ul class="return">
791
+
792
+ <li>
793
+
794
+
795
+ <span class='type'>(<tt>Hash</tt>)</span>
796
+
797
+
798
+
799
+ &mdash;
800
+ <div class='inline'>
801
+ <p>Item</p>
802
+ </div>
803
+
804
+ </li>
805
+
806
+ </ul>
807
+
808
+ </div><table class="source_code">
809
+ <tr>
810
+ <td>
811
+ <pre class="lines">
812
+
813
+
814
+ 203
815
+ 204
816
+ 205
817
+ 206
818
+ 207
819
+ 208</pre>
820
+ </td>
821
+ <td>
822
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 203</span>
823
+
824
+ <span class='kw'>def</span> <span class='id identifier rubyid_apply_defaults'>apply_defaults</span> <span class='id identifier rubyid_item'>item</span>
825
+ <span class='id identifier rubyid_defaults'>defaults</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
826
+ <span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
827
+ <span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:call</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='rparen'>)</span> <span class='op'>:</span> <span class='id identifier rubyid_value'>value</span>
828
+ <span class='kw'>end</span>
829
+ <span class='kw'>end</span></pre>
830
+ </td>
831
+ </tr>
832
+ </table>
833
+ </div>
834
+
835
+ <div class="method_details ">
836
+ <h3 class="signature " id="bind_event-instance_method">
837
+
838
+ #<strong>bind_event</strong>(key, &amp;block) &#x21d2; <tt>Object</tt>
839
+
840
+
841
+
842
+
843
+
844
+ </h3><div class="docstring">
845
+ <div class="discussion">
846
+
847
+ <div class="note notetag">
848
+ <strong>Note:</strong>
849
+ <div class='inline'>
850
+ <p>Some events will expect a return value to replace item on insertion:</p>
851
+ <ul><li>
852
+ <p>`before_match`</p>
853
+ </li><li>
854
+ <p>`before_defaults`</p>
855
+ </li><li>
856
+ <p>`before_insert`</p>
857
+ </li></ul>
858
+ </div>
859
+ </div>
860
+
861
+
862
+ <p>Add event binding by key and block.</p>
863
+
864
+
865
+ </div>
866
+ </div>
867
+ <div class="tags">
868
+
869
+ <div class="examples">
870
+ <p class="tag_title">Examples:</p>
871
+
872
+
873
+ <p class="example_title"><div class='inline'>
874
+ <p>before_defaults</p>
875
+ </div></p>
876
+
877
+ <pre class="example code"><code><span class='id identifier rubyid_defaults'>defaults</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>aaa</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>111</span><span class='rbrace'>}</span>
878
+ <span class='id identifier rubyid_collection'>collection</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="" title="AeEasy::Core::SmartCollection (class)">SmartCollection</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="#initialize-instance_method" title="AeEasy::Core::SmartCollection#initialize (method)">new</a></span></span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
879
+ <span class='label'>defaults:</span> <span class='id identifier rubyid_defaults'>defaults</span>
880
+ <span class='id identifier rubyid_collection'>collection</span><span class='period'>.</span><span class='id identifier rubyid_bind_event'>bind_event</span><span class='lparen'>(</span><span class='symbol'>:before_defaults</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_collection'>collection</span><span class='comma'>,</span> <span class='id identifier rubyid_item'>item</span><span class='op'>|</span>
881
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_collection'>collection</span>
882
+ <span class='comment'># =&gt; []
883
+ </span> <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_item'>item</span>
884
+ <span class='comment'># =&gt; {&#39;bbb&#39; =&gt; 222}
885
+ </span>
886
+ <span class='comment'># Sending the item back is required, or a new one
887
+ </span> <span class='comment'># in case you want to replace item to insert.
888
+ </span> <span class='id identifier rubyid_item'>item</span>
889
+ <span class='kw'>end</span>
890
+ <span class='id identifier rubyid_data'>data</span> <span class='op'>&lt;&lt;</span> <span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bbb</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>222</span><span class='rbrace'>}</span>
891
+ <span class='id identifier rubyid_data'>data</span>
892
+ <span class='comment'># =&gt; [{&#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}]</span></code></pre>
893
+
894
+
895
+ <p class="example_title"><div class='inline'>
896
+ <p>before_match</p>
897
+ </div></p>
898
+
899
+ <pre class="example code"><code>keys = [&#39;id&#39;]
900
+ defaults = {&#39;aaa&#39; =&gt; 111}
901
+ values = [
902
+ {&#39;id&#39; =&gt; 1, &#39;ccc&#39; =&gt; 333}
903
+ ]
904
+ collection = SmartCollection.new keys,
905
+ defaults: defaults
906
+ values: values
907
+ collection.bind_event(:before_match) do |collection, item|
908
+ puts collection
909
+ # =&gt; [{&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;ccc&#39; =&gt; 333}]
910
+ puts item
911
+ # =&gt; {&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}
912
+
913
+ # Sending the item back is required, or a new one
914
+ # in case you want to replace item to insert.
915
+ item
916
+ end
917
+ data &lt;&lt; {&#39;id&#39; =&gt; 1, &#39;bbb&#39; =&gt; 222}
918
+ data
919
+ # =&gt; [{&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}]</code></pre>
920
+
921
+
922
+ <p class="example_title"><div class='inline'>
923
+ <p>before_insert</p>
924
+ </div></p>
925
+
926
+ <pre class="example code"><code>keys = [&#39;id&#39;]
927
+ defaults = {&#39;aaa&#39; =&gt; 111}
928
+ values = [
929
+ {&#39;id&#39; =&gt; 1, &#39;ccc&#39; =&gt; 333}
930
+ ]
931
+ collection = SmartCollection.new keys,
932
+ defaults: defaults
933
+ values: values
934
+ collection.bind_event(:before_insert) do |collection, item, match|
935
+ puts collection
936
+ # =&gt; [{&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;ccc&#39; =&gt; 333}]
937
+ puts item
938
+ # =&gt; {&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}
939
+ puts match
940
+ # =&gt; {&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;ccc&#39; =&gt; 333}
941
+
942
+ # Sending the item back is required, or a new one
943
+ # in case you want to replace item to insert.
944
+ item
945
+ end
946
+ data &lt;&lt; {&#39;id&#39; =&gt; 1, &#39;bbb&#39; =&gt; 222}
947
+ data
948
+ # =&gt; [{&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}]</code></pre>
949
+
950
+
951
+ <p class="example_title"><div class='inline'>
952
+ <p>after_insert</p>
953
+ </div></p>
954
+
955
+ <pre class="example code"><code>keys = [&#39;id&#39;]
956
+ defaults = {&#39;aaa&#39; =&gt; 111}
957
+ values = [
958
+ {&#39;id&#39; =&gt; 1, &#39;ccc&#39; =&gt; 333}
959
+ ]
960
+ collection = SmartCollection.new keys,
961
+ defaults: defaults
962
+ values: values
963
+ collection.bind_event(:after_insert) do |collection, item, match|
964
+ puts collection
965
+ # =&gt; [{&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}]
966
+ puts item
967
+ # =&gt; {&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}
968
+ puts match
969
+ # =&gt; {&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;ccc&#39; =&gt; 333}
970
+ # No need to send item back since it is already inserted
971
+ end
972
+ data &lt;&lt; {&#39;id&#39; =&gt; 1, &#39;bbb&#39; =&gt; 222}
973
+ data
974
+ # =&gt; [{&#39;id&#39; =&gt; 1, &#39;aaa&#39; =&gt; 111, &#39;bbb&#39; =&gt; 222}]</code></pre>
975
+
976
+ </div>
977
+ <p class="tag_title">Parameters:</p>
978
+ <ul class="param">
979
+
980
+ <li>
981
+
982
+ <span class='name'>key</span>
983
+
984
+
985
+ <span class='type'>(<tt>Symbol</tt>)</span>
986
+
987
+
988
+
989
+ &mdash;
990
+ <div class='inline'>
991
+ <p>Event name.</p>
992
+ </div>
993
+
994
+ </li>
995
+
996
+ </ul>
997
+
998
+ <p class="tag_title">Raises:</p>
999
+ <ul class="raise">
1000
+
1001
+ <li>
1002
+
1003
+
1004
+ <span class='type'>(<tt>ArgumentError</tt>)</span>
1005
+
1006
+
1007
+
1008
+ &mdash;
1009
+ <div class='inline'>
1010
+ <p>When unknown event key.</p>
1011
+ </div>
1012
+
1013
+ </li>
1014
+
1015
+ </ul>
1016
+
1017
+ </div><table class="source_code">
1018
+ <tr>
1019
+ <td>
1020
+ <pre class="lines">
1021
+
1022
+
1023
+ 161
1024
+ 162
1025
+ 163
1026
+ 164
1027
+ 165
1028
+ 166</pre>
1029
+ </td>
1030
+ <td>
1031
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 161</span>
1032
+
1033
+ <span class='kw'>def</span> <span class='id identifier rubyid_bind_event'>bind_event</span> <span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span>
1034
+ <span class='kw'>unless</span> <span class='const'><span class='object_link'><a href="#EVENTS-constant" title="AeEasy::Core::SmartCollection::EVENTS (constant)">EVENTS</a></span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span> <span class='id identifier rubyid_key'>key</span>
1035
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unknown event &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_key'>key</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
1036
+ <span class='kw'>end</span>
1037
+ <span class='lparen'>(</span><span class='id identifier rubyid_events'>events</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_block'>block</span>
1038
+ <span class='kw'>end</span></pre>
1039
+ </td>
1040
+ </tr>
1041
+ </table>
1042
+ </div>
1043
+
1044
+ <div class="method_details ">
1045
+ <h3 class="signature " id="call_event-instance_method">
1046
+
1047
+ #<strong>call_event</strong>(key, default = nil, *args) &#x21d2; <tt>Object</tt>
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+ </h3><div class="docstring">
1054
+ <div class="discussion">
1055
+
1056
+ <p>Call an event</p>
1057
+
1058
+
1059
+ </div>
1060
+ </div>
1061
+ <div class="tags">
1062
+ <p class="tag_title">Parameters:</p>
1063
+ <ul class="param">
1064
+
1065
+ <li>
1066
+
1067
+ <span class='name'>key</span>
1068
+
1069
+
1070
+ <span class='type'>(<tt>Symbol</tt>)</span>
1071
+
1072
+
1073
+
1074
+ &mdash;
1075
+ <div class='inline'>
1076
+ <p>Event name.</p>
1077
+ </div>
1078
+
1079
+ </li>
1080
+
1081
+ <li>
1082
+
1083
+ <span class='name'>default</span>
1084
+
1085
+
1086
+ <span class='type'></span>
1087
+
1088
+
1089
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1090
+
1091
+
1092
+ &mdash;
1093
+ <div class='inline'>
1094
+ <p>Detault return value when event&#39;s return nil.</p>
1095
+ </div>
1096
+
1097
+ </li>
1098
+
1099
+ <li>
1100
+
1101
+ <span class='name'>args</span>
1102
+
1103
+
1104
+ <span class='type'></span>
1105
+
1106
+
1107
+
1108
+ &mdash;
1109
+ <div class='inline'>
1110
+ <p>event arguments.</p>
1111
+ </div>
1112
+
1113
+ </li>
1114
+
1115
+ </ul>
1116
+
1117
+
1118
+ </div><table class="source_code">
1119
+ <tr>
1120
+ <td>
1121
+ <pre class="lines">
1122
+
1123
+
1124
+ 174
1125
+ 175
1126
+ 176
1127
+ 177
1128
+ 178
1129
+ 179</pre>
1130
+ </td>
1131
+ <td>
1132
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 174</span>
1133
+
1134
+ <span class='kw'>def</span> <span class='id identifier rubyid_call_event'>call_event</span> <span class='id identifier rubyid_key'>key</span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span>
1135
+ <span class='kw'>return</span> <span class='id identifier rubyid_default'>default</span> <span class='kw'>if</span> <span class='id identifier rubyid_events'>events</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
1136
+ <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='kw'>nil</span>
1137
+ <span class='id identifier rubyid_events'>events</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid_event'>event</span><span class='op'>|</span> <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='id identifier rubyid_event'>event</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span> <span class='kw'>self</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rbrace'>}</span>
1138
+ <span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>?</span> <span class='id identifier rubyid_default'>default</span> <span class='op'>:</span> <span class='id identifier rubyid_result'>result</span>
1139
+ <span class='kw'>end</span></pre>
1140
+ </td>
1141
+ </tr>
1142
+ </table>
1143
+ </div>
1144
+
1145
+ <div class="method_details ">
1146
+ <h3 class="signature " id="events-instance_method">
1147
+
1148
+ #<strong>events</strong> &#x21d2; <tt>Object</tt>
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+ </h3><div class="docstring">
1155
+ <div class="discussion">
1156
+
1157
+ <p>Asigned events.</p>
1158
+
1159
+
1160
+ </div>
1161
+ </div>
1162
+ <div class="tags">
1163
+
1164
+
1165
+ </div><table class="source_code">
1166
+ <tr>
1167
+ <td>
1168
+ <pre class="lines">
1169
+
1170
+
1171
+ 59
1172
+ 60
1173
+ 61</pre>
1174
+ </td>
1175
+ <td>
1176
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 59</span>
1177
+
1178
+ <span class='kw'>def</span> <span class='id identifier rubyid_events'>events</span>
1179
+ <span class='ivar'>@events</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1180
+ <span class='kw'>end</span></pre>
1181
+ </td>
1182
+ </tr>
1183
+ </table>
1184
+ </div>
1185
+
1186
+ <div class="method_details ">
1187
+ <h3 class="signature " id="find_match-instance_method">
1188
+
1189
+ #<strong>find_match</strong>(filter) &#x21d2; <tt>Hash|nil</tt>
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+ </h3><div class="docstring">
1196
+ <div class="discussion">
1197
+
1198
+ <div class="note notetag">
1199
+ <strong>Note:</strong>
1200
+ <div class='inline'>
1201
+ <p><em>Warning:</em> It uses table scan to filter and will be slow.</p>
1202
+ </div>
1203
+ </div>
1204
+
1205
+
1206
+ <p>Find an item by matching filter keys</p>
1207
+
1208
+
1209
+ </div>
1210
+ </div>
1211
+ <div class="tags">
1212
+ <p class="tag_title">Parameters:</p>
1213
+ <ul class="param">
1214
+
1215
+ <li>
1216
+
1217
+ <span class='name'>filter</span>
1218
+
1219
+
1220
+ <span class='type'>(<tt>Hash</tt>)</span>
1221
+
1222
+
1223
+
1224
+ </li>
1225
+
1226
+ </ul>
1227
+
1228
+ <p class="tag_title">Returns:</p>
1229
+ <ul class="return">
1230
+
1231
+ <li>
1232
+
1233
+
1234
+ <span class='type'>(<tt>Hash|nil</tt>)</span>
1235
+
1236
+
1237
+
1238
+ &mdash;
1239
+ <div class='inline'>
1240
+ <p>First existing item match or nil when no match.</p>
1241
+ </div>
1242
+
1243
+ </li>
1244
+
1245
+ </ul>
1246
+
1247
+ </div><table class="source_code">
1248
+ <tr>
1249
+ <td>
1250
+ <pre class="lines">
1251
+
1252
+
1253
+ 217
1254
+ 218
1255
+ 219
1256
+ 220
1257
+ 221</pre>
1258
+ </td>
1259
+ <td>
1260
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 217</span>
1261
+
1262
+ <span class='kw'>def</span> <span class='id identifier rubyid_find_match'>find_match</span> <span class='id identifier rubyid_filter'>filter</span>
1263
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_item'>item</span><span class='op'>|</span>
1264
+ <span class='id identifier rubyid_match_keys?'>match_keys?</span> <span class='id identifier rubyid_item'>item</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span>
1265
+ <span class='kw'>end</span>
1266
+ <span class='kw'>end</span></pre>
1267
+ </td>
1268
+ </tr>
1269
+ </table>
1270
+ </div>
1271
+
1272
+ <div class="method_details ">
1273
+ <h3 class="signature " id="match_keys?-instance_method">
1274
+
1275
+ #<strong>match_keys?</strong>(item_a, item_b) &#x21d2; <tt>Boolean</tt>
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+ </h3><div class="docstring">
1282
+ <div class="discussion">
1283
+
1284
+ <p>Check whenever two items keys match.</p>
1285
+
1286
+
1287
+ </div>
1288
+ </div>
1289
+ <div class="tags">
1290
+ <p class="tag_title">Parameters:</p>
1291
+ <ul class="param">
1292
+
1293
+ <li>
1294
+
1295
+ <span class='name'>item_a</span>
1296
+
1297
+
1298
+ <span class='type'>(<tt>Hash</tt>)</span>
1299
+
1300
+
1301
+
1302
+ &mdash;
1303
+ <div class='inline'>
1304
+ <p>Item to match.</p>
1305
+ </div>
1306
+
1307
+ </li>
1308
+
1309
+ <li>
1310
+
1311
+ <span class='name'>item_b</span>
1312
+
1313
+
1314
+ <span class='type'>(<tt>Hash</tt>)</span>
1315
+
1316
+
1317
+
1318
+ &mdash;
1319
+ <div class='inline'>
1320
+ <p>Item to match.</p>
1321
+ </div>
1322
+
1323
+ </li>
1324
+
1325
+ </ul>
1326
+
1327
+ <p class="tag_title">Returns:</p>
1328
+ <ul class="return">
1329
+
1330
+ <li>
1331
+
1332
+
1333
+ <span class='type'>(<tt>Boolean</tt>)</span>
1334
+
1335
+
1336
+
1337
+ </li>
1338
+
1339
+ </ul>
1340
+
1341
+ </div><table class="source_code">
1342
+ <tr>
1343
+ <td>
1344
+ <pre class="lines">
1345
+
1346
+
1347
+ 187
1348
+ 188
1349
+ 189
1350
+ 190
1351
+ 191
1352
+ 192
1353
+ 193
1354
+ 194
1355
+ 195</pre>
1356
+ </td>
1357
+ <td>
1358
+ <pre class="code"><span class="info file"># File 'lib/ae_easy/core/smart_collection.rb', line 187</span>
1359
+
1360
+ <span class='kw'>def</span> <span class='id identifier rubyid_match_keys?'>match_keys?</span> <span class='id identifier rubyid_item_a'>item_a</span><span class='comma'>,</span> <span class='id identifier rubyid_item_b'>item_b</span>
1361
+ <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_key_fields'>key_fields</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_key_fields'>key_fields</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span> <span class='op'>&lt;</span> <span class='int'>1</span>
1362
+ <span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='id identifier rubyid_item_a'>item_a</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_item_b'>item_b</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
1363
+ <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_item_a'>item_a</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_item_b'>item_b</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
1364
+ <span class='id identifier rubyid_key_fields'>key_fields</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='op'>|</span>
1365
+ <span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='id identifier rubyid_item_a'>item_a</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>!=</span> <span class='id identifier rubyid_item_b'>item_b</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span>
1366
+ <span class='kw'>end</span>
1367
+ <span class='kw'>true</span>
1368
+ <span class='kw'>end</span></pre>
1369
+ </td>
1370
+ </tr>
1371
+ </table>
1372
+ </div>
1373
+
1374
+ </div>
1375
+
1376
+ </div>
1377
+
1378
+ <div id="footer">
1379
+ Generated on Wed Feb 13 21:43:52 2019 by
1380
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1381
+ 0.9.18 (ruby-2.5.3).
1382
+ </div>
1383
+
1384
+ </div>
1385
+ </body>
1386
+ </html>