redis_assist 0.3.0 → 0.4.0
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/lib/redis_assist/associations.rb +78 -0
- data/lib/redis_assist/base.rb +14 -11
- data/lib/redis_assist/config.rb +1 -1
- data/lib/redis_assist/version.rb +1 -1
- data/lib/redis_assist.rb +15 -2
- metadata +8 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfb1cde901db1c06163e7aaab7f8eec71007f8e8
|
4
|
+
data.tar.gz: ffd1186e43e0e85ed936ab08ce0cc264fde1cd76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f11c0538e2b2e5825b9d04817e8f5c97ec4e31a65ecb2fed7b9eddb7d5b93402ac9014917c6e687639e9d168307e3c44b7e1c0c44647e36b4fb2e044612a6055
|
7
|
+
data.tar.gz: 5ca61fb2b41180426831e822b97a56b793a039275ca4929d7ba24228d6d1f2a22a2530927bce2e4dc674673b18041aca36ab5a0e470f44dbc1e33ffaced99b71
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module RedisAssist
|
2
|
+
module Associations
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def has_many(name, opts={})
|
9
|
+
define_has_many(name, opts)
|
10
|
+
end
|
11
|
+
|
12
|
+
def belongs_to(name, opts={})
|
13
|
+
define_belongs_to(name, opts)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def define_has_many(name, opts={})
|
19
|
+
singular_name = StringHelper.singularize(name)
|
20
|
+
class_name = opts[:class_name] ? opts[:class_name] : StringHelper.camelize(singular_name)
|
21
|
+
|
22
|
+
attr_persist("#{singular_name}_ids".to_sym, as: :list, default: [])
|
23
|
+
|
24
|
+
define_method(name) do
|
25
|
+
klass = Module.const_get(class_name)
|
26
|
+
records = instance_variable_get("@_#{name}")
|
27
|
+
return records if records
|
28
|
+
record_ids = send("#{singular_name}_ids")
|
29
|
+
records = klass.find(record_ids)
|
30
|
+
|
31
|
+
instance_variable_set("@_#{name}", records)
|
32
|
+
end
|
33
|
+
|
34
|
+
define_method("#{name}=") do |records|
|
35
|
+
instance_variable_set("@_#{name}", records.collect(&:id))
|
36
|
+
end
|
37
|
+
|
38
|
+
define_method("add_#{singular_name}") do |record|
|
39
|
+
current_records = instance_variable_get("@_#{name}")
|
40
|
+
|
41
|
+
if record.respond_to?(StringHelper.underscore(self.class.name))
|
42
|
+
record.send("#{StringHelper.underscore(self.class.name)}=", self)
|
43
|
+
end
|
44
|
+
|
45
|
+
if record.new_record?
|
46
|
+
record.save
|
47
|
+
end
|
48
|
+
|
49
|
+
if current_records
|
50
|
+
current_records << record
|
51
|
+
else
|
52
|
+
current_records = [record]
|
53
|
+
end
|
54
|
+
|
55
|
+
send("#{singular_name}_ids") << record.id
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def define_belongs_to(name, opts={})
|
60
|
+
class_name = opts[:class_name] ? opts[:class_name] : StringHelper.camelize(name)
|
61
|
+
attr_persist("#{name}_id".to_sym, as: :integer, default: nil)
|
62
|
+
|
63
|
+
define_method(name) do
|
64
|
+
klass = Module.const_get(class_name)
|
65
|
+
record = instance_variable_get("@_#{name}")
|
66
|
+
return record if record
|
67
|
+
record = klass.find(send("#{name}_id"))
|
68
|
+
instance_variable_set("@_#{name}", record)
|
69
|
+
end
|
70
|
+
|
71
|
+
define_method("#{name}=") do |record|
|
72
|
+
send("#{name}_id=", record.id)
|
73
|
+
instance_variable_set("@_#{name}", record)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/redis_assist/base.rb
CHANGED
@@ -3,11 +3,14 @@ module RedisAssist
|
|
3
3
|
|
4
4
|
include Callbacks
|
5
5
|
include Validations
|
6
|
+
include Associations
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
def self.inherited(base)
|
9
|
+
base.before_create {|record| record.send(:created_at=, Time.now.to_f) if record.respond_to?(:created_at) }
|
10
|
+
base.before_update {|record| record.send(:updated_at=, Time.now.to_f) if record.respond_to?(:updated_at) }
|
11
|
+
base.after_delete {|record| record.send(:deleted_at=, Time.now.to_f) if record.respond_to?(:deleted_at) }
|
12
|
+
base.after_create {|record| record.send(:new_record=, false) }
|
13
|
+
end
|
11
14
|
|
12
15
|
class << self
|
13
16
|
|
@@ -19,7 +22,7 @@ module RedisAssist
|
|
19
22
|
elsif opts[:as].eql?(:hash)
|
20
23
|
define_hash(name)
|
21
24
|
else
|
22
|
-
|
25
|
+
define_attribute(name)
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
@@ -201,7 +204,7 @@ module RedisAssist
|
|
201
204
|
end
|
202
205
|
end
|
203
206
|
|
204
|
-
def
|
207
|
+
def define_attribute(name)
|
205
208
|
define_method(name) do
|
206
209
|
self.class.transform(:from, name, attributes[name])
|
207
210
|
end
|
@@ -216,9 +219,9 @@ module RedisAssist
|
|
216
219
|
attr_reader :id
|
217
220
|
|
218
221
|
def initialize(attrs={})
|
219
|
-
|
220
|
-
self.lists
|
221
|
-
self.hashes
|
222
|
+
self.attributes = {}
|
223
|
+
self.lists = {}
|
224
|
+
self.hashes = {}
|
222
225
|
|
223
226
|
if attrs[:id]
|
224
227
|
self.id = attrs[:id]
|
@@ -236,7 +239,7 @@ module RedisAssist
|
|
236
239
|
attrs.delete(name)
|
237
240
|
end
|
238
241
|
|
239
|
-
raise "RedisAssist: #{self.class.name} does not support
|
242
|
+
raise "RedisAssist: #{self.class.name} does not support attributes: #{attrs.keys.join(', ')}" if attrs.length > 0
|
240
243
|
end
|
241
244
|
|
242
245
|
def saved?
|
@@ -255,7 +258,7 @@ module RedisAssist
|
|
255
258
|
|
256
259
|
redis.multi do
|
257
260
|
# build the arguments to pass to redis hmset
|
258
|
-
# and insure the
|
261
|
+
# and insure the attributes are explicitely declared
|
259
262
|
attribute_args = hash_to_redis(attributes)
|
260
263
|
|
261
264
|
redis.hmset(key_for(:attributes), *attribute_args)
|
data/lib/redis_assist/config.rb
CHANGED
data/lib/redis_assist/version.rb
CHANGED
data/lib/redis_assist.rb
CHANGED
@@ -2,12 +2,12 @@ $LOAD_PATH << File.dirname(__FILE__) unless $LOAD_PATH.include?(File.dirname(__F
|
|
2
2
|
|
3
3
|
require 'time'
|
4
4
|
require 'redis'
|
5
|
-
require 'uuid'
|
6
5
|
require 'json'
|
7
6
|
require 'redis_assist/config'
|
8
7
|
require 'redis_assist/transform'
|
9
8
|
require 'redis_assist/callbacks'
|
10
9
|
require 'redis_assist/validations'
|
10
|
+
require 'redis_assist/associations'
|
11
11
|
require 'redis_assist/base'
|
12
12
|
|
13
13
|
# == Setup & Configuration
|
@@ -17,12 +17,25 @@ require 'redis_assist/base'
|
|
17
17
|
module RedisAssist
|
18
18
|
module StringHelper
|
19
19
|
def self.underscore(str)
|
20
|
-
str.gsub(/::/, '/').
|
20
|
+
str.to_s.gsub(/::/, '/').
|
21
21
|
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
22
22
|
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
23
23
|
tr("-", "_").
|
24
24
|
downcase
|
25
25
|
end
|
26
|
+
|
27
|
+
def self.camelize(str)
|
28
|
+
str.to_s.split('_').map{|e| e.capitalize}.join
|
29
|
+
end
|
30
|
+
|
31
|
+
# TODO: Would love to integrate a special-cases singulizer/pluralizer without adding dependencies.
|
32
|
+
def self.singularize(str)
|
33
|
+
str.to_s.gsub(/s$/, '')
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.pluralize(str)
|
37
|
+
"#{str}s"
|
38
|
+
end
|
26
39
|
end
|
27
40
|
end
|
28
41
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis_assist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Love
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-04-
|
11
|
+
date: 2013-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -16,56 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.0.
|
19
|
+
version: 3.0.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.0.
|
26
|
+
version: 3.0.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: inflections
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 3.2.12.20130314
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: uuid
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ~>
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 2.3.6
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ~>
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 2.3.6
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: base62
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.1.4
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ~>
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: 0.1.4
|
40
|
+
version: 3.2.12.20130314
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: bundler
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,6 +101,7 @@ executables: []
|
|
129
101
|
extensions: []
|
130
102
|
extra_rdoc_files: []
|
131
103
|
files:
|
104
|
+
- lib/redis_assist/associations.rb
|
132
105
|
- lib/redis_assist/base.rb
|
133
106
|
- lib/redis_assist/callbacks.rb
|
134
107
|
- lib/redis_assist/config.rb
|