db_memoize 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5cf37e7e3bcb43c485a32f066bf662c46c677400
4
- data.tar.gz: e0e4c7ba6212f110b4eb86198c0633728f4557ae
3
+ metadata.gz: dfffa2764cf96130f8c5f970af1c4df4569a6863
4
+ data.tar.gz: 8f56d6aa555a8de336ddaea74de8ba15a6cc028e
5
5
  SHA512:
6
- metadata.gz: f15c0a14ded498437c44dc83b08ab3dec65bf3fe481c3d3c9a9a315884e6354bdb91b467158109f68e3fa747810eb30e4393290d3660d7390c00959669b94ecd
7
- data.tar.gz: 4794780073585583111c8aa03b259f5674dbbac73f359e0eaf9ae00a3e79390aadfd098074d29b86595c79c31f6b60c1ef1149fe2d59cbe96215246a9e946d0b
6
+ metadata.gz: a953847cb278bc0c4c323440820cb7747daab3867426bd6519269c4db4e309577c748145cc95044d30375a48ba87748d08a1a2fcf4b3266f983f7d406812883f
7
+ data.tar.gz: 614e9b9adb32ee2f0e96e5cc9a628d65c84480747c9ae82ce2b8f901e3b920a52bd2e0debb14bd7a806009bac577b52c2d638d29d190166451d0d4608b20bebf
data/README.md CHANGED
@@ -114,6 +114,23 @@ Similarly you can wipe all cached values for a given class
114
114
  bundle exec rake db_memoize:clear class=Letter
115
115
  ```
116
116
 
117
+ ### Setup
118
+
119
+ To create the required DB tables add a migration like this:
120
+
121
+ ```
122
+ class CreateMemoizedValues < ActiveRecord::Migration
123
+ def up
124
+ require 'db_memoize/migrations'
125
+ DbMemoize::Migrations.create_tables(self)
126
+ end
127
+
128
+ def down
129
+ drop_table :memoized_values
130
+ end
131
+ end
132
+ ```
133
+
117
134
 
118
135
  Have fun!
119
136
 
@@ -41,4 +41,5 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency 'ruby-progressbar', '~> 1.7'
42
42
  spec.add_development_dependency 'ffaker'
43
43
  spec.add_development_dependency 'awesome_print'
44
+ spec.add_development_dependency 'gem-release'
44
45
  end
@@ -68,26 +68,48 @@ module DbMemoize
68
68
  end
69
69
 
70
70
  def unmemoize(records_or_ids, method_name = :all)
71
- records_or_ids = Array(records_or_ids)
72
- return if records_or_ids.empty?
73
-
74
- ids = if records_or_ids.first.is_a?(ActiveRecord::Base)
75
- records_or_ids.map(&:id)
76
- else
77
- records_or_ids
78
- end
79
-
80
71
  conditions = {
81
72
  entity_table_name: table_name,
82
- entity_id: ids
73
+ entity_id: find_ids(records_or_ids)
83
74
  }
84
75
  conditions[:method_name] = method_name unless method_name == :all
85
76
 
86
77
  DbMemoize::Value.where(conditions).delete_all
87
78
  end
88
79
 
80
+ def memoize_values(records_or_ids, values)
81
+ transaction do
82
+ ids = find_ids(records_or_ids)
83
+ args_hash = ::Digest::MD5.hexdigest(Marshal.dump([]))
84
+
85
+ values = values.inject({}) do |hsh, (key, value)|
86
+ hsh.merge(key => Marshal.dump(value))
87
+ end
88
+
89
+ ids.each do |id|
90
+ values.each do |name, value|
91
+ DbMemoize::Value.create!(
92
+ entity_table_name: table_name,
93
+ entity_id: id,
94
+ method_name: name,
95
+ arguments_hash: args_hash,
96
+ custom_key: DbMemoize.default_custom_key.to_s,
97
+ value: value
98
+ )
99
+ end
100
+ end
101
+ end
102
+ end
103
+
89
104
  private
90
105
 
106
+ def find_ids(records_or_ids)
107
+ records_or_ids = Array(records_or_ids)
108
+ return [] if records_or_ids.empty?
109
+
110
+ records_or_ids.first.is_a?(ActiveRecord::Base) ? records_or_ids.map(&:id) : records_or_ids
111
+ end
112
+
91
113
  def create_alias_method(method_name)
92
114
  define_method "#{method_name}_with_memoize" do |*args|
93
115
  memoized_value(method_name, args)
@@ -100,7 +122,7 @@ module DbMemoize
100
122
  unless reflect_on_association(:memoized_values)
101
123
  conditions = { entity_table_name: table_name }
102
124
  has_many :memoized_values, -> { where(conditions) },
103
- dependent: :destroy, class_name: 'DbMemoize::Value', foreign_key: :entity_id
125
+ dependent: :delete_all, class_name: 'DbMemoize::Value', foreign_key: :entity_id
104
126
  end
105
127
  end
106
128
  end
@@ -1,3 +1,3 @@
1
1
  module DbMemoize
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.1.1'.freeze
3
3
  end
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.1.0
4
+ version: 0.1.1
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: 2017-01-03 00:00:00.000000000 Z
11
+ date: 2017-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -290,6 +290,20 @@ dependencies:
290
290
  - - ">="
291
291
  - !ruby/object:Gem::Version
292
292
  version: '0'
293
+ - !ruby/object:Gem::Dependency
294
+ name: gem-release
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - ">="
298
+ - !ruby/object:Gem::Version
299
+ version: '0'
300
+ type: :development
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ version: '0'
293
307
  description: library to cache (memoize) method return values in database
294
308
  email:
295
309
  - goetzinger@mediapeers.com