dm-is-remixable 0.10.1 → 0.10.2

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/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 Cory ODaniel
1
+ Copyright (c) 2009 Cory ODaniel
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -1,24 +1,29 @@
1
- require 'pathname'
1
+ require 'rubygems'
2
+ require 'rake'
2
3
 
3
- ROOT = Pathname(__FILE__).dirname.expand_path
4
- JRUBY = RUBY_PLATFORM =~ /java/
5
- WINDOWS = Gem.win_platform?
6
- SUDO = (WINDOWS || JRUBY) ? '' : ('sudo' unless ENV['SUDOLESS'])
4
+ begin
5
+ gem 'jeweler', '~> 1.4'
6
+ require 'jeweler'
7
7
 
8
- require ROOT + 'lib/dm-is-remixable/is/version'
8
+ Jeweler::Tasks.new do |gem|
9
+ gem.name = 'dm-is-remixable'
10
+ gem.summary = 'dm-is-remixable allow you to create reusable data functionality'
11
+ gem.description = gem.summary
12
+ gem.email = 'dm-is-remixable [a] coryodaniel [d] com'
13
+ gem.homepage = 'http://github.com/datamapper/dm-more/tree/master/%s' % gem.name
14
+ gem.authors = [ "Cory O'Daniel" ]
9
15
 
10
- AUTHOR = "Cory O'Daniel"
11
- EMAIL = 'dm-is-remixable [a] coryodaniel [d] com'
12
- GEM_NAME = 'dm-is-remixable'
13
- GEM_VERSION = DataMapper::Is::Remixable::VERSION
14
- GEM_DEPENDENCIES = [['dm-core', GEM_VERSION]]
15
- GEM_CLEAN = %w[ log pkg coverage ]
16
- GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.rdoc LICENSE TODO History.rdoc ] }
16
+ gem.rubyforge_project = 'datamapper'
17
17
 
18
- PROJECT_NAME = 'datamapper'
19
- PROJECT_URL = "http://github.com/datamapper/dm-more/tree/master/#{GEM_NAME}"
20
- PROJECT_DESCRIPTION = PROJECT_SUMMARY = 'dm-is-remixable allow you to create reusable data functionality'
18
+ gem.add_dependency 'dm-core', '~> 0.10.2'
21
19
 
22
- [ ROOT, ROOT.parent ].each do |dir|
23
- Pathname.glob(dir.join('tasks/**/*.rb').to_s).each { |f| require f }
20
+ gem.add_development_dependency 'rspec', '~> 1.2.9'
21
+ gem.add_development_dependency 'yard', '~> 0.4.0'
22
+ end
23
+
24
+ Jeweler::GemcutterTasks.new
25
+
26
+ FileList['tasks/**/*.rake'].each { |task| import task }
27
+ rescue LoadError
28
+ puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler'
24
29
  end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.10.2
