appengine-apis 0.0.3 → 0.0.4

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/Manifest.txt CHANGED
@@ -1,6 +1,5 @@
1
1
  History.txt
2
2
  Manifest.txt
3
- PostInstall.txt
4
3
  README.rdoc
5
4
  Rakefile
6
5
  lib/appengine-apis.rb
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ begin
6
6
  gem 'rdoc'
7
7
  require 'sdoc'
8
8
  ENV['RDOCOPT'] = '-T lightblue'
9
- rescue
9
+ rescue Exception
10
10
  end
11
11
 
12
12
  # Generate all the Rake tasks
@@ -14,7 +14,6 @@ end
14
14
  $hoe = Hoe.new('appengine-apis', AppEngine::VERSION) do |p|
15
15
  p.developer('Ryan Brown', 'ribrdb@gmail.com')
16
16
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
17
- p.post_install_message = 'PostInstall.txt'
18
17
  p.rubyforge_name = 'appengine-jruby'
19
18
  # p.extra_deps = [
20
19
  # ['activesupport','>= 2.0.2'],
@@ -204,7 +204,7 @@ module Datastore
204
204
  # aren't safe to occur multiple times. However, this doesn't
205
205
  # include Put, Get, and Delete calls, of course.
206
206
  #
207
- def transaction(retries=0)
207
+ def transaction(retries=3)
208
208
  while retries >= 0
209
209
  retries -= 1
210
210
  tx = begin_transaction
@@ -276,6 +276,12 @@ module Datastore
276
276
 
277
277
  ASCENDING = JQuery::SortDirection::ASCENDING
278
278
  DESCENDING = JQuery::SortDirection::DESCENDING
279
+
280
+ OP_MAP = Hash.new { |hash, key| key }
281
+ OP_MAP.update('==' => EQUAL, '>' => GREATER_THAN,
282
+ '>=' => GREATER_THAN_OR_EQUAL, '<' => LESS_THAN,
283
+ '<=' => LESS_THAN_OR_EQUAL)
284
+ OP_MAP.freeze
279
285
  end
280
286
  include Constants
281
287
 
@@ -353,6 +359,8 @@ module Datastore
353
359
  #
354
360
  def filter(name, operator, value)
355
361
  name = name.to_s if name.kind_of? Symbol
362
+ operator = operator.to_s if operator.kind_of? Symbol
363
+ operator = OP_MAP[operator]
356
364
  value = Datastore.ruby_to_java(value)
357
365
  @query.add_filter(name, operator, value)
358
366
  clear_cache
@@ -247,12 +247,7 @@ module AppEngine
247
247
  def get_property(name)
248
248
  name = name.to_s if name.kind_of? Symbol
249
249
  prop = Datastore.convert_exceptions { getProperty(name) }
250
- ruby_type = SPECIAL_JAVA_TYPES[prop.class]
251
- if ruby_type
252
- ruby_type.new_from_java(prop)
253
- else
254
- prop
255
- end
250
+ java_value_to_ruby(prop)
256
251
  end
257
252
  alias :[] :get_property
258
253
 
@@ -314,8 +309,10 @@ module AppEngine
314
309
  alias merge! update
315
310
 
316
311
  # Iterates over all the properties in this Entity.
317
- def each(&proc) # :yields: name, value
318
- getProperties.each(&proc)
312
+ def each() # :yields: name, value
313
+ getProperties.each do |name, value|
314
+ yield name, java_value_to_ruby(value)
315
+ end
319
316
  end
320
317
 
321
318
  def to_hash
@@ -325,6 +322,15 @@ module AppEngine
325
322
  hash
326
323
  end
327
324
  end
325
+
326
+ def java_value_to_ruby(prop)
327
+ ruby_type = SPECIAL_JAVA_TYPES[prop.class]
328
+ if ruby_type
329
+ ruby_type.new_from_java(prop)
330
+ else
331
+ prop
332
+ end
333
+ end
328
334
  end
329
335
 
330
336
  SPECIAL_RUBY_TYPES = [Time, Text, Blob, ByteString, Link].freeze
@@ -69,22 +69,25 @@ module AppEngine
69
69
  # Returns File.join(sdk_directory, *pieces)
70
70
  #
71
71
  def sdk_path(*pieces)
72
- puts "sdk_path(#{pieces.join('/')})"
73
72
  unless @sdk_path
