polymorphic_integer_type 1.0.6 → 2.0.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: 3150bb1aade940d2d7bcc14f11346b94c9d0371a
4
- data.tar.gz: a1f64074b2044039215457482bb86a25f01d41bb
3
+ metadata.gz: 08271771790e3d2546b8584b6fe792c8f494b640
4
+ data.tar.gz: 27d420188711bc29f27712c91d8cb8e386ff8f8b
5
5
  SHA512:
6
- metadata.gz: e50a25927c9f53b06562122c1006a0659c8ba8eeefff14641d6b84f849d128ed6f416825837b06c1b22721653606ca6bb2be60dc66f512c54794d866f8a03b77
7
- data.tar.gz: 2cff25efb18334cfd06db9cfc6f2c299738c559bd961db6386a73c49d42167a3ce481f3fde8e6c0f22e0cbbc37cf0fdea7692a8772ba609d88f6cdd1bc2ee616
6
+ metadata.gz: c2bfd9fc2c3a12b560cf8bd3ddc2c8863b434d21253b552f854d1fcc20ed5584c9f514d1cfed66e38873324f7af6e3a4e780d5b23ba28d0287b6c8a2a8d41b1b
7
+ data.tar.gz: c293b70d040633371e16e5cad37c4a93005170f9be936202f8e74ec671ccdfc843214fb86c2ecf6587de5b1c252691d02f9daaf49e8219b4c51fb0cfeaaa5f94
data/README.md CHANGED
@@ -45,6 +45,8 @@ Or install it yourself as:
45
45
 
46
46
  $ gem install polymorphic_integer_type
47
47
 
48
+ For Rails 3.2 use version < 2. Version >= 2 has been tested on Rails 4.2 and Ruby 2.1
49
+
48
50
  ## Usage
49
51
 
50
52
  The gem is pretty straightforward to use.
@@ -3,12 +3,13 @@ module PolymorphicIntegerType
3
3
  module Extensions
4
4
  module ClassMethods
5
5
 
6
- def belongs_to(name, options = {})
6
+ def belongs_to(name, scope = nil, options = {})
7
+ options = scope if scope.kind_of? Hash
7
8
  integer_type = options.delete :integer_type
8
9
  super
9
10
  if options[:polymorphic] && integer_type
10
11
  mapping = PolymorphicIntegerType::Mapping[name]
11
- foreign_type = reflections[name].foreign_type
12
+ foreign_type = reflections[name.to_s].foreign_type
12
13
  self._polymorphic_foreign_types << foreign_type
13
14
 
14
15
  define_method foreign_type do
@@ -16,7 +17,7 @@ module PolymorphicIntegerType
16
17
  mapping[t]
17
18
  end
18
19
 
19
- define_method "#{foreign_type}=" do |klass|
20
+ define_method "#{foreign_type}=" do |klass|
20
21
  enum = mapping.key(klass.to_s)
21
22
  enum ||= mapping.key(klass.base_class.to_s) if klass.kind_of?(Class) && klass <= ActiveRecord::Base
22
23
  enum ||= klass if klass != NilClass
@@ -37,7 +38,7 @@ module PolymorphicIntegerType
37
38
  end
38
39
  end
39
40
 
40
- def remove_type_and_establish_mapping(name, options)
41
+ def remove_type_and_establish_mapping(name, options, scope)
41
42
  integer_type = options.delete :integer_type
42
43
  if options[:as] && integer_type
43
44
  poly_type = options.delete(:as)
@@ -47,24 +48,35 @@ module PolymorphicIntegerType
47
48
 
48
49
  options[:foreign_key] ||= "#{poly_type}_id"
49
50
  foreign_type = options.delete(:foreign_type) || "#{poly_type}_type"
50
- options[:conditions] ||= {}
51
- if options[:conditions].is_a?(Array)
52
- cond = options[:conditions].first
53
- options[:conditions][0] = "(#{cond}) AND #{foreign_type}=#{klass_mapping.to_i}"
54
- else
55
- options[:conditions].merge!({foreign_type => klass_mapping.to_i})
56
- end
51
+
52
+ options[:scope] ||= -> {
53
+ condition = where(foreign_type => klass_mapping.to_i)
54
+ condition = instance_exec(&scope).merge(condition) if scope.is_a?(Proc)
55
+ condition
56
+ }
57
+ else
58
+ options[:scope] ||= scope
57
59
  end
58
60
  end
59
61
 
60
- def has_many(name, options = {}, &extension)
61
- remove_type_and_establish_mapping(name, options)
62
- super(name, options, &extension)
62
+ def has_many(name, scope = nil, options = {}, &extension)
63
+ if scope.kind_of? Hash
64
+ options = scope
65
+ scope = nil
66
+ end
67
+
68
+ remove_type_and_establish_mapping(name, options, scope)
69
+ super(name, options.delete(:scope), options, &extension)
63
70
  end
64
71
 
65
- def has_one(name, options = {})
66
- remove_type_and_establish_mapping(name, options)
67
- super(name, options)
72
+ def has_one(name, scope = nil, options = {})
73
+ if scope.kind_of? Hash
74
+ options = scope
75
+ scope = nil
76
+ end
77
+
78
+ remove_type_and_establish_mapping(name, options, scope)
79
+ super(name, options.delete(:scope), options)
68
80
  end
69
81
 
70
82
 
@@ -1,3 +1,3 @@
1
1
  module PolymorphicIntegerType
2
- VERSION = "1.0.6"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.2"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
- spec.add_development_dependency "activerecord", "3.2.11"
25
- spec.add_development_dependency "mysql", "2.8.1"
26
- spec.add_development_dependency "debugger"
24
+ spec.add_development_dependency "activerecord", "4.2.0"
25
+ spec.add_development_dependency "mysql2", "0.3.16"
26
+ spec.add_development_dependency "byebug"
27
27
 
28
28
  end
@@ -2,7 +2,7 @@ require 'active_record'
2
2
  Dir["#{File.dirname(__FILE__)}/migrations/*.rb"].each {|f| require f}
3
3
 
4
4
  config = {
5
- :adapter => "mysql",
5
+ :adapter => "mysql2",
6
6
  :host => "localhost",
7
7
  :database => "polymorphic_integer_type_test",
8
8
  :username => "root",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polymorphic_integer_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle d'Oliveira
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-01 00:00:00.000000000 Z
11
+ date: 2015-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,30 +58,30 @@ dependencies:
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 3.2.11
61
+ version: 4.2.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 3.2.11
68
+ version: 4.2.0
69
69
  - !ruby/object:Gem::Dependency
70
- name: mysql
70
+ name: mysql2
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 2.8.1
75
+ version: 0.3.16
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 2.8.1
82
+ version: 0.3.16
83
83
  - !ruby/object:Gem::Dependency
84
- name: debugger
84
+ name: byebug
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="