@@ -0,0 +1,75 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{dm-is-remixable}
8
+ s.version = "0.10.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Cory O'Daniel"]
12
+ s.date = %q{2009-12-11}
13
+ s.description = %q{dm-is-remixable allow you to create reusable data functionality}
14
+ s.email = %q{dm-is-remixable [a] coryodaniel [d] com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ "LICENSE",
21
+ "README.rdoc",
22
+ "Rakefile",
23
+ "VERSION",
24
+ "dm-is-remixable.gemspec",
25
+ "lib/dm-is-remixable.rb",
26
+ "lib/dm-is-remixable/is/remixable.rb",
27
+ "spec/data/addressable.rb",
28
+ "spec/data/article.rb",
29
+ "spec/data/billable.rb",
30
+ "spec/data/bot.rb",
31
+ "spec/data/commentable.rb",
32
+ "spec/data/image.rb",
33
+ "spec/data/rating.rb",
34
+ "spec/data/tag.rb",
35
+ "spec/data/taggable.rb",
36
+ "spec/data/topic.rb",
37
+ "spec/data/user.rb",
38
+ "spec/data/viewable.rb",
39
+ "spec/integration/remixable_spec.rb",
40
+ "spec/rcov.opts",
41
+ "spec/spec.opts",
42
+ "spec/spec_helper.rb",
43
+ "tasks/ci.rake",
44
+ "tasks/metrics.rake",
45
+ "tasks/spec.rake",
46
+ "tasks/yard.rake",
47
+ "tasks/yardstick.rake"
48
+ ]
49
+ s.homepage = %q{http://github.com/datamapper/dm-more/tree/master/dm-is-remixable}
50
+ s.rdoc_options = ["--charset=UTF-8"]
51
+ s.require_paths = ["lib"]
52
+ s.rubyforge_project = %q{datamapper}
53
+ s.rubygems_version = %q{1.3.5}
54
+ s.summary = %q{dm-is-remixable allow you to create reusable data functionality}
55
+
56
+ if s.respond_to? :specification_version then
57
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
+ s.specification_version = 3
59
+
60
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
61
+ s.add_runtime_dependency(%q<dm-core>, ["~> 0.10.2"])
62
+ s.add_development_dependency(%q<rspec>, ["~> 1.2.9"])
63
+ s.add_development_dependency(%q<yard>, ["~> 0.4.0"])
64
+ else
65
+ s.add_dependency(%q<dm-core>, ["~> 0.10.2"])
66
+ s.add_dependency(%q<rspec>, ["~> 1.2.9"])
67
+ s.add_dependency(%q<yard>, ["~> 0.4.0"])
68
+ end
69
+ else
70
+ s.add_dependency(%q<dm-core>, ["~> 0.10.2"])
71
+ s.add_dependency(%q<rspec>, ["~> 1.2.9"])
72
+ s.add_dependency(%q<yard>, ["~> 0.4.0"])
73
+ end
74
+ end
75
+
@@ -68,6 +68,8 @@ module DataMapper
68
68
  # ==== Description
69
69
  # Methods available to all DataMapper::Resources
70
70
  module RemixerClassMethods
71
+ include Extlib::Assertions
72
+
71
73
  def self.included(base);end;
72
74
 
73
75
  def is_remixable?
@@ -135,13 +137,19 @@ module DataMapper
135
137
  # => This would create user_id and commentor_id as the
136
138
  #
137
139
  def remix(cardinality, remixable, options={})
140
+ assert_kind_of 'remixable', Symbol, String, Module
141
+
138
142
  #A map for remixable names to Remixed Models
139
143
  @remixables = {} if @remixables.nil?
140
144
 
141
145
  # Allow nested modules to be remixable to better support using dm-is-remixable in gems
142
146
  # Example (from my upcoming dm-is-rateable gem)
143
147
  # remix n, "DataMapper::Is::Rateable::Rating", :as => :ratings
144
- remixable_module = Object.full_const_get(Extlib::Inflection.classify(remixable))
148
+ remixable_module = case remixable
149
+ when Symbol then Object.full_const_get(Extlib::Inflection.classify(remixable))
150
+ when String then Object.full_const_get(remixable)
151
+ when Module then remixable
152
+ end
145
153
 
146
154
  unless remixable_module.is_remixable?
147
155
  raise Exception, "#{remixable_module} is not remixable"
@@ -154,14 +162,14 @@ module DataMapper
154
162
 
155
163
  #Merge defaults/options
156
164
  options = {
157
- :as => nil,
158
- :model => Extlib::Inflection.classify(self.name.snake_case + "_" + remixable_module.suffix.pluralize),
159
- :for => nil,
160
- :on => nil,
161
- :unique => false,
162
- :via => nil,
163
- :connect => false
164
- }.merge(options)
165
+ :as => nil,
166
+ :model => Extlib::Inflection.classify(self.name.snake_case + '_' + remixable_module.suffix.pluralize),
167
+ :for => nil,
168
+ :on => nil,
169
+ :unique => false,
170
+ :via => nil,
171
+ :connect => false
172
+ }.update(options)
165
173
 
166
174
  #Make sure the class hasn't been remixed already
167
175
  unless Object.full_const_defined?(Extlib::Inflection.classify(options[:model]))
@@ -290,7 +298,7 @@ module DataMapper
290
298
  # options <Hash> options hash
291
299
  def remix_one_to_many(cardinality, model, options)
292
300
  self.has cardinality, (options[:as] || options[:table_name]).to_sym, :model => model.name
293
- model.property Extlib::Inflection.foreign_key(self.name).intern, Integer, :nullable => false
301
+ model.property Extlib::Inflection.foreign_key(self.name).intern, Integer, :min => 0, :required => true
294
302
  model.belongs_to belongs_to_name(self.name)
295
303
  end
296
304
 
