ae_easy-core 0.0.3

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