appengine-utils 0.0.0 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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