Class: Nhgis::BreakdownCombo
- Inherits:
-
NhgisActiveRecord::Base
- Object
- NhgisActiveRecord::Base
- Nhgis::BreakdownCombo
- Defined in:
- app/models/nhgis/breakdown_combo.rb
Class Method Summary collapse
- .defaults ⇒ Object
- .find_by_breakdown_values(breakdown_value_istads_ids) ⇒ Object
- .istads_ids_for_sql(breakdown_value_istads_id_list) ⇒ Object
Instance Method Summary collapse
- #codebook_labels ⇒ Object
- #header_label ⇒ Object
- #is_default? ⇒ Boolean
- #sorted_breakdown_values ⇒ Object
Class Method Details
.defaults ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'app/models/nhgis/breakdown_combo.rb', line 15 def self.defaults sql =" SELECT bc.*\n FROM breakdown_combos bc\n JOIN breakdown_values_x_breakdown_combos x ON x.breakdown_combo_id = bc.id\n JOIN breakdown_values bv ON bv.id = x.breakdown_value_id\n GROUP BY bc.id HAVING COUNT(bv.id) = SUM(is_default);\n EOS\n find_by_sql(sql)\nend\n" |
.find_by_breakdown_values(breakdown_value_istads_ids) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'app/models/nhgis/breakdown_combo.rb', line 26 def self.find_by_breakdown_values(breakdown_value_istads_ids) # there is an assumption that breakdown_value_istads_ids will contain the istads ids belonging to... # NO breakdown value set (when empty), # one breakdown value set (when breakdown value istads ids begin with the SAME prefix e.g. "bs01" # two breakdown value sets (when breakdown value istads ids begin with one prefix or another e.g. "bs01" or "bs02" # ASSUMPTION is that there is never a valid breakdown combo where #puts "*** In find_by_breakdown_values #{breakdown_value_istads_ids.inspect}" breakdown_value_sets = breakdown_value_istads_ids.map{|bv| bv. split("."). first}.flatten.uniq case breakdown_value_sets.size when 0 return [] when 1 sql_values = BreakdownCombo.istads_ids_for_sql(breakdown_value_istads_ids) sql = "SELECT DISTINCT * FROM breakdown_combos WHERE istads_id IN (#{sql_values})" when 2 bs1 = breakdown_value_sets.first bs2 = breakdown_value_sets.last bvs1 = breakdown_value_istads_ids.select{|bv| bv.split(".").first == bs1} bvs2 = breakdown_value_istads_ids.select{|bv| bv.split(".").first == bs2} sql_values1 = BreakdownCombo.istads_ids_for_sql(bvs1) sql_values2 = BreakdownCombo.istads_ids_for_sql(bvs2) sql = "SELECT DISTINCT bc.* FROM breakdown_combos bc " sql << "JOIN breakdown_values_x_breakdown_combos x ON x.breakdown_combo_id = bc.id " sql << "JOIN breakdown_values bv ON bv.id = x.breakdown_value_id AND bv.istads_id LIKE '#{bs1}.%' " sql << "JOIN breakdown_values_x_breakdown_combos x2 ON x2.breakdown_combo_id = x.breakdown_combo_id " sql << "JOIN breakdown_values bv2 ON bv2.id = x2.breakdown_value_id AND bv2.istads_id LIKE '#{bs2}.%' " sql << "WHERE bv.istads_id IN (#{sql_values1}) AND bv2.istads_id IN (#{sql_values2})" else raise "too many breakdown value sets; only expected 1 or 2 (or none)" end find_by_sql(sql) end |
.istads_ids_for_sql(breakdown_value_istads_id_list) ⇒ Object
10 11 12 13 |
# File 'app/models/nhgis/breakdown_combo.rb', line 10 def self.istads_ids_for_sql(breakdown_value_istads_id_list) #this method will convert an array of breakdown value istads id into a string that can be used in a sql statement breakdown_value_istads_id_list.inspect.gsub("[", "").gsub("]", "").gsub("\"", "'") end |
Instance Method Details
#codebook_labels ⇒ Object
65 66 67 |
# File 'app/models/nhgis/breakdown_combo.rb', line 65 def codebook_labels sorted_breakdown_values.map{|bv| bv.composite_codebook_label} end |
#header_label ⇒ Object
69 70 71 72 73 |
# File 'app/models/nhgis/breakdown_combo.rb', line 69 def header_label #"[breakdown_var 1 value]: [breakdown_var 2 value]" # NOTE : currently sorting the breakdowns using the breakdown value set istads_id sorted_breakdown_values.map{|bv| bv.label}.join(": ") end |
#is_default? ⇒ Boolean
75 76 77 78 |
# File 'app/models/nhgis/breakdown_combo.rb', line 75 def is_default? breakdown_values.each{|bv| return false unless bv.is_default} return true end |
#sorted_breakdown_values ⇒ Object
80 81 82 |
# File 'app/models/nhgis/breakdown_combo.rb', line 80 def sorted_breakdown_values breakdown_values.sort{|a,b| a.breakdown_value_set.istads_seq <=> b.breakdown_value_set.istads_seq} end |