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,4 @@
1
+ class MapUnit < ActiveRecord::Base
2
+ has_many :map_unit_raster_datasets
3
+ has_many :raster_datasets, through: :map_unit_raster_datasets
4
+ end
@@ -0,0 +1,4 @@
1
+ class MapUnitRasterDataset < ActiveRecord::Base
2
+ belongs_to :map_unit
3
+ belongs_to :raster_dataset
4
+ end
@@ -0,0 +1,240 @@
1
+ # encoding: UTF-8
2
+
3
+ module MarkupTransform
4
+
5
+ def transform_markup(node)
6
+
7
+ # special functions
8
+ # PAGE_NUMBER_TAG = "pg";
9
+ # FOOTNOTE_TAG = "fn";
10
+ # FOOTNOTE_REF_TAG = "fnarg";
11
+ # COMMENT = "comment";
12
+
13
+ #insert_image is usa only.
14
+ #insert_html example: ipumsi educkg
15
+ #crvar is common in ihis
16
+
17
+ # Whether a paragraph tag has been opened
18
+ @markup_p_open = false
19
+ @show_hider_count = 0
20
+
21
+ return "" if node.nil? || node.empty?
22
+ node.gsub!(/\r\n?/,"\n")
23
+ doc = IpumsXmlParsing.build_xml_doc_from_fragment(node)
24
+ "<p>#{parse_node(doc, default_text_handler)}</p>".html_safe
25
+ end
26
+
27
+ def default_text_handler
28
+ Proc.new { |item| parse_text(item)}
29
+ end
30
+
31
+ def parse_node (node, text_handler)
32
+ if node.children.nil?
33
+ Rails.logger.warn "Node #{node.name} has no children"
34
+ return ''
35
+ end
36
+
37
+ # svar isn't a formatting tag but includes an opening '\n'; get rid of it
38
+ node.inner_html = node.inner_html.sub(/\n/, '') if node.name == 'svar'
39
+
40
+ node.children.map do |e|
41
+ e.text? ? text_handler.call(e) : parse_non_text_node(e, text_handler)
42
+ end.join
43
+ end
44
+
45
+ def parse_non_text_node(e, text_handler)
46
+ case e.name
47
+ when 'insert_html'
48
+ load_html_fragment(e[:id])
49
+ when 'sample'
50
+ ''
51
+ when 'survey_section'
52
+ ''
53
+ when 'i1', 'i2', 'i3', 'title' # block styles
54
+ "<div class=\"#{e.name}\">" + parse_node(e, text_handler) + "</div>"
55
+ when 'b1', 'b2', 'b3' # list styles
56
+ "<ul class=\"#{e.name}\">\n" + parse_list(e) + "\n</ul>"
57
+ when 'em', 'pg', 'ital', 'lang', 'h1', 'h2', 'h3' # inline styles
58
+ "<span class=\"#{e.name}\">" + parse_node(e, text_handler) + "</span>"
59
+ when 'insert_image'
60
+ load_image(e[:id])
61
+ when 'link'
62
+ load_link(e[:id], e.inner_html)
63
+ when 'svar', 'invar'
64
+ link_target(e[:a],e[:v]) + parse_node(e, text_handler)
65
+ when 'crvar'
66
+ #"<a href=\"#{variable_path(e.inner_html.strip)}\">#{e.inner_html.strip}</a>"
67
+ variable_path(e.inner_html.strip)
68
+ when 'crcode'
69
+ "<a href=\"#{codes_variable_path(e.inner_html.strip)}\">#{e.inner_html.strip}</a>"
70
+ when 'code'
71
+ "<div class=\"code\">Codes</div>"
72
+ when 'topcode'
73
+ "<div class=\"topcode\">Top codes:</div>"
74
+ when 'bottomcode'
75
+ "<div class=\"bottomcode\">Bottom codes:</div>"
76
+ when 'more'
77
+ more(e, text_handler)
78
+ else
79
+ attrs = e.attributes.map { |name, attr| name + (attr.value.empty? ? "" : "=\"#{attr.value}\"")}.join(" ")
80
+ "<#{e.name} #{attrs}>" + parse_node(e, text_handler) + "</#{e.name}>"
81
+ end
82
+ end
83
+
84
+ def parse_list (node)
85
+ out = node.children.map do |e|
86
+ # puts "Children are: #{e.inspect}"
87
+ # Split lines into li's
88
+ (e.text? ? parse_list_text(e) : parse_non_text_node(e, Proc.new {|item| parse_list_text(item) }))
89
+ end.join
90
+ out.gsub!(/\A\s*/, '')
91
+ "<li>" + out +"</li>"
92
+ end
93
+
94
+ def parse_list_text (node)
95
+ str = node.to_s
96
+ str.gsub!(/\A\s*\z/, '') ## remove lines that are entirely whitespace
97
+ str.gsub!(/\A(\s)?\s*/,'\1') ## Remove duplicate whitespace at the beginning
98
+ str.gsub!(/\n\n+\s*/, "</li>\n\n<li>") ## break 2+ new lines into separate bullets, remove any extra whitespace
99
+ #puts "Ret is #{str.inspect}"
100
+ str
101
+ end
102
+
103
+ def parse_text (e)
104
+ ### Svar is an enclosing tag, but we're moving it's contents outside the <a> tag for display.
105
+ if e.parent.nil? || e.parent.xml? || e.parent.fragment? || e.parent.name == 'svar' || e.parent.name == 'more'
106
+ format_in_paragraph e
107
+ else
108
+ format_not_in_paragraph e ### This is already inside some kind of html (e.g. <div> or <ul>.) We don't want paragraphs.
109
+ end
110
+ end
111
+
112
+ def format_in_paragraph(e)
113
+ text = e.to_s
114
+ # puts "parsing text in paragraph '#{e.to_s}'"
115
+
116
+ ## Remove leading double lines if the preceding tag was a block element
117
+ previous_node = e.previous
118
+ if block_element?(previous_node)
119
+ text.gsub!(/\A\n+/m, '')
120
+ end
121
+
122
+ next_node = e.next
123
+
124
+ # Remove leading newline if we are in a <more> tag
125
+ text.gsub!(/\A\n/, '') if e.parent.name == 'more'
126
+
127
+ # Remove trailing double line
128
+ if block_element?(next_node)
129
+ text.gsub!(/\n+\z/m, '')
130
+ end
131
+
132
+ start_tag = '<p class="paragraph">' # starting tag
133
+ text = text.to_s.dup
134
+ if text.gsub!(/\n\n+/, "</p>\n\n#{start_tag}") # 2+ newline -> paragraph
135
+ @markup_p_open = true
136
+ end
137
+
138
+ text.gsub!(/((\A|[^\n])\n)((?=[^\n]|\z))/, '\1<br />') # 1 newline -> br
139
+
140
+ #prev_node was a block node (ul, div, then start this <p>)
141
+ if block_element?(previous_node) && !text.empty?
142
+ text.insert 0, start_tag
143
+ # valid because we could not have closed in text before this line. If the logic changes above,
144
+ # then this may need to chagne as well
145
+ @markup_p_open = true
146
+ end
147
+
148
+ #next_node is a block node (ul, div, then close this <p>)
149
+ if block_element?(next_node) && !text.empty?
150
+ text << "</p>\n"
151
+ @markup_p_open = false
152
+ end
153
+
154
+ text
155
+ end
156
+
157
+ def block_element?(node)
158
+ node && ['more', 'b1', 'b2', 'b3', 'li', 'i1', 'i2', 'i3', 'code', 'topcode', 'bottomcode'].include?(node.name)
159
+ end
160
+
161
+ def inside_ul?(node)
162
+ node && node.parent && node.parent.name == 'ul'
163
+ end
164
+
165
+ def format_not_in_paragraph(e)
166
+ # puts "parsing text NOT in paragraph '#{e.to_s}'"
167
+ # puts "parent is #{e.parent.name}"
168
+ text = e.to_s
169
+ text.gsub!(/\n\n+/, "<br /><br />\n\n") unless inside_ul?(e) #2+ newline -> br br
170
+ text.gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
171
+ #text = "\n<br />" if text == "\n" # nothing but a single newline -> br
172
+ text
173
+ end
174
+
175
+ def link_target (anchors, vars)
176
+ unless anchors.nil?
177
+ vars_to_anchor = anchors.downcase == "all" ? vars.split(/\s/) : anchors.split(/\s/)
178
+ return vars_to_anchor.map{|v| "<a name=\"#{v}\"></a>"}.join('')
179
+ else
180
+ return ""
181
+ end
182
+ end
183
+
184
+ def load_file(id)
185
+ raise "Unused! Use load_html_fragment instead."
186
+ return '' if Link.hash.empty?
187
+ dir = IPUMS::project.config[:included_html_dir]
188
+ path = dir + Link.hash[id]
189
+ File.open(path).read
190
+ end
191
+
192
+ def load_image(id)
193
+ href = Link.hash ? Link.hash[id] : ''
194
+ "<img src=\"#{href}\"/>"
195
+ end
196
+
197
+ # Should replace load_file()
198
+ def load_html_fragment(link_id)
199
+ name = Link.hash[link_id]
200
+ fragment = InsertHtmlFragment.find_by_name(name)
201
+ if fragment.nil?
202
+ raise "Could not find HTML fragment link ID #{link_id} with name #{name}."
203
+ end
204
+
205
+ fragment.content
206
+ end
207
+
208
+ def load_link(id, text)
209
+ "<a href=\"#{Link.hash.empty? ? '' : Link.hash[id]}\">#{text}</a>"
210
+ end
211
+
212
+ def ensure_p_closed
213
+ if @markup_p_open
214
+ @markup_p_open = false
215
+ return '</p>'
216
+ end
217
+ ''
218
+ end
219
+
220
+ def open_p
221
+ @markup_p_open = true
222
+ '<p>'
223
+ end
224
+
225
+ def more(e, text_handler)
226
+ @show_hider_count += 1
227
+ p_was_open = @markup_p_open
228
+ result = "<a id=\"toggler-#{@show_hider_count}\" title=\"Toggle visibility\" class=\"show-hide-toggler\">&nbsp;</a>"
229
+ result += ensure_p_closed
230
+ result += "<div id=\"toggler-#{@show_hider_count}-target\">"
231
+ result += open_p
232
+ result += parse_node(e, text_handler)
233
+ result += ensure_p_closed
234
+ result += "</div><p></p>"
235
+ if p_was_open
236
+ result += open_p
237
+ end
238
+ result
239
+ end
240
+ end
@@ -0,0 +1,5 @@
1
+ class MeasurementType < ActiveRecord::Base
2
+
3
+ has_many :area_data_variables
4
+
5
+ end
@@ -0,0 +1,120 @@
1
+ require 'nhgis_database'
2
+ module Nhgis
3
+ class AggDataVar < NhgisActiveRecord::Base
4
+ belongs_to :data_table
5
+
6
+ PAGE_SIZE = 1000
7
+
8
+ def self.variables_count(dataset_id)
9
+
10
+ sql = 'select
11
+ COUNT(ds.code) AS count
12
+ from agg_data_vars adv
13
+ join data_tables dt on dt.id = adv.data_table_id
14
+ join datasets ds on ds.id = dt.dataset_id and ds.id = ?
15
+ join data_groups dg on dg.dataset_id = dt.dataset_id AND dg.relative_pathname IS NOT NULL
16
+ join geotimes gt on gt.id = dg.geotime_id
17
+ join geog_levels gl on gl.id = gt.geog_level_id and gl.istads_id IN ("state", "county", "nation")
18
+ join data_files df on df.data_group_id = dg.id
19
+ join time_series_components tsc on tsc.agg_data_var_id = adv.id
20
+ join time_series ts on ts.id= tsc.time_series_id
21
+ join time_series_tables_x_time_series x on x.time_series_id = ts.id
22
+ join time_series_tables tst on tst.id = x.time_series_table_id'
23
+
24
+ sql = send(:sanitize_sql_array, [sql, dataset_id])
25
+ result = connection.execute(sql)
26
+
27
+ count = result[0]['count'].to_i
28
+ end
29
+
30
+ def self.variables(dataset_id, page = -1)
31
+
32
+ sql = "select
33
+ ds.code as ds_code,
34
+ dt.label as dt_label,
35
+ adv.label as adv_label,
36
+ adv.id as adv_id,
37
+ ts.id as ts_id,
38
+ ts.label as ts_label,
39
+ tst.id as tst_id,
40
+ tst.label as tst_label,
41
+ gl.id as gl_id,
42
+ gl.istads_id as gl_istads_id,
43
+ dg.id as dg_id,
44
+ dg.relative_pathname as dg_relative_pathname,
45
+ df.id as df_id,
46
+ df.filename as df_filename,
47
+ ds.id as ds_id
48
+ from agg_data_vars adv
49
+ join data_tables dt on dt.id = adv.data_table_id
50
+ join datasets ds on ds.id = dt.dataset_id and ds.id = ?
51
+ join data_groups dg on dg.dataset_id = dt.dataset_id AND dg.relative_pathname IS NOT NULL
52
+ join geotimes gt on gt.id = dg.geotime_id
53
+ join geog_levels gl on gl.id = gt.geog_level_id and gl.istads_id IN ('state', 'county', 'nation')
54
+ join data_files df on df.data_group_id = dg.id
55
+ join time_series_components tsc on tsc.agg_data_var_id = adv.id
56
+ join time_series ts on ts.id= tsc.time_series_id
57
+ join time_series_tables_x_time_series x on x.time_series_id = ts.id
58
+ join time_series_tables tst on tst.id = x.time_series_table_id LIMIT #{page},#{PAGE_SIZE}"
59
+
60
+ #order by adv.istads_seq'
61
+
62
+ #connection.execute([sanitize(sql), dataset_id, geog_level_id])
63
+ sql = send(:sanitize_sql_array, [sql, dataset_id])
64
+ connection.execute(sql)
65
+ end
66
+
67
+ def self.all_variables(limit_dataset_ids = nil)
68
+
69
+ dataset_ids = limit_dataset_ids.nil? ? Dataset.where({}).select("id") : Dataset.where({id: (limit_dataset_ids.is_a?(Array) ? limit_dataset_ids : [limit_dataset_ids])}).select("id")
70
+
71
+ file = File.join(TerrapopConfiguration['application']['environments'][Rails.env.to_s]['source_data']['nhgis_metadata'], 'nhgis-agg-data-vars.csv.gz')
72
+
73
+
74
+ File.open(file, 'w') do |f|
75
+ gz = Zlib::GzipWriter.new(f)
76
+
77
+ csv = CSV.new(gz)
78
+
79
+ variables = Nhgis::AggDataVar.variables(dataset_ids.first, 0)
80
+ columns = variables.first.keys
81
+ csv << columns
82
+
83
+ csv.close
84
+
85
+ gz.close
86
+ end
87
+
88
+ dataset_ids.each{|dataset|
89
+
90
+ $stderr.print "===> Working on dataset[#{dataset.id}]..."
91
+
92
+ count = AggDataVar.variables_count(dataset.id)
93
+
94
+ pages = (count.to_f/PAGE_SIZE.to_f).ceil
95
+
96
+ (0...pages).each{|page|
97
+ variables = AggDataVar.variables(dataset.id, page)
98
+
99
+ File.open(file, 'a+') do |f|
100
+ gz = Zlib::GzipWriter.new(f)
101
+ csv = CSV.new(gz)
102
+
103
+ variables.each {|row|
104
+ csv << row.values
105
+ }
106
+
107
+ csv.close
108
+ gz.close
109
+ end
110
+ }
111
+
112
+ $stderr.puts "done"
113
+ }
114
+
115
+ $stderr.puts "==> Done with datasets..."
116
+
117
+ end
118
+
119
+ end
120
+ end
@@ -0,0 +1,84 @@
1
+ require 'nhgis_database'
2
+ module Nhgis
3
+ class BreakdownCombo < NhgisActiveRecord::Base
4
+
5
+ has_many :data_files
6
+ has_many :time_series_components
7
+ has_many :breakdown_value_breakdown_combos
8
+ has_many :breakdown_values,:through=>:breakdown_value_breakdown_combos
9
+
10
+ def self.istads_ids_for_sql(breakdown_value_istads_id_list)
11
+ #this method will convert an array of breakdown value istads id into a string that can be used in a sql statement
12
+ breakdown_value_istads_id_list.inspect.gsub("[", "").gsub("]", "").gsub("\"", "'")
13
+ end
14
+
15
+ def self.defaults
16
+ sql =<<-EOS
17
+ SELECT bc.*
18
+ FROM breakdown_combos bc
19
+ JOIN breakdown_values_x_breakdown_combos x ON x.breakdown_combo_id = bc.id
20
+ JOIN breakdown_values bv ON bv.id = x.breakdown_value_id
21
+ GROUP BY bc.id HAVING COUNT(bv.id) = SUM(is_default);
22
+ EOS
23
+ find_by_sql(sql)
24
+ end
25
+
26
+ def self.find_by_breakdown_values(breakdown_value_istads_ids)
27
+ # there is an assumption that breakdown_value_istads_ids will contain the istads ids belonging to...
28
+ # NO breakdown value set (when empty),
29
+ # one breakdown value set (when breakdown value istads ids begin with the SAME prefix e.g. "bs01"
30
+ # two breakdown value sets (when breakdown value istads ids begin with one prefix or another e.g. "bs01" or "bs02"
31
+ # ASSUMPTION is that there is never a valid breakdown combo where
32
+
33
+ #puts "*** In find_by_breakdown_values #{breakdown_value_istads_ids.inspect}"
34
+ breakdown_value_sets = breakdown_value_istads_ids.map{|bv|
35
+ bv.
36
+ split(".").
37
+ first}.flatten.uniq
38
+
39
+ case breakdown_value_sets.size
40
+ when 0
41
+ return []
42
+ when 1
43
+ sql_values = BreakdownCombo.istads_ids_for_sql(breakdown_value_istads_ids)
44
+ sql = "SELECT DISTINCT * FROM breakdown_combos WHERE istads_id IN (#{sql_values})"
45
+ when 2
46
+ bs1 = breakdown_value_sets.first
47
+ bs2 = breakdown_value_sets.last
48
+ bvs1 = breakdown_value_istads_ids.select{|bv| bv.split(".").first == bs1}
49
+ bvs2 = breakdown_value_istads_ids.select{|bv| bv.split(".").first == bs2}
50
+ sql_values1 = BreakdownCombo.istads_ids_for_sql(bvs1)
51
+ sql_values2 = BreakdownCombo.istads_ids_for_sql(bvs2)
52
+
53
+ sql = "SELECT DISTINCT bc.* FROM breakdown_combos bc "
54
+ sql << "JOIN breakdown_values_x_breakdown_combos x ON x.breakdown_combo_id = bc.id "
55
+ sql << "JOIN breakdown_values bv ON bv.id = x.breakdown_value_id AND bv.istads_id LIKE '#{bs1}.%' "
56
+ sql << "JOIN breakdown_values_x_breakdown_combos x2 ON x2.breakdown_combo_id = x.breakdown_combo_id "
57
+ sql << "JOIN breakdown_values bv2 ON bv2.id = x2.breakdown_value_id AND bv2.istads_id LIKE '#{bs2}.%' "
58
+ sql << "WHERE bv.istads_id IN (#{sql_values1}) AND bv2.istads_id IN (#{sql_values2})"
59
+ else
60
+ raise "too many breakdown value sets; only expected 1 or 2 (or none)"
61
+ end
62
+ find_by_sql(sql)
63
+ end
64
+
65
+ def codebook_labels
66
+ sorted_breakdown_values.map{|bv| bv.composite_codebook_label}
67
+ end
68
+
69
+ def header_label
70
+ #"[breakdown_var 1 value]: [breakdown_var 2 value]"
71
+ # NOTE : currently sorting the breakdowns using the breakdown value set istads_id
72
+ sorted_breakdown_values.map{|bv| bv.label}.join(": ")
73
+ end
74
+
75
+ def is_default?
76
+ breakdown_values.each{|bv| return false unless bv.is_default}
77
+ return true
78
+ end
79
+
80
+ def sorted_breakdown_values
81
+ breakdown_values.sort{|a,b| a.breakdown_value_set.istads_seq <=> b.breakdown_value_set.istads_seq}
82
+ end
83
+ end
84
+ end