dm-is-remixable 1.1.0.rc2 → 1.1.0.rc3

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
@@ -5,7 +5,7 @@ source 'http://rubygems.org'
5
5
  SOURCE = ENV.fetch('SOURCE', :git).to_sym
6
6
  REPO_POSTFIX = SOURCE == :path ? '' : '.git'
7
7
  DATAMAPPER = SOURCE == :path ? Pathname(__FILE__).dirname.parent : 'http://github.com/datamapper'
8
- DM_VERSION = '~> 1.1.0.rc2'
8
+ DM_VERSION = '~> 1.1.0.rc3'
9
9
  DO_VERSION = '~> 0.10.2'
10
10
  DM_DO_ADAPTERS = %w[ sqlite postgres mysql oracle sqlserver ]
11
11
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0.rc2
1
+ 1.1.0.rc3
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dm-is-remixable}
8
- s.version = "1.1.0.rc2"
8
+ s.version = "1.1.0.rc3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Cory O'Daniel"]
12
- s.date = %q{2011-03-01}
12
+ s.date = %q{2011-03-10}
13
13
  s.description = %q{dm-is-remixable allow you to create reusable data functionality}
14
14
  s.email = %q{dm-is-remixable [a] coryodaniel [d] com}
15
15
  s.extra_rdoc_files = [
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
49
49
  s.homepage = %q{http://github.com/datamapper/dm-is-remixable}
50
50
  s.require_paths = ["lib"]
51
51
  s.rubyforge_project = %q{datamapper}
52
- s.rubygems_version = %q{1.5.2}
52
+ s.rubygems_version = %q{1.6.2}
53
53
  s.summary = %q{dm-is-remixable allow you to create reusable data functionality}
54
54
  s.test_files = [
55
55
  "spec/data/addressable.rb",
@@ -73,24 +73,24 @@ Gem::Specification.new do |s|
73
73
  s.specification_version = 3
74
74
 
75
75
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
76
- s.add_runtime_dependency(%q<dm-core>, ["~> 1.1.0.rc2"])
77
- s.add_development_dependency(%q<dm-validations>, ["~> 1.1.0.rc2"])
78
- s.add_development_dependency(%q<dm-types>, ["~> 1.1.0.rc2"])
76
+ s.add_runtime_dependency(%q<dm-core>, ["~> 1.1.0.rc3"])
77
+ s.add_development_dependency(%q<dm-validations>, ["~> 1.1.0.rc3"])
78
+ s.add_development_dependency(%q<dm-types>, ["~> 1.1.0.rc3"])
79
79
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
80
80
  s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
81
81
  s.add_development_dependency(%q<rspec>, ["~> 1.3.1"])
82
82
  else
83
- s.add_dependency(%q<dm-core>, ["~> 1.1.0.rc2"])
84
- s.add_dependency(%q<dm-validations>, ["~> 1.1.0.rc2"])
85
- s.add_dependency(%q<dm-types>, ["~> 1.1.0.rc2"])
83
+ s.add_dependency(%q<dm-core>, ["~> 1.1.0.rc3"])
84
+ s.add_dependency(%q<dm-validations>, ["~> 1.1.0.rc3"])
85
+ s.add_dependency(%q<dm-types>, ["~> 1.1.0.rc3"])
86
86
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
87
87
  s.add_dependency(%q<rake>, ["~> 0.8.7"])
88
88
  s.add_dependency(%q<rspec>, ["~> 1.3.1"])
89
89
  end
90
90
  else
91
- s.add_dependency(%q<dm-core>, ["~> 1.1.0.rc2"])
92
- s.add_dependency(%q<dm-validations>, ["~> 1.1.0.rc2"])
93
- s.add_dependency(%q<dm-types>, ["~> 1.1.0.rc2"])
91
+ s.add_dependency(%q<dm-core>, ["~> 1.1.0.rc3"])
92
+ s.add_dependency(%q<dm-validations>, ["~> 1.1.0.rc3"])
93
+ s.add_dependency(%q<dm-types>, ["~> 1.1.0.rc3"])
94
94
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
95
95
  s.add_dependency(%q<rake>, ["~> 0.8.7"])
96
96
  s.add_dependency(%q<rspec>, ["~> 1.3.1"])
@@ -1,25 +1,12 @@
1
1
  require 'dm-core'
2
+ require 'dm-core/support/inflector'
2
3
 
3
- begin
4
- require 'active_support/inflector'
5
- rescue LoadError
6
- require 'extlib/inflection'
7
- class String
8
- def underscore
9
- Extlib::Inflection.underscore(self)
10
- end
4
+ module DataMapper::Ext::Object
5
+ def self.full_const_defined?(obj, name = nil)
6
+ !!self.full_const_get(obj, name) rescue false
11
7
  end
12
8
  end
13
9
 
14
- # reopen datamapper/extlib/lib/extlib/object.rb
15
- class Object
16
-
17
- def full_const_defined?(name)
18
- !!full_const_get(name) rescue false
19
- end
20
-
21
- end
22
-
23
10
  module DataMapper
24
11
  module Is
25
12
  module Remixable
@@ -68,7 +55,10 @@ module DataMapper
68
55
  @is_remixable = true
69
56
 
70
57
  # support clean suffixes for nested modules
71
- default_suffix = DataMapper::Inflector.demodulize(self.name).singularize.underscore
58
+ inflector = DataMapper::Inflector
59
+ default_suffix = inflector.demodulize(self.name)
60
+ default_suffix = inflector.singularize(default_suffix)
61
+ default_suffix = inflector.underscore(default_suffix)
72
62
  suffix(options.delete(:suffix) || default_suffix)
73
63
  end
74
64
 
@@ -157,8 +147,8 @@ module DataMapper
157
147
  # Example (from my upcoming dm-is-rateable gem)
158
148
  # remix n, "DataMapper::Is::Rateable::Rating", :as => :ratings
159
149
  remixable_module = case remixable
160
- when Symbol then Object.full_const_get(DataMapper::Inflector.classify(remixable))
161
- when String then Object.full_const_get(remixable)
150
+ when Symbol then DataMapper::Ext::Object.full_const_get(Object, DataMapper::Inflector.classify(remixable))
151
+ when String then DataMapper::Ext::Object.full_const_get(Object, remixable)
162
152
  when Module then remixable
163
153
  end
164
154
 
@@ -171,10 +161,14 @@ module DataMapper
171
161
  options[:model] = options.delete(:class_name)
172
162
  end
173
163
 
164
+ inflector = DataMapper::Inflector
165
+ model = inflector.underscore(self.name)
166
+ model = inflector.camelize(model + '_' + remixable_module.suffix)
167
+
174
168
  #Merge defaults/options
175
169
  options = {
176
170
  :as => nil,
177
- :model => DataMapper::Inflector.camelize(self.name.underscore + '_' + remixable_module.suffix),
171
+ :model => model,
178
172
  :for => nil,
179
173
  :on => nil,
180
174
  :unique => false,
@@ -183,10 +177,10 @@ module DataMapper
183
177
  }.update(options)
184
178
 
185
179
  #Make sure the class hasn't been remixed already
186
- unless Object.full_const_defined?(DataMapper::Inflector.classify(options[:model]))
180
+ unless DataMapper::Ext::Object.full_const_defined?(inflector.classify(options[:model]))
187
181
 
188
182
  #Storage name of our remixed model
189
- options[:table_name] = DataMapper::Inflector.tableize(DataMapper::Inflector.demodulize(options[:model]))
183
+ options[:table_name] = DataMapper::Inflector.tableize(inflector.demodulize(options[:model]))
190
184
 
191
185
  #Other model to mix with in case of M:M through Remixable
192
186
  options[:other_model] = options[:for] || options[:on]
@@ -197,16 +191,17 @@ module DataMapper
197
191
  # map the remixable to the remixed model
198
192
  # since this will be used from 'enhance api' i think it makes perfect sense to
199
193
  # always refer to a remixable by its demodulized underscored constant name
200
- remixable_key = DataMapper::Inflector.demodulize(remixable_module.name).underscore.to_sym
194
+ remixable_key = inflector.demodulize(remixable_module.name)
195
+ remixable_key = inflector.underscore(remixable_key).to_sym
201
196
  populate_remixables_mapping(model, options.merge(:remixable_key => remixable_key))
202
197
 
203
198
  # attach RemixerClassMethods and RemixerInstanceMethods to remixer if defined by remixee
204
- if Object.full_const_defined? "#{remixable_module}::RemixerClassMethods"
205
- extend Object.full_const_get("#{remixable_module}::RemixerClassMethods")
199
+ if DataMapper::Ext::Object.full_const_defined? "#{remixable_module}::RemixerClassMethods"
200
+ extend DataMapper::Ext::Object.full_const_get("#{remixable_module}::RemixerClassMethods")
206
201
  end
207
202
 
208
- if Object.full_const_defined? "#{remixable_module}::RemixerInstanceMethods"
209
- include Object.full_const_get("#{remixable_module}::RemixerInstanceMethods")
203
+ if DataMapper::Ext::Object.full_const_defined? "#{remixable_module}::RemixerInstanceMethods"
204
+ include DataMapper::Ext::Object.full_const_get("#{remixable_module}::RemixerInstanceMethods")
210
205
  end
211
206
 
212
207
  #Create relationships between Remixer and remixed class
@@ -264,12 +259,16 @@ module DataMapper
264
259
  # belongs_to :tag
265
260
  # end
266
261
  def enhance(remixable,remixable_model=nil, &block)
262
+ inflector = DataMapper::Inflector
263
+
267
264
  # always use innermost singular underscored constant name
268
- remixable_name = remixable.to_s.singularize.underscore.to_sym
265
+ remixable_name = inflector.singularize(remixable.to_s)
266
+ remixable_name = inflector.underscore(remixable_name).to_sym
269
267
  class_name = if remixable_model.nil?
270
268
  @remixables[remixable_name].keys.first
271
269
  else
272
- DataMapper::Inflector.demodulize(remixable_model.to_s).underscore.to_sym
270
+ name = inflector.demodulize(remixable_model.to_s)
271
+ inflector.underscore(name).to_sym
273
272
  end
274
273
 
275
274
  model = @remixables[remixable_name][class_name][:model] unless @remixables[remixable_name][class_name].nil?
@@ -293,7 +292,11 @@ module DataMapper
293
292
  key = options[:remixable_key]
294
293
  accessor_name = options[:as] ? options[:as] : options[:table_name]
295
294
  @remixables[key] ||= {}
296
- model_key = DataMapper::Inflector.demodulize(remixable_model.to_s).underscore.to_sym
295
+
296
+ inflector = DataMapper::Inflector
297
+ model_key = inflector.demodulize(remixable_model.to_s)
298
+ model_key = inflector.underscore(model_key).to_sym
299
+
297
300
  @remixables[key][model_key] ||= {}
298
301
  @remixables[key][model_key][:reader] ||= accessor_name.to_sym
299
302
  @remixables[key][model_key][:writer] ||= "#{accessor_name}=".to_sym
@@ -321,7 +324,7 @@ module DataMapper
321
324
  # model <Class> remixed model that 'self' is relating through
322
325
  # options <Hash> options hash
323
326
  def remix_many_to_many(cardinality, model, options)
324
- options[:other_model] = Object.full_const_get(DataMapper::Inflector.classify(options[:other_model]))
327
+ options[:other_model] = DataMapper::Ext::Object.full_const_get(DataMapper::Inflector.classify(options[:other_model]))
325
328
 
326
329
  #TODO if options[:unique] the two *_id's need to be a unique composite key, maybe even
327
330
  # attach a validates_is_unique if the validator is included.
@@ -362,7 +365,7 @@ module DataMapper
362
365
  # TODO clean this up!
363
366
  parts = options[:model].split('::')
364
367
  name = parts.last
365
- namespace = Object.full_const_get((parts - [name]).join('::'))
368
+ namespace = DataMapper::Ext::Object.full_const_get((parts - [name]).join('::'))
366
369
 
367
370
  model = Model.new(name, namespace) do
368
371
  include remixable
@@ -385,12 +388,12 @@ module DataMapper
385
388
  end
386
389
 
387
390
  # Attach remixed model access to RemixeeClassMethods and RemixeeInstanceMethods if defined
388
- if Object.full_const_defined? "#{remixable}::RemixeeClassMethods"
389
- model.send :extend, Object.full_const_get("#{remixable}::RemixeeClassMethods")
391
+ if DataMapper::Ext::Object.full_const_defined? "#{remixable}::RemixeeClassMethods"
392
+ model.send :extend, DataMapper::Ext::Object.full_const_get("#{remixable}::RemixeeClassMethods")
390
393
  end
391
394
 
392
- if Object.full_const_defined? "#{remixable}::RemixeeInstanceMethods"
393
- model.send :include, Object.full_const_get("#{remixable}::RemixeeInstanceMethods")
395
+ if DataMapper::Ext::Object.full_const_defined? "#{remixable}::RemixeeInstanceMethods"
396
+ model.send :include, DataMapper::Ext::Object.full_const_get("#{remixable}::RemixeeInstanceMethods")
394
397
  end
395
398
 
396
399
  clone_hooks(remixable, model)
@@ -399,7 +402,9 @@ module DataMapper
399
402
  end
400
403
 
401
404
  def belongs_to_name(class_name)
402
- DataMapper::Inflector.demodulize(class_name).underscore.gsub(/\//, '_').to_sym
405
+ name = DataMapper::Inflector.demodulize(class_name)
406
+ name = DataMapper::Inflector.underscore(name)
407
+ name.gsub(/\//, '_').to_sym
403
408
  end
404
409
 
405
410
  private
@@ -1,7 +1 @@
1
- begin
2
- require 'active_support/inflector'
3
- rescue LoadError
4
- require 'extlib/inflection'
5
- end
6
-
7
1
  require 'dm-is-remixable/is/remixable'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: dm-is-remixable
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease: 6
5
- version: 1.1.0.rc2
5
+ version: 1.1.0.rc3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Cory O'Daniel
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-01 00:00:00 -08:00
13
+ date: 2011-03-10 00:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 1.1.0.rc2
23
+ version: 1.1.0.rc3
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: *id001
@@ -31,7 +31,7 @@ dependencies:
31
31
  requirements:
32
32
  - - ~>
33
33
  - !ruby/object:Gem::Version
34
- version: 1.1.0.rc2
34
+ version: 1.1.0.rc3
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: *id002
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.1.0.rc2
45
+ version: 1.1.0.rc3
46
46
  type: :development
47
47
  prerelease: false
48
48
  version_requirements: *id003
@@ -141,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
141
  requirements: []
142
142
 
143
143
  rubyforge_project: datamapper
144
- rubygems_version: 1.5.2
144
+ rubygems_version: 1.6.2
145
145
  signing_key:
146
146
  specification_version: 3
147
147
  summary: dm-is-remixable allow you to create reusable data functionality