redistry 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.
- data/README.md +5 -0
- data/lib/redistry/has_list/collection_proxy.rb +17 -24
- data/lib/redistry/has_list.rb +2 -1
- data/lib/redistry/serializers/json.rb +15 -0
- data/lib/redistry/version.rb +1 -1
- data/lib/redistry.rb +14 -5
- metadata +31 -4
data/README.md
CHANGED
@@ -1,19 +1,23 @@
|
|
1
1
|
module Redistry
|
2
2
|
module HasList
|
3
3
|
class CollectionProxy
|
4
|
-
include Enumerable
|
5
|
-
|
6
4
|
attr_accessor :klass, :collection_name, :options
|
7
5
|
|
8
6
|
def initialize(klass, collection_name, options = {})
|
9
7
|
self.klass = klass
|
10
8
|
self.collection_name = collection_name
|
11
9
|
self.options = default_options.merge(options)
|
10
|
+
setup_serializer!
|
11
|
+
end
|
12
|
+
|
13
|
+
def all
|
14
|
+
serialized_objs = Redistry.client.lrange(key,0,-1)
|
15
|
+
serialized_objs.nil? || serialized_objs.empty? ? [] : @serializer.deserialize(klass, serialized_objs)
|
12
16
|
end
|
13
17
|
|
14
18
|
def add(*objs)
|
15
|
-
serialized_objs =
|
16
|
-
serialized_objs.each do |val|
|
19
|
+
serialized_objs = @serializer.serialize(klass, objs.flatten)
|
20
|
+
serialized_objs.reverse.each do |val|
|
17
21
|
Redistry.client.lpush(key, val)
|
18
22
|
end
|
19
23
|
|
@@ -28,26 +32,10 @@ module Redistry
|
|
28
32
|
self
|
29
33
|
end
|
30
34
|
|
31
|
-
def reload
|
32
|
-
load_collection
|
33
|
-
self
|
34
|
-
end
|
35
|
-
|
36
|
-
def each
|
37
|
-
to_a.each do |v|
|
38
|
-
yield v
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
35
|
def key
|
43
36
|
@key ||= "#{klass.name}-#{collection_name.to_s}"
|
44
37
|
end
|
45
38
|
|
46
|
-
def to_ary
|
47
|
-
@collection ||= load_collection
|
48
|
-
end
|
49
|
-
alias_method :to_a, :to_ary
|
50
|
-
|
51
39
|
private
|
52
40
|
|
53
41
|
def default_options
|
@@ -56,12 +44,17 @@ module Redistry
|
|
56
44
|
}
|
57
45
|
end
|
58
46
|
|
59
|
-
def
|
60
|
-
@
|
61
|
-
|
62
|
-
|
47
|
+
def setup_serializer!
|
48
|
+
@serializer = begin
|
49
|
+
if Redistry.loaded_frameworks.include?(:activerecord) &&
|
50
|
+
klass < ActiveRecord::Base
|
51
|
+
Redistry::Serializers::ActiveRecord.new
|
52
|
+
else
|
53
|
+
Redistry::Serializers::JSON.new
|
54
|
+
end
|
63
55
|
end
|
64
56
|
end
|
57
|
+
|
65
58
|
end
|
66
59
|
end
|
67
60
|
end
|
data/lib/redistry/has_list.rb
CHANGED
@@ -10,7 +10,8 @@ module Redistry
|
|
10
10
|
module ClassMethods
|
11
11
|
|
12
12
|
def has_list(name, options = {})
|
13
|
-
|
13
|
+
klass = options.delete(:class) || self
|
14
|
+
instance_variable_set("@_#{name}_has_list".to_sym, CollectionProxy.new(klass, name, options))
|
14
15
|
|
15
16
|
class_eval <<-EOF
|
16
17
|
def self.#{name}
|
data/lib/redistry/version.rb
CHANGED
data/lib/redistry.rb
CHANGED
@@ -1,20 +1,29 @@
|
|
1
1
|
require 'redis'
|
2
2
|
require 'redistry/version'
|
3
|
-
require 'redistry/serializers/activerecord'
|
4
3
|
require 'redistry/has_list'
|
4
|
+
require 'redistry/serializers/json'
|
5
5
|
|
6
6
|
module Redistry
|
7
7
|
extend self
|
8
8
|
|
9
|
-
attr_accessor :client
|
9
|
+
attr_accessor :client
|
10
|
+
attr_reader :loaded_frameworks
|
11
|
+
|
10
12
|
|
11
13
|
def client
|
12
14
|
@client ||= Redis.new
|
13
15
|
end
|
14
16
|
|
15
|
-
def
|
16
|
-
@
|
17
|
+
def setup!
|
18
|
+
@loaded_frameworks = []
|
19
|
+
end
|
20
|
+
|
21
|
+
def setup_active_record!
|
22
|
+
require 'redistry/serializers/activerecord'
|
23
|
+
ActiveRecord::Base.send(:include, Redistry::HasList)
|
24
|
+
@loaded_frameworks << :activerecord
|
17
25
|
end
|
18
26
|
end
|
19
27
|
|
20
|
-
|
28
|
+
Redistry.setup!
|
29
|
+
Redistry.setup_active_record! if defined?(ActiveRecord)
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brian Smith
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: json
|
37
37
|
prerelease: false
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
@@ -43,8 +43,34 @@ dependencies:
|
|
43
43
|
segments:
|
44
44
|
- 0
|
45
45
|
version: "0"
|
46
|
-
type: :
|
46
|
+
type: :runtime
|
47
47
|
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: activerecord
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
version: "0"
|
59
|
+
type: :development
|
60
|
+
version_requirements: *id003
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
prerelease: false
|
64
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
version: "0"
|
72
|
+
type: :development
|
73
|
+
version_requirements: *id004
|
48
74
|
description: A set of useful Redis patterns/abstractions for Ruby (and Rails)
|
49
75
|
email:
|
50
76
|
- bsmith@swig505.com
|
@@ -58,6 +84,7 @@ files:
|
|
58
84
|
- lib/redistry/has_list/collection_proxy.rb
|
59
85
|
- lib/redistry/has_list.rb
|
60
86
|
- lib/redistry/serializers/activerecord.rb
|
87
|
+
- lib/redistry/serializers/json.rb
|
61
88
|
- lib/redistry/version.rb
|
62
89
|
- lib/redistry.rb
|
63
90
|
- LICENSE
|