appengine-apis 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/appengine-apis.rb +1 -1
- data/lib/appengine-apis/datastore.rb +29 -7
- data/lib/appengine-apis/datastore_types.rb +1 -1
- data/lib/appengine-apis/memcache.rb +1 -1
- data/lib/appengine-apis/sdk.rb +21 -1
- data/lib/appengine-apis/testing.rb +8 -2
- data/lib/appengine-apis/urlfetch.rb +1 -1
- data/spec/datastore_spec.rb +22 -26
- data/spec/datastore_types_spec.rb +7 -11
- data/spec/memcache_spec.rb +2 -4
- metadata +15 -12
data/lib/appengine-apis.rb
CHANGED
@@ -209,17 +209,23 @@ module Datastore
|
|
209
209
|
retries -= 1
|
210
210
|
tx = begin_transaction
|
211
211
|
begin
|
212
|
-
|
213
|
-
|
214
|
-
|
212
|
+
convert_exceptions do
|
213
|
+
result = yield
|
214
|
+
tx.commit
|
215
|
+
return result
|
216
|
+
end
|
215
217
|
rescue Rollback
|
216
|
-
|
217
|
-
|
218
|
-
|
218
|
+
convert_exceptions do
|
219
|
+
tx.rollback
|
220
|
+
return nil
|
221
|
+
end
|
222
|
+
rescue TransactionFailed => ex
|
219
223
|
raise ex unless retries >= 0
|
220
224
|
ensure
|
221
225
|
begin
|
222
|
-
|
226
|
+
convert_exceptions do
|
227
|
+
tx.rollback
|
228
|
+
end
|
223
229
|
rescue java.lang.IllegalStateException
|
224
230
|
# already commited/rolled back. ignore
|
225
231
|
rescue java.util.NoSuchElementException
|
@@ -490,6 +496,22 @@ module Datastore
|
|
490
496
|
options
|
491
497
|
end
|
492
498
|
|
499
|
+
def inspect
|
500
|
+
output = "<Query("
|
501
|
+
query = java_query
|
502
|
+
output << query.kind if query.kind
|
503
|
+
output << ", " if query.ancestor && query.kind
|
504
|
+
output << query.ancestor.inspect if query.ancestor
|
505
|
+
output << ")"
|
506
|
+
query.filter_predicates.each do |pred|
|
507
|
+
output << " (#{pred.property_name.inspect} #{pred.operator.name} #{pred.value.inspect})"
|
508
|
+
end
|
509
|
+
query.sort_predicates.each do |pred|
|
510
|
+
output << " (ORDER BY #{pred.property_name.inspect} #{pred.direction.name})"
|
511
|
+
end
|
512
|
+
output
|
513
|
+
end
|
514
|
+
|
493
515
|
private
|
494
516
|
def clear_cache
|
495
517
|
@pquery = nil
|
@@ -21,7 +21,7 @@ require 'appengine-apis/datastore_types'
|
|
21
21
|
module AppEngine
|
22
22
|
|
23
23
|
# The Ruby API for the App Engine Memcache service. This offers a fast
|
24
|
-
#
|
24
|
+
# distributed cache for commonly-used data. The cache is limited both in
|
25
25
|
# duration and also in total space, so objects stored in it may be discarded
|
26
26
|
# at any time.
|
27
27
|
#
|
data/lib/appengine-apis/sdk.rb
CHANGED
@@ -19,11 +19,25 @@
|
|
19
19
|
require 'java'
|
20
20
|
|
21
21
|
module AppEngine
|
22
|
+
|
23
|
+
DEV_APPSERVER = 'com.google.appengine.tools.development.DevAppServerMain'
|
22
24
|
|
23
25
|
# Helper methods to locate the App Engine SDK and add it to the class path.
|
24
26
|
module SDK
|
25
27
|
class << self
|
26
28
|
|
29
|
+
# Tries to load the Kickstart class.
|
30
|
+
def load_kickstart
|
31
|
+
tools = %w{lib appengine-tools-api.jar}
|
32
|
+
cp = java.lang.System.get_property('java.class.path')
|
33
|
+
jar = sdk_path(*tools)
|
34
|
+
sep = java.io.File::pathSeparator
|
35
|
+
java.lang.System.set_property('java.class.path', "#{jar}#{sep}#{cp}")
|
36
|
+
with_jars(tools) do
|
37
|
+
return Java.ComGoogleAppengineTools.KickStart
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
27
41
|
# Tries to load the ApiProxy class.
|
28
42
|
def load_apiproxy
|
29
43
|
with_jars(%w{lib impl appengine-api.jar}) do
|
@@ -41,6 +55,12 @@ module AppEngine
|
|
41
55
|
end
|
42
56
|
end
|
43
57
|
|
58
|
+
def load_appcfg
|
59
|
+
with_jars(%w{lib appengine-tools-api.jar}) do
|
60
|
+
return Java.ComGoogleAppengineToolsAdmin.AppCfg
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
44
64
|
def with_jars(*jars) # :nodoc:
|
45
65
|
begin
|
46
66
|
failed = false
|
@@ -93,4 +113,4 @@ module AppEngine
|
|
93
113
|
end
|
94
114
|
end
|
95
115
|
end
|
96
|
-
end
|
116
|
+
end
|
@@ -37,13 +37,15 @@ module AppEngine
|
|
37
37
|
|
38
38
|
attr_writer :appid, :version, :email, :admin
|
39
39
|
attr_writer :auth_domain, :request_namespace, :default_namespace
|
40
|
+
attr_reader :attributes
|
40
41
|
|
41
42
|
def initialize
|
42
43
|
@appid = "test"
|
43
44
|
@version = "1.0"
|
44
|
-
@auth_domain
|
45
|
-
@default_namespace = ""
|
45
|
+
@auth_domain= "gmail.com"
|
46
|
+
@default_namespace = @request_namespace = ""
|
46
47
|
@email = ""
|
48
|
+
@attributes = java.util.HashMap.new
|
47
49
|
end
|
48
50
|
|
49
51
|
def getAppId
|
@@ -82,6 +84,10 @@ module AppEngine
|
|
82
84
|
@default_namespace = s
|
83
85
|
end
|
84
86
|
|
87
|
+
def getAttributes
|
88
|
+
@attributes
|
89
|
+
end
|
90
|
+
|
85
91
|
def inspect
|
86
92
|
"#<TestEnv>"
|
87
93
|
end
|
data/spec/datastore_spec.rb
CHANGED
@@ -59,37 +59,33 @@ describe AppEngine::Datastore do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should support failed transactions" do
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
Datastore.
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
Datastore.put(a2)
|
72
|
-
end
|
62
|
+
a = Datastore::Entity.new("A")
|
63
|
+
a[:a] = 0
|
64
|
+
Datastore.put(a)
|
65
|
+
p = lambda do
|
66
|
+
Datastore.transaction do
|
67
|
+
a2 = Datastore.get(a.key)
|
68
|
+
a[:a] += 1
|
69
|
+
Datastore.put(nil, a)
|
70
|
+
Datastore.put(a2)
|
73
71
|
end
|
74
|
-
p.should raise_error Datastore::TransactionFailed
|
75
72
|
end
|
73
|
+
p.should raise_error Datastore::TransactionFailed
|
76
74
|
end
|
77
75
|
|
78
76
|
it "should retry transactions" do
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
Datastore.
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
Datastore.put(a2)
|
89
|
-
end
|
90
|
-
|
91
|
-
Datastore.get(a.key)[:a].should == '2: 2'
|
77
|
+
a = Datastore::Entity.new("A")
|
78
|
+
a[:a] = 0
|
79
|
+
Datastore.put(a)
|
80
|
+
Datastore.transaction(3) do
|
81
|
+
a2 = Datastore.get(a.key)
|
82
|
+
a[:a] += 1
|
83
|
+
Datastore.put(nil, a) if a[:a] < 3
|
84
|
+
a2[:a] = "2: #{a2[:a]}"
|
85
|
+
Datastore.put(a2)
|
92
86
|
end
|
87
|
+
|
88
|
+
Datastore.get(a.key)[:a].should == '2: 2'
|
93
89
|
end
|
94
90
|
|
95
91
|
it "should close transactions" do
|
@@ -126,7 +122,7 @@ describe AppEngine::Datastore::Query do
|
|
126
122
|
end
|
127
123
|
|
128
124
|
it 'should support symbol ops' do
|
129
|
-
q = Query.new("
|
125
|
+
q = Query.new("A")
|
130
126
|
q.set_ancestor(@a.key).sort('name').filter(
|
131
127
|
'name', :==, 'aa')
|
132
128
|
q.fetch.to_a.should == [@aa]
|
@@ -25,20 +25,16 @@ describe AppEngine::Datastore::Key do
|
|
25
25
|
a1.should == a2
|
26
26
|
a2.should.eql? a1
|
27
27
|
a1.hash.should == a2.hash
|
28
|
-
|
29
|
-
(a1 <=> a2).should == 0
|
30
|
-
end
|
28
|
+
(a1 <=> a2).should == 0
|
31
29
|
end
|
32
30
|
|
33
31
|
it "should support <=>" do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
(a2 <=> a1).should == 1
|
41
|
-
end
|
32
|
+
a1 = Key.from_path("A", 1)
|
33
|
+
a2 = Key.from_path("A", 2)
|
34
|
+
a1.should < a2
|
35
|
+
a2.should > a1
|
36
|
+
(a1 <=> a2).should == -1
|
37
|
+
(a2 <=> a1).should == 1
|
42
38
|
end
|
43
39
|
|
44
40
|
it "should create from id" do
|
data/spec/memcache_spec.rb
CHANGED
@@ -308,10 +308,8 @@ describe AppEngine::Memcache do
|
|
308
308
|
@cache.get(:a).should == 4
|
309
309
|
@cache.decr(:a, 4).should == 0
|
310
310
|
@cache.get(:a).should == 0
|
311
|
-
|
312
|
-
|
313
|
-
@cache.get(:a).should == 0
|
314
|
-
end
|
311
|
+
@cache.decr(:a, 6).should == 0
|
312
|
+
@cache.get(:a).should == 0
|
315
313
|
end
|
316
314
|
end
|
317
315
|
|
metadata
CHANGED
@@ -21,18 +21,21 @@ name: appengine-apis
|
|
21
21
|
rdoc_options:
|
22
22
|
- --main
|
23
23
|
- README.rdoc
|
24
|
-
autorequire:
|
25
24
|
rubyforge_project: appengine-jruby
|
25
|
+
autorequire:
|
26
|
+
licenses: []
|
27
|
+
|
26
28
|
executables: []
|
27
29
|
|
28
|
-
description:
|
29
|
-
API stubs in IRB simply
|
30
|
-
will configure access to the same Datastore as running $ dev_appserver.sh
|
31
|
-
these classes for an overview of each API
|
32
|
-
- AppEngine::Users
|
33
|
-
- AppEngine::Datastore
|
34
|
-
to use the
|
35
|
-
|
30
|
+
description: "APIs and utilities for using JRuby on Google App Engine.\n\nTo load \
|
31
|
+
the API stubs in IRB simply\n require 'rubygems'\n require 'appengine-apis/local_boot'\n\
|
32
|
+
\nThis will configure access to the same Datastore as running\n\n $ dev_appserver.sh \
|
33
|
+
.\n\nSee these classes for an overview of each API:\n- AppEngine::Logger\n- AppEngine::Testing\n\
|
34
|
+
- AppEngine::Users\n- AppEngine::Mail\n- AppEngine::Memcache\n- AppEngine::URLFetch\n\
|
35
|
+
- AppEngine::Datastore\n\nUnless you're implementing your own ORM, you probably \
|
36
|
+
want to use the\nDataMapper API instead of the lower level AppEngine::Datastore \
|
37
|
+
API."
|
38
|
+
specification_version: 3
|
36
39
|
default_executable:
|
37
40
|
files:
|
38
41
|
- History.txt
|
@@ -73,17 +76,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
76
|
version:
|
74
77
|
extensions: []
|
75
78
|
|
76
|
-
rubygems_version: 1.3.
|
79
|
+
rubygems_version: 1.3.3
|
77
80
|
requirements: []
|
78
81
|
|
79
82
|
authors:
|
80
83
|
- Ryan Brown
|
81
|
-
date: 2009-
|
84
|
+
date: 2009-07-20 07:00:00 +00:00
|
82
85
|
platform: ruby
|
83
86
|
test_files: []
|
84
87
|
|
85
88
|
version: !ruby/object:Gem::Version
|
86
|
-
version: 0.0.
|
89
|
+
version: 0.0.5
|
87
90
|
require_paths:
|
88
91
|
- lib
|
89
92
|
dependencies:
|