db_memoize 0.3.7 → 0.3.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97b2b4cd0624780588e5aaa90b93bf26e5f272246b043e076a282461e036188f
4
- data.tar.gz: 8d440f2716fad476dbf95dd94698e77cb90099e9be330ffff599b788d1e2be1c
3
+ metadata.gz: 104a42e53e91c5485d2babe2f22995633965025b6a9bf4790b54d1e7768aef45
4
+ data.tar.gz: 0301ec4568f6787036176431fbdaa327c7e564287b06b670ddc95396672f79fc
5
5
  SHA512:
6
- metadata.gz: 063a5479a255e730d6fc4c2f9b89fc007484662ca2e852536603f974daa1fa8017d783ac5bfebe776b39096c3a70e7d65b2266c1efc80c75562ecb94d5f6da69
7
- data.tar.gz: a52b4f47e0a15e82769e2188467c543580ad45203e42817b3341e24f11413af7719f1122b3255eeb59c05c9733fdad1b9c0949d53495211de6a7f14249da9eb6
6
+ metadata.gz: 0fc1493d08f64346c0bc7cb9ff1da76ac0d6a32e6d7c9a42fc56e39f2cf174ab1c18f668410b3fd0015405847aa4cb204605028b41d0c71c13c93830157ec18d
7
+ data.tar.gz: 73d3a582bb4544a3c813794abe13e1aea4f6c40d298de3808ab648be76280c712fbbf2451061dc043d1fa4cb4e384450eeaf6fdbf70b5b1ce1871392388439ea
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [![Build Status](https://travis-ci.com/mediapeers/db_memoize.svg?branch=master)](https://travis-ci.com/mediapeers/db_memoize)
2
2
 
3
3
  # db_memoize
4
- library to cache (memoize) method return values in database
4
+ A library to cache (memoize) return values of methods in the database.
5
5
 
6
6
  **Note:** when updating from version 0.1 to 0.2 you need to run a migration on the existing table, see below.
7
7
 
@@ -37,7 +37,7 @@ record.hello
37
37
 
38
38
  will call the original method only once. Consecutive calls will return a cached value.
39
39
 
40
- If the method takes arguments..
40
+ If the method takes arguments...
41
41
 
42
42
  record.hello('Maria')
43
43
  record.hello('John')
@@ -68,7 +68,7 @@ Instead of ActiveRecord instances it's sufficient to pass in the ids of the reco
68
68
 
69
69
  ### Gotchas
70
70
 
71
- As the cached values themselves are writtten to the database, are ActiveRecord records (of type `DbMemoize::Value`) and are reqistered as an association you can access all of the cached values of an object like this:
71
+ The cached values themselves are active records (of type `DbMemoize::Value`) and are saved in the database. They are also registered as an association, so you can access all of the cached values of an object like this:
72
72
 
73
73
  record.memoized_values
74
74
 
@@ -82,11 +82,11 @@ DbMemoize by default will write log output to STDOUT. You can change this by set
82
82
 
83
83
  ### Rake Tasks
84
84
 
85
- To _warmup_ your cache you can pre-generate cached values via a rake task like this (only works for methods not depending on arguments)
85
+ To _warmup_ your cache, you can pre-generate cached values via a rake task like this (only works for methods that do not take arguments):
86
86
 
87
87
  bundle exec rake db_memoize:warmup class=Letter methods=hello,bye
88
88
 
89
- Similarly you can wipe all cached values for a given class
89
+ Similarly, you can wipe all cached values for a given class:
90
90
 
91
91
  bundle exec rake db_memoize:clear class=Letter
92
92
 
@@ -111,44 +111,14 @@ end
111
111
 
112
112
  Note that db_memoize needs Postgres. To set up the database needed to run tests, this is what you can do:
113
113
 
114
- # sudo su postgresql
115
-    # createuser >>yourusername<<
116
- # createdb -O >>yourusername<< db_memoize_test
117
-
118
-
119
- ### Updating from 0.1 -> 0.2
120
-
121
- You need to run a migration, like the following:
122
-
123
- ```
124
- class FixDbMemoizeTable < ActiveRecord::Migration
125
- def up
126
- # After updating db_memoize to 0.2 we need to update some structures, depending
127
- # on whether or not db_memoize 0.1 or 0.2 was creating the database tables.
128
- execute <<-SQL
129
- ALTER TABLE memoized_values
130
- ALTER COLUMN entity_table_name SET NOT NULL,
131
- ALTER COLUMN entity_id SET NOT NULL,
132
- ALTER COLUMN method_name SET NOT NULL,
133
- ALTER COLUMN created_at SET NOT NULL;
134
- DROP INDEX IF EXISTS index_memoized_values_on_entity_table_name_and_entity_id;
135
- CREATE INDEX IF NOT EXISTS index_memoized_values_on_entity_id_and_entity_table_name
136
- ON memoized_values(entity_id, entity_table_name);
137
- CREATE INDEX IF NOT EXISTS memoized_attributes_idx
138
- ON memoized_values (((arguments_hash IS NULL)))
139
- SQL
140
- end
141
-
142
- def down
143
- execute <<-SQL
144
- DROP INDEX memoized_attributes_idx;
145
- DROP INDEX index_memoized_values_on_entity_id_and_entity_table_name;
146
- SQL
147
- end
148
- end
114
+ ```sh
115
+ ~/your/path> sudo su postgresql
116
+ ~/your/path> createuser >>yourusername<
117
+ ~/your/path> createdb -O >>yourusername<< db_memoize_test
149
118
  ```
150
119
 
151
- Have fun!
152
120
 
121
+ ### Updating from earlier versions
153
122
 
123
+ It is generally impossible to update from earlier versions and keep the cached data. DbMemoize should always be able to rerun migrations to update database structures to the latest version - feel free to add in as many migrations as you like :)
154
124
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.3.8
@@ -3,30 +3,27 @@ module DbMemoize
3
3
  class << self
4
4
  def create_tables(migration)
5
5
  migration.execute <<~SQL
6
- CREATE TABLE IF NOT EXISTS memoized_values (
6
+ CREATE SCHEMA IF NOT EXISTS db_memoize;
7
+
8
+ CREATE TABLE IF NOT EXISTS db_memoize.memoized_values (
7
9
  entity_table_name varchar NOT NULL,
8
- entity_id integer NOT NULL,
9
- method_name varchar NOT NULL,
10
- created_at timestamp without time zone NOT NULL
10
+ entity_id integer NOT NULL,
11
+ method_name varchar NOT NULL,
12
+
13
+ val_string varchar,
14
+ val_integer bigint,
15
+ val_float double precision,
16
+ val_time timestamp without time zone,
17
+ val_object jsonb,
18
+ val_boolean boolean,
19
+ val_nil boolean,
20
+ created_at timestamp without time zone NOT NULL
11
21
  );
12
22
 
13
23
  -- entity_id/entity_table_name should have a better chance to be useful, since
14
24
  -- there is more variance in entity_ids than there is in entity_table_names.
15
- DROP INDEX IF EXISTS index_memoized_values_on_entity_id_and_entity_table_name;
16
- DROP INDEX IF EXISTS index_memoized_values_on_entity_table_name_and_entity_id;
17
25
  CREATE UNIQUE INDEX IF NOT EXISTS memoized_attributes_idx2
18
- ON memoized_values(entity_id, entity_table_name, method_name);
19
-
20
- ALTER TABLE memoized_values DROP COLUMN IF EXISTS arguments_hash;
21
- ALTER TABLE memoized_values DROP COLUMN IF EXISTS value;
22
-
23
- ALTER TABLE memoized_values ADD COLUMN IF NOT EXISTS val_string varchar;
24
- ALTER TABLE memoized_values ADD COLUMN IF NOT EXISTS val_integer bigint;
25
- ALTER TABLE memoized_values ADD COLUMN IF NOT EXISTS val_float double precision;
26
- ALTER TABLE memoized_values ADD COLUMN IF NOT EXISTS val_time timestamp without time zone;
27
- ALTER TABLE memoized_values ADD COLUMN IF NOT EXISTS val_object jsonb;
28
- ALTER TABLE memoized_values ADD COLUMN IF NOT EXISTS val_boolean boolean;
29
- ALTER TABLE memoized_values ADD COLUMN IF NOT EXISTS val_nil boolean;
26
+ ON db_memoize.memoized_values(entity_id, entity_table_name, method_name);
30
27
  SQL
31
28
  end
32
29
  end
@@ -5,7 +5,7 @@ require 'json'
5
5
 
6
6
  module DbMemoize
7
7
  class Value < ActiveRecord::Base
8
- self.table_name = 'memoized_values'
8
+ self.table_name = 'db_memoize.memoized_values'
9
9
 
10
10
  SQL = ::Simple::SQL
11
11
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db_memoize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - johannes-kostas goetzinger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-09 00:00:00.000000000 Z
11
+ date: 2018-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple-sql