data/spec/data/bot.rb CHANGED
@@ -6,14 +6,7 @@ require 'data/rating'
6
6
  class Bot
7
7
  include DataMapper::Resource
8
8
 
9
- property :id, Serial
10
-
11
- property :bot_name, String,
12
- :nullable => false,
13
- :length => 2..50
14
-
15
- property :bot_version, String,
16
- :nullable => false,
17
- :length => 2..50
18
-
9
+ property :id, Serial
10
+ property :bot_name, String, :required => true, :length => 2..50
11
+ property :bot_version, String, :required => true, :length => 2..50
19
12
  end
data/spec/data/rating.rb CHANGED
@@ -14,8 +14,8 @@ module My
14
14
  # properties
15
15
 
16
16
  property :id, Serial
17
- property :user_id, Integer, :nullable => false
18
- property :rating, Integer, :nullable => false, :default => 0
17
+ property :user_id, Integer, :required => true
18
+ property :rating, Integer, :required => true, :default => 0
19
19
 
20
20
  module ClassMethods
21
21
 
data/spec/data/tag.rb CHANGED
@@ -2,5 +2,5 @@ class Tag
2
2
  include DataMapper::Resource
3
3
 
4
4
  property :id, Serial
5
- property :name, String, :unique => true, :nullable => false
5
+ property :name, String, :unique => true, :required => true
6
6
  end
data/spec/data/user.rb CHANGED
@@ -8,8 +8,8 @@ class User
8
8
  include DataMapper::Resource
9
9
 
10
10
  property :id, Serial
11
- property :first_name, String, :nullable => false, :length=> 2..50
12
- property :last_name, String, :nullable => false, :length => 2..50
11
+ property :first_name, String, :required => true, :length=> 2..50
12
+ property :last_name, String, :required => true, :length => 2..50
13
13
 
14
14
  remix n, :viewables
15
15
  remix n, :billables, :model => "Account"
data/spec/rcov.opts ADDED
@@ -0,0 +1,6 @@
1
+ --exclude "spec"
2
+ --sort coverage
3
+ --callsites
4
+ --xrefs
5
+ --profile
6
+ --text-summary
data/spec/spec.opts CHANGED
@@ -1,2 +1,4 @@
1
1
  --colour
2
2
  --loadby random
