terrapop_models 0.1.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.
Files changed (490) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/terrapop_models/application.js +13 -0
  6. data/app/assets/stylesheets/terrapop_models/application.css +15 -0
  7. data/app/controllers/terrapop_models/application_controller.rb +4 -0
  8. data/app/helpers/terrapop_models/application_helper.rb +4 -0
  9. data/app/models/api_log.rb +2 -0
  10. data/app/models/area_data_raster.rb +126 -0
  11. data/app/models/area_data_raster_variable_mnemonic_lookup.rb +4 -0
  12. data/app/models/area_data_statistic.rb +6 -0
  13. data/app/models/area_data_table.rb +25 -0
  14. data/app/models/area_data_table_group.rb +8 -0
  15. data/app/models/area_data_table_group_membership.rb +7 -0
  16. data/app/models/area_data_value.rb +37 -0
  17. data/app/models/area_data_variable.rb +140 -0
  18. data/app/models/area_data_variable_construction.rb +6 -0
  19. data/app/models/attached_variable_pointer.rb +5 -0
  20. data/app/models/bare_user.rb +7 -0
  21. data/app/models/boundary.rb +6 -0
  22. data/app/models/build_status.rb +2 -0
  23. data/app/models/category.rb +17 -0
  24. data/app/models/codebook.rb +242 -0
  25. data/app/models/common_variable.rb +2 -0
  26. data/app/models/country.rb +45 -0
  27. data/app/models/country_comparability.rb +6 -0
  28. data/app/models/country_level.rb +8 -0
  29. data/app/models/ddi2_codebook.rb +541 -0
  30. data/app/models/error_event.rb +2 -0
  31. data/app/models/extract_data_artifact.rb +4 -0
  32. data/app/models/extract_request.rb +817 -0
  33. data/app/models/extract_request_area_data_raster_variable_mnemonic_lookup.rb +4 -0
  34. data/app/models/extract_request_error_event.rb +4 -0
  35. data/app/models/extract_request_submission.rb +19 -0
  36. data/app/models/extract_status.rb +55 -0
  37. data/app/models/extract_type.rb +2 -0
  38. data/app/models/extract_variable_stub.rb +17 -0
  39. data/app/models/frequency.rb +7 -0
  40. data/app/models/geog_instance.rb +18 -0
  41. data/app/models/geog_unit.rb +5 -0
  42. data/app/models/global_region.rb +6 -0
  43. data/app/models/global_region_type.rb +5 -0
  44. data/app/models/heartbeat.rb +8 -0
  45. data/app/models/heartbeat_pulse.rb +3 -0
  46. data/app/models/insert_html_fragment.rb +3 -0
  47. data/app/models/ipums_academic_status.rb +9 -0
  48. data/app/models/ipums_anticipated_result.rb +9 -0
  49. data/app/models/ipums_department.rb +9 -0
  50. data/app/models/ipums_registration.rb +72 -0
  51. data/app/models/ipums_user.rb +15 -0
  52. data/app/models/label.rb +7 -0
  53. data/app/models/link.rb +21 -0
  54. data/app/models/map.rb +255 -0
  55. data/app/models/map_unit.rb +4 -0
  56. data/app/models/map_unit_raster_dataset.rb +4 -0
  57. data/app/models/markup_transform.rb +240 -0
  58. data/app/models/measurement_type.rb +5 -0
  59. data/app/models/nhgis/agg_data_var.rb +120 -0
  60. data/app/models/nhgis/breakdown_combo.rb +84 -0
  61. data/app/models/nhgis/breakdown_var.rb +8 -0
  62. data/app/models/nhgis/data_file.rb +43 -0
  63. data/app/models/nhgis/data_file_type.rb +17 -0
  64. data/app/models/nhgis/data_group.rb +125 -0
  65. data/app/models/nhgis/data_record_range.rb +22 -0
  66. data/app/models/nhgis/data_table.rb +8 -0
  67. data/app/models/nhgis/dataset.rb +76 -0
  68. data/app/models/nhgis/dataset_group.rb +6 -0
  69. data/app/models/nhgis/geog_level.rb +14 -0
  70. data/app/models/nhgis/geog_level_collection.rb +15 -0
  71. data/app/models/nhgis/geog_level_geog_level_group.rb +10 -0
  72. data/app/models/nhgis/geog_level_group.rb +87 -0
  73. data/app/models/nhgis/geog_name.rb +12 -0
  74. data/app/models/nhgis/geog_unit.rb +11 -0
  75. data/app/models/nhgis/geog_var 2.rb +10 -0
  76. data/app/models/nhgis/geog_var.rb +6 -0
  77. data/app/models/nhgis/geog_var_geog_level.rb +8 -0
  78. data/app/models/nhgis/geotime.rb +21 -0
  79. data/app/models/nhgis/integ_geog_instance.rb +6 -0
  80. data/app/models/nhgis/integ_geog_instance_source_geog_instance.rb +9 -0
  81. data/app/models/nhgis/integ_geog_level.rb +9 -0
  82. data/app/models/nhgis/integ_geog_name.rb +12 -0
  83. data/app/models/nhgis/shape_file.rb +203 -0
  84. data/app/models/nhgis/shape_file_x_dataset.rb +8 -0
  85. data/app/models/nhgis/tabulation_type.rb +8 -0
  86. data/app/models/nhgis/time_instance.rb +6 -0
  87. data/app/models/nhgis/time_instance_integ_geog_level.rb +9 -0
  88. data/app/models/nhgis/time_series.rb +12 -0
  89. data/app/models/nhgis/time_series_component.rb +9 -0
  90. data/app/models/nhgis/time_series_release.rb +6 -0
  91. data/app/models/nhgis/time_series_table.rb +13 -0
  92. data/app/models/nhgis/time_series_table_dataset.rb +9 -0
  93. data/app/models/nhgis/time_series_table_geog_level.rb +9 -0
  94. data/app/models/nhgis/time_series_table_time_instance.rb +9 -0
  95. data/app/models/nhgis/time_series_table_time_series_release.rb +7 -0
  96. data/app/models/nhgis/time_series_table_topic.rb +9 -0
  97. data/app/models/nhgis/time_series_table_x_time_series.rb +9 -0
  98. data/app/models/nhgis_metadata_store.rb +2 -0
  99. data/app/models/raster.rb +5 -0
  100. data/app/models/raster_category.rb +6 -0
  101. data/app/models/raster_category_statistic.rb +7 -0
  102. data/app/models/raster_data_type.rb +6 -0
  103. data/app/models/raster_dataset.rb +130 -0
  104. data/app/models/raster_dataset_group.rb +3 -0
  105. data/app/models/raster_dataset_raster_data_type.rb +4 -0
  106. data/app/models/raster_dataset_raster_dataset_unit.rb +4 -0
  107. data/app/models/raster_dataset_raster_variable.rb +4 -0
  108. data/app/models/raster_dataset_unit.rb +4 -0
  109. data/app/models/raster_group.rb +87 -0
  110. data/app/models/raster_metadata.rb +6 -0
  111. data/app/models/raster_operation.rb +10 -0
  112. data/app/models/raster_raster_variable.rb +2 -0
  113. data/app/models/raster_statistic.rb +6 -0
  114. data/app/models/raster_value.rb +83 -0
  115. data/app/models/raster_variable.rb +440 -0
  116. data/app/models/raster_variable_classification.rb +4 -0
  117. data/app/models/raster_variable_group_membership.rb +4 -0
  118. data/app/models/request_area_data_variable.rb +57 -0
  119. data/app/models/request_geog_unit.rb +6 -0
  120. data/app/models/request_raster_dataset.rb +4 -0
  121. data/app/models/request_raster_variable.rb +147 -0
  122. data/app/models/request_sample.rb +34 -0
  123. data/app/models/request_sample_geog_level.rb +4 -0
  124. data/app/models/request_terrapop_sample.rb +6 -0
  125. data/app/models/request_variable.rb +104 -0
  126. data/app/models/resolution.rb +5 -0
  127. data/app/models/sample.rb +81 -0
  128. data/app/models/sample_design.rb +300 -0
  129. data/app/models/sample_detail_field.rb +7 -0
  130. data/app/models/sample_detail_group.rb +3 -0
  131. data/app/models/sample_detail_value.rb +11 -0
  132. data/app/models/sample_details.rb +90 -0
  133. data/app/models/sample_geog_level.rb +150 -0
  134. data/app/models/sample_level_area_data_variable.rb +13 -0
  135. data/app/models/sample_variable.rb +11 -0
  136. data/app/models/status_definition.rb +2 -0
  137. data/app/models/system_statistic.rb +5 -0
  138. data/app/models/tag.rb +7 -0
  139. data/app/models/terrapop_configuration.rb +75 -0
  140. data/app/models/terrapop_extract_information.rb +64 -0
  141. data/app/models/terrapop_raster_summary_cache.rb +6 -0
  142. data/app/models/terrapop_sample.rb +313 -0
  143. data/app/models/terrapop_setting.rb +11 -0
  144. data/app/models/topic.rb +7 -0
  145. data/app/models/ui_text_snippet.rb +2 -0
  146. data/app/models/universe.rb +5 -0
  147. data/app/models/user.rb +262 -0
  148. data/app/models/user_role.rb +5 -0
  149. data/app/models/variable.rb +127 -0
  150. data/app/models/variable_availability_cach.rb +3 -0
  151. data/app/models/variable_group.rb +14 -0
  152. data/app/models/variable_source.rb +8 -0
  153. data/app/views/layouts/terrapop_models/application.html.erb +14 -0
  154. data/config/routes.rb +2 -0
  155. data/db/migrate/00000000000100_create_countries.rb +15 -0
  156. data/db/migrate/00000000000200_create_universes.rb +11 -0
  157. data/db/migrate/00000000000300_create_geog_units.rb +9 -0
  158. data/db/migrate/00000000000400_create_measurement_types.rb +9 -0
  159. data/db/migrate/00000000000500_create_area_data_table_groups.rb +13 -0
  160. data/db/migrate/00000000000600_create_area_data_tables.rb +14 -0
  161. data/db/migrate/00000000000700_create_area_data_table_group_memberships.rb +12 -0
  162. data/db/migrate/00000000000800_create_tags.rb +9 -0
  163. data/db/migrate/00000000000900_create_topics.rb +9 -0
  164. data/db/migrate/00000000001000_create_variable_groups.rb +18 -0
  165. data/db/migrate/00000000001100_create_samples.rb +32 -0
  166. data/db/migrate/00000000001200_create_terrapop_samples.rb +12 -0
  167. data/db/migrate/00000000001300_create_variables.rb +52 -0
  168. data/db/migrate/00000000001400_create_country_levels.rb +17 -0
  169. data/db/migrate/00000000001450_variable_topics.rb +19 -0
  170. data/db/migrate/00000000001500_create_sample_geog_levels.rb +20 -0
  171. data/db/migrate/00000000002000_create_area_data_variables.rb +19 -0
  172. data/db/migrate/00000000002050_area_data_variable_topics.rb +22 -0
  173. data/db/migrate/00000000002100_create_sample_level_area_data_variables.rb +16 -0
  174. data/db/migrate/00000000002200_create_sample_level_area_variable_constructions.rb +12 -0
  175. data/db/migrate/00000000003000_create_maps.rb +22 -0
  176. data/db/migrate/00000000003100_create_boundaries.rb +14 -0
  177. data/db/migrate/00000000004000_create_geog_instances.rb +20 -0
  178. data/db/migrate/00000000004100_create_area_data_values.rb +18 -0
  179. data/db/migrate/00000000005000_create_sample_variables.rb +21 -0
  180. data/db/migrate/00000000005100_create_categories.rb +20 -0
  181. data/db/migrate/00000000005200_create_frequencies.rb +16 -0
  182. data/db/migrate/00000000005300_create_variable_sources.rb +16 -0
  183. data/db/migrate/00000000006000_create_user_roles.rb +8 -0
  184. data/db/migrate/00000000006100_create_users.rb +43 -0
  185. data/db/migrate/00000000006300_create_samples_tags.rb +15 -0
  186. data/db/migrate/00000000006400_create_terrapop_samples_tags.rb +15 -0
  187. data/db/migrate/00000000007000_create_raster_data_types.rb +9 -0
  188. data/db/migrate/00000000007050_create_resolutions.rb +8 -0
  189. data/db/migrate/00000000007100_create_raster_datasets.rb +26 -0
  190. data/db/migrate/00000000007200_create_raster_groups.rb +20 -0
  191. data/db/migrate/00000000007250_create_raster_groups_tags.rb +19 -0
  192. data/db/migrate/00000000007300_create_raster_variables.rb +28 -0
  193. data/db/migrate/00000000007325_create_raster_variable_group_memberships.rb +12 -0
  194. data/db/migrate/00000000007350_raster_variable_topics.rb +22 -0
  195. data/db/migrate/00000000007400_create_rasters.rb +22 -0
  196. data/db/migrate/00000000007500_create_raster_operations.rb +11 -0
  197. data/db/migrate/00000000010000_create_status_definitions.rb +8 -0
  198. data/db/migrate/00000000010050_create_extract_types.rb +10 -0
  199. data/db/migrate/00000000010100_create_build_statuses.rb +10 -0
  200. data/db/migrate/00000000010200_create_extract_requests.rb +14 -0
  201. data/db/migrate/00000000010300_create_extract_requests_labels_join_table.rb +20 -0
  202. data/db/migrate/00000000010400_create_extract_statuses.rb +13 -0
  203. data/db/migrate/00000000010500_create_request_geog_units.rb +13 -0
  204. data/db/migrate/00000000010600_create_request_terrapop_samples.rb +15 -0
  205. data/db/migrate/00000000011000_create_request_variable.rb +16 -0
  206. data/db/migrate/00000000011100_create_request_area_data_variables.rb +18 -0
  207. data/db/migrate/00000000011200_create_request_raster_variables.rb +20 -0
  208. data/db/migrate/00000000012000_create_raster_summary_functions.rb +130 -0
  209. data/db/migrate/00000000013000_create_terrapop_settings.rb +24 -0
  210. data/db/migrate/20121218190647_create_attached_variable_pointer.rb +18 -0
  211. data/db/migrate/20121218191609_add_attached_variable_pointer_id.rb +9 -0
  212. data/db/migrate/20121218205322_add_wants_attached.rb +9 -0
  213. data/db/migrate/20121219145142_add_attributes_to_terrapop_sample.rb +68 -0
  214. data/db/migrate/20130125155216_add_default_order_index_to_variables.rb +5 -0
  215. data/db/migrate/20130129204515_create_request_samples.rb +14 -0
  216. data/db/migrate/20130129204718_create_request_raster_datasets.rb +13 -0
  217. data/db/migrate/20130205195304_create_error_events.rb +10 -0
  218. data/db/migrate/20130206202006_add_country_index_for_continent.rb +8 -0
  219. data/db/migrate/20130207202628_create_raster_metadata.rb +13 -0
  220. data/db/migrate/20130208192415_add_extents_to_raster_dataset.rb +6 -0
  221. data/db/migrate/20130209182800_create_global_regions.rb +11 -0
  222. data/db/migrate/20130209182858_add_global_region_id_country.rb +13 -0
  223. data/db/migrate/20130211183221_add_type_to_global_regions.rb +5 -0
  224. data/db/migrate/20130212190940_create_global_region_types.rb +8 -0
  225. data/db/migrate/20130212192357_remove_classification_add_global_region_type_id_to_global_region.rb +13 -0
  226. data/db/migrate/20130304181054_add_code_to_boundaries.rb +5 -0
  227. data/db/migrate/20130305223407_add_ipumsi_user_flagto_users.rb +15 -0
  228. data/db/migrate/20130305224906_add_ipumsi_user_date_flagto_users.rb +11 -0
  229. data/db/migrate/20130308214537_create_request_sample_geog_levels.rb +14 -0
  230. data/db/migrate/20130312191726_create_raster_statistics.rb +23 -0
  231. data/db/migrate/20130312192100_create_raster_categories.rb +14 -0
  232. data/db/migrate/20130312192158_create_raster_category_statistics.rb +22 -0
  233. data/db/migrate/20130312203045_create_area_data_statistics.rb +15 -0
  234. data/db/migrate/20130401161222_add_summary_to_raster_variable.rb +11 -0
  235. data/db/migrate/20130402203508_add_global_region_sort_order_column.rb +8 -0
  236. data/db/migrate/20130402211553_add_weighted_to_terrapop_samples.rb +5 -0
  237. data/db/migrate/20130408022218_add_period_to_raster_datasets.rb +5 -0
  238. data/db/migrate/20130409161950_create_area_data_variable_constructions.rb +17 -0
  239. data/db/migrate/20130409162731_add_opcode_to_raster_operations.rb +5 -0
  240. data/db/migrate/20130412141109_update_raster_summary_functions.rb +39 -0
  241. data/db/migrate/20130415174823_create_insert_html_fragments.rb +13 -0
  242. data/db/migrate/20130415185523_create_common_variables.rb +13 -0
  243. data/db/migrate/20130416144840_add_columns_to_request_samples.rb +6 -0
  244. data/db/migrate/20130416150151_add_revision_of_column_to_extract_request.rb +8 -0
  245. data/db/migrate/20130416151200_add_file_type_to_extract_request.rb +5 -0
  246. data/db/migrate/20130416161440_add_column_general_detailed_selection_to_request_variables.rb +5 -0
  247. data/db/migrate/20130416170551_add_wants_case_selection_to_request_variable.rb +5 -0
  248. data/db/migrate/20130613185642_add_indexes_to_tables.rb +7 -0
  249. data/db/migrate/20130614193857_add_more_column_indexes.rb +11 -0
  250. data/db/migrate/20130618141508_create_raster_dataset_raster_data_types.rb +17 -0
  251. data/db/migrate/20130618185528_add_circa_to_raster_dataset.rb +5 -0
  252. data/db/migrate/20130619160555_create_raster_dataset_units.rb +9 -0
  253. data/db/migrate/20130619161934_create_raster_dataset_raster_dataset_units.rb +17 -0
  254. data/db/migrate/20130621184015_add_raster_dataset_process_summary.rb +8 -0
  255. data/db/migrate/20130621203809_add_source_information_column_to_raster_dataset.rb +5 -0
  256. data/db/migrate/20130624144333_add_temporal_extent_description_to_raster_dataset.rb +5 -0
  257. data/db/migrate/20130624154952_add_provider_to_raster_dataset.rb +5 -0
  258. data/db/migrate/20130624175342_add_use_constraints_column_to_raster_dataset.rb +5 -0
  259. data/db/migrate/20130624175632_drop_use_constraints_column_from_raster_dataset.rb +8 -0
  260. data/db/migrate/20130624192654_add_north_south_east_west_columns_to_raster_dataset.rb +8 -0
  261. data/db/migrate/20130625193303_add_sort_operation_identifier_to_raster_group.rb +5 -0
  262. data/db/migrate/20130702190659_add_raster_group_id_to_raster_variable.rb +9 -0
  263. data/db/migrate/20130708184410_create_country_comparabilities.rb +14 -0
  264. data/db/migrate/20130711191704_add_ipumsi_user_id_to_user.rb +8 -0
  265. data/db/migrate/20130712150252_add_data_settings_column_to_user.rb +8 -0
  266. data/db/migrate/20130719183620_add_visible_and_map_to_columns_to_raster_operations.rb +13 -0
  267. data/db/migrate/20130812194537_create_extract_request_submissions.rb +12 -0
  268. data/db/migrate/20130813165221_remove_ipums_user_id_from_user.rb +8 -0
  269. data/db/migrate/20130814161802_add_uuid_field_to_extract_request.rb +6 -0
  270. data/db/migrate/20130816204002_add_country_id_to_terrapop_sample.rb +8 -0
  271. data/db/migrate/20130816204214_add_year_to_terrapop_sample.rb +8 -0
  272. data/db/migrate/20130816205324_add_indexes_to_country.rb +9 -0
  273. data/db/migrate/20130819145802_add_foreign_key_to_terrapop_sample.rb +5 -0
  274. data/db/migrate/20130819155712_add_indexes_to_sample_level_area_data_variable.rb +5 -0
  275. data/db/migrate/20130819163013_add_short_country_name_to_terrapop_sample.rb +8 -0
  276. data/db/migrate/20130820195420_add_is_erf_to_country.rb +7 -0
  277. data/db/migrate/20130821221743_fix_raster_summary_function_num_classes.rb +39 -0
  278. data/db/migrate/20130830192340_add_more_user_registration_columns.rb +51 -0
  279. data/db/migrate/20130904205306_add_raster_variable_sort_order_weight.rb +8 -0
  280. data/db/migrate/20130912145522_add_localized_label_to_country_levels.rb +5 -0
  281. data/db/migrate/20130913194351_create_terrapop_raster_summary_caches.rb +27 -0
  282. data/db/migrate/20130916212710_add_year_range_to_map.rb +11 -0
  283. data/db/migrate/20130917154553_create_sample_designs.rb +14 -0
  284. data/db/migrate/20130924210303_add_raster_only_to_extract_request.rb +5 -0
  285. data/db/migrate/20131001220437_add_mnemonic_and_codebook_description_to_area_data_value.rb +11 -0
  286. data/db/migrate/20131002213443_add_ipums_email_sent_at_column.rb +8 -0
  287. data/db/migrate/20131020154130_remove_index_if_exists.rb +9 -0
  288. data/db/migrate/20131020170642_remove_ui_snippet_table_if_exists.rb +8 -0
  289. data/db/migrate/20131021204227_create_ui_text_snippet.rb +11 -0
  290. data/db/migrate/20131022190227_rename_table_fix_ui_text_snippets.rb +9 -0
  291. data/db/migrate/20131119154817_add_unique_index_on_uuid_on.rb +9 -0
  292. data/db/migrate/20131202161911_add_send_toi_rods_flag_to_extract_request.rb +13 -0
  293. data/db/migrate/20140122150020_add_geographic_levelto_geog_instance.rb +11 -0
  294. data/db/migrate/20140124184809_add_zip_file_location.rb +8 -0
  295. data/db/migrate/20140205205539_add_api_related_fields_to_user.rb +5 -0
  296. data/db/migrate/20140206213258_create_extract_request_error_events.rb +14 -0
  297. data/db/migrate/20140206222630_add_requesting_url_to_extract_request.rb +5 -0
  298. data/db/migrate/20140207153005_create_api_logs.rb +14 -0
  299. data/db/migrate/20140228182300_change_user_institutional_affiliation_to_bool.rb +50 -0
  300. data/db/migrate/20140312143201_add_start_and_end_time_and_total_time_to_extract_request.rb +7 -0
  301. data/db/migrate/20140318212913_remove_add_index_to_area_data_value.rb +12 -0
  302. data/db/migrate/20140319155819_add_long_mnemonic_to_area_data_value.rb +7 -0
  303. data/db/migrate/20140319200718_drop_mnemonic_column_area_data_value.rb +10 -0
  304. data/db/migrate/20140320184210_add_show_in_ui_column_in_raster_variable.rb +8 -0
  305. data/db/migrate/20140328150435_rename_revision_of_column_to_rabl_usable_column_name.rb +8 -0
  306. data/db/migrate/20140331142153_add_revision_of_column.rb +8 -0
  307. data/db/migrate/20140402181324_add_new_raster_summary_functions.rb +191 -0
  308. data/db/migrate/20140403185242_add_raster_variable_area_reference_id.rb +12 -0
  309. data/db/migrate/20140410145305_add_raster_area_column_to_terrapop_raster_summary_cache.rb +6 -0
  310. data/db/migrate/20140414170802_add_new_raster_summarization.rb +85 -0
  311. data/db/migrate/20140421150330_add_second_reference_column_to_raster_variable.rb +9 -0
  312. data/db/migrate/20140506165634_add_deactivated_at_and_deleted_at_to_user.rb +6 -0
  313. data/db/migrate/20140507142843_add_column_to_frequencies.rb +5 -0
  314. data/db/migrate/20140513143055_add_sample_geog_level_id_to_request_models.rb +11 -0
  315. data/db/migrate/20140521160554_create_links.rb +9 -0
  316. data/db/migrate/20140522214508_add_ipumsi_salt_and_ipumsi_crypted_password_to_user.rb +13 -0
  317. data/db/migrate/20140604192953_add_name_to_terrapop_setting.rb +47 -0
  318. data/db/migrate/20140609163907_create_variable_availability_caches.rb +9 -0
  319. data/db/migrate/20140609210447_add_foreign_index_to_variable_availability_cache.rb +8 -0
  320. data/db/migrate/20140609213300_create_area_data_variable_availability_caches.rb +13 -0
  321. data/db/migrate/20140610135849_create_nhgis_metadata_stores.rb +30 -0
  322. data/db/migrate/20140610211138_add_dataset_id_to_nhgis_metadata.rb +5 -0
  323. data/db/migrate/20140611181543_add_replicate_weight_variable_id_to_variables.rb +5 -0
  324. data/db/migrate/20140618200741_add_key_column_toraster_variable_group_memberships.rb +7 -0
  325. data/db/migrate/20140618202053_add_key_column_toraster_variable_group_memberships2.rb +8 -0
  326. data/db/migrate/20140701134952_create_system_statistics.rb +12 -0
  327. data/db/migrate/20140804161242_add_fields_to_terrapop_sample.rb +7 -0
  328. data/db/migrate/20140806173750_add_geometry_column_to_boundaries.rb +5 -0
  329. data/db/migrate/20140821205836_add_git_hash_field_to_extract_request.rb +5 -0
  330. data/db/migrate/20140822140106_create_map_units.rb +9 -0
  331. data/db/migrate/20140822140358_create_map_unit_raster_datasets.rb +17 -0
  332. data/db/migrate/20140822143517_redefine_short_unit_on_map_unit_to_longer_string.rb +5 -0
  333. data/db/migrate/20140825135403_add_finger_print_hash_to_maps.rb +5 -0
  334. data/db/migrate/20140826163359_add_source_field_to_terrapop_sample.rb +8 -0
  335. data/db/migrate/20140827153014_add_microdata_file_size_to_sample.rb +5 -0
  336. data/db/migrate/20140828161647_add_raster_band_index_to_raster_categories.rb +5 -0
  337. data/db/migrate/20140828162650_add_post_gis_raster_output_indicator_to_raster_variable.rb +5 -0
  338. data/db/migrate/20140829150251_create_raster_dataset_raster_variables.rb +17 -0
  339. data/db/migrate/20140902194529_add_raster_band_to_raster_dataset_model.rb +7 -0
  340. data/db/migrate/20140903202609_create_heartbeats.rb +9 -0
  341. data/db/migrate/20140903204113_create_heartbeat_pulse.rb +10 -0
  342. data/db/migrate/20140904164247_create_raster_raster_variables.rb +16 -0
  343. data/db/migrate/20140908193007_add_area_level_rasterization_functions.rb +103 -0
  344. data/db/migrate/20140908194021_create_area_data_rasters.rb +39 -0
  345. data/db/migrate/20140909143933_rename_valid_column_on_area_data_raster.rb +5 -0
  346. data/db/migrate/20140911201639_add_columns_to_area_data_raster.rb +11 -0
  347. data/db/migrate/20140911211923_alter_area_data_raster_indexes.rb +12 -0
  348. data/db/migrate/20140919144305_create_raster_variable_classifications.rb +29 -0
  349. data/db/migrate/20140925140810_add_other_raster_variables_to_raster_variable_classification.rb +9 -0
  350. data/db/migrate/20140925172245_add_grouping_indicator_to_raster_classifications.rb +5 -0
  351. data/db/migrate/20140925175157_add_classification_indicator_to_raster_variable.rb +5 -0
  352. data/db/migrate/20140930142006_remove_boundary_id_from_geog_instance.rb +6 -0
  353. data/db/migrate/20141003164150_add_terrapop_sample_id_to_map_and_geog_instance.rb +11 -0
  354. data/db/migrate/20141029202813_add_nhgis_dat_file_to_sample_geog_level.rb +5 -0
  355. data/db/migrate/20141029204521_add_columns_to_sample_level_area_data_variable.rb +6 -0
  356. data/db/migrate/20141104212652_create_categorical_raster_summarization.rb +39 -0
  357. data/db/migrate/20141105202744_add_margin_file_to_sample_geog_level.rb +5 -0
  358. data/db/migrate/20141105205347_add_margin_field_to_area_data_value.rb +5 -0
  359. data/db/migrate/20141105205607_add_join_fields_to_sample_geog_level.rb +8 -0
  360. data/db/migrate/20141202180411_add_new_categorical_summarization_function.rb +62 -0
  361. data/db/migrate/20141212172044_add_continuous_raster_summarization0.rb +51 -0
  362. data/db/migrate/20141212195611_add_indexes_to_boundaries.rb +10 -0
  363. data/db/migrate/20141212202521_add_indexes_to_frequencies.rb +7 -0
  364. data/db/migrate/20141229150743_add_special_value_to_area_data_value.rb +5 -0
  365. data/db/migrate/20141230153550_add_field_to_global_regions.rb +8 -0
  366. data/db/migrate/20150107142518_add_restriction_indicated_to_sample.rb +5 -0
  367. data/db/migrate/20150114161817_add_raster_to_tiff_function.rb +35 -0
  368. data/db/migrate/20150115204303_add_hide_nhgis_datasets_to_users.rb +11 -0
  369. data/db/migrate/20150126192918_add_new_gli_post_gis_functions.rb +99 -0
  370. data/db/migrate/20150126223419_add_short_label_to_terrapop_samples.rb +11 -0
  371. data/db/migrate/20150127172953_add_another_raster_summarization_function.rb +44 -0
  372. data/db/migrate/20150130163215_new_glc_summarization_function.rb +40 -0
  373. data/db/migrate/20150211221354_create_cache_items.rb +23 -0
  374. data/db/migrate/20150212223011_add_microdata_access_expired_date_to_users.rb +11 -0
  375. data/db/migrate/20150217221940_add_new_band_aware_categorical_to_binary_summarization.rb +177 -0
  376. data/db/migrate/20150302145459_removeuse_postgis_procedure_for_geotiff.rb +5 -0
  377. data/db/migrate/20150313194752_add_color_map_to_tiff_output.rb +34 -0
  378. data/db/migrate/20150313202158_add_color_map_to_jpeg_output.rb +34 -0
  379. data/db/migrate/20150318183314_add_non_color_map_cookie_cutter_functions.rb +65 -0
  380. data/db/migrate/20150324160629_add_categorical_multi_band_summarization.rb +62 -0
  381. data/db/migrate/20150324161827_add_index_to_rasters_raster_variable_id.rb +5 -0
  382. data/db/migrate/20150327203257_add_band_to_terrapop_raster_summary_cache.rb +5 -0
  383. data/db/migrate/20150331142232_add_xml_field_to_map.rb +5 -0
  384. data/db/migrate/20150331153703_add_new_continous_summarization.rb +38 -0
  385. data/db/migrate/20150409153145_categorical_to_binary_as_raster.rb +49 -0
  386. data/db/migrate/20150413204130_generic_categorical_to_binary_raster_output_function.rb +92 -0
  387. data/db/migrate/20150416133743_ratio_area_level_data_to_raster_function.rb +55 -0
  388. data/db/migrate/20150416143838_projection_function_for_single_band_rasters.rb +27 -0
  389. data/db/migrate/20150419203614_add_raster_dataset_to_terrapop_raster_summary_cache.rb +12 -0
  390. data/db/migrate/20150419232521_add_raster_dataset_to_request_raster_variable.rb +9 -0
  391. data/db/migrate/20150427163939_create_single_binary_from_categorical_to_tiff_function.rb +51 -0
  392. data/db/migrate/20150518200435_add_new_binary_cookie_cutter_functions.rb +95 -0
  393. data/db/migrate/20150520195145_revised_glc_binary_summarization_function.rb +64 -0
  394. data/db/migrate/20150526205918_new_categorical_to_binary_summarization.rb +72 -0
  395. data/db/migrate/20150527144243_even_newer_glc_binary_function.rb +79 -0
  396. data/db/migrate/20150527191853_add_even_newer_glc_category_to_binary_function.rb +74 -0
  397. data/db/migrate/20150528141915_yancat_to_bin_summarization_function.rb +66 -0
  398. data/db/migrate/20150529182542_add_indexes_to_geog_instances.rb +9 -0
  399. data/db/migrate/20150601160855_drop_area_data_variable_availability_caches.rb +5 -0
  400. data/db/migrate/20150625150152_add_geog_instance_f_key_on_boundaries.rb +5 -0
  401. data/db/migrate/20150626144305_geog_instance_geog_code_wider.rb +6 -0
  402. data/db/migrate/20150709161201_glc_summarization_version5.rb +79 -0
  403. data/db/migrate/20150713165442_glc_summarization_version6.rb +82 -0
  404. data/db/migrate/20150713185652_tp_jpeg_raster_clip_color_map_v2.rb +34 -0
  405. data/db/migrate/20150716182438_new_rasters_table.rb +18 -0
  406. data/db/migrate/20150716184828_new_stored_procedures_for_new_rasters.rb +70 -0
  407. data/db/migrate/20150721161943_remove_ownership_statement_from_function.rb +69 -0
  408. data/db/migrate/20150727134942_rename_rasters_new_to_new_rasters.rb +19 -0
  409. data/db/migrate/20150727135614_update_table_name_in_make_jpeg2.rb +70 -0
  410. data/db/migrate/20150727143159_jpeg_clip_experiment.rb +36 -0
  411. data/db/migrate/20150727145556_create_new_tiff_raster_clip_with_buffer.rb +34 -0
  412. data/db/migrate/20150727161508_update_table_name_in_make_jpeg2_part_deux.rb +77 -0
  413. data/db/migrate/20150727193403_drop_rasters_new.rb +5 -0
  414. data/db/migrate/20150728184718_make_jpeg2_part_deux.rb +70 -0
  415. data/db/migrate/20150728214344_correct_new_rasters_table_in_new_make_jpeg2_function.rb +79 -0
  416. data/db/migrate/20150729144526_even_more_correct_new_rasters_table_in_new_make_jpeg2_function.rb +78 -0
  417. data/db/migrate/20150729160936_fixingterrapop_reclassify_categorical_raster_to_binary_summariz_v3.rb +68 -0
  418. data/db/migrate/20150730141036_adjust_jpeg_clip_for_categorical.rb +67 -0
  419. data/db/migrate/20150730153216_ststandardize_terrapop_reclassify_categorical_raster_to_binary_summariz_v3.rb +69 -0
  420. data/db/migrate/20150730163446_add_origin_to_extract_requests.rb +5 -0
  421. data/db/migrate/20150731151304_consistent_return_fieldsterrapop_gli_yield_areal_summarization.rb +99 -0
  422. data/db/migrate/20150731192327_add_boundary_only_field_to_terrapop_sample.rb +5 -0
  423. data/db/migrate/20150803213048_add_function_to_detect_boundaries_that_wrap_globe.rb +50 -0
  424. data/db/migrate/20150814154127_add_processing_flag_to_extract_request.rb +5 -0
  425. data/db/migrate/20150814165605_add_colormapped_categorical_to_binary_jpeg_cookie_cutteringizing_function.rb +49 -0
  426. data/db/migrate/20150814183708_around_the_world_wrap_a_raster_function.rb +157 -0
  427. data/db/migrate/20150910194333_add_extract_grouping_field_to_extract_request.rb +5 -0
  428. data/db/migrate/20150915194808_drop_sessions_table.rb +5 -0
  429. data/db/migrate/20150915215426_add_sessions_table.rb +12 -0
  430. data/db/migrate/20151009203606_create_sample_detail_groups.rb +8 -0
  431. data/db/migrate/20151009203855_create_sample_detail_fields.rb +13 -0
  432. data/db/migrate/20151009204052_create_sample_detail_values.rb +12 -0
  433. data/db/migrate/20151016152953_add_indexes_to_area_data_values.rb +7 -0
  434. data/db/migrate/20151023160555_add_data_to_extract_requests.rb +8 -0
  435. data/db/migrate/20151026155953_rename_description_add_title_to_extract_requests.rb +8 -0
  436. data/db/migrate/20151029144017_create_raster_dataset_groups.rb +9 -0
  437. data/db/migrate/20151029144147_add_raster_dataset_group_to_raster_dataset.rb +9 -0
  438. data/db/migrate/20151029182802_add_mnemonic_to_raster_dataset_group.rb +5 -0
  439. data/db/migrate/20151029184642_change_field_type_on_raster_dataset_group.rb +5 -0
  440. data/db/migrate/20151029210539_remove_unnecessary_fields_from_terrapop_sample.rb +60 -0
  441. data/db/migrate/20151102205254_create_data_artifacts.rb +17 -0
  442. data/db/migrate/20151102211601_add_json_field_to_extract_data_artifacts.rb +8 -0
  443. data/db/migrate/20151103152754_add_file_name_field_to_extract_request.rb +5 -0
  444. data/db/migrate/20151106155249_add_submitted_at_to_extract_request.rb +5 -0
  445. data/db/migrate/20151110204826_add_terra_pop_build_number_to_extract_request.rb +12 -0
  446. data/db/migrate/20151119213428_create_area_data_raster_variable_mnemonic_lookups.rb +18 -0
  447. data/db/migrate/20151120140757_create_extract_request_area_data_raster_variable_mnemonic_lookups.rb +16 -0
  448. data/db/migrate/20151130212011_add_new_raster_summarization_v7.rb +90 -0
  449. data/lib/tasks/terrapop_models_tasks.rake +4 -0
  450. data/lib/terrapop_models.rb +4 -0
  451. data/lib/terrapop_models/engine.rb +13 -0
  452. data/lib/terrapop_models/version.rb +3 -0
  453. data/test/dummy/README.rdoc +28 -0
  454. data/test/dummy/Rakefile +6 -0
  455. data/test/dummy/app/assets/javascripts/application.js +13 -0
  456. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  457. data/test/dummy/app/controllers/application_controller.rb +5 -0
  458. data/test/dummy/app/helpers/application_helper.rb +2 -0
  459. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  460. data/test/dummy/bin/bundle +3 -0
  461. data/test/dummy/bin/rails +4 -0
  462. data/test/dummy/bin/rake +4 -0
  463. data/test/dummy/config.ru +4 -0
  464. data/test/dummy/config/application.rb +23 -0
  465. data/test/dummy/config/boot.rb +5 -0
  466. data/test/dummy/config/database.yml +68 -0
  467. data/test/dummy/config/environment.rb +5 -0
  468. data/test/dummy/config/environments/development.rb +37 -0
  469. data/test/dummy/config/environments/production.rb +78 -0
  470. data/test/dummy/config/environments/test.rb +39 -0
  471. data/test/dummy/config/initializers/assets.rb +8 -0
  472. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  473. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  474. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  475. data/test/dummy/config/initializers/inflections.rb +16 -0
  476. data/test/dummy/config/initializers/mime_types.rb +4 -0
  477. data/test/dummy/config/initializers/session_store.rb +3 -0
  478. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  479. data/test/dummy/config/locales/en.yml +23 -0
  480. data/test/dummy/config/routes.rb +4 -0
  481. data/test/dummy/config/secrets.yml +22 -0
  482. data/test/dummy/log/development.log +62 -0
  483. data/test/dummy/public/404.html +67 -0
  484. data/test/dummy/public/422.html +67 -0
  485. data/test/dummy/public/500.html +66 -0
  486. data/test/dummy/public/favicon.ico +0 -0
  487. data/test/integration/navigation_test.rb +10 -0
  488. data/test/terrapop_models_test.rb +7 -0
  489. data/test/test_helper.rb +19 -0
  490. metadata +597 -0
