formstack-api 0.0.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/formstack/api/version.rb +1 -1
- data/lib/formstack/api.rb +169 -1
- data/spec/fs-logo.png +0 -0
- data/spec/support/vcr.rb +34 -7
- data/spec/vcr/Formstack_API/_copy_form/adds_COPY_at_the_end_of_the_form_name.yml +434 -0
- data/spec/vcr/Formstack_API/_create_field/creates_a_field_with_embeded_code.yml +43 -0
- data/spec/vcr/Formstack_API/_create_field/creates_a_text_field.yml +43 -0
- data/spec/vcr/Formstack_API/_delete_submission/deletes_a_submission.yml +142 -0
- data/spec/vcr/Formstack_API/_edit_submission_data/edits_a_submission_succesfully.yml +373 -0
- data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_if_fields_are_non_numeric.yml +66 -0
- data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match.yml +66 -0
- data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match_reversed.yml +66 -0
- data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_with_a_bad_timestamp.yml +66 -0
- data/spec/vcr/Formstack_API/_form_submissions/gets_submissions_default.yml +388 -245
- data/spec/vcr/Formstack_API/_form_submissions/raises_an_error_if_page_number_is_not_working.yml +79 -0
- data/spec/vcr/Formstack_API/_form_submissions/returns_data_if_specified.yml +245 -0
- data/spec/vcr/Formstack_API/_form_submissions/returns_no_data_by_default.yml +65 -0
- data/spec/vcr/Formstack_API/_get_submission_details/gets_the_right_submission_from_the_right_form.yml +43 -0
- data/spec/vcr/Formstack_API/_submit_form/creates_a_submission_into_a_form.yml +46 -0
- data/spec/vcr/Formstack_API/_submit_form/uploads_an_image.yml +44 -0
- data/spec/wrapper_spec.rb +217 -20
- metadata +32 -2
@@ -0,0 +1,44 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://www.formstack.com/api/v2/form/<UPLOAD_FORM_ID>/submission.json
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: read=0&field_<UPLOAD_FIELD_IDS>=fs-logo.png%3BiVBORw0KGgoAAAANSUhEUgAAANcAAAAnCAIAAAFkinptAAAAGXRFWHRTb2Z0%0Ad2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9i%0AZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2Vo%0AaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6%0AbnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2%0ALjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpS%0AREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJk%0AZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIg%0AeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8i%0AIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5%0AcGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5j%0Ab20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRp%0AZDpGNzdGMTE3NDA3MjA2ODExODIyQUNFM0M5MkIxRjVFNiIgeG1wTU06RG9j%0AdW1lbnRJRD0ieG1wLmRpZDpDQkFFNDVGQTJGNjMxMUUyQTAxQTk5RDVFRUY1%0ANjQwQiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDQkFFNDVGOTJGNjMx%0AMUUyQTAxQTk5RDVFRUY1NjQwQiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQ%0AaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9t%0AIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Rjg3RjExNzQwNzIwNjgxMTgw%0AODNEM0U4Q0NGM0UxNDQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Rjc3%0ARjExNzQwNzIwNjgxMTgyMkFDRTNDOTJCMUY1RTYiLz4gPC9yZGY6RGVzY3Jp%0AcHRpb24%2BIDwvcmRmOlJERj4gPC94OnhtcG1ldGE%2BIDw%2FeHBhY2tldCBlbmQ9%0AInIiPz4zJbtjAAA5OElEQVR42mL8%2F%2F8%2FAxAxMv76842ZhZWZgfXfv3%2BMTEwM%0ADP8YGYAkCeAfA0gD02%2BGP48%2BbPnH8IeVmXPNyajffz8wMTG5hSdqWXsBFYHs%0Ag2v49w%2FCgAjKGpkjGwcUcw9PAjJY7jw%2Fx8mh8vXXx9YjOTpc31mZBYCipemJ%0Abk52TiExbJxcTx4%2F4eXk5ufn%2BfP37%2FsPH%2BzMTa7dfXDp0lUdHU2gSlvvEGUl%0A%2BZfvv756%2BUJISNAxNJHp5%2F9%2FeXtzUjdHvfz%2Bi5ERaiHQOKCl%2B9YsefH4CTPj%0A%2F%2BPbV7Ews8yb1HV21%2FrDp88WpsYLiQh8%2BPgVqNLPx%2BPkhWtvXr06u3sD0KFf%0AvnxgMpCyKDdvvP%2Fx55vfjAwgI6FeA7L17dwLMpLfvnzF8J%2Fh7uOn7GxsQN%2B%2B%0Af%2FUuv77t8oHtX7%2B8%2F%2F777%2FyV6xzMjbOSItWt3R89fVZfXAAQQIzAQPnF8I%2BN%0Agendt%2FtCHHL%2FGZnA5jIwAnUzkhQxwBgGugkUOf%2FZwHE691zZmadL%2FjEyekYl%0Ae0Yk%2FP%2F%2FF4smWETtP3oKTfwv2DggYDrwcMObL4%2F%2B%2FfvLCHQe2HVA6bTYKD17%0AD0vvQFCYhiQASfvAaPuAGM%2BYlIbeKQ5%2B4X%2F%2B%2FzF09zV0CXSNAMWvuWcwE9i4%0ALbv3Ms04OzV1V2LgCpcvv4DuYwaJMzEHeLvKycgc37reJSROTFIIKHZw%2FVIG%0Axn8CvLz1RTmfv39j%2BMd0fudmYSEBaUkJI1e%2FUzvWAR2vZ%2B%2Ft4%2BrMxMAiN99r%0A7X8ukYtf%2F2tL%2BgND4%2BHjJ8Cw3Lp8vrqtx%2B7VC5j%2BQQKJ4eHDBwx%2F%2FoTGJ3%2F8%0A%2BsPFzkLN2l1RRuLoqdNndmzUsnEHBtyFg1uVLN0AAogREjRAXSlrTWV5eVnY%0AuUS5ZN79fO4oYWupXAyMJUjCZmJiQg41RkbSYo2kGP7HwMgE8QQkYv7%2B%2F%2BM8%0A18d4qn2Z41RnlXQ1ESeGXwIs%2F1nuvT547tmyP3%2F%2B%2FmcCAfeoZJgJf4Ea375%2F%0Af%2Bb8RYjAm3fvweQHIHn%2F4RMgefLMWaA%2FHj59dvv%2BA3Ci%2Bg%2BUPXoClDp2Hzlm%0A4h7w%2FftPIPvTl69Hj5988fot2DngFHTk%2BO37j%2F%2F%2F%2Be8WkQxx38cvX1hOPT8y%0AN6hTQUADmHTUhUyAIVa0K1yGHZhWgcx%2FLCzMkBz0788fU1dfRma2g%2BuXBCZm%0AbF%2BxUFhAUM%2FRU0lB8f79%2B5ycbCe2A%2FMgQ1Zlw%2FZlc%2FgFBe2DooEq%2FeIynr98%0AbaSp9vjlm%2FzsZFBhAkxOjCycnOxAI9nYObqmzfnHwHrnwX0ZMaEnL99fP7IN%0AEqX%2FGf%2FXdfTtOHDo1I4NTIp8qpeeX%2F3HCHTKX%2B%2F17tFbwl%2F%2BYrj3A5iHWBhA%0A2eAnxIMszIynd28%2BtWMtJzv7uw9fHIPCvv%2F8ISEu3V5bxsTIpKaoDFHGBE7N%0AnByc4NTByMXNDQzD7KzU5XMmHz9y3D4slp2VUYCf%2B%2FOXL0Bp39iU5XOmmBho%0AAF1UUZCtIif%2B9O37%2FYdPMPwDBXxTRRG3oNDBEycZgTH5j%2FHPk%2B%2FPTj05u%2B%2FR%0A0XMvr7%2F4%2FeHtx4%2Ff8q%2F8hxbk0HQB1MjEiCiqQaXvf0ag04FRz8DIDBX%2F%2Fx9S%0AeoFLLhABNB6YuFiYoeb8A%2BVzhj9%2F%2FwETDyO0FABy%2FzODCidgIIPKGJBx%2F%2F%2F9%0ABXKYQGIAAWiv9pi2qjh8X%2BUWpFBaSlZSIUad0%2FkY4gt8li1AGeqmTHQ4JiZj%0A6hJNXGSLmqkkY8uM6BYJD7fJ0JCKhml4E5qNITCzhzxkwYROKNgHGy1lFG65%0APff4O%2FdiIRr%2FMdlNc9qee09%2Bz%2B%2F7fpfARZJEaDgWs%2BQEpmaXprVsPObAGKt4%0AQq%2FCys2DyaoLUZhZiZQgGuGxwNlvLpTSiIvgYyJ4VZZpc1xUkkn39L%2Fxq0jd%0Azbz%2BSfK0hKTzHqul5rDvo1%2FJXczs78pIjdMaYu9XR8Q%2FlvQGVCbF%2FNwaYwIN%0AHQFkaq1l%2Fy%2F1wJH7nrT0tjTExGj%2B%2ByxOMedaNj1V9sE%2B5T9T3vfxy3UV1S%2BW%0AXHbaWseO1w2VUrwGs7SGT6QkNaCPdAewdiTfbq1ts9YymPThpYEh76xfIYvJ%0AKResnuszPv8N%2BDE4MhIQCKec6%2BsPm700MDg%2BOQW10%2Bv1i0JQDBHxsk84Lg8O%0AUcuUg6%2F5%2FO22bpJCuUshnvEpJ%2BxzjoWLbUVHo9WxGi56vSH93fa8SF5DR4ZY%0AToOogKKt0AtiSGps6RDFUP6WzZYdu%2FxeL8%2BrXW73aJ%2FtzZIPJYkbvjJwa1JS%0AVFS0z3tdp9fz6kiny52g07dbaywFu2e9MyJCPzc3QFKydhb7pj2V5Z%2BWHjzE%0AcqzWYGytq7rrUbMpOXlpUejo6UEATIpps5058mXN2dP1nBhk745%2FANKOCXqw%0ATxRUqlsAPRALlFjpC%2Fj4F4VDx6r%2FdLps3b1TDufgmWZQgOxXiiB8AUld31WT%0AyefZbeAKcBOMSXtfK8g2P5GdXwjGaHBEQv2dP8nZCnZbv9ZqtQBul%2BPVhuZW%0AKSjA7tp1dzad%2Bkop9IaMXHDl2Ilvvyj7BISGm5dUzzdms9TyoBMTEy%2BQmQCH%0AkABLuIcS4mI7v68FGzkv7USkTORxRhZPjgmTDK3XxcEXQkirI4Mdx3GwttZV%0A5m4vytm%2Bu6q8NCwkt6emGQzG%2Fe%2B8VXWqnmAY4VXTJz4%2FPKxiuAgVT3rRIwZ%2B%0AzOtqzOsqy6xQRcULIrUQoliMg%2BKsBC5K8txL0UBvwEkcRVccOWxKNs0Li5l5%0ABTfmF1fjMIRlhgpPpX%2FPRuf6LzacrAyK82P2cYS5H5paR%2B0TGkOiyWS0bDID%0AbUpSaGZ2IWNr%2Flwg4PbNAXOmpWzIMT%2Bz5733SS960VLT76fvXZOSqDEGgiHI%0AgcTCfCYAl6Ymvg7JgvpD64i3mRTTdyQbd%2BRtSct6AYId6emAHcekR%2BHLpQU%2F%0Az2nBTfvVq7xaTSTb4YZ1V8kBlsEPrV%2BXkf6w6sC%2B4rf3Hvys4o%2BB3rXpGx%2FM%0A3srB1EBzvzTX3%2FN4ZnrOto3pj0w6PTBz7Sku%2FLz6xNGKKii65A5em5pztdg7%0ALkz%2FNuqdYBn2SmEnizmFnmRyIYmkV6hxWULkFwuoEA3krqLlxMm7tKwyiMgB%0AecdgVygVJIpW4sHyk4BdSa4wIx8HaaaWrUmIYlkiHNRfAlBn7cFRVWf8nnPv%0A3b2b7CPZZJcs2TwVBsHRP8QiDGRKSMOjNA4PMTIQJEyFqjVt%2BpjWitMiPoqP%0AjlWZUsCWx5QMNXEUEOJoOtE4gNIMLYLh4SOTLC%2Fz2Ozd7Ouec26%2Fc%2B5miUuc%0A9t8m%2F4S7Z%2B855%2Ft%2B3%2Ff7%2FT7QDUMBSgH4jLHua4fCem8o9kU0MWSYiURKh6aD%0AkBqO6U8v6sDQuRlKF1GW3kXiFN%2BgITip2Bil9e3%2F4w9PknAiwM2MkwHKaupW%0AEE1BOuhM6MDBsyeeWPBbO3bx0hhXCk%2B%2BX5On%2BktzUtQ0K33z7yh%2FkEgkV8qT%0AEGGSzNOH8dIHGod0nStSni2FRxDhWHjgdNd7ltGc4HAI%2FVeVbKUZiZaYtSbr%0AyQQLxnnZDFz%2BN040rd%2BxffGs6iWSqq5fvWpjw%2BqsNyiARozZP6%2B0Fjkcx%2Fsv%0Abf2k46nal0VBjIl0DudUOMWc9iQV0E6aiTOhg5Qm7i5tRMzOOEfy1V9dvlI8%0AOaApat3CBbFE3DquZtesg2dicSOB3%2FL3zT%2Ff9mk2Im7apeOD40%2B98MqoEX%2Bv%0AZa%2Fb7Z7wPRPmTyQ9rRURx4VEsFLgLezrD92cTuXC4Cf7u59z2HDMNGRZ%2Fumd%0Aweb2OsQLEMNa2WCKy81IyunwQRnLJkqxpF0uQJLKX4s0gDIaK17xWqzZ1Q1r%0AVjHRTUQLAtnLQJbXrFwzPBLJz3NDQxgMD4MoefdQq8z4YYMzZhaUBtYuX7F9%0A185Cl7%2FveujqmY9nzKm2uzy1Vfe0vn0kUFwCffB6KLR752uPPdqENacrJydO%0AyeD1y58e78TgpZBcu6x%2BIKLnFRRKFI3G9S8vXew7e4pyPawU5BdWLVsN7DA8%0AMNj%2F6ak%2F%2FXXfjn1%2FB2ei5eSYlOq67pClD4%2B%2BJWoIVLRcXbcyHI3me31YllPJ%0ARCKmn3z3iEEJiGxLh0IEp8%2BqyvMV9X5%2BKfRZt6KTuE7phru2lLtn8HYpum66%0An3Emkxvenu93BAiiHk7HjFLwW7mMAe%2FL44gv7SyBaIeiek39Oqt0rl37%2Bh9v%0A7Dve%2Fa8Xd%2B5RVPuS6vlbH2%2BG50%2B%2F%2BMeuU6drVzY8uqFh%2BeIa%2F6RCX15Be0dn%0A9ew5m3%2FxE7eHc7u7sChPwye6z23b8uSyhTWPb9l2Ukabn%2F297NC6jrYyQu%2Bq%0AXhIsr5izaMXJY633rtuo5uTKkUjHwT3WYfTRUbtqs%2FrU4NBgR9sBt8Oh2FXg%0AmU0Prl1cPb%2BsNM2VS9c%2BRCm5fd6CMx%2B%2Bv31vy1uH31EczmXfnbe5uSkjruHa%0AGHCDEFwfHk6Z%2Fb2pt04ZGBiCCMICBbhvhKFL4Z5kKg73VGXNYWqqrAJ2gI%2BY%0AzSZRe4SaKqIG4wMUcDCmacCHVuGIPZAVR4Fw7HPl%2Fm3nq%2BNL47VdexwK6u3t%0A39ryOucyyfzNzx67u%2FZerzcPQAFB5LYeyX6vZ%2FfLz2c8gcwMSXHbJAIRhEeb%0AftjQubEJtvjDc89iRkHaTZ8%2BPRIZZiJ1bXt23P6dqqKS8u83PByNjvT19T3R%0A3NRYvwKBhUUp7l0lBpezBHzP518tuW%2FN1NumgQQB3rRjqBWFSjbY9fW9LYX%2B%0A%2FOhozIrgGD%2BawMMgl7GJT5w%2BXVPfWFZRQpPJk%2B1vCg5HitfuH04kiSE7NZ8B%0AqIzrfeTyF1%2F3HPuyHawnFKtsc6aYkcJSmGIFEQkrlKSwwls2RBUjCIuabiGg%0AGCBV2TNHesdt07ovnM91anos4dIUqPMEEUTHlIoSnxiGQFlT%2BQbLW40BZ1Bu%0A4Vr4BCEOMqbZlCzSB%2F%2F%2F2ced4hj43PmLDzX9%2FMChdsBBsNhPTBViZUDdmIQh%0AhaSS9T%2F%2BZWVF2arFC9evuQ%2B%2B%2FMwrf%2F6g6yNhycyyimBydDQcHiGUymLGCgFA%0AQokKZUSDkyZt37Z15qIf3FJ%2B69yly7sOtwEKlaCnJMJIz%2BCFRZV1KA0Dckve%0A1N3n27yqWxHyCx7aDOkKTckemUpKJN7r1CoMMpoiMU11Zcp57LZZ3lJ%2B%2Fne%2F%0AfqT5V%2BcSZGXjI1evheDagcmlBX5%2FwOve8cIz%2FFuYiriZ4%2F2pmQ6dmdHyPFhQ%0AATzOFmnyaBt8oiNV3jNvsq84Gtdhkdfnd%2FuKLvacbbh%2FB2AsPLSlJFi8Yv2m%0AGEA0Gv135xGvCvXqOnD4yEu7%2FgJWxVPoz7GJ%2FBOjbderD2z4USBQtHTdwwPX%0Ar0KAcnI9Tk062rIfagX6fFlwstuVe%2BGjjimz5pZXTruzamF35zFONLP3143g%0AMIMalZhDViTVlFOo2FOUYBJhQqgiphJpgCTa5q3tN66U5s8MOOdy1yCuIbwh%0AEAkARCHgASGB1NKh32RABkZDNQgYU9Nht1mTMsHafKBJoNVCdUEJI1USUhhi%0ADWCVeU%2Bhls4kYpiHrXELxC7zrbG5QzKZhH00zWbVAGVwb8IRDSsZXAXZ4FTM%0AEFKPC7h4HDo7stltctp28VmQRAnih0fxREKoC3tmkggn54MhWMYg62A7RQFx%0AqDIu703MMnQiTaSkkygZoUkf8vBBJL8gyppspPEu7KMYKVlDIonvgEFE8U34%0Ap5RxqkZWnNI45%2F%2BCzg0sK439NwUFKcDbr0gRhE%2BSCWgFSwMwq66t2CFrzinm%0AVPx5WtkhkQmoYWYNbwFpYwjnHhHeLmwrKBAihmiYm10hqq2rpQfsomNYUtM0%0AhQ%2BCQ%2FFQQy%2BTmUgrbPkfAai18uioqjP%2B3n3rvNmSzGSbJGxhEQQUoU3dStWC%0AilawESpWjwdcKoJKq7iisqhYLMUeix7EU20rUkTrAjYgSqlYqwVRViUhIZkh%0AIckkJDOTmbfMe%2B%2F2u%2Fe9SQJG7L%2BG5eTMvOUu3%2F19v9%2Fv%2B3KKBWQoayMyDBiw%0AgPotom1nVbvH0BJBpZzYbWR0FlFKCJ3Gs%2ByBCLVzHMlaIPZ7KldyQco54u80%0AN4zvI6mwvSanA%2BtueO1E%2Butuoz1jpgD1sljNslwB8o0bdMWPK%2BYwNrFOTgXB%0AHL%2FpMztdhcrmrgKyxjHfyxV0o5K4siadEHdalLA5jgJRCpGdnv%2FmrYOHpPRk%0AhlTvROA6ksQrBUK4Q2%2BbWH5OHgpqevyikUv6%2B55nthUxc8oB%2BR7GIOHwvWEH%0AcM%2Bdqpp5ahcQyMlYnfGTNdEeZc3ElxDy9n%2FK3tjbW46%2BdrJtTwdna2qiamTG%0AItELcOphkAEUDEK87lhT9dw7fR4ZEXDgnDfqWmbxbxb8%2FKqp%2FaqlZxLFZ1L%2B%0AA4nl75DMuXLS%2F%2FOKgbbePUsQXhvfqXl2zYumaezeUXPaI4BYWjyLu7Ptdcdq%0A4ox64bBJLFJsErEQZJzDLzq0Dgs7hQvEi9LB41ttJslZwrmDb7CxSL05fu%2B%2B%0AA2WlxaZpgTziciNgg%2F6v6xpokkFnmP93TuybF3zzxgHWlEWjL5oS9PuDPv%2B2%0ATX8%2BvVBOMgz69j1z3oKcckpDY1NeOByPxw0zK%2FFC%2F7fwHEZtPbUZfb9S6Lvr%0AhVdXXn43S%2BKWz%2FFJks6S9kliG5OERGgGJ8B6sh7BR%2BphJOmQgfAC3GLrenbm%0ANVOBF7gxqBuzZ81w1eM3%2FIX%2FMyKc4faf8IABOGCohkGcBwI8L347wOEz7FDO%0AAWDoAEBYg5pAp13Pf3Hy4z%2FsWPtx9JjsyR9Z7J88atLB%2BGcpvTOjgYDq0vUe%0ANZuOJ9oM0%2BQ4HkSFxCnYBH7LS56QmzUc28eCP7CCavXVU8pLivsmZeNeK6K%2B%0AMXr8eEskUjxi2NAcDyKTjsaai8Ihj0eGEG5ubS2PRICmNcWa8%2FOCAb%2BvtT1%2B%0ApLa2rKzMuQvY3eGvj6Qz6TFnnRX0eXsZFfzUNzY1NzeHw4VFheFwQT65mDAd%0ADsSZBhrMsn1ejzOs4y2tIJ9Bh0RKS0dUDj2F0dO9Pwhnp6ExEikdMmRwOM9P%0AxZcjkFxi39px0jQ0GCq%2F%2FrOnzy0uGFxcDF%2BYhvXMR%2FMsHlGXlqglD3H6eRNb%0AlNOa8AjEibTfwJL5kCMhXGpNaCKiG2W7%2Bty2CdcjOGy%2F%2B%2BHHixYvCReGfLIn%0ArRsdrSdWLnv0miumwLA3vVOzYu06bGg%2FmjRp56efBWTlpuuuPffsMXc%2B9BhI%0AyUnnjv%2FqaGMgGDRUNZPoWr58yX2LHi6JVMDrWlpbFs6f96sbqklt%2B8uDN95y%0AR2Ekoni82Ww2lUpdcXHVU48%2FDEOyDLPH0qqunGHY%2BOH5t904q7qwckzlqDGy%0ARxZ5Qc2k4%2B1tq5YvuXrqJU559K2a9x9%2BfHlpebkoeQxdP3os%2Bp93Nrq%2BCutm%0AxJ2f7J636EFZ8S6YezOsjt2gJRf%2B4Emg2yInCYIoYkHgJZ7nBdb3acuWvx98%0ARRRlC9NyB0gUTsJEHLOi6DmNGcEeKLL86e59n395gISmZU%2BccM7QipKd%2F9mz%0AbNVzwyqHtbe1kX3KmhXDRzyz9mVZUaZedL4oSQXeIK8Eo01tJYGilNrFI54T%0AxaA%2FoHg8HV1p0DmZZNIfDHq9vt%2Bufj4UKUukU4GAv6K8%2FPm1L986%2B%2BdZy%2F7l%0AbQuGDh%2BeyaQtXbVA0HOCoCi5KTOEUQtIsBHnITHozy%2BEwRmqbrMZyK0VQ4b%2F%0A5tFlF1xQVeCVYfmefu6lwZUjuxLdpkE6FaysVlpWYhPlZVPmT8j7vEWPDK4Y%0AdLy985bZ1bwKksTkKgvGuvwX1obCDaYIoWUt0OfAsuFZVExghETKL6kryTL9%0AsQ2%2BlxR53YYNRHHAqBG38e13N%2F3phXsefSJSXBCLHt%2F9wRaPJKi68ZNp1wbC%0Ahfc99uT%2Bnf%2BgPMuyBL6jo2X1U0srB5WXFRd%2FvGcvvAGE1InWlj3bN%2BuGcck1%0AM32hfAtn77n15plXT1uyYtW%2FDxwOhf2f%2FHf30EGD8oJBNWs8uGDezy6%2FFMbS%0AnUzkBYJOuoBhiDK%2Fd%2F27hmV7ZEgCzIGPtgqCIAmECx86Fp17xz1lFZG%2Fb3nv%0AlpnXPbLkyYqhlbHm47s2vx4Kkifopu1mRhvUGIg5%2FPpbW8pKQoke48WVS4jZ%0ABbHtQZbTCOKEaI4Nwz%2FTIG0GpLqisjyPDRM4I2kMAEiwEHsKjXZWn%2BekrpMd%0AsL70KDNDJoy3TFMWJVDL0y%2B%2FDJYPLgNpPOXSyf89fARkaUt73ITwYFkjaz%2F9%0A6AM%2F%2FsFERyE5OjGZ1n%2B%2FdDFIQ0WWFJ8flJTak4Hlg%2B%2Fm3z5n25w7ZEFu7%2Bie%0AMHZsdyo1qii0dMUze%2FZ%2FefPs64eVRzDRxvBgjhSXgBALnEfgaGXK8Cmez%2Fcf%0AXvPKX2PRmOIL%2BIIFyNYTXYnapsZAuEjPZhfcfKOzfPAjkto16D7iQQAbaW%2Ft%0AWPbsGgBlj5W6YNJ5JJPoCHMmV5vYD3Eg8gokWg8W4RSzxFcgRUaLWFBYJ2tH%0A8hEsNDFKLERyhHuI2RwBQPF4%2B9Y3XivM8%2FeGZm3tEZbKyVEjR%2FXidVVV1af7%0ADgu8kEgkqBrCXV1dY84anYMFEuCgjDMZtbik1HmOJEnwqcfjpgLF6zV0Q%2BYl%0AIGtej%2BfXt89Z%2B%2BrfSkrKd%2B8%2Fsnn7PEvN7N21neszd%2FqQBs7QtJk3dqa1ksIC%0ARhA0Nc3Rch2M%2FmjdUVFSbFOtqpo4QO7GfGFhwfSb5hZXlGdSPS%2Bt%2Fj1JVAzP%0A2yrPBYW7t98lEGZDXFbLNr08SYs9yMpDHp8AIIh1m7GpB2sSM5D4akbWYGWH%0A9mGXfTGE%2B%2FRk0qE8r%2B3wCswKkojpCgJIuXUJBn7P5KQkS%2B0F4rnzfJ8NDgwf%0AYBTRwkGvgjRNACLLbaLBbjOM4%2FLMv%2BWmG2bNWLl6zdadu0rCRWxJ2bTrrt%2F2%0Axt%2F6%2BWTuC9%2Bo2c7ISj4nWia%2B9RfVatZ64U%2FrA4oIowdEhrlzLKel1AGavUi7%0Ajir7gjid9nq9d95734dvkecjk2c71e71095cM%2BXFlZc9u%2Fj85fdf8IjNewJS%0AXpGYLwqygRndRho2OJPQPNKbyfohVNNmq1vqctgy4TTkgQKQHSDe9PywjFVR%0AMdQwMgLHfrJ7D40BuB7XbPtA4Hg4uUMqynkra7PU2CXOBMPaLjiQ0CSWFnF1%0AnEkAVXdsGbKTDj91eotsC0aR7%2FeteOyBL3a8x4oSoyUa20lLFMeQzqIs8ANg%0AE3Qta7Z%2ByOlmc0f7lvXrfjHjyl9WT0%2BlExAcsELnjBuHM0lBUjZ%2FsN1VowSk%0AqDMJU8JqusdateS%2ByyZfDEiWNLJfHPiasFSZy9M1JqSEy4KVIwrGnhf50YVl%0AP4VpJjlWY1mNgf8ZAxDOAqFMttwEVCQVO1s3Eky%2FFgGcKyj3128QRAAjYcWX%0AZYXD9fX%2F%2BNdHlmHv%2BGRPbVMMUruAdRm2neRKti9YWCeJsYybsFi2rwPhFHGI%0AKEMDvGM44ZWNb8ZaOxMZ7UhjtKu7E%2FOCQLx%2BUiEHltrc0pzRjIbYCfg9VOBX%0AcdbvDezdd0g1LE1TqUVIiF5RKD9tACFh3t%2F12atvv5NUtXhnctPmbfSUEIWY%0ASafHjxn9yMI76xqPhvwFc%2B9dBGPgS72RVq2VcRs9aBaxkSAGdEvHpu1oZgvy%0AJeY00H9klrZhQIqGHJNx%2BtT6aBJ1%2FU8VcAjO25uvvDjukqnjzx6%2FYvXz9z%2F%2B%0ARAiISV6o%2Fsihz%2F%2B5lYApdkMuJ0UJtXT3P1eccSucvUWuHHRQuOQ2b9ux7rVN%0Af%2FzzBlNTJVkuyM8%2Fmeha%2BsC9MOsJ48fXRWMlJZHJ02dhThpbOeh3yx67tHpW%0AWemQBQ8tTetpZNol5RXINp0e0Pc2vHzxVTPOGj163V%2FfWPXcWhbxGU2%2F5Pwf%0Ass4YIRlzpES%2BeOGCDZu3BZXAxs01aGj%2BcMTmrd%2F3l20NW%2Fe3H2zV45qpDVOG%0AZXFWxRj%2BapBGIE50rAKRY5Bup8cPumbCoOpzKqopTHMk1LAte7x19dFoUz0v%0A9XMlaEtUIOg7tGu7gHC8PW7ZfEtngrf13Tu3%2B30KrAuwvLq6pmhTk6QoFPOI%0Ah%2BmV2dr6pvqGeuC9TpnQ0jPR2PFkdwc16SA4hfra%2BoZozKv4xp09qqW5JZlM%0A6rbdleppaT7x1P2%2Frp52OWzFH59eWhDwHT12DGIwneoBZl4Uzl%2F3h9Ud8ZaO%0ARBcwNI1hYo3RZHf39KuuhD0pLy384l9bIWefaDlhWqyqaqQyJcuKqNQ1Ncei%0AjZzAA3GeM3vW0a8Ogyy598HF7OdtX9709nzDg3iLEThGRDyk37CULzFSGogo%0AqSthnqRhfc6YySN9vrTedf6IB5xD1WusQvohRrIF1AmRhhPEDShXIeLSmu5z%0A8ilpjQZcs6hrDLjJUNMfkhbviBznPsRQf4W6LJDNJOpM0m5NTK12TKCRfIkA%0A6wjCEO9eIMiImFwdG0CHnGaOF4gvblsUGjj4xDAMwFZJEt02R8iWBFFIFQFu%0AAyYgikBLOEzcf97pCSWvptKut7BBjG7gLKlsIpkFoMy0d8cPdh5qSMbiWles%0A50RbEjSBJmBW4qWFo2fdNul2WgAlPZXUr%2B4v%2B4m9Tl6DBrZScc5wgqNp03In%0A4ajIaaBnaYcW8dYRk1tup2JAGWoOHmnQI2cGLMq54nb%2FYjb5hDZigJ6zMCFx%0AzjUOVuTIDc61yPYva7F0gah3gHGv3e%2FsI6aB79TQGHdbSIIh%2FAOb9FFOJcHt%0AAM4VCnqdIKvTPBkSw%2F0s6FPcDBs7kO%2FOCNOGeMdYJXUGpx%2BK1GTc%2BhTpo4ON%0AIyUbR1STG5GTzW2GqiLW6cGwc%2FYmdsCCynO69%2B4ykbdYBuZEpnfpbZLEOTp7%0ANldJtR0V5YYz09uk5ewpm8ta7jojzPa6ithpFWNoPFOzCzkBi6hRY%2F1PgHau%0ABEqq6tq%2B%2B8Yau6uqq7qreqK7ARkUBIyIIIkyCdEQjWOMfv1REeOUIAQ1QUWB%0AGNGvRiUYY4whLo34RWM0ikQUCQgCQjMIDT3QY1X1XOOrN%2F5z731VXd2Amr%2F%2B%0AsLJWWNBUd1e9d9%2B95567zz77HGQOJT81GJKGE24QGJAHwnCCo2lgg8nIelpT%0A5AySMyaESam43BVLdiQUgKj9caZHluNqslvluG9PXDTCfR5JJGmEzjZMK3yB%0AaZFOStXlbXYTIfPr1sMYFFPiD5JEFkL%2FtBKyf%2BY8Uo4SzCalDQsV5Cz7S%2F7w%0AJ1wUe3WOXAQXASDt%2FSNvfHDsOY9LAqeqYfwFe4f4WwJgwBfz4NMhfAbQyjIO%0A0cWLYiwTTyUTLAR3WF3IMdZ5ABtVZzn%2BpHTnECIVgwvyAn2VctzSOZhU2Y%2BY%0Af5ng%2F4cpWiEOcf84zsHRlwVBh%2FDjJ89CDPGFOnaB2Mun9Z7Ovl0Heg7%2Fx9aN%0AFw4PVvhLmIzgchWJgkvieDdbIPEOSbCLnENADkn0uB2%2BY9Gtrx96jEGSixe8%0ATMzUFY3HSoZMpn9i5dXTTruboQrZU4yHKhboiNvD4cMNzQIO%2BCwVgDkooWrZ%0ArqrILrtjzJgxDoJKLF%2BL2H%2FZxf%2BtEeoYC1BNs2nUHTnS3ReD9SosKDh99GiM%0ADAjIQKdeF%2FBMClFJcCQnBF6QTSpt9eFtKt9XyHgf2bppbOH4JeevOsEhGRQB%0AsbnIzGTC8fakkrZJLsDKEmcTJCeGyhyfZrmMkTjYsUnVYggrqzJee3G1b7rA%0A2wm9juVZHKnlwhdk0Wtvv7to2arqYZU8qS4xLEkkxgfIRHnpEXh6vrm19Zbr%0Av3%2F3j24ibB5sRJYe0rnDnWC3rICPvP5vl%2B%2BdgF6YU8mchyigT5V9%2FDpjyCXX%0Ahn4cgkbDeP2d9w7vP4RVNcicO2P2tMlnsSz6kkTx10y3fVV2mskKafChi0UJ%0AhAsCY1zx2K%2FWvbZhWFUlQPK21paL51zw2MPLBJYz84osTpwKnjFEREsLBNQr%0A1ze0f2JwWrGtxO%2Bo%2FPmWNz%2BpP3zd%2FKsGQHyWg8muMjIGiuC0uNqNyWwdjEMH%0AL2niPBW8RcNEMe%2FUGQg4CaAHO9TSloKEzUJ1DKsphsYXLvJ6sL4KgkVWUBWl%0Ar7dH11S4jpnvCzmUSUEwn4I9l%2BMiaCgyZIpPTFCfaDSn0sN%2FHbn3SX914k0N%0AimHzbvf1l%2F8k70To44%2B3r%2FnNSyInOtz2SE%2FX54ea1j1VU1TkG4yw0Vem3%2F9R%0ALQyTlxAm6k96I0zb2mw2t8spCaLOmQUut8PuMIg87svvyONogUey1tAc3RXp%0Aj9XHkp8dP7yvvfVoskvTzbGlo7512gWWXD97IGoMLnnEkI8GWAzmEGUt0ad2%0A64jLaEaBDZfE6SyONk1d5wybxLlZpDKGgokBQ5NECRNGlpwNx034%2BjjHwVHS%0AAvtXQuBFwu2jh9e8%2FNxTwSLPl54JuoUjv14FwZC6gLxM%2B%2F8MrDypuefc8D90%0Aly95Mw%2BQHOddNFNTeQbZOFYUhSEP9b9csZ0rUuByz0gifKI9RHkVE1%2B6w%2FnW%0AxP5V2%2B7pUhOFhs1ls7slMVBoXui1zzbL4ZFYkVu740aNlPcThsmg5DS4QIVl%0A7Ro2TY3DyVAdMQWC0yn5FBUmBWGViM6SI1LnBSfP2XVDI%2BSDwnHIxleQggt8%0AzCJLoIhr9bN8CTJ0HdO4PAsXgrMmKScYxkMVmIQQoyo7zGBh9SPL4yjJUAlB%0AzrVHOt%2FftPmdv21qj3QrKsnCIgM8q9frnXPB%2BRfPmVFdHrL4Ocz16ojla784%0Aes9DK7v74wBQpk48c%2Fn990Ig9uEnW7ds%2F7TxeEd7tNXuLnho6eJpk8Y1t0eW%0ArVx9%2BFijbqIxNWVPrFrOC%2FzzL7367oeb48mEQaAKz7JnjB13x%2FXXTJwwFob6%0ARX3D7195%2Fe%2B7d6dTCjI0LC7lxZqK8luuu2bW9HOy4ZZJOQg4ENq7eta%2F%2Ff4H%0AmzZ19%2FVphm6oBi63FDhJFLwFrm9MGPeDqy6vKivF25VFZC4ARvF2u0NWMksf%0AXA2TAf4hJWcC3sKld90a8Hjg0j39sfUb%2Frzts90d0c5URtW1DOaXCa4Bv%2BV2%0Au8%2BfNuXS78wbVVVBMzdkNCwpoDcI6uJaItEN72zcuPmjSGcXbHlFhUCTtYkC%0AYHeXu%2BCH11xxxbxZJGmG41dEL0CbTZhM3lHAvPTaGy%2B%2B9hbL85yW9BeV3L7g%0A5unfGM%2FH1BiPzEqHT%2BeZtGykUimJZzH1ZCIJzvk03MztZDhiJGDfHJaTYDtn%0AwewdBp9i0l1Kr03ncfUTMlUVgmVC2rOkWofETRIvwcFKeCM6EjYrWCZppXzd%0AYa40gcUQlcN0qwEhuY23W1kYZgDkEuYQTNnkSCYRXq97%2Fc0Vjz8t2J3BUAmE%0A%2BgUebyadJLpnRnK6IYZ%2Fe9OHv3%2Fl1Xh%2F76K7frzgB5cTOIs%2FegxsrbOnKBDg%0AkHGw8fj0ud8Fs3YVeux2gLaowOePdnbu3LkLW2FLW1N7q%2BAQ%2FQWeSCw%2B9%2Brr%0A4QKeIr%2FN4WZFiXJmosBFouGF9%2F1cFEW4dSYtB%2FyBQnuhjYdojXgI1kil0%2Fet%0A%2BuWd6fTzq1dOO3sSZg9Y%2FmBT820%2Fvjsc7aqqqYb5LvT4sPrbRuk6hpdsKu9a%0A98Z7HZHuXzyw1I0lGhj14g1oGGAO8LW%2BI8wCjMaPxdXuqR1eVnrrzTfAqF74%0A4%2Fq1L708dtx4g7M77IJm2DVdJUPleeJRN%2B%2F47I%2Fr%2FxOG%2B%2FgjKy6YOhnzJADz%0AiHbv1%2Bv%2B9MQzv3Y63aESPyy6z%2BvLKAostqopgig4HK5oV89zL7543qSJZaUB%0Aw%2BIC6TmDWZGc%2B1NU9daf3v%2Fprj2jRo7QNK01xoRKhOE1VbhyTtM5VYMIRUWa%0AcN%2B5v6j0jB1Kipgn50soC765ecNLe58scBQKukSL7DRcw8tkBfyY3AdfCTfC%0A4gdL883xnJgHLsysGGKQJgdnlXW1pKS4s7f3u1dfp6kZjbcRosck%2BWMmEu28%0A%2FOILn1h%2Bn91uiyVTt959774v6qprqnE6T0l3RqPf%2Bub0OTNneH2%2BWH%2FvX9%2F%2F%0A4O%2FbdzgLvb4if1Gg5IU%2FvPzee%2B%2B%2F8MzjRYVuco6QwmOYMqxJMQPlFaqq9HZ1%0AaplUyF%2BkKpnTqytnf3MaHi7P6gYG23oyDp%2Fz%2B4PJeL%2FcFTnnvGkjhw8%2FVHd0%0Ax649jMMJRuxxF2KNCC%2BArff0RqdOmTz2tBFHjjZ%2BtPXvrgKPIEm%2BAo9TkB59%0Aeu2aR1eUBQO98eTDv3yiNy5XDx%2Buamo60T9mxIjL5l9UVlaqKHIsFqtvat6y%0AdduE04bd%2FO8%2FICZIOX0WF4mL2AR5jhtZUWIXeF035Iw2eeyoyy6%2FhK7frTde%0A397WUrt%2F%2F1mTJo4ZNTJYHHQ57bBYLe3tb%2F31g8aW9iK%2FP1RWlojFlq18ZPXK%0Ah6ZMOANcbFNH5PafLGmNdNeMHAXzA2FlT2f7mePPmD9nTllpmaqqXb29e%2FbV%0AdrS13XnbAmyC4GNwFgY7Gk3HyX6iLcVW2Z9I3nHP%2FXtqa6tqalKyEgm3TZ0y%0A5YmH7rVLNlhmPmmmVI6xMRJsjTRmmIkEe%2BDAx5aEa2nYgSIqaiUkFEMZTdc0%0AQdNFDgNFhjcNBes5NcCbCkmmMDRcINuTJC5o9iYX6liVE0OxEKkhYAVB1eGr%0A6PYXY%2BPFNA5WzWJVFccKrNnb05VMJsAKH1%2Fzwv4j9SXFATCPWCzlswtvvPzS%0AsPIQrfcGm509fWpfLH7Dwtuj8YTL7fZ6C5vD0VVPPffIzxeTjBRMlo4LISFG%0AM1G0rfnscWMffGo13v35xVuUyTQ0cFwwwTwvtbYcv3L%2B3GWLf8xki122bN%2B5%0A6P4V7kKPgIU7Zlt7y%2Fw5Mx%2B%2Bd3EurbP3wMEFi%2B6zud1OkYfDuz3cvWvv%2FrK5%0AMxU5pcopXgAEgncsjNnusJWXhUafViWwmGSdcd7Um6%2B92srDkKwJy4AXBNii%0Aczzb2ZmsLC1etWyp2%2BXKJ79IZo5xScyTqx7M%2Fbw3kZCTSUPVR9bUzJwxa81z%0AL%2Fzl%2FU3FQb%2FLYW8Ld27b%2Fum5E86Ip%2BWHVz%2FZEukKFvthQTvCneOHD9vwwrOF%0ABYPKsy6dO2PgJINTUreqZXBgCf90Q%2BRRR1ffzXf%2BpK0jUlVdk8rI4ba2yy%2Ba%0At%2FyeRdbCY9eio7QhcwzHqbxNE04gsrOpqRPthPxSYMEE4XE0g5NYQotkTKy1%0ARjSvRitmMMQjFUrUVyOTQUNELkP4aTxzJlaTsEo64S1wz589y%2B20K4oKTwY7%0ADCtM4KaaOuXss%2Fx%2Bf0dH%2B%2B7P97oAlAq8ahj9vf1XXnTlsPJQztIJY2V6Ctzf%0Au%2FTSx55ZC4cLDEQSxX37DzQ2NZ1WU02FVogIPnp6%2Byorhy36yV1ZExyaauNh%0AVPgEFLp7emFJLpo7L8uZ4WmqqR5WHAiAb4YQH4CaTbLNu3AOk0dkgsusrq5q%0AaG512wpxkxOsDMGbv9gfuO7qK3%2B6bLnIY4pALPA2tEQWLl7W1dMFZ0dFMDD1%0AnMnz5syZPG40k80wZ5PQBlFZ4YNI17TBc4orJylZ19gefu63v9%2B4aTPYAS9J%0AgmQTRAlnOTOKyyEVh4KAWYkmwnrWPXs%2B33%2FgsNPlAdCZTKbAy1z7%2FcuJCQ5N%0AJgwWpSFa2aTqhr%2Bo6FB9w2XX3tjQ3u4pKfGHSlLJlByP%2F%2Bj66267%2Bfr8Fgq8%0AxIi6Yc9ITkbIrPjoXpnBWxFrt7CFskRtSeRFcBbBcLAcDoHnF2C9eFHSxRQT%0As7kdHCma1nBqHckmq5ishodiES%2B6psAZybESwa2AKCCAUU5I4w06%2BHONK5Lp%0AdFmweP68mZWhUK4uDTEMLcejQpLe%2Fr60LOu03svAzZD8%2FqKB855ICekOCAQC%0AkiRpmioJHMky6WDZNLLD4bxJgKypuZwOj8t9kkQNTXHqKi%2BI8GBqRin0eRwO%0Am3VkUNofi6RoBSKWBmB1DMfm9CtZThRzG1mdLFEcERh%2FybyZ37nwgg8%2B3v7b%0Al19tqK%2BHjwCALi8pdrjsOsNv33Pwzfc%2B7I50rHrgZ9deNn%2BwMZiniF6xf4Kz%0A%2FrZFS3bu3jdy7OmhmuGKLPf3xzKZjKEqHM3Ss7j2ih3IpuPrxuJxeBYRQhQ8%0Ao5rL7QyWlHzNkBkvDmYPjYSSAU9VEizXcEkneEbAPMjpcqPBo%2BcBQYMf0NIZ%0A8PoeR0gVOVmL4dDR0DMwTxrYdEaFUBQuDCGzjZeQxMokxZ6BKNfALLEJwJ8U%0AVhqMxpqKpsvwU5LfJiWbCNwWyapzJq6hF%2BChMlo8uyTGSTwtpdpJAAuXwX7R%0AtMQkKOuFOaLMIKajB0vKAD7GWlppHhkmoK21LVdikMPLcNVDX3yhyBmpSMRl%0AmJrmKXCBwVGih4QAHJVMksoE%2FZSri3BBA%2BaVMEnJ0Pp4xAzUzJFsPa2IotLH%0AgTQXrQAm1IGR1RGbFqOLgTzYI5p7wRT4S6eloS2yZduODW%2F9ua%2BnB8ZaDKFB%0AkfeRp57xF%2Fnmnn8emResisEjN3Wr%2BWB295CSTvzto0%2F%2Fel9dw4iRo8Ht9vX3%0Alft8zzz92KgRVbkHWr32xd%2Bte6WiNJjtUoh%2FGAwGeVEwdFng3KJoj0SiR44c%0Am3D66PxowRzyP2MVvJpI58gEJOMJWOExo0Y3HW%2BUZRlCGUWUVq9dE%2B4ML71t%0AIctZ9A3vErwG54zJaU7Rrzv74tnVF53Kxut6Dy%2F%2F28%2F62H6H3YkLfxlWpsIO%0AhlGz68UZSDH1FC5mJcIZIsVW1ISipp18kc4maC%2BdlNKp48pdPhvLIyYrVM1C%0AMFKSgawCZdakeUlu6E7HZUUMgLzzzz239uBvwajA1xaVBV9%2B683qkdVXXTwP%0Ae6Ls29%2F%2F6JP1b%2Fy5OBiC59ZU2JzKJd%2BeW1VRTgQwWLpBsAKOUljGYrmodUC4%0Abg7IhBDlZ02LXsomY5Dl%2Bmn%2FOQxgST4fIUu6YwlfSPEy9ZRY%2BkM01hZzyVkE%0AW%2F62rCkrqbli%2FiVzZy5Ycn%2FdkQNlpaWAA%2BG0CkdIhyWA2Hi4vKrpEG30xvpT%0AqWSRt5DaBEXyADc7OsKSw81hhageS6dmzPoeMUEqGyalrLg%2FBCZosfO2av2M%0As84cN2v6uW%2B89a7DVSBJNr%2FH%2Ffja37gKnBfNuiDryIzcw2FJGlHOqLpKmA8M%0AcMJtkflzZ6649254x9HGllvuWtLd2%2Bv1F5WVDVv36vqu3v5V9y0BEAUogvc5%0APYWitzPdJyEUjYfJ1AOu49g8MSmeP4O1cy5BFOV0nw25YXF1GsagXIkxxvYS%0A%2FjAXU1XZ5AQqPiXtATUmjp8TMxWYZ1W0OAyYwxCUG9Bc5orHkUmbtNFuTtSl%0AnILRpTXgzI3XXgk3efRXT1eMHF0o2l1llU%2Buef6JZ9dOGHdGkdcXj8UAOOoM%0A5ykOYZW2qbc01i%2B44dqb4FPWkYB9qqUOJWqzLPHLmEx%2Bxo%2FWg6Dsth9U6W4O%0AxkcUE%2BvG0LSf5SJz3hOWHecmmeZw148WL9m3t7aqssofDPp9HqfDoRl63dGG%0AaLTTGygqCYZYSWqtOzqqpupCYgrVVRVuh60%2FpRCUKyqq%2FsO7llZVlsOlO6Jd%0AfX19d9%2Bx8JILZ50%2F7ZwPt24P%2BT3gLUqLQy%2B%2B8qcNb74z%2BowxvMCKJkqk5PqW%0AVrw5TTM3VnzGsez9i%2B5UMtrrb%2F1l5Mhqd4HbjnzLn1hz36rVNcOqIGRRVSXW%0An2hpbmltb73zjoWLF9wEjyXwPOFCCBLhOLAw0qkAjayueGnt0zfcfkc0Gin1%0ABysrazZu2ZqIxx5f%2BZBLEli36C0vGK5qXMIw6vqOk2nhyc6npB%2F%2Bi%2FcVx9jt%0AbpszEMsgg9MVRsMabMQQCSwDL%2BBbzWRxosRgZd1UidMgXScxGtD0FLyEoBKG%0AxrMunrdTXjPb6GtQH4xMRsWMFKBQjodVlNOyOhh0568pHGwqA25VX%2FDDaz7Z%0A9O7Y0dW1x44cb%2BuwOwp9vmBTS3Rn7YHDTS0FvoCzoDAc6WiqP1pZGtq88e3F%0AdywksmjsseAWJlHO4spC00yl0qqq5fwtk5dlyWRkVVVxZgfeSUoWAGBZpAEx%0AV1VRISjBwID4NlgqgKH5KVRYFridQdwh%2FFF0LZXGhQW79%2B7dc7hu%2BBkTnJ5A%0AKqM0t3UcOVZf39DIC1ywLIQ0vel42xcHj95xyy3rX%2FxNqMgHcevwqmHLH3wA%0ANlXz8SZAThC0I15oDUcb26Mqw6smeuqZNe3hjhuuvuJ3zz7THm473tisphR3%0AQSEjSoeONuw7WLfnwOFjTc2KqhImGMVicZgiCmdxfYrArX5g6cY3Xykrq9h%2F%0AtKGz43ih3R4qCamZTGNzc2tHJCanPMGQv2L4uldeq2%2FCxpNIJGnNIEnpGAB7%0AVPKtxpgVpYFXn19b4YeoqxGJYpU%2FtPdg3VX%2FduPHW7fhg%2FmF2j%2Bs3PPU6a5y%0A3cZ0x5NgdSLiRRYgoGjHjL1YyHu9Nq%2FNJh7rb2iLRey8jcetGHRS1cORXrXk%0AFAJ7gKADnt6OZjuTATYmw285I5HomVh53fQxSy34blLmeTC0NklqEJ%2B5qLs%2F%0A8deNf2tqaQFcLwrceeeeM3niBPZkbdPyM1T58qGWcLQWAry6Y9Ge7nQ643Q6%0AvT7PyOqqSePHVZYGcxiTWiE4%2Fv5k%2Bs13N7a0tIGnczvs06dOmThuDG5hgrl3%0AlqpqqRmmM%2FIHH31Se%2BiIic8L9pvTzpkyaQJvHcomVeZv3blny87PGIKMR4%2Bo%0A%2BfbsmfAUFFwQ%2BTK%2Fa%2B%2BBTR9toXLjUdXD5s6e4cIhDjre2vbZ5weiXZ19YA7x%0AGDF3xu6EsKB41KhRE04f6y9wmoSUxjpmXHpGxbAo3N23Y%2FfuxuPHE7EYeESb%0A3eF0uQI%2Bz%2FQp36gIBTFkxBCRjcvKZ3v21h07Fg5H%2BuGdsFtYzmazeX1eODFK%0A%2FH4I8KuHVbjtNogUWCKNJXU9iKpW6tsje2v3Nxyrj0Qi2FlyrNPpCPgD1VXV%0A5046s8jjhoGFO3tgJjt7%2BuBMCfi8s86fPmJYBUU6dFfDnG766OPP9x3AnYBZ%0AVFUeOufMcQjwEdxvR8en%2Bzvroum%2BXrmzV%2B1JyXJKk1OGmlLlDOxuwKhIU1RF%0AMnkwUN2GO1baWEHC6m%2FM%2BAowIlJNxhgcWH1zJv7YtCXzq2bTRjz01CQPRjoX%0AMEOTtkR4TUVmtF0KjdjQAHFuKZ%2B%2FOh9q0gaPWKHDD36%2FkW0VY9JmmjgvA2PD%0APgkRGmkgGYo5NktWMcClUys3LKI0bzCmmYuRTVOz2rxZumCqbx%2FQxRBMadLz%0ALiemw8kd0pyZPQkvlKtq1MD94rbGMAxOMFGuNodyNMyJ80NSnVQQh7cA1fWf%0AWvZm5tovU1yLEBoox8L4m6CIk39cM0zW6hiAzOxUE2kzWVmdtLQxyDKzlrKJ%0ArgVJeTJ0SkgzVNzbB1bEyOJwdvBD6YwC%2FpVVVV1DOsroqbiW6E3FujI9nXJv%0AV7ovLicTWrrfTHf1h1VOemjyTeOLJmBgT5rckFJHnZSzmuwJQTFddZQTTFhi%0AXTPbR820YrKvEg5aiz1gjtkOpabVGwfloVhk%2FRy%2FMmkbppxOOE9pQ8Lw7Ils%0AWp1TGCtCR%2FkazWwza8QOoMgBdf9AuTteUeI1jayuxlJ10C3LUQ3bSZpw0HwV%0Am5c5sCogBpQZZDeZFj%2BFfb1JSSG6MegmNwjjnetylJUjMNZOpDNOXReipaUm%0AO0haxuQVWlm7hpS1mnSXUgXDgEyJMms46W0NiQw0Sx6TL%2F8F2ymy%2F16GGhUA%0AAAAASUVORK5CYII%3D%0A
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Bearer <ACCESS_TOKEN>
|
12
|
+
response:
|
13
|
+
status:
|
14
|
+
code: 200
|
15
|
+
message: OK
|
16
|
+
headers:
|
17
|
+
Server:
|
18
|
+
- nginx
|
19
|
+
Date:
|
20
|
+
- Mon, 17 Nov 2014 15:34:19 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/json
|
23
|
+
Content-Length:
|
24
|
+
- '366'
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
P3p:
|
28
|
+
- CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI
|
29
|
+
DSP COR"
|
30
|
+
Set-Cookie:
|
31
|
+
- FormstackAdmin=u1kjhtlil4iugt0t7quu889ic5; path=/api/; secure; HttpOnly
|
32
|
+
Location:
|
33
|
+
- https://www.formstack.com/api/v2/form/<UPLOAD_FORM_ID>/submission/172271098.json
|
34
|
+
Cache-Control:
|
35
|
+
- no-cache
|
36
|
+
X-Robots-Tag:
|
37
|
+
- noindex, nofollow
|
38
|
+
body:
|
39
|
+
encoding: UTF-8
|
40
|
+
string: '{"id":"172271098","message":"<p>The form was submitted successfully.<\/p>","timestamp":"2014-11-17
|
41
|
+
16:34:18","user_agent":"","remote_addr":"89.202.154.170","payment_status":"","form":"<UPLOAD_FORM_ID>","latitude":null,"longitude":null,"data":[{"field":"<UPLOAD_FIELD_IDS>","value":"https:\/\/s3.amazonaws.com\/files.formstack.com\/uploads\/<UPLOAD_FORM_ID>\/<UPLOAD_FIELD_IDS>\/172271098\/fs-logo.png"}]}'
|
42
|
+
http_version:
|
43
|
+
recorded_at: Mon, 17 Nov 2014 15:34:18 GMT
|
44
|
+
recorded_with: VCR 2.9.3
|
data/spec/wrapper_spec.rb
CHANGED
@@ -1,12 +1,23 @@
|
|
1
1
|
require_relative '../lib/formstack/api'
|
2
|
+
require "base64"
|
2
3
|
|
3
4
|
RSpec.describe Formstack::API do
|
4
5
|
|
5
|
-
subject(:wrapper) { Formstack::API.new(access_token) }
|
6
6
|
let(:access_token) { ACCESS_TOKEN }
|
7
|
-
let(:valid_form_id) { FORM_ID }
|
8
7
|
let(:invalid_form_id) { 1234 }
|
9
8
|
let(:inaccessible_form_id) { INACCESSIBLE_FORM_ID }
|
9
|
+
let(:delete_submission_form) { DELETE_SUBMISSION_FORM }
|
10
|
+
let(:submit_form_id) { SUBMIT_FORM_ID }
|
11
|
+
let(:upload_form_id) { UPLOAD_FORM_ID }
|
12
|
+
let(:upload_field_ids) { [UPLOAD_FIELD_IDS] }
|
13
|
+
let(:logo_path) { LOGO_PATH }
|
14
|
+
let(:create_field_form_id) { CREATE_FIELD_FORM_ID }
|
15
|
+
let(:submission_details_id) { SUBMISSION_DETAILS_ID }
|
16
|
+
let(:submission_details_form_id) { SUBMISSION_DETAILS_FORM_ID }
|
17
|
+
let(:edit_submission_field_id) { EDIT_SUBMISSION_FIELD_ID }
|
18
|
+
let(:edit_submission_array_field_id) { EDIT_SUBMISSION_ARRAY_FIELD_ID }
|
19
|
+
|
20
|
+
subject(:wrapper) { Formstack::API.new(access_token) }
|
10
21
|
|
11
22
|
describe '#request', :vcr do
|
12
23
|
|
@@ -38,7 +49,7 @@ RSpec.describe Formstack::API do
|
|
38
49
|
|
39
50
|
describe '#form_details', :vcr do
|
40
51
|
it 'reads a form name' do
|
41
|
-
form = wrapper.form_details(
|
52
|
+
form = wrapper.form_details(submit_form_id)
|
42
53
|
expect(form['name']).to eq('Test Form')
|
43
54
|
end
|
44
55
|
|
@@ -61,8 +72,8 @@ RSpec.describe Formstack::API do
|
|
61
72
|
|
62
73
|
describe '#copy_form', :vcr do
|
63
74
|
it 'adds COPY at the end of the form name' do
|
64
|
-
form = wrapper.form_details(
|
65
|
-
copied_form = wrapper.copy_form(
|
75
|
+
form = wrapper.form_details(submit_form_id)
|
76
|
+
copied_form = wrapper.copy_form(submit_form_id)
|
66
77
|
expect(copied_form['name']).to match(/^#{form['name']} - COPY/)
|
67
78
|
end
|
68
79
|
|
@@ -79,10 +90,10 @@ RSpec.describe Formstack::API do
|
|
79
90
|
|
80
91
|
describe '#form_submissions', :vcr do
|
81
92
|
it 'gets submissions default' do
|
82
|
-
form = wrapper.form_details(
|
93
|
+
form = wrapper.form_details(submit_form_id)
|
83
94
|
submissions_count = form['submissions'].to_i > 25 ? 25 : form['submissions'].to_i
|
84
95
|
|
85
|
-
submissions = wrapper.form_submissions(
|
96
|
+
submissions = wrapper.form_submissions(submit_form_id)
|
86
97
|
expect(submissions_count).to eq(submissions.count)
|
87
98
|
end
|
88
99
|
|
@@ -91,55 +102,241 @@ RSpec.describe Formstack::API do
|
|
91
102
|
end
|
92
103
|
|
93
104
|
it 'raises an error if min time is invalid' do
|
94
|
-
expect{wrapper.form_submissions(
|
105
|
+
expect{wrapper.form_submissions(submit_form_id, '', 'BAD')}.to raise_exception('Invalid value for minTime parameter')
|
95
106
|
end
|
96
107
|
|
97
108
|
it 'raises an error if max time is invalid' do
|
98
|
-
expect{wrapper.form_submissions(
|
109
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', 'BAD')}.to raise_exception('Invalid value for maxTime parameter')
|
99
110
|
end
|
100
111
|
|
101
112
|
it 'raises an error for a search mismatch' do
|
102
113
|
field_ids = [1, 2, 3]
|
103
114
|
field_values = ['test-1', 'test-2']
|
104
|
-
expect{wrapper.form_submissions(
|
115
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', field_ids, field_values)}.to raise_exception('You must have a one to one relationship')
|
105
116
|
end
|
106
117
|
|
107
118
|
it 'raises an error for a search mismatch reversed' do
|
108
119
|
field_ids = [1, 2]
|
109
120
|
field_values = ['test-1', 'test-2', 'test-3']
|
110
|
-
expect{wrapper.form_submissions(
|
121
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', field_ids, field_values)}.to raise_exception('You must have a one to one relationship')
|
111
122
|
end
|
112
123
|
|
113
124
|
it 'raises an error if field ids are not numeric' do
|
114
125
|
field_ids = [1, 'two']
|
115
126
|
field_values = ['test-1', 'test-2']
|
116
|
-
expect{wrapper.form_submissions(
|
127
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', field_ids, field_values)}.to raise_exception('Field IDs must be numeric')
|
117
128
|
end
|
118
129
|
|
119
130
|
it 'raises an error if per_page is not numeric' do
|
120
|
-
expect{wrapper.form_submissions(
|
131
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', [], [], 1, 'fail')}.to raise_exception('The perPage value must be numeric')
|
121
132
|
end
|
122
133
|
|
123
134
|
it 'raises an error if requests per page are less than 1' do
|
124
|
-
expect{wrapper.form_submissions(
|
135
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', [], [], 1, 0)}.to raise_exception('You can only retrieve a minimum of 1 and maximum of 100 submissions per request')
|
125
136
|
end
|
126
137
|
|
127
138
|
it 'raises an error if requests per page are more than 100' do
|
128
|
-
expect{wrapper.form_submissions(
|
139
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', [], [], 1, 101)}.to raise_exception('You can only retrieve a minimum of 1 and maximum of 100 submissions per request')
|
129
140
|
end
|
130
141
|
|
131
142
|
it 'raises an error if page_number is not numeric' do
|
132
|
-
expect{wrapper.form_submissions(
|
143
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', [], [], 'fail')}.to raise_exception('The pageNumber value must be numeric')
|
133
144
|
end
|
134
145
|
|
135
|
-
it 'raises an error if page number is not working'
|
146
|
+
it 'raises an error if page number is not working' do
|
147
|
+
page1 = wrapper.form_submissions(submit_form_id, '', '', '', [], [], 1, 1, 'DESC')
|
148
|
+
page2 = wrapper.form_submissions(submit_form_id, '', '', '', [], [], 2, 1, 'DESC')
|
149
|
+
|
150
|
+
expect(page1).not_to eq(page2)
|
151
|
+
end
|
136
152
|
|
137
153
|
it 'raises an error if the sort parameter is invalid' do
|
138
|
-
expect{wrapper.form_submissions(
|
154
|
+
expect{wrapper.form_submissions(submit_form_id, '', '', '', [], [], 1, 100, 'fail')}.to raise_exception('The sort parameter must be ASC or DESC')
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'returns no data by default' do
|
158
|
+
submission = wrapper.form_submissions(submit_form_id).first
|
159
|
+
|
160
|
+
expect(submission.include?('data')).to eq(false)
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'returns data if specified' do
|
164
|
+
submission = wrapper.form_submissions(submit_form_id, '', '', '', [], [], 1, 100, 'DESC', true).first
|
165
|
+
|
166
|
+
expect(submission.include?('data')).to eq(true)
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
describe '#submit_form', :vcr do
|
172
|
+
let(:submit_form_field_ids) { [28705506, 28706107, 28706112] }
|
173
|
+
let(:submit_form_field_values) { ['short-answer-test', {'first' => 'first-test', 'last' => 'last-test'}, 'this is a long answer field'] }
|
174
|
+
|
175
|
+
it 'creates a submission into a form' do
|
176
|
+
response = wrapper.submit_form(submit_form_id, submit_form_field_ids, submit_form_field_values)
|
177
|
+
expect(response['form'].to_i).to eq(submit_form_id)
|
178
|
+
|
179
|
+
response['data'].each do |row|
|
180
|
+
value = submit_form_field_values.to_a[submit_form_field_ids.index(row['field'].to_i)]
|
181
|
+
if value.class == Hash
|
182
|
+
clean_hash = {}
|
183
|
+
row['value'].to_s.split(/\n/).each do |a|
|
184
|
+
key, val = a.split(' = ')
|
185
|
+
clean_hash[key] = val
|
186
|
+
end
|
187
|
+
expect(clean_hash).to eq(value)
|
188
|
+
else
|
189
|
+
expect(row['value']).to eq(value)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'raises an error if the form id is non numeric' do
|
195
|
+
expect{wrapper.submit_form('fail')}.to raise_exception('Form ID must be numeric')
|
139
196
|
end
|
140
197
|
|
141
|
-
it '
|
142
|
-
|
198
|
+
it 'raises an eror if the timestamp format is invalid' do
|
199
|
+
expect{wrapper.submit_form(submit_form_id, [], [], 'this is not a valid date/time string')}.to raise_exception('You must use a valid Date/Time string formatted in YYYY-MM-DD HH:MM:SS')
|
200
|
+
end
|
201
|
+
|
202
|
+
it 'raises an error for a data array mismatch' do
|
203
|
+
field_ids = [1, 2, 3]
|
204
|
+
field_values = ['a', 'b']
|
205
|
+
expect{wrapper.submit_form(submit_form_id, field_ids, field_values)}.to raise_exception('There must be a one-to-one relationship between Field IDs and their values')
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'raises an error for a data array mismatch reversed' do
|
209
|
+
field_ids = [1, 2]
|
210
|
+
field_values = ['a', 'b', 'c']
|
211
|
+
expect{wrapper.submit_form(submit_form_id, field_ids, field_values)}.to raise_exception('There must be a one-to-one relationship between Field IDs and their values')
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'raises an error if field ids are not numeric' do
|
215
|
+
field_ids = ['one']
|
216
|
+
field_values = ['a']
|
217
|
+
expect{wrapper.submit_form(submit_form_id, field_ids, field_values)}.to raise_exception('Field IDs must be numeric')
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'uploads an image' do
|
221
|
+
logo_data = File.open(logo_path, 'rb') { |file| file.read }
|
222
|
+
upload_field_values = [[logo_data, 'fs-logo.png']]
|
223
|
+
|
224
|
+
upload_field_values.each_with_index do |field, idx|
|
225
|
+
upload_field_values[idx] = "#{upload_field_values[idx][1]};#{Base64.encode64(field[0])}"
|
226
|
+
end
|
227
|
+
|
228
|
+
response = wrapper.submit_form(upload_form_id, upload_field_ids, upload_field_values)
|
229
|
+
|
230
|
+
expect(response['data']).not_to be_empty
|
231
|
+
|
232
|
+
response['data'].each_with_index do |row, idx|
|
233
|
+
expect(row['field'].to_i).to eq(upload_field_ids[idx])
|
234
|
+
expect(row['value']).not_to be_empty
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
describe '#get_submission_details', :vcr do
|
240
|
+
|
241
|
+
it 'gets the right submission from the right form' do
|
242
|
+
submission = wrapper.get_submission_details(submission_details_id)
|
243
|
+
expect(submission['form'].to_i).to eq(submission_details_form_id)
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'raises an error if submission id is not numeric' do
|
247
|
+
expect{wrapper.get_submission_details('FAIL')}.to raise_exception('Submission ID must be numeric')
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
describe '#edit_submission_data', :vcr do
|
252
|
+
|
253
|
+
let(:value) { "test#{Time.now}" }
|
254
|
+
let(:hash_value) { { 'first' => "#{value}-first", 'last' => "#{value}-last" } }
|
255
|
+
let(:edit_submission_id) { get_editable_submission_id }
|
256
|
+
|
257
|
+
it 'edits a submission succesfully' do
|
258
|
+
|
259
|
+
response = wrapper.edit_submission_data(edit_submission_id,
|
260
|
+
[edit_submission_field_id, edit_submission_array_field_id],
|
261
|
+
[value, hash_value])
|
262
|
+
|
263
|
+
expect(response['success'].to_i).to eq(1)
|
264
|
+
expect(response['id'].to_i).to eq(edit_submission_id)
|
265
|
+
|
266
|
+
submission = wrapper.get_submission_details(edit_submission_id)
|
267
|
+
|
268
|
+
submission['data'].each do |row|
|
269
|
+
if row['field'] == edit_submission_field_id
|
270
|
+
expect(row['value']).to eq(value)
|
271
|
+
elsif row['field'] == edit_submission_array_field_id
|
272
|
+
expect(row['value']).to eq(hash_value)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
it 'raises an exception when the submission id is non numeric' do
|
278
|
+
expect{ wrapper.edit_submission_data('FAIL') }.to raise_exception('Submission ID must be numeric')
|
279
|
+
end
|
280
|
+
|
281
|
+
it 'raises an exception with a bad timestamp' do
|
282
|
+
expect{
|
283
|
+
wrapper.edit_submission_data(edit_submission_id, [], [], 'Bad Date String')
|
284
|
+
}.to raise_exception('You must use a valid Date/Time string formatted in YYYY-MM-DD HH:MM:SS')
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'raises an exception when data array and ids don\'t match' do
|
288
|
+
expect{
|
289
|
+
wrapper.edit_submission_data(edit_submission_id, [1,2,3], ['test-1', 'test-2'], 'Bad Date String')
|
290
|
+
}.to raise_exception('You must use a valid Date/Time string formatted in YYYY-MM-DD HH:MM:SS')
|
291
|
+
end
|
292
|
+
|
293
|
+
it 'raises an exception when data array and ids don\'t match reversed' do
|
294
|
+
expect{
|
295
|
+
wrapper.edit_submission_data(edit_submission_id, [1,2], ['test-1', 'test-2', 'test-3'], 'Bad Date String')
|
296
|
+
}.to raise_exception('You must use a valid Date/Time string formatted in YYYY-MM-DD HH:MM:SS')
|
297
|
+
end
|
298
|
+
|
299
|
+
it 'raises an exception if fields are non numeric' do
|
300
|
+
expect{
|
301
|
+
wrapper.edit_submission_data(edit_submission_id, ['fail'], ['test-1'])
|
302
|
+
}.to raise_exception('Field IDs must be numeric')
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
describe '#delete_submission', :vcr do
|
307
|
+
it 'deletes a submission' do
|
308
|
+
submission_to_delete = get_editable_submission_id
|
309
|
+
response = wrapper.delete_submission(submission_to_delete)
|
310
|
+
expect(response['success'].to_i).to eq(1)
|
311
|
+
expect(response['id'].to_i).to eq(submission_to_delete)
|
312
|
+
end
|
313
|
+
|
314
|
+
it 'raises an exception with a non numeric id' do
|
315
|
+
expect{wrapper.delete_submission('FAIL')}.to raise_exception('Submission ID must be numeric')
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
describe '#create_field', :vcr do
|
320
|
+
it 'creates a text field' do
|
321
|
+
field_name = "Test Field #{Time.now}"
|
322
|
+
field = wrapper.create_field(create_field_form_id, 'text', field_name)
|
323
|
+
|
324
|
+
expect(field['label']).to match(/Test Field/)
|
325
|
+
expect(field['type']).to eq('text')
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'creates a field with embeded code' do
|
329
|
+
attributes = { 'text' => '<script type="text/javascript">alert(\'Woop there it is \');</script>' }
|
330
|
+
|
331
|
+
field = wrapper.create_field(create_field_form_id, 'embed', '', false, '', false, attributes)
|
332
|
+
|
333
|
+
expect(field['type']).to eq('embed')
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
# describe '#', :vcr => { :record => :all } do
|
143
338
|
|
339
|
+
def get_editable_submission_id
|
340
|
+
wrapper.form_submissions(delete_submission_form, '', '', '', [], [], 1, 100, 'ASC').first['id'].to_i
|
144
341
|
end
|
145
342
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formstack-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mauro Morales
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -140,17 +140,32 @@ files:
|
|
140
140
|
- formstack-api.gemspec
|
141
141
|
- lib/formstack/api.rb
|
142
142
|
- lib/formstack/api/version.rb
|
143
|
+
- spec/fs-logo.png
|
143
144
|
- spec/spec_helper.rb
|
144
145
|
- spec/support/vcr.rb
|
145
146
|
- spec/vcr/Formstack_API/_copy_form/adds_COPY_at_the_end_of_the_form_name.yml
|
146
147
|
- spec/vcr/Formstack_API/_copy_form/raises_an_error_if_form_id_is_invalid.yml
|
148
|
+
- spec/vcr/Formstack_API/_create_field/creates_a_field_with_embeded_code.yml
|
149
|
+
- spec/vcr/Formstack_API/_create_field/creates_a_text_field.yml
|
150
|
+
- spec/vcr/Formstack_API/_delete_submission/deletes_a_submission.yml
|
151
|
+
- spec/vcr/Formstack_API/_edit_submission_data/edits_a_submission_succesfully.yml
|
152
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_if_fields_are_non_numeric.yml
|
153
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match.yml
|
154
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match_reversed.yml
|
155
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_with_a_bad_timestamp.yml
|
147
156
|
- spec/vcr/Formstack_API/_form_details/reads_a_form_name.yml
|
148
157
|
- spec/vcr/Formstack_API/_form_details/responds_with_an_error_if_form_id_doesnt_exist.yml
|
149
158
|
- spec/vcr/Formstack_API/_form_details/responds_with_an_error_if_you_dont_have_access_to_form.yml
|
150
159
|
- spec/vcr/Formstack_API/_form_submissions/gets_submissions_default.yml
|
160
|
+
- spec/vcr/Formstack_API/_form_submissions/raises_an_error_if_page_number_is_not_working.yml
|
161
|
+
- spec/vcr/Formstack_API/_form_submissions/returns_data_if_specified.yml
|
162
|
+
- spec/vcr/Formstack_API/_form_submissions/returns_no_data_by_default.yml
|
151
163
|
- spec/vcr/Formstack_API/_forms/gets_folders_when_asked.yml
|
152
164
|
- spec/vcr/Formstack_API/_forms/responds_with_no_folders_by_default.yml
|
165
|
+
- spec/vcr/Formstack_API/_get_submission_details/gets_the_right_submission_from_the_right_form.yml
|
153
166
|
- spec/vcr/Formstack_API/_request/raises_an_exception_with_a_bad_token.yml
|
167
|
+
- spec/vcr/Formstack_API/_submit_form/creates_a_submission_into_a_form.yml
|
168
|
+
- spec/vcr/Formstack_API/_submit_form/uploads_an_image.yml
|
154
169
|
- spec/wrapper_spec.rb
|
155
170
|
homepage: https://github.com/LAS-IT/formstack-api
|
156
171
|
licenses:
|
@@ -177,15 +192,30 @@ signing_key:
|
|
177
192
|
specification_version: 4
|
178
193
|
summary: Formstack API V2 Ruby Wrapper.
|
179
194
|
test_files:
|
195
|
+
- spec/fs-logo.png
|
180
196
|
- spec/spec_helper.rb
|
181
197
|
- spec/support/vcr.rb
|
182
198
|
- spec/vcr/Formstack_API/_copy_form/adds_COPY_at_the_end_of_the_form_name.yml
|
183
199
|
- spec/vcr/Formstack_API/_copy_form/raises_an_error_if_form_id_is_invalid.yml
|
200
|
+
- spec/vcr/Formstack_API/_create_field/creates_a_field_with_embeded_code.yml
|
201
|
+
- spec/vcr/Formstack_API/_create_field/creates_a_text_field.yml
|
202
|
+
- spec/vcr/Formstack_API/_delete_submission/deletes_a_submission.yml
|
203
|
+
- spec/vcr/Formstack_API/_edit_submission_data/edits_a_submission_succesfully.yml
|
204
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_if_fields_are_non_numeric.yml
|
205
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match.yml
|
206
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match_reversed.yml
|
207
|
+
- spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_with_a_bad_timestamp.yml
|
184
208
|
- spec/vcr/Formstack_API/_form_details/reads_a_form_name.yml
|
185
209
|
- spec/vcr/Formstack_API/_form_details/responds_with_an_error_if_form_id_doesnt_exist.yml
|
186
210
|
- spec/vcr/Formstack_API/_form_details/responds_with_an_error_if_you_dont_have_access_to_form.yml
|
187
211
|
- spec/vcr/Formstack_API/_form_submissions/gets_submissions_default.yml
|
212
|
+
- spec/vcr/Formstack_API/_form_submissions/raises_an_error_if_page_number_is_not_working.yml
|
213
|
+
- spec/vcr/Formstack_API/_form_submissions/returns_data_if_specified.yml
|
214
|
+
- spec/vcr/Formstack_API/_form_submissions/returns_no_data_by_default.yml
|
188
215
|
- spec/vcr/Formstack_API/_forms/gets_folders_when_asked.yml
|
189
216
|
- spec/vcr/Formstack_API/_forms/responds_with_no_folders_by_default.yml
|
217
|
+
- spec/vcr/Formstack_API/_get_submission_details/gets_the_right_submission_from_the_right_form.yml
|
190
218
|
- spec/vcr/Formstack_API/_request/raises_an_exception_with_a_bad_token.yml
|
219
|
+
- spec/vcr/Formstack_API/_submit_form/creates_a_submission_into_a_form.yml
|
220
|
+
- spec/vcr/Formstack_API/_submit_form/uploads_an_image.yml
|
191
221
|
- spec/wrapper_spec.rb
|