appengine-utils 0.0.0 → 0.1.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.
data/Gemfile CHANGED
@@ -7,6 +7,8 @@ source "http://rubygems.org"
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
 
9
9
  gem "dm-core", "1.0.2"
10
+ gem "dm-validations", "1.0.2"
11
+
10
12
  gem "appengine-sdk", "1.4.0"
11
13
  gem "appengine-apis", "0.0.22"
12
14
 
data/Gemfile.lock CHANGED
@@ -12,6 +12,8 @@ GEM
12
12
  dm-core (1.0.2)
13
13
  addressable (~> 2.2)
14
14
  extlib (~> 0.9.15)
15
+ dm-validations (1.0.2)
16
+ dm-core (~> 1.0.2)
15
17
  extlib (0.9.15)
16
18
  git (1.2.5)
17
19
  jeweler (1.5.1)
@@ -35,6 +37,7 @@ DEPENDENCIES
35
37
  appengine-sdk (= 1.4.0)
36
38
  bundler (~> 1.0.0)
37
39
  dm-core (= 1.0.2)
40
+ dm-validations (= 1.0.2)
38
41
  jeweler (~> 1.5.1)
39
42
  rcov
40
43
  rspec (= 1.3.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.1.0
@@ -0,0 +1,86 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{appengine-utils}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Marcel Schlimper"]
12
+ s.date = %q{2011-02-08}
13
+ s.description = %q{some helper and util stuff for the jruby wrapper for the google app engine to make life easy}
14
+ s.email = %q{mschlimp@googlemail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "appengine-utils.gemspec",
29
+ "lib/appengine-utils.rb",
30
+ "lib/appengine-utils/datastore/blob.rb",
31
+ "lib/appengine-utils/model.rb",
32
+ "lib/appengine-utils/model/relationship.rb",
33
+ "spec/appengine-utils/datastore/blob_spec.rb",
34
+ "spec/appengine-utils/model_spec.rb",
35
+ "spec/appengine-utils/relationship_spec.rb",
36
+ "spec/appengine-utils_spec.rb",
37
+ "spec/spec_helper.rb"
38
+ ]
39
+ s.homepage = %q{http://github.com/mschlimp/appengine-utils}
40
+ s.licenses = ["MIT"]
41
+ s.require_paths = ["lib"]
42
+ s.rubygems_version = %q{1.3.6}
43
+ s.summary = %q{some helper and util stuff for the jruby wrapper for the google app engine}
44
+ s.test_files = [
45
+ "spec/appengine-utils/datastore/blob_spec.rb",
46
+ "spec/appengine-utils/model_spec.rb",
47
+ "spec/appengine-utils/relationship_spec.rb",
48
+ "spec/appengine-utils_spec.rb",
49
+ "spec/spec_helper.rb"
50
+ ]
51
+
52
+ if s.respond_to? :specification_version then
53
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
54
+ s.specification_version = 3
55
+
56
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
57
+ s.add_runtime_dependency(%q<dm-core>, ["= 1.0.2"])
58
+ s.add_runtime_dependency(%q<dm-validations>, ["= 1.0.2"])
59
+ s.add_runtime_dependency(%q<appengine-sdk>, ["= 1.4.0"])
60
+ s.add_runtime_dependency(%q<appengine-apis>, ["= 0.0.22"])
61
+ s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
62
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
63
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
64
+ s.add_development_dependency(%q<rcov>, [">= 0"])
65
+ else
66
+ s.add_dependency(%q<dm-core>, ["= 1.0.2"])
67
+ s.add_dependency(%q<dm-validations>, ["= 1.0.2"])
68
+ s.add_dependency(%q<appengine-sdk>, ["= 1.4.0"])
69
+ s.add_dependency(%q<appengine-apis>, ["= 0.0.22"])
70
+ s.add_dependency(%q<rspec>, ["= 1.3.0"])
71
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
72
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
73
+ s.add_dependency(%q<rcov>, [">= 0"])
74
+ end
75
+ else
76
+ s.add_dependency(%q<dm-core>, ["= 1.0.2"])
77
+ s.add_dependency(%q<dm-validations>, ["= 1.0.2"])
78
+ s.add_dependency(%q<appengine-sdk>, ["= 1.4.0"])
79
+ s.add_dependency(%q<appengine-apis>, ["= 0.0.22"])
80
+ s.add_dependency(%q<rspec>, ["= 1.3.0"])
81
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
82
+ s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
83
+ s.add_dependency(%q<rcov>, [">= 0"])
84
+ end
85
+ end
86
+
@@ -0,0 +1,83 @@
1
+ module DataMapper
2
+ module Model
3
+ module Relationship
4
+ def blob(name)
5
+ add_relation_property(name)
6
+ add_model_reader(name)
7
+ add_model_writer(name)
8
+
9
+ add_before_save_method(name)
10
+ add_before_destroy_method(name)
11
+
12
+ add_filter_methods(name)
13
+
14
+ end
15
+
16
+ private
17
+
18
+ def add_model_reader(name)
19
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
20
+ chainable do
21
+ def #{name}
22
+ if self.#{name}_id && !@#{name}
23
+ @#{name} = AppEngineUtils::Datastore::Blob.new.read(self.#{name}_id)
24
+ end
25
+ @#{name}
26
+
27
+ end
28
+ end
29
+ RUBY
30
+ end
31
+
32
+ #TODO: add model_writer
33
+ def add_model_writer(name)
34
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
35
+ chainable do
36
+ def #{name}=(value)
37
+ @#{name}=value
38
+ end
39
+ end
40
+ RUBY
41
+ end
42
+
43
+ def add_relation_property(name)
44
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
45
+ property :#{name}_id, String
46
+ RUBY
47
+ end
48
+
49
+ def add_filter_methods(name)
50
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
51
+ before :save, :before_save_#{name}
52
+ before :destroy, :before_destroy_#{name}
53
+ RUBY
54
+ end
55
+
56
+ def add_before_save_method(name)
57
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
58
+ def before_save_#{name}
59
+ if self.#{name}_id
60
+ blob = AppEngineUtils::Datastore::Blob.new
61
+ blob.destroy(self.#{name}_id)
62
+ end
63
+ if #{name}
64
+ blob = AppEngineUtils::Datastore::Blob.new
65
+ key = blob.create(#{name})
66
+ self.#{name}_id= key
67
+ end
68
+ end
69
+ RUBY
70
+ end
71
+
72
+ def add_before_destroy_method(name)
73
+ class_eval <<-RUBY, __FILE__, __LINE__ + 1
74
+ def before_destroy_#{name}
75
+ #if valid?
76
+ #end
77
+ end
78
+ RUBY
79
+ end
80
+
81
+ end
82
+ end
83
+ end
@@ -1,30 +1,32 @@
1
1
  module DataMapper
2
2
  module Model
3
-
3
+
4
+ include Relationship
5
+ #
4
6
  #TODO: implementation of first_like
5
- def first_like(*args)
6
- first_arg = args.first
7
- last_args= args[1..args.last]
8
- first_arg_array = first_args.split(" ")
7
+ #def first_like(*args)
8
+ # first_arg = args.first
9
+ # last_args= args[1..args.last]
10
+ # first_arg_array = first_args.split(" ")
9
11
 
10
12
  #TODO: first_like: splite the column test
11
13
  #TODO: get the ids from the single values
12
14
  #TODO: prepair the find first
13
15
  #TODO: run the statement
14
16
  #TODO: return the result
15
- end
17
+ #end
16
18
 
17
- def all_like(*args)
18
- end
19
+ #def all_like(*args)
20
+ #end
19
21
 
20
- private
22
+ #private
21
23
 
22
- def all_for_token(tokens)
23
- tokens.each do |token|
24
+ #def all_for_token(tokens)
25
+ # tokens.each do |token|
24
26
  #TODO: find all relations for the token in the special table
25
27
  #TODO: like_model_name_table
26
28
 
27
- end
28
- end
29
+ # end
30
+ #end
29
31
  end
30
32
  end
@@ -1,2 +1,4 @@
1
+ require 'appengine-utils/model/relationship'
2
+ require 'appengine-utils/datastore/blob'
3
+
1
4
  require 'appengine-utils/model'
2
- require 'appengine-utils/datastore/blob'
@@ -0,0 +1,126 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require 'appengine-utils/model/relationship'
3
+ require 'dm-core'
4
+ require 'dm-validations'
5
+ require 'dm-serializer'
6
+
7
+ DataMapper.setup(:default, "appengine://auto")
8
+ DataMapper.repository.adapter.singular_naming_convention!
9
+
10
+
11
+ describe DataMapper::Model::Relationship do
12
+
13
+ it 'should create a DM Model with a blob attribute' do
14
+ model = FixtureModel.new
15
+ model.methods.include?("test_blob").should be_true
16
+ end
17
+
18
+ it 'should create a DM Model with a blob relation property' do
19
+ model = FixtureModel.new
20
+ model.methods.include?("test_blob_id").should be_true
21
+ model.methods.include?("test_blob_id=").should be_true
22
+ end
23
+
24
+ describe "filter methods" do
25
+
26
+ it 'should have a filter method for save' do
27
+ model = FixtureModel.new
28
+ model.methods.include?("before_save_test_blob").should be_true
29
+ end
30
+
31
+ it 'should have a filter method for destroy' do
32
+ model = FixtureModel.new
33
+ model.methods.include?("before_destroy_test_blob").should be_true
34
+ end
35
+ end
36
+
37
+ describe "call the filter methods" do
38
+ it 'should call the before save method' do
39
+ model = FixtureModel.new(:name => "test model")
40
+ model.should_receive(:before_save_test_blob).should be_true
41
+ model.save
42
+ end
43
+
44
+ it 'should call the before destroy method' do
45
+ model = FixtureModel.new(:name => "test model")
46
+ model.should_receive(:before_destroy_test_blob).should be_true
47
+ model.save
48
+ model.destroy
49
+ end
50
+ end
51
+
52
+ describe "add a blob entity to the model" do
53
+ it 'should have a blob_test_id attribute' do
54
+ dataset = "\1" * 10
55
+
56
+ model = FixtureModel.new(:name => "test model")
57
+ model.test_blob=dataset
58
+ model.save.should be_true
59
+ model.test_blob_id.should_not be_nil
60
+
61
+ end
62
+ it 'should have a blob relation' do
63
+ dataset = "\1" * 10
64
+
65
+ model = FixtureModel.new(:name=> "test model")
66
+ model.test_blob= dataset
67
+ model.save
68
+ model.test_blob.should_not be_nil
69
+ end
70
+ end
71
+
72
+ describe "update a blob entity to the model" do
73
+ it 'should update a blob_test_id attribute' do
74
+ dataset = "\1" * 10
75
+
76
+ model = FixtureModel.new(:name => "test model")
77
+ model.test_blob= dataset
78
+ model.save
79
+
80
+ update_dataset = "\1" * 100
81
+ model.test_blob= update_dataset
82
+ #TODO: update without before :save???
83
+ model.save
84
+
85
+ model.test_blob.size.should == 100
86
+ end
87
+
88
+ end
89
+
90
+ describe "destroy a blob entity with the model" do
91
+ it 'should not have a blob_entity with the given key' do
92
+ dataset = "\1" * 10
93
+
94
+ model = FixtureModel.new(:name => "test model")
95
+ model.test_blob= dataset
96
+ model.save
97
+
98
+ key = model.test_blob_id
99
+
100
+ @entity = AppEngineUtils::Datastore::Blob.new
101
+ @entity.read(key).should_not be_nil
102
+ end
103
+ end
104
+
105
+ describe "read a blob entity with the model" do
106
+ it 'should read a blob_entity with the given key' do
107
+ dataset = "\1" * 10
108
+
109
+ model = FixtureModel.new(:name => "test model last")
110
+ model.test_blob= dataset
111
+ model.save
112
+ read_model = FixtureModel.first(:name => "test model last")
113
+ read_model.test_blob.should_not be_nil
114
+ end
115
+ end
116
+ end
117
+
118
+
119
+ class FixtureModel
120
+ include DataMapper::Resource
121
+
122
+ property :id, Serial
123
+ property :name, String
124
+
125
+ blob :test_blob
126
+ end
data/spec/spec_helper.rb CHANGED
@@ -9,4 +9,7 @@ end
9
9
 
10
10
  $:.unshift(File.dirname(__FILE__) + '/../lib')
11
11
  require 'appengine-apis/testing'
12
- AppEngine::Testing.setup
12
+ require 'dm-core'
13
+
14
+ AppEngine::Testing.setup
15
+ require '../lib/appengine-utils'
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
+ - 1
7
8
  - 0
8
- - 0
9
- version: 0.0.0
9
+ version: 0.1.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Marcel Schlimper
@@ -14,13 +14,26 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-29 00:00:00 +01:00
17
+ date: 2011-02-08 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: dm-core
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "="
25
+ - !ruby/object:Gem::Version
26
+ segments:
27
+ - 1
28
+ - 0
29
+ - 2
30
+ version: 1.0.2
31
+ requirement: *id001
22
32
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
33
+ type: :runtime
34
+ - !ruby/object:Gem::Dependency
35
+ name: dm-validations
36
+ version_requirements: &id002 !ruby/object:Gem::Requirement
24
37
  requirements:
25
38
  - - "="
26
39
  - !ruby/object:Gem::Version
@@ -29,12 +42,12 @@ dependencies:
29
42
  - 0
30
43
  - 2
31
44
  version: 1.0.2
45
+ requirement: *id002
46
+ prerelease: false
32
47
  type: :runtime
33
- version_requirements: *id001
34
48
  - !ruby/object:Gem::Dependency
35
49
  name: appengine-sdk
36
- prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
50
+ version_requirements: &id003 !ruby/object:Gem::Requirement
38
51
  requirements:
39
52
  - - "="
40
53
  - !ruby/object:Gem::Version
@@ -43,12 +56,12 @@ dependencies:
43
56
  - 4
44
57
  - 0
45
58
  version: 1.4.0
59
+ requirement: *id003
60
+ prerelease: false
46
61
  type: :runtime
47
- version_requirements: *id002
48
62
  - !ruby/object:Gem::Dependency
49
63
  name: appengine-apis
50
- prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
64
+ version_requirements: &id004 !ruby/object:Gem::Requirement
52
65
  requirements:
53
66
  - - "="
54
67
  - !ruby/object:Gem::Version
@@ -57,12 +70,12 @@ dependencies:
57
70
  - 0
58
71
  - 22
59
72
  version: 0.0.22
73
+ requirement: *id004
74
+ prerelease: false
60
75
  type: :runtime
61
- version_requirements: *id003
62
76
  - !ruby/object:Gem::Dependency
63
77
  name: rspec
64
- prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
78
+ version_requirements: &id005 !ruby/object:Gem::Requirement
66
79
  requirements:
67
80
  - - "="
68
81
  - !ruby/object:Gem::Version
@@ -71,12 +84,12 @@ dependencies:
71
84
  - 3
72
85
  - 0
73
86
  version: 1.3.0
87
+ requirement: *id005
88
+ prerelease: false
74
89
  type: :development
75
- version_requirements: *id004
76
90
  - !ruby/object:Gem::Dependency
77
91
  name: bundler
78
- prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
92
+ version_requirements: &id006 !ruby/object:Gem::Requirement
80
93
  requirements:
81
94
  - - ~>
82
95
  - !ruby/object:Gem::Version
@@ -85,12 +98,12 @@ dependencies:
85
98
  - 0
86
99
  - 0
87
100
  version: 1.0.0
101
+ requirement: *id006
102
+ prerelease: false
88
103
  type: :development
89
- version_requirements: *id005
90
104
  - !ruby/object:Gem::Dependency
91
105
  name: jeweler
92
- prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
106
+ version_requirements: &id007 !ruby/object:Gem::Requirement
94
107
  requirements:
95
108
  - - ~>
96
109
  - !ruby/object:Gem::Version
@@ -99,20 +112,21 @@ dependencies:
99
112
  - 5
100
113
  - 1
101
114
  version: 1.5.1
115
+ requirement: *id007
116
+ prerelease: false
102
117
  type: :development
103
- version_requirements: *id006
104
118
  - !ruby/object:Gem::Dependency
105
119
  name: rcov
106
- prerelease: false
107
- requirement: &id007 !ruby/object:Gem::Requirement
120
+ version_requirements: &id008 !ruby/object:Gem::Requirement
108
121
  requirements:
109
122
  - - ">="
110
123
  - !ruby/object:Gem::Version
111
124
  segments:
112
125
  - 0
113
126
  version: "0"
127
+ requirement: *id008
128
+ prerelease: false
114
129
  type: :development
115
- version_requirements: *id007
116
130
  description: some helper and util stuff for the jruby wrapper for the google app engine to make life easy
117
131
  email: mschlimp@googlemail.com
118
132
  executables: []
@@ -131,11 +145,14 @@ files:
131
145
  - README.rdoc
132
146
  - Rakefile
133
147
  - VERSION
148
+ - appengine-utils.gemspec
134
149
  - lib/appengine-utils.rb
135
150
  - lib/appengine-utils/datastore/blob.rb
136
151
  - lib/appengine-utils/model.rb
152
+ - lib/appengine-utils/model/relationship.rb
137
153
  - spec/appengine-utils/datastore/blob_spec.rb
138
154
  - spec/appengine-utils/model_spec.rb
155
+ - spec/appengine-utils/relationship_spec.rb
139
156
  - spec/appengine-utils_spec.rb
140
157
  - spec/spec_helper.rb
141
158
  has_rdoc: true
@@ -171,5 +188,6 @@ summary: some helper and util stuff for the jruby wrapper for the google app eng
171
188
  test_files:
172
189
  - spec/appengine-utils/datastore/blob_spec.rb
173
190
  - spec/appengine-utils/model_spec.rb
191
+ - spec/appengine-utils/relationship_spec.rb
174
192
  - spec/appengine-utils_spec.rb
175
193
  - spec/spec_helper.rb