3
+ --format profile
4
+ --backtrace
data/tasks/ci.rake ADDED
@@ -0,0 +1 @@
1
+ task :ci => [ :verify_measurements, 'metrics:all' ]
@@ -0,0 +1,36 @@
1
+ begin
2
+ require 'metric_fu'
3
+ rescue LoadError
4
+ namespace :metrics do
5
+ task :all do
6
+ abort 'metric_fu is not available. In order to run metrics:all, you must: gem install metric_fu'
7
+ end
8
+ end
9
+ end
10
+
11
+ begin
12
+ require 'reek/adapters/rake_task'
13
+
14
+ Reek::RakeTask.new do |t|
15
+ t.fail_on_error = true
16
+ t.verbose = false
17
+ t.source_files = 'lib/**/*.rb'
18
+ end
19
+ rescue LoadError
20
+ task :reek do
21
+ abort 'Reek is not available. In order to run reek, you must: gem install reek'
22
+ end
23
+ end
24
+
25
+ begin
26
+ require 'roodi'
27
+ require 'roodi_task'
28
+
29
+ RoodiTask.new do |t|
30
+ t.verbose = false
31
+ end
32
+ rescue LoadError
33
+ task :roodi do
34
+ abort 'Roodi is not available. In order to run roodi, you must: gem install roodi'
35
+ end
36
+ end
data/tasks/spec.rake ADDED
@@ -0,0 +1,41 @@
1
+ spec_defaults = lambda do |spec|
2
+ spec.pattern = 'spec/**/*_spec.rb'
3
+ spec.libs << 'lib' << 'spec'
4
+ spec.spec_opts << '--options' << 'spec/spec.opts'
5
+ end
6
+
7
+ begin
8
+ require 'spec/rake/spectask'
9
+
10
+ Spec::Rake::SpecTask.new(:spec, &spec_defaults)
11
+ rescue LoadError
12
+ task :spec do
13
+ abort 'rspec is not available. In order to run spec, you must: gem install rspec'
14
+ end
15
+ end
16
+
17
+ begin
18
+ require 'rcov'
19
+ require 'spec/rake/verify_rcov'
20
+
21
+ Spec::Rake::SpecTask.new(:rcov) do |rcov|
22
+ spec_defaults.call(rcov)
23
+ rcov.rcov = true
24
+ rcov.rcov_opts = File.read('spec/rcov.opts').split(/\s+/)
25
+ end
26
+
27
+ RCov::VerifyTask.new(:verify_rcov => :rcov) do |rcov|
28
+ rcov.threshold = 100
29
+ end
30
+ rescue LoadError
31
+ %w[ rcov verify_rcov ].each do |name|
32
+ task name do
33
+ abort "rcov is not available. In order to run #{name}, you must: gem install rcov"
34
+ end
35
+ end
36
+ end
37
+
38
+ task :spec => :check_dependencies
39
+ task :rcov => :check_dependencies
40
+
41
+ task :default => :spec
data/tasks/yard.rake ADDED
@@ -0,0 +1,9 @@
1
+ begin
2
+ require 'yard'
3
+
4
+ YARD::Rake::YardocTask.new
5
+ rescue LoadError
6
+ task :yard do
7
+ abort 'YARD is not available. In order to run yard, you must: gem install yard'
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ begin
2
+ require 'pathname'
3
+ require 'yardstick/rake/measurement'
4
+ require 'yardstick/rake/verify'
5
+
6
+ # yardstick_measure task
7
+ Yardstick::Rake::Measurement.new
8
+
9
+ # verify_measurements task
10
+ Yardstick::Rake::Verify.new do |verify|
11
+ verify.threshold = 100
12
+ end
13
+ rescue LoadError
14
+ %w[ yardstick_measure verify_measurements ].each do |name|
15
+ task name.to_s do
16
+ abort "Yardstick is not available. In order to run #{name}, you must: gem install yardstick"
17
+ end
18
+ end
19
+ end
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.10.1
4
+ version: 0.10.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cory O'Daniel
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-30 00:00:00 -07:00
12
+ date: 2009-12-11 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -18,32 +18,47 @@ dependencies:
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - "="
21
+ - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 0.10.1
23
+ version: 0.10.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.9
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: yard
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.4.0
24
44
  version:
25
45
  description: dm-is-remixable allow you to create reusable data functionality
26
- email:
27
- - dm-is-remixable [a] coryodaniel [d] com
46
+ email: dm-is-remixable [a] coryodaniel [d] com
28
47
  executables: []
29
48
 
30
49
  extensions: []
31
50
 
32
51
  extra_rdoc_files:
33
- - README.rdoc
34
52
  - LICENSE
35
- - TODO
36
- - History.rdoc
53
+ - README.rdoc
37
54
  files:
38
- - History.rdoc
39
55
  - LICENSE
40
- - Manifest.txt
41
56
  - README.rdoc
42
57
  - Rakefile
43
- - TODO
58
+ - VERSION
59
+ - dm-is-remixable.gemspec
44
60
  - lib/dm-is-remixable.rb
45
61
  - lib/dm-is-remixable/is/remixable.rb
46
- - lib/dm-is-remixable/is/version.rb
47
62
  - spec/data/addressable.rb
48
63
  - spec/data/article.rb
49
64
  - spec/data/billable.rb
@@ -57,18 +72,21 @@ files:
57
72
  - spec/data/user.rb
58
73
  - spec/data/viewable.rb
59
74
  - spec/integration/remixable_spec.rb
75
+ - spec/rcov.opts
60
76
  - spec/spec.opts
61
77
  - spec/spec_helper.rb
62
- - tasks/install.rb
63
- - tasks/spec.rb
78
+ - tasks/ci.rake
79
+ - tasks/metrics.rake
80
+ - tasks/spec.rake
81
+ - tasks/yard.rake
82
+ - tasks/yardstick.rake
64
83
  has_rdoc: true
65
84
  homepage: http://github.com/datamapper/dm-more/tree/master/dm-is-remixable
66
85
  licenses: []
67
86
 
68
87
  post_install_message:
69
88
  rdoc_options:
70
- - --main
71
- - README.rdoc
89
+ - --charset=UTF-8
72
90
  require_paths:
73
91
  - lib
74
92
  required_ruby_version: !ruby/object:Gem::Requirement
