redis-orm 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -178,6 +178,9 @@ You can use these callbacks to perform commands directly upon the Redis database
178
178
 
179
179
  ## Configuration
180
180
 
181
+
182
+ ### connection
183
+
181
184
  You can set the host and port for Redis:
182
185
 
183
186
  Redis.host = 'localhost'
@@ -187,3 +190,13 @@ If you already have an active connection, however, these changes will not take e
187
190
 
188
191
  Redis.connection = Redis.new(:host => 'localhost', :port => 3000)
189
192
 
193
+
194
+ ### serializer
195
+
196
+ By default, Redis serializes the attributes using Marshal. If you would prefer to store data in some other format, simply replace Redis::ORM.serializer with your choice. Anything that responds to #dump and #load will work (JSON, YAML, etc):
197
+
198
+ Redis::ORM.serializer = YAML
199
+
200
+ Obviously, you can use your own custom serializer just as easily. Just pass in an object that returns a string for `#dump(object)` and an object for `#load(string)` and you're good to go.
201
+
202
+ It's worth noting that there can only be one serializer for all models. It's also worth noting that it's a Bad Idea to switch serializers once you've got a database full of data. If you need to switch, for instance, from JSON to YAML serialization, you'll need to come up with a migration scheme yourself.
@@ -13,7 +13,7 @@ module Redis::Actions::Destroying
13
13
  # run_callbacks(:before_destroy)
14
14
  run_callbacks(:destroy) do
15
15
  transaction do
16
- connection.del key
16
+ connection.del id
17
17
  within_destroy_blocks.each do |method_name_or_block|
18
18
  if method_name_or_block.kind_of?(String) || method_name_or_block.kind_of?(Symbol)
19
19
  send method_name_or_block
@@ -4,10 +4,10 @@ module Redis::Actions::Finding
4
4
  end
5
5
 
6
6
  module ClassMethods
7
- def find(key)
8
- data = connection.get(key)
7
+ def find(id)
8
+ data = connection.get(id)
9
9
  if data
