ohm 1.2.0 → 1.3.0

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.
@@ -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: []