medea 0.2.25 → 0.2.28

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.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Dependencies are specified in medea.gemspec
4
+ gemspec
data/Rakefile CHANGED
@@ -1,21 +1,2 @@
1
- require 'rake'
2
-
3
- begin
4
- require 'jeweler'
5
- Jeweler::Tasks.new do |s|
6
- s.name = "medea"
7
- s.summary = "Simple wrapper for persisting objects to JasonDB"
8
- s.email = "michaelj@jasondb.com"
9
- s.homepage = "https://github.com/rob-linton/Medea"
10
- s.description = "Simple wrapper for persisting objects to JasonDB"
11
- s.authors = ["Michael Jensen"]
12
- s.files = FileList["[A-Z]*", "{lib}/medea.rb", "{lib}/medea/*"]
13
- s.files.exclude '{lib}/test*'
14
- s.add_dependency 'json'
15
- s.add_dependency 'rest-client'
16
- s.add_dependency 'uuidtools'
17
- end
18
- rescue LoadError
19
- puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
20
- end
21
-
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/index.html ADDED
@@ -0,0 +1,78 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7
+
8
+ <title>rob-linton/Medea @ GitHub</title>
9
+
10
+ <style type="text/css">
11
+ body {
12
+ margin-top: 1.0em;
13
+ background-color: #28904b;
14
+ font-family: "Helvetica,Arial,FreeSans";
15
+ color: #ffffff;
16
+ }
17
+ #container {
18
+ margin: 0 auto;
19
+ width: 700px;
20
+ }
21
+ h1 { font-size: 3.8em; color: #d76fb4; margin-bottom: 3px; }
22
+ h1 .small { font-size: 0.4em; }
23
+ h1 a { text-decoration: none }
24
+ h2 { font-size: 1.5em; color: #d76fb4; }
25
+ h3 { text-align: center; color: #d76fb4; }
26
+ a { color: #d76fb4; }
27
+ .description { font-size: 1.2em; margin-bottom: 30px; margin-top: 30px; font-style: italic;}
28
+ .download { float: right; }
29
+ pre { background: #000; color: #fff; padding: 15px;}
30
+ hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
31
+ .footer { text-align:center; padding-top:30px; font-style: italic; }
32
+ </style>
33
+
34
+ </head>
35
+
36
+ <body>
37
+ <a href="http://github.com/rob-linton/Medea"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
38
+
39
+ <div id="container">
40
+
41
+ <div class="download">
42
+ <a href="http://github.com/rob-linton/Medea/zipball/master">
43
+ <img border="0" width="90" src="http://github.com/images/modules/download/zip.png"></a>
44
+ <a href="http://github.com/rob-linton/Medea/tarball/master">
45
+ <img border="0" width="90" src="http://github.com/images/modules/download/tar.png"></a>
46
+ </div>
47
+
48
+ <h1><a href="http://github.com/rob-linton/Medea">Medea</a>
49
+ <span class="small">by <a href="http://github.com/rob-linton">rob-linton</a></span></h1>
50
+
51
+ <div class="description">
52
+ Jasondb library for Ruby
53
+ </div>
54
+
55
+ <p>This is the main site for the Ruby interface to Jasondb. </p><h2>Contact</h2>
56
+ <p>robl@jasondb.com
57
+
58
+
59
+ <h2>Download</h2>
60
+ <p>
61
+ You can download this project in either
62
+ <a href="http://github.com/rob-linton/Medea/zipball/master">zip</a> or
63
+ <a href="http://github.com/rob-linton/Medea/tarball/master">tar</a> formats.
64
+ </p>
65
+ <p>You can also clone the project with <a href="http://git-scm.com">Git</a>
66
+ by running:
67
+ <pre>$ git clone git://github.com/rob-linton/Medea</pre>
68
+ </p>
69
+
70
+ <div class="footer">
71
+ get the source code on GitHub : <a href="http://github.com/rob-linton/Medea">rob-linton/Medea</a>
72
+ </div>
73
+
74
+ </div>
75
+
76
+
77
+ </body>
78
+ </html>
@@ -77,6 +77,35 @@ module Medea
77
77
  @state = :prefetch
78
78
  end
79
79
 
80
+ def remove! member
81
+ raise RuntimeError, "You can only remove an item if you are accessing this list from an object." unless @parent.is_a? JasonObject
82
+ raise ArgumentError, "You can only remove #{@type.name} items from this collection!" unless member.is_a? @type
83
+ raise ArgumentError, "This item (#{member.jason_key}) doesn't exist in the list you're trying to remove it from!" unless self.include? member
84
+
85
+ if @list_type == :value
86
+ member.jason_parent = nil
87
+ member.jason_parent_list = nil
88
+ member.save!
89
+ elsif @list_type == :reference
90
+
91
+ #send DELETE to JasonDB::db_auth_url/a_class.name/
92
+ url = "#{JasonDB::db_auth_url}#{@type.name}/#{@parent.jason_key}/#{@list_name}/#{member.jason_key}"
93
+
94
+ response = RestClient.delete url
95
+
96
+ if response.code == 201
97
+ #delete successful!
98
+ else
99
+ raise "DELETE failed! Could not remove membership"
100
+ end
101
+ else
102
+ #parent is a JasonObject, but this list is something other than :value or :reference??
103
+ raise "Invalid list type or trying to remove an item from a subquery list!"
104
+ end
105
+
106
+ @state = :prefetch
107
+ end
108
+
80
109
  def to_url
81
110
  url = "#{JasonDB::db_auth_url}@#{@time_limit}.#{@result_format}?"
82
111
  params = ["VERSION0"]
@@ -6,7 +6,7 @@ module JasonObjectListProperties
6
6
  module MetaListProperties
7
7
  def create_member_list list_name, list_class, list_type
8
8
  list = {}
9
- list = self.class_variable_get :@@lists if self.class_variable_defined? :@@lists
9
+ list = self.send(:class_variable_get, :@@lists) if self.class_variable_defined? :@@lists
10
10
  list[list_name] = [list_class, list_type]
11
11
  self.send(:class_variable_set, "@@lists", list)
12
12
 
@@ -0,0 +1,3 @@
1
+ module Medea
2
+ VERSION = "0.2.28"
3
+ end
data/lib/test.rb ADDED
@@ -0,0 +1,31 @@
1
+ $: << "~/Projects/Medea/lib"
2
+ require 'rubygems'
3
+ require 'medea'
4
+
5
+ class Person < Medea::JasonObject
6
+ end
7
+
8
+ mikey = Person.new
9
+ puts "state: #{mikey.jason_state}"
10
+ mikey.name = "Michael"
11
+ mikey.age = 21
12
+ mikey.location = {:longitude => -30.123213, :latitude => 130.1231458}
13
+ puts mikey.jason_key
14
+ puts mikey.to_json
15
+ mikey.save!
16
+
17
+ puts "state: #{mikey.jason_state}"
18
+
19
+ puts "Changing name => Bob"
20
+ mikey.name = "Bob"
21
+
22
+ puts "state: #{mikey.jason_state}"
23
+ puts mikey.to_json
24
+ mikey.save!
25
+ puts "state: #{mikey.jason_state}"
26
+
27
+ puts "Enter a Person key to retrieve: "
28
+ id = gets.strip
29
+
30
+ person = Person.new id
31
+ puts person.to_json
data/lib/testjdq.rb ADDED
@@ -0,0 +1,40 @@
1
+ $: << "~/Projects/Medea/lib"
2
+ require 'medea'
3
+
4
+ class Person < Medea::JasonObject
5
+ end
6
+
7
+ class Company < Medea::JasonObject
8
+ has_many :employees, Person
9
+ end
10
+
11
+ puts "Lets make a person!"
12
+ p = Person.new
13
+ puts "Name?"
14
+ p.name = gets.strip
15
+ puts "Age?"
16
+ p.age = gets.strip.to_i
17
+ puts "OK - Saving"
18
+ p.save!
19
+
20
+ puts "", "Lets make a company!"
21
+ c = Company.new
22
+ puts "Name?"
23
+ c.name = gets.strip
24
+ puts "Address?"
25
+ c.address = gets.strip
26
+ puts "OK - Saving"
27
+ c.save!
28
+
29
+ puts "", "Making #{p.name} a member of #{c.name}"
30
+ c.employees.add! p
31
+ puts "OK - Saving"
32
+ p.save!
33
+
34
+ puts "", "Now querying for Persons that are members of #{c.name}"
35
+ r = c.employees
36
+ puts "Query: #{r.to_url}"
37
+ puts "Got #{r.count} items:"
38
+ r.each do |p|
39
+ puts p.name
40
+ end
data/lib/testjlp.rb ADDED
@@ -0,0 +1,30 @@
1
+ $: << "~/Projects/Medea/lib"
2
+ require 'medea'
3
+
4
+ class Person < Medea::JasonObject
5
+ has_many :followees, Person
6
+ end
7
+
8
+ p = Person.get_by_key "p6c75c02f-ed93-4ee8-9746-3603e915be23"
9
+
10
+ puts p.followees.to_url
11
+ puts p.followees.count
12
+
13
+ puts "Let's make a new person!"
14
+
15
+ p1 = Person.new
16
+ puts "Name?"
17
+ p1.name = gets.strip
18
+ if p1.name != ""
19
+ puts "Saving..."
20
+ p1.save!
21
+
22
+ puts "Making #{p.name} follow #{p1.name}..."
23
+ p.followees.add! p1
24
+ end
25
+ puts "Done!"
26
+ list = p.followees
27
+ puts "#{p.name} now following #{list.count} users:"
28
+ list.each do |f|
29
+ puts " - #{f.jason_key}: #{f.name}\n"
30
+ end
data/lib/testmeta.rb ADDED
@@ -0,0 +1,38 @@
1
+ $: << "~/Projects/Medea/lib"
2
+ require 'medea'
3
+
4
+ class Message < Medea::JasonObject
5
+ end
6
+
7
+ class User < Medea::JasonObject
8
+ owns_many :messages, Message
9
+ end
10
+
11
+ puts "Enter an id, or blank to make a new user:"
12
+ id = gets.strip
13
+ if id == ""
14
+ u = User.new
15
+ puts "User's name?"
16
+ u.name = gets.strip
17
+
18
+ puts "Saving"
19
+ u.save!
20
+ else
21
+ u = User.get_by_key id
22
+ puts "#{u.name} has posted #{u.messages.count} messages"
23
+ end
24
+
25
+ while true
26
+ puts "Enter a message (blank to stop):"
27
+ message = gets.strip
28
+ break if message == ""
29
+ m = Message.new
30
+ m.message = message
31
+ m.from = u.name
32
+ u.messages.add! m
33
+ end
34
+
35
+ puts "Fetching messages..."
36
+ u.messages.each do |e|
37
+ puts " - #{e.message}\n"
38
+ end
@@ -0,0 +1,46 @@
1
+ $: << "~/Projects/Medea/lib"
2
+ require 'medea'
3
+
4
+ class Message < Medea::JasonObject; end
5
+
6
+ class User < Medea::JasonObject
7
+ owns_many :messages, Message
8
+ has_many :followees, User
9
+ end
10
+
11
+ u1 = User.new
12
+ u1.name = "Fred"
13
+ u1.save!
14
+
15
+ u2 = User.new
16
+ u2.name = "George"
17
+ u2.save!
18
+
19
+ u1.followees.add! u2
20
+ u1.followees.add! (User.get_by_key "p438639000")
21
+ u1.followees.add! u1
22
+
23
+ m1 = Message.new
24
+ m1.from = u2.name
25
+ m1.message = "Hello! This is George"
26
+ u2.messages.add! m1
27
+
28
+ m3 = Message.new
29
+ m3.from = u1.name
30
+ m3.message = "George sent me here, hope it's fun!"
31
+ u1.messages.add! m3
32
+
33
+ m2 = Message.new
34
+ m2.from = u2.name
35
+ m2.message = "Man, this is a long day!"
36
+ u2.messages.add! m2
37
+
38
+ puts "#{u2.name} has posted #{u2.messages.count} messages"
39
+
40
+ puts "#{u1.name} is following #{u1.followees.count} users"
41
+ puts "#{u1.name}'s timeline has #{u1.followees.messages.count} messages in it"
42
+
43
+ u1.followees.messages.each do |m|
44
+ puts "#{m.from}:"
45
+ puts " #{m.message}"
46
+ end
data/medea.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "medea/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "medea"
7
+ s.version = Medea::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Michael Jensen"]
10
+ s.email = ["michaelj@jasondb.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Simple wrapper for persisting objects to JasonDB}
13
+ s.description = %q{Simple wrapper for persisting objects to JasonDB}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_dependency "json"
21
+ s.add_dependency "rest-client"
22
+ s.add_dependency "uuidtools"
23
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: medea
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 47
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 2
8
- - 25
9
- version: 0.2.25
9
+ - 28
10
+ version: 0.2.28
10
11
  platform: ruby
11
12
  authors:
12
13
  - Michael Jensen
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-12-31 00:00:00 +11:00
18
+ date: 2011-01-05 00:00:00 +11:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ">="
27
28
  - !ruby/object:Gem::Version
29
+ hash: 3
28
30
  segments:
29
31
  - 0
30
32
  version: "0"
@@ -38,6 +40,7 @@ dependencies:
38
40
  requirements:
39
41
  - - ">="
40
42
  - !ruby/object:Gem::Version
43
+ hash: 3
41
44
  segments:
42
45
  - 0
43
46
  version: "0"
@@ -51,23 +54,27 @@ dependencies:
51
54
  requirements:
52
55
  - - ">="
53
56
  - !ruby/object:Gem::Version
57
+ hash: 3
54
58
  segments:
55
59
  - 0
56
60
  version: "0"
57
61
  type: :runtime
58
62
  version_requirements: *id003
59
63
  description: Simple wrapper for persisting objects to JasonDB
60
- email: michaelj@jasondb.com
64
+ email:
65
+ - michaelj@jasondb.com
61
66
  executables: []
62
67
 
63
68
  extensions: []
64
69
 
65
- extra_rdoc_files:
66
- - README
70
+ extra_rdoc_files: []
71
+
67
72
  files:
73
+ - Gemfile
68
74
  - README
69
75
  - Rakefile
70
76
  - VERSION
77
+ - index.html
71
78
  - lib/medea.rb
72
79
  - lib/medea/active_model_methods.rb
73
80
  - lib/medea/inheritable_attributes.rb
@@ -76,8 +83,15 @@ files:
76
83
  - lib/medea/jasonlistproperty.rb
77
84
  - lib/medea/jasonobject.rb
78
85
  - lib/medea/list_properties.rb
86
+ - lib/medea/version.rb
87
+ - lib/test.rb
88
+ - lib/testjdq.rb
89
+ - lib/testjlp.rb
90
+ - lib/testmeta.rb
91
+ - lib/testsublist.rb
92
+ - medea.gemspec
79
93
  has_rdoc: true
80
- homepage: https://github.com/rob-linton/Medea
94
+ homepage: ""
81
95
  licenses: []
82
96
 
83
97
  post_install_message:
@@ -90,6 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
90
104
  requirements:
91
105
  - - ">="
92
106
  - !ruby/object:Gem::Version
107
+ hash: 3
93
108
  segments:
94
109
  - 0
95
110
  version: "0"
@@ -98,6 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
113
  requirements:
99
114
  - - ">="
100
115
  - !ruby/object:Gem::Version
116
+ hash: 3
101
117
  segments:
102
118
  - 0
103
119
  version: "0"