pg_cache_key 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.idea/workspace.xml +143 -37
- data/README.md +29 -7
- data/lib/pg_cache_key/version.rb +1 -1
- data/lib/pg_cache_key.rb +14 -5
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 18444cd83cc0ff353a7fb27a934a0150a0b9f91e
|
|
4
|
+
data.tar.gz: 86347b67a0257fbeb7e1cccdb0f167458e2b0317
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9147a0bbe35d9f10861583ff0b927be6b6400112ce444657b20ad347d94c8fde13f9414d2eccbbecfe8562e6e54d5062b75a93c4ea4867dada6eb857b3fd43d3
|
|
7
|
+
data.tar.gz: 508bc258b42ccf84e855222fef3715d79b4e9bfc6ee4dffbb6d8002a8ec668bc1d063b56adcf5ba90a13b4a7a08a0df62ad23aef06ef3528782d509335b0a81f
|
data/.idea/workspace.xml
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/pg_cache_key.iml" />
|
|
9
9
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
|
|
10
10
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
|
11
|
-
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/pg_cache_key.
|
|
11
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/pg_cache_key.rb" afterPath="$PROJECT_DIR$/lib/pg_cache_key.rb" />
|
|
12
|
+
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/pg_cache_key/version.rb" afterPath="$PROJECT_DIR$/lib/pg_cache_key/version.rb" />
|
|
12
13
|
</list>
|
|
13
14
|
<ignored path="pg_cache_key.iws" />
|
|
14
15
|
<ignored path=".idea/workspace.xml" />
|
|
@@ -30,11 +31,11 @@
|
|
|
30
31
|
</component>
|
|
31
32
|
<component name="FileEditorManager">
|
|
32
33
|
<leaf>
|
|
33
|
-
<file leaf-file-name="pg_cache_key.rb" pinned="false" current-in-tab="
|
|
34
|
+
<file leaf-file-name="pg_cache_key.rb" pinned="false" current-in-tab="true">
|
|
34
35
|
<entry file="file://$PROJECT_DIR$/lib/pg_cache_key.rb">
|
|
35
36
|
<provider selected="true" editor-type-id="text-editor">
|
|
36
|
-
<state vertical-scroll-proportion="0.
|
|
37
|
-
<caret line="
|
|
37
|
+
<state vertical-scroll-proportion="0.64600325">
|
|
38
|
+
<caret line="25" column="34" selection-start-line="25" selection-start-column="34" selection-end-line="25" selection-end-column="34" />
|
|
38
39
|
<folding />
|
|
39
40
|
</state>
|
|
40
41
|
</provider>
|
|
@@ -44,7 +45,7 @@
|
|
|
44
45
|
<entry file="file://$PROJECT_DIR$/lib/pg_cache_key/version.rb">
|
|
45
46
|
<provider selected="true" editor-type-id="text-editor">
|
|
46
47
|
<state vertical-scroll-proportion="0.0">
|
|
47
|
-
<caret line="
|
|
48
|
+
<caret line="1" column="18" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
|
|
48
49
|
<folding />
|
|
49
50
|
</state>
|
|
50
51
|
</provider>
|
|
@@ -70,11 +71,11 @@
|
|
|
70
71
|
</provider>
|
|
71
72
|
</entry>
|
|
72
73
|
</file>
|
|
73
|
-
<file leaf-file-name="pg_cache_key.gemspec" pinned="false" current-in-tab="
|
|
74
|
+
<file leaf-file-name="pg_cache_key.gemspec" pinned="false" current-in-tab="false">
|
|
74
75
|
<entry file="file://$PROJECT_DIR$/pg_cache_key.gemspec">
|
|
75
76
|
<provider selected="true" editor-type-id="text-editor">
|
|
76
|
-
<state vertical-scroll-proportion="0.
|
|
77
|
-
<caret line="
|
|
77
|
+
<state vertical-scroll-proportion="0.0">
|
|
78
|
+
<caret line="3" column="21" selection-start-line="3" selection-start-column="9" selection-end-line="3" selection-end-column="21" />
|
|
78
79
|
<folding />
|
|
79
80
|
</state>
|
|
80
81
|
</provider>
|
|
@@ -82,18 +83,18 @@
|
|
|
82
83
|
</file>
|
|
83
84
|
<file leaf-file-name="README.md" pinned="false" current-in-tab="false">
|
|
84
85
|
<entry file="file://$PROJECT_DIR$/README.md">
|
|
86
|
+
<provider editor-type-id="MultiMarkdownFxPreviewEditor">
|
|
87
|
+
<state />
|
|
88
|
+
</provider>
|
|
85
89
|
<provider selected="true" editor-type-id="split-provider[text-editor;MultiMarkdownPreviewEditor]">
|
|
86
90
|
<state split_layout="FIRST">
|
|
87
|
-
<first_editor vertical-scroll-proportion="0.
|
|
88
|
-
<caret line="
|
|
91
|
+
<first_editor vertical-scroll-proportion="0.0">
|
|
92
|
+
<caret line="11" column="0" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
|
|
89
93
|
<folding />
|
|
90
94
|
</first_editor>
|
|
91
95
|
<second_editor />
|
|
92
96
|
</state>
|
|
93
97
|
</provider>
|
|
94
|
-
<provider editor-type-id="MultiMarkdownFxPreviewEditor">
|
|
95
|
-
<state />
|
|
96
|
-
</provider>
|
|
97
98
|
</entry>
|
|
98
99
|
</file>
|
|
99
100
|
<file leaf-file-name=".gitignore" pinned="false" current-in-tab="false">
|
|
@@ -114,10 +115,11 @@
|
|
|
114
115
|
<component name="IdeDocumentHistory">
|
|
115
116
|
<option name="CHANGED_PATHS">
|
|
116
117
|
<list>
|
|
117
|
-
<option value="$PROJECT_DIR$/lib/pg_cache_key.rb" />
|
|
118
118
|
<option value="$PROJECT_DIR$/.gitignore" />
|
|
119
|
-
<option value="$PROJECT_DIR$/README.md" />
|
|
120
119
|
<option value="$PROJECT_DIR$/pg_cache_key.gemspec" />
|
|
120
|
+
<option value="$PROJECT_DIR$/README.md" />
|
|
121
|
+
<option value="$PROJECT_DIR$/lib/pg_cache_key/version.rb" />
|
|
122
|
+
<option value="$PROJECT_DIR$/lib/pg_cache_key.rb" />
|
|
121
123
|
</list>
|
|
122
124
|
</option>
|
|
123
125
|
</component>
|
|
@@ -130,9 +132,9 @@
|
|
|
130
132
|
</component>
|
|
131
133
|
<component name="ProjectFrameBounds">
|
|
132
134
|
<option name="x" value="65" />
|
|
133
|
-
<option name="y" value="
|
|
135
|
+
<option name="y" value="-4" />
|
|
134
136
|
<option name="width" value="1855" />
|
|
135
|
-
<option name="height" value="
|
|
137
|
+
<option name="height" value="1084" />
|
|
136
138
|
</component>
|
|
137
139
|
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
|
138
140
|
<OptionsSetting value="true" id="Add" />
|
|
@@ -157,6 +159,8 @@
|
|
|
157
159
|
<sortByType />
|
|
158
160
|
</navigator>
|
|
159
161
|
<panes>
|
|
162
|
+
<pane id="Scratches" />
|
|
163
|
+
<pane id="Scope" />
|
|
160
164
|
<pane id="ProjectPane">
|
|
161
165
|
<subPane>
|
|
162
166
|
<PATH>
|
|
@@ -207,10 +211,22 @@
|
|
|
207
211
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
208
212
|
</PATH_ELEMENT>
|
|
209
213
|
</PATH>
|
|
214
|
+
<PATH>
|
|
215
|
+
<PATH_ELEMENT>
|
|
216
|
+
<option name="myItemId" value="pg_cache_key" />
|
|
217
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
|
218
|
+
</PATH_ELEMENT>
|
|
219
|
+
<PATH_ELEMENT>
|
|
220
|
+
<option name="myItemId" value="pg_cache_key" />
|
|
221
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
222
|
+
</PATH_ELEMENT>
|
|
223
|
+
<PATH_ELEMENT>
|
|
224
|
+
<option name="myItemId" value="bin" />
|
|
225
|
+
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
226
|
+
</PATH_ELEMENT>
|
|
227
|
+
</PATH>
|
|
210
228
|
</subPane>
|
|
211
229
|
</pane>
|
|
212
|
-
<pane id="Scratches" />
|
|
213
|
-
<pane id="Scope" />
|
|
214
230
|
</panes>
|
|
215
231
|
</component>
|
|
216
232
|
<component name="PropertiesComponent">
|
|
@@ -256,6 +272,12 @@
|
|
|
256
272
|
<method />
|
|
257
273
|
</configuration>
|
|
258
274
|
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
|
|
275
|
+
<node-options />
|
|
276
|
+
<gulpfile />
|
|
277
|
+
<tasks />
|
|
278
|
+
<arguments />
|
|
279
|
+
<pass-parent-envs>true</pass-parent-envs>
|
|
280
|
+
<envs />
|
|
259
281
|
<method />
|
|
260
282
|
</configuration>
|
|
261
283
|
</component>
|
|
@@ -288,49 +310,87 @@
|
|
|
288
310
|
<option name="project" value="LOCAL" />
|
|
289
311
|
<updated>1474284631160</updated>
|
|
290
312
|
</task>
|
|
291
|
-
<
|
|
313
|
+
<task id="LOCAL-00004" summary="forgot home page">
|
|
314
|
+
<created>1474284706360</created>
|
|
315
|
+
<option name="number" value="00004" />
|
|
316
|
+
<option name="project" value="LOCAL" />
|
|
317
|
+
<updated>1474284706360</updated>
|
|
318
|
+
</task>
|
|
319
|
+
<task id="LOCAL-00005" summary="added link to early mentioned solution">
|
|
320
|
+
<created>1474285238850</created>
|
|
321
|
+
<option name="number" value="00005" />
|
|
322
|
+
<option name="project" value="LOCAL" />
|
|
323
|
+
<updated>1474285238850</updated>
|
|
324
|
+
</task>
|
|
325
|
+
<option name="localTasksCounter" value="6" />
|
|
292
326
|
<servers />
|
|
293
327
|
</component>
|
|
294
328
|
<component name="ToolWindowManager">
|
|
295
|
-
<frame x="65" y="
|
|
329
|
+
<frame x="65" y="-4" width="1855" height="1084" extended-state="6" />
|
|
296
330
|
<editor active="true" />
|
|
297
331
|
<layout>
|
|
298
332
|
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.20066334" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
|
|
299
333
|
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294979" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
|
|
300
|
-
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="
|
|
334
|
+
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.32881" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
|
|
301
335
|
<window_info id="Event Log" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.35102266" sideWeight="0.5002764" order="4" side_tool="false" content_ui="tabs" />
|
|
302
336
|
<window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
|
|
303
337
|
<window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32946378" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
|
304
|
-
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.38830897" sideWeight="0.4997236" order="3" side_tool="false" content_ui="tabs" />
|
|
305
338
|
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3966597" sideWeight="0.4997236" order="10" side_tool="false" content_ui="tabs" />
|
|
306
339
|
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2498618" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
307
340
|
<window_info id="Terminal" active="false" anchor="bottom" auto_hide="true" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3810021" sideWeight="0.4997236" order="11" side_tool="false" content_ui="tabs" />
|
|
308
|
-
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.45093945" sideWeight="0.4997236" order="12" side_tool="false" content_ui="tabs" />
|
|
309
341
|
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
|
|
310
342
|
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294979" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" />
|
|
311
343
|
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
|
312
344
|
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
313
345
|
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
|
314
346
|
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
|
|
347
|
+
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.38830897" sideWeight="0.4997236" order="3" side_tool="false" content_ui="tabs" />
|
|
315
348
|
<window_info id="Thumbnails" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294979" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
|
|
316
349
|
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2498618" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
|
317
350
|
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.41336116" sideWeight="0.78275293" order="2" side_tool="false" content_ui="tabs" />
|
|
318
351
|
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
|
352
|
+
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.45093945" sideWeight="0.4997236" order="12" side_tool="false" content_ui="tabs" />
|
|
319
353
|
</layout>
|
|
320
354
|
</component>
|
|
355
|
+
<component name="Vcs.Log.UiProperties">
|
|
356
|
+
<option name="RECENTLY_FILTERED_USER_GROUPS">
|
|
357
|
+
<collection />
|
|
358
|
+
</option>
|
|
359
|
+
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
|
|
360
|
+
<collection />
|
|
361
|
+
</option>
|
|
362
|
+
</component>
|
|
321
363
|
<component name="VcsContentAnnotationSettings">
|
|
322
364
|
<option name="myLimit" value="2678400000" />
|
|
323
365
|
</component>
|
|
324
366
|
<component name="VcsManagerConfiguration">
|
|
325
367
|
<MESSAGE value="initial commit" />
|
|
326
368
|
<MESSAGE value="rubygems forgot" />
|
|
327
|
-
<
|
|
369
|
+
<MESSAGE value="forgot home page" />
|
|
370
|
+
<MESSAGE value="added link to early mentioned solution" />
|
|
371
|
+
<option name="LAST_COMMIT_MESSAGE" value="added link to early mentioned solution" />
|
|
328
372
|
</component>
|
|
329
373
|
<component name="XDebuggerManager">
|
|
330
374
|
<breakpoint-manager />
|
|
331
375
|
<watches-manager />
|
|
332
376
|
</component>
|
|
333
377
|
<component name="editorHistoryManager">
|
|
378
|
+
<entry file="file://$PROJECT_DIR$/lib/pg_cache_key.rb">
|
|
379
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
380
|
+
<state vertical-scroll-proportion="0.0">
|
|
381
|
+
<caret line="18" column="155" selection-start-line="18" selection-start-column="155" selection-end-line="18" selection-end-column="155" />
|
|
382
|
+
<folding />
|
|
383
|
+
</state>
|
|
384
|
+
</provider>
|
|
385
|
+
</entry>
|
|
386
|
+
<entry file="file://$PROJECT_DIR$/lib/pg_cache_key/version.rb">
|
|
387
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
388
|
+
<state vertical-scroll-proportion="0.0">
|
|
389
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
390
|
+
<folding />
|
|
391
|
+
</state>
|
|
392
|
+
</provider>
|
|
393
|
+
</entry>
|
|
334
394
|
<entry file="file://$PROJECT_DIR$/Gemfile">
|
|
335
395
|
<provider selected="true" editor-type-id="text-editor">
|
|
336
396
|
<state vertical-scroll-proportion="0.0">
|
|
@@ -347,7 +407,29 @@
|
|
|
347
407
|
</state>
|
|
348
408
|
</provider>
|
|
349
409
|
</entry>
|
|
350
|
-
<entry file="file://$PROJECT_DIR$/
|
|
410
|
+
<entry file="file://$PROJECT_DIR$/pg_cache_key.gemspec">
|
|
411
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
412
|
+
<state vertical-scroll-proportion="0.0">
|
|
413
|
+
<caret line="3" column="21" selection-start-line="3" selection-start-column="9" selection-end-line="3" selection-end-column="21" />
|
|
414
|
+
<folding />
|
|
415
|
+
</state>
|
|
416
|
+
</provider>
|
|
417
|
+
</entry>
|
|
418
|
+
<entry file="file://$PROJECT_DIR$/README.md">
|
|
419
|
+
<provider editor-type-id="MultiMarkdownFxPreviewEditor">
|
|
420
|
+
<state />
|
|
421
|
+
</provider>
|
|
422
|
+
<provider selected="true" editor-type-id="split-provider[text-editor;MultiMarkdownPreviewEditor]">
|
|
423
|
+
<state split_layout="FIRST">
|
|
424
|
+
<first_editor vertical-scroll-proportion="0.0">
|
|
425
|
+
<caret line="11" column="0" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
|
|
426
|
+
<folding />
|
|
427
|
+
</first_editor>
|
|
428
|
+
<second_editor />
|
|
429
|
+
</state>
|
|
430
|
+
</provider>
|
|
431
|
+
</entry>
|
|
432
|
+
<entry file="file://$PROJECT_DIR$/.gitignore">
|
|
351
433
|
<provider selected="true" editor-type-id="text-editor">
|
|
352
434
|
<state vertical-scroll-proportion="0.0">
|
|
353
435
|
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
@@ -355,40 +437,64 @@
|
|
|
355
437
|
</state>
|
|
356
438
|
</provider>
|
|
357
439
|
</entry>
|
|
358
|
-
<entry file="file://$PROJECT_DIR$/
|
|
440
|
+
<entry file="file://$PROJECT_DIR$/Gemfile">
|
|
359
441
|
<provider selected="true" editor-type-id="text-editor">
|
|
360
442
|
<state vertical-scroll-proportion="0.0">
|
|
361
|
-
<caret line="
|
|
443
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
362
444
|
<folding />
|
|
363
445
|
</state>
|
|
364
446
|
</provider>
|
|
365
447
|
</entry>
|
|
366
|
-
<entry file="file://$PROJECT_DIR
|
|
448
|
+
<entry file="file://$PROJECT_DIR$/Rakefile">
|
|
367
449
|
<provider selected="true" editor-type-id="text-editor">
|
|
368
450
|
<state vertical-scroll-proportion="0.0">
|
|
369
|
-
<caret line="0" column="
|
|
451
|
+
<caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
|
|
452
|
+
<folding />
|
|
453
|
+
</state>
|
|
454
|
+
</provider>
|
|
455
|
+
</entry>
|
|
456
|
+
<entry file="file://$PROJECT_DIR$/pg_cache_key.gemspec">
|
|
457
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
458
|
+
<state vertical-scroll-proportion="0.0">
|
|
459
|
+
<caret line="3" column="21" selection-start-line="3" selection-start-column="9" selection-end-line="3" selection-end-column="21" />
|
|
370
460
|
<folding />
|
|
371
461
|
</state>
|
|
372
462
|
</provider>
|
|
373
463
|
</entry>
|
|
374
464
|
<entry file="file://$PROJECT_DIR$/README.md">
|
|
465
|
+
<provider editor-type-id="MultiMarkdownFxPreviewEditor">
|
|
466
|
+
<state />
|
|
467
|
+
</provider>
|
|
375
468
|
<provider selected="true" editor-type-id="split-provider[text-editor;MultiMarkdownPreviewEditor]">
|
|
376
469
|
<state split_layout="FIRST">
|
|
377
|
-
<first_editor vertical-scroll-proportion="0.
|
|
378
|
-
<caret line="
|
|
470
|
+
<first_editor vertical-scroll-proportion="0.0">
|
|
471
|
+
<caret line="11" column="0" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
|
|
379
472
|
<folding />
|
|
380
473
|
</first_editor>
|
|
381
474
|
<second_editor />
|
|
382
475
|
</state>
|
|
383
476
|
</provider>
|
|
384
|
-
|
|
385
|
-
|
|
477
|
+
</entry>
|
|
478
|
+
<entry file="file://$PROJECT_DIR$/.gitignore">
|
|
479
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
480
|
+
<state vertical-scroll-proportion="0.0">
|
|
481
|
+
<caret line="0" column="7" selection-start-line="0" selection-start-column="7" selection-end-line="0" selection-end-column="7" />
|
|
482
|
+
<folding />
|
|
483
|
+
</state>
|
|
386
484
|
</provider>
|
|
387
485
|
</entry>
|
|
388
|
-
<entry file="file://$PROJECT_DIR$/pg_cache_key.
|
|
486
|
+
<entry file="file://$PROJECT_DIR$/lib/pg_cache_key/version.rb">
|
|
487
|
+
<provider selected="true" editor-type-id="text-editor">
|
|
488
|
+
<state vertical-scroll-proportion="0.0">
|
|
489
|
+
<caret line="1" column="18" selection-start-line="1" selection-start-column="18" selection-end-line="1" selection-end-column="18" />
|
|
490
|
+
<folding />
|
|
491
|
+
</state>
|
|
492
|
+
</provider>
|
|
493
|
+
</entry>
|
|
494
|
+
<entry file="file://$PROJECT_DIR$/lib/pg_cache_key.rb">
|
|
389
495
|
<provider selected="true" editor-type-id="text-editor">
|
|
390
|
-
<state vertical-scroll-proportion="0.
|
|
391
|
-
<caret line="
|
|
496
|
+
<state vertical-scroll-proportion="0.64600325">
|
|
497
|
+
<caret line="25" column="34" selection-start-line="25" selection-start-column="34" selection-end-line="25" selection-end-column="34" />
|
|
392
498
|
<folding />
|
|
393
499
|
</state>
|
|
394
500
|
</provider>
|
data/README.md
CHANGED
|
@@ -1,18 +1,35 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
1
|
+
#Attention!
|
|
2
|
+
|
|
3
|
+
This gem intend to use only with PostrgreSQL >= 9.1, so it will not work other ways, BUT if your database have some
|
|
3
4
|
aggregation function you can get idea and create your own version of it.
|
|
4
5
|
|
|
6
|
+
# Внимашка (рус)
|
|
7
|
+
|
|
8
|
+
Данный gem работает только с PostrgreSQL >= 9.1, НО если у вас есть потребность в аналоге для другой БД вы
|
|
9
|
+
легко можете, скопировав код, поменять все что нужно.
|
|
10
|
+
|
|
11
|
+
# PgCacheKey
|
|
5
12
|
Simple replace for cache_key for collections to make it very fast.
|
|
6
|
-
It's optimizing code near fragment_cache_key, replacing collection instatination with DB aggregation.
|
|
13
|
+
It's optimizing code near fragment_cache_key, replacing collection and it's includes instatination with DB aggregation.
|
|
7
14
|
|
|
8
15
|
It respects all aspects of collection properties including order, limits, offsets and so.
|
|
9
16
|
|
|
10
17
|
Also comparing to rails 5 solution for collection cache key this one will not need to throw away all sub-collection caches
|
|
11
|
-
when any elements of the
|
|
18
|
+
when any elements of the table updates.
|
|
19
|
+
|
|
20
|
+
Rem: I mention my solution in https://github.com/rails/rails/issues/26330
|
|
12
21
|
|
|
22
|
+
# PgCacheKey (рус)
|
|
23
|
+
|
|
24
|
+
Назначение данного gem'а - ускорение генрации ключей кеша коллекций путем переноса генерации на плечи БД, что экономит на инстантинации коллекции и всех ее зависимостей. Особенно выгодно может быть использование в рельсах до 4.2 включительно, потому что в 4-х рельсах для генерации ключей коллекции она превращается в массив, т.е. инстанцируется, включая все связные коллекции.
|
|
25
|
+
|
|
26
|
+
PgCacheKey зависит только от подмножества используемых записей и их порядка, поэтому в отличие от collection_cache_key в 5-х
|
|
27
|
+
рельсах кеши всех подколлекций не летят в топку при изменении одного элемента в таблице.
|
|
28
|
+
|
|
29
|
+
Rem: Данное решение было упомянуто мной в https://github.com/rails/rails/issues/26330
|
|
13
30
|
|
|
14
31
|
# Benchmark
|
|
15
|
-
the numbers I
|
|
32
|
+
the numbers I personally get while comparing with rails 4.2 implementation of cache_key are:
|
|
16
33
|
|
|
17
34
|
Complex model
|
|
18
35
|
without includes: 10 items in collection ~ x1.3 faster, 20 ~ 1.55, 50 ~ x2, 1000 ~ x15
|
|
@@ -27,7 +44,9 @@ with includes: 10 items in collection ~ x3.6 faster, 20 ~ x4, 50 ~ x5.6, 1000 ~
|
|
|
27
44
|
|
|
28
45
|
Of course this is not the numbers for whole page rendering, but it's noticeable.
|
|
29
46
|
|
|
30
|
-
|
|
47
|
+
One of my real page goes from 0.8+ sec, for largest available pagination, to 0.6 sec per page
|
|
48
|
+
|
|
49
|
+
To get your numbers try it yourself!
|
|
31
50
|
|
|
32
51
|
## Installation
|
|
33
52
|
|
|
@@ -46,8 +65,11 @@ Or install it yourself as:
|
|
|
46
65
|
$ gem install pg_cache_key
|
|
47
66
|
|
|
48
67
|
## Usage
|
|
68
|
+
It works out of the box.
|
|
69
|
+
|
|
70
|
+
## Как использовать
|
|
49
71
|
|
|
50
|
-
|
|
72
|
+
По идее работает само из коробки, но если будут траблы - пишите.
|
|
51
73
|
|
|
52
74
|
## Development
|
|
53
75
|
|
data/lib/pg_cache_key/version.rb
CHANGED
data/lib/pg_cache_key.rb
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
require "pg_cache_key/version"
|
|
2
2
|
|
|
3
|
+
# In rails 5 it can be
|
|
3
4
|
# module ActiveRecord
|
|
4
5
|
# module CollectionCacheKey
|
|
5
6
|
# def collection_cache_key(collection = all, timestamp_column = :updated_at) # :nodoc:
|
|
6
7
|
# # why use connection.execute instead of doing collection.select because of an order. if you using some order on your scope
|
|
7
8
|
# # then columns you using to order must appear in the GROUP BY clause or be used in an aggregate function or you will get an error
|
|
8
|
-
#
|
|
9
|
-
#
|
|
9
|
+
# cache_columns = [timestamp_column, :id]
|
|
10
|
+
# @cache_keys ||= {}
|
|
11
|
+
# # we need to add select cache_columns explicitly because if relation has includes it might transform columns to aliases
|
|
12
|
+
# @cache_keys[timestamp_column] ||= connection.execute( "SELECT md5(string_agg( #{cache_columns.map{|fld| "\"t\".\"#{fld}\"::text" }.join('||')}, '') ) as cache_key
|
|
13
|
+
# FROM (#{ collection.select(cache_columns).try(:to_sql) }) t" )[0]['cache_key']
|
|
10
14
|
# end
|
|
11
15
|
# end
|
|
12
16
|
# end
|
|
13
17
|
|
|
18
|
+
# in rails 4 it would go like this:
|
|
14
19
|
module ActiveRecord
|
|
15
20
|
# = Active Record \Relation
|
|
16
21
|
class Relation
|
|
17
22
|
def cache_key(timestamp_column = :updated_at)
|
|
23
|
+
cache_columns = [timestamp_column, :id]
|
|
18
24
|
@cache_keys ||= {}
|
|
19
|
-
|
|
20
|
-
|
|
25
|
+
# why use connection.execute instead of doing collection.select because of an order. if you using some order on your scope
|
|
26
|
+
# then columns you using to order must appear in the GROUP BY clause or be used in an aggregate function or you will get an error
|
|
27
|
+
# we need to add select cache_columns explicitly because if relation has includes it might transform columns to aliases
|
|
28
|
+
@cache_keys[timestamp_column] ||= connection.execute( "SELECT md5(string_agg( #{cache_columns.map{|fld| "\"t\".\"#{fld}\"::text" }.join('||')}, '') ) as cache_key
|
|
29
|
+
FROM (#{ select(cache_columns).try(:to_sql) }) t" )[0]['cache_key']
|
|
21
30
|
end
|
|
22
31
|
end
|
|
23
|
-
end
|
|
32
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pg_cache_key
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- alekseyl
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-09-
|
|
11
|
+
date: 2016-09-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|