10
- klass_name = key.split(/\//)[0]
10
+ klass_name = id.split(/\//)[0]
11
11
  klass = (klass_name.camelize.constantize rescue self)
12
12
  instance = klass.new(serializer.load(data))
13
13
  instance.set_unchanged!
@@ -18,8 +18,8 @@ module Redis::Actions::Finding
18
18
  end
19
19
 
20
20
  def all
21
- connection.hgetall(File.join(model_name, "keys")).collect do |key|
22
- find(key.first)
21
+ connection.hgetall(File.join(model_name, "ids")).collect do |id|
22
+ find(id.first)
23
23
  end
24
24
  end
25
25
  end
@@ -10,7 +10,7 @@ module Redis::Actions::Saving
10
10
 
11
11
  def save
12
12
  if valid?
13
- define_key if key.nil?
13
+ define_id if id.nil?
14
14
  run_callbacks(:save) do
15
15
  transaction do
16
16
  within_save_blocks.each do |block_or_method|
@@ -20,7 +20,7 @@ module Redis::Actions::Saving
20
20
  block_or_method.call self
21
21
  end
22
22
  end
23
- connection.set(key, serializer.dump(attributes))
23
+ connection.set(id, serializer.dump(attributes))
24
24
  end
25
25
  end
26
26
  set_unchanged!
@@ -34,8 +34,8 @@ module Redis::Actions::Saving
34
34
  raise "Record was not saved: #{errors.full_messages}" unless save
35
35
  end
36
36
 
37
- def define_key
38
- self.key = File.join(model_name, connection.incr("__uniq__").to_s)
37
+ def define_id
38
+ self.id = File.join(model_name, connection.incr("__uniq__").to_s)
39
39
  end
40
40
 
41
41
  module ClassMethods
@@ -23,19 +23,19 @@ class Redis::ORM
23
23
  include Redis::Relations
24
24
  include Redis::Validations
25
25
 
26
- attribute :key
27
- validates_uniqueness_of :key
26
+ attribute :id
27
+ validates_uniqueness_of :id
28
28
 
29
29
  class << self
30
30
  delegate :connection, :to => :Redis
31
31
  end
32
32
 
33
33
  def to_key
34
- persisted? ? key : nil
34
+ persisted? ? id : nil
35
35
  end
36
36
 
37
37
  def to_param
38
- persisted? ? File.join(model_name, key) : nil
38
+ persisted? ? File.join(model_name, id) : nil
39
39
  end
40
40
 
41
41
  def persisted?
@@ -54,6 +54,6 @@ class Redis::ORM
54
54
  end
55
55
 
56
56
  def ==(other)
57
- other && key == other.key
57
+ other && id == other.id
58
58
  end
59
59
  end
@@ -3,7 +3,7 @@ class Redis
3
3
  module Version
4
4
  MAJOR = 0
5
5
  MINOR = 0
6
- PATCH = 1
6
+ PATCH = 2
7
7
  PREREL = nil
8
8
 
9
9
  STRING = PREREL ? [MAJOR, MINOR, PATCH, PREREL].join('.') : [MAJOR, MINOR, PATCH].join('.')
@@ -11,21 +11,21 @@ module Redis::Relations::BelongsTo
11
11
  if belongs_to_references.key?(name)
12
12
  belongs_to_references[name]
13
13
  else
14
- result = self.class.find(connection.hget(belongs_to_relation_key(name), key))
14
+ result = self.class.find(connection.hget(belongs_to_relation_id(name), id))
15
15
  belongs_to_references[name] = result
16
16
  end
17
17
  end
18
18
 
19
- def belongs_to_relation_key(name)
19
+ def belongs_to_relation_id(name)
20
20
  File.join("references", belongs_to_relations[name][:relation].to_s)
21
21
  end
22
22
 
23
23
  def save_belongs_to_references
24
24
  belongs_to_references.each do |relation_name, reference|
25
25
  if reference
26
- reference = reference.key
26
+ reference = reference.id
27
27
  end
28
- connection.hset(belongs_to_relation_key(relation_name), key, reference)
28
+ connection.hset(belongs_to_relation_id(relation_name), id, reference)
29
29
  end
30
30
  end
31
31
 
@@ -7,7 +7,7 @@ module Redis::Relations::HasMany
7
7
  if has_many_references.key?(relation_name)
8
8
  has_many_references[relation_name]
9
9
  else
10
- result = connection.hget(has_many_relation_key(relation_name), key)
10
+ result = connection.hget(has_many_relation_id(relation_name), id)
11
11
  if result
12
12
  result = serializer.load(result)
13
13
  if result.respond_to?(:collect)
@@ -24,15 +24,15 @@ module Redis::Relations::HasMany
24
24
 
25
25
  def save_has_many_references
26
26
  has_many_references.each do |relation_name, array|
27
- array = array.collect { |a| a.key }
28
- connection.hset(has_many_relation_key(relation_name), key, serializer.dump(array))
29
- array.each do |akey|
30
- connection.hset(has_many_relation_key(relation_name), akey, key)
27
+ array = array.collect { |a| a.id }
28
+ connection.hset(has_many_relation_id(relation_name), id, serializer.dump(array))
29
+ array.each do |aid|
30
+ connection.hset(has_many_relation_id(relation_name), aid, id)
31
31
  end
32
32
  end
33
33
  end
34
34
 
35
- def has_many_relation_key(name)
35
+ def has_many_relation_id(name)
36
36
  File.join("references", has_many_relations[name][:relation].to_s)
37
37
  end
38
38
 
@@ -11,20 +11,20 @@ module Redis::Relations::HasOne
11
11
  if has_one_references.key?(relation_name)
12
12
  has_one_references[relation_name]
13
13
  else
14
- result = self.class.find(connection.hget(has_one_relation_key(relation_name), key))
14
+ result = self.class.find(connection.hget(has_one_relation_id(relation_name), id))
15
15
  has_one_references[relation_name] = result
16
16
  end
17
17
  end
18
18
 
19
- def has_one_relation_key(name)
19
+ def has_one_relation_id(name)
20
20
  File.join("references", has_one_relations[name][:relation].to_s)
21
21
  end
22
22
 
23
23
  def save_has_one_references
24
24
  has_one_references.each do |relation_name, reference|
25
25
  if reference
26
- connection.hset(has_one_relation_key(relation_name), key, reference.key)
27
- connection.hset(has_one_relation_key(relation_name), reference.key, key)
26
+ connection.hset(has_one_relation_id(relation_name), id, reference.id)
27
+ connection.hset(has_one_relation_id(relation_name), reference.id, id)
28
28
  end
29
29
  end
30
30
  end
@@ -1,5 +1,5 @@
1
1
  module Redis::Validations::Uniqueness
2
- def uniqueness_key(attribute_name)
2
+ def uniqueness_id(attribute_name)
3
3
  File.join(model_name, attribute_name.to_s.pluralize)
4
4
  end
5
5
 
@@ -16,8 +16,8 @@ module Redis::Validations::Uniqueness
16
16
 
17
17
  validate do |record|
18
18
  record.unique_fields.each do |name|
19
- if key_in_use = connection.hget(record.uniqueness_key(name), record.send(name))
20
- if key_in_use != record.key
19
+ if id_in_use = connection.hget(record.uniqueness_id(name), record.send(name))
20
+ if id_in_use != record.id
21
21
  record.errors.add(name, "must be unique")
22
22
  end
23
23
  end
@@ -26,14 +26,14 @@ module Redis::Validations::Uniqueness
26
26
 
27
27
  within_save_block do |record|
28
28
  record.unique_fields.each do |name|
29
- connection.hdel(record.uniqueness_key(name), record.previous_attributes[name])
30
- connection.hset(record.uniqueness_key(name), record.send(name), record.key)
29
+ connection.hdel(record.uniqueness_id(name), record.previous_attributes[name])
30
+ connection.hset(record.uniqueness_id(name), record.send(name), record.id)
31
31
  end
32
32
  end
33
33
 
34
34
  within_destroy_block do |record|
35
35
  record.unique_fields.each do |name|
36
- connection.hdel(record.uniqueness_key(name), record.send(name))
36
+ connection.hdel(record.uniqueness_id(name), record.send(name))
37
37
  end
38
38
  end
39
39
  end
@@ -17,9 +17,9 @@ describe Redis::Actions::Finding do
17
17
  end
18
18
  end
19
19
 
20
- context "with key not matching known constants" do
20
+ context "with id not matching known constants" do
21
21
  it "should find record with its own class" do
22
- orm_class.create!(:key => '1234')
22
+ orm_class.create!(:id => '1234')
23
23
  orm_class.find('1234').should be_kind_of(orm_class)
24
24
  end
25
25
  end
@@ -39,16 +39,16 @@ describe Redis::ORM do
39
39
  subject.should_not be_changed
40
40
  end
41
41
 
42
- it "should have a key" do
43
- subject.key.should_not be_nil
42
+ it "should have a id" do
43
+ subject.id.should_not be_nil
44
44
  end
45
45
 
46
46
  it "should be find-able" do
47
- orm_class.find(subject.key).should == subject
47
+ orm_class.find(subject.id).should == subject
48
48
  end
49
49
 
50
50
  it "should find separate instances" do
51
- orm_class.find(subject.key).should_not be(subject)
51
+ orm_class.find(subject.id).should_not be(subject)
52
52
  end
53
53
  end
54
54
  end
@@ -12,7 +12,7 @@ describe Redis::Relations::BelongsTo do
12
12
  subject.other = other
13
13
  subject.save!
14
14
 
15
- orm_class.find(subject.key).other.should be_kind_of(orm_class)
15
+ orm_class.find(subject.id).other.should be_kind_of(orm_class)
16
16
  end
17
17
 
18
18
  it "mass assignment" do
@@ -26,29 +26,3 @@ describe Redis::Relations::BelongsTo do
26
26
  subject.save!
27
27
  end
28
28
  end
29
-
30
-
31
- =begin
32
-
33
- class Aye
34
- has_many bees(, :foreign_key => :aye_id)
35
- end
36
-
37
- class Bee
38
- (attribute :aye_id)
39
- belongs_to aye
40
- end
41
-
42
-
43
-
44
- # reference built on the relation (foreign_key):
45
- # has_many uses its own name while belongs_to uses
46
- # the reference name
47
-
48
- references/ayes
49
- Aye/1 => [ Bee/1, Bee/2 ] # has_many stores an array of keys
50
- Bee/1 => Aye/1 # belongs_to stores a single key
51
- Bee/2 => Aye/1
52
-
53
-
54
- =end
@@ -14,9 +14,9 @@ describe Redis::Relations::HasMany do
14
14
  end
15
15
  subject.save!
16
16
 
17
- orm_class.find(subject.key).others.should have(10).items
17
+ orm_class.find(subject.id).others.should have(10).items
18
18
  for i in 0...10
19
- orm_class.find(subject.key).others[i].should be_kind_of(orm_class)
19
+ orm_class.find(subject.id).others[i].should be_kind_of(orm_class)
20
20
  end
21
21
  end
22
22
 
@@ -11,7 +11,7 @@ describe Redis::Relations::HasOne do
11
11
  subject.other = other
12
12
  subject.save!
13
13
 
14
- orm_class.find(subject.key).other.should be_kind_of(orm_class)
14
+ orm_class.find(subject.id).other.should be_kind_of(orm_class)
15
15
  end
16
16
 
17
17
  it "mass assignment" do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: redis-orm
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Colin MacKenzie IV