diff --git a/.idea/.generators b/.idea/.generators new file mode 100644 index 00000000..fe791ada --- /dev/null +++ b/.idea/.generators @@ -0,0 +1,8 @@ + + diff --git a/.idea/.rakeTasks b/.idea/.rakeTasks new file mode 100644 index 00000000..e4a6bf7b --- /dev/null +++ b/.idea/.rakeTasks @@ -0,0 +1,7 @@ + + diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml new file mode 100644 index 00000000..b207c0ac --- /dev/null +++ b/.idea/dataSources.local.xml @@ -0,0 +1,33 @@ + + + + + + secretaria_ppgi + + + + + " + + + master_key + test_user + + + + + " + + + test_user + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 00000000..ed3557d7 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,29 @@ + + + + + postgresql + true + true + $PROJECT_DIR$/config/database.yml + org.postgresql.Driver + jdbc:postgresql://localhost:5432/secretaria_ppgi_production + + + postgresql + true + true + $PROJECT_DIR$/config/database.yml + org.postgresql.Driver + jdbc:postgresql://localhost:5432/secretaria_ppgi_development + + + postgresql + true + true + $PROJECT_DIR$/config/database.yml + org.postgresql.Driver + jdbc:postgresql://localhost:5432/secretaria_ppgi_test + + + \ No newline at end of file diff --git a/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722.xml b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722.xml new file mode 100644 index 00000000..37161f1c --- /dev/null +++ b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722.xml @@ -0,0 +1,1741 @@ + + + + + 13.0 + mdy + true ACDT +true ACSST +false ACST +false ACT +false ACWST +true ADT +true AEDT +true AESST +false AEST +false AFT +true AKDT +false AKST +true ALMST +false ALMT +false AMST +false AMT +false ANAST +false ANAT +false ARST +false ART +false AST +true AWSST +false AWST +true AZOST +false AZOT +false AZST +false AZT +false Africa/Abidjan +false Africa/Accra +false Africa/Addis_Ababa +false Africa/Algiers +false Africa/Asmara +false Africa/Asmera +false Africa/Bamako +false Africa/Bangui +false Africa/Banjul +false Africa/Bissau +false Africa/Blantyre +false Africa/Brazzaville +false Africa/Bujumbura +false Africa/Cairo +false Africa/Casablanca +false Africa/Ceuta +false Africa/Conakry +false Africa/Dakar +false Africa/Dar_es_Salaam +false Africa/Djibouti +false Africa/Douala +false Africa/El_Aaiun +false Africa/Freetown +false Africa/Gaborone +false Africa/Harare +false Africa/Johannesburg +false Africa/Juba +false Africa/Kampala +false Africa/Khartoum +false Africa/Kigali +false Africa/Kinshasa +false Africa/Lagos +false Africa/Libreville +false Africa/Lome +false Africa/Luanda +false Africa/Lubumbashi +false Africa/Lusaka +false Africa/Malabo +false Africa/Maputo +false Africa/Maseru +false Africa/Mbabane +false Africa/Mogadishu +false Africa/Monrovia +false Africa/Nairobi +false Africa/Ndjamena +false Africa/Niamey +false Africa/Nouakchott +false Africa/Ouagadougou +false Africa/Porto-Novo +false Africa/Sao_Tome +false Africa/Timbuktu +false Africa/Tripoli +false Africa/Tunis +false Africa/Windhoek +false America/Adak +false America/Anchorage +false America/Anguilla +false America/Antigua +false America/Araguaina +false America/Argentina/Buenos_Aires +false America/Argentina/Catamarca +false America/Argentina/ComodRivadavia +false America/Argentina/Cordoba +false America/Argentina/Jujuy +false America/Argentina/La_Rioja +false America/Argentina/Mendoza +false America/Argentina/Rio_Gallegos +false America/Argentina/Salta +false America/Argentina/San_Juan +false America/Argentina/San_Luis +false America/Argentina/Tucuman +false America/Argentina/Ushuaia +false America/Aruba +true America/Asuncion +false America/Atikokan +false America/Atka +false America/Bahia +false America/Bahia_Banderas +false America/Barbados +false America/Belem +false America/Belize +false America/Blanc-Sablon +false America/Boa_Vista +false America/Bogota +false America/Boise +false America/Buenos_Aires +false America/Cambridge_Bay +false America/Campo_Grande +false America/Cancun +false America/Caracas +false America/Catamarca +false America/Cayenne +false America/Cayman +false America/Chicago +false America/Chihuahua +false America/Coral_Harbour +false America/Cordoba +false America/Costa_Rica +false America/Creston +false America/Cuiaba +false America/Curacao +false America/Danmarkshavn +false America/Dawson +false America/Dawson_Creek +false America/Denver +false America/Detroit +false America/Dominica +false America/Edmonton +false America/Eirunepe +false America/El_Salvador +false America/Ensenada +false America/Fort_Nelson +false America/Fort_Wayne +false America/Fortaleza +false America/Glace_Bay +false America/Godthab +false America/Goose_Bay +false America/Grand_Turk +false America/Grenada +false America/Guadeloupe +false America/Guatemala +false America/Guayaquil +false America/Guyana +false America/Halifax +false America/Havana +false America/Hermosillo +false America/Indiana/Indianapolis +false America/Indiana/Knox +false America/Indiana/Marengo +false America/Indiana/Petersburg +false America/Indiana/Tell_City +false America/Indiana/Vevay +false America/Indiana/Vincennes +false America/Indiana/Winamac +false America/Indianapolis +false America/Inuvik +false America/Iqaluit +false America/Jamaica +false America/Jujuy +false America/Juneau +false America/Kentucky/Louisville +false America/Kentucky/Monticello +false America/Knox_IN +false America/Kralendijk +false America/La_Paz +false America/Lima +false America/Los_Angeles +false America/Louisville +false America/Lower_Princes +false America/Maceio +false America/Managua +false America/Manaus +false America/Marigot +false America/Martinique +false America/Matamoros +false America/Mazatlan +false America/Mendoza +false America/Menominee +false America/Merida +false America/Metlakatla +false America/Mexico_City +false America/Miquelon +false America/Moncton +false America/Monterrey +false America/Montevideo +false America/Montreal +false America/Montserrat +false America/Nassau +false America/New_York +false America/Nipigon +false America/Nome +false America/Noronha +false America/North_Dakota/Beulah +false America/North_Dakota/Center +false America/North_Dakota/New_Salem +false America/Nuuk +false America/Ojinaga +false America/Panama +false America/Pangnirtung +false America/Paramaribo +false America/Phoenix +false America/Port-au-Prince +false America/Port_of_Spain +false America/Porto_Acre +false America/Porto_Velho +false America/Puerto_Rico +false America/Punta_Arenas +false America/Rainy_River +false America/Rankin_Inlet +false America/Recife +false America/Regina +false America/Resolute +false America/Rio_Branco +false America/Rosario +false America/Santa_Isabel +false America/Santarem +true America/Santiago +false America/Santo_Domingo +false America/Sao_Paulo +false America/Scoresbysund +false America/Shiprock +false America/Sitka +false America/St_Barthelemy +false America/St_Johns +false America/St_Kitts +false America/St_Lucia +false America/St_Thomas +false America/St_Vincent +false America/Swift_Current +false America/Tegucigalpa +false America/Thule +false America/Thunder_Bay +false America/Tijuana +false America/Toronto +false America/Tortola +false America/Vancouver +false America/Virgin +false America/Whitehorse +false America/Winnipeg +false America/Yakutat +false America/Yellowknife +false Antarctica/Casey +false Antarctica/Davis +false Antarctica/DumontDUrville +false Antarctica/Macquarie +false Antarctica/Mawson +true Antarctica/McMurdo +false Antarctica/Palmer +false Antarctica/Rothera +true Antarctica/South_Pole +false Antarctica/Syowa +false Antarctica/Troll +false Antarctica/Vostok +false Arctic/Longyearbyen +false Asia/Aden +false Asia/Almaty +false Asia/Amman +false Asia/Anadyr +false Asia/Aqtau +false Asia/Aqtobe +false Asia/Ashgabat +false Asia/Ashkhabad +false Asia/Atyrau +false Asia/Baghdad +false Asia/Bahrain +false Asia/Baku +false Asia/Bangkok +false Asia/Barnaul +false Asia/Beirut +false Asia/Bishkek +false Asia/Brunei +false Asia/Calcutta +false Asia/Chita +false Asia/Choibalsan +false Asia/Chongqing +false Asia/Chungking +false Asia/Colombo +false Asia/Dacca +false Asia/Damascus +false Asia/Dhaka +false Asia/Dili +false Asia/Dubai +false Asia/Dushanbe +false Asia/Famagusta +false Asia/Gaza +false Asia/Harbin +false Asia/Hebron +false Asia/Ho_Chi_Minh +false Asia/Hong_Kong +false Asia/Hovd +false Asia/Irkutsk +false Asia/Istanbul +false Asia/Jakarta +false Asia/Jayapura +false Asia/Jerusalem +false Asia/Kabul +false Asia/Kamchatka +false Asia/Karachi +false Asia/Kashgar +false Asia/Kathmandu +false Asia/Katmandu +false Asia/Khandyga +false Asia/Kolkata +false Asia/Krasnoyarsk +false Asia/Kuala_Lumpur +false Asia/Kuching +false Asia/Kuwait +false Asia/Macao +false Asia/Macau +false Asia/Magadan +false Asia/Makassar +false Asia/Manila +false Asia/Muscat +false Asia/Nicosia +false Asia/Novokuznetsk +false Asia/Novosibirsk +false Asia/Omsk +false Asia/Oral +false Asia/Phnom_Penh +false Asia/Pontianak +false Asia/Pyongyang +false Asia/Qatar +false Asia/Qostanay +false Asia/Qyzylorda +false Asia/Rangoon +false Asia/Riyadh +false Asia/Saigon +false Asia/Sakhalin +false Asia/Samarkand +false Asia/Seoul +false Asia/Shanghai +false Asia/Singapore +false Asia/Srednekolymsk +false Asia/Taipei +false Asia/Tashkent +false Asia/Tbilisi +false Asia/Tehran +false Asia/Tel_Aviv +false Asia/Thimbu +false Asia/Thimphu +false Asia/Tokyo +false Asia/Tomsk +false Asia/Ujung_Pandang +false Asia/Ulaanbaatar +false Asia/Ulan_Bator +false Asia/Urumqi +false Asia/Ust-Nera +false Asia/Vientiane +false Asia/Vladivostok +false Asia/Yakutsk +false Asia/Yangon +false Asia/Yekaterinburg +false Asia/Yerevan +false Atlantic/Azores +false Atlantic/Bermuda +false Atlantic/Canary +false Atlantic/Cape_Verde +false Atlantic/Faeroe +false Atlantic/Faroe +false Atlantic/Jan_Mayen +false Atlantic/Madeira +false Atlantic/Reykjavik +false Atlantic/South_Georgia +false Atlantic/St_Helena +false Atlantic/Stanley +true Australia/ACT +true Australia/Adelaide +false Australia/Brisbane +true Australia/Broken_Hill +true Australia/Canberra +true Australia/Currie +false Australia/Darwin +false Australia/Eucla +true Australia/Hobart +true Australia/LHI +false Australia/Lindeman +true Australia/Lord_Howe +true Australia/Melbourne +true Australia/NSW +false Australia/North +false Australia/Perth +false Australia/Queensland +true Australia/South +true Australia/Sydney +true Australia/Tasmania +true Australia/Victoria +false Australia/West +true Australia/Yancowinna +true BDST +false BDT +false BNT +false BORT +false BOT +false BRA +true BRST +false BRT +true BST +false BTT +false Brazil/Acre +false Brazil/DeNoronha +false Brazil/East +false Brazil/West +true CADT +false CAST +false CCT +true CDT +true CEST +false CET +true CETDST +true CHADT +false CHAST +false CHUT +false CKT +true CLST +true CLT +false COT +false CST +false CST6CDT +false CXT +false Canada/Atlantic +false Canada/Central +false Canada/Eastern +false Canada/Mountain +false Canada/Newfoundland +false Canada/Pacific +false Canada/Saskatchewan +false Canada/Yukon +true Chile/Continental +true Chile/EasterIsland +false Cuba +false DAVT +false DDUT +true EASST +true EAST +false EAT +true EDT +true EEST +false EET +true EETDST +true EGST +false EGT +false EST +false EST5EDT +false Egypt +true Eire +false Etc/GMT +false Etc/GMT+0 +false Etc/GMT+1 +false Etc/GMT+10 +false Etc/GMT+11 +false Etc/GMT+12 +false Etc/GMT+2 +false Etc/GMT+3 +false Etc/GMT+4 +false Etc/GMT+5 +false Etc/GMT+6 +false Etc/GMT+7 +false Etc/GMT+8 +false Etc/GMT+9 +false Etc/GMT-0 +false Etc/GMT-1 +false Etc/GMT-10 +false Etc/GMT-11 +false Etc/GMT-12 +false Etc/GMT-13 +false Etc/GMT-14 +false Etc/GMT-2 +false Etc/GMT-3 +false Etc/GMT-4 +false Etc/GMT-5 +false Etc/GMT-6 +false Etc/GMT-7 +false Etc/GMT-8 +false Etc/GMT-9 +false Etc/GMT0 +false Etc/Greenwich +false Etc/UCT +false Etc/UTC +false Etc/Universal +false Etc/Zulu +false Europe/Amsterdam +false Europe/Andorra +false Europe/Astrakhan +false Europe/Athens +false Europe/Belfast +false Europe/Belgrade +false Europe/Berlin +false Europe/Bratislava +false Europe/Brussels +false Europe/Bucharest +false Europe/Budapest +false Europe/Busingen +false Europe/Chisinau +false Europe/Copenhagen +true Europe/Dublin +false Europe/Gibraltar +false Europe/Guernsey +false Europe/Helsinki +false Europe/Isle_of_Man +false Europe/Istanbul +false Europe/Jersey +false Europe/Kaliningrad +false Europe/Kiev +false Europe/Kirov +false Europe/Lisbon +false Europe/Ljubljana +false Europe/London +false Europe/Luxembourg +false Europe/Madrid +false Europe/Malta +false Europe/Mariehamn +false Europe/Minsk +false Europe/Monaco +false Europe/Moscow +false Europe/Nicosia +false Europe/Oslo +false Europe/Paris +false Europe/Podgorica +false Europe/Prague +false Europe/Riga +false Europe/Rome +false Europe/Samara +false Europe/San_Marino +false Europe/Sarajevo +false Europe/Saratov +false Europe/Simferopol +false Europe/Skopje +false Europe/Sofia +false Europe/Stockholm +false Europe/Tallinn +false Europe/Tirane +false Europe/Tiraspol +false Europe/Ulyanovsk +false Europe/Uzhgorod +false Europe/Vaduz +false Europe/Vatican +false Europe/Vienna +false Europe/Vilnius +false Europe/Volgograd +false Europe/Warsaw +false Europe/Zagreb +false Europe/Zaporozhye +false Europe/Zurich +false FET +true FJST +false FJT +false FKST +false FKT +true FNST +false FNT +false Factory +false GALT +false GAMT +false GB +false GB-Eire +false GEST +false GET +false GFT +false GILT +false GMT +false GMT+0 +false GMT-0 +false GMT0 +false GYT +false Greenwich +false HKT +false HST +false Hongkong +false ICT +true IDT +false IOT +false IRKST +false IRKT +false IRT +false IST +false Iceland +false Indian/Antananarivo +false Indian/Chagos +false Indian/Christmas +false Indian/Cocos +false Indian/Comoro +false Indian/Kerguelen +false Indian/Mahe +false Indian/Maldives +false Indian/Mauritius +false Indian/Mayotte +false Indian/Reunion +false Iran +false Israel +false JAYT +false JST +false Jamaica +false Japan +true KDT +true KGST +false KGT +false KOST +false KRAST +false KRAT +false KST +false Kwajalein +true LHDT +false LHST +false LIGT +false LINT +false LKT +false Libya +false MAGST +false MAGT +false MART +false MAWT +true MDT +true MEST +true MESZ +false MET +true METDST +false MEZ +false MHT +false MMT +false MPT +true MSD +false MSK +false MST +false MST7MDT +true MUST +false MUT +false MVT +false MYT +false Mexico/BajaNorte +false Mexico/BajaSur +false Mexico/General +true NDT +false NFT +false NOVST +false NOVT +false NPT +false NST +false NUT +true NZ +true NZ-CHAT +true NZDT +false NZST +false NZT +false Navajo +false OMSST +false OMST +true PDT +false PET +false PETST +false PETT +false PGT +false PHOT +false PHT +true PKST +false PKT +true PMDT +false PMST +false PONT +false PRC +false PST +false PST8PDT +false PWT +true PYST +true PYT +true Pacific/Apia +true Pacific/Auckland +false Pacific/Bougainville +true Pacific/Chatham +false Pacific/Chuuk +true Pacific/Easter +false Pacific/Efate +false Pacific/Enderbury +false Pacific/Fakaofo +true Pacific/Fiji +false Pacific/Funafuti +false Pacific/Galapagos +false Pacific/Gambier +false Pacific/Guadalcanal +false Pacific/Guam +false Pacific/Honolulu +false Pacific/Johnston +false Pacific/Kiritimati +false Pacific/Kosrae +false Pacific/Kwajalein +false Pacific/Majuro +false Pacific/Marquesas +false Pacific/Midway +false Pacific/Nauru +false Pacific/Niue +true Pacific/Norfolk +false Pacific/Noumea +false Pacific/Pago_Pago +false Pacific/Palau +false Pacific/Pitcairn +false Pacific/Pohnpei +false Pacific/Ponape +false Pacific/Port_Moresby +false Pacific/Rarotonga +false Pacific/Saipan +false Pacific/Samoa +false Pacific/Tahiti +false Pacific/Tarawa +false Pacific/Tongatapu +false Pacific/Truk +false Pacific/Wake +false Pacific/Wallis +false Pacific/Yap +false Poland +false Portugal +false RET +false ROC +false ROK +true SADT +false SAST +false SCT +false SGT +false Singapore +false SystemV/AST4 +false SystemV/AST4ADT +false SystemV/CST6 +false SystemV/CST6CDT +false SystemV/EST5 +false SystemV/EST5EDT +false SystemV/HST10 +false SystemV/MST7 +false SystemV/MST7MDT +false SystemV/PST8 +false SystemV/PST8PDT +false SystemV/YST9 +false SystemV/YST9YDT +false TAHT +false TFT +false TJT +false TKT +false TMT +false TOT +false TRUT +false TVT +false Turkey +false UCT +true ULAST +false ULAT +false US/Alaska +false US/Aleutian +false US/Arizona +false US/Central +false US/East-Indiana +false US/Eastern +false US/Hawaii +false US/Indiana-Starke +false US/Michigan +false US/Mountain +false US/Pacific +false US/Pacific-New +false US/Samoa +false UT +false UTC +true UYST +false UYT +true UZST +false UZT +false Universal +false VET +false VLAST +false VLAT +false VOLT +false VUT +false W-SU +true WADT +false WAKT +false WAST +false WAT +true WDT +false WET +true WETDST +false WFT +true WGST +false WGT +false XJT +false YAKST +false YAKT +false YAPT +true YEKST +false YEKT +false Z +false Zulu +false localtime +false posix/Africa/Abidjan +false posix/Africa/Accra +false posix/Africa/Addis_Ababa +false posix/Africa/Algiers +false posix/Africa/Asmara +false posix/Africa/Asmera +false posix/Africa/Bamako +false posix/Africa/Bangui +false posix/Africa/Banjul +false posix/Africa/Bissau +false posix/Africa/Blantyre +false posix/Africa/Brazzaville +false posix/Africa/Bujumbura +false posix/Africa/Cairo +false posix/Africa/Casablanca +false posix/Africa/Ceuta +false posix/Africa/Conakry +false posix/Africa/Dakar +false posix/Africa/Dar_es_Salaam +false posix/Africa/Djibouti +false posix/Africa/Douala +false posix/Africa/El_Aaiun +false posix/Africa/Freetown +false posix/Africa/Gaborone +false posix/Africa/Harare +false posix/Africa/Johannesburg +false posix/Africa/Juba +false posix/Africa/Kampala +false posix/Africa/Khartoum +false posix/Africa/Kigali +false posix/Africa/Kinshasa +false posix/Africa/Lagos +false posix/Africa/Libreville +false posix/Africa/Lome +false posix/Africa/Luanda +false posix/Africa/Lubumbashi +false posix/Africa/Lusaka +false posix/Africa/Malabo +false posix/Africa/Maputo +false posix/Africa/Maseru +false posix/Africa/Mbabane +false posix/Africa/Mogadishu +false posix/Africa/Monrovia +false posix/Africa/Nairobi +false posix/Africa/Ndjamena +false posix/Africa/Niamey +false posix/Africa/Nouakchott +false posix/Africa/Ouagadougou +false posix/Africa/Porto-Novo +false posix/Africa/Sao_Tome +false posix/Africa/Timbuktu +false posix/Africa/Tripoli +false posix/Africa/Tunis +false posix/Africa/Windhoek +false posix/America/Adak +false posix/America/Anchorage +false posix/America/Anguilla +false posix/America/Antigua +false posix/America/Araguaina +false posix/America/Argentina/Buenos_Aires +false posix/America/Argentina/Catamarca +false posix/America/Argentina/ComodRivadavia +false posix/America/Argentina/Cordoba +false posix/America/Argentina/Jujuy +false posix/America/Argentina/La_Rioja +false posix/America/Argentina/Mendoza +false posix/America/Argentina/Rio_Gallegos +false posix/America/Argentina/Salta +false posix/America/Argentina/San_Juan +false posix/America/Argentina/San_Luis +false posix/America/Argentina/Tucuman +false posix/America/Argentina/Ushuaia +false posix/America/Aruba +true posix/America/Asuncion +false posix/America/Atikokan +false posix/America/Atka +false posix/America/Bahia +false posix/America/Bahia_Banderas +false posix/America/Barbados +false posix/America/Belem +false posix/America/Belize +false posix/America/Blanc-Sablon +false posix/America/Boa_Vista +false posix/America/Bogota +false posix/America/Boise +false posix/America/Buenos_Aires +false posix/America/Cambridge_Bay +false posix/America/Campo_Grande +false posix/America/Cancun +false posix/America/Caracas +false posix/America/Catamarca +false posix/America/Cayenne +false posix/America/Cayman +false posix/America/Chicago +false posix/America/Chihuahua +false posix/America/Coral_Harbour +false posix/America/Cordoba +false posix/America/Costa_Rica +false posix/America/Creston +false posix/America/Cuiaba +false posix/America/Curacao +false posix/America/Danmarkshavn +false posix/America/Dawson +false posix/America/Dawson_Creek +false posix/America/Denver +false posix/America/Detroit +false posix/America/Dominica +false posix/America/Edmonton +false posix/America/Eirunepe +false posix/America/El_Salvador +false posix/America/Ensenada +false posix/America/Fort_Nelson +false posix/America/Fort_Wayne +false posix/America/Fortaleza +false posix/America/Glace_Bay +false posix/America/Godthab +false posix/America/Goose_Bay +false posix/America/Grand_Turk +false posix/America/Grenada +false posix/America/Guadeloupe +false posix/America/Guatemala +false posix/America/Guayaquil +false posix/America/Guyana +false posix/America/Halifax +false posix/America/Havana +false posix/America/Hermosillo +false posix/America/Indiana/Indianapolis +false posix/America/Indiana/Knox +false posix/America/Indiana/Marengo +false posix/America/Indiana/Petersburg +false posix/America/Indiana/Tell_City +false posix/America/Indiana/Vevay +false posix/America/Indiana/Vincennes +false posix/America/Indiana/Winamac +false posix/America/Indianapolis +false posix/America/Inuvik +false posix/America/Iqaluit +false posix/America/Jamaica +false posix/America/Jujuy +false posix/America/Juneau +false posix/America/Kentucky/Louisville +false posix/America/Kentucky/Monticello +false posix/America/Knox_IN +false posix/America/Kralendijk +false posix/America/La_Paz +false posix/America/Lima +false posix/America/Los_Angeles +false posix/America/Louisville +false posix/America/Lower_Princes +false posix/America/Maceio +false posix/America/Managua +false posix/America/Manaus +false posix/America/Marigot +false posix/America/Martinique +false posix/America/Matamoros +false posix/America/Mazatlan +false posix/America/Mendoza +false posix/America/Menominee +false posix/America/Merida +false posix/America/Metlakatla +false posix/America/Mexico_City +false posix/America/Miquelon +false posix/America/Moncton +false posix/America/Monterrey +false posix/America/Montevideo +false posix/America/Montreal +false posix/America/Montserrat +false posix/America/Nassau +false posix/America/New_York +false posix/America/Nipigon +false posix/America/Nome +false posix/America/Noronha +false posix/America/North_Dakota/Beulah +false posix/America/North_Dakota/Center +false posix/America/North_Dakota/New_Salem +false posix/America/Nuuk +false posix/America/Ojinaga +false posix/America/Panama +false posix/America/Pangnirtung +false posix/America/Paramaribo +false posix/America/Phoenix +false posix/America/Port-au-Prince +false posix/America/Port_of_Spain +false posix/America/Porto_Acre +false posix/America/Porto_Velho +false posix/America/Puerto_Rico +false posix/America/Punta_Arenas +false posix/America/Rainy_River +false posix/America/Rankin_Inlet +false posix/America/Recife +false posix/America/Regina +false posix/America/Resolute +false posix/America/Rio_Branco +false posix/America/Rosario +false posix/America/Santa_Isabel +false posix/America/Santarem +true posix/America/Santiago +false posix/America/Santo_Domingo +false posix/America/Sao_Paulo +false posix/America/Scoresbysund +false posix/America/Shiprock +false posix/America/Sitka +false posix/America/St_Barthelemy +false posix/America/St_Johns +false posix/America/St_Kitts +false posix/America/St_Lucia +false posix/America/St_Thomas +false posix/America/St_Vincent +false posix/America/Swift_Current +false posix/America/Tegucigalpa +false posix/America/Thule +false posix/America/Thunder_Bay +false posix/America/Tijuana +false posix/America/Toronto +false posix/America/Tortola +false posix/America/Vancouver +false posix/America/Virgin +false posix/America/Whitehorse +false posix/America/Winnipeg +false posix/America/Yakutat +false posix/America/Yellowknife +false posix/Antarctica/Casey +false posix/Antarctica/Davis +false posix/Antarctica/DumontDUrville +false posix/Antarctica/Macquarie +false posix/Antarctica/Mawson +true posix/Antarctica/McMurdo +false posix/Antarctica/Palmer +false posix/Antarctica/Rothera +true posix/Antarctica/South_Pole +false posix/Antarctica/Syowa +false posix/Antarctica/Troll +false posix/Antarctica/Vostok +false posix/Arctic/Longyearbyen +false posix/Asia/Aden +false posix/Asia/Almaty +false posix/Asia/Amman +false posix/Asia/Anadyr +false posix/Asia/Aqtau +false posix/Asia/Aqtobe +false posix/Asia/Ashgabat +false posix/Asia/Ashkhabad +false posix/Asia/Atyrau +false posix/Asia/Baghdad +false posix/Asia/Bahrain +false posix/Asia/Baku +false posix/Asia/Bangkok +false posix/Asia/Barnaul +false posix/Asia/Beirut +false posix/Asia/Bishkek +false posix/Asia/Brunei +false posix/Asia/Calcutta +false posix/Asia/Chita +false posix/Asia/Choibalsan +false posix/Asia/Chongqing +false posix/Asia/Chungking +false posix/Asia/Colombo +false posix/Asia/Dacca +false posix/Asia/Damascus +false posix/Asia/Dhaka +false posix/Asia/Dili +false posix/Asia/Dubai +false posix/Asia/Dushanbe +false posix/Asia/Famagusta +false posix/Asia/Gaza +false posix/Asia/Harbin +false posix/Asia/Hebron +false posix/Asia/Ho_Chi_Minh +false posix/Asia/Hong_Kong +false posix/Asia/Hovd +false posix/Asia/Irkutsk +false posix/Asia/Istanbul +false posix/Asia/Jakarta +false posix/Asia/Jayapura +false posix/Asia/Jerusalem +false posix/Asia/Kabul +false posix/Asia/Kamchatka +false posix/Asia/Karachi +false posix/Asia/Kashgar +false posix/Asia/Kathmandu +false posix/Asia/Katmandu +false posix/Asia/Khandyga +false posix/Asia/Kolkata +false posix/Asia/Krasnoyarsk +false posix/Asia/Kuala_Lumpur +false posix/Asia/Kuching +false posix/Asia/Kuwait +false posix/Asia/Macao +false posix/Asia/Macau +false posix/Asia/Magadan +false posix/Asia/Makassar +false posix/Asia/Manila +false posix/Asia/Muscat +false posix/Asia/Nicosia +false posix/Asia/Novokuznetsk +false posix/Asia/Novosibirsk +false posix/Asia/Omsk +false posix/Asia/Oral +false posix/Asia/Phnom_Penh +false posix/Asia/Pontianak +false posix/Asia/Pyongyang +false posix/Asia/Qatar +false posix/Asia/Qostanay +false posix/Asia/Qyzylorda +false posix/Asia/Rangoon +false posix/Asia/Riyadh +false posix/Asia/Saigon +false posix/Asia/Sakhalin +false posix/Asia/Samarkand +false posix/Asia/Seoul +false posix/Asia/Shanghai +false posix/Asia/Singapore +false posix/Asia/Srednekolymsk +false posix/Asia/Taipei +false posix/Asia/Tashkent +false posix/Asia/Tbilisi +false posix/Asia/Tehran +false posix/Asia/Tel_Aviv +false posix/Asia/Thimbu +false posix/Asia/Thimphu +false posix/Asia/Tokyo +false posix/Asia/Tomsk +false posix/Asia/Ujung_Pandang +false posix/Asia/Ulaanbaatar +false posix/Asia/Ulan_Bator +false posix/Asia/Urumqi +false posix/Asia/Ust-Nera +false posix/Asia/Vientiane +false posix/Asia/Vladivostok +false posix/Asia/Yakutsk +false posix/Asia/Yangon +false posix/Asia/Yekaterinburg +false posix/Asia/Yerevan +false posix/Atlantic/Azores +false posix/Atlantic/Bermuda +false posix/Atlantic/Canary +false posix/Atlantic/Cape_Verde +false posix/Atlantic/Faeroe +false posix/Atlantic/Faroe +false posix/Atlantic/Jan_Mayen +false posix/Atlantic/Madeira +false posix/Atlantic/Reykjavik +false posix/Atlantic/South_Georgia +false posix/Atlantic/St_Helena +false posix/Atlantic/Stanley +true posix/Australia/ACT +true posix/Australia/Adelaide +false posix/Australia/Brisbane +true posix/Australia/Broken_Hill +true posix/Australia/Canberra +true posix/Australia/Currie +false posix/Australia/Darwin +false posix/Australia/Eucla +true posix/Australia/Hobart +true posix/Australia/LHI +false posix/Australia/Lindeman +true posix/Australia/Lord_Howe +true posix/Australia/Melbourne +true posix/Australia/NSW +false posix/Australia/North +false posix/Australia/Perth +false posix/Australia/Queensland +true posix/Australia/South +true posix/Australia/Sydney +true posix/Australia/Tasmania +true posix/Australia/Victoria +false posix/Australia/West +true posix/Australia/Yancowinna +false posix/Brazil/Acre +false posix/Brazil/DeNoronha +false posix/Brazil/East +false posix/Brazil/West +false posix/CET +false posix/CST6CDT +false posix/Canada/Atlantic +false posix/Canada/Central +false posix/Canada/Eastern +false posix/Canada/Mountain +false posix/Canada/Newfoundland +false posix/Canada/Pacific +false posix/Canada/Saskatchewan +false posix/Canada/Yukon +true posix/Chile/Continental +true posix/Chile/EasterIsland +false posix/Cuba +false posix/EET +false posix/EST +false posix/EST5EDT +false posix/Egypt +true posix/Eire +false posix/Etc/GMT +false posix/Etc/GMT+0 +false posix/Etc/GMT+1 +false posix/Etc/GMT+10 +false posix/Etc/GMT+11 +false posix/Etc/GMT+12 +false posix/Etc/GMT+2 +false posix/Etc/GMT+3 +false posix/Etc/GMT+4 +false posix/Etc/GMT+5 +false posix/Etc/GMT+6 +false posix/Etc/GMT+7 +false posix/Etc/GMT+8 +false posix/Etc/GMT+9 +false posix/Etc/GMT-0 +false posix/Etc/GMT-1 +false posix/Etc/GMT-10 +false posix/Etc/GMT-11 +false posix/Etc/GMT-12 +false posix/Etc/GMT-13 +false posix/Etc/GMT-14 +false posix/Etc/GMT-2 +false posix/Etc/GMT-3 +false posix/Etc/GMT-4 +false posix/Etc/GMT-5 +false posix/Etc/GMT-6 +false posix/Etc/GMT-7 +false posix/Etc/GMT-8 +false posix/Etc/GMT-9 +false posix/Etc/GMT0 +false posix/Etc/Greenwich +false posix/Etc/UCT +false posix/Etc/UTC +false posix/Etc/Universal +false posix/Etc/Zulu +false posix/Europe/Amsterdam +false posix/Europe/Andorra +false posix/Europe/Astrakhan +false posix/Europe/Athens +false posix/Europe/Belfast +false posix/Europe/Belgrade +false posix/Europe/Berlin +false posix/Europe/Bratislava +false posix/Europe/Brussels +false posix/Europe/Bucharest +false posix/Europe/Budapest +false posix/Europe/Busingen +false posix/Europe/Chisinau +false posix/Europe/Copenhagen +true posix/Europe/Dublin +false posix/Europe/Gibraltar +false posix/Europe/Guernsey +false posix/Europe/Helsinki +false posix/Europe/Isle_of_Man +false posix/Europe/Istanbul +false posix/Europe/Jersey +false posix/Europe/Kaliningrad +false posix/Europe/Kiev +false posix/Europe/Kirov +false posix/Europe/Lisbon +false posix/Europe/Ljubljana +false posix/Europe/London +false posix/Europe/Luxembourg +false posix/Europe/Madrid +false posix/Europe/Malta +false posix/Europe/Mariehamn +false posix/Europe/Minsk +false posix/Europe/Monaco +false posix/Europe/Moscow +false posix/Europe/Nicosia +false posix/Europe/Oslo +false posix/Europe/Paris +false posix/Europe/Podgorica +false posix/Europe/Prague +false posix/Europe/Riga +false posix/Europe/Rome +false posix/Europe/Samara +false posix/Europe/San_Marino +false posix/Europe/Sarajevo +false posix/Europe/Saratov +false posix/Europe/Simferopol +false posix/Europe/Skopje +false posix/Europe/Sofia +false posix/Europe/Stockholm +false posix/Europe/Tallinn +false posix/Europe/Tirane +false posix/Europe/Tiraspol +false posix/Europe/Ulyanovsk +false posix/Europe/Uzhgorod +false posix/Europe/Vaduz +false posix/Europe/Vatican +false posix/Europe/Vienna +false posix/Europe/Vilnius +false posix/Europe/Volgograd +false posix/Europe/Warsaw +false posix/Europe/Zagreb +false posix/Europe/Zaporozhye +false posix/Europe/Zurich +false posix/Factory +false posix/GB +false posix/GB-Eire +false posix/GMT +false posix/GMT+0 +false posix/GMT-0 +false posix/GMT0 +false posix/Greenwich +false posix/HST +false posix/Hongkong +false posix/Iceland +false posix/Indian/Antananarivo +false posix/Indian/Chagos +false posix/Indian/Christmas +false posix/Indian/Cocos +false posix/Indian/Comoro +false posix/Indian/Kerguelen +false posix/Indian/Mahe +false posix/Indian/Maldives +false posix/Indian/Mauritius +false posix/Indian/Mayotte +false posix/Indian/Reunion +false posix/Iran +false posix/Israel +false posix/Jamaica +false posix/Japan +false posix/Kwajalein +false posix/Libya +false posix/MET +false posix/MST +false posix/MST7MDT +false posix/Mexico/BajaNorte +false posix/Mexico/BajaSur +false posix/Mexico/General +true posix/NZ +true posix/NZ-CHAT +false posix/Navajo +false posix/PRC +false posix/PST8PDT +true posix/Pacific/Apia +true posix/Pacific/Auckland +false posix/Pacific/Bougainville +true posix/Pacific/Chatham +false posix/Pacific/Chuuk +true posix/Pacific/Easter +false posix/Pacific/Efate +false posix/Pacific/Enderbury +false posix/Pacific/Fakaofo +true posix/Pacific/Fiji +false posix/Pacific/Funafuti +false posix/Pacific/Galapagos +false posix/Pacific/Gambier +false posix/Pacific/Guadalcanal +false posix/Pacific/Guam +false posix/Pacific/Honolulu +false posix/Pacific/Johnston +false posix/Pacific/Kiritimati +false posix/Pacific/Kosrae +false posix/Pacific/Kwajalein +false posix/Pacific/Majuro +false posix/Pacific/Marquesas +false posix/Pacific/Midway +false posix/Pacific/Nauru +false posix/Pacific/Niue +true posix/Pacific/Norfolk +false posix/Pacific/Noumea +false posix/Pacific/Pago_Pago +false posix/Pacific/Palau +false posix/Pacific/Pitcairn +false posix/Pacific/Pohnpei +false posix/Pacific/Ponape +false posix/Pacific/Port_Moresby +false posix/Pacific/Rarotonga +false posix/Pacific/Saipan +false posix/Pacific/Samoa +false posix/Pacific/Tahiti +false posix/Pacific/Tarawa +false posix/Pacific/Tongatapu +false posix/Pacific/Truk +false posix/Pacific/Wake +false posix/Pacific/Wallis +false posix/Pacific/Yap +false posix/Poland +false posix/Portugal +false posix/ROC +false posix/ROK +false posix/Singapore +false posix/SystemV/AST4 +false posix/SystemV/AST4ADT +false posix/SystemV/CST6 +false posix/SystemV/CST6CDT +false posix/SystemV/EST5 +false posix/SystemV/EST5EDT +false posix/SystemV/HST10 +false posix/SystemV/MST7 +false posix/SystemV/MST7MDT +false posix/SystemV/PST8 +false posix/SystemV/PST8PDT +false posix/SystemV/YST9 +false posix/SystemV/YST9YDT +false posix/Turkey +false posix/UCT +false posix/US/Alaska +false posix/US/Aleutian +false posix/US/Arizona +false posix/US/Central +false posix/US/East-Indiana +false posix/US/Eastern +false posix/US/Hawaii +false posix/US/Indiana-Starke +false posix/US/Michigan +false posix/US/Mountain +false posix/US/Pacific +false posix/US/Pacific-New +false posix/US/Samoa +false posix/UTC +false posix/Universal +false posix/W-SU +false posix/WET +false posix/Zulu +false posixrules + + 1605305728 + + + 13395 + default administrative connection database + test_user + + + 16385 + test_user + + + 16387 + test_user + + + 16388 + test_user + 508 + 1 + sequence|table|16389|16391|1 + + + + 16384 + test_user + + + 4571 + + + 3373 + + + 3374 + + + 3375 + + + 4569 + + + 4200 + + + 3377 + + + 4570 + + + 10 + 1 + 1 + 1 + 1 + 1 + 1 + + + 13111 + 293 + test_user + + + 11 + system catalog schema + 286 + test_user + + + 2200 + standard public schema + 287 + test_user + 509 + 1 + + + 2 + heap table access method + 1 + pg_catalog.heap_tableam_handler + 3 + + + 403 + b-tree index access method + 1 + pg_catalog.bthandler + 330 + index + + + 405 + hash index access method + 1 + pg_catalog.hashhandler + 331 + index + + + 783 + GiST index access method + 1 + pg_catalog.gisthandler + 332 + index + + + 2742 + GIN index access method + 1 + pg_catalog.ginhandler + 333 + index + + + 4000 + SP-GiST index access method + 1 + pg_catalog.spghandler + 334 + index + + + 3580 + block range index (BRIN) access method + 1 + pg_catalog.brinhandler + 335 + index + + + 13381 + PL/pgSQL procedural language + 439 + 1.0 + pg_catalog + 11 + + + + + + + 16389 + test_user + 495 + bigint|0s + + + 16412 + test_user + 501 +
+ + 16404 + test_user + 498 +
+ + 16391 + test_user + 495 +
+ + 1 + varchar|0s + 1 + 501 + 1043 + + + 2 + varchar|0s + 501 + 1043 + + + 3 + timestamp|0s + 1 + 501 + 1114 + + + 4 + timestamp|0s + 1 + 501 + 1114 + + + 16418 + 501 + key + 1 + 1 + + + 16419 + 501 + key + 1 + ar_internal_metadata_pkey + + + 1 + varchar|0s + 1 + 498 + 1043 + + + 16410 + 498 + version + 1 + 1 + + + 16411 + 498 + version + 1 + schema_migrations_pkey + + + 1 + bigint|0s + 1 + 495 + nextval('users_id_seq'::regclass) + 20 + + + 2 + varchar|0s + 1 + 495 + ''::character varying + 1043 + + + 3 + varchar|0s + 1 + 495 + ''::character varying + 1043 + + + 4 + varchar|0s + 495 + 1043 + + + 5 + timestamp|0s + 495 + 1114 + + + 6 + timestamp|0s + 495 + 1114 + + + 7 + timestamp|0s + 1 + 495 + 1114 + + + 8 + timestamp|0s + 1 + 495 + 1114 + + + 9 + varchar|0s + 495 + 1043 + + + 10 + varchar|0s + 495 + 1043 + + + 11 + integer|0s + 495 + 23 + + + 16400 + 495 + id + 1 + 1 + + + 16402 + 496 + email + 1 + + + 16403 + 497 + reset_password_token + 1 + + + 16401 + 495 + id + 1 + users_pkey + +
+
\ No newline at end of file diff --git a/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg.meta b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg.meta new file mode 100644 index 00000000..a17f3119 --- /dev/null +++ b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg.meta @@ -0,0 +1 @@ +#n:secretaria_ppgi_test \ No newline at end of file diff --git a/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/information_schema.FNRwLQ.meta b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/information_schema.FNRwLQ.meta new file mode 100644 index 00000000..1ff3db2e --- /dev/null +++ b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/information_schema.FNRwLQ.meta @@ -0,0 +1,2 @@ +#n:information_schema +! [null, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/pg_catalog.0S1ZNQ.meta b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/pg_catalog.0S1ZNQ.meta new file mode 100644 index 00000000..44e65b16 --- /dev/null +++ b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/pg_catalog.0S1ZNQ.meta @@ -0,0 +1,2 @@ +#n:pg_catalog +! [null, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/public.abK9xQ.meta b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/public.abK9xQ.meta new file mode 100644 index 00000000..a2224b3d --- /dev/null +++ b/.idea/dataSources/75e62ec9-fb24-46a0-84ef-ab82bc38a722/storage_v2/_src_/database/secretaria_ppgi_test.yY7PLg/schema/public.abK9xQ.meta @@ -0,0 +1,2 @@ +#n:public +! [509, 0, null, null, -2147483648, -2147483648] diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 00000000..b0db9b0f --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..e098232b --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/secretaria_ppgi.iml b/.idea/secretaria_ppgi.iml new file mode 100644 index 00000000..343ba957 --- /dev/null +++ b/.idea/secretaria_ppgi.iml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..8996b921 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,689 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1605305587618 + + + 1605483214391 + + + 1605487764046 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..6e6cec26 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM ruby:2.6.3-stretch as installer + +RUN apt update && apt install -y apt-utils + +# install node +RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - +RUN apt-get install -y nodejs + +# install yarn +RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - +RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list +RUN apt update && apt install -y yarn +ENV PATH "$PATH:/opt/yarn-1.22.5/bin" + +COPY . /secretaria/ +WORKDIR /secretaria/ +RUN bundle install +RUN gem install solargraph \ No newline at end of file diff --git a/Gemfile b/Gemfile index 54be0f4e..513bc801 100644 --- a/Gemfile +++ b/Gemfile @@ -64,7 +64,12 @@ group :test do # database_cleaner is not required, but highly recommended gem 'database_cleaner' gem 'shoulda-matchers' + gem 'simplecov', require: false end +gem "font-awesome-rails" +gem 'materialize-sass' +gem 'jquery-rails' # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] +gem 'rails-controller-testing' diff --git a/Gemfile.lock b/Gemfile.lock index 0a9e4f86..de22cd38 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -45,6 +45,8 @@ GEM addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) arel (9.0.0) + autoprefixer-rails (10.0.3.0) + execjs backports (3.15.0) bcrypt (3.1.13) bindex (0.8.1) @@ -100,9 +102,12 @@ GEM responders warden (~> 1.2.3) diff-lcs (1.3) + docile (1.3.2) erubi (1.9.0) execjs (2.7.0) ffi (1.11.1) + font-awesome-rails (4.7.0.5) + railties (>= 3.2, < 6.1) gherkin (5.1.0) globalid (0.4.2) activesupport (>= 4.2.0) @@ -110,6 +115,10 @@ GEM concurrent-ruby (~> 1.0) jbuilder (2.9.1) activesupport (>= 4.2.0) + jquery-rails (4.4.0) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) @@ -121,6 +130,8 @@ GEM mini_mime (>= 0.1.1) marcel (0.3.3) mimemagic (~> 0.3.2) + materialize-sass (1.0.0) + autoprefixer-rails (>= 6.0.3) method_source (0.9.2) mime-types (3.3) mime-types-data (~> 3.2015) @@ -155,6 +166,10 @@ GEM bundler (>= 1.3.0) railties (= 5.2.3) sprockets-rails (>= 2.0.0) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) @@ -209,6 +224,12 @@ GEM rubyzip (>= 1.2.2) shoulda-matchers (4.1.2) activesupport (>= 4.2.0) + simplecov (0.20.0) + docile (~> 1.1) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.2) spring (2.1.0) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) @@ -258,15 +279,20 @@ DEPENDENCIES cucumber-rails database_cleaner devise + font-awesome-rails jbuilder (~> 2.5) + jquery-rails listen (>= 3.0.5, < 3.2) + materialize-sass pg (>= 0.18, < 2.0) puma (~> 3.12) rails (~> 5.2.3) + rails-controller-testing rspec-rails sass-rails (~> 5.0) selenium-webdriver shoulda-matchers + simplecov spring spring-watcher-listen (~> 2.0.0) turbolinks (~> 5) @@ -279,4 +305,4 @@ RUBY VERSION ruby 2.6.3p62 BUNDLED WITH - 1.17.2 + 1.17.3 diff --git a/README.md b/README.md index 7db80e4c..01e25c97 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,10 @@ # README -This README would normally document whatever steps are necessary to get the -application up and running. +# Running -Things you may want to cover: +Run with `docker-compose up` it will start database and rails containers -* Ruby version +By default it'll start rails server at localhost:3000 -* System dependencies - -* Configuration - -* Database creation - -* Database initialization - -* How to run the test suite - -* Services (job queues, cache servers, search engines, etc.) - -* Deployment instructions - -* ... +While container is running you can execute another commands + diff --git a/Sprint3.md b/Sprint3.md new file mode 100644 index 00000000..8c573552 --- /dev/null +++ b/Sprint3.md @@ -0,0 +1,21 @@ +# Sprint 3 + +### Métodos refatorados + +#### Complexidade Ciclomática + +Não houve métodos com complexidade alta suficiente na controladora de processos para que fosse necessária a refatoração. + +#### Codesmells + +Antes da refatoração: 24 code smells +Depois da refatoração: 19 code smells + +- Movido pedaços repetidos de código pelos métodos para um método único (reset_status) + +- Criado uma before_action para redirecionar os usuários diretamente sem a necessidade de verificar se o usuário estava +em todos os métodos + +#### SimpleCov + +- Método de search com verificação nula desnecessária devido ao require de query_parameters \ No newline at end of file diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 82e6f0f6..7d6e330d 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -14,3 +14,10 @@ //= require activestorage //= require turbolinks //= require_tree . +//= require jquery +//= require materialize-sprockets + +document.addEventListener('DOMContentLoaded', function() { + const elems = document.querySelectorAll('select'); + const instances = M.FormSelect.init(elems); +}); \ No newline at end of file diff --git a/app/assets/javascripts/process.js b/app/assets/javascripts/process.js new file mode 100644 index 00000000..dea9580a --- /dev/null +++ b/app/assets/javascripts/process.js @@ -0,0 +1,43 @@ +$(document).ready(function () { + $("#file_input").change(function () { + const f = this.files; + const label = document.getElementById('file_label'); + if (label) { + label.hidden = true; + } + const list = document.getElementById('file_list'); + if (list) { + list.hidden = false; + } + const filesArr = Array.from(f); + if (filesArr.length > 0) { + renderFileList(filesArr); + } else{ + label.hidden = false; + list.hidden = true; + } + }); +}); + +function renderFileList(files) { + let fileMap = files.map((file, index) => { + let suffix = "bytes"; + let size = file.size; + if (size >= 1024 && size < 1024000) { + suffix = "KB"; + size = Math.round(size / 1024 * 100) / 100; + } else if (size >= 1024000) { + suffix = "MB"; + size = Math.round(size / 1024000 * 100) / 100; + } + + return `
  • ${ + file.name + } ${size} ${suffix}
  • `; + }); + $("ul").html(fileMap); +} +// prevent delete link to redirect to GET process/:id +$('delete_link').click((event) => { + event.stopPropagation() +}) \ No newline at end of file diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css index d05ea0f5..43a85506 100644 --- a/app/assets/stylesheets/application.css +++ b/app/assets/stylesheets/application.css @@ -12,4 +12,6 @@ * *= require_tree . *= require_self + *= require font-awesome */ +@import "materialize"; diff --git a/app/assets/stylesheets/process.scss b/app/assets/stylesheets/process.scss new file mode 100644 index 00000000..226b4212 --- /dev/null +++ b/app/assets/stylesheets/process.scss @@ -0,0 +1,83 @@ +// Place all the styles related to the process controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ + +#creation_form { + max-width: 60%; +} + +.delete_link { + color: grey; +} + +.input_file { + position: relative; + display: block; + width: 100%; + font-size: 80%; + text-align: center; + text-transform: uppercase; + border: 2px dashed #ccc; + margin: 3rem 0; + padding: 1rem 1rem; +} + +.input_file:hover { + background-color: rgba(238,238,238, 0.3); +} + +.input_file:active, +.input_file.focus { + border-color: #09f; +} + +input[type=file] { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + opacity: 0; + outline: 0; + border: 1px solid red; +} + +.label_hidden { + display: none; +} + +ul{ + text-align: left; + list-style:none; + padding:0; + max-height:150px; + overflow:auto; + li{ + padding:0.5rem 0; + padding-right:2rem; + position:relative; + i{ + cursor:pointer; + position:absolute; + top:50%; + right:0; + transform:translatey(-50%); + } + } +} + +.process-list-root { + max-width: 80%; + margin: 3rem auto; +} + +.process-show-root { + max-width: 60%; + margin-left: auto; + margin-right: auto; +} + +.filter-button { + max-height: 23px; + font-size: 15px; +} \ No newline at end of file diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 457cc5f9..0067053a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,11 +1,16 @@ # frozen_string_literal: true - class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? + extend ActiveSupport::Concern + rescue_from ActionController::ParameterMissing do |exception| + render json: { error: exception.message }, status: :bad_request, layout: false + end protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: %i[full_name role]) end + + end diff --git a/app/controllers/process_controller.rb b/app/controllers/process_controller.rb new file mode 100644 index 00000000..90e2a9e9 --- /dev/null +++ b/app/controllers/process_controller.rb @@ -0,0 +1,182 @@ +## +# ProcessController class implements all methods for interacting with process +# asset +# +class ProcessController < ApplicationController + before_action :require_login + ## + # reload_processes reloads @process variable for a user requesting a Process page + # + # this methods changes instance var @process + # + # @param user: devise logged user + # + # @return [Processo] + def reload_processes(user) + @processes = [] + unless user.nil? + user_processes = user.processos + processes_query = user_processes.nil? ? [] : user_processes; + processes_query.each do |process| + @processes.append(process.attributes) + end + end + @processes + end + + + ## + # attach adds new files to a requested process + # + # @return nothing changes instance + def attach + permitted_params = params.require(:processo).permit(:id, :document_files => []) + docs = permitted_params[:document_files] + @process = current_user.processos.find(params[:id]) + docs.each do |doc| + doc_model = {"processo_id": @process[:id], "data" => doc.read, "filename": doc.original_filename, "mime_type": doc.content_type} + @process.documents.create(doc_model) + end + @process.save + redirect_to process_show_path @process + end + + ## + # load_status load @available_status and @status for view to access it + # + # @return + def load_status + reset_status + ProcessStatus.find_each do |status| + id, label = status.id, status.label + @available_status.append([label, id]) + @status[id] = label + end + end + + ## + # load_filters returns filters that a user can apply to filter_status + # + # @returns [[String, Int]] + def load_filters + load_status + @filters = @available_status.map do |item| + item + end + @filters.append(['Todos', -1]) + end + + ## + # filter_processes selects processes with requested status_id only + # + # @param filter_status: Int + # + # @return + def filter_processes(filter_status) + reload_processes(current_user) + @current_filter = filter_status + if @current_filter != -1 + @processes = @processes.select do |process| + process['process_status_id'] == filter_status + end + end + end + + ## + # index renders the process index page and returns filtered processes + # + # it can be GET with ?filter_by=status_id + # @return [Processo] + def index + load_status + load_filters + + reload_processes(current_user) + filter_by = params['filter_by'] + filter_status = filter_by.nil? ? -1 : filter_by.to_i + filter_processes(filter_status) + end + + ## + # search filters processes by a status_id passed as parameter in the form {filter_by: {filter_status: Int}} + # + # redirects to home with filtered table rendered + def search + permitted_params = params.require(:filter_by).permit(:filter_status) + filter_status = permitted_params['filter_status'] + filter_processes(filter_status) + redirect_to process_home_path(:filter_by => filter_status) + end + + ## + # show a process with an id as url parameter + # + # changes instance @process to requested process + # + # @return + def show + load_status + permitted_params = params.permit(:id) + @process = current_user.processos.find(permitted_params[:id]) + end + + ## + # create will create a new entry on db for an user + # + # redirects to home with new created process attached to table on process index + def create + permitted_params = params.require(:processo).permit(:sei_process_code, :process_status_id, :document_files => []) + @process = current_user.processos.create({"sei_process_code": permitted_params["sei_process_code"], "process_status_id": permitted_params["process_status_id"]}) + @process.save + docs = permitted_params["document_files"] + unless docs.nil? + docs.each do |doc| + doc_model = {"processo_id": @process[:id], "data" => doc.read, "filename": doc.original_filename, "mime_type": doc.content_type} + @process.documents.create(doc_model) + end + end + reload_processes(current_user) + puts(@process) + redirect_to process_home_path + end + + ## + # serve returns a document attached to a process + # + # returns a data url to enable user to download it + def serve + permitted_params = params.permit(:id, :doc_id) + @doc = current_user.processos.find(permitted_params['id']).documents.find(permitted_params["doc_id"]) + send_data(@doc.data, :type => @doc.mime_type, :filename => @doc.filename, :disposition => "inline") + end + + ## + # destroy removes an process with an id={id} from a user's process + # it changes database + def destroy + permitted_params = params.permit(:id) + current_user.processos.destroy(permitted_params[:id]) + reload_processes(current_user) + redirect_to process_home_path + end + + + private + ## + # require_login redirects to homepage everytime a guest user tries to request /process + # + def require_login + unless current_user + redirect_to root_url + end + end + + ## + # reset_status resets instance variables relative to process_status + # + # @return nothing, changes instance + def reset_status + @available_status = [] + @status = {} + end +end diff --git a/app/controllers/processstatus_controller.rb b/app/controllers/processstatus_controller.rb new file mode 100644 index 00000000..7d33345d --- /dev/null +++ b/app/controllers/processstatus_controller.rb @@ -0,0 +1,55 @@ +class ProcessStatusController < ApplicationController + def reload_processesstatuses(user) + @processesstatuses = [] + processesstatuses_query = user.processosstatuses + unless processesstatuses_query.nil? + processesstatuses_query.each do |processstatus| + @processesstatuses.append(processstatus.attributes) + end + end + @processesstatuses + end + + def load_status + @available_status = [] + @status = {} + ProcessStatus.find_each do |status| + @available_status.append([status.label, status.id]) + @status[status.id] = status.label + end + end + + def show + if user_signed_in? + load_status + permitted_params = params.permit(:id) + @processstatus = current_user.processosstatus.find(permitted_params[:id]) + end + end + + def create + if user_signed_in? + user = current_user + permitted_params = params.require(:processostatus).permit(:name, :label) + processstatus = user.processosstatus.create({"name": permitted_params["name"],"label": permitted_params["label"]}) + processstatus.save + reload_processesstatuses(user) + redirect_to processstatus_home_path + else + redirect_to home_path + end + end + + def destroy + if user_signed_in? + user = current_user + permitted_params = params.permit(:id) + user.processosstatus.destroy(permitted_params[:id]) + reload_processesstatuses(user) + redirect_to processstatus_home_path + else + redirect_to home_path + end + + end +end \ No newline at end of file diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index de6be794..1527a569 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,2 +1,3 @@ module ApplicationHelper + include FontAwesome::Rails::IconHelper end diff --git a/app/helpers/process_helper.rb b/app/helpers/process_helper.rb new file mode 100644 index 00000000..96167865 --- /dev/null +++ b/app/helpers/process_helper.rb @@ -0,0 +1,2 @@ +module ProcessHelper +end diff --git a/app/models/activity_type.rb b/app/models/activity_type.rb new file mode 100644 index 00000000..2df72c0f --- /dev/null +++ b/app/models/activity_type.rb @@ -0,0 +1,2 @@ +class ActivityType < ApplicationRecord +end \ No newline at end of file diff --git a/app/models/document.rb b/app/models/document.rb new file mode 100644 index 00000000..c6fdadc8 --- /dev/null +++ b/app/models/document.rb @@ -0,0 +1,3 @@ +class Document < ApplicationRecord + belongs_to :processo +end diff --git a/app/models/information.rb b/app/models/information.rb new file mode 100644 index 00000000..8c5c4807 --- /dev/null +++ b/app/models/information.rb @@ -0,0 +1,4 @@ +class Information < ApplicationRecord + belongs_to :user + has_one :source +end diff --git a/app/models/notification_content.rb b/app/models/notification_content.rb new file mode 100644 index 00000000..5eed23d8 --- /dev/null +++ b/app/models/notification_content.rb @@ -0,0 +1,3 @@ +class NotificationContent < ApplicationRecord + belongs_to :user_notification +end diff --git a/app/models/process_status.rb b/app/models/process_status.rb new file mode 100644 index 00000000..2f66b0ab --- /dev/null +++ b/app/models/process_status.rb @@ -0,0 +1,6 @@ +class ProcessStatus < ApplicationRecord + validates :name, presence: true, allow_blank: false + validates :label, presence: true, allow_blank: false + + validates_uniqueness_of :name, message: "You can only have one status with that name" +end \ No newline at end of file diff --git a/app/models/processo.rb b/app/models/processo.rb new file mode 100644 index 00000000..cd542254 --- /dev/null +++ b/app/models/processo.rb @@ -0,0 +1,7 @@ +class Processo < ApplicationRecord + belongs_to :user + has_many :documents + + validates :sei_process_code, presence: true, allow_blank: false + validates_uniqueness_of :sei_process_code, message: "You can only have one process with that status" +end \ No newline at end of file diff --git a/app/models/question.rb b/app/models/question.rb new file mode 100644 index 00000000..83ac1408 --- /dev/null +++ b/app/models/question.rb @@ -0,0 +1,3 @@ +class Question < ApplicationRecord + has_one :question_topic +end diff --git a/app/models/question_topic.rb b/app/models/question_topic.rb new file mode 100644 index 00000000..acd4c8be --- /dev/null +++ b/app/models/question_topic.rb @@ -0,0 +1,2 @@ +class QuestionTopic < ApplicationRecord +end \ No newline at end of file diff --git a/app/models/request.rb b/app/models/request.rb new file mode 100644 index 00000000..3acb5316 --- /dev/null +++ b/app/models/request.rb @@ -0,0 +1,4 @@ +class Request < ApplicationRecord + has_one :request_type + belongs_to :user +end diff --git a/app/models/request_type.rb b/app/models/request_type.rb new file mode 100644 index 00000000..468e5bc0 --- /dev/null +++ b/app/models/request_type.rb @@ -0,0 +1,3 @@ +class RequestType < ApplicationRecord + has_many :requests +end diff --git a/app/models/source.rb b/app/models/source.rb new file mode 100644 index 00000000..c5aa40ee --- /dev/null +++ b/app/models/source.rb @@ -0,0 +1,3 @@ +class Source < ApplicationRecord + belongs_to :information +end diff --git a/app/models/user.rb b/app/models/user.rb index d2686709..1dc3c8d7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -10,4 +10,9 @@ class User < ApplicationRecord :recoverable, :rememberable, :validatable enum role: %i[administrator secretary professor student] + + has_many :information + has_many :user_notifications + has_many :requests + has_many :processos end diff --git a/app/models/user_notification.rb b/app/models/user_notification.rb new file mode 100644 index 00000000..44b79b26 --- /dev/null +++ b/app/models/user_notification.rb @@ -0,0 +1,3 @@ +class UserNotification < ApplicationRecord + belongs_to :user +end diff --git a/app/models/wiki_entry.rb b/app/models/wiki_entry.rb new file mode 100644 index 00000000..c5076026 --- /dev/null +++ b/app/models/wiki_entry.rb @@ -0,0 +1,2 @@ +class WikiEntry < ApplicationRecord +end \ No newline at end of file diff --git a/app/models/wiki_entry_comment.rb b/app/models/wiki_entry_comment.rb new file mode 100644 index 00000000..c6b9cb47 --- /dev/null +++ b/app/models/wiki_entry_comment.rb @@ -0,0 +1,2 @@ +class WikiEntryComment < ApplicationRecord +end \ No newline at end of file diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index 33ba387d..0a145900 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -6,6 +6,8 @@

    Nome: <%= current_user.full_name %>

    Email: <%= current_user.email %>

    Cargo: <%= current_user.role %>

    + <%= link_to "Acompanhamento de processos", process_home_path, method: :get %> +
    <%= link_to "Sair", destroy_user_session_path, method: :delete %> <% else %>

    Entre para acessar o sistema!

    diff --git a/app/views/process/index.html.erb b/app/views/process/index.html.erb new file mode 100644 index 00000000..e1b436f7 --- /dev/null +++ b/app/views/process/index.html.erb @@ -0,0 +1,60 @@ +<%= stylesheet_link_tag "process" %> +<%= javascript_include_tag "process" %> +
    +
    Lista de Processos
    +
    Criar um novo processo
    + <%= form_for :processo, url: process_creation_path ,html: {id: "creation_form", :multipart => true} do |f| %> +
    + <%= f.label "Número do processo SEI" %> + <%= f.text_field :sei_process_code %> +
    +
    + <%= label_tag(:status_id, "Status do processo") %> + <%= f.select(:process_status_id, options_for_select(@available_status, 1)) %> +
    +
    +
    + <%= label_tag 'file_field', 'Drop a file or click to select one', :id => 'file_label' %> + + <%= f.file_field :document_files, multiple: true, accept: 'image/png,image/jpg,application/pdf', :id => "file_input" %> +
    +
    + <%= submit_tag("Enviar") %> +
    +
    + <% end %> +
    + Filtrar por status +
    + <%= form_tag process_search_path, method: :get %> + <%= label_tag :filter_by, "Filtrar por Status" %> + <%= select 'filter_by', :filter_status, options_for_select(@filters, @current_filter) %> +
    + <%= submit_tag("Search") %> +
    +
    +
    + + + + + + + + + + + <% @processes.each do |process| %> + + + + + + +
    Número SEI + Status do processo + Deletar
    <%= link_to process['sei_process_code'], process_show_path({:id => process['id']}) %><%= @status[process['process_status_id']] %> + <%= link_to fa_icon('trash').html_safe, process_delete_path({:id => process['id']}), :method => :delete, :action => "delete", :id => process['id'], class: "delete_link" %> + <% end %> +
    +
    diff --git a/app/views/process/show.html.erb b/app/views/process/show.html.erb new file mode 100644 index 00000000..4cb0900f --- /dev/null +++ b/app/views/process/show.html.erb @@ -0,0 +1,50 @@ +<%= stylesheet_link_tag "process" %> +<%= javascript_include_tag "process" %> + +
    +

    Processo Nº: <%= @process.sei_process_code %>

    +
    + Status do processo: <%= @status[@process.process_status_id] %> +
    +
    + <%= form_for :processo, url: process_attach_path(@process), html: {:multipart => true} do |f| %> + +
    + <%= label_tag 'file_field', 'Drop a file or click to select one', :id => 'file_label' %> + + <%= f.file_field :document_files, multiple: true, accept: 'image/png,image/jpg,application/pdf', :id => "file_input" %> +
    +
    + <%= f.submit("Anexar") %> +
    + <% end %> +
    + + + + + + + <% @process.documents.each do |document| %> + + + + + <% end %> + +
    + Nome do arquivo + + Download +
    + <%= document.filename %> + + <%= link_to fa_icon('download').html_safe, + process_download_path({:id => @process['id'], :doc_id => document['id']}), + download: process_download_path({:id => @process['id'], :doc_id => document['id']}), + target: '_blank', + style: "margin-left: 10%" + %> +
    + +
    \ No newline at end of file diff --git a/bin/update b/bin/update index 58bfaed5..b3504842 100755 --- a/bin/update +++ b/bin/update @@ -10,7 +10,7 @@ def system!(*args) end chdir APP_ROOT do - # This script is a way to update your development environment automatically. + # This script is a way to update your development environments automatically. # Add necessary update steps to this file. puts '== Installing dependencies ==' diff --git a/config/database.yml b/config/database.yml index bbc24623..99917297 100644 --- a/config/database.yml +++ b/config/database.yml @@ -17,14 +17,17 @@ default: &default adapter: postgresql encoding: unicode + host: secretaria_ppgi_db # For details on connection pooling, see Rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + username: test_user + password: test_pwd development: <<: *default database: secretaria_ppgi_development - + # The specified database role being used to connect to postgres. # To create additional roles in postgres see `$ createuser --help`. # When left blank, postgres will use the default role. This is @@ -58,18 +61,18 @@ development: test: <<: *default database: secretaria_ppgi_test - + # As with config/secrets.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is # ever seen by anyone, they now have access to your database. # -# Instead, provide the password as a unix environment variable when you boot +# Instead, provide the password as a unix environments variable when you boot # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database -# for a full rundown on how to provide these environment variables in a +# for a full rundown on how to provide these environments variables in a # production deployment. # # On Heroku and other platform providers, you may have a full connection URL -# available as an environment variable. For example: +# available as an environments variable. For example: # # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" # diff --git a/config/environments/development.rb b/config/environments/development.rb index 586a2096..1fd5476a 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,7 +1,7 @@ Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. - # In the development environment your application's code is reloaded on + # In the development environments your application's code is reloaded on # every request. This slows down response time but is perfect for development # since you don't have to restart the web server when you make code changes. config.cache_classes = false @@ -60,4 +60,5 @@ # Use an evented file watcher to asynchronously detect changes in source code, # routes, locales, etc. This feature depends on the listen gem. config.file_watcher = ActiveSupport::EventedFileUpdateChecker + config.assets.compress = false end diff --git a/config/environments/production.rb b/config/environments/production.rb index 99391eec..394ae910 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -61,7 +61,7 @@ # Use a different cache store in production. # config.cache_store = :mem_cache_store - # Use a real queuing backend for Active Job (and separate queues per environment) + # Use a real queuing backend for Active Job (and separate queues per environments) # config.active_job.queue_adapter = :resque # config.active_job.queue_name_prefix = "secretaria_ppgi_#{Rails.env}" diff --git a/config/environments/test.rb b/config/environments/test.rb index 0a38fd3c..92dad85c 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,7 +1,7 @@ Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. - # The test environment is used exclusively to run your application's + # The test environments is used exclusively to run your application's # test suite. You never need to work with it otherwise. Remember that # your test database is "scratch space" for the test suite and is wiped # and recreated between test runs. Don't rely on the data there! @@ -25,7 +25,7 @@ # Raise exceptions instead of rendering exception templates. config.action_dispatch.show_exceptions = false - # Disable request forgery protection in test environment. + # Disable request forgery protection in test environments. config.action_controller.allow_forgery_protection = false # Store uploaded files on the local file system in a temporary directory diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 4b828e80..5e4347bb 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -12,3 +12,4 @@ # application.js, application.css, and all non-JS/CSS in the app/assets # folder are already added. # Rails.application.config.assets.precompile += %w( admin.js admin.css ) +Rails.application.config.assets.precompile += %w( process.scss process.js ) diff --git a/config/puma.rb b/config/puma.rb index a5eccf81..fc886f0d 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -11,7 +11,7 @@ # port ENV.fetch("PORT") { 3000 } -# Specifies the `environment` that Puma will run in. +# Specifies the `environments` that Puma will run in. # environment ENV.fetch("RAILS_ENV") { "development" } diff --git a/config/routes.rb b/config/routes.rb index f33f7f68..4e9de97b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,7 +1,20 @@ # frozen_string_literal: true Rails.application.routes.draw do - get 'home/index' + + get 'process/:id', to: 'process#show', as: :process_show + get 'process', to: 'process#index', as: :process_home + post 'process', to: 'process#create', as: :process_creation + delete 'process/:id', to: 'process#destroy', as: :process_delete + get 'search', to: 'process#search', as: :process_search + get 'process/:id/:doc_id', to: 'process#serve', as: :process_download + post 'process/:id', to: 'process#attach', as: :process_attach + + get 'processstatus/:id', to: 'processstatus#show', as: :processstatus_show + post 'processstatus', to: 'processstatus#create', as: :processstatus_creation + delete 'processstatus/:id', to: 'processstatus#destroy', as: :processstatus_delete + + get 'home/index', :home devise_for :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html root to: 'home#index' diff --git a/config/spring.rb b/config/spring.rb index 9fa7863f..0195bbba 100644 --- a/config/spring.rb +++ b/config/spring.rb @@ -4,3 +4,11 @@ tmp/restart.txt tmp/caching-dev.txt ].each { |path| Spring.watch(path) } +Spring.after_fork do + if ENV['DEBUGGER_STORED_RUBYLIB'] + ENV['DEBUGGER_STORED_RUBYLIB'].split(File::PATH_SEPARATOR).each do |path| + next unless path =~ /ruby-debug-ide/ + load path + '/ruby-debug-ide/multiprocess/starter.rb' + end + end +end \ No newline at end of file diff --git a/coverage/.last_run.json b/coverage/.last_run.json new file mode 100644 index 00000000..048216c6 --- /dev/null +++ b/coverage/.last_run.json @@ -0,0 +1,5 @@ +{ + "result": { + "covered_percent": 96.05 + } +} diff --git a/coverage/.resultset.json b/coverage/.resultset.json new file mode 100644 index 00000000..a79f5e9f --- /dev/null +++ b/coverage/.resultset.json @@ -0,0 +1,1114 @@ +{ + "RSpec": { + "coverage": { + "/secretaria/spec/controllers/home_controller_spec.rb": { + "lines": [ + 1, + null, + 1, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + null + ] + }, + "/secretaria/spec/rails_helper.rb": { + "lines": [ + null, + 1, + 1, + null, + 1, + null, + null, + 1, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + 0, + 0, + null, + 1, + null, + 1, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + 1, + 1, + null, + null, + null, + 1, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + null, + 1, + 1, + 1, + 1, + 1, + null + ] + }, + "/secretaria/config/environment.rb": { + "lines": [ + null, + 1, + null, + null, + 1 + ] + }, + "/secretaria/config/application.rb": { + "lines": [ + 1, + null, + 1, + null, + null, + null, + 1, + null, + 1, + 1, + null, + 1, + null, + null, + null, + null, + null, + null, + null + ] + }, + "/secretaria/config/boot.rb": { + "lines": [ + 1, + null, + 1, + 1 + ] + }, + "/secretaria/config/environments/test.rb": { + "lines": [ + 1, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + null, + null, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + null, + null, + 1, + null, + null, + 1, + null, + null, + 1, + null, + 1, + null, + null, + null, + null, + 1, + null, + null, + 1, + null, + null, + null, + null + ] + }, + "/secretaria/config/initializers/application_controller_renderer.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + null, + null + ] + }, + "/secretaria/config/initializers/assets.rb": { + "lines": [ + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + 1 + ] + }, + "/secretaria/config/initializers/backtrace_silencers.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + null + ] + }, + "/secretaria/config/initializers/content_security_policy.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + }, + "/secretaria/config/initializers/cookies_serializer.rb": { + "lines": [ + null, + null, + null, + null, + 1 + ] + }, + "/secretaria/config/initializers/devise.rb": { + "lines": [ + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + }, + "/secretaria/config/initializers/filter_parameter_logging.rb": { + "lines": [ + null, + null, + null, + 1 + ] + }, + "/secretaria/config/initializers/inflections.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null + ] + }, + "/secretaria/config/initializers/mime_types.rb": { + "lines": [ + null, + null, + null, + null + ] + }, + "/secretaria/config/initializers/wrap_parameters.rb": { + "lines": [ + null, + null, + null, + null, + null, + null, + 1, + 2, + null, + null, + null, + null, + null, + null + ] + }, + "/secretaria/config/routes.rb": { + "lines": [ + null, + null, + 1, + null, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + null, + 1, + 1, + 1, + null, + 1, + 1, + null, + 1, + null + ] + }, + "/secretaria/app/models/user.rb": { + "lines": [ + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + null, + null, + 1, + null, + 1, + 1, + 1, + 1, + null + ] + }, + "/secretaria/app/models/application_record.rb": { + "lines": [ + 1, + 1, + null + ] + }, + "/secretaria/app/helpers/application_helper.rb": { + "lines": [ + 1, + 1, + null + ] + }, + "/secretaria/app/helpers/home_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/secretaria/app/helpers/process_helper.rb": { + "lines": [ + 1, + null + ] + }, + "/secretaria/app/controllers/home_controller.rb": { + "lines": [ + 1, + 1, + null, + null + ] + }, + "/secretaria/app/controllers/application_controller.rb": { + "lines": [ + null, + 1, + 1, + 1, + 1, + 0, + null, + null, + 1, + null, + 1, + 0, + null, + null, + null, + null + ] + }, + "/secretaria/spec/controllers/process_controller_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + 8, + 8, + 8, + 0, + null, + 8, + null, + null, + 1, + 8, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 2, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + 1, + 1, + null, + null + ] + }, + "/secretaria/app/controllers/process_controller.rb": { + "lines": [ + null, + null, + null, + null, + 1, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 7, + 7, + 7, + 7, + 7, + 11, + null, + null, + 7, + null, + null, + null, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + null, + 1, + 1, + null, + null, + null, + null, + null, + null, + 1, + 5, + 5, + 5, + 5, + 5, + null, + null, + null, + null, + null, + null, + null, + 1, + 2, + 2, + 2, + null, + 2, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 3, + 3, + 3, + 1, + 2, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 2, + 2, + null, + 2, + 2, + 2, + 2, + null, + null, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + null, + null, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + null, + null, + 1, + 1, + 1, + null, + null, + null, + null, + null, + null, + 1, + 0, + 0, + 0, + null, + null, + null, + null, + null, + 1, + 1, + 1, + 1, + 1, + null, + null, + null, + 1, + null, + null, + null, + 1, + 8, + 1, + null, + null, + null, + null, + null, + null, + null, + 1, + 5, + 5, + null, + null + ] + }, + "/secretaria/spec/helpers/home_helper_spec.rb": { + "lines": [ + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 1, + null + ] + }, + "/secretaria/spec/helpers/process_helper_spec.rb": { + "lines": [ + 1, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1, + 1, + null + ] + }, + "/secretaria/spec/models/process_status_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + 3, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + null, + null, + 1, + 1, + 1, + 1, + null, + null + ] + }, + "/secretaria/app/models/process_status.rb": { + "lines": [ + 1, + 1, + 1, + null, + 1, + null + ] + }, + "/secretaria/spec/views/home/index.html.erb_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + null + ] + }, + "/secretaria/spec/views/process/index.html.erb_spec.rb": { + "lines": [ + 1, + null, + 1, + 1, + null + ] + }, + "/secretaria/app/models/processo.rb": { + "lines": [ + 1, + 1, + 1, + null, + 1, + 1, + null + ] + }, + "/secretaria/app/models/document.rb": { + "lines": [ + 1, + 1, + null + ] + } + }, + "timestamp": 1607137300 + } +} diff --git a/coverage/.resultset.json.lock b/coverage/.resultset.json.lock new file mode 100644 index 00000000..e69de29b diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png new file mode 100644 index 00000000..e1ba61a8 Binary files /dev/null and b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png differ diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png new file mode 100644 index 00000000..fb11dfe2 Binary files /dev/null and b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png differ diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png new file mode 100644 index 00000000..af5bc7c5 Binary files /dev/null and b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png differ diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png new file mode 100644 index 00000000..0e156deb Binary files /dev/null and b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png differ diff --git a/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png new file mode 100644 index 00000000..c9fdd8a1 Binary files /dev/null and b/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png differ diff --git a/coverage/assets/0.12.3/application.css b/coverage/assets/0.12.3/application.css new file mode 100644 index 00000000..916699ed --- /dev/null +++ b/coverage/assets/0.12.3/application.css @@ -0,0 +1 @@ +html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,code,del,dfn,em,img,q,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,dialog,figure,footer,header,hgroup,nav,section{margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline}article,aside,dialog,figure,footer,header,hgroup,nav,section{display:block}body{line-height:1.5}table{border-collapse:separate;border-spacing:0}caption,th,td{text-align:left;font-weight:normal}table,td,th{vertical-align:middle}blockquote:before,blockquote:after,q:before,q:after{content:""}blockquote,q{quotes:"" ""}a img{border:0}html{font-size:100.01%}body{font-size:82%;color:#222;background:#fff;font-family:"Helvetica Neue",Arial,Helvetica,sans-serif}h1,h2,h3,h4,h5,h6{font-weight:normal;color:#111}h1{font-size:3em;line-height:1;margin-bottom:.5em}h2{font-size:2em;margin-bottom:.75em}h3{font-size:1.5em;line-height:1;margin-bottom:1em}h4{font-size:1.2em;line-height:1.25;margin-bottom:1.25em}h5{font-size:1em;font-weight:bold;margin-bottom:1.5em}h6{font-size:1em;font-weight:bold}h1 img,h2 img,h3 img,h4 img,h5 img,h6 img{margin:0}p{margin:0 0 1.5em}p img.left{float:left;margin:1.5em 1.5em 1.5em 0;padding:0}p img.right{float:right;margin:1.5em 0 1.5em 1.5em}a:focus,a:hover{color:#000}a{color:#009;text-decoration:underline}blockquote{margin:1.5em;color:#666;font-style:italic}strong{font-weight:bold}em,dfn{font-style:italic}dfn{font-weight:bold}sup,sub{line-height:0}abbr,acronym{border-bottom:1px dotted #666}address{margin:0 0 1.5em;font-style:italic}del{color:#666}pre{margin:1.5em 0;white-space:pre}pre,code,tt{font:1em 'andale mono','lucida console',monospace;line-height:1.5}li ul,li ol{margin:0}ul,ol{margin:0 1.5em 1.5em 0;padding-left:3.333em}ul{list-style-type:disc}ol{list-style-type:decimal}dl{margin:0 0 1.5em 0}dl dt{font-weight:bold}dd{margin-left:1.5em}table{margin-bottom:1.4em;width:100%}th{font-weight:bold}thead th{background:#c3d9ff}th,td,caption{padding:4px 10px 4px 5px}tr.even td{background:#efefef}tfoot{font-style:italic}caption{background:#eee}.small{font-size:.8em;margin-bottom:1.875em;line-height:1.875em}.large{font-size:1.2em;line-height:2.5em;margin-bottom:1.25em}.hide{display:none}.quiet{color:#666}.loud{color:#000}.highlight{background:#ff0}.added{background:#060;color:#fff}.removed{background:#900;color:#fff}.first{margin-left:0;padding-left:0}.last{margin-right:0;padding-right:0}.top{margin-top:0;padding-top:0}.bottom{margin-bottom:0;padding-bottom:0}label{font-weight:bold}fieldset{padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc}legend{font-weight:bold;font-size:1.2em}input[type=text],input[type=password],input.text,input.title,textarea,select{background-color:#fff;border:1px solid #bbb}input[type=text]:focus,input[type=password]:focus,input.text:focus,input.title:focus,textarea:focus,select:focus{border-color:#666}input[type=text],input[type=password],input.text,input.title,textarea,select{margin:.5em 0}input.text,input.title{width:300px;padding:5px}input.title{font-size:1.5em}textarea{width:390px;height:250px;padding:5px}input[type=checkbox],input[type=radio],input.checkbox,input.radio{position:relative;top:.25em}form.inline{line-height:3}form.inline p{margin-bottom:0}.error,.notice,.success{padding:.8em;margin-bottom:1em;border:2px solid #ddd}.error{background:#fbe3e4;color:#8a1f11;border-color:#fbc2c4}.notice{background:#fff6bf;color:#514721;border-color:#ffd324}.success{background:#e6efc2;color:#264409;border-color:#c6d880}.error a{color:#8a1f11}.notice a{color:#514721}.success a{color:#264409}.box{padding:1.5em;margin-bottom:1.5em;background:#e5ecf9}hr{background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:0}hr.space{background:#fff;color:#fff;visibility:hidden}.clearfix:after,.container:after{content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden}.clearfix,.container{display:block}.clear{clear:both}table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:0}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("DataTables-1.10.20/images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("DataTables-1.10.20/images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("DataTables-1.10.20/images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("DataTables-1.10.20/images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("DataTables-1.10.20/images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:0}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:0}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,white),color-stop(100%,#dcdcdc));background:-webkit-linear-gradient(top,white 0,#dcdcdc 100%);background:-moz-linear-gradient(top,white 0,#dcdcdc 100%);background:-ms-linear-gradient(top,white 0,#dcdcdc 100%);background:-o-linear-gradient(top,white 0,#dcdcdc 100%);background:linear-gradient(to bottom,white 0,#dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#585858),color-stop(100%,#111));background:-webkit-linear-gradient(top,#585858 0,#111 100%);background:-moz-linear-gradient(top,#585858 0,#111 100%);background:-ms-linear-gradient(top,#585858 0,#111 100%);background:-o-linear-gradient(top,#585858 0,#111 100%);background:linear-gradient(to bottom,#585858 0,#111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:0;background-color:#2b2b2b;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#2b2b2b),color-stop(100%,#0c0c0c));background:-webkit-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-moz-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-ms-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-o-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:linear-gradient(to bottom,#2b2b2b 0,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,0.9)),color-stop(75%,rgba(255,255,255,0.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:0}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}pre .comment,pre .template_comment,pre .diff .header,pre .javadoc{color:#998;font-style:italic}pre .keyword,pre .css .rule .keyword,pre .winutils,pre .javascript .title,pre .lisp .title{color:#000;font-weight:bold}pre .number,pre .hexcolor{color:#458}pre .string,pre .tag .value,pre .phpdoc,pre .tex .formula{color:#d14}pre .subst{color:#712}pre .constant,pre .title,pre .id{color:#900;font-weight:bold}pre .javascript .title,pre .lisp .title,pre .subst{font-weight:normal}pre .class .title,pre .haskell .label,pre .tex .command{color:#458;font-weight:bold}pre .tag,pre .tag .title,pre .rules .property,pre .django .tag .keyword{color:navy;font-weight:normal}pre .attribute,pre .variable,pre .instancevar,pre .lisp .body{color:teal}pre .regexp{color:#009926}pre .class{color:#458;font-weight:bold}pre .symbol,pre .ruby .symbol .string,pre .ruby .symbol .keyword,pre .ruby .symbol .keymethods,pre .lisp .keyword,pre .tex .special,pre .input_number{color:#990073}pre .builtin,pre .built_in,pre .lisp .title{color:#0086b3}pre .preprocessor,pre .pi,pre .doctype,pre .shebang,pre .cdata{color:#999;font-weight:bold}pre .deletion{background:#fdd}pre .addition{background:#dfd}pre .diff .change{background:#0086b3}pre .chunk{color:#aaa}pre .tex .formula{opacity:.5}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute;left:-99999999px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:inline-block}/*\*/* html .ui-helper-clearfix{height:1%}.ui-helper-clearfix{display:block}/**/.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default !important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget :active{outline:0}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-bottom{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-right{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-corner-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all{-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.30;filter:Alpha(Opacity=30);-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}#colorbox,#cboxOverlay,#cboxWrapper{position:absolute;top:0;left:0;z-index:9999;overflow:hidden}#cboxOverlay{position:fixed;width:100%;height:100%}#cboxMiddleLeft,#cboxBottomLeft{clear:left}#cboxContent{position:relative}#cboxLoadedContent{overflow:auto}#cboxTitle{margin:0}#cboxLoadingOverlay,#cboxLoadingGraphic{position:absolute;top:0;left:0;width:100%;height:100%}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{cursor:pointer}.cboxPhoto{float:left;margin:auto;border:0;display:block;max-width:none}.cboxIframe{width:100%;height:100%;display:block;border:0}#colorbox,#cboxContent,#cboxLoadedContent{box-sizing:content-box}#cboxOverlay{background:#000}#cboxTopLeft{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat 0 0}#cboxTopCenter{height:14px;background:url(colorbox/border.png) repeat-x top left}#cboxTopRight{width:14px;height:14px;background:url(colorbox/controls.png) no-repeat -36px 0}#cboxBottomLeft{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat 0 -32px}#cboxBottomCenter{height:43px;background:url(colorbox/border.png) repeat-x bottom left}#cboxBottomRight{width:14px;height:43px;background:url(colorbox/controls.png) no-repeat -36px -32px}#cboxMiddleLeft{width:14px;background:url(colorbox/controls.png) repeat-y -175px 0}#cboxMiddleRight{width:14px;background:url(colorbox/controls.png) repeat-y -211px 0}#cboxContent{background:#fff;overflow:visible}.cboxIframe{background:#fff}#cboxError{padding:50px;border:1px solid #ccc}#cboxLoadedContent{margin-bottom:5px}#cboxLoadingOverlay{background:url(colorbox/loading_background.png) no-repeat center center}#cboxLoadingGraphic{background:url(colorbox/loading.gif) no-repeat center center}#cboxTitle{position:absolute;bottom:-25px;left:0;text-align:center;width:100%;font-weight:bold;color:#7c7c7c}#cboxCurrent{position:absolute;bottom:-25px;left:58px;font-weight:bold;color:#7c7c7c}#cboxPrevious,#cboxNext,#cboxClose,#cboxSlideshow{position:absolute;bottom:-29px;background:url(colorbox/controls.png) no-repeat 0 0;width:23px;height:23px;text-indent:-9999px}#cboxPrevious{left:0;background-position:-51px -25px}#cboxPrevious:hover{background-position:-51px 0}#cboxNext{left:27px;background-position:-75px -25px}#cboxNext:hover{background-position:-75px 0}#cboxClose{right:0;background-position:-100px -25px}#cboxClose:hover{background-position:-100px 0}.cboxSlideshow_on #cboxSlideshow{background-position:-125px 0;right:27px}.cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0}.cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px;right:27px}.cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0}#loading{position:fixed;left:40%;top:50%}a{color:#333;text-decoration:none}a:hover{color:#000;text-decoration:underline}body{font-family:"Lucida Grande",Helvetica,"Helvetica Neue",Arial,sans-serif;padding:12px;background-color:#333}h1,h2,h3,h4{color:#1c2324;margin:0;padding:0;margin-bottom:12px}table{width:100%}#content{clear:left;background-color:white;border:2px solid #ddd;border-top:8px solid #ddd;padding:18px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;-webkit-border-top-right-radius:5px;-moz-border-radius-bottomleft:5px;-moz-border-radius-bottomright:5px;-moz-border-radius-topright:5px;border-bottom-left-radius:5px;border-bottom-right-radius:5px;border-top-right-radius:5px}.dataTables_filter,.dataTables_info{padding:2px 6px}abbr.timeago{text-decoration:none;border:0;font-weight:bold}.timestamp{float:right;color:#ddd}.group_tabs{list-style:none;float:left;margin:0;padding:0}.group_tabs li{display:inline;float:left}.group_tabs li a{font-family:Helvetica,Arial,sans-serif;display:block;float:left;text-decoration:none;padding:4px 8px;background-color:#aaa;background:-webkit-gradient(linear,0 0,0 bottom,from(#ddd),to(#aaa));background:-moz-linear-gradient(#ddd,#aaa);background:linear-gradient(#ddd,#aaa);text-shadow:#e5e5e5 1px 1px 0;border-bottom:0;color:#333;font-weight:bold;margin-right:8px;border-top:1px solid #efefef;-webkit-border-top-left-radius:2px;-webkit-border-top-right-radius:2px;-moz-border-radius-topleft:2px;-moz-border-radius-topright:2px;border-top-left-radius:2px;border-top-right-radius:2px}.group_tabs li a:hover{background-color:#ccc;background:-webkit-gradient(linear,0 0,0 bottom,from(#eee),to(#aaa));background:-moz-linear-gradient(#eee,#aaa);background:linear-gradient(#eee,#aaa)}.group_tabs li a:active{padding-top:5px;padding-bottom:3px}.group_tabs li.active a{color:black;text-shadow:#fff 1px 1px 0;background-color:#ddd;background:-webkit-gradient(linear,0 0,0 bottom,from(white),to(#ddd));background:-moz-linear-gradient(white,#ddd);background:linear-gradient(white,#ddd)}.file_list{margin-bottom:18px}.file_list--responsive{overflow-x:auto;overflow-y:hidden}a.src_link{background:url("./magnify.png") no-repeat left 50%;padding-left:18px}tr,td{margin:0;padding:0}th{white-space:nowrap}th.ui-state-default{cursor:pointer}th span.ui-icon{float:left}td{padding:4px 8px}td.strong{font-weight:bold}.cell--number{text-align:right}.source_table h3,.source_table h4{padding:0;margin:0;margin-bottom:4px}.source_table .header{padding:10px}.source_table pre{margin:0;padding:0;white-space:normal;color:#000;font-family:"Monaco","Inconsolata","Consolas",monospace}.source_table code{color:#000;font-family:"Monaco","Inconsolata","Consolas",monospace}.source_table pre{background-color:#333}.source_table pre ol{margin:0;padding:0;margin-left:45px;font-size:12px;color:white}.source_table pre li{margin:0;padding:2px 6px;border-left:5px solid white}.source_table pre li code{white-space:pre;white-space:pre-wrap}.source_table pre .hits{float:right;margin-left:10px;padding:2px 4px;background-color:#444;background:-webkit-gradient(linear,0 0,0 bottom,from(#222),to(#666));background:-moz-linear-gradient(#222,#666);background:linear-gradient(#222,#666);color:white;font-family:Helvetica,"Helvetica Neue",Arial,sans-serif;font-size:10px;font-weight:bold;text-align:center;border-radius:6px}#footer{color:#ddd;font-size:12px;font-weight:bold;margin-top:12px;text-align:right}#footer a{color:#eee;text-decoration:underline}#footer a:hover{color:#fff;text-decoration:none}.green{color:#090}.red{color:#900}.yellow{color:#da0}.blue{color:blue}thead th{background:white}.source_table .covered{border-color:#090}.source_table .missed{border-color:#900}.source_table .never{border-color:black}.source_table .skipped{border-color:#fc0}.source_table .missed-branch{border-color:#bf0000}.source_table .covered:nth-child(odd){background-color:#cdf2cd}.source_table .covered:nth-child(even){background-color:#dbf2db}.source_table .missed:nth-child(odd){background-color:#f7c0c0}.source_table .missed:nth-child(even){background-color:#f7cfcf}.source_table .never:nth-child(odd){background-color:#efefef}.source_table .never:nth-child(even){background-color:#f4f4f4}.source_table .skipped:nth-child(odd){background-color:#fbf0c0}.source_table .skipped:nth-child(even){background-color:#fbffcf}.source_table .missed-branch:nth-child(odd){background-color:#cc8e8e}.source_table .missed-branch:nth-child(even){background-color:#cc6e6e} \ No newline at end of file diff --git a/coverage/assets/0.12.3/application.js b/coverage/assets/0.12.3/application.js new file mode 100644 index 00000000..e1c2ab23 --- /dev/null +++ b/coverage/assets/0.12.3/application.js @@ -0,0 +1,7 @@ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(T,e){"use strict";function g(e,t,n){var r,a,i=(n=n||le).createElement("script");if(i.text=e,t)for(r in Se)(a=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,a);n.head.appendChild(i).parentNode.removeChild(i)}function m(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?pe[ge.call(e)]||"object":typeof e}function s(e){var t=!!e&&"length"in e&&e.length,n=m(e);return!we(e)&&!xe(e)&&("array"===n||0===t||"number"==typeof t&&0D.cacheLength&&delete n[r.shift()],n[e+" "]=t}var r=[];return n}function l(e){return e[q]=!0,e}function a(e){var t=E.createElement("fieldset");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function t(e,t){for(var n=e.split("|"),r=n.length;r--;)D.attrHandle[n[r]]=t}function u(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function r(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function i(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function o(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&_e(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function s(o){return l(function(i){return i=+i,l(function(e,t){for(var n,r=o([],e.length,i),a=r.length;a--;)e[n=r[a]]&&(e[n]=!(t[n]=e[n]))})})}function p(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function c(){}function g(e){for(var t=0,n=e.length,r="";t+~]|"+re+")"+re+"*"),fe=new RegExp(re+"|>"),de=new RegExp(oe),he=new RegExp("^"+ae+"$"),pe={ID:new RegExp("^#("+ae+")"),CLASS:new RegExp("^\\.("+ae+")"),TAG:new RegExp("^("+ae+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},ge=/HTML$/i,me=/^(?:input|select|textarea|button)$/i,ve=/^h\d$/i,ye=/^[^{]+\{\s*\[native \w/,be=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,we=/[+~]/,xe=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),Se=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},De=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,Te=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},Ce=function(){L()},_e=f(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{Q.apply(Y=ee.call(W.childNodes),W.childNodes),Y[W.childNodes.length].nodeType}catch(Ae){Q={apply:Y.length?function(e,t){K.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}for(v in S=w.support={},C=w.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!ge.test(t||n&&n.nodeName||"HTML")},L=w.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:W;return r!==E&&9===r.nodeType&&r.documentElement&&(R=(E=r).documentElement,F=!C(E),W!==E&&(n=E.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Ce,!1):n.attachEvent&&n.attachEvent("onunload",Ce)),S.attributes=a(function(e){return e.className="i",!e.getAttribute("className")}),S.getElementsByTagName=a(function(e){return e.appendChild(E.createComment("")),!e.getElementsByTagName("*").length}),S.getElementsByClassName=ye.test(E.getElementsByClassName),S.getById=a(function(e){return R.appendChild(e).id=q,!E.getElementsByName||!E.getElementsByName(q).length}),S.getById?(D.filter.ID=function(e){var t=e.replace(xe,Se);return function(e){return e.getAttribute("id")===t}},D.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&F){var n=t.getElementById(e);return n?[n]:[]}}):(D.filter.ID=function(e){var n=e.replace(xe,Se);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},D.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&F){var n,r,a,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(a=t.getElementsByName(e),r=0;i=a[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),D.find.TAG=S.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):S.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],a=0,i=t.getElementsByTagName(e);if("*"!==e)return i;for(;n=i[a++];)1===n.nodeType&&r.push(n);return r},D.find.CLASS=S.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&F)return t.getElementsByClassName(e)},H=[],P=[],(S.qsa=ye.test(E.querySelectorAll))&&(a(function(e){R.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll("[id~="+q+"-]").length||P.push("~="),e.querySelectorAll(":checked").length||P.push(":checked"),e.querySelectorAll("a#"+q+"+*").length||P.push(".#.+[+~]")}),a(function(e){e.innerHTML="";var t=E.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+re+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&P.push(":enabled",":disabled"),R.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(S.matchesSelector=ye.test(M=R.matches||R.webkitMatchesSelector||R.mozMatchesSelector||R.oMatchesSelector||R.msMatchesSelector))&&a(function(e){S.disconnectedMatch=M.call(e,"*"),M.call(e,"[s!='']:x"),H.push("!=",oe)}),P=P.length&&new RegExp(P.join("|")),H=H.length&&new RegExp(H.join("|")),t=ye.test(R.compareDocumentPosition),O=t||ye.test(R.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},G=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!S.sortDetached&&t.compareDocumentPosition(e)===n?e===E||e.ownerDocument===W&&O(W,e)?-1:t===E||t.ownerDocument===W&&O(W,t)?1:I?te(I,e)-te(I,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,a=e.parentNode,i=t.parentNode,o=[e],s=[t];if(!a||!i)return e===E?-1:t===E?1:a?-1:i?1:I?te(I,e)-te(I,t):0;if(a===i)return u(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;o[r]===s[r];)r++;return r?u(o[r],s[r]):o[r]===W?-1:s[r]===W?1:0}),E},w.matches=function(e,t){return w(e,null,null,t)},w.matchesSelector=function(e,t){if((e.ownerDocument||e)!==E&&L(e),S.matchesSelector&&F&&!V[t+" "]&&(!H||!H.test(t))&&(!P||!P.test(t)))try{var n=M.call(e,t);if(n||S.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(Ae){V(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xe,Se),e[3]=(e[3]||e[4]||e[5]||"").replace(xe,Se),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||w.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&w.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=_(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(xe,Se).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=U[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&U(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,a){return function(e){var t=w.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===a:"!="===r?t!==a:"^="===r?a&&0===t.indexOf(a):"*="===r?a&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;Te.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?Te.find.matchesSelector(r,e)?[r]:[]:Te.find.matches(e,Te.grep(t,function(e){return 1===e.nodeType}))},Te.fn.extend({find:function(e){var t,n,r=this.length,a=this;if("string"!=typeof e)return this.pushStack(Te(e).filter(function(){for(t=0;t)[^>]*|#([\w-]+))$/;(Te.fn.init=function(e,t,n){var r,a;if(!e)return this;if(n=n||je,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):we(e)?n.ready!==undefined?n.ready(e):e(Te):Te.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:Le.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof Te?t[0]:t,Te.merge(this,Te.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:le,!0)),Ie.test(r[1])&&Te.isPlainObject(t))for(r in t)we(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(a=le.getElementById(r[2]))&&(this[0]=a,this.length=1),this}).prototype=Te.fn,je=Te(le);var Ee=/^(?:parents|prev(?:Until|All))/,Re={children:!0,contents:!0,next:!0,prev:!0};Te.fn.extend({has:function(e){var t=Te(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,rt=/^$|^module$|\/(?:java|ecma)script/i,at={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};at.optgroup=at.option,at.tbody=at.tfoot=at.colgroup=at.caption=at.thead,at.th=at.td;var it,ot,st=/<|&#?\w+;/;it=le.createDocumentFragment().appendChild(le.createElement("div")),(ot=le.createElement("input")).setAttribute("type","radio"),ot.setAttribute("checked","checked"),ot.setAttribute("name","t"),it.appendChild(ot),be.checkClone=it.cloneNode(!0).cloneNode(!0).lastChild.checked,it.innerHTML="",be.noCloneChecked=!!it.cloneNode(!0).lastChild.defaultValue;var lt=/^key/,ut=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ct=/^([^.]*)(?:\.(.+)|)/;Te.event={global:{},add:function(t,e,n,r,a){var i,o,s,l,u,c,f,d,h,p,g,m=Be.get(t);if(m)for(n.handler&&(n=(i=n).handler,a=i.selector),a&&Te.find.matchesSelector(Je,a),n.guid||(n.guid=Te.guid++),(l=m.events)||(l=m.events={}),(o=m.handle)||(o=m.handle=function(e){return void 0!==Te&&Te.event.triggered!==e.type?Te.event.dispatch.apply(t,arguments):undefined}),u=(e=(e||"").match(Fe)||[""]).length;u--;)h=g=(s=ct.exec(e[u])||[])[1],p=(s[2]||"").split(".").sort(),h&&(f=Te.event.special[h]||{},h=(a?f.delegateType:f.bindType)||h,f=Te.event.special[h]||{},c=Te.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:a,needsContext:a&&Te.expr.match.needsContext.test(a),namespace:p.join(".")},i),(d=l[h])||((d=l[h]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,p,o)||t.addEventListener&&t.addEventListener(h,o)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),a?d.splice(d.delegateCount++,0,c):d.push(c),Te.event.global[h]=!0)},remove:function(e,t,n,r,a){var i,o,s,l,u,c,f,d,h,p,g,m=Be.hasData(e)&&Be.get(e);if(m&&(l=m.events)){for(u=(t=(t||"").match(Fe)||[""]).length;u--;)if(h=g=(s=ct.exec(t[u])||[])[1],p=(s[2]||"").split(".").sort(),h){for(f=Te.event.special[h]||{},d=l[h=(r?f.delegateType:f.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=i=d.length;i--;)c=d[i],!a&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(i,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));o&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,p,m.handle)||Te.removeEvent(e,h,m.handle),delete l[h])}else for(h in l)Te.event.remove(e,h+t[u],n,r,!0);Te.isEmptyObject(l)&&Be.remove(e,"handle events")}},dispatch:function(e){var t,n,r,a,i,o,s=Te.event.fix(e),l=new Array(arguments.length),u=(Be.get(this,"events")||{})[s.type]||[],c=Te.event.special[s.type]||{};for(l[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,dt=/\s*$/g;Te.extend({htmlPrefilter:function(e){return e.replace(ft,"<$1>")},clone:function(e,t,n){var r,a,i,o,s=e.cloneNode(!0),l=Ye(e);if(!(be.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||Te.isXMLDoc(e)))for(o=w(s),r=0,a=(i=w(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",a=function(e){r.remove(),a=null,e&&t("error"===e.type?404:200,e.type)}),le.head.appendChild(r[0])},abort:function(){a&&a()}}});var an,on=[],sn=/(=)\?(?=&|$)|\?\?/;Te.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=on.pop()||Te.expando+"_"+Ot++;return this[e]=!0,e}}),Te.ajaxPrefilter("json jsonp",function(e,t,n){var r,a,i,o=!1!==e.jsonp&&(sn.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&sn.test(e.data)&&"data");if(o||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=we(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,o?e[o]=e[o].replace(sn,"$1"+r):!1!==e.jsonp&&(e.url+=(qt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return i||Te.error(r+" was not called"),i[0]},e.dataTypes[0]="json",a=T[r],T[r]=function(){i=arguments},n.always(function(){a===undefined?Te(T).removeProp(r):T[r]=a,e[r]&&(e.jsonpCallback=t.jsonpCallback,on.push(r)),i&&we(a)&&a(i[0]),i=a=undefined}),"script"}),be.createHTMLDocument=((an=le.implementation.createHTMLDocument("").body).innerHTML="
    ",2===an.childNodes.length),Te.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(be.createHTMLDocument?((r=(t=le.implementation.createHTMLDocument("")).createElement("base")).href=le.location.href,t.head.appendChild(r)):t=le),i=!n&&[],(a=Ie.exec(e))?[t.createElement(a[1])]:(a=S([e],t,i),i&&i.length&&Te(i).remove(),Te.merge([],a.childNodes)));var r,a,i},Te.fn.load=function(e,t,n){var r,a,i,o=this,s=e.indexOf(" ");return-1").append(Te.parseHTML(e)).find(r):e)}).always(n&&function(e,t){o.each(function(){n.apply(this,i||[e.responseText,t,e])})}),this},Te.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){Te.fn[t]=function(e){return this.on(t,e)}}),Te.expr.pseudos.animated=function(t){return Te.grep(Te.timers,function(e){return t===e.elem}).length},Te.offset={setOffset:function(e,t,n){var r,a,i,o,s,l,u=Te.css(e,"position"),c=Te(e),f={};"static"===u&&(e.style.position="relative"),s=c.offset(),i=Te.css(e,"top"),l=Te.css(e,"left"),("absolute"===u||"fixed"===u)&&-1<(i+l).indexOf("auto")?(o=(r=c.position()).top,a=r.left):(o=parseFloat(i)||0,a=parseFloat(l)||0),we(t)&&(t=t.call(e,n,Te.extend({},s))),null!=t.top&&(f.top=t.top-s.top+o),null!=t.left&&(f.left=t.left-s.left+a),"using"in t?t.using.call(e,f):c.css(f)}},Te.fn.extend({offset:function(t){if(arguments.length)return t===undefined?this:this.each(function(e){Te.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],a={top:0,left:0};if("fixed"===Te.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===Te.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((a=Te(e).offset()).top+=Te.css(e,"borderTopWidth",!0),a.left+=Te.css(e,"borderLeftWidth",!0))}return{top:t.top-a.top-Te.css(r,"marginTop",!0),left:t.left-a.left-Te.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===Te.css(e,"position");)e=e.offsetParent;return e||Je})}}),Te.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,a){var i="pageYOffset"===a;Te.fn[t]=function(e){return Me(this,function(e,t,n){var r;if(xe(e)?r=e:9===e.nodeType&&(r=e.defaultView),n===undefined)return r?r[a]:e[t];r?r.scrollTo(i?r.pageXOffset:n,i?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),Te.each(["top","left"],function(e,n){Te.cssHooks[n]=M(be.pixelPosition,function(e,t){if(t)return t=H(e,n),gt.test(t)?Te(e).position()[n]+"px":t})}),Te.each({Height:"height",Width:"width"},function(o,s){Te.each({padding:"inner"+o,content:s,"":"outer"+o},function(r,i){Te.fn[i]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),a=r||(!0===e||!0===t?"margin":"border");return Me(this,function(e,t,n){var r;return xe(e)?0===i.indexOf("outer")?e["inner"+o]:e.document.documentElement["client"+o]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+o],r["scroll"+o],e.body["offset"+o],r["offset"+o],r["client"+o])):n===undefined?Te.css(e,t,a):Te.style(e,t,n,a)},s,n?e:undefined,n)}})}),Te.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){Te.fn[n]=function(e,t){return 0"}for(var i=0,o="",s=[];e.length||t.length;){var l=r().splice(0,1)[0];if(o+=x(n.substr(i,l.offset-i)),i=l.offset,"start"==l.event)o+=a(l.node),s.push(l.node);else if("stop"==l.event){var u=s.length;do{var c=s[--u];o+=""}while(c!=l.node);for(s.splice(u,1);u'+x(a[0])+""):n+=x(a[0]),r=t.lR.lastIndex,a=t.lR.exec(e)}return n+=x(e.substr(r,e.length-r))}function f(e,t){if(t.sL&&T[t.sL]){var n=D(t.sL,e);return g+=n.keyword_count,n.value}return r(e,t)}function d(e,t){var n=e.cN?'':"";e.rB?(m+=n,e.buffer=""):e.eB?(m+=x(t)+n,e.buffer=""):(m+=n,e.buffer=t),h.push(e),p+=e.r}function i(e,t,n){var r=h[h.length-1];if(n)return m+=f(r.buffer+e,r),!1;var a=l(t,r);if(a)return m+=f(r.buffer+e,r),d(a,t),a.rB;var i=u(h.length-1,t);if(i){var o=r.cN?"":"";for(r.rE?m+=f(r.buffer+e,r)+o:r.eE?m+=f(r.buffer+e,r)+o+x(t):m+=f(r.buffer+e+t,r)+o;1":"",m+=o,i--,h.length--;var s=h[h.length-1];return h.length--,h[h.length-1].buffer="",s.starts&&d(s.starts,""),r.rE}if(c(t,r))throw"Illegal"}var s=T[e],h=[s.dM],p=0,g=0,m="";try{var v=0;s.dM.buffer="";do{var y=n(t,v),b=i(y[0],y[1],y[2]);v+=y[0].length,b||(v+=y[1].length)}while(!y[2]);if(1o.keyword_count+o.r&&(o=l),l.keyword_count+l.r>i.keyword_count+i.r&&(o=i,i=l)}}var u=e.className;u.match(i.language)||(u=u?u+" "+i.language:i.language);var c=g(e);if(c.length)(f=document.createElement("pre")).innerHTML=i.value,i.value=m(c,g(f),r);if(n&&(i.value=i.value.replace(/^((<[^>]+>|\t)+)/gm,function(e,t){return t.replace(/\t/g,n)})),t&&(i.value=i.value.replace(/\n/g,"
    ")),/MSIE [678]/.test(navigator.userAgent)&&"CODE"==e.tagName&&"PRE"==e.parentNode.tagName){var f=e.parentNode,d=document.createElement("div");d.innerHTML="
    "+i.value+"
    ",e=d.firstChild.firstChild,d.firstChild.cN=f.cN,f.parentNode.replaceChild(d.firstChild,f)}else e.innerHTML=i.value;e.className=u,e.dataset={},e.dataset.result={language:i.language,kw:i.keyword_count,re:i.r},o&&o.language&&(e.dataset.second_best={language:o.language,kw:o.keyword_count,re:o.r})}}function i(){if(!i.called){i.called=!0,v();for(var e=document.getElementsByTagName("pre"),t=0;t|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",this.BE={b:"\\\\.",r:0},this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0},this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0},this.CLCM={cN:"comment",b:"//",e:"$"},this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"},this.HCM={cN:"comment",b:"#",e:"$"},this.NM={cN:"number",b:this.NR,r:0},this.CNM={cN:"number",b:this.CNR,r:0},this.inherit=function(e,t){var n={};for(var r in e)n[r]=e[r];if(t)for(var r in t)n[r]=t[r];return n}};hljs.LANGUAGES.ruby=function(){var e="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",n={keyword:{and:1,"false":1,then:1,defined:1,module:1,"in":1,"return":1,redo:1,"if":1,BEGIN:1,retry:1,end:1,"for":1,"true":1,self:1,when:1,next:1,until:1,"do":1,begin:1,unless:1,END:1,rescue:1,nil:1,"else":1,"break":1,undef:1,not:1,"super":1,"class":1,"case":1,require:1,"yield":1,alias:1,"while":1,ensure:1,elsif:1,or:1,def:1},keymethods:{__id__:1,__send__:1,abort:1,abs:1,"all?":1,allocate:1,ancestors:1,"any?":1,arity:1,assoc:1,at:1,at_exit:1,autoload:1,"autoload?":1,"between?":1,binding:1,binmode:1,"block_given?":1,call:1,callcc:1,caller:1,capitalize:1,"capitalize!":1,casecmp:1,"catch":1,ceil:1,center:1,chomp:1,"chomp!":1,chop:1,"chop!":1,chr:1,"class":1,class_eval:1,"class_variable_defined?":1,class_variables:1,clear:1,clone:1,close:1,close_read:1,close_write:1,"closed?":1,coerce:1,collect:1,"collect!":1,compact:1,"compact!":1,concat:1,"const_defined?":1,const_get:1,const_missing:1,const_set:1,constants:1,count:1,crypt:1,"default":1,default_proc:1,"delete":1,"delete!":1,delete_at:1,delete_if:1,detect:1,display:1,div:1,divmod:1,downcase:1,"downcase!":1,downto:1,dump:1,dup:1,each:1,each_byte:1,each_index:1,each_key:1,each_line:1,each_pair:1,each_value:1,each_with_index:1,"empty?":1,entries:1,eof:1,"eof?":1,"eql?":1,"equal?":1,eval:1,exec:1,exit:1,"exit!":1,extend:1,fail:1,fcntl:1,fetch:1,fileno:1,fill:1,find:1,find_all:1,first:1,flatten:1,"flatten!":1,floor:1,flush:1,for_fd:1,foreach:1,fork:1,format:1,freeze:1,"frozen?":1,fsync:1,getc:1,gets:1,global_variables:1,grep:1,gsub:1,"gsub!":1,"has_key?":1,"has_value?":1,hash:1,hex:1,id:1,include:1,"include?":1,included_modules:1,index:1,indexes:1,indices:1,induced_from:1,inject:1,insert:1,inspect:1,instance_eval:1,instance_method:1,instance_methods:1,"instance_of?":1,"instance_variable_defined?":1,instance_variable_get:1,instance_variable_set:1,instance_variables:1,"integer?":1,intern:1,invert:1,ioctl:1,"is_a?":1,isatty:1,"iterator?":1,join:1,"key?":1,keys:1,"kind_of?":1,lambda:1,last:1,length:1,lineno:1,ljust:1,load:1,local_variables:1,loop:1,lstrip:1,"lstrip!":1,map:1,"map!":1,match:1,max:1,"member?":1,merge:1,"merge!":1,method:1,"method_defined?":1,method_missing:1,methods:1,min:1,module_eval:1,modulo:1,name:1,nesting:1,"new":1,next:1,"next!":1,"nil?":1,nitems:1,"nonzero?":1,object_id:1,oct:1,open:1,pack:1,partition:1,pid:1,pipe:1,pop:1,popen:1,pos:1,prec:1,prec_f:1,prec_i:1,print:1,printf:1,private_class_method:1,private_instance_methods:1,"private_method_defined?":1,private_methods:1,proc:1,protected_instance_methods:1, +"protected_method_defined?":1,protected_methods:1,public_class_method:1,public_instance_methods:1,"public_method_defined?":1,public_methods:1,push:1,putc:1,puts:1,quo:1,raise:1,rand:1,rassoc:1,read:1,read_nonblock:1,readchar:1,readline:1,readlines:1,readpartial:1,rehash:1,reject:1,"reject!":1,remainder:1,reopen:1,replace:1,require:1,"respond_to?":1,reverse:1,"reverse!":1,reverse_each:1,rewind:1,rindex:1,rjust:1,round:1,rstrip:1,"rstrip!":1,scan:1,seek:1,select:1,send:1,set_trace_func:1,shift:1,singleton_method_added:1,singleton_methods:1,size:1,sleep:1,slice:1,"slice!":1,sort:1,"sort!":1,sort_by:1,split:1,sprintf:1,squeeze:1,"squeeze!":1,srand:1,stat:1,step:1,store:1,strip:1,"strip!":1,sub:1,"sub!":1,succ:1,"succ!":1,sum:1,superclass:1,swapcase:1,"swapcase!":1,sync:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,taint:1,"tainted?":1,tell:1,test:1,"throw":1,times:1,to_a:1,to_ary:1,to_f:1,to_hash:1,to_i:1,to_int:1,to_io:1,to_proc:1,to_s:1,to_str:1,to_sym:1,tr:1,"tr!":1,tr_s:1,"tr_s!":1,trace_var:1,transpose:1,trap:1,truncate:1,"tty?":1,type:1,ungetc:1,uniq:1,"uniq!":1,unpack:1,unshift:1,untaint:1,untrace_var:1,upcase:1,"upcase!":1,update:1,upto:1,"value?":1,values:1,values_at:1,warn:1,write:1,write_nonblock:1,"zero?":1,zip:1}},r={cN:"yardoctag",b:"@[A-Za-z]+"},a={cN:"comment",b:"#",e:"$",c:[r]},i={cN:"comment",b:"^\\=begin",e:"^\\=end",c:[r],r:10},o={cN:"comment",b:"^__END__",e:"\\n$"},s={cN:"subst",b:"#\\{",e:"}",l:e,k:n},l=[hljs.BE,s],u={cN:"string",b:"'",e:"'",c:l,r:0},c={cN:"string",b:'"',e:'"',c:l,r:0},f={cN:"string",b:"%[qw]?\\(",e:"\\)",c:l,r:10},d={cN:"string",b:"%[qw]?\\[",e:"\\]",c:l,r:10},h={cN:"string",b:"%[qw]?{",e:"}",c:l,r:10},p={cN:"string",b:"%[qw]?<",e:">",c:l,r:10},g={cN:"string",b:"%[qw]?/",e:"/",c:l,r:10},m={cN:"string",b:"%[qw]?%",e:"%",c:l,r:10},v={cN:"string",b:"%[qw]?-",e:"-",c:l,r:10},y={cN:"string",b:"%[qw]?\\|",e:"\\|",c:l,r:10},b={cN:"function",b:"\\bdef\\s+",e:" |$|;",l:e,k:n,c:[{cN:"title",b:t,l:e,k:n},{cN:"params",b:"\\(",e:"\\)",l:e,k:n},a,i,o]},w={cN:"identifier",b:e,l:e,k:n,r:0},x=[a,i,o,u,c,f,d,h,p,g,m,v,y,{cN:"class",b:"\\b(class|module)\\b",e:"$|;",k:{"class":1,module:1},c:[{cN:"title",b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",r:0},{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+hljs.IR+"::)?"+hljs.IR}]},a,i,o]},b,{cN:"constant",b:"(::)?([A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[u,c,f,d,h,p,g,m,v,y,w],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"number",b:"\\?\\w"},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},w,{b:"("+hljs.RSR+")\\s*",c:[a,i,o,{cN:"regexp",b:"/",e:"/[a-z]*",i:"\\n",c:[hljs.BE]}],r:0}];return s.c=x,{dM:{l:e,k:n,c:b.c[1].c=x}}}(),function(c,s,o){function l(e,t,n){var r=s.createElement(e);return t&&(r.id=te+t),n&&(r.style.cssText=n),c(r)}function f(){return o.innerHeight?o.innerHeight:c(o).height()}function u(e,n){n!==Object(n)&&(n={}),this.cache={},this.el=e,this.value=function(e){var t;return this.cache[e]===undefined&&((t=c(this.el).attr("data-cbox-"+e))!==undefined?this.cache[e]=t:n[e]!==undefined?this.cache[e]=n[e]:Q[e]!==undefined&&(this.cache[e]=Q[e])),this.cache[e]},this.get=function(e){var t=this.value(e);return c.isFunction(t)?t.call(this.el,this):t}}function i(e){var t=k.length,n=(X+e)%t;return n<0?t+n:n}function d(e,t){return Math.round((/%/.test(e)?("x"===t?I.width():f())/100:1)*parseInt(e,10))}function h(e,t){return e.get("photo")||e.get("photoRegex").test(t)}function p(e,t){return e.get("retinaUrl")&&1"),w()}}function a(){S||(t=!1,I=c(o),S=l(ce).attr({id:ee,"class":!1===c.support.opacity?te+"IE":"",role:"dialog",tabindex:"-1"}).hide(),x=l(ce,"Overlay").hide(),E=c([l(ce,"LoadingOverlay")[0],l(ce,"LoadingGraphic")[0]]),D=l(ce,"Wrapper"),T=l(ce,"Content").append(R=l(ce,"Title"),F=l(ce,"Current"),M=c('