genealogy 2.0.0 → 2.0.1

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: f135505bdbf0d836cdac669c1ee684c8959cedce
4
- data.tar.gz: d90f6befee994c37e2a900d7c85e37e0c7f3229c
3
+ metadata.gz: f8bcecb22a6962bc6220672801e068737865d783
4
+ data.tar.gz: 015a4ab711a4010f541370fcd90c57bd491210a5
5
5
  SHA512:
6
- metadata.gz: f1efa40c2b50b47caad8d4608157195d0a0d68f1659c08c1eb44d31381d61ec8bb738c61ada1369de74baad8f4c693aa3f0d54dd624c354897b7349eb2d0f081
7
- data.tar.gz: 443d273ad5240f9a5ecad5c902f8535a421f7c3f46e5d37b5a8c363c42713c582ca498dc582748f13fd89cb64c26ee7fd616d3de332d5f0c790528706ee95554
6
+ metadata.gz: f32db53259941b8f7583249892d27edf49144e741b03765f21d0b2effd521098d94b4377cad02433e39e2de6643dedbefb048f36c30e9ed4302b7cc6202d2721
7
+ data.tar.gz: 6b4727c0a01fa9d61a63901bc40cbcf55b2134150636dc8570b16f83b9cf9eae5bda53e643442c5c934c81ecb603c2f91b8b9ee46dbdab1fe8c22b50ccecb4f0
@@ -21,7 +21,13 @@ module Genealogy
21
21
  # @return [void]
22
22
  def has_parents options = {}
23
23
 
24
- check_options(options)
24
+ include Genealogy::UtilMethods
25
+ include Genealogy::QueryMethods
26
+ include Genealogy::IneligibleMethods
27
+ include Genealogy::AlterMethods
28
+ include Genealogy::CurrentSpouseMethods
29
+
30
+ check_has_parents_options(options)
25
31
 
26
32
  # keep track of the original extend class to prevent wrong scopes in query method in case of STI
27
33
  class_attribute :gclass, instance_writer: false
@@ -85,33 +91,6 @@ module Genealogy
85
91
  has_many :children_as_father, class_name: self, foreign_key: self.father_id_column, dependent: :nullify
86
92
  has_many :children_as_mother, class_name: self, foreign_key: self.mother_id_column, dependent: :nullify
87
93
 
88
- include Genealogy::UtilMethods
89
- include Genealogy::QueryMethods
90
- include Genealogy::IneligibleMethods
91
- include Genealogy::AlterMethods
92
- include Genealogy::CurrentSpouseMethods
93
-
94
- end
95
-
96
- private
97
-
98
- def check_options(options)
99
-
100
- raise ArgumentError, "Hash expected, #{options.class} given." unless options.is_a? Hash
101
-
102
- # column names
103
- options[:column_names] ||= {}
104
- raise ArgumentError, "Hash expected for :column_names option, #{options[:column_names].class} given." unless options[:column_names].is_a? Hash
105
-
106
- # sex
107
- if array = options[:sex_values]
108
- raise ArgumentError, ":sex_values option must be an array of length 2: [:male_value, :female_value]" unless array.is_a?(Array) and array.size == 2
109
- end
110
-
111
- # booleans
112
- options.slice(:perform_validation, :current_spouse).each do |k,v|
113
- raise ArgumentError, "Boolean expected for #{k} option, #{v.class} given." unless !!v == v
114
- end
115
94
  end
116
95
 
117
96
  end
@@ -87,8 +87,8 @@ module Genealogy
87
87
  ineligibles = []
88
88
  if gclass.ineligibility_level >= PEDIGREE
89
89
  ineligibles |= ancestors | descendants | siblings | [self]
90
- ineligibles |= (father ? gclass.all_with(:father).where.not(father_id: father) : [])
91
- ineligibles |= (mother ? gclass.all_with(:mother).where.not(mother_id: mother) : [])
90
+ ineligibles |= (father ? gclass.all_with(:father).where("father_id != ?", father) : [])
91
+ ineligibles |= (mother ? gclass.all_with(:mother).where("mother_id != ?", mother) : [])
92
92
  end
93
93
  if gclass.ineligibility_level >= PEDIGREE_AND_DATES
94
94
  # if a parent is present ineligible siblings are parent's ineligible children, otherwise try to estimate parent birth range.
@@ -28,12 +28,12 @@ module Genealogy
28
28
 
29
29
  # @return [2-elements Array] paternal_grandfather and paternal_grandmother
30
30
  def paternal_grandparents
31
- father && father.parents
31
+ (father && father.parents) || [nil,nil]
32
32
  end
33
33
 
34
34
  # @return [2-elements Array] maternal_grandfather and maternal_grandmother
35
35
  def maternal_grandparents
36
- mother && mother.parents
36
+ (mother && mother.parents) || [nil,nil]
37
37
  end
38
38
 
39
39
  # @return [4-elements Array] paternal_grandfather, paternal_grandmother, maternal_grandfather, maternal_grandmother
@@ -51,10 +51,10 @@ module Genealogy
51
51
  # @return [ActiveRecord::Relation] children
52
52
  def children(options = {})
53
53
  raise SexError, "Sex value not valid for #{self}. It's needed to look for children" unless gclass.sex_values.include? sex