data/History.rdoc DELETED
@@ -1,34 +0,0 @@
1
- === 0.10.1 / 2009-09-30
2
-
3
- * No changes this version
4
-
5
- === 0.10.0 / 2009-09-15
6
-
7
- * Updated to work with dm-core 0.10.0
8
-
9
- === 0.9.11 / 2009-03-29
10
-
11
- * No changes this version
12
-
13
- === 0.9.10 / 2009-01-19
14
-
15
- * No changes this version
16
-
17
- === 0.9.9 / 2009-01-04
18
-
19
- * 1 bug fix:
20
-
21
- * belongs_to association names are no longer made plural.
22
-
23
- === 0.9.8 / 2008-12-07
24
-
25
- * 2 minor enhancements:
26
-
27
- * When using :as remixables ONLY create the given accessor instead of creating the default and aliasing it.
28
- * Remixable Modules can now namespace methods to remixing classes and generated class.
29
-
30
- === 0.9.3 / 2008-07-31
31
-
32
- * 1 major enhancement:
33
-
34
- * Pre-Release, super beta.
data/Manifest.txt DELETED
@@ -1,26 +0,0 @@
1
- History.rdoc
2
- LICENSE
3
- Manifest.txt
4
- README.rdoc
5
- Rakefile
6
- TODO
7
- lib/dm-is-remixable.rb
8
- lib/dm-is-remixable/is/remixable.rb
9
- lib/dm-is-remixable/is/version.rb
10
- spec/data/addressable.rb
11
- spec/data/article.rb
12
- spec/data/billable.rb
13
- spec/data/bot.rb
14
- spec/data/commentable.rb
15
- spec/data/image.rb
16
- spec/data/rating.rb
17
- spec/data/tag.rb
18
- spec/data/taggable.rb
19
- spec/data/topic.rb
20
- spec/data/user.rb
21
- spec/data/viewable.rb
22
- spec/integration/remixable_spec.rb
23
- spec/spec.opts
24
- spec/spec_helper.rb
25
- tasks/install.rb
26
- tasks/spec.rb
data/TODO DELETED
@@ -1,18 +0,0 @@
1
- FIXME
2
- ====
3
- Add ability to have a unique relationship when joining through remixable
4
- This is stubbed at remixable.rb @~ line 223; waiting on stategic eager loading
5
- M:M Video.remix n, :commentables, :as => "comments", :for => "User", :unique => false
6
- M:M Article.remix n, :views, :for => "User", :unique => true
7
- in the generated table article_views article_id and user_id would be a unique key,
8
- only counting a users viewing of an article once
9
-
10
- TODO
11
- ====
12
- - Add ability to set primary keys and indexes when remixing
13
-
14
- - Test nested remixing User remixes Photogenic; Photogenic Remixes comments
15
- - Test double+ remixing. User remixes Commentable; enhance Commentable remix Commentable
16
-
17
- - Remixable.related(*remixed_models)
18
- Taggable.related(Article, JobPostings)
@@ -1,7 +0,0 @@
1
- module DataMapper
2
- module Is
3
- module Remixable
4
- VERSION = '0.10.1'.freeze
5
- end
6
- end
7
- end
data/tasks/install.rb DELETED
@@ -1,13 +0,0 @@
1
- def sudo_gem(cmd)
2
- sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
3
- end
4
-
5
- desc "Install #{GEM_NAME} #{GEM_VERSION}"
6
- task :install => [ :package ] do
7
- sudo_gem "install pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
8
- end
9
-
10
- desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
11
- task :uninstall => [ :clobber ] do
12
- sudo_gem "uninstall #{GEM_NAME} -v#{GEM_VERSION} -Ix"
13
- end
data/tasks/spec.rb DELETED
@@ -1,25 +0,0 @@
1
- begin
2
- require 'spec/rake/spectask'
3
-
4
- task :default => [ :spec ]
5
-
6
- desc 'Run specifications'
7
- Spec::Rake::SpecTask.new(:spec) do |t|
8
- t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
9
- t.libs << 'lib' << 'spec' # needed for CI rake spec task, duplicated in spec_helper
10
-
11
- begin
12
- require 'rcov'
13
- t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
14
- t.rcov_opts << '--exclude' << 'spec'
15
- t.rcov_opts << '--text-summary'
16
- t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
17
- rescue LoadError
18
- # rcov not installed
19
- rescue SyntaxError
20
- # rcov syntax invalid
21
- end
22
- end
23
- rescue LoadError
24
- # rspec not installed
25
- end