related 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 70a2db50fca75efa1347b6ba41ea376cd98837dc
4
+ data.tar.gz: a714af9f8116c1792c81748d7d3b250e548d36df
5
+ SHA512:
6
+ metadata.gz: b28c5d6cba03e88a78017c1aa0de067e6fd033acd441db56bf4b222e1a4e484d9af773ee5309fe9ac199bf06927aa26fbe77532382eb8f8813c24345e4da218b
7
+ data.tar.gz: 29a74e4b10cec1e3ca460eb7de6a5ee943b9410c8003986a13cbf44258e24a4cd57c720946978cf8a1ff66dc8f7311d666bc0929940a709a13da28e989e65182
@@ -17,8 +17,13 @@ module Related
17
17
  attr_reader :id
18
18
  attr_reader :attributes
19
19
 
20
+ validates_with CheckRedisUniqueness, on: :create
21
+
20
22
  def initialize(attributes = {})
21
23
  @attributes = {}
24
+
25
+ @_internal_id = attributes.delete(:id) || Related.generate_id
26
+
22
27
  attributes.each do |key,value|
23
28
  serializer = self.class.property_serializer(key)
24
29
  @attributes[key.to_s] = serializer ?
@@ -156,9 +161,8 @@ module Related
156
161
 
157
162
  def create
158
163
  run_callbacks :create do
159
- raise Related::ValidationsFailed, self unless valid?
160
- @id = Related.generate_id
161
- @attributes ||= {}
164
+ raise Related::ValidationsFailed, self unless valid?(:create)
165
+ @id = @_internal_id
162
166
  @attributes.merge!('created_at' => Time.now.utc.iso8601)
163
167
  Related.redis.hmset(@id, *@attributes.to_a.flatten)
164
168
  end
@@ -167,8 +171,7 @@ module Related
167
171
 
168
172
  def update
169
173
  run_callbacks :update do
170
- raise Related::ValidationsFailed, self unless valid?
171
- @attributes ||= {}
174
+ raise Related::ValidationsFailed, self unless valid?(:update)
172
175
  @attributes.merge!('updated_at' => Time.now.utc.iso8601)
173
176
  Related.redis.hmset(@id, *@attributes.to_a.flatten)
174
177
  end
@@ -4,9 +4,7 @@ module Related
4
4
  validates_presence_of :label, :start_node_id, :end_node_id
5
5
 
6
6
  def initialize(*attributes)
7
- if attributes.first.is_a?(String)
8
- @id = attributes.first
9
- end
7
+ @_internal_id = attributes.first.is_a?(String) ? attributes.first : Related.generate_id
10
8
  @attributes = attributes.last
11
9
  end
12
10
 
@@ -0,0 +1,11 @@
1
+ module Related
2
+ class CheckRedisUniqueness < ActiveModel::Validator
3
+ def validate(entity)
4
+ internal_id = entity.instance_variable_get(:@_internal_id)
5
+
6
+ if Related.redis.exists(internal_id)
7
+ entity.errors[:id] << "#{internal_id.inspect} already exists."
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Related
2
- Version = VERSION = '0.6.4'
2
+ Version = VERSION = '0.6.5'
3
3
  end
data/lib/related.rb CHANGED
@@ -5,6 +5,7 @@ require 'active_model'
5
5
  require 'related/version'
6
6
  require 'related/helpers'
7
7
  require 'related/exceptions'
8
+ require 'related/validations/check_redis_uniqueness'
8
9
  require 'related/entity'
9
10
  require 'related/node'
10
11
  require 'related/relationship'
@@ -0,0 +1,35 @@
1
+ require File.expand_path('test/test_helper')
2
+
3
+ class CustomIdAttribute < ActiveModel::TestCase
4
+
5
+ class FakeThing < Related::Node
6
+ property :id, Integer
7
+ property :name, String
8
+ end
9
+
10
+ def setup
11
+ Related.redis.flushall
12
+ end
13
+
14
+ def test_manually_set_id
15
+ FakeThing.create(id: 42, name: "Bond, James Bond")
16
+
17
+ found = FakeThing.find(42)
18
+
19
+ assert_equal 42, found.id
20
+ assert_equal "Bond, James Bond", found.name
21
+ end
22
+
23
+ def test_unique_ids
24
+ FakeThing.create(id: 42, name: "Bond, James Bond")
25
+
26
+ assert_raise Related::ValidationsFailed do
27
+ FakeThing.create(id: 42, name: "Black Bears")
28
+ end
29
+
30
+ found = FakeThing.find(42)
31
+
32
+ assert_equal 42, found.id
33
+ assert_equal "Bond, James Bond", found.name
34
+ end
35
+ end
data/test/test_helper.rb CHANGED
@@ -2,9 +2,9 @@
2
2
  dir = File.dirname(File.expand_path(__FILE__))
