formstack-api 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/lib/formstack/api/version.rb +1 -1
  3. data/lib/formstack/api.rb +169 -1
  4. data/spec/fs-logo.png +0 -0
  5. data/spec/support/vcr.rb +34 -7
  6. data/spec/vcr/Formstack_API/_copy_form/adds_COPY_at_the_end_of_the_form_name.yml +434 -0
  7. data/spec/vcr/Formstack_API/_create_field/creates_a_field_with_embeded_code.yml +43 -0
  8. data/spec/vcr/Formstack_API/_create_field/creates_a_text_field.yml +43 -0
  9. data/spec/vcr/Formstack_API/_delete_submission/deletes_a_submission.yml +142 -0
  10. data/spec/vcr/Formstack_API/_edit_submission_data/edits_a_submission_succesfully.yml +373 -0
  11. data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_if_fields_are_non_numeric.yml +66 -0
  12. data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match.yml +66 -0
  13. data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_when_data_array_and_ids_don_t_match_reversed.yml +66 -0
  14. data/spec/vcr/Formstack_API/_edit_submission_data/raises_an_exception_with_a_bad_timestamp.yml +66 -0
  15. data/spec/vcr/Formstack_API/_form_submissions/gets_submissions_default.yml +388 -245
  16. data/spec/vcr/Formstack_API/_form_submissions/raises_an_error_if_page_number_is_not_working.yml +79 -0
  17. data/spec/vcr/Formstack_API/_form_submissions/returns_data_if_specified.yml +245 -0
  18. data/spec/vcr/Formstack_API/_form_submissions/returns_no_data_by_default.yml +65 -0
  19. data/spec/vcr/Formstack_API/_get_submission_details/gets_the_right_submission_from_the_right_form.yml +43 -0
  20. data/spec/vcr/Formstack_API/_submit_form/creates_a_submission_into_a_form.yml +46 -0
  21. data/spec/vcr/Formstack_API/_submit_form/uploads_an_image.yml +44 -0
  22. data/spec/wrapper_spec.rb +217 -20
  23. 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(valid_form_id)
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(valid_form_id)
65
- copied_form = wrapper.copy_form(valid_form_id)
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(valid_form_id)
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(valid_form_id)
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(valid_form_id, '', 'BAD')}.to raise_exception('Invalid value for minTime parameter')
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(valid_form_id, '', '', 'BAD')}.to raise_exception('Invalid value for maxTime parameter')
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(valid_form_id, '', '', '', field_ids, field_values)}.to raise_exception('You must have a one to one relationship')
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(valid_form_id, '', '', '', field_ids, field_values)}.to raise_exception('You must have a one to one relationship')
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(valid_form_id, '', '', '', field_ids, field_values)}.to raise_exception('Field IDs must be numeric')
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(valid_form_id, '', '', '', [], [], 1, 'fail')}.to raise_exception('The perPage value must be numeric')
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(valid_form_id, '', '', '', [], [], 1, 0)}.to raise_exception('You can only retrieve a minimum of 1 and maximum of 100 submissions per request')
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(valid_form_id, '', '', '', [], [], 1, 101)}.to raise_exception('You can only retrieve a minimum of 1 and maximum of 100 submissions per request')
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(valid_form_id, '', '', '', [], [], 'fail')}.to raise_exception('The pageNumber value must be numeric')
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(valid_form_id, '', '', '', [], [], 1, 100, 'fail')}.to raise_exception('The sort parameter must be ASC or DESC')
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 'returns false with no data'
142
- it 'returns true with data'
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.1
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 00:00:00.000000000 Z
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