riak-record 0.3.1 → 0.4.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.
- checksums.yaml +4 -4
- data/README.md +4 -2
- data/TODO.md +0 -1
- data/VERSION +1 -1
- data/lib/riak_record/associations.rb +28 -0
- data/lib/riak_record/base.rb +15 -0
- data/riak-record.gemspec +3 -3
- data/spec/riak_record/associations_spec.rb +37 -1
- data/spec/riak_record/base_spec.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c748667d6b7ac6f92c336fd09223cd25afc2ed44
|
4
|
+
data.tar.gz: 64f29aeab06a312e6950226069503015872cf7ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3871dd3dce55ce6cdc00e7ed8d84cdb35794793be38bdb7b6668c51a6b71d1098ce174c604d85bf45dc30162e69e0b54b6f74b5426cdd45497ff2837740c036
|
7
|
+
data.tar.gz: 08ea68ccb42f6ae571104b9d052b35053914f7674d6c68aec8a7d56d2cdc5679592db0e76703eb6ba84e8be6dd1d25e70b985938e047857138dc88594e18344c
|
data/README.md
CHANGED
@@ -35,6 +35,7 @@ post.data #> same as record.riak_object.data
|
|
35
35
|
|
36
36
|
post.title = 'My First Post' #> record.riak_object.data['title']=
|
37
37
|
post.title #> record.riak_object.data['title']
|
38
|
+
post.update_attributes(:title => 'My First Post (revised)')
|
38
39
|
|
39
40
|
post.author_id = 99 #> record.riak_object.indexes["author_id_int"] = [99]
|
40
41
|
post.category = 'ruby' #> record.riak_object.indexes["category_bin"] = ["ruby"]
|
@@ -47,9 +48,10 @@ post.reload #> reload the underlying riak_object from the db discarding changes
|
|
47
48
|
Callbacks are called in this order:
|
48
49
|
* before_save
|
49
50
|
* before_create or before_update
|
51
|
+
* ...update_links...
|
50
52
|
* ...save...
|
51
|
-
* after_save
|
52
53
|
* after_create or after_update
|
54
|
+
* after_save
|
53
55
|
|
54
56
|
|
55
57
|
### RiakRecord::Finder
|
@@ -80,7 +82,7 @@ end
|
|
80
82
|
class Comment < RiakRecord::Base
|
81
83
|
bucket_name :comments
|
82
84
|
data_attribute :comment
|
83
|
-
belongs_to :post, :class_name => 'Post', :foreign_key => "post_id"
|
85
|
+
belongs_to :post, :class_name => 'Post', :foreign_key => "post_id" # optional :link => true to create walkable link on save
|
84
86
|
|
85
87
|
index_int_attributes :post_id
|
86
88
|
end
|
data/TODO.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -1,10 +1,38 @@
|
|
1
1
|
module RiakRecord
|
2
2
|
module Associations
|
3
3
|
|
4
|
+
def update_links
|
5
|
+
link_definitions.each_pair do |tag, definition|
|
6
|
+
tag = tag.to_s
|
7
|
+
bucket_name = Object.const_get(definition[:class_name].to_s).bucket_name.to_s
|
8
|
+
key = self.send(definition[:foreign_key].to_sym).first
|
9
|
+
|
10
|
+
# remove links with tag name
|
11
|
+
self.links.delete_if{|l| l.tag.to_s == tag }
|
12
|
+
|
13
|
+
# add link if key is set
|
14
|
+
self.links << Riak::Link.new(bucket_name.to_s, key.to_s, tag.to_s) unless key.nil?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def link_definitions
|
19
|
+
self.class.link_definitions
|
20
|
+
end
|
21
|
+
|
4
22
|
module ClassMethods
|
23
|
+
def link_definitions
|
24
|
+
@link_definitions ||= {}
|
25
|
+
end
|
26
|
+
|
5
27
|
def belongs_to_riak(association_name, options = {})
|
6
28
|
class_name = options[:class_name] ||= association_name.to_s.split("_").collect(&:capitalize).join
|
7
29
|
foreign_key = options[:foreign_key] || "#{association_name}_id"
|
30
|
+
|
31
|
+
if options[:link]
|
32
|
+
raise ArgumentError, "link option only available for instances of RiakRecord" unless self < RiakRecord::Base
|
33
|
+
link_definitions[association_name.to_sym] = {:class_name => class_name, :foreign_key => foreign_key}
|
34
|
+
end
|
35
|
+
|
8
36
|
method_def = <<-END_OF_RUBY
|
9
37
|
|
10
38
|
def #{association_name}
|
data/lib/riak_record/base.rb
CHANGED
@@ -35,12 +35,19 @@ module RiakRecord
|
|
35
35
|
riak_object.indexes
|
36
36
|
end
|
37
37
|
|
38
|
+
def links
|
39
|
+
riak_object.links
|
40
|
+
end
|
41
|
+
|
38
42
|
def save
|
39
43
|
creating = new_record?
|
40
44
|
|
41
45
|
before_save!
|
42
46
|
creating ? before_create! : before_update!
|
47
|
+
|
48
|
+
update_links
|
43
49
|
riak_object.store(:returnbody => false)
|
50
|
+
|
44
51
|
creating ? after_create! : after_update!
|
45
52
|
after_save!
|
46
53
|
|
@@ -84,6 +91,14 @@ module RiakRecord
|
|
84
91
|
self
|
85
92
|
end
|
86
93
|
|
94
|
+
def update_attributes(attributes)
|
95
|
+
attributes.each_pair do |k,v|
|
96
|
+
setter = "#{k}=".to_sym
|
97
|
+
self.send(setter, v) if respond_to?(setter)
|
98
|
+
end
|
99
|
+
save
|
100
|
+
end
|
101
|
+
|
87
102
|
def self.bucket_name(name = :not_a_name)
|
88
103
|
@bucket_name = name.to_s unless name == :not_a_name
|
89
104
|
namespace.present? ? namespace_prefixed+@bucket_name : @bucket_name
|
data/riak-record.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: riak-record 0.
|
5
|
+
# stub: riak-record 0.4.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "riak-record"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.4.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Robert Graff"]
|
14
|
-
s.date = "2014-09-
|
14
|
+
s.date = "2014-09-29"
|
15
15
|
s.description = "RiakRecord is a thin and immature wrapper around riak-ruby-client. It creates a bucket for\n each class, provides a simple finder, and creates attribute reader."
|
16
16
|
s.email = "robert_graff@yahoo.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -29,7 +29,9 @@ class Comment < RiakRecord::Base
|
|
29
29
|
bucket_name "comments"
|
30
30
|
data_attributes :comment
|
31
31
|
|
32
|
-
|
32
|
+
belongs_to :linked_author, :class_name => 'Author', :foreign_key => :author_id, :link => true
|
33
|
+
|
34
|
+
index_int_attributes :post_id, :author_id
|
33
35
|
end
|
34
36
|
|
35
37
|
describe RiakRecord::Associations do
|
@@ -64,6 +66,40 @@ describe RiakRecord::Associations do
|
|
64
66
|
|
65
67
|
end
|
66
68
|
|
69
|
+
describe "linked belongs_to" do
|
70
|
+
let(:comment){ Comment.new("1") }
|
71
|
+
let(:author){ Author.new("2") }
|
72
|
+
|
73
|
+
it "should add links" do
|
74
|
+
expect{
|
75
|
+
comment.update_attributes(:author_id => 'a2')
|
76
|
+
}.to change{ comment.links.count }.from(0).to(1)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should link to the related object" do
|
80
|
+
comment.update_attributes(:author_id => 2)
|
81
|
+
|
82
|
+
link = comment.links.first
|
83
|
+
expect(link.tag).to eq("linked_author")
|
84
|
+
expect(link.key).to eq("2")
|
85
|
+
expect(link.bucket).to eq(Author.bucket_name)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should update when changed" do
|
89
|
+
comment.update_attributes(:author_id => 2)
|
90
|
+
expect{
|
91
|
+
comment.update_attributes(:author_id => 3)
|
92
|
+
}.to change{comment.links.first.key}.from("2").to("3")
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should delete with nil'd" do
|
96
|
+
comment.update_attributes(:author_id => 2)
|
97
|
+
expect{
|
98
|
+
comment.update_attributes(:author_id => nil)
|
99
|
+
}.to change{comment.links.count}.from(1).to(0)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
67
103
|
describe "has_many_riak" do
|
68
104
|
before :each do
|
69
105
|
@comment = Comment.new("1")
|
@@ -67,6 +67,19 @@ describe RiakRecord::Base do
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
describe "update_attributes" do
|
71
|
+
let(:record){ ExampleA.new("1234") }
|
72
|
+
it "should set the values" do
|
73
|
+
expect{
|
74
|
+
record.update_attributes(:attribute1 => 'here')
|
75
|
+
}.to change{ record.attribute1 }.to('here')
|
76
|
+
end
|
77
|
+
it "should call save" do
|
78
|
+
expect(record).to receive(:save)
|
79
|
+
record.update_attributes({})
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
70
83
|
describe "new_record?" do
|
71
84
|
let(:record){ ExampleA.new("1") }
|
72
85
|
it "should be true for a new record" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riak-record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Graff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: riak-client
|