74
- base_path = File.join(ENV['APPENGINE_JAVA_SDK'] || '', 'bin')
75
- exec_paths = ENV['PATH'].split(File::PATH_SEPARATOR)
76
- exec_paths << '/usr/local/appengine-java-sdk/bin'
77
- exec_paths << 'c:\appengine-java-sdk\bin'
78
- # TODO also check for reggae
73
+ begin
74
+ require 'reggae'
75
+ @sdk_path = AppEngine::Jars::Path
76
+ rescue Exception
77
+ base_path = File.join(ENV['APPENGINE_JAVA_SDK'] || '', 'bin')
78
+ exec_paths = ENV['PATH'].split(File::PATH_SEPARATOR)
79
+ exec_paths << '/usr/local/appengine-java-sdk/bin'
80
+ exec_paths << 'c:\appengine-java-sdk\bin'
79
81
 
80
- while !exec_paths.empty?
81
- if File.exist?(File.join(base_path, 'appcfg.sh'))
82
- @sdk_path = File.dirname(base_path)
83
- return File.join(@sdk_path, *pieces)
82
+ while !exec_paths.empty?
83
+ if File.exist?(File.join(base_path, 'appcfg.sh'))
84
+ @sdk_path = File.dirname(base_path)
85
+ return File.join(@sdk_path, *pieces)
86
+ end
87
+ base_path = exec_paths.shift
84
88
  end
85
- base_path = exec_paths.shift
89
+ raise "Unable to locate the Google App Engine SDK for Java."
86
90
  end
87
- raise "Unable to locate the Google App Engine SDK for Java."
88
91
  end
89
92
  File.join(@sdk_path, *pieces)
90
93
  end
@@ -126,8 +126,7 @@ module AppEngine
126
126
  #
127
127
  # You may call this multiple times to reset to a new in-memory datastore.
128
128
  def install_test_datastore
129
- self.app_dir = '.' if app_dir.nil?
130
- delegate = factory.create
129
+ delegate = install_api_stubs
131
130
  lds = Java.ComGoogleAppengineApiDatastoreDev.LocalDatastoreService
132
131
 
133
132
  delegate.set_property(
@@ -149,9 +148,15 @@ module AppEngine
149
148
  # instead of dev_appserver. In that case you will need to install
150
149
  # and configure a test environment for each request.
151
150
  def install_api_stubs
151
+ current_delegate = ApiProxy.delegate
152
+ current_delegate.stop if current_delegate.respond_to? :stop
153
+
152
154
  self.app_dir = '.' if app_dir.nil?
153
155
  delegate = factory.create
154
156
  ApiProxy::setDelegate(delegate)
157
+ at_exit do
158
+ delegate.stop
159
+ end
155
160
  delegate
156
161
  end
157
162
 
@@ -78,16 +78,30 @@ module AppEngine
78
78
  alias == equals?
79
79
  alias to_s toString
80
80
 
81
- if nil # rdoc only
81
+ class << self
82
+ alias java_new new # :nodoc:
83
+
82
84
  # Creates a new User.
83
85
  #
84
86
  # Args:
85
87
  # - email: a non-nil email address.
86
- # - auth_domain: a non-nil domain name into which this user has
88
+ # - auth_domain: an optinoal domain name into which this user has
87
89
  # authenticated, or "gmail.com" for normal Google authentication.
88
- def initialize(email, auth_domain)
90
+ def new(email, auth_domain=nil)
91
+ unless auth_domain
92
+ env = AppEngine::ApiProxy.current_environment
93
+ auth_domain = if env
94
+ env.getAuthDomain
95
+ else
96
+ 'gmail.com'
97
+ end
98
+ end
99
+
100
+ java_new(email, auth_domain)
89
101
  end
90
-
102
+ end
103
+
104
+ if nil # rdoc only
91
105
  # Return this user's nickname. The nickname will be a unique, human
92
106
  # readable identifier for this user with respect to this application.
93
107
  # It will be an email address for some users, but not all.
@@ -19,5 +19,5 @@ $:.unshift(File.dirname(__FILE__)) unless
19
19
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
20
20
 
21
21
  module AppEngine
22
- VERSION = '0.0.3'
22
+ VERSION = '0.0.4'
23
23
  end
@@ -35,6 +35,16 @@ describe AppEngine::Datastore do
35
35
  stored[:b].should == "b"
36
36
  end
37
37
 
38
+ it "should support Text" do
39
+ entity = Datastore::Entity.new("Test")
40
+ entity[:a] = Datastore::Text.new("a")
41
+ Datastore.put(entity)
42
+ stored = Datastore.get(entity.key)
43
+ stored[:a].should be_a(Datastore::Text)
44
+ stored[:a].should == "a"
45
+ stored.to_hash['a'].should == "a"
46
+ end
47
+
38
48
  it "should put many" do
39
49
  a = Datastore::Entity.new("A")
40
50
  b = Datastore::Entity.new("B")
@@ -115,6 +125,13 @@ describe AppEngine::Datastore::Query do
115
125
  'name', Query::EQUAL, 'Bob').should == q
