polymorphic_integer_type 1.0.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="