ohm 2.0.0.alpha3 → 2.0.0.alpha4

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: b3734bd99776bff0786c42047b43dbeed799d907
4
- data.tar.gz: f3883cf4aa7fea58b716b5e5dd0796458bfda388
3
+ metadata.gz: 0098b213347fa1dade66ecb25578c98661dede1f
4
+ data.tar.gz: bf14fe6201dcc44633250fe1c76efd1ee9319d41
5
5
  SHA512:
6
- metadata.gz: fa9b8566cf79aa0470f1236c056bcd60f6968f2e3d50f39512431860758a3335363e32a1876610fde9d5a5ca4a72c7602a96779b83e8357c10088cdcb11fab93
7
- data.tar.gz: cbe87bc0b7eb78ec264ab0e28dd48a36387b2f8325a8ec4d5d26666bda6f9755aeaefc1208687fabf56523865be9b9d96c70308137feda6260d21ab13223dab9
6
+ metadata.gz: 6452603dcdc4f3d0d822243c6d85d30d73d012f3521d04f673c5c53a8d71e6a153b7fada6420f889ef389f50e2d0ad2994b2985c239820471270a3d4c0410114
7
+ data.tar.gz: f1877e6cc349845df64382b0aa65f9f61955db0dd28f5e41ca47b6047d5625eb44b8bafbb0a1bb46dc0136641d98ebf786077f322672e8552d4edf323113bcca
data/README.md CHANGED
@@ -443,8 +443,7 @@ lookups.
443
443
  In the `Event` example, the index on the name attribute will
444
444
  allow for searches like `Event.find(:name => "some value")`.
445
445
 
