redistry 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -4,3 +4,8 @@ Redistry
4
4
  Some useful Redis patterns for Ruby (and Rails)
5
5
 
6
6
 
7
+ TODO
8
+ ----
9
+
10
+ * JSON serializer does not work with strings... not sure how to deal since this technically is not valid json
11
+ * Allow :class as option on has_list rather than always autodetecting
@@ -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 = Redistry.serializer.serialize(klass, objs.flatten)
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 load_collection
60
- @collection = begin
61
- serialized_objs = Redistry.client.lrange(key,0,-1)
62
- Redistry.serializer.deserialize(klass, serialized_objs)
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
@@ -10,7 +10,8 @@ module Redistry
10
10
  module ClassMethods
11
11
 
12
12
  def has_list(name, options = {})
13
- instance_variable_set("@_#{name}_has_list".to_sym, CollectionProxy.new(self, name, options))
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}
@@ -0,0 +1,15 @@
1
+ require 'json'
2
+
3
+ module Redistry
4
+ module Serializers
5
+ class JSON
6
+ def serialize(klass, *objs)
7
+ objs.flatten.map { |o| o.to_json }
8
+ end
9
+
10
+ def deserialize(klass, *objs)
11
+ objs.flatten.map { |o| ::JSON.parse(o) }
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  module Redistry
2
2
 
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
 
5
5
  end
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, :serializer
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 serializer
16
- @serializer ||= Redistry::Serializers::ActiveRecord.new
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
- ActiveRecord::Base.send(:include, Redistry::HasList) if defined?(ActiveRecord)
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
- - 0
9
- version: 0.1.0
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: rspec
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: :development
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