116
126
  end
117
127
 
128
+ it 'should support symbol ops' do
129
+ q = Query.new("Foo")
130
+ q.set_ancestor(@a.key).sort('name').filter(
131
+ 'name', :==, 'aa')
132
+ q.fetch.to_a.should == [@aa]
133
+ end
134
+
118
135
  it "should support ancestor" do
119
136
  a = @a.key
120
137
  q = Query.new("A", a)
@@ -207,3 +207,11 @@ describe AppEngine::Datastore::Entity do
207
207
  @entity.to_hash.should == props
208
208
  end
209
209
  end
210
+
211
+ describe AppEngine::Datastore::Text do
212
+ it "should support to_s" do
213
+ t = AppEngine::Datastore::Text.new("foo")
214
+ t.to_s.should == t
215
+ end
216
+ end
217
+
data/spec/users_spec.rb CHANGED
@@ -55,4 +55,15 @@ describe AppEngine::Users do
55
55
  login.should =~ /foobar/
56
56
  logout.should =~ /foobaz/
57
57
  end
58
+
59
+ it 'should support new without auth domain' do
60
+ user = AppEngine::Users::User.new('foo@example.com')
61
+ user.auth_domain.should == 'gmail.com'
62
+ end
63
+
64
+
65
+ it 'should support new with auth domain' do
66
+ user = AppEngine::Users::User.new('foo@example.com', 'example.com')
67
+ user.auth_domain.should == 'example.com'
68
+ end
58
69
  end
metadata CHANGED
@@ -10,11 +10,10 @@ email:
10
10
  cert_chain: []
11
11
 
12
12
  summary: APIs and utilities for using JRuby on Google App Engine
13
- post_install_message: PostInstall.txt
13
+ post_install_message:
14
14
  extra_rdoc_files:
15
15
  - History.txt
16
16
  - Manifest.txt
17
- - PostInstall.txt
18
17
  - README.rdoc
19
18
  homepage: http://code.google.com/p/appengine-jruby
20
19
  signing_key:
@@ -38,7 +37,6 @@ default_executable:
38
37
  files:
39
38
  - History.txt
40
39
  - Manifest.txt
41
- - PostInstall.txt
42
40
  - README.rdoc
43
41
  - Rakefile
44
42
  - lib/appengine-apis.rb
@@ -80,12 +78,12 @@ requirements: []
80
78
 
81
79
  authors:
82
80
  - Ryan Brown
83
- date: 2009-04-25 07:00:00 +00:00
81
+ date: 2009-05-06 07:00:00 +00:00
84
82
  platform: ruby
85
83
  test_files: []
86
84
 
87
85
  version: !ruby/object:Gem::Version
88
- version: 0.0.3
86
+ version: 0.0.4
89
87
  require_paths:
90
88
  - lib
91
89
  dependencies:
data/PostInstall.txt DELETED
@@ -1,12 +0,0 @@
1
-
2
- To use the local datastore you need to have the Google App Engine SDK for Java
3
- installed
4
- (http://code.google.com/appengine/docs/java/gettingstarted/installing.html).
5
- Then you need to add several jars to your classpath.
6
-
7
- For example:
8
- $ export SDK=`pwd`/appengine-java-sdk/lib
9
- $ export CLASSPATH=$SDK/shared/appengine-local-runtime-shared.jar:$SDK/impl/appengine-api-stubs.jar:$SDK/impl/appengine-api.jar:$SDK/impl/appengine-local-runtime.jar
10
-
11
- For more information on appengine-apis, see
12
- http://code.google.com/p/appengine-jruby