3
3
  $LOAD_PATH.unshift dir + '/../lib'
4
4
 
5
- gem 'minitest'
6
5
  require 'rubygems'
7
- require 'minitest/unit'
6
+ require 'bundler/setup'
7
+ require 'test/unit'
8
8
  require 'related'
9
9
  require 'redis/distributed'
10
10
 
metadata CHANGED
@@ -1,49 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: related
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
5
- prerelease:
4
+ version: 0.6.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Niklas Holmgren
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-04 00:00:00.000000000 Z
11
+ date: 2013-11-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: redis
16
- requirement: &70134047954640 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>'
17
+ - - '>'
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2.0.0
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70134047954640
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>'
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.0
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: redis-namespace
27
- requirement: &70134047954040 !ruby/object:Gem::Requirement
28
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ! '>'
31
+ - - '>'
31
32
  - !ruby/object:Gem::Version
32
33
  version: 0.8.0
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70134047954040
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>'
39
+ - !ruby/object:Gem::Version
40
+ version: 0.8.0
36
41
  - !ruby/object:Gem::Dependency
37
42
  name: activemodel
38
- requirement: &70134047953660 !ruby/object:Gem::Requirement
39
- none: false
43
+ requirement: !ruby/object:Gem::Requirement
40
44
  requirements:
41
- - - ! '>='
45
+ - - '>='
42
46
  - !ruby/object:Gem::Version
43
47
  version: '0'
44
48
  type: :runtime
45
49
  prerelease: false
46
- version_requirements: *70134047953660
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
47
55
  description: Related is a Redis-backed high performance distributed graph database.
48
56
  email: niklas@sutajio.se
49
57
  executables: []
@@ -64,15 +72,13 @@ files:
64
72
  - lib/related/node.rb
65
73
  - lib/related/relationship.rb
66
74
  - lib/related/root.rb
75
+ - lib/related/validations/check_redis_uniqueness.rb
67
76
  - lib/related/version.rb
68
77
  - lib/related.rb
69
78
  - test/active_model_test.rb
79
+ - test/custom_id_attribute_test.rb
70
80
  - test/custom_node_test.rb
71
81
  - test/data_flow_test.rb
72
- - test/dump-1.rdb
73
- - test/dump-2.rdb
74
- - test/dump-3.rdb
75
- - test/dump-4.rdb
76
82
  - test/follower_test.rb
77
83
  - test/model_test.rb
78
84
  - test/performance_test.rb
@@ -84,27 +90,26 @@ files:
84
90
  - test/test_helper.rb
85
91
  homepage: http://github.com/sutajio/related/
86
92
  licenses: []
93
+ metadata: {}
87
94
  post_install_message:
88
95
  rdoc_options:
89
96
  - --charset=UTF-8
90
97
  require_paths:
91
98
  - lib
92
99
  required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
100
  requirements:
95
- - - ! '>='
101
+ - - '>='
96
102
  - !ruby/object:Gem::Version
97
103
  version: '0'
98
104
  required_rubygems_version: !ruby/object:Gem::Requirement
99
- none: false
100
105
  requirements:
101
- - - ! '>='
106
+ - - '>='
102
107
  - !ruby/object:Gem::Version
103
108
  version: '0'
104
109
  requirements: []
105
110
  rubyforge_project:
106
- rubygems_version: 1.8.17
111
+ rubygems_version: 2.0.6
107
112
  signing_key:
108
- specification_version: 3
113
+ specification_version: 4
109
114
  summary: Related is a Redis-backed high performance distributed graph database.
110
115
  test_files: []
data/test/dump-1.rdb DELETED
@@ -1 +0,0 @@
1
- REDIS0006�ܳC�Z��V
data/test/dump-2.rdb DELETED
@@ -1 +0,0 @@
1
- REDIS0006�ܳC�Z��V
data/test/dump-3.rdb DELETED
@@ -1 +0,0 @@
1
- REDIS0006�ܳC�Z��V
data/test/dump-4.rdb DELETED
@@ -1 +0,0 @@
1
- REDIS0006�ܳC�Z��V