Class: Nhgis::DataGroup
- Inherits:
-
NhgisActiveRecord::Base
- Object
- NhgisActiveRecord::Base
- Nhgis::DataGroup
- Defined in:
- app/models/nhgis/data_group.rb
Class Method Summary collapse
- .find_all_available_for(dataset_id, geog_level_ids, data_time_instance_ids) ⇒ Object
- .find_all_for(dataset_id, geog_level_id, datatime_instance_id, geogtime_instance_id) ⇒ Object
Instance Method Summary collapse
- #available_data_files(breakdown_value_istads_ids) ⇒ Object
- #available_integ_geog_names ⇒ Object
- #data_files_for_breakdown_values(breakdown_values) ⇒ Object
- #extract_output_name(prefix) ⇒ Object
- #geog_level ⇒ Object
- #geog_time_instance_id ⇒ Object
- #geog_unit ⇒ Object
- #geog_vars ⇒ Object
- #geog_vars_for_gis_join ⇒ Object
- #parent_geog_vars(geog_level) ⇒ Object
- #root ⇒ Object
- #source_geog_instances_for(integ_geog_names) ⇒ Object
Class Method Details
.find_all_available_for(dataset_id, geog_level_ids, data_time_instance_ids) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'app/models/nhgis/data_group.rb', line 80 def self.find_all_available_for(dataset_id, geog_level_ids, data_time_instance_ids) #answer the data groups for the specified dataset, and geog levels # typically, there will be just one data group per dataset/geog level. # however, expect more than one data group whenever the dataset has multiple time instances gl_join_clause = "" gl_where_clause = "" ti_where_clause = "" unless geog_level_ids.empty? gl_join_clause = "JOIN geotimes gt ON gt.id = dg.geotime_id" gl_where_clause = "AND gt.geog_level_id in (#{geog_level_ids.join(", ")})" end unless data_time_instance_ids.empty? ti_where_clause = "AND dg.datatime_id in (#{data_time_instance_ids.join(", ")})" end sql =<<-EOS SELECT DISTINCT dg.* FROM data_groups dg #{gl_join_clause} WHERE dg.relative_pathname IS NOT NULL AND dg.dataset_id = #{dataset_id} #{gl_where_clause} #{ti_where_clause} ORDER BY dg.istads_seq EOS find_by_sql(sql) end |
.find_all_for(dataset_id, geog_level_id, datatime_instance_id, geogtime_instance_id) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'app/models/nhgis/data_group.rb', line 53 def self.find_all_for(dataset_id, geog_level_id, datatime_instance_id, geogtime_instance_id) #answer the data groups for the specified dataset, and geog levels # typically, there will be just one data group per dataset/geog level. # however, expect more than one data group whenever the dataset has multiple time instances return [] if dataset_id.nil? #the dataset id must be provided to get anything back!! gt_join_clause = "" gl_where_clause = "" geog_ti_where_clause = "" if !geog_level_id.nil? || !geogtime_instance_id.nil? gt_join_clause = "JOIN geotimes gt ON gt.id = dg.geotime_id" gl_where_clause = "AND gt.geog_level_id = #{geog_level_id}" if !geog_level_id.nil? geog_ti_where_clause = "AND gt.time_instance_id = #{geogtime_instance_id}" if !geogtime_instance_id.nil? end data_ti_where_clause = "" data_ti_where_clause = "AND dg.datatime_id = #{datatime_instance_id}" unless datatime_instance_id.nil? sql =<<-EOS SELECT DISTINCT dg.* FROM data_groups dg #{gt_join_clause} WHERE dg.dataset_id = #{dataset_id} #{gl_where_clause} #{geog_ti_where_clause} #{data_ti_where_clause} ORDER BY dg.istads_seq EOS find_by_sql(sql) end |
Instance Method Details
#available_data_files(breakdown_value_istads_ids) ⇒ Object
45 46 47 |
# File 'app/models/nhgis/data_group.rb', line 45 def available_data_files(breakdown_value_istads_ids) return DataFile.find_all_for(self.id, breakdown_value_istads_ids) end |
#available_integ_geog_names ⇒ Object
36 37 38 |
# File 'app/models/nhgis/data_group.rb', line 36 def available_integ_geog_names self.root.source_geog_instances.map{|sgi| sgi.geog_name.integ_geog_name}.uniq end |
#data_files_for_breakdown_values(breakdown_values) ⇒ Object
40 41 42 |
# File 'app/models/nhgis/data_group.rb', line 40 def data_files_for_breakdown_values(breakdown_values) available_data_files(breakdown_values.map{|bv| bv.istads_id}) end |
#extract_output_name(prefix) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'app/models/nhgis/data_group.rb', line 105 def extract_output_name(prefix) # # specify data group's portion of the 'base filename' to which the extract engine should assign selected # contents of this data file # # NOTE: derived from: dataset istads_id + time_instance istads_id [ + geotime istads_id] + geog_level istads_id # dataset_extract_output_name = "_#{self.dataset.istads_id}" datatime_extract_output_name = "_#{self.datatime.istads_id}" geogtime_extract_output_name = "_#{self.geotime.time_instance.istads_id}" geogtime_extract_output_name = "" if geogtime_extract_output_name == datatime_extract_output_name geog_level_extract_output_name = "_#{self.geotime.geog_level.abbr}" "#{prefix}#{dataset_extract_output_name}#{datatime_extract_output_name}#{geogtime_extract_output_name}#{geog_level_extract_output_name}" end |
#geog_level ⇒ Object
15 16 17 |
# File 'app/models/nhgis/data_group.rb', line 15 def geog_level geotime.geog_level end |
#geog_time_instance_id ⇒ Object
23 24 25 |
# File 'app/models/nhgis/data_group.rb', line 23 def geog_time_instance_id geotime.time_instance_id end |
#geog_unit ⇒ Object
19 20 21 |
# File 'app/models/nhgis/data_group.rb', line 19 def geog_unit geotime.geog_unit end |
#geog_vars ⇒ Object
11 12 13 |
# File 'app/models/nhgis/data_group.rb', line 11 def geog_vars geotime.geog_level.geog_vars & dataset.geog_vars end |
#geog_vars_for_gis_join ⇒ Object
32 33 34 |
# File 'app/models/nhgis/data_group.rb', line 32 def geog_vars_for_gis_join parent_geog_vars(geotime.geog_level) & dataset.geog_vars end |
#parent_geog_vars(geog_level) ⇒ Object
27 28 29 30 |
# File 'app/models/nhgis/data_group.rb', line 27 def parent_geog_vars(geog_level) parent_level = geog_level.parent parent_level ? parent_geog_vars(parent_level) + geog_level.geog_vars : geog_level.geog_vars end |
#root ⇒ Object
120 121 122 |
# File 'app/models/nhgis/data_group.rb', line 120 def root DataGroup.find_by_dataset_id_and_geotime_id(dataset, self.geotime.root) end |
#source_geog_instances_for(integ_geog_names) ⇒ Object
49 50 51 |
# File 'app/models/nhgis/data_group.rb', line 49 def source_geog_instances_for(integ_geog_names) root.source_geog_instances.select{|sgi| integ_geog_names.include? sgi.geog_name.integ_geog_name}.uniq end |