@@ -0,0 +1,13 @@
1
+ class SampleLevelAreaDataVariable < ActiveRecord::Base
2
+
3
+ belongs_to :area_data_variable
4
+ belongs_to :terrapop_sample
5
+ belongs_to :sample_geog_level
6
+ has_many :area_data_values
7
+
8
+ # get all the SampleLevelAggVars that are associated with a given sample_geog_level
9
+ scope :belonging_to_level, lambda {|geog_level| where(:sample_geog_level_id => geog_level.id) }
10
+
11
+ has_and_belongs_to_many :variables, :join_table => :sample_level_area_variable_constructions
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ class SampleVariable < ActiveRecord::Base
2
+
3
+ has_and_belongs_to_many :sample_level_area_data_variables, :join_table => :sample_level_area_variable_constructions
4
+ belongs_to :variable
5
+ belongs_to :sample
6
+ belongs_to :universe
7
+
8
+ has_many :variable_sources, :foreign_key => :makes
9
+ has_many :sample_variables, :through => :variable_sources, :source => :is_made_of
10
+
11
+ end
@@ -0,0 +1,2 @@
1
+ class StatusDefinition < ActiveRecord::Base
2
+ end
@@ -0,0 +1,5 @@
1
+ class SystemStatistic < ActiveRecord::Base
2
+
3
+ scope :get, ->(key) { where({key: key}).limit(1) }
4
+
5
+ end
data/app/models/tag.rb ADDED
@@ -0,0 +1,7 @@
1
+ class Tag < ActiveRecord::Base
2
+
3
+ has_and_belongs_to_many :samples
4
+ has_and_belongs_to_many :raster_groups
5
+ has_and_belongs_to_many :terrapop_samples
6
+
7
+ end
@@ -0,0 +1,75 @@
1
+ module TerrapopConfigurationModule
2
+ ENVIRONMENTS = "environments"
3
+ APPLICATION = "application"
4
+ COUNTRIES = "countries"
5
+ SETTINGS = "settings"
6
+
7
+
8
+ def self.before
9
+
10
+ unless defined? @@configuration
11
+ str = File.open(Rails.root.to_s + "/config/terrapop.yml", 'r') { |f| f.read }
12
+ str = ERB.new(str).result
13
+ @@configuration = YAML.load(str)
14
+ end
15
+
16
+ unless @@configuration.dig(APPLICATION, COUNTRIES).nil?
17
+ if @@configuration[APPLICATION][COUNTRIES][0] == :all
18
+ @@configuration[APPLICATION][COUNTRIES] = Country.order(:short_name).pluck(:short_name)
19
+ end
20
+ end
21
+
22
+ if defined? ENV['SERVER_NAME']
23
+ unless ENV['SERVER_NAME'].nil?
24
+ #$stderr.puts "ServerName: #{ENV['SERVER_NAME']}"
25
+ # this area will be arrived upon ONLY in the WebApp part of TP
26
+ # we need to set/update a TerrapopSettings object with our current hostname
27
+ # which is found in ENV['SERVER_NAME']
28
+ begin
29
+ setting = TerrapopSetting.where(name: 'server_name').first
30
+ setting = TerrapopSetting.new if setting.nil?
31
+
32
+ # the following line is a workaroud to a known bug in Rails 4.0 4.1
33
+ # they are going to introduce the bugfix in Rails 4.2
34
+ # if you stumble upon this line of code and Rails is 4.2 or more
35
+ # please remove the following line
36
+ setting.data_will_change!
37
+ # end of story, thanks
38
+
39
+ setting.data = {'value' => ENV['SERVER_NAME']}
40
+ setting.name = 'server_name'
41
+ setting.save
42
+ rescue
43
+
44
+ end
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+
51
+ before
52
+
53
+ end
54
+
55
+
56
+
57
+ class TerrapopConfiguration
58
+
59
+ include TerrapopConfigurationModule
60
+
61
+
62
+ def self.[](key)
63
+ @@configuration.dig(key)
64
+ end
65
+
66
+ def self.settings
67
+ @@configuration.dig(APPLICATION, ENVIRONMENTS, Rails.env)
68
+ end
69
+
70
+
71
+ def self.inspect
72
+ @@configuration.to_s
73
+ end
74
+
75
+ end
@@ -0,0 +1,64 @@
1
+ class TerrapopExtractInformation
2
+ include ExtractEngine::FileManagement
3
+
4
+ def initialize(request)
5
+ @request = request
6
+ end
7
+
8
+ def build_information_file
9
+ create_directories(request)
10
+
11
+ File.open(filename, "w") {|f|
12
+ f.puts "User: " + request.user.firstname_lastname + " (" + request.user.email + ")"
13
+
14
+ begin
15
+ f.puts "TP Build: " + Rails.configuration.build_number
16
+ rescue Exception => e
17
+ $stderr.puts "*** Unable to determine build number for deployment"
18
+ end
19
+
20
+
21
+ f.puts "Extract Date: " + request.updated_at.strftime("%B %e, %Y - %H:%M:%S %Z")
22
+
23
+ t = request.total_time.to_i
24
+
25
+ ss, ms = t.divmod(1000) #=> [270921, 0]
26
+ mm, ss = ss.divmod(60) #=> [4515, 21]
27
+ hh, mm = mm.divmod(60) #=> [75, 15]
28
+ dd, hh = hh.divmod(24) #=> [3, 3]
29
+ #puts "%d days, %d hours, %d minutes and %d seconds" % [dd, hh, mm, ss]
30
+
31
+ total_time = ""
32
+
33
+ times = ActiveSupport::OrderedHash.new
34
+
35
+ #times = {"day" => dd, "hour" => hh, "min" => mm, "sec" => ss, "ms" => ms}
36
+
37
+ times[:day] = dd
38
+ times[:hour] = hh
39
+ times[:min] = mm
40
+ times[:sec] = ss
41
+ #times[:ms] = ms
42
+
43
+ time_str = times.map{|key,amt|
44
+ if amt > 0
45
+ "#{amt} #{key.to_s}"
46
+ end
47
+ }.reject{|f| f.nil? }.join(", ")
48
+
49
+ f.puts "Extract Time: " + time_str
50
+
51
+ }
52
+
53
+ filename
54
+ end
55
+
56
+ def filename
57
+ File.join(request.location, request.name + "_info.txt")
58
+ end
59
+
60
+ def request
61
+ @request
62
+ end
63
+
64
+ end
@@ -0,0 +1,6 @@
1
+ class TerrapopRasterSummaryCache < ActiveRecord::Base
2
+
3
+ belongs_to :geog_instance
4
+ belongs_to :raster_dataset
5
+
6
+ end
@@ -0,0 +1,313 @@
1
+ class TerrapopSample < ActiveRecord::Base
2
+
3
+ belongs_to :sample
4
+ belongs_to :country
5
+
6
+ has_many :sample_geog_levels
7
+ has_many :sample_level_area_data_variables
8
+ has_many :maps
9
+ has_many :area_data_variables, through: :sample_level_area_data_variables
10
+
11
+ has_many :sample_detail_values, through: :sample
12
+
13
+ has_and_belongs_to_many :tags, join_table: :terrapop_samples_tags
14
+
15
+ default_scope { where(boundaries_only: false) }
16
+ scope :without_nhgis, -> { where nhgis_dataset_id: nil }
17
+
18
+ after_find :adjust_short_country_name_upcase
19
+
20
+
21
+ def lowest_sample_geog_level
22
+ geog_units_to_sgls = sample_geog_levels.joins(:country_level).joins("JOIN geog_units gu ON gu.id = country_levels.geog_unit_id").map{ |sgl| {sgl.country_level.geog_unit.code => sgl.id} }.reduce Hash.new, :merge
23
+ if geog_units_to_sgls.count > 0
24
+ if geog_units_to_sgls.keys.include? 'HSLAD'
25
+ return SampleGeogLevel.find(geog_units_to_sgls['HSLAD'])
26
+ elsif geog_units_to_sgls.keys.include? 'SLAD'
27
+ return SampleGeogLevel.find(geog_units_to_sgls['SLAD'])
28
+ elsif geog_units_to_sgls.keys.include? 'HFLAD'
29
+ return SampleGeogLevel.find(geog_units_to_sgls['HFLAD'])
30
+ elsif geog_units_to_sgls.keys.include? 'FLAD'
31
+ return SampleGeogLevel.find(geog_units_to_sgls['FLAD'])
32
+ elsif geog_units_to_sgls.keys.include? 'NAT'
33
+ return SampleGeogLevel.find(geog_units_to_sgls['NAT'])
34
+ end
35
+ end
36
+ # empty -- this is an error with metadata
37
+ raise "No GeogUnits for TerrapopSample[#{self.id}]"
38
+ end
39
+
40
+
41
+ # call with the code given in GeogUnits - NAT, FLAD, etc...
42
+ # If that code isn't found in GeogUnits, return nil.
43
+ def map_for_level(lev_name)
44
+ country_level = get_country_level(lev_name)
45
+ if country_level.nil?
46
+ nil
47
+ else
48
+ country_level.maps.find_by(terrapop_sample_id: id)
49
+ end
50
+ end
51
+
52
+
53
+ # call with a country_level instance
54
+ def sample_geog_level_for_country_level(country_level)
55
+ SampleGeogLevel.where(country_level_id: country_level.id, terrapop_sample_id: id).first
56
+ end
57
+
58
+
59
+ # call with the code given in GeogUnits - NAT, FLAD, etc...
60
+ def sample_geog_level_for_code(lev_name)
61
+ country_level = get_country_level(lev_name)
62
+ if country_level.nil?
63
+ nil
64
+ else
65
+ sample_geog_level_for_country_level(country_level)
66
+ end
67
+ end
68
+
69
+
70
+ def short_country_name_long_year
71
+ short_country_name + year.to_s
72
+ end
73
+
74
+
75
+ #########################################################
76
+ # Generate/Retrieve Short Dataset Identifier
77
+ #########################################################
78
+ def dataset_identifier
79
+ if sample_id.nil?
80
+ # Terrapop Exclusive or NHGIS backed dataset
81
+ dataset = short_country_name + (year.nil? ? (!(begin_year.nil? && end_year.nil?) && (begin_year.to_s[-2,2] + end_year.to_s[-2,2]) || '') : year.to_s[-2,2])
82
+ if nhgis_dataset_id.nil?
83
+ # Terrapop Exclusive dataset
84
+ dataset += "_TP"
85
+ else
86
+ # NHGIS backed dataset
87
+ dataset += "_NHGIS"
88
+ end
89
+ dataset
90
+ else
91
+ sample.name
92
+ end
93
+ end
94
+
95
+
96
+ #########################################################
97
+ # Privacy Controls for Small Samples
98
+ #########################################################
99
+ # Should only apply to samples with 100% sampling / complete count data
100
+ def smooth_small_counts(threshold, new_value)
101
+ sample.density == 100.0 or raise "Can only redact data from full count (100% sample)."
102
+ # Get count variables attached to this sample
103
+ vars_to_smooth = area_data_variables.joins(:measurement_type).where(measurement_types: {label: 'Count'}).pluck(:id).uniq
104
+ data_to_update = AreaDataValue.all_data.where(area_data_variable_id: vars_to_smooth).where(['value <= ? and value >=0.0', threshold])
105
+ data_to_update.update_all(value: new_value)
106
+ end
107
+
108
+
109
+ def redact_from_small_regions(region_size)
110
+ sample.density == 100.0 or raise "Can only redact data from full count (100% sample)."
111
+ region_count_var_ids = area_data_variables.joins(:measurement_type).where(mnemonic: :TOTPOP, measurement_types: {label: 'Count'}).pluck(:id).uniq
112
+ region_counts = AreaDataValue.all_data.where(area_data_variable_id: region_count_var_ids)
113
+ small_regions = region_counts.where(["value <= ?", region_size])
114
+ small_region_ids = small_regions.all.map{ |r| r.geog_instance.id }
115
+ values_to_redact = AreaDataValue.where(geog_instance_id: small_region_ids)
116
+ values_to_redact.update_all(value: -1.0)
117
+ end
118
+
119
+
120
+ # NHGIS Ingest related
121
+ def self.from_nhgis(nhgis_dataset, year = nil)
122
+ #When provided a dataset from NHGIS, create a new UNSAVED terrapop sample setting five (ehem... four) attributes:
123
+ #sample_id: integer, ==> nil
124
+ #label: string, ==> Full country name with year, e.g. "Armenia 2000"; from NHGIS, this could be (from NHGIS): United States 1790 Census (NHGIS)
125
+ #country_id: integer, ==> Country.find_by(short_name: :us).id
126
+ #year: integer, ==> Note: might be nil and then set begin_year and end_year
127
+ #short_country_name: string ==> 'US' (notice, capital letters, versus the lower case in the above Country query)
128
+
129
+ #generate a new instance of TerrapopSample
130
+ terrapop_sample = self.new
131
+
132
+ #associate the terrapop sample to the NHGIS dataset
133
+ terrapop_sample.nhgis_dataset_id = nhgis_dataset.id
134
+
135
+ #set the country code and the short label to the United States : NHGIS covers only the US (and PR)
136
+ terrapop_sample.country_id = Country.find_by(short_name: :us).id
137
+ terrapop_sample.short_country_name = "US"
138
+
139
+ #set the label from the NHGIS dataset
140
+ terrapop_sample.label = nhgis_dataset.terrapop_label
141
+
142
+ #set the short_label from the NHGIS dataset
143
+ terrapop_sample.short_label = nhgis_dataset.terrapop_short_label
144
+
145
+ terrapop_sample.source_project = 'NHGIS'
146
+
147
+ #set the year or years: most NHGIS datasets cover only one year; a few others cover many, e.g. ACS 2009-2013
148
+ #NOTE terrapop_years returns a label, so split on "-" -- if one exists at all
149
+ terrapop_years = nhgis_dataset.terrapop_years #prepare the list of years
150
+ case terrapop_years.size
151
+ when 2
152
+ terrapop_sample.begin_year = terrapop_years.first
153
+ terrapop_sample.end_year = terrapop_years.last
154
+ when 1
155
+ terrapop_sample.year = terrapop_years.first
156
+ else
157
+ raise "invalid value for terrapop_years: #{terrapop_years}" if year.nil?
158
+ if year.is_a? Array and year.size == 2
159
+ terrapop_sample.begin_year = year.first
160
+ terrapop_sample.end_year = year.last
161
+ else
162
+ terrapop_sample.year = year
163
+ end
164
+ end
165
+ #do not save the terrapop sample here; save it elsewhere
166
+ terrapop_sample
167
+ end
168
+
169
+ def tabulated_or_published
170
+ unless is_tabulated?
171
+ "published area-level data"
172
+ else
173
+ "tabulated from " + tabulated_sample_size[:value] + " microdata sample"
174
+ end
175
+ end
176
+
177
+
178
+ def is_tabulated?
179
+ !sample_id.nil?
180
+ end
181
+
182
+
183
+ def tabulated_sample_size
184
+ if sample_detail_values.size > 0
185
+ sample_detail_values_fields['sample_fraction']
186
+ else
187
+ [value: 'N/A', label: "Sample fraction"]
188
+ end
189
+ end
190
+
191
+ def long_description
192
+
193
+ snly = short_name_long_year
194
+
195
+ snly[:short_name] + " " + country.full_name + " " + snly[:long_year].to_s + " " + tabulated_or_published
196
+
197
+ end
198
+
199
+ def short_name_long_year
200
+ if sample_id.nil?
201
+ country_code = short_country_name.downcase
202
+
203
+ short_yr = if year.nil?
204
+ begin_year.to_s[-2..-1] + end_year.to_s[-2..-1]
205
+ else
206
+ year
207
+ end
208
+ long_year = begin_year.to_s + "-" + end_year.to_s
209
+ short_name = country_code + short_yr.to_s
210
+ else
211
+ long_year = year
212
+ short_name = sample.name
213
+ end
214
+
215
+ {long_year: long_year, short_name: short_name}
216
+ end
217
+
218
+ def self.long_description(terrapop_samples)
219
+ if terrapop_samples.count > 0
220
+ str = []
221
+ terrapop_samples.each do |tps|
222
+ str << tps.long_description
223
+ end
224
+ str.join("\n")
225
+ else
226
+ "No Area-level Datasets"
227
+ end
228
+ end
229
+
230
+
231
+ def country_name_year
232
+ yr = if year.nil?
233
+ begin_year.to_s[-2..-1] + end_year.to_s[-2..-1]
234
+ else
235
+ year
236
+ end
237
+
238
+ country.full_name + " " + yr.to_s
239
+ end
240
+
241
+
242
+ def country_name_long_year(pieces = false)
243
+ yr = if year.nil?
244
+ begin_year.to_s + "-" + end_year.to_s
245
+ else
246
+ year
247
+ end
248
+
249
+ unless pieces
250
+ country.full_name + " " + yr.to_s
251
+ else
252
+ {country_name: country.full_name, long_year: yr.to_s}
253
+ end
254
+ end
255
+
256
+
257
+ def long_citation
258
+ str = []
259
+ snly = short_name_long_year
260
+ cnly = country_name_long_year(true) # true => break the country and year into pieces; hash
261
+
262
+ str << snly[:short_name] + " " + cnly[:country_name] + " " + snly[:long_year].to_s
263
+
264
+ unless is_tabulated?
265
+
266
+ str << "<citation for " + cnly[:country_name] + " " + snly[:long_year].to_s + " Census>. Source data downloaded from <URL> on <date>"
267
+
268
+ else
269
+
270
+ str << "Tabulated from IPUMS-I microdata (https://international.ipums.org/international/)."
271
+ str << sample_detail_values_fields["stats_office"][:value]
272
+
273
+ end
274
+
275
+ str.join("\n")
276
+ end
277
+
278
+
279
+ def self.long_citation(terrapop_samples)
280
+
281
+ if terrapop_samples.count > 0
282
+ str = []
283
+ terrapop_samples.each do |tps|
284
+ str << tps.long_citation
285
+ str << ""
286
+ end
287
+ str << ""
288
+ str.join("\n")
289
+ else
290
+ ""
291
+ end
292
+
293
+ end
294
+
295
+ private
296
+
297
+
298
+ def sample_detail_values_fields
299
+ sample_detail_values.joins("JOIN sample_detail_fields sdf ON sample_detail_values.sample_detail_field_id = sdf.id").select("sdf.*, sample_detail_values.*").map{|o| {o.name => {label: o.label, value: o.value}}}.reduce Hash.new, :merge
300
+ end
301
+
302
+
303
+ def adjust_short_country_name_upcase
304
+ short_country_name.upcase! if has_attribute?('short_country_name') && !short_country_name.nil?
305
+ end
306
+
307
+
308
+ def get_country_level(lev_name)
309
+ GeogUnit.find_by_code(lev_name).country_levels.find_by(country_id: country_id)
310
+ end
311
+
312
+
313
+ end