orm_adapter 0.0.7 → 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/.rspec ADDED
@@ -0,0 +1 @@
1
+ --colour
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.3
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- orm_adapter (0.0.6)
4
+ orm_adapter (0.1.0)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -104,8 +104,6 @@ GEM
104
104
  diff-lcs (~> 1.1.2)
105
105
  rspec-mocks (2.8.0)
106
106
  sqlite3 (1.3.5)
107
- sqlite3-ruby (1.3.3)
108
- sqlite3 (>= 1.3.3)
109
107
  stringex (1.3.0)
110
108
  tzinfo (0.3.31)
111
109
  uuidtools (2.1.2)
@@ -127,5 +125,5 @@ DEPENDENCIES
127
125
  orm_adapter!
128
126
  rake (>= 0.8.7)
129
127
  rspec (>= 2.4.0)
130
- sqlite3-ruby (>= 1.3.2)
128
+ sqlite3 (>= 1.3.2)
131
129
  yard (>= 0.6.0)
data/History.txt CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.1.0
2
+
3
+ * Add #destroy(object) to the API [Fred Wu]
4
+
5
+
1
6
  == 0.0.7
2
7
 
3
8
  * Lazy load Active Record [José Valim]
data/README.rdoc CHANGED
@@ -54,6 +54,8 @@ orm_adapter is an extraction from {pickle}[http://github.com/ianwhite/pickle] by
54
54
 
55
55
  {Luke Cunningham}[http://github.com/icaruswings] contributes the Mongo Mapper adapter.
56
56
 
57
+ {Fred Wu}[http://github.com/fredwu] contributes the #destroy methods.
58
+
57
59
 
58
60
  == Development
59
61
 
data/Rakefile CHANGED
@@ -1,8 +1,12 @@
1
- require 'rubygems'
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+
2
8
  require 'rake'
3
9
  require 'rspec/core/rake_task'
4
- require 'yard'
5
- require 'git'
6
10
  $:.push File.expand_path("../lib", __FILE__)
7
11
  require "orm_adapter/version"
8
12
 
@@ -10,47 +14,24 @@ task :default => :spec
10
14
 
11
15
  RSpec::Core::RakeTask.new(:spec)
12
16
 
13
- YARD::Rake::YardocTask.new(:doc) do |t|
14
- t.files = ['lib/**/*.rb', 'README.rdoc']
17
+ begin
18
+ require 'yard'
19
+ YARD::Rake::YardocTask.new(:doc) do |t|
20
+ t.files = ['lib/**/*.rb', 'README.rdoc']
21
+ end
22
+ rescue LoadError
23
+ task :doc do
24
+ puts "install yard to generate the docs"
25
+ end
15
26
  end
16
27
 
17
- task :build do
18
- system "gem build orm_adapter.gemspec"
19
- end
28
+ Bundler::GemHelper.install_tasks
20
29
 
21
- namespace :release do
22
- task :rubygems => :pre do
23
- system "gem push orm_adapter-#{OrmAdapter::VERSION}.gem"
24
- end
25
-
26
- task :github => :pre do
27
- tag = "v#{OrmAdapter::VERSION}"
28
- git = Git.open('.')
29
-
30
- if (git.tag(tag) rescue nil)
31
- raise "** repo is already tagged with: #{tag}"
32
- end
33
-
34
- git.add_tag(tag)
35
- git.push('origin', tag)
36
- end
37
-
38
- task :pre => [:spec, :build] do
39
- git = Git.open('.')
40
-
41
- if File.exists?("Gemfile.lock") && File.read("Gemfile.lock") != File.read("Gemfile.lock.development")
42
- cp "Gemfile.lock", "Gemfile.lock.development"
43
- raise "** Gemfile.lock.development has been updated, please commit these changes."
44
- end
45
-
46
- if git.status.changed.any? || git.status.added.any? || git.status.deleted.any?
47
- raise "** repo is not clean, try committing some files"
48
- end
49
-
50
- if git.object('HEAD').sha != git.object('origin/master').sha
51
- raise "** origin does not match HEAD, have you pushed?"
52
- end
30
+ task :release => :check_gemfile
31
+
32
+ task :check_gemfile do
33
+ if File.exists?("Gemfile.lock") && File.read("Gemfile.lock") != File.read("Gemfile.lock.development")
34
+ cp "Gemfile.lock", "Gemfile.lock.development"
35
+ raise "** Gemfile.lock.development has been updated, please commit these changes."
53
36
  end
54
-
55
- task :all => ['release:github', 'release:rubygems']
56
37
  end
@@ -1,26 +1,17 @@
1
- begin
2
- require 'activerecord'
3
- rescue LoadError
4
- require 'active_record'
5
- end
1
+ require 'active_record'
6
2
 
7
3
  module OrmAdapter
8
4
  class ActiveRecord < Base
9
5
  # Do not consider these to be part of the class list
10
6
  def self.except_classes
11
7
  @@except_classes ||= [
12
- "CGI::Session::ActiveRecordStore::Session",
13
8
  "ActiveRecord::SessionStore::Session"
14
9
  ]
15
10
  end
16
11
 
17
12
  # Gets a list of the available models for this adapter
18
13
  def self.model_classes
19
- begin
20
- klasses = ::ActiveRecord::Base.__send__(:descendants) # Rails 3
21
- rescue
22
- klasses = ::ActiveRecord::Base.__send__(:subclasses) # Rails 2
23
- end
14
+ klasses = ::ActiveRecord::Base.__send__(:descendants)
24
15
 
25
16
  klasses.select do |klass|
26
17
  !klass.abstract_class? && !except_classes.include?(klass.name)
@@ -39,19 +30,19 @@ module OrmAdapter
39
30
 
40
31
  # @see OrmAdapter::Base#get
41
32
  def get(id)
42
- klass.first :conditions => { klass.primary_key => wrap_key(id) }
33
+ klass.where(klass.primary_key => wrap_key(id)).first
43
34
  end
44
35
 
45
36
  # @see OrmAdapter::Base#find_first
46
37
  def find_first(options)
47
38
  conditions, order = extract_conditions_and_order!(options)
48
- klass.first :conditions => conditions_to_fields(conditions), :order => order_clause(order)
39
+ klass.where(conditions_to_fields(conditions)).order(*order_clause(order)).first
49
40
  end
50
41
 
51
42
  # @see OrmAdapter::Base#find_all
52
43
  def find_all(options)
53
44
  conditions, order = extract_conditions_and_order!(options)
54
- klass.all :conditions => conditions_to_fields(conditions), :order => order_clause(order)
45
+ klass.where(conditions_to_fields(conditions)).order(*order_clause(order)).all
55
46
  end
56
47
 
57
48
  # @see OrmAdapter::Base#create!
@@ -59,6 +50,11 @@ module OrmAdapter
59
50
  klass.create!(attributes)
60
51
  end
61
52
 
53
+ # @see OrmAdapter::Base#destroy
54
+ def destroy(object)
55
+ object.destroy && true if valid_object?(object)
56
+ end
57
+
62
58
  protected
63
59
 
64
60
  # Introspects the klass to convert and objects in conditions into foreign key and type fields
@@ -50,6 +50,11 @@ module DataMapper
50
50
  klass.create(attributes)
51
51
  end
52
52
 
53
+ # @see OrmAdapter::Base#destroy
54
+ def destroy(object)
55
+ object.destroy if valid_object?(object)
56
+ end
57
+
53
58
  protected
54
59
 
55
60
  def order_clause(order)
@@ -51,6 +51,11 @@ module MongoMapper
51
51
  klass.create!(attributes)
52
52
  end
53
53
 
54
+ # @see OrmAdapter::Base#destroy
55
+ def destroy(object)
56
+ object.destroy if valid_object?(object)
57
+ end
58
+
54
59
  protected
55
60
 
56
61
  # converts and documents to ids
@@ -49,6 +49,11 @@ module Mongoid
49
49
  klass.create!(attributes)
50
50
  end
51
51
 
52
+ # @see OrmAdapter::Base#destroy
53
+ def destroy(object)
54
+ object.destroy if valid_object?(object)
55
+ end
56
+
52
57
  protected
53
58
 
54
59
  # converts and documents to ids
@@ -42,7 +42,7 @@ module OrmAdapter
42
42
  #
43
43
  # User.to_adapter.get(@user.to_key) == @user
44
44
  #
45
- def get
45
+ def get(id)
46
46
  raise NotSupportedError
47
47
  end
48
48
 
@@ -78,8 +78,17 @@ module OrmAdapter
78
78
  raise NotSupportedError
79
79
  end
80
80
 
81
+ # Destroy an instance by passing in the instance itself.
82
+ def destroy(object)
83
+ raise NotSupportedError
84
+ end
85
+
81
86
  protected
82
87
 
88
+ def valid_object?(object)
89
+ object.class == klass
90
+ end
91
+
83
92
  def wrap_key(key)
84
93
  key.is_a?(Array) ? key.first : key
85
94
  end
@@ -1,3 +1,3 @@
1
1
  module OrmAdapter
2
- VERSION = "0.0.7"
2
+ VERSION = "0.1.0"
3
3
  end
data/orm_adapter.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.files = `git ls-files`.split("\n")
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.require_paths = ["lib"]
20
-
20
+
21
21
  s.add_development_dependency "bundler", ">= 1.0.0"
22
22
  s.add_development_dependency "git", ">= 1.2.5"
23
23
  s.add_development_dependency "yard", ">= 0.6.0"
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency "mongo_mapper", ">= 0.9.0"
28
28
  s.add_development_dependency "bson_ext", ">= 1.3.0"
29
29
  s.add_development_dependency "rspec", ">= 2.4.0"
30
- s.add_development_dependency "sqlite3-ruby", ">= 1.3.2"
30
+ s.add_development_dependency "sqlite3", ">= 1.3.2"
31
31
  s.add_development_dependency "datamapper", ">= 1.0"
32
32
  s.add_development_dependency "dm-sqlite-adapter", ">= 1.0"
33
33
  s.add_development_dependency "dm-active_model", ">= 1.0"
@@ -37,7 +37,7 @@ else
37
37
  subject { ActiveRecord::Base::OrmAdapter }
38
38
 
39
39
  specify "#except_classes should return the names of active record session store classes" do
40
- subject.except_classes.should == ["CGI::Session::ActiveRecordStore::Session", "ActiveRecord::SessionStore::Session"]
40
+ subject.except_classes.should == ["ActiveRecord::SessionStore::Session"]
41
41
  end
42
42
 
43
43
  specify "#model_classes should return all of the non abstract model classes (that are not in except_classes)" do
@@ -23,6 +23,13 @@ describe OrmAdapter::Base do
23
23
  subject.send(:extract_conditions_and_order!, :conditions => conditions, :order => order).should == [conditions, order]
24
24
  end
25
25
 
26
+ describe "#valid_object?" do
27
+ it "determines whether an object is valid for the current model class" do
28
+ subject.send(:valid_object?, Object.new).should be_true
29
+ subject.send(:valid_object?, String.new).should be_false
30
+ end
31
+ end
32
+
26
33
  describe "#normalize_order" do
27
34
  specify "(nil) returns []" do
28
35
  subject.send(:normalize_order, nil).should == []
@@ -60,7 +60,7 @@ shared_examples_for "example app with orm_adapter" do
60
60
  end
61
61
 
62
62
  it "should raise an error if there is no instance with that id" do
63
- lambda { user_adapter.get!("non-exitent id") }.should raise_error
63
+ lambda { user_adapter.get!("nonexistent id") }.should raise_error
64
64
  end
65
65
  end
66
66
 
@@ -76,10 +76,10 @@ shared_examples_for "example app with orm_adapter" do
76
76
  end
77
77
 
78
78
  it "should return nil if there is no instance with that id" do
79
- user_adapter.get("non-exitent id").should be_nil
79
+ user_adapter.get("nonexistent id").should be_nil
80
80
  end
81
81
  end
82
-
82
+
83
83
  describe "#find_first" do
84
84
  describe "(conditions)" do
85
85
  it "should return first model matching conditions, if it exists" do
@@ -177,5 +177,23 @@ shared_examples_for "example app with orm_adapter" do
177
177
  reload_model(user).notes.should == notes
178
178
  end
179
179
  end
180
+
181
+ describe "#destroy(instance)" do
182
+ it "should destroy the instance if it exists" do
183
+ user = create_model(user_class)
184
+ user_adapter.destroy(user).should == true
185
+ user_adapter.get(user.id).should be_nil
186
+ end
187
+
188
+ it "should return nil if passed with an invalid instance" do
189
+ user_adapter.destroy("nonexistent instance").should be_nil
190
+ end
191
+
192
+ it "should not destroy the instance if it doesn't match the model class" do
193
+ user = create_model(user_class)
194
+ note_adapter.destroy(user).should be_nil
195
+ user_adapter.get(user.id).should == user
196
+ end
197
+ end
180
198
  end
181
199
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orm_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-25 00:00:00.000000000 Z
13
+ date: 2012-06-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
- requirement: &2157226320 !ruby/object:Gem::Requirement
17
+ requirement: &70097699980460 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.0.0
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *2157226320
25
+ version_requirements: *70097699980460
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: git
28
- requirement: &2157225580 !ruby/object:Gem::Requirement
28
+ requirement: &70097699979600 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.2.5
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *2157225580
36
+ version_requirements: *70097699979600
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: yard
39
- requirement: &2157224780 !ruby/object:Gem::Requirement
39
+ requirement: &70097699979000 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 0.6.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2157224780
47
+ version_requirements: *70097699979000
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rake
50
- requirement: &2157224140 !ruby/object:Gem::Requirement
50
+ requirement: &70097699978040 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 0.8.7
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *2157224140
58
+ version_requirements: *70097699978040
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: activerecord
61
- requirement: &2157223380 !ruby/object:Gem::Requirement
61
+ requirement: &70097699977120 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 3.0.0
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2157223380
69
+ version_requirements: *70097699977120
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: mongoid
72
- requirement: &2157222660 !ruby/object:Gem::Requirement
72
+ requirement: &70097699976120 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: 2.0.0.beta.20
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2157222660
80
+ version_requirements: *70097699976120
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: mongo_mapper
83
- requirement: &2157208000 !ruby/object:Gem::Requirement
83
+ requirement: &70097699975540 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 0.9.0
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2157208000
91
+ version_requirements: *70097699975540
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: bson_ext
94
- requirement: &2157204220 !ruby/object:Gem::Requirement
94
+ requirement: &70097699960720 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 1.3.0
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2157204220
102
+ version_requirements: *70097699960720
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rspec
105
- requirement: &2157203000 !ruby/object:Gem::Requirement
105
+ requirement: &70097699957980 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: 2.4.0
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2157203000
113
+ version_requirements: *70097699957980
114
114
  - !ruby/object:Gem::Dependency
115
- name: sqlite3-ruby
116
- requirement: &2157201880 !ruby/object:Gem::Requirement
115
+ name: sqlite3
116
+ requirement: &70097699956440 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: 1.3.2
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2157201880
124
+ version_requirements: *70097699956440
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: datamapper
127
- requirement: &2157201200 !ruby/object:Gem::Requirement
127
+ requirement: &70097699955740 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '1.0'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *2157201200
135
+ version_requirements: *70097699955740
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: dm-sqlite-adapter
138
- requirement: &2157199880 !ruby/object:Gem::Requirement
138
+ requirement: &70097699954920 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: '1.0'
144
144
  type: :development
145
145
  prerelease: false
146
- version_requirements: *2157199880
146
+ version_requirements: *70097699954920
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: dm-active_model
149
- requirement: &2157197540 !ruby/object:Gem::Requirement
149
+ requirement: &70097699953980 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ! '>='
@@ -154,7 +154,7 @@ dependencies:
154
154
  version: '1.0'
155
155
  type: :development
156
156
  prerelease: false
157
- version_requirements: *2157197540
157
+ version_requirements: *70097699953980
158
158
  description: Provides a single point of entry for using basic features of ruby ORMs
159
159
  email: ian.w.white@gmail.com
160
160
  executables: []
@@ -162,6 +162,8 @@ extensions: []
162
162
  extra_rdoc_files: []
163
163
  files:
164
164
  - .gitignore
165
+ - .rspec
166
+ - .travis.yml
165
167
  - Gemfile
166
168
  - Gemfile.lock.development
167
169
  - History.txt
@@ -197,6 +199,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
199
  - - ! '>='
198
200
  - !ruby/object:Gem::Version
199
201
  version: '0'
202
+ segments:
203
+ - 0
204
+ hash: 1483369582695834263
200
205
  required_rubygems_version: !ruby/object:Gem::Requirement
201
206
  none: false
202
207
  requirements: