ohm 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fb164eaa5fbec17afbcceb9a4c7f8ded8ace93b5
4
+ data.tar.gz: 4ab08c00e7edf980f16e3d854012b3a5e9503b1a
5
+ SHA512:
6
+ metadata.gz: 5f3c9c4a0457fd31a0b14eb783840c23e8996e69205fffaacea18ae22efb1c5aa643188d2ddcaf1c2fe584efe2fa5231b58d5997627e7f9f7249b6e52c5b446e
7
+ data.tar.gz: 6d0e08cd9092c0fce4c41a326163c1cf13a37f2a781020be389bd83d46fa650b8af05785873fb57343cdeb3b7721d341c4c063b1dca38163f835f7e7b8975ee7
data/README.md CHANGED
@@ -633,7 +633,7 @@ Ohm is rather small and can be extended in many ways.
633
633
  A lot of amazing contributions are available at [Ohm Contrib][contrib]
634
634
  make sure to check them if you need to extend Ohm's functionality.
635
635
 
636
- [contrib]: http://cyx.github.com/ohm-contrib/doc/
636
+ [contrib]: http://cyx.github.com/ohm-contrib/
637
637
 
638
638
  Upgrading
639
639
  =========
data/lib/ohm.rb CHANGED
@@ -780,6 +780,8 @@ module Ohm
780
780
  # # => true
781
781
  #
782
782
  def self.with(att, val)
783
+ raise IndexNotFound unless uniques.include?(att)
784
+
783
785
  id = db.hget(key[:uniques][att], val)
784
786
  id && self[id]
785
787
  end
@@ -1019,6 +1021,8 @@ module Ohm
1019
1021
  # end
1020
1022
  #
1021
1023
  def self.attribute(name, cast = nil)
1024
+ attributes << name unless attributes.include?(name)
1025
+
1022
1026
  if cast
1023
1027
  define_method(name) do
1024
1028
  cast[@attributes[name]]
@@ -1396,7 +1400,7 @@ module Ohm
1396
1400
  @uniques ||= []
1397
1401
  end
1398
1402
 
1399
- def self.counters
1403
+ def self.counters
1400
1404
  @counters ||= []
1401
1405
  end
1402
1406
 
@@ -1404,6 +1408,10 @@ module Ohm
1404
1408
  @collections ||= []
1405
1409
  end
1406
1410
 
1411
+ def self.attributes
1412
+ @attributes ||= []
1413
+ end
1414
+
1407
1415
  def self.filters(dict)
1408
1416
  unless dict.kind_of?(Hash)
1409
1417
  raise ArgumentError,
@@ -1411,10 +1419,10 @@ module Ohm
1411
1419
  "If you want to find by ID, use #{self}[id] instead."
1412
1420
  end
1413
1421
 
1414
- dict.map { |k, v| toindices(k, v) }.flatten
1422
+ dict.map { |k, v| to_indices(k, v) }.flatten
1415
1423
  end
1416
1424
 
1417
- def self.toindices(att, val)
1425
+ def self.to_indices(att, val)
1418
1426
  raise IndexNotFound unless indices.include?(att)
1419
1427
 
1420
1428
  if val.kind_of?(Enumerable)
@@ -1498,28 +1506,23 @@ module Ohm
1498
1506
  end
1499
1507
  end
1500
1508
 
1501
- def _delete_uniques(_uniques)
1502
- _uniques.each do |unique, val|
1509
+ def _delete_uniques(uniques)
1510
+ uniques.each do |unique, val|
1503
1511
  db.hdel(unique, val)
1504
1512
  db.hdel(key[:_uniques], unique)
1505
1513
  end
1506
1514
  end
1507
1515
 
1508
- def _delete_indices(_indices)
1509
- _indices.each do |index|
1516
+ def _delete_indices(indices)
1517
+ indices.each do |index|
1510
1518
  db.srem(index, id)
1511
1519
  db.srem(key[:_indices], index)
1512
1520
  end
1513
- # model.indices.each do |att|
1514
- # val = atts[att.to_s]
1515
-
1516
- # db.srem(model.key[:indices][att][val], id)
1517
- # end
1518
1521
  end
1519
1522
 
1520
1523
  def _save_indices(indices)
1521
1524
  indices.each do |att, val|
1522
- model.toindices(att, val).each do |index|
1525
+ model.to_indices(att, val).each do |index|
1523
1526
  db.sadd(index, id)