446
- Note that the {Ohm::Model::Validations#assert_unique assert_unique}
447
- validation and the methods {Ohm::Model::Set#find find} and
446
+ Note that the methods {Ohm::Model::Set#find find} and
448
447
  {Ohm::Model::Set#except except} need a corresponding index in order to work.
449
448
 
450
449
  ### Finding records
data/lib/ohm.rb CHANGED
@@ -65,7 +65,8 @@ module Ohm
65
65
  #
66
66
  def self.const(context, name)
67
67
  case name
68
- when Symbol then context.const_get(name)
68
+ when Symbol, String
69
+ context.const_get(name)
69
70
  else name
70
71
  end
71
72
  end
@@ -1,6 +1,27 @@
1
- local model = cmsgpack.unpack(ARGV[1])
2
- local uniques = cmsgpack.unpack(ARGV[2])
3
- local tracked = cmsgpack.unpack(ARGV[3])
1
+ -- This script receives three parameters, all encoded with
2
+ -- MessagePack. The decoded values are used for deleting a model
3
+ -- instance in Redis and removing any reference to it in sets
4
+ -- (indices) and hashes (unique indices).
5
+ --
6
+ -- # model
7
+ --
8
+ -- Table with three attributes:
9
+ -- id (model instance id)
10
+ -- key (hash where the attributes will be saved)
11
+ -- name (model name)
12
+ --
13
+ -- # uniques
14
+ --
15
+ -- Fields and values to be removed from the unique indices.
16
+ --
17
+ -- # tracked
18
+ --
19
+ -- Keys that share the lifecycle of this model instance, that
20
+ -- should be removed as this object is deleted.
21
+ --
22
+ local model = cmsgpack.unpack(ARGV[1])
23
+ local uniques = cmsgpack.unpack(ARGV[2])
24
+ local tracked = cmsgpack.unpack(ARGV[3])
4
25
 
5
26
  local function remove_indices(model)
6
27
  local memo = model.key .. ":_indices"
data/lib/ohm/lua/save.lua CHANGED
@@ -1,7 +1,38 @@
1
- local model = cmsgpack.unpack(ARGV[1])
2
- local attrs = cmsgpack.unpack(ARGV[2])
3
- local indices = cmsgpack.unpack(ARGV[3])
4
- local uniques = cmsgpack.unpack(ARGV[4])
1
+ -- This script receives four parameters, all encoded with
2
+ -- MessagePack. The decoded values are used for saving a model
3
+ -- instance in Redis, creating or updating a hash as needed and
4
+ -- updating zero or more sets (indices) and zero or more hashes
5
+ -- (unique indices).
6
+ --
7
+ -- # model
8
+ --
9
+ -- Table with three attributes:
10
+ -- id (model instance id)
11
+ -- key (hash where the attributes will be saved)
12
+ -- name (model name)
13
+ --
14
+ -- # attrs
15
+ --
16
+ -- Array with attribute/value pairs.
17
+ --
18
+ -- # indices
19
+ --
20
+ -- Fields and values to be indexed. Each key in the indices
21
+ -- table is mapped to an array of values. One index is created
22
+ -- for each field/value pair.
23
+ --
24
+ -- # uniques
25
+ --
26
+ -- Fields and values to be indexed as unique. Unlike indices,
27
+ -- values are not enumerable. If a field/value pair is not unique
28
+ -- (i.e., if there was already a hash entry for that field and
29
+ -- value), an error is returned with the UniqueIndexViolation
30
+ -- message and the field that triggered the error.
31
+ --
32
+ local model = cmsgpack.unpack(ARGV[1])
33
+ local attrs = cmsgpack.unpack(ARGV[2])
34
+ local indices = cmsgpack.unpack(ARGV[3])
35
+ local uniques = cmsgpack.unpack(ARGV[4])
5
36
 
6
37
  local function save(model, attrs)
7
38
  redis.call("SADD", model.name .. ":all", model.id)
@@ -46,12 +77,10 @@ local function unique(model, uniques)
46
77
  end
47
78
  end
48
79
 
49
- local function remove_uniques(model, uniques)
80
+ local function remove_uniques(model)
50
81
  local memo = model.key .. ":_uniques"
51
82
 
52
- for field, _ in pairs(uniques) do
53
- local key = model.name .. ":uniques:" .. field
54
-
83
+ for _, key in pairs(redis.call("HKEYS", memo)) do
55
84
  redis.call("HDEL", key, redis.call("HGET", memo, key))
56
85
  redis.call("HDEL", memo, key)
57
86
  end
data/makefile ADDED
@@ -0,0 +1,4 @@
1
+ .PHONY: test
2
+
3
+ test:
4
+ cutest -r ./test/helper.rb ./test/*.rb
data/ohm.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "ohm"
3
- s.version = "2.0.0.alpha3"
3
+ s.version = "2.0.0.alpha4"
4
4
  s.summary = %{Object-hash mapping library for Redis.}
5
5
  s.description = %Q{Ohm is a library that allows to store an object in Redis, a persistent key-value database. It includes an extensible list of validations and has very good performance.}
6
6
  s.authors = ["Michel Martens", "Damian Janowski", "Cyril David"]
data/test/model.rb CHANGED
@@ -42,6 +42,10 @@ module SomeNamespace
42
42
  class Foo < Ohm::Model
43
43
  attribute :name
44
44
  end
45
+
46
+ class Bar < Ohm::Model
47
+ reference :foo, 'SomeNamespace::Foo'
48
+ end
45
49
  end
46
50
 
47
51
  class Meetup < Ohm::Model
@@ -779,9 +783,12 @@ end
779
783
  test "be persisted" do
780
784
  SomeNamespace::Foo.create(:name => "foo")
781
785
 
786
+ SomeNamespace::Bar.create(:foo => SomeNamespace::Foo[1])
787
+
782
788
  assert "hash" == Ohm.redis.call("TYPE", "SomeNamespace::Foo:1")
783
789
 
784
790
  assert "foo" == SomeNamespace::Foo[1].name
791
+ assert "foo" == SomeNamespace::Bar[1].foo.name
785
792
  end
786
793
 
787
794
  test "typecast attributes" do
data/test/uniques.rb CHANGED
@@ -12,7 +12,7 @@ class User < Ohm::Model
12
12
  end
13
13
 
14
14
  def provider
15
- email[/@(.*?).com/, 1]
15
+ email.to_s[/@(.*?).com/, 1]
16
16
  end
17
17
  end
18
18
 
@@ -66,6 +66,11 @@ test "removes the previous index when changing" do
66
66
  assert_equal nil, User.with(:email, "c@c.com")
67
67
  assert_equal nil, User.redis.call("HGET", User.key[:uniques][:email], "c@c.com")
68
68
  assert_equal u, User.with(:email, "d@d.com")
69
+
70
+ u.update(:email => nil)
71
+
72
+ assert_equal nil, User.with(:email, "d@d.com")
73
+ assert_equal nil, User.redis.call("HGET", User.key[:uniques][:email], "d@d.com")
69
74
  end
70
75
 
71
76
  test "removes the previous index when deleting" do |u|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ohm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.alpha3
4
+ version: 2.0.0.alpha4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michel Martens
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-04 00:00:00.000000000 Z
13
+ date: 2013-10-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: redic
@@ -101,6 +101,7 @@ files:
101
101
  - lib/ohm/json.rb
102
102
  - lib/ohm/lua/delete.lua
103
103
  - lib/ohm/lua/save.lua
104
+ - makefile
104
105
  - ohm.gemspec
105
106
  - test/association.rb
106
107
  - test/command.rb
@@ -145,3 +146,4 @@ signing_key:
145
146
  specification_version: 4
146
147
  summary: Object-hash mapping library for Redis.
147
148
  test_files: []
149
+ has_rdoc: