schema_associations 1.1.0 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 757e462b9762015289cb5f2fe1bbbf6bb1c566a4
4
- data.tar.gz: 344a36f0f484b1c929e84f38a4c2c1daa9dbacbf
3
+ metadata.gz: 70205c74f75ca21daa67a8f61fe2d1d929c31190
4
+ data.tar.gz: 361d1fad6225d77f2a3c082a07ab455275c1c9d5
5
5
  SHA512:
6
- metadata.gz: 67b28e20707ccac8c97fb0713face550b9c44adbca8102de6149c2fe8caf5326c389a5d9030df1f6ad23e0b3d43c3e1faf9db8d98c47ccd3d1adea67f142d118
7
- data.tar.gz: 5d19049e8483c2751f48bb39bf2f09989185a80bfa8dc1d6536e79be60d1ceaab26f3dd5b8f91812d31f1f3cc3b6759a7a98f2896fd91f51c0a2014bbc3b5148
6
+ metadata.gz: 4404428e7c93f5afe933a10ff82dbed3c4b9dafb3bb9b9540559d24517c5e8bad1fd5a8299ef82f8e5a0f275ae11af617b0bb39051349470a42fa61cac196005
7
+ data.tar.gz: 6fc59f166f9732dfd794b844e631cf037c1afb8e944b308b2cba25df2538866a260598238239e9c8eb93f4d11c6d72fa470048a90b82d3a60f43631cef5f0fcc
data/.travis.yml CHANGED
@@ -1,10 +1,11 @@
1
1
  rvm:
2
- - 1.9.2
3
2
  - 1.9.3
4
3
  - 2.0.0
5
4
  gemfile:
6
5
  - gemfiles/Gemfile.rails-3.2
6
+ - gemfiles/Gemfile.rails-4.0
7
7
  notifications:
8
8
  recipients:
9
9
  - michal.lomnicki@gmail.com
10
10
  - ronen@barzel.org
11
+ - toby@ovod-everett.org
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # SchemaAssociations
2
2
 
3
- SchemaAssiciations is an ActiveRecord extension that keeps your model class
3
+ SchemaAssociations is an ActiveRecord extension that keeps your model class
4
4
  definitions simpler and more DRY, by automatically defining associations based
5
5
  on the database schema.
6
6
 
@@ -68,7 +68,7 @@ SchemaAssociations::ActiveRecord#schema_associations, such as:
68
68
  schema_associations :concise_names => false
69
69
  end
70
70
 
71
- See the[SchemaAssociations::Confg](http://rubydoc.info/gems/schema_associations/SchemaAssociations/Config) for the available options.
71
+ See the [SchemaAssociations::Confg RDOC](http://rubydoc.info/gems/schema_associations/SchemaAssociations/Config) for the available options.
72
72
 
73
73
  ### This seems cool, but I'm worried about too much automagic
74
74
 
@@ -318,12 +318,11 @@ use cases that you logged).
318
318
  ## Compatibility
319
319
 
320
320
  SchemaAssociations supports all combinations of:
321
- * rails 3.2
322
- * MRI ruby 1.9.2 or 1.9.3
323
321
 
322
+ * Rails 3.2 or rails 4.0
323
+ * MRI ruby 1.9.3 or 2.0.0
324
324
 
325
- Note: As of version 1.0.0, ruby 1.8.7 and rails < 3.2 are no longer supported.
326
- The last version to support them is 0.1.2
325
+ Note: As of version 1.0.0, ruby 1.8.7 and rails < 3.2 are no longer supported. As of version 1.2.0, ruby 1.9.2 is no longer supported.
327
326
 
328
327
  ## Installation
329
328
 
@@ -350,11 +349,15 @@ specific file or example (rather than running the full suite) you can do, e.g.
350
349
 
351
350
  $ ./runspecs [other options] --rspec -- spec/association_spec.rb -e 'base'
352
351
 
353
- If you're running ruby 1.9, code coverage results will be in
354
- coverage/index.html -- it should be at 100% coverage.
352
+ Code coverage results will be in coverage/index.html -- it should be at 100% coverage.
355
353
 
356
354
  ## Release notes:
357
355
 
356
+ ### 1.2.0
357
+
358
+ * Works with Rails 4, thanks to [@tovodeverett](https://github.com/tovodeverett)
359
+ * Test against MRI ruby 2.0.0; no longer test against 1.9.2
360
+
358
361
  ### 1.1.0
359
362
 
360
363
  * New feature: `config.table_prefix_map`
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec :path => File.expand_path('../..', __FILE__)
4
+ gem "rails", "~> 4.0.0"
@@ -10,7 +10,7 @@ module SchemaAssociations
10
10
  end
11
11
 
12
12
  def initialize_with_schema_associations(klass, *args)
13
- klass.send :_load_schema_associations_associations
13
+ klass.send :_load_schema_associations_associations unless klass.nil?
14
14
  initialize_without_schema_associations(klass, *args)
15
15
  end
16
16
  end
@@ -134,13 +134,21 @@ module SchemaAssociations
134
134
  macro = :has_many
135
135
  name = names[:has_many]
136
136
  if connection.columns(referencing_table_name).any?{ |col| col.name == 'position' }
137
- opts[:order] = :position
137
+ if ::ActiveRecord::VERSION::MAJOR.to_i < 4
138
+ opts[:order] = :position
139
+ else
140
+ scope_block = lambda { order :position }
141
+ end
138
142
  end
139
143
  end
140
144
  end
141
145
  if (_filter_association(macro, name) && !_method_exists?(name))
142
146
  logger.info "[schema_associations] #{self.name || self.table_name.classify}.#{macro} #{name.inspect}, #{opts.inspect[1...-1]}"
143
- send macro, name, opts.dup
147
+ if ::ActiveRecord::VERSION::MAJOR.to_i < 4
148
+ send macro, name, opts.dup
149
+ else
150
+ send macro, name, scope_block, opts.dup
151
+ end
144
152
  end
145
153
  end
146
154
 
@@ -1,3 +1,3 @@
1
1
  module SchemaAssociations
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
data/runspecs CHANGED
@@ -6,7 +6,7 @@ require 'shellwords'
6
6
  require 'tempfile'
7
7
 
8
8
  RUBY_VERSIONS = %W[1.9.3 2.0.0]
9
- RAILS_VERSIONS = %W[3.2]
9
+ RAILS_VERSIONS = %W[3.2 4.0]
10
10
 
11
11
  o = OpenStruct.new
12
12
  o.ruby_versions = RUBY_VERSIONS
@@ -51,11 +51,28 @@ Combo = Struct.new(:ruby, :rails)
51
51
 
52
52
  combos = o.ruby_versions.product(o.rails_versions).map{|product| Combo.new(*product)}.select {|combo|
53
53
  case
54
- when combo.rails >= "3.2" && combo.ruby <= "1.8.7" then false
54
+ when combo.rails >= "3.2" && combo.ruby <= "1.8.7" then false # no longer happens, just keeping it as an example
55
55
  else true
56
56
  end
57
57
  }
58
58
 
59
+ if system("which -s rvm")
60
+ # using rvm
61
+ def ruby_version_selector(ruby)
62
+ "rvm #{ruby} do"
63
+ end
64
+ else
65
+ # using rbenv. remove current version from path and current gem path
66
+ # so that forked shell will respect RBENV_VERSION variable
67
+ ENV['PATH'] = ENV['PATH'].split(':').reject{|dir| dir =~ %r{/rbenv/versions/}}.join(':')
68
+ ENV['GEM_PATH'] = nil
69
+
70
+ def ruby_version_selector(ruby)
71
+ @versions ||= `rbenv versions --bare`.split
72
+ version = @versions.select{|v| v.start_with? ruby}.last || abort("no ruby version '#{ruby}' installed in rbenv")
73
+ "RBENV_VERSION=#{version}"
74
+ end
75
+ end
59
76
 
60
77
  GEMFILES_DIR = File.expand_path('../gemfiles', __FILE__)
61
78
  errs = []
@@ -74,7 +91,7 @@ combos.each_with_index do |combo, n|
74
91
  "bundle exec rake spec"
75
92
  end
76
93
 
77
- command = %Q{BUNDLE_GEMFILE="#{File.join(GEMFILES_DIR, "Gemfile.rails-#{rails}")}" rvm #{ruby} do #{cmd} #{Shellwords.join(ARGV)}}
94
+ command = %Q{BUNDLE_GEMFILE="#{File.join(GEMFILES_DIR, "Gemfile.rails-#{rails}")}" #{ruby_version_selector(ruby)} #{cmd} #{Shellwords.join(ARGV)}}
78
95
 
79
96
  puts "\n\n*** ruby version #{ruby} - rails version #{rails} [#{n+1} of #{combos.size}]\n\n#{command}"
80
97
 
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency("schema_plus")
23
-
22
+ s.add_dependency("schema_plus", ">= 1.2.0")
23
+
24
24
  s.add_development_dependency("rake")
25
25
  s.add_development_dependency("rdoc")
26
26
  s.add_development_dependency("rspec")
@@ -329,12 +329,36 @@ describe ActiveRecord::Base do
329
329
  )
330
330
  class HappyPost < ActiveRecord::Base ; self.table_name = 'wooga_posts' ; end
331
331
  class HappyComment < ActiveRecord::Base ; self.table_name = 'wooga_comments' ; end
332
- Kernel.warn HappyPost.reflect_on_all_associations.inspect
332
+ # Kernel.warn HappyPost.reflect_on_all_associations.inspect
333
333
  HappyComment.reflect_on_association(:post).class_name.should == "HappyPost"
334
334
  HappyPost.reflect_on_association(:comments).class_name.should == "HappyComment"
335
335
  end
336
336
  end
337
337
 
338
+ context "without position" do
339
+ before(:each) do
340
+ create_tables(
341
+ "posts", {}, {},
342
+ "comments", {}, { :post_id => {} }
343
+ )
344
+ class Post < ActiveRecord::Base ; end
345
+ class Comment < ActiveRecord::Base ; end
346
+ end
347
+ it "should create unordered has_many association" do
348
+ reflection = Post.reflect_on_association(:comments)
349
+ reflection.should_not be_nil
350
+ reflection.macro.should == :has_many
351
+ reflection.options[:class_name].should == "Comment"
352
+ reflection.options[:foreign_key].should == "post_id"
353
+ reflection.options[:inverse_of].should == :post
354
+ if ::ActiveRecord::VERSION::MAJOR.to_i < 4
355
+ reflection.options[:order].should be_nil
356
+ else
357
+ reflection.scope.should be_nil
358
+ end
359
+ end
360
+ end
361
+
338
362
  context "with position" do
339
363
  before(:each) do
340
364
  create_tables(
@@ -351,7 +375,48 @@ describe ActiveRecord::Base do
351
375
  reflection.options[:class_name].should == "Comment"
352
376
  reflection.options[:foreign_key].should == "post_id"
353
377
  reflection.options[:inverse_of].should == :post
354
- reflection.options[:order].to_s.should == "position"
378
+ if ::ActiveRecord::VERSION::MAJOR.to_i < 4
379
+ reflection.options[:order].to_s.should == "position"
380
+ else
381
+ reflection.scope.should_not be_nil
382
+ scope_tester = Object.new
383
+ expect(scope_tester).to receive(:order).with(:position)
384
+ scope_tester.instance_exec(&reflection.scope)
385
+ end
386
+ end
387
+ end
388
+
389
+ context "with scope that doesn't use include" do
390
+ before(:each) do
391
+ create_tables(
392
+ "posts", {}, {},
393
+ "comments", {}, { :post_id => {}, :position => {} }
394
+ )
395
+ class Post < ActiveRecord::Base ; end
396
+ class Comment < ActiveRecord::Base
397
+ scope :simple_scope, lambda { order(:id) }
398
+ end
399
+ end
400
+ it "should create viable scope" do
401
+ relation = Comment.simple_scope
402
+ expect { relation.to_a }.to_not raise_error
403
+ end
404
+ end
405
+
406
+ context "with scope that uses include" do
407
+ before(:each) do
408
+ create_tables(
409
+ "posts", {}, {},
410
+ "comments", {}, { :post_id => {}, :position => {} }
411
+ )
412
+ class Post < ActiveRecord::Base ; end
413
+ class Comment < ActiveRecord::Base
414
+ scope :simple_scope, lambda { order(:id).includes(:post) }
415
+ end
416
+ end
417
+ it "should create viable scope" do
418
+ relation = Comment.simple_scope
419
+ expect { relation.to_a }.to_not raise_error
355
420
  end
356
421
  end
357
422
 
@@ -552,11 +617,8 @@ describe ActiveRecord::Base do
552
617
  end
553
618
 
554
619
  it "should define associations before needed by relation" do
555
- Post.joins(:comments).all
556
- expect { Post.joins(:comments).all }.to_not raise_error
557
-
620
+ expect { Post.joins(:comments).to_a }.to_not raise_error
558
621
  end
559
-
560
622
  end
561
623
  end
562
624
 
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,6 @@
1
- if RUBY_VERSION > "1.9"
2
- require 'simplecov'
3
- require 'simplecov-gem-adapter'
4
- SimpleCov.start "gem"
5
- end
1
+ require 'simplecov'
2
+ require 'simplecov-gem-adapter'
3
+ SimpleCov.start "gem"
6
4
 
7
5
  $LOAD_PATH.unshift(File.dirname(__FILE__))
8
6
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
@@ -27,4 +25,4 @@ def remove_all_models
27
25
  end
28
26
  end
29
27
 
30
- SimpleCov.command_name ActiveRecord::Base.connection.adapter_name if defined? SimpleCov
28
+ SimpleCov.command_name "[Ruby #{RUBY_VERSION} - ActiveRecord #{::ActiveRecord::VERSION::STRING}]"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_associations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ronen Barzel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-30 00:00:00.000000000 Z
12
+ date: 2013-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: schema_plus
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '>='
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: 1.2.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '>='
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: 1.2.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -127,7 +127,7 @@ files:
127
127
  - README.md
128
128
  - Rakefile
129
129
  - gemfiles/Gemfile.rails-3.2
130
- - gemfiles/Gemfile.rails-3.2.lock
130
+ - gemfiles/Gemfile.rails-4.0
131
131
  - init.rb
132
132
  - lib/schema_associations.rb
133
133
  - lib/schema_associations/active_record/associations.rb
@@ -1,118 +0,0 @@
1
- PATH
2
- remote: /Users/ronen/github/schema_associations
3
- specs:
4
- schema_associations (1.0.1)
5
- schema_plus
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- actionmailer (3.2.13)
11
- actionpack (= 3.2.13)
12
- mail (~> 2.5.3)
13
- actionpack (3.2.13)
14
- activemodel (= 3.2.13)
15
- activesupport (= 3.2.13)
16
- builder (~> 3.0.0)
17
- erubis (~> 2.7.0)
18
- journey (~> 1.0.4)
19
- rack (~> 1.4.5)
20
- rack-cache (~> 1.2)
21
- rack-test (~> 0.6.1)
22
- sprockets (~> 2.2.1)
23
- activemodel (3.2.13)
24
- activesupport (= 3.2.13)
25
- builder (~> 3.0.0)
26
- activerecord (3.2.13)
27
- activemodel (= 3.2.13)
28
- activesupport (= 3.2.13)
29
- arel (~> 3.0.2)
30
- tzinfo (~> 0.3.29)
31
- activeresource (3.2.13)
32
- activemodel (= 3.2.13)
33
- activesupport (= 3.2.13)
34
- activesupport (3.2.13)
35
- i18n (= 0.6.1)
36
- multi_json (~> 1.0)
37
- arel (3.0.2)
38
- builder (3.0.4)
39
- diff-lcs (1.2.4)
40
- erubis (2.7.0)
41
- hike (1.2.2)
42
- i18n (0.6.1)
43
- journey (1.0.4)
44
- json (1.8.0)
45
- mail (2.5.4)
46
- mime-types (~> 1.16)
47
- treetop (~> 1.4.8)
48
- mime-types (1.23)
49
- multi_json (1.7.4)
50
- polyglot (0.3.3)
51
- rack (1.4.5)
52
- rack-cache (1.2)
53
- rack (>= 0.4)
54
- rack-ssl (1.3.3)
55
- rack
56
- rack-test (0.6.2)
57
- rack (>= 1.0)
58
- rails (3.2.13)
59
- actionmailer (= 3.2.13)
60
- actionpack (= 3.2.13)
61
- activerecord (= 3.2.13)
62
- activeresource (= 3.2.13)
63
- activesupport (= 3.2.13)
64
- bundler (~> 1.0)
65
- railties (= 3.2.13)
66
- railties (3.2.13)
67
- actionpack (= 3.2.13)
68
- activesupport (= 3.2.13)
69
- rack-ssl (~> 1.3.2)
70
- rake (>= 0.8.7)
71
- rdoc (~> 3.4)
72
- thor (>= 0.14.6, < 2.0)
73
- rake (10.0.4)
74
- rdoc (3.12.2)
75
- json (~> 1.4)
76
- rspec (2.13.0)
77
- rspec-core (~> 2.13.0)
78
- rspec-expectations (~> 2.13.0)
79
- rspec-mocks (~> 2.13.0)
80
- rspec-core (2.13.1)
81
- rspec-expectations (2.13.0)
82
- diff-lcs (>= 1.1.3, < 2.0)
83
- rspec-mocks (2.13.1)
84
- schema_plus (1.1.2)
85
- rails (>= 3.2)
86
- valuable
87
- simplecov (0.7.1)
88
- multi_json (~> 1.0)
89
- simplecov-html (~> 0.7.1)
90
- simplecov-gem-adapter (1.0.1)
91
- simplecov
92
- simplecov-html (0.7.1)
93
- sprockets (2.2.2)
94
- hike (~> 1.2)
95
- multi_json (~> 1.0)
96
- rack (~> 1.0)
97
- tilt (~> 1.1, != 1.3.0)
98
- sqlite3 (1.3.7)
99
- thor (0.18.1)
100
- tilt (1.4.1)
101
- treetop (1.4.12)
102
- polyglot
103
- polyglot (>= 0.3.1)
104
- tzinfo (0.3.37)
105
- valuable (0.9.8)
106
-
107
- PLATFORMS
108
- ruby
109
-
110
- DEPENDENCIES
111
- rails (~> 3.2.0)
112
- rake
113
- rdoc
114
- rspec
115
- schema_associations!
116
- simplecov
117
- simplecov-gem-adapter
118
- sqlite3