1524
1527
  db.sadd(key[:_indices], index)
1525
1528
  end
@@ -27,3 +27,7 @@ test "on a reloaded model" do
27
27
  tag = Tag[tag.id]
28
28
  assert "Ruby" == hash[tag]
29
29
  end
30
+
31
+ test "on attributes class method" do
32
+ assert [:name] == Tag.attributes
33
+ end
@@ -36,6 +36,12 @@ test "be able to find by the given attribute" do
36
36
  assert @user1 == User.find(:email => "foo").first
37
37
  end
38
38
 
39
+ test "raise if the index doesn't exist" do
40
+ assert_raise Ohm::IndexNotFound do
41
+ User.find(:address => "foo")
42
+ end
43
+ end
44
+
39
45
  test "raise an error if the parameter supplied is not a hash" do
40
46
  begin
41
47
  User.find(1)
@@ -0,0 +1,21 @@
1
+ # encoding: UTF-8
2
+
3
+ __END__
4
+ require File.expand_path("./helper", File.dirname(__FILE__))
5
+
6
+ class Comment < Ohm::Model
7
+ def self.ranks
8
+ @indices ||= []
9
+ end
10
+
11
+ def self.rank(attribute)
12
+ ranks << attribute unless ranks.include?(attribute)
13
+ end
14
+
15
+ def ranked?(attribute)
16
+ end
17
+ end
18
+
19
+ setup do
20
+ User.create(:email => "a@a.com")
21
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: UTF-8
2
+
3
+ require File.expand_path("./helper", File.dirname(__FILE__))
4
+
5
+ class Event < Ohm::Model
6
+ attribute :name
7
+ attribute :location
8
+
9
+ def setup
10
+ txn = Transaction.new do |t|
11
+ related = nil
12
+
13
+ t.watch(key[:related]) unless new?
14
+
15
+ t.read do
16
+ related = db.smembers(key[:related])
17
+ end
18
+
19
+ t.write do
20
+ related.each do |k|
21
+ db.del(k)
22
+ end
23
+
24
+ db.del(key[:related])
25
+ end
26
+ end
27
+
28
+ __delete__.append(txn)
29
+ end
30
+ end
31
+
32
+ test "assign attributes from the hash" do
33
+ event = Event.new(:name => "Ruby Tuesday")
34
+ assert_equal event.name, "Ruby Tuesday"
35
+ end
36
+
37
+ test "assign an ID and save the object" do
38
+ event1 = Event.create(:name => "Ruby Tuesday")
39
+ event2 = Event.create(:name => "Ruby Meetup")
40
+
41
+ assert_equal "1", event1.id
42
+ assert_equal "2", event2.id
43
+ end
44
+
45
+ test "save the attributes in UTF8" do
46
+ event = Event.create(:name => "32° Kisei-sen")
47
+ assert "32° Kisei-sen" == Event[event.id].name
48
+ end
@@ -39,6 +39,14 @@ test "raises when it already exists during save" do
39
39
  end
40
40
  end
41
41
 
42
+ test "raises if the index doesn't exist" do
43
+ User.create(:email => "b@b.com")
44
+
45
+ assert_raise Ohm::IndexNotFound do
46
+ User.with(:address, "b@b.com")
47
+ end
48
+ end
49
+
42
50
  test "doesn't raise when saving again and again" do |u|
43
51
  ex = nil
44
52
 
@@ -85,3 +93,33 @@ test "unique virtual attribute" do
85
93
  User.create(:email => "baz@yahoo.com")
86
94
  end
87
95
  end
96
+
97
+ test "assert_unique" do |u|
98
+ class User
99
+ def assert_unique(att)
100
+ result = self.class.with(att, send(att))
101
+ assert((result.nil? || result.eql?(self)), [att, :not_unique])
102
+ end
103
+
104
+ def validate
105
+ assert_unique :email
106
+ end
107
+ end
108
+
109
+ # There's one user with email "a@a.com".
110
+ user = User.new(:email => "a@a.com")
111
+
112
+ # A new user with a conflicting attribute.
113
+ assert_equal true, user.new?
114
+ assert_equal false, user.valid?
115
+ assert_equal [:not_unique], user.errors[:email]
116
+
117
+ user.email = "b@b.com"
118
+ user.save
119
+ user.email = "a@a.com"
120
+
121
+ # An existing user with a conflicting attribute.
122
+ assert_equal false, user.new?
123
+ assert_equal false, user.valid?
124
+ assert_equal [:not_unique], user.errors[:email]
125
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ohm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
5
- prerelease:
4
+ version: 1.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michel Martens
@@ -11,28 +10,25 @@ authors:
11
10
  autorequire:
