dm-is-remixable 0.9.11 → 0.10.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/{History.txt → History.rdoc} +4 -0
- data/Manifest.txt +2 -2
- data/{README.txt → README.rdoc} +0 -0
- data/Rakefile +2 -3
- data/lib/dm-is-remixable/is/remixable.rb +42 -22
- data/lib/dm-is-remixable/is/version.rb +1 -1
- data/lib/dm-is-remixable.rb +3 -9
- data/spec/data/addressable.rb +1 -1
- data/spec/data/article.rb +10 -10
- data/spec/data/billable.rb +1 -1
- data/spec/data/bot.rb +5 -7
- data/spec/data/commentable.rb +3 -1
- data/spec/data/image.rb +1 -1
- data/spec/data/rating.rb +1 -4
- data/spec/data/tag.rb +1 -1
- data/spec/data/taggable.rb +1 -4
- data/spec/data/topic.rb +3 -3
- data/spec/data/user.rb +9 -23
- data/spec/data/viewable.rb +1 -1
- data/spec/integration/remixable_spec.rb +19 -43
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +33 -13
- data/tasks/install.rb +1 -1
- data/tasks/spec.rb +4 -4
- metadata +14 -21
data/Manifest.txt
CHANGED
data/{README.txt → README.rdoc}
RENAMED
File without changes
|
data/Rakefile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'pathname'
|
2
|
-
require 'rubygems'
|
3
2
|
|
4
3
|
ROOT = Pathname(__FILE__).dirname.expand_path
|
5
4
|
JRUBY = RUBY_PLATFORM =~ /java/
|
@@ -14,10 +13,10 @@ GEM_NAME = 'dm-is-remixable'
|
|
14
13
|
GEM_VERSION = DataMapper::Is::Remixable::VERSION
|
15
14
|
GEM_DEPENDENCIES = [['dm-core', GEM_VERSION]]
|
16
15
|
GEM_CLEAN = %w[ log pkg coverage ]
|
17
|
-
GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.
|
16
|
+
GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.rdoc LICENSE TODO History.rdoc ] }
|
18
17
|
|
19
18
|
PROJECT_NAME = 'datamapper'
|
20
|
-
PROJECT_URL = "http://github.com/
|
19
|
+
PROJECT_URL = "http://github.com/datamapper/dm-more/tree/master/#{GEM_NAME}"
|
21
20
|
PROJECT_DESCRIPTION = PROJECT_SUMMARY = 'dm-is-remixable allow you to create reusable data functionality'
|
22
21
|
|
23
22
|
[ ROOT, ROOT.parent ].each do |dir|
|
@@ -90,7 +90,7 @@ module DataMapper
|
|
90
90
|
# cardinality <~Fixnum> 1, n, x ...
|
91
91
|
# remixable <Symbol> plural of remixable; i.e. Comment => :comments
|
92
92
|
# options <Hash> options hash
|
93
|
-
# :
|
93
|
+
# :model <String> Remixed Model name (Also creates a storage_name as tableize(:model))
|
94
94
|
# This is the class that will be created from the Remixable Module
|
95
95
|
# The storage_name can be changed via 'enhance' in the class that is remixing
|
96
96
|
# Default: self.name.downcase + "_" + remixable.suffix.pluralize
|
@@ -110,9 +110,7 @@ module DataMapper
|
|
110
110
|
#
|
111
111
|
# One-To-Many; Class-To-Remixable
|
112
112
|
#
|
113
|
-
# remix n, :addressables,
|
114
|
-
# :class_name => "UserAddress",
|
115
|
-
# :as => "addresses"
|
113
|
+
# remix n, :addressables, :model => "UserAddress", :as => "addresses"
|
116
114
|
#
|
117
115
|
# Tables: users, user_addresses
|
118
116
|
# Classes: User, UserAddress
|
@@ -149,26 +147,32 @@ module DataMapper
|
|
149
147
|
raise Exception, "#{remixable_module} is not remixable"
|
150
148
|
end
|
151
149
|
|
150
|
+
if options[:class_name]
|
151
|
+
warn '+options[:class_name]+ is deprecated, use :model instead'
|
152
|
+
options[:model] = options.delete(:class_name)
|
153
|
+
end
|
154
|
+
|
152
155
|
#Merge defaults/options
|
153
156
|
options = {
|
154
157
|
:as => nil,
|
155
|
-
:
|
158
|
+
:model => Extlib::Inflection.classify(self.name.snake_case + "_" + remixable_module.suffix.pluralize),
|
156
159
|
:for => nil,
|
157
160
|
:on => nil,
|
158
161
|
:unique => false,
|
159
|
-
:via => nil
|
162
|
+
:via => nil,
|
163
|
+
:connect => false
|
160
164
|
}.merge(options)
|
161
165
|
|
162
166
|
#Make sure the class hasn't been remixed already
|
163
|
-
unless Object.full_const_defined?(Extlib::Inflection.classify(options[:
|
167
|
+
unless Object.full_const_defined?(Extlib::Inflection.classify(options[:model]))
|
164
168
|
|
165
169
|
#Storage name of our remixed model
|
166
|
-
options[:table_name] = Extlib::Inflection.tableize(options[:
|
170
|
+
options[:table_name] = Extlib::Inflection.tableize(options[:model])
|
167
171
|
|
168
172
|
#Other model to mix with in case of M:M through Remixable
|
169
173
|
options[:other_model] = options[:for] || options[:on]
|
170
174
|
|
171
|
-
DataMapper.logger.info "Generating Remixed Model: #{options[:
|
175
|
+
DataMapper.logger.info "Generating Remixed Model: #{options[:model]}"
|
172
176
|
model = generate_remixed_model(remixable_module, options)
|
173
177
|
|
174
178
|
# map the remixable to the remixed model
|
@@ -197,7 +201,7 @@ module DataMapper
|
|
197
201
|
remix_one_to_many cardinality, model, options
|
198
202
|
end
|
199
203
|
else
|
200
|
-
DataMapper.logger.warn "#{__FILE__}:#{__LINE__} warning: already remixed constant #{options[:
|
204
|
+
DataMapper.logger.warn "#{__FILE__}:#{__LINE__} warning: already remixed constant #{options[:model]}"
|
201
205
|
end
|
202
206
|
end
|
203
207
|
|
@@ -227,8 +231,8 @@ module DataMapper
|
|
227
231
|
#
|
228
232
|
# class Article
|
229
233
|
# include DataMapper::Resource
|
230
|
-
# remix n, :taggings, :for => User, :
|
231
|
-
# remix n, :taggings, :for => Bot, :
|
234
|
+
# remix n, :taggings, :for => User, :model => "UserArticleTagging"
|
235
|
+
# remix n, :taggings, :for => Bot, :model => "BotArticleTagging"
|
232
236
|
#
|
233
237
|
# enhance :taggings, "UserArticleTagging" do
|
234
238
|
# property :updated_at, DateTime
|
@@ -254,7 +258,7 @@ module DataMapper
|
|
254
258
|
unless model.nil?
|
255
259
|
model.class_eval &block
|
256
260
|
else
|
257
|
-
raise Exception, "#{remixable} must be remixed with :
|
261
|
+
raise Exception, "#{remixable} must be remixed with :model option as #{remixable_model} before it can be enhanced"
|
258
262
|
end
|
259
263
|
end
|
260
264
|
|
@@ -285,7 +289,7 @@ module DataMapper
|
|
285
289
|
# model <Class> remixed model that 'self' is relating to
|
286
290
|
# options <Hash> options hash
|
287
291
|
def remix_one_to_many(cardinality, model, options)
|
288
|
-
self.has cardinality, (options[:as] || options[:table_name]).to_sym, :
|
292
|
+
self.has cardinality, (options[:as] || options[:table_name]).to_sym, :model => model.name
|
289
293
|
model.property Extlib::Inflection.foreign_key(self.name).intern, Integer, :nullable => false
|
290
294
|
model.belongs_to belongs_to_name(self.name)
|
291
295
|
end
|
@@ -306,17 +310,22 @@ module DataMapper
|
|
306
310
|
|
307
311
|
# Is M:M between two different classes or the same class
|
308
312
|
unless self.name == options[:other_model].name
|
309
|
-
self.has cardinality, (options[:as] || options[:table_name]).to_sym, :
|
313
|
+
self.has cardinality, (options[:as] || options[:table_name]).to_sym, :model => model.name
|
310
314
|
options[:other_model].has cardinality, options[:table_name].intern
|
311
315
|
|
312
316
|
model.belongs_to belongs_to_name(self.name)
|
313
317
|
model.belongs_to belongs_to_name(options[:other_model].name)
|
318
|
+
if options[:connect]
|
319
|
+
remixed = options[:as]
|
320
|
+
remixed ||= options[:other_model].to_s.snake_case
|
321
|
+
self.has cardinality, (options[:for] || options[:on]).snake_case.pluralize.to_sym, :through => remixed.to_sym
|
322
|
+
end
|
314
323
|
else
|
315
324
|
raise Exception, "options[:via] must be specified when Remixing a module between two of the same class" unless options[:via]
|
316
325
|
|
317
|
-
self.has cardinality, (options[:as] || options[:table_name]).to_sym, :
|
326
|
+
self.has cardinality, (options[:as] || options[:table_name]).to_sym, :model => model.name
|
318
327
|
model.belongs_to belongs_to_name(self.name)
|
319
|
-
model.belongs_to options[:via].intern, :
|
328
|
+
model.belongs_to options[:via].intern, :model => options[:other_model].name, :child_key => ["#{options[:via]}_id".intern]
|
320
329
|
end
|
321
330
|
end
|
322
331
|
|
@@ -334,18 +343,29 @@ module DataMapper
|
|
334
343
|
include DataMapper::Resource
|
335
344
|
end
|
336
345
|
|
337
|
-
#Give remixed model a name and create its constant
|
338
|
-
model = Object.full_const_set(options[:
|
346
|
+
# Give remixed model a name and create its constant
|
347
|
+
model = Object.full_const_set(options[:model], klass)
|
339
348
|
|
340
|
-
#Get instance methods
|
349
|
+
# Get instance methods and the :default context validator
|
341
350
|
model.send(:include,remixable)
|
342
351
|
|
343
|
-
|
352
|
+
if DataMapper.const_defined?('Validate')
|
353
|
+
|
354
|
+
# Port over any other validation contexts to this model. Skip the
|
355
|
+
# default context since it has already been included above.
|
356
|
+
remixable.validators.contexts.each do |context, validators|
|
357
|
+
next if context == :default
|
358
|
+
model.validators.contexts[context] = validators
|
359
|
+
end
|
360
|
+
|
361
|
+
end
|
362
|
+
|
363
|
+
# Port the properties over
|
344
364
|
remixable.properties.each do |prop|
|
345
365
|
model.property(prop.name, prop.type, prop.options)
|
346
366
|
end
|
347
367
|
|
348
|
-
#
|
368
|
+
# Attach remixed model access to RemixeeClassMethods and RemixeeInstanceMethods if defined
|
349
369
|
if Object.full_const_defined? "#{remixable}::RemixeeClassMethods"
|
350
370
|
model.send :extend, Object.full_const_get("#{remixable}::RemixeeClassMethods")
|
351
371
|
end
|
data/lib/dm-is-remixable.rb
CHANGED
@@ -1,13 +1,7 @@
|
|
1
|
-
require '
|
2
|
-
require 'rubygems'
|
3
|
-
|
4
|
-
gem 'dm-core', '0.9.11'
|
5
|
-
require 'dm-core'
|
6
|
-
|
7
|
-
require Pathname(__FILE__).dirname.expand_path / 'dm-is-remixable' / 'is' / 'remixable'
|
1
|
+
require 'dm-is-remixable/is/remixable'
|
8
2
|
|
9
3
|
module DataMapper
|
10
4
|
module Model
|
11
5
|
include DataMapper::Is::Remixable
|
12
|
-
end
|
13
|
-
end
|
6
|
+
end
|
7
|
+
end
|
data/spec/data/addressable.rb
CHANGED
data/spec/data/article.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
1
|
+
require 'data/image'
|
2
|
+
require 'data/commentable'
|
3
|
+
require 'data/viewable'
|
4
|
+
require 'data/taggable'
|
5
|
+
require 'data/user'
|
6
|
+
require 'data/bot'
|
7
|
+
require 'data/tag'
|
8
8
|
|
9
9
|
class Article
|
10
10
|
include DataMapper::Resource
|
11
11
|
|
12
|
-
property :id,
|
12
|
+
property :id, Serial
|
13
13
|
property :title, String
|
14
14
|
property :url, String
|
15
15
|
|
@@ -22,9 +22,9 @@ class Article
|
|
22
22
|
|
23
23
|
remix n, "My::Nested::Remixable::Rating", :as => :ratings
|
24
24
|
|
25
|
-
remix n, :taggable, :as => "user_taggings", :for => "User", :
|
25
|
+
remix n, :taggable, :as => "user_taggings", :for => "User", :model => "UserTagging"
|
26
26
|
|
27
|
-
remix n, :taggable, :as => "bot_taggings", :for => "Bot", :
|
27
|
+
remix n, :taggable, :as => "bot_taggings", :for => "Bot", :model => "BotTagging"
|
28
28
|
|
29
29
|
enhance :viewables do
|
30
30
|
belongs_to :user
|
data/spec/data/billable.rb
CHANGED
data/spec/data/bot.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'data/viewable'
|
2
|
+
require 'data/billable'
|
3
|
+
require 'data/addressable'
|
4
|
+
require 'data/rating'
|
5
5
|
|
6
6
|
class Bot
|
7
7
|
include DataMapper::Resource
|
8
8
|
|
9
|
-
property :id,
|
10
|
-
:key => true,
|
11
|
-
:serial => true
|
9
|
+
property :id, Serial
|
12
10
|
|
13
11
|
property :bot_name, String,
|
14
12
|
:nullable => false,
|
data/spec/data/commentable.rb
CHANGED
@@ -4,8 +4,10 @@ module Commentable
|
|
4
4
|
is :remixable,
|
5
5
|
:suffix => "comment"
|
6
6
|
|
7
|
-
property :id,
|
7
|
+
property :id, Serial
|
8
8
|
property :comment, String
|
9
9
|
property :created_at, DateTime
|
10
10
|
|
11
|
+
validates_present :comment, :context => [ :publish ]
|
12
|
+
|
11
13
|
end
|
data/spec/data/image.rb
CHANGED
data/spec/data/rating.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
module My
|
2
2
|
module Nested
|
3
3
|
module Remixable
|
4
|
-
|
5
4
|
module Rating
|
6
5
|
|
7
6
|
def self.included(base)
|
@@ -14,8 +13,7 @@ module My
|
|
14
13
|
|
15
14
|
# properties
|
16
15
|
|
17
|
-
property :id,
|
18
|
-
|
16
|
+
property :id, Serial
|
19
17
|
property :user_id, Integer, :nullable => false
|
20
18
|
property :rating, Integer, :nullable => false, :default => 0
|
21
19
|
|
@@ -31,7 +29,6 @@ module My
|
|
31
29
|
end
|
32
30
|
|
33
31
|
end
|
34
|
-
|
35
32
|
end
|
36
33
|
end
|
37
34
|
end
|
data/spec/data/tag.rb
CHANGED
data/spec/data/taggable.rb
CHANGED
data/spec/data/topic.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
require
|
1
|
+
require 'data/rating'
|
2
2
|
|
3
3
|
class Topic
|
4
4
|
include DataMapper::Resource
|
5
5
|
|
6
|
-
property :id,
|
6
|
+
property :id, Serial
|
7
7
|
|
8
8
|
property :name, String
|
9
9
|
property :description, String
|
10
10
|
|
11
11
|
remix n, My::Nested::Remixable::Rating,
|
12
12
|
:as => :ratings_for_topic,
|
13
|
-
:
|
13
|
+
:model => "Rating"
|
14
14
|
|
15
15
|
end
|
data/spec/data/user.rb
CHANGED
@@ -1,34 +1,20 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'data/viewable'
|
2
|
+
require 'data/billable'
|
3
|
+
require 'data/addressable'
|
4
|
+
require 'data/rating'
|
5
5
|
|
6
6
|
class User
|
7
|
-
include DataMapper::Resource
|
8
|
-
|
9
|
-
property :id, Integer,
|
10
|
-
:key => true,
|
11
|
-
:serial => true
|
12
7
|
|
13
|
-
|
14
|
-
:nullable => false,
|
15
|
-
:length => 2..50
|
8
|
+
include DataMapper::Resource
|
16
9
|
|
17
|
-
property :
|
18
|
-
|
19
|
-
|
10
|
+
property :id, Serial
|
11
|
+
property :first_name, String, :nullable => false, :length=> 2..50
|
12
|
+
property :last_name, String, :nullable => false, :length => 2..50
|
20
13
|
|
21
14
|
remix n, :viewables
|
22
|
-
|
23
|
-
remix n, :billables, :class_name => "Account"
|
24
|
-
|
15
|
+
remix n, :billables, :model => "Account"
|
25
16
|
remix n, :addressables
|
26
|
-
|
27
17
|
remix n, :commentables, :as => "comments", :for => "User", :via => "commentor"
|
28
|
-
|
29
18
|
remix n, "My::Nested::Remixable::Rating"
|
30
19
|
|
31
|
-
enhance :addressables do
|
32
|
-
property :label, Enum.new('home','work')
|
33
|
-
end
|
34
20
|
end
|
data/spec/data/viewable.rb
CHANGED
@@ -1,19 +1,5 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
require "dm-types"
|
5
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'addressable'
|
6
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'billable'
|
7
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'commentable'
|
8
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'article'
|
9
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'image'
|
10
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'user'
|
11
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'viewable'
|
12
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'topic'
|
13
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'rating'
|
14
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'taggable'
|
15
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'bot'
|
16
|
-
require Pathname(__FILE__).dirname.expand_path.parent / 'data' / 'tag'
|
1
|
+
require 'spec_helper'
|
2
|
+
|
17
3
|
DataMapper.auto_migrate!
|
18
4
|
|
19
5
|
if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
|
@@ -87,13 +73,13 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
|
|
87
73
|
BotTagging.new.should respond_to("tag")
|
88
74
|
end
|
89
75
|
|
90
|
-
it "should
|
76
|
+
it "should raise an exception when enhancing an unknown class" do
|
91
77
|
lambda {
|
92
78
|
Article.enhance :taggable, "NonExistentClass"
|
93
79
|
}.should raise_error
|
94
80
|
end
|
95
81
|
|
96
|
-
it "should
|
82
|
+
it "should provide a map of Remixable Modules to Remixed Models names" do
|
97
83
|
User.remixables.should_not be(nil)
|
98
84
|
end
|
99
85
|
|
@@ -127,7 +113,6 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
|
|
127
113
|
end
|
128
114
|
|
129
115
|
it "should create a storage name based on the class name" do
|
130
|
-
|
131
116
|
Article.remixables[:image][:article_image][:model].storage_names[:default].should == "article_images"
|
132
117
|
User.remixables[:billable][:account][:model].storage_names[:default].should == "accounts"
|
133
118
|
end
|
@@ -146,6 +131,11 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
|
|
146
131
|
account.should respond_to("expiration")
|
147
132
|
end
|
148
133
|
|
134
|
+
it "should copy validation contexts from the Remixable Module to the Remixed Model" do
|
135
|
+
ArticleComment.validators.contexts.should have_key(:default)
|
136
|
+
ArticleComment.validators.contexts.should have_key(:publish)
|
137
|
+
end
|
138
|
+
|
149
139
|
it "should allow 1:M relationships with the Remixable Module" do
|
150
140
|
user = User.new
|
151
141
|
addy = UserAddress.new
|
@@ -199,46 +189,32 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
|
|
199
189
|
# Users are Commentable by many Users
|
200
190
|
#
|
201
191
|
it "should allow M:M unary relationships through the Remixable Module" do
|
202
|
-
|
203
|
-
user.first_name = "Tester"
|
204
|
-
user2 = User.new
|
205
|
-
user2.first_name = "Testy"
|
206
|
-
|
207
|
-
comment = UserComment.new
|
208
|
-
comment.comment = "YOU SUCK!"
|
209
|
-
comment.commentor = user2
|
210
|
-
|
211
|
-
user.comments << comment
|
212
|
-
|
213
|
-
user2.comments.length.should be(0)
|
214
|
-
|
215
|
-
comment.commentor.first_name.should == "Testy"
|
216
|
-
|
217
|
-
user.comments.length.should be(1)
|
192
|
+
pending 'self referential m:m is currently not supported by dm-core'
|
218
193
|
end
|
219
194
|
|
220
195
|
# Example:
|
221
196
|
# Articles are Commentable by many Users
|
222
197
|
#
|
223
198
|
it "should allow M:M relationships through the Remixable Module" do
|
224
|
-
user
|
199
|
+
user = User.new
|
225
200
|
article = Article.new
|
226
|
-
|
227
|
-
ac = ArticleComment.new
|
201
|
+
ac = ArticleComment.new
|
228
202
|
|
229
203
|
user.first_name = "Talker"
|
230
204
|
user.last_name = "OnTheInternetz"
|
205
|
+
user.save
|
231
206
|
|
232
207
|
article.url = "Http://example.com/"
|
233
208
|
article.title = "Important internet thingz, lol"
|
209
|
+
article.save
|
234
210
|
|
235
211
|
ac.comment = "This article sux!"
|
212
|
+
ac.user = user
|
213
|
+
ac.article = article
|
214
|
+
ac.save
|
236
215
|
|
237
|
-
article.comments
|
238
|
-
user.article_comments
|
239
|
-
|
240
|
-
article.comments.first.should be(ac)
|
241
|
-
user.article_comments.first.should be(ac)
|
216
|
+
article.comments.first.should == ac
|
217
|
+
user.article_comments.first.should == ac
|
242
218
|
end
|
243
219
|
|
244
220
|
# Example:
|
data/spec/spec.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,23 +1,43 @@
|
|
1
|
-
require 'pathname'
|
2
1
|
require 'rubygems'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# use local dm-types if running from
|
10
|
-
lib =
|
11
|
-
$LOAD_PATH.unshift(lib) if
|
12
|
-
|
13
|
-
|
3
|
+
# use local dm-core if running from a typical dev checkout.
|
4
|
+
lib = File.join('..', '..', 'dm-core', 'lib')
|
5
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib)
|
6
|
+
require 'dm-core'
|
7
|
+
|
8
|
+
# use local dm-types if running from a typical dev checkout.
|
9
|
+
lib = File.join('..', 'dm-types', 'lib')
|
10
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib)
|
11
|
+
require 'dm-types'
|
12
|
+
|
13
|
+
# use local dm-validations if running from a typical dev checkout.
|
14
|
+
lib = File.join('..', 'dm-validations', 'lib')
|
15
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib)
|
16
|
+
require 'dm-validations'
|
17
|
+
|
18
|
+
# Support running specs with 'rake spec' and 'spec'
|
19
|
+
$LOAD_PATH.unshift('lib') unless $LOAD_PATH.include?('lib')
|
20
|
+
|
21
|
+
require 'dm-is-remixable'
|
22
|
+
|
23
|
+
require 'data/addressable'
|
24
|
+
require 'data/article'
|
25
|
+
require 'data/billable'
|
26
|
+
require 'data/bot'
|
27
|
+
require 'data/commentable'
|
28
|
+
require 'data/image'
|
29
|
+
require 'data/rating'
|
30
|
+
require 'data/tag'
|
31
|
+
require 'data/taggable'
|
32
|
+
require 'data/topic'
|
33
|
+
require 'data/user'
|
34
|
+
require 'data/viewable'
|
14
35
|
|
15
36
|
def load_driver(name, default_uri)
|
16
37
|
return false if ENV['ADAPTER'] != name.to_s
|
17
38
|
|
18
39
|
begin
|
19
|
-
DataMapper.setup(
|
20
|
-
DataMapper::Repository.adapters[:default] = DataMapper::Repository.adapters[name]
|
40
|
+
DataMapper.setup(:default, ENV["#{name.to_s.upcase}_SPEC_URI"] || default_uri)
|
21
41
|
true
|
22
42
|
rescue LoadError => e
|
23
43
|
warn "Could not load do_#{name}: #{e}"
|
data/tasks/install.rb
CHANGED
@@ -4,7 +4,7 @@ end
|
|
4
4
|
|
5
5
|
desc "Install #{GEM_NAME} #{GEM_VERSION}"
|
6
6
|
task :install => [ :package ] do
|
7
|
-
sudo_gem "install
|
7
|
+
sudo_gem "install pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
|
8
8
|
end
|
9
9
|
|
10
10
|
desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
|
data/tasks/spec.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
begin
|
2
|
-
gem 'rspec', '~>1.2'
|
3
|
-
require 'spec'
|
4
2
|
require 'spec/rake/spectask'
|
5
3
|
|
6
4
|
task :default => [ :spec ]
|
@@ -8,16 +6,18 @@ begin
|
|
8
6
|
desc 'Run specifications'
|
9
7
|
Spec::Rake::SpecTask.new(:spec) do |t|
|
10
8
|
t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
|
11
|
-
t.
|
9
|
+
t.libs << 'lib' << 'spec' # needed for CI rake spec task, duplicated in spec_helper
|
12
10
|
|
13
11
|
begin
|
14
|
-
|
12
|
+
require 'rcov'
|
15
13
|
t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
|
16
14
|
t.rcov_opts << '--exclude' << 'spec'
|
17
15
|
t.rcov_opts << '--text-summary'
|
18
16
|
t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
|
19
17
|
rescue LoadError
|
20
18
|
# rcov not installed
|
19
|
+
rescue SyntaxError
|
20
|
+
# rcov syntax invalid
|
21
21
|
end
|
22
22
|
end
|
23
23
|
rescue LoadError
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-is-remixable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cory O'Daniel
|
@@ -9,19 +9,10 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-16 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
16
|
-
name: dm-core
|
17
|
-
type: :runtime
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - "="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.9.11
|
24
|
-
version:
|
14
|
+
dependencies: []
|
15
|
+
|
25
16
|
description: dm-is-remixable allow you to create reusable data functionality
|
26
17
|
email:
|
27
18
|
- dm-is-remixable [a] coryodaniel [d] com
|
@@ -30,15 +21,15 @@ executables: []
|
|
30
21
|
extensions: []
|
31
22
|
|
32
23
|
extra_rdoc_files:
|
33
|
-
- README.
|
24
|
+
- README.rdoc
|
34
25
|
- LICENSE
|
35
26
|
- TODO
|
36
|
-
- History.
|
27
|
+
- History.rdoc
|
37
28
|
files:
|
38
|
-
- History.
|
29
|
+
- History.rdoc
|
39
30
|
- LICENSE
|
40
31
|
- Manifest.txt
|
41
|
-
- README.
|
32
|
+
- README.rdoc
|
42
33
|
- Rakefile
|
43
34
|
- TODO
|
44
35
|
- lib/dm-is-remixable.rb
|
@@ -62,11 +53,13 @@ files:
|
|
62
53
|
- tasks/install.rb
|
63
54
|
- tasks/spec.rb
|
64
55
|
has_rdoc: true
|
65
|
-
homepage: http://github.com/
|
56
|
+
homepage: http://github.com/datamapper/dm-more/tree/master/dm-is-remixable
|
57
|
+
licenses: []
|
58
|
+
|
66
59
|
post_install_message:
|
67
60
|
rdoc_options:
|
68
61
|
- --main
|
69
|
-
- README.
|
62
|
+
- README.rdoc
|
70
63
|
require_paths:
|
71
64
|
- lib
|
72
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -84,9 +77,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
77
|
requirements: []
|
85
78
|
|
86
79
|
rubyforge_project: datamapper
|
87
|
-
rubygems_version: 1.3.
|
80
|
+
rubygems_version: 1.3.5
|
88
81
|
signing_key:
|
89
|
-
specification_version:
|
82
|
+
specification_version: 3
|
90
83
|
summary: dm-is-remixable allow you to create reusable data functionality
|
91
84
|
test_files: []
|
92
85
|
|