54
- result = gclass.where(SEX2PARENT[ssex] => self)
54
+ result = gclass.where("#{SEX2PARENT[ssex]}_id" => self)
55
55
  if options.keys.include? :spouse
56
56
  check_indiv(spouse = options[:spouse],opposite_ssex)
57
- result = result.where(SEX2PARENT[opposite_ssex] => spouse ) if spouse
57
+ result = result.where("#{SEX2PARENT[opposite_ssex]}_id" => spouse ) if spouse
58
58
  end
59
59
  result
60
60
  end
@@ -73,8 +73,7 @@ module Genealogy
73
73
  # @return [ActiveRecord::Relation] list of fullsiblings and/or halfsiblings
74
74
  def siblings(options = {})
75
75
  spouse = options[:spouse]
76
-
77
- result = gclass.where.not(id: id)
76
+ result = gclass.where("id != ?",id)
78
77
  case options[:half]
79
78
  when nil # only full siblings
80
79
  result.all_with(:parents).where(father_id: father, mother_id: mother)
@@ -84,7 +83,7 @@ module Genealogy
84
83
  check_indiv(spouse, :female)
85
84
  result.where(mother_id: spouse)
86
85
  elsif mother
87
- result.where("#{gclass.mother_id_column} != ? or #{gclass.mother_id_column} is ?", mother_id, nil)
86
+ result.where("mother_id != ? or mother_id is ?", mother_id, nil)
88
87
  else
89
88
  result
90
89
  end
@@ -94,7 +93,7 @@ module Genealogy
94
93
  check_indiv(spouse, :male)
95
94
  result.where(father_id: spouse)
96
95
  elsif father
97
- result.where("#{gclass.father_id_column} != ? or #{gclass.father_id_column} is ?", father_id, nil)
96
+ result.where("father_id != ? or father_id is ?", father_id, nil)
98
97
  else
99
98
  result
100
99
  end
@@ -102,7 +101,7 @@ module Genealogy
102
101
  ids = siblings(half: :father).pluck(:id) | siblings(half: :mother).pluck(:id)
103
102
  result.where(id: ids)
104
103
  when :include # including half siblings
105
- result.where("#{gclass.father_id_column} == ? or #{gclass.mother_id_column} == ?", father_id, mother_id)
104
+ result.where("father_id == ? or mother_id == ?", father_id, mother_id)
106
105
  else
107
106
  raise ArgumentError, "Admitted values for :half options are: :father, :mother, false, true or nil"
108
107
  end
@@ -300,11 +299,11 @@ module Genealogy
300
299
  def all_with(role)
301
300
  case role
302
301
  when :father
303
- where.not(father_id: nil)
302
+ where('father_id is not ?',nil)
304
303
  when :mother
305
- where.not(mother_id: nil)
304
+ where('mother_id is not ?',nil)
306
305
  when :parents
307
- where.not(mother_id: nil,father_id: nil)
306
+ where('father_id is not ? and mother_id is not ?',nil,nil)
308
307
  end
309
308
  end
310
309
 
@@ -172,9 +172,32 @@ module Genealogy
172
172
  end
173
173
 
174
174
  def check_indiv(arg, arg_sex=nil)
175
- raise ArgumentError, "Expected #{self.gclass} object. Got #{arg.class}" unless arg.class.equal? self.gclass
175
+ raise ArgumentError, "Expected #{self.gclass} object. Got #{arg.class}" unless arg.is_a? self.gclass
176
176
  raise SexError, "Expected a #{arg_sex} as argument. Got a #{arg.ssex}" if arg_sex and arg.ssex != arg_sex
177
177
  end
178
178
 
179
+ module ClassMethods
180
+
181
+ def check_has_parents_options(options)
182
+
183
+ raise ArgumentError, "Hash expected, #{options.class} given." unless options.is_a? Hash
184
+
185
+ # column names
186
+ options[:column_names] ||= {}
187
+ raise ArgumentError, "Hash expected for :column_names option, #{options[:column_names].class} given." unless options[:column_names].is_a? Hash
188
+
189
+ # sex
190
+ if array = options[:sex_values]
191
+ raise ArgumentError, ":sex_values option must be an array of length 2: [:male_value, :female_value]" unless array.is_a?(Array) and array.size == 2
192
+ end
193
+
194
+ # booleans
195
+ options.slice(:perform_validation, :current_spouse).each do |k,v|
196
+ raise ArgumentError, "Boolean expected for #{k} option, #{v.class} given." unless !!v == v
197
+ end
198
+ end
199
+
200
+ end
201
+
179
202
  end
180
203
  end
@@ -1,3 +1,3 @@
1
1
  module Genealogy
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genealogy
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - masciugo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-13 00:00:00.000000000 Z
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: database_cleaner
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,20 @@ dependencies:
164
178
  - - ">="
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: appraisal
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
167
195
  - !ruby/object:Gem::Dependency
168
196
  name: byebug
169
197
  requirement: !ruby/object:Gem::Requirement
@@ -216,7 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
244
  version: '0'
217
245
  requirements: []
218
246
  rubyforge_project: "[none]"
219
- rubygems_version: 2.2.2
247
+ rubygems_version: 2.4.5
220
248
  signing_key:
221
249
  specification_version: 4
222
250
  summary: Make ActiveRecord model act as a pedigree