12
11
  bindir: bin
13
12
  cert_chain: []
14
- date: 2012-08-29 00:00:00.000000000 Z
13
+ date: 2013-03-29 00:00:00.000000000 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
16
  name: redis
18
17
  requirement: !ruby/object:Gem::Requirement
19
- none: false
20
18
  requirements:
21
- - - ! '>='
19
+ - - '>='
22
20
  - !ruby/object:Gem::Version
23
21
  version: '0'
24
22
  type: :runtime
25
23
  prerelease: false
26
24
  version_requirements: !ruby/object:Gem::Requirement
27
- none: false
28
25
  requirements:
29
- - - ! '>='
26
+ - - '>='
30
27
  - !ruby/object:Gem::Version
31
28
  version: '0'
32
29
  - !ruby/object:Gem::Dependency
33
30
  name: nest
34
31
  requirement: !ruby/object:Gem::Requirement
35
- none: false
36
32
  requirements:
37
33
  - - ~>
38
34
  - !ruby/object:Gem::Version
@@ -40,7 +36,6 @@ dependencies:
40
36
  type: :runtime
41
37
  prerelease: false
42
38
  version_requirements: !ruby/object:Gem::Requirement
43
- none: false
44
39
  requirements:
45
40
  - - ~>
46
41
  - !ruby/object:Gem::Version
@@ -48,7 +43,6 @@ dependencies:
48
43
  - !ruby/object:Gem::Dependency
49
44
  name: scrivener
50
45
  requirement: !ruby/object:Gem::Requirement
51
- none: false
52
46
  requirements:
53
47
  - - ~>
54
48
  - !ruby/object:Gem::Version
@@ -56,7 +50,6 @@ dependencies:
56
50
  type: :runtime
57
51
  prerelease: false
58
52
  version_requirements: !ruby/object:Gem::Requirement
59
- none: false
60
53
  requirements:
61
54
  - - ~>
62
55
  - !ruby/object:Gem::Version
@@ -64,7 +57,6 @@ dependencies:
64
57
  - !ruby/object:Gem::Dependency
65
58
  name: cutest
66
59
  requirement: !ruby/object:Gem::Requirement
67
- none: false
68
60
  requirements:
69
61
  - - ~>
70
62
  - !ruby/object:Gem::Version
@@ -72,7 +64,6 @@ dependencies:
72
64
  type: :development
73
65
  prerelease: false
74
66
  version_requirements: !ruby/object:Gem::Requirement
75
- none: false
76
67
  requirements:
77
68
  - - ~>
78
69
  - !ruby/object:Gem::Version
@@ -112,32 +103,33 @@ files:
112
103
  - test/list.rb
113
104
  - test/model.rb
114
105
  - test/pipeline-performance.rb
106
+ - test/ranks.rb
107
+ - test/setup.rb
115
108
  - test/transactions.rb
116
109
  - test/uniques.rb
117
110
  - test/validations.rb
118
111
  - test/test.conf
119
112
  homepage: http://soveran.github.com/ohm/
120
113
  licenses: []
114
+ metadata: {}
121
115
  post_install_message:
122
116
  rdoc_options: []
123
117
  require_paths:
124
118
  - lib
125
119
  required_ruby_version: !ruby/object:Gem::Requirement
126
- none: false
127
120
  requirements:
128
- - - ! '>='
121
+ - - '>='
129
122
  - !ruby/object:Gem::Version
130
123
  version: '0'
131
124
  required_rubygems_version: !ruby/object:Gem::Requirement
132
- none: false
133
125
  requirements:
134
- - - ! '>='
126
+ - - '>='
135
127
  - !ruby/object:Gem::Version
136
128
  version: '0'
137
129
  requirements: []
138
130
  rubyforge_project: ohm
139
- rubygems_version: 1.8.23
131
+ rubygems_version: 2.0.3
140
132
  signing_key:
141
- specification_version: 3
133
+ specification_version: 4
142
134
  summary: Object-hash mapping library for Redis.
143
135
  test_files: []