riakrest 0.0.4 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +25 -26
- data/README.rdoc +16 -26
- data/VERSION +1 -1
- data/examples/auto_update_data.rb +16 -21
- data/examples/auto_update_links.rb +17 -21
- data/examples/basic_client.rb +15 -11
- data/examples/basic_resource.rb +14 -18
- data/examples/bucket_schemas.rb +12 -10
- data/examples/linked_resources.rb +23 -26
- data/examples/links_only_pov.rb +25 -25
- data/examples/multiple_pov.rb +16 -14
- data/examples/rest_interaction.rb +5 -5
- data/examples/ruby_json_data.rb +1 -19
- data/lib/riakrest/core/jiak_bucket.rb +18 -50
- data/lib/riakrest/core/jiak_client.rb +147 -79
- data/lib/riakrest/core/jiak_data.rb +179 -164
- data/lib/riakrest/core/jiak_data_fields.rb +69 -0
- data/lib/riakrest/core/jiak_link.rb +6 -8
- data/lib/riakrest/core/jiak_object.rb +15 -13
- data/lib/riakrest/core/jiak_schema.rb +192 -57
- data/lib/riakrest/resource/jiak_resource.rb +118 -170
- data/lib/riakrest.rb +24 -103
- data/spec/core/jiak_bucket_spec.rb +15 -45
- data/spec/core/jiak_client_spec.rb +70 -41
- data/spec/core/jiak_link_spec.rb +2 -2
- data/spec/core/jiak_object_spec.rb +12 -12
- data/spec/core/jiak_schema_spec.rb +122 -18
- data/spec/resource/jiak_resource_spec.rb +115 -148
- metadata +3 -5
- data/lib/riakrest/data/jiak_data_hash.rb +0 -182
- data/spec/data/jiak_data_hash_spec.rb +0 -14
data/History.txt
CHANGED
@@ -1,34 +1,33 @@
|
|
1
|
+
=== 0.1.0 2009-11-16
|
2
|
+
- Renamed data/JiakDataHash to core/JiakDataFields and reworked.
|
3
|
+
- Move JiakDataHash functionality into JiakData as default implementation
|
4
|
+
- Like Resource, JiakData has jattr_* to manage data inside out.
|
5
|
+
- Resource encapsulates its data.
|
6
|
+
- jattr_* methods add data fields and implicitly maintain schema.
|
7
|
+
- Removed class methods for schema manipulation.
|
8
|
+
- Incrementally add fields data.
|
9
|
+
- Incrementally add fields to schemas.
|
10
|
+
|
1
11
|
=== 0.0.4 2009-11-10
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
* Refactored local? method to jiak_object.
|
12
|
+
- Fixed bug when running ruby 1.8
|
13
|
+
- Changed client_store option for returning object to :return => :object
|
14
|
+
- Added check to eql? and == that both objects are either local or not.
|
15
|
+
- Refactored local? method to jiak_object.
|
7
16
|
|
8
17
|
=== 0.0.3 2009-11-03
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
* Allow setting proxy on core client
|
15
|
-
|
16
|
-
Clean-up:
|
17
|
-
* More examples futzing.
|
18
|
+
- Switched to jeweler for managing gem
|
19
|
+
- Allow passing an array for specifying schema fields/masks
|
20
|
+
- Added convenience accessors to rsrc.jiak
|
21
|
+
- Allow setting proxy on core client
|
22
|
+
- More examples futzing.
|
18
23
|
|
19
24
|
=== 0.0.2 2009-10-30
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
* Clean-up:
|
27
|
-
* DRY'd some code
|
28
|
-
* Examples
|
25
|
+
- Fixed corner case for auto_post false / auto_update true.
|
26
|
+
- Explicitly reserve jiak field in user data classes.
|
27
|
+
- Changed walk to query. Kept walk as an alias.
|
28
|
+
- DRY'd some code
|
29
|
+
- Examples
|
29
30
|
|
30
31
|
|
31
32
|
=== 0.0.1 2009-10-20
|
32
|
-
|
33
|
-
* Initial release:
|
34
|
-
* To github, anyway. git log shows the prior activity.
|
33
|
+
- Initial release to github, anyway. git log shows the prior activity.
|
data/README.rdoc
CHANGED
@@ -10,10 +10,11 @@ store.
|
|
10
10
|
== RIAK:
|
11
11
|
|
12
12
|
Riak[http://riak.basho.com] is an open-source project developed and maintained
|
13
|
-
by the fine folks at Basho[http://www.basho.com].
|
14
|
-
key-value store, a flexible map/reduce engine, and a friendly
|
15
|
-
interface to provide a database ideally suited for Web
|
16
|
-
interacts with the HTTP/JSON query interface, which is
|
13
|
+
by the fine folks at Basho[http://www.basho.com] Technologies. Riak combines a
|
14
|
+
decentralized key-value store, a flexible map/reduce engine, and a friendly
|
15
|
+
HTTP/JSON query interface to provide a database ideally suited for Web
|
16
|
+
applications. RiakRest interacts with the HTTP/JSON query interface, which is
|
17
|
+
called Jiak.
|
17
18
|
|
18
19
|
== SYNOPSIS:
|
19
20
|
|
@@ -25,7 +26,7 @@ of the Core Client that gives a true RESTful feel.
|
|
25
26
|
|
26
27
|
== REQUIREMENTS:
|
27
28
|
|
28
|
-
RestClient is used for REST server interaction
|
29
|
+
RestClient is used for REST server interaction.
|
29
30
|
|
30
31
|
JSON is used for data exchange.
|
31
32
|
|
@@ -40,32 +41,21 @@ sudo gem install riakrest
|
|
40
41
|
require 'riakrest'
|
41
42
|
include RiakRest
|
42
43
|
|
43
|
-
|
44
|
-
PersonData.keygen :name
|
45
|
-
|
46
|
-
class Person
|
44
|
+
class People
|
47
45
|
include JiakResource
|
48
|
-
server
|
49
|
-
|
50
|
-
|
51
|
-
auto_post true
|
52
|
-
auto_update true
|
46
|
+
server 'http://localhost:8002/jiak'
|
47
|
+
jattr_accessor :name, :age
|
48
|
+
auto_manage
|
53
49
|
end
|
54
50
|
|
55
|
-
remy =
|
56
|
-
|
57
|
-
|
58
|
-
puts Person.get('remy').name # => "remy" (from Jiak server)
|
59
|
-
puts Person.get('remy').age # => 10 (from Jiak server)
|
60
|
-
|
61
|
-
remy.age = 11 # (auto-update)
|
62
|
-
puts Person.get('remy').age # => 11 (from Jiak server)
|
51
|
+
remy = People.new(:name => 'Remy',:age => 10) # (auto-post)
|
52
|
+
remy.age = 11 # (auto-update)
|
63
53
|
|
64
|
-
callie =
|
65
|
-
remy.link(callie,'sister')
|
54
|
+
callie = People.new(:name => 'Callie', :age => 13)
|
55
|
+
remy.link(callie,'sister')
|
66
56
|
|
67
|
-
sisters = remy.query(
|
68
|
-
puts sisters[0].eql?(callie)
|
57
|
+
sisters = remy.query(People,'sister')
|
58
|
+
puts sisters[0].eql?(callie) # => true
|
69
59
|
|
70
60
|
remy.delete
|
71
61
|
callie.delete
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
@@ -1,43 +1,38 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
|
5
|
-
PersonData.keygen :name
|
6
|
-
|
7
|
-
class Person
|
4
|
+
class People
|
8
5
|
include JiakResource
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
auto_post true
|
14
|
-
auto_update true
|
6
|
+
server 'http://localhost:8002/jiak'
|
7
|
+
jattr_accessor :name, :age
|
8
|
+
keygen { name }
|
9
|
+
auto_manage
|
15
10
|
end
|
16
11
|
|
17
|
-
remy =
|
18
|
-
puts
|
12
|
+
remy = People.new(:name => 'remy', :age => 10)
|
13
|
+
puts People.get('remy').name # => "remy"
|
19
14
|
|
20
15
|
remy.name = "Remy"
|
21
|
-
puts
|
16
|
+
puts People.get('remy').name # => "Remy"
|
22
17
|
remy.age = 12
|
23
|
-
puts
|
18
|
+
puts People.get('remy').age # => 12
|
24
19
|
|
25
|
-
|
20
|
+
People.auto_update false
|
26
21
|
remy.auto_update = true
|
27
|
-
puts
|
22
|
+
puts People.get('remy').age # => 12
|
28
23
|
remy.age = 10
|
29
|
-
puts
|
24
|
+
puts People.get('remy').age # => 10
|
30
25
|
|
31
|
-
|
26
|
+
People.auto_update true
|
32
27
|
remy.auto_update = false
|
33
28
|
remy.age = 12
|
34
|
-
puts
|
29
|
+
puts People.get('remy').age # => 10
|
35
30
|
remy.update
|
36
|
-
puts
|
31
|
+
puts People.get('remy').age # => 12
|
37
32
|
|
38
33
|
remy.auto_update = nil
|
39
34
|
remy.age = 10
|
40
|
-
puts
|
35
|
+
puts People.get('remy').age # => 10
|
41
36
|
|
42
37
|
remy.delete
|
43
38
|
|
@@ -1,47 +1,43 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
|
5
|
-
PersonData.keygen :name
|
6
|
-
|
7
|
-
class Person
|
4
|
+
class People
|
8
5
|
include JiakResource
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
auto_post true
|
6
|
+
server 'http://localhost:8002/jiak'
|
7
|
+
jattr_accessor :name, :age
|
8
|
+
keygen { name.downcase }
|
9
|
+
auto_post
|
14
10
|
end
|
15
11
|
|
16
|
-
remy =
|
17
|
-
callie =
|
12
|
+
remy = People.new(:name => 'remy', :age => 10)
|
13
|
+
callie = People.new(:name => 'Callie', :age => 12)
|
18
14
|
|
19
15
|
remy.link(callie,'sister')
|
20
|
-
puts remy.query(
|
16
|
+
puts remy.query(People,'sister').size # => 0
|
21
17
|
remy.update
|
22
|
-
puts remy.query(
|
18
|
+
puts remy.query(People,'sister').size # => 1
|
23
19
|
remy.remove_link(callie,'sister')
|
24
20
|
|
25
|
-
|
21
|
+
People.auto_update true
|
26
22
|
remy.link(callie,'sibling')
|
27
|
-
puts remy.query(
|
23
|
+
puts remy.query(People,'sibling').size # => 1
|
28
24
|
remy.remove_link(callie,'sibling')
|
29
25
|
|
30
26
|
callie.auto_update = false
|
31
27
|
callie.link(remy,'sibling')
|
32
|
-
puts callie.query(
|
28
|
+
puts callie.query(People,'sibling').size # => 0
|
33
29
|
callie.update
|
34
|
-
puts callie.query(
|
30
|
+
puts callie.query(People,'sibling').size # => 1
|
35
31
|
callie.remove_link(remy,'sibling')
|
36
32
|
|
37
|
-
|
33
|
+
People.auto_update false
|
38
34
|
remy.auto_update = true
|
39
35
|
callie.auto_update = nil
|
40
36
|
remy.bi_link(callie,'sisters')
|
41
|
-
puts remy.query(
|
42
|
-
puts callie.query(
|
37
|
+
puts remy.query(People,'sisters').size # => 1
|
38
|
+
puts callie.query(People,'sisters').size # => 0
|
43
39
|
callie.update
|
44
|
-
puts callie.query(
|
40
|
+
puts callie.query(People,'sisters').size # => 1
|
45
41
|
|
46
42
|
remy.delete
|
47
43
|
callie.delete
|
data/examples/basic_client.rb
CHANGED
@@ -1,31 +1,35 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
|
4
|
+
class PeopleData
|
5
|
+
include JiakData
|
6
|
+
jattr_accessor :name, :age
|
7
|
+
end
|
5
8
|
|
6
9
|
client = JiakClient.new("http://localhost:8002/jiak")
|
7
|
-
bucket = JiakBucket.new('people',
|
10
|
+
bucket = JiakBucket.new('people',PeopleData)
|
8
11
|
client.set_schema(bucket)
|
9
12
|
|
10
13
|
remy = client.store(JiakObject.new(:bucket => bucket,
|
11
|
-
:data =>
|
12
|
-
|
13
|
-
|
14
|
+
:data => PeopleData.new(:name => "remy",
|
15
|
+
:age => 10)),
|
16
|
+
:return => :object)
|
14
17
|
callie = client.store(JiakObject.new(:bucket => bucket,
|
15
|
-
:data =>
|
16
|
-
|
18
|
+
:data => PeopleData.new(:name => "Callie",
|
19
|
+
:age => 12)),
|
17
20
|
:return => :object)
|
18
21
|
|
19
|
-
puts client.get(bucket,remy.key).data.name
|
22
|
+
puts client.get(bucket,remy.key).data.name # => "remy"
|
20
23
|
|
21
24
|
remy.data.name = "Remy"
|
22
25
|
remy << JiakLink.new(bucket,callie.key,'sister')
|
23
26
|
client.store(remy)
|
24
27
|
|
25
|
-
puts client.get(bucket,remy.key).data.name
|
28
|
+
puts client.get(bucket,remy.key).data.name # => "Remy"
|
26
29
|
|
27
|
-
sisters = client.walk(bucket,remy.key,
|
28
|
-
|
30
|
+
sisters = client.walk(bucket,remy.key,
|
31
|
+
QueryLink.new(bucket,'sister'),PeopleData)
|
32
|
+
puts sisters[0].eql?(callie) # => true
|
29
33
|
|
30
34
|
client.delete(bucket,remy.key)
|
31
35
|
client.delete(bucket,callie.key)
|
data/examples/basic_resource.rb
CHANGED
@@ -1,32 +1,28 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
|
5
|
-
PersonData.keygen :name
|
6
|
-
|
7
|
-
class Person
|
4
|
+
class People
|
8
5
|
include JiakResource
|
9
|
-
server
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
auto_update true
|
6
|
+
server 'http://localhost:8002/jiak'
|
7
|
+
jattr_accessor :name, :age
|
8
|
+
keygen {name.downcase}
|
9
|
+
auto_manage
|
14
10
|
end
|
15
11
|
|
16
|
-
remy =
|
17
|
-
puts remy.name
|
12
|
+
remy = People.new(:name => 'Remy',:age => 10) # (auto-post)
|
13
|
+
puts remy.name # => "Remy"
|
18
14
|
|
19
|
-
puts
|
20
|
-
puts
|
15
|
+
puts People.get('remy').name # => "Remy" (from Jiak server)
|
16
|
+
puts People.get('remy').age # => 10 (from Jiak server)
|
21
17
|
|
22
|
-
remy.age = 11
|
23
|
-
puts
|
18
|
+
remy.age = 11 # (auto-update)
|
19
|
+
puts People.get('remy').age # => 11 (from Jiak server)
|
24
20
|
|
25
|
-
callie =
|
21
|
+
callie = People.new(:name => 'Callie', :age => 13)
|
26
22
|
remy.link(callie,'sister')
|
27
23
|
|
28
|
-
sisters = remy.query(
|
29
|
-
puts sisters[0].eql?(callie)
|
24
|
+
sisters = remy.query(People,'sister')
|
25
|
+
puts sisters[0].eql?(callie) # => true
|
30
26
|
|
31
27
|
remy.delete
|
32
28
|
callie.delete
|
data/examples/bucket_schemas.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
DogData =
|
4
|
+
DogData = JiakDataFields.create(:name,:age,:breeds)
|
5
|
+
DogData.keygen { name.downcase }
|
5
6
|
|
6
|
-
# client = JiakClient.new("http://localhost:8002/jiak"
|
7
|
-
client = JiakClient.new("http://localhost:8002/jiak"
|
7
|
+
# client = JiakClient.new("http://localhost:8002/jiak")
|
8
|
+
client = JiakClient.new("http://localhost:8002/jiak",
|
9
|
+
:proxy=>"http://localhost:8888")
|
8
10
|
bucket = JiakBucket.new("dogs", DogData)
|
9
11
|
chili = JiakObject.new(:bucket => bucket,
|
10
|
-
:key => 'chili',
|
11
12
|
:data => DogData.new(:name => "Chili",
|
12
13
|
:age => 6,
|
13
14
|
:breeds => ["heeler","akita"]))
|
@@ -15,22 +16,23 @@ client.set_schema(bucket)
|
|
15
16
|
client.store(chili)
|
16
17
|
chili = client.get(bucket,'chili')
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
DogBreedsData = JiakDataFields.create(:name,:breeds)
|
20
|
+
bucket.data_class = DogBreedsData
|
20
21
|
client.set_schema(bucket)
|
21
22
|
chili = client.get(bucket,'chili')
|
23
|
+
chili.data.breeds = ["heeler","mutt"]
|
24
|
+
|
25
|
+
|
26
|
+
DogAgeData = JiakDataFields.create(:name,:age)
|
22
27
|
diego = JiakObject.new(:bucket => bucket,
|
23
|
-
:
|
24
|
-
:data => DogData.new(:name => "Diego",
|
28
|
+
:data => DogAgeData.new(:name => "Diego",
|
25
29
|
:age => 7))
|
26
30
|
client.store(diego)
|
27
31
|
|
28
32
|
addie = JiakObject.new(:bucket => bucket,
|
29
|
-
:key => "addie",
|
30
33
|
:data => DogData.new(:name => "Adelaide",
|
31
34
|
:age => 14,
|
32
35
|
:breeds => ["heeler"]))
|
33
36
|
client.store(addie)
|
34
37
|
|
35
|
-
|
36
38
|
addie = client.get(bucket,'addie')
|
@@ -1,17 +1,13 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
|
5
|
-
PersonData.keygen :name
|
6
|
-
|
7
|
-
class Parent
|
4
|
+
class Parents
|
8
5
|
include JiakResource
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
data_class PersonData
|
6
|
+
server 'http://localhost:8002/jiak'
|
7
|
+
jattr_accessor :name
|
8
|
+
keygen { name }
|
13
9
|
end
|
14
|
-
Child =
|
10
|
+
(Child = Parents.dup).group 'children'
|
15
11
|
|
16
12
|
# relationships
|
17
13
|
parent_children = {
|
@@ -31,7 +27,7 @@ end
|
|
31
27
|
|
32
28
|
# store data and relationships
|
33
29
|
parent_children.each do |pname,cnames|
|
34
|
-
p =
|
30
|
+
p = Parents.new(:name => pname).post
|
35
31
|
cnames.each do |cname|
|
36
32
|
begin
|
37
33
|
c = Child.get(cname)
|
@@ -46,49 +42,50 @@ parent_children.each do |pname,cnames|
|
|
46
42
|
end
|
47
43
|
|
48
44
|
# retrieve parents
|
49
|
-
parents = parent_children.keys.map {|p|
|
45
|
+
parents = parent_children.keys.map {|p| Parents.get(p)}
|
50
46
|
p0,p1,p2,p3 = parents
|
51
|
-
puts p1.name
|
47
|
+
puts p1.name # => 'p1'
|
52
48
|
|
53
49
|
# retrieve children
|
54
50
|
children = child_parents.keys.map {|c| Child.get(c)}
|
55
51
|
c0,c1,c2,c3 = children
|
56
|
-
puts c1.name
|
52
|
+
puts c1.name # => 'c1'
|
57
53
|
|
58
54
|
# retrieve parent children
|
59
55
|
p0c,p1c,p2c,p3c = parents.map {|p| p.query(Child,'child')}
|
60
|
-
puts p2c[0].name
|
56
|
+
puts p2c[0].name # => 'c2' (could be 'c3')
|
61
57
|
|
62
58
|
# retrieve children parents
|
63
|
-
c0p,c1p,c2p,c3p = children.map {|c| c.query(
|
64
|
-
puts c3p[0].name
|
59
|
+
c0p,c1p,c2p,c3p = children.map {|c| c.query(Parents,'parent')}
|
60
|
+
puts c3p[0].name # => 'p2'
|
61
|
+
puts c3p[1].name # => 'p3'
|
65
62
|
|
66
63
|
# retrieve children siblings
|
67
64
|
c0s,c1s,c2s,c3s = children.map do |c|
|
68
|
-
c.query(
|
65
|
+
c.query(Parents,'parent',Child,'child').delete_if{|s| s.eql?(c)}
|
69
66
|
end
|
70
|
-
puts c3s[0].name
|
67
|
+
puts c3s[0].name # => 'c2'
|
71
68
|
|
72
69
|
# who is c3's step-sibling's other parent?
|
73
|
-
c3sp = c3.query(
|
70
|
+
c3sp = c3.query(Parents,'parent',Child,'child',Parents,'parent')
|
74
71
|
c3p.each {|p| c3sp.delete_if{|sp| p.eql?(sp)}}
|
75
|
-
puts c3sp[0].name
|
72
|
+
puts c3sp[0].name # => "p1"
|
76
73
|
|
77
74
|
# turn on auto-update at class level
|
78
|
-
|
75
|
+
Parents.auto_update true
|
79
76
|
Child.auto_update true
|
80
77
|
|
81
78
|
# add sibling links
|
82
79
|
children.each do |c|
|
83
|
-
siblings = c.query(
|
80
|
+
siblings = c.query(Parents,'parent',Child,'child').delete_if{|s| s.eql?(c)}
|
84
81
|
siblings.each {|s| c.link(s,'sibling')}
|
85
82
|
c.update
|
86
83
|
end
|
87
|
-
puts c1.query(Child,'sibling').size
|
84
|
+
puts c1.query(Child,'sibling').size # => 2
|
88
85
|
|
89
86
|
# some folks are odd, and others are normal
|
90
87
|
parent_children.keys.each do |p|
|
91
|
-
parent =
|
88
|
+
parent = Parents.get(p)
|
92
89
|
p_children = parent.query(Child,'child')
|
93
90
|
p_children.each do |child|
|
94
91
|
child.link(parent, p[1].to_i.odd? ? 'odd' : 'normal')
|
@@ -103,10 +100,10 @@ children.each {|c| c.refresh}
|
|
103
100
|
|
104
101
|
# do any odd parents have normal children?
|
105
102
|
op = parents.inject([]) do |build,parent|
|
106
|
-
build << parent.query(Child,'normal',
|
103
|
+
build << parent.query(Child,'normal',Parents,'odd')
|
107
104
|
build.flatten.uniq
|
108
105
|
end
|
109
|
-
puts op[0].name
|
106
|
+
puts op[0].name # => 'p1'
|
110
107
|
|
111
108
|
# clean-up by deleting everybody
|
112
109
|
parents.each {|p| p.delete}
|
data/examples/links_only_pov.rb
CHANGED
@@ -2,37 +2,37 @@ require 'riakrest'
|
|
2
2
|
include RiakRest
|
3
3
|
|
4
4
|
# class with 10 fields
|
5
|
-
class
|
5
|
+
class Fields
|
6
6
|
include JiakResource
|
7
|
-
server
|
8
|
-
|
9
|
-
|
10
|
-
auto_post true
|
11
|
-
auto_update true
|
7
|
+
server 'http://localhost:8002/jiak'
|
8
|
+
jattr_accessor (0...10).map {|n| "f#{n}".to_sym}
|
9
|
+
auto_manage
|
12
10
|
end
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
class Links
|
13
|
+
include JiakResource
|
14
|
+
server 'http://localhost:8002/jiak'
|
15
|
+
auto_manage
|
16
|
+
end
|
18
17
|
|
19
|
-
# populate two
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
18
|
+
# populate two Fields objects with (meaningless) stuff
|
19
|
+
Fields.pov
|
20
|
+
fields = ["fields1","fields2"]
|
21
|
+
fields1,fields2 =
|
22
|
+
fields.map {|o| Fields.new(Fields.schema.write_mask.inject({}) do |h,f|
|
23
|
+
h[f]="#{o.upcase}-#{f.hash}"
|
24
|
+
h
|
25
|
+
end)}
|
26
26
|
|
27
27
|
Links.pov
|
28
|
-
links1 = Links.get(
|
29
|
-
links1.link(
|
28
|
+
links1 = Links.get(fields1.jiak.key)
|
29
|
+
links1.link(fields2,'link')
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
Fields.pov
|
32
|
+
fields2.f1 = "new f1"
|
33
33
|
|
34
|
-
linked =
|
35
|
-
puts linked.f1 ==
|
34
|
+
linked = fields1.query(Fields,'link')[0]
|
35
|
+
puts linked.f1 == fields2.f1 # => true
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
fields1.delete
|
38
|
+
fields2.delete
|
data/examples/multiple_pov.rb
CHANGED
@@ -1,27 +1,29 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
DogData = JiakDataHash.create(:name,:weight,:breed)
|
5
|
-
DogData.keygen :name
|
6
4
|
class Dog
|
7
5
|
include JiakResource
|
8
|
-
server
|
9
|
-
|
10
|
-
|
6
|
+
server 'http://localhost:8002/jiak'
|
7
|
+
jiak_accessor :name, :weight, :breed
|
8
|
+
keygen { name.downcase }
|
11
9
|
end
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
class DogBreed
|
12
|
+
include JiakResource
|
13
|
+
server 'http://localhost:8002/jiak'
|
14
|
+
jiak_accessor :name, :breed
|
15
|
+
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
class DogWeight
|
18
|
+
include JiakResource
|
19
|
+
server 'http://localhost:8002/jiak'
|
20
|
+
jiak_accessor :name, :weight
|
21
|
+
end
|
20
22
|
|
21
23
|
Dog.pov
|
22
|
-
addie = Dog.new(:name => '
|
24
|
+
addie = Dog.new(:name => 'Adelaide', :weight => 45, :breed => 'heeler')
|
23
25
|
addie.post
|
24
|
-
puts addie.name # => "
|
26
|
+
puts addie.name # => "Adelaide"
|
25
27
|
puts addie.breed # => "heeler"
|
26
28
|
puts addie.weight # => 45
|
27
29
|
|
@@ -37,7 +39,7 @@ addie.put
|
|
37
39
|
|
38
40
|
Dog.pov
|
39
41
|
addie = Dog.get('adelaide')
|
40
|
-
puts addie.name # => "
|
42
|
+
puts addie.name # => "Adelaide"
|
41
43
|
puts addie.breed # => "Heeler"
|
42
44
|
puts addie.weight # => 47
|
43
45
|
|
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'riakrest'
|
2
2
|
include RiakRest
|
3
3
|
|
4
|
-
DogData
|
5
|
-
|
4
|
+
class DogData
|
5
|
+
include JiakData
|
6
|
+
jattr_accessor :name, :age, :breeds
|
7
|
+
end
|
8
|
+
|
6
9
|
client = JiakClient.new("http://localhost:8002/jiak")
|
7
10
|
bucket = JiakBucket.new("dogs", DogData)
|
8
11
|
|
@@ -44,8 +47,5 @@ client.store(strass)
|
|
44
47
|
db_strass = client.get(bucket,'strass')
|
45
48
|
puts db_strass.data.age # => 6 Yeah!
|
46
49
|
|
47
|
-
|
48
|
-
|
49
50
|
# Clean-up
|
50
51
|
client.keys(bucket).each {|key| client.delete(bucket,key)}
|
51
|
-
|