pagseguro-sdk 2.6.2

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 (324) hide show
  1. checksums.yaml +7 -0
  2. data/.github/.gitignore +204 -0
  3. data/.github/ISSUE_TEMPLATE/relatorio-de-bug.md +29 -0
  4. data/.github/workflows/codacy-analysis.yml +46 -0
  5. data/.gitignore +28 -0
  6. data/.rspec +1 -0
  7. data/.travis.yml +13 -0
  8. data/CHANGELOG.md +95 -0
  9. data/CONTRIBUTING.md +39 -0
  10. data/Dockerfile +20 -0
  11. data/Gemfile +2 -0
  12. data/LICENSE-2.0.txt +177 -0
  13. data/README.md +436 -0
  14. data/Rakefile +5 -0
  15. data/docker-compose.yml +5 -0
  16. data/docs/transparent_checkout.md +201 -0
  17. data/examples/authorization/create_authorization.rb +32 -0
  18. data/examples/authorization/create_authorization_with_account.rb +56 -0
  19. data/examples/authorization/search/search_authorization_by_code.rb +29 -0
  20. data/examples/authorization/search/search_authorization_by_date.rb +35 -0
  21. data/examples/authorization/search/search_authorization_by_notification_code.rb +29 -0
  22. data/examples/authorization/search/search_authorization_by_reference.rb +31 -0
  23. data/examples/boot.rb +26 -0
  24. data/examples/checkout/create_payment_request.rb +63 -0
  25. data/examples/checkout/search/search_abandoned_transactions.rb +41 -0
  26. data/examples/checkout/search/search_transaction_by_code.rb +76 -0
  27. data/examples/checkout/search/search_transaction_by_notification_code.rb +76 -0
  28. data/examples/checkout/search/search_transaction_by_reference.rb +36 -0
  29. data/examples/checkout/search/search_transactions_by_date.rb +45 -0
  30. data/examples/create_session.rb +19 -0
  31. data/examples/direct/create_transaction_using_boleto.rb +100 -0
  32. data/examples/direct/create_transaction_using_credit_card.rb +128 -0
  33. data/examples/direct/create_transaction_using_online_debit.rb +104 -0
  34. data/examples/get_installments.rb +40 -0
  35. data/examples/preapproval/cancel_preapproval.rb +26 -0
  36. data/examples/preapproval/change_preapproval_payment.rb +50 -0
  37. data/examples/preapproval/change_preapproval_status.rb +29 -0
  38. data/examples/preapproval/charge_preapproval.rb +36 -0
  39. data/examples/preapproval/create_preapproval.rb +68 -0
  40. data/examples/preapproval/create_preapproval_auto.rb +53 -0
  41. data/examples/preapproval/create_preapproval_discount.rb +30 -0
  42. data/examples/preapproval/create_preapproval_manual.rb +58 -0
  43. data/examples/preapproval/create_preapproval_transparent.rb +41 -0
  44. data/examples/preapproval/preapproval_retry.rb +29 -0
  45. data/examples/preapproval/search/search_by_date_interval.rb +45 -0
  46. data/examples/preapproval/search/search_by_days_interval.rb +46 -0
  47. data/examples/preapproval/search/search_by_notification_code.rb +50 -0
  48. data/examples/preapproval/search/search_by_subscription_code.rb +50 -0
  49. data/examples/preapproval/search/search_subscription_payment_orders.rb +53 -0
  50. data/examples/request_transaction_cancellation.rb +19 -0
  51. data/examples/split_payment/create_authorization.rb +32 -0
  52. data/examples/split_payment/create_payment_request.rb +71 -0
  53. data/examples/split_payment/create_transaction_using_boleto.rb +118 -0
  54. data/examples/split_payment/create_transaction_using_credit_card.rb +152 -0
  55. data/lib/pagseguro-oficial.rb +1 -0
  56. data/lib/pagseguro.rb +221 -0
  57. data/lib/pagseguro/account.rb +29 -0
  58. data/lib/pagseguro/account_credentials.rb +14 -0
  59. data/lib/pagseguro/address.rb +40 -0
  60. data/lib/pagseguro/application_credentials.rb +18 -0
  61. data/lib/pagseguro/authorization.rb +61 -0
  62. data/lib/pagseguro/authorization/collection.rb +28 -0
  63. data/lib/pagseguro/authorization/request_serializer.rb +24 -0
  64. data/lib/pagseguro/authorization/response.rb +49 -0
  65. data/lib/pagseguro/authorization/response_serializer.rb +40 -0
  66. data/lib/pagseguro/authorization_request.rb +84 -0
  67. data/lib/pagseguro/authorization_request/request_serializer.rb +142 -0
  68. data/lib/pagseguro/authorization_request/response.rb +26 -0
  69. data/lib/pagseguro/authorization_request/response_serializer.rb +18 -0
  70. data/lib/pagseguro/bank.rb +8 -0
  71. data/lib/pagseguro/boleto_transaction_request.rb +8 -0
  72. data/lib/pagseguro/company.rb +41 -0
  73. data/lib/pagseguro/config.rb +34 -0
  74. data/lib/pagseguro/credit_card_transaction_request.rb +39 -0
  75. data/lib/pagseguro/creditor_fee.rb +23 -0
  76. data/lib/pagseguro/document.rb +23 -0
  77. data/lib/pagseguro/documents.rb +5 -0
  78. data/lib/pagseguro/errors.rb +57 -0
  79. data/lib/pagseguro/exceptions.rb +3 -0
  80. data/lib/pagseguro/extensions/collection_object.rb +34 -0
  81. data/lib/pagseguro/extensions/credentiable.rb +17 -0
  82. data/lib/pagseguro/extensions/ensure_type.rb +9 -0
  83. data/lib/pagseguro/extensions/mass_assignment.rb +11 -0
  84. data/lib/pagseguro/holder.rb +36 -0
  85. data/lib/pagseguro/installment.rb +57 -0
  86. data/lib/pagseguro/installment/collection.rb +25 -0
  87. data/lib/pagseguro/installment/request_serializer.rb +24 -0
  88. data/lib/pagseguro/installment/response.rb +37 -0
  89. data/lib/pagseguro/installment/response_serializer.rb +22 -0
  90. data/lib/pagseguro/item.rb +34 -0
  91. data/lib/pagseguro/items.rb +23 -0
  92. data/lib/pagseguro/manual_subscription_charger.rb +59 -0
  93. data/lib/pagseguro/manual_subscription_charger/request_serializer.rb +50 -0
  94. data/lib/pagseguro/manual_subscription_charger/response.rb +36 -0
  95. data/lib/pagseguro/manual_subscription_charger/response_serializer.rb +17 -0
  96. data/lib/pagseguro/notification.rb +11 -0
  97. data/lib/pagseguro/notification/authorization.rb +15 -0
  98. data/lib/pagseguro/notification/transaction.rb +15 -0
  99. data/lib/pagseguro/online_debit_transaction_request.rb +17 -0
  100. data/lib/pagseguro/partner.rb +20 -0
  101. data/lib/pagseguro/payment_method.rb +39 -0
  102. data/lib/pagseguro/payment_release.rb +21 -0
  103. data/lib/pagseguro/payment_releases.rb +28 -0
  104. data/lib/pagseguro/payment_request.rb +117 -0
  105. data/lib/pagseguro/payment_request/request_serializer.rb +203 -0
  106. data/lib/pagseguro/payment_request/response.rb +35 -0
  107. data/lib/pagseguro/payment_status.rb +39 -0
  108. data/lib/pagseguro/permission.rb +13 -0
  109. data/lib/pagseguro/person.rb +40 -0
  110. data/lib/pagseguro/phone.rb +20 -0
  111. data/lib/pagseguro/phones.rb +5 -0
  112. data/lib/pagseguro/receiver.rb +20 -0
  113. data/lib/pagseguro/receiver_split.rb +15 -0
  114. data/lib/pagseguro/request.rb +170 -0
  115. data/lib/pagseguro/sender.rb +53 -0
  116. data/lib/pagseguro/session.rb +34 -0
  117. data/lib/pagseguro/session/response.rb +32 -0
  118. data/lib/pagseguro/session/response_serializer.rb +18 -0
  119. data/lib/pagseguro/shipping.rb +57 -0
  120. data/lib/pagseguro/subscription.rb +132 -0
  121. data/lib/pagseguro/subscription/request_serializer.rb +129 -0
  122. data/lib/pagseguro/subscription/response.rb +49 -0
  123. data/lib/pagseguro/subscription/response_serializer.rb +62 -0
  124. data/lib/pagseguro/subscription/subscription_search.rb +135 -0
  125. data/lib/pagseguro/subscription_canceller.rb +30 -0
  126. data/lib/pagseguro/subscription_canceller/response.rb +34 -0
  127. data/lib/pagseguro/subscription_change_payment.rb +46 -0
  128. data/lib/pagseguro/subscription_change_payment/request_serializer.rb +80 -0
  129. data/lib/pagseguro/subscription_change_payment/response.rb +26 -0
  130. data/lib/pagseguro/subscription_change_status.rb +50 -0
  131. data/lib/pagseguro/subscription_change_status/request_serializer.rb +28 -0
  132. data/lib/pagseguro/subscription_change_status/response.rb +26 -0
  133. data/lib/pagseguro/subscription_discount.rb +41 -0
  134. data/lib/pagseguro/subscription_discount/request_serializer.rb +34 -0
  135. data/lib/pagseguro/subscription_discount/response.rb +34 -0
  136. data/lib/pagseguro/subscription_payment_method.rb +21 -0
  137. data/lib/pagseguro/subscription_payment_order.rb +57 -0
  138. data/lib/pagseguro/subscription_payment_order/response.rb +37 -0
  139. data/lib/pagseguro/subscription_payment_order/response_serializer.rb +51 -0
  140. data/lib/pagseguro/subscription_plan.rb +69 -0
  141. data/lib/pagseguro/subscription_plan/request_serializer.rb +81 -0
  142. data/lib/pagseguro/subscription_plan/response.rb +36 -0
  143. data/lib/pagseguro/subscription_plan/response_serializer.rb +17 -0
  144. data/lib/pagseguro/subscription_retry.rb +35 -0
  145. data/lib/pagseguro/subscription_retry/response.rb +34 -0
  146. data/lib/pagseguro/subscription_search_payment_orders.rb +131 -0
  147. data/lib/pagseguro/subscription_transaction.rb +29 -0
  148. data/lib/pagseguro/subscription_transactions.rb +5 -0
  149. data/lib/pagseguro/transaction.rb +215 -0
  150. data/lib/pagseguro/transaction/collection.rb +20 -0
  151. data/lib/pagseguro/transaction/response.rb +45 -0
  152. data/lib/pagseguro/transaction/search.rb +121 -0
  153. data/lib/pagseguro/transaction/search/search_abandoned.rb +20 -0
  154. data/lib/pagseguro/transaction/search/search_by_date.rb +16 -0
  155. data/lib/pagseguro/transaction/search/search_by_reference.rb +13 -0
  156. data/lib/pagseguro/transaction/serializer.rb +181 -0
  157. data/lib/pagseguro/transaction_cancellation.rb +37 -0
  158. data/lib/pagseguro/transaction_cancellation/request_serializer.rb +18 -0
  159. data/lib/pagseguro/transaction_cancellation/response.rb +33 -0
  160. data/lib/pagseguro/transaction_cancellation/response_serializer.rb +17 -0
  161. data/lib/pagseguro/transaction_installment.rb +11 -0
  162. data/lib/pagseguro/transaction_refund.rb +44 -0
  163. data/lib/pagseguro/transaction_refund/request_serializer.rb +24 -0
  164. data/lib/pagseguro/transaction_refund/response.rb +33 -0
  165. data/lib/pagseguro/transaction_refund/response_serializer.rb +17 -0
  166. data/lib/pagseguro/transaction_request.rb +165 -0
  167. data/lib/pagseguro/transaction_request/request_serializer.rb +311 -0
  168. data/lib/pagseguro/transaction_request/response.rb +33 -0
  169. data/lib/pagseguro/transaction_request/response_serializer.rb +117 -0
  170. data/lib/pagseguro/transaction_status.rb +14 -0
  171. data/lib/pagseguro/version.rb +3 -0
  172. data/locales/pt-BR.yml +130 -0
  173. data/pagseguro-oficial.gemspec +31 -0
  174. data/spec/fixtures/authorization/find_authorization.xml +17 -0
  175. data/spec/fixtures/authorization/search_authorization.xml +47 -0
  176. data/spec/fixtures/authorization_request/authorization_request.xml +11 -0
  177. data/spec/fixtures/authorization_request/authorization_request_with_account.xml +47 -0
  178. data/spec/fixtures/authorization_request/success.xml +4 -0
  179. data/spec/fixtures/by_date/success.xml +85 -0
  180. data/spec/fixtures/installment/success.xml +24 -0
  181. data/spec/fixtures/invalid_code.xml +7 -0
  182. data/spec/fixtures/manual_subscription_charger/fail.xml +6 -0
  183. data/spec/fixtures/manual_subscription_charger/success.xml +4 -0
  184. data/spec/fixtures/payment_request/failure.xml +7 -0
  185. data/spec/fixtures/payment_request/success.xml +5 -0
  186. data/spec/fixtures/refund/success.xml +2 -0
  187. data/spec/fixtures/session/success.xml +4 -0
  188. data/spec/fixtures/subscription/fail.xml +6 -0
  189. data/spec/fixtures/subscription/find_success.xml +28 -0
  190. data/spec/fixtures/subscription/search_success.xml +18 -0
  191. data/spec/fixtures/subscription/success.xml +4 -0
  192. data/spec/fixtures/subscription_canceller/fail.xml +6 -0
  193. data/spec/fixtures/subscription_change_payment/fail.xml +7 -0
  194. data/spec/fixtures/subscription_change_status/fail.xml +7 -0
  195. data/spec/fixtures/subscription_discount/fail.xml +6 -0
  196. data/spec/fixtures/subscription_payment_order/success.xml +18 -0
  197. data/spec/fixtures/subscription_plan/fail.xml +6 -0
  198. data/spec/fixtures/subscription_plan/success.xml +4 -0
  199. data/spec/fixtures/subscription_retry/fail.xml +7 -0
  200. data/spec/fixtures/subscription_search_payment_orders/success.xml +43 -0
  201. data/spec/fixtures/transaction_cancellation/success.xml +2 -0
  202. data/spec/fixtures/transaction_request/success.xml +58 -0
  203. data/spec/fixtures/transactions/additional.xml +53 -0
  204. data/spec/fixtures/transactions/search.xml +40 -0
  205. data/spec/fixtures/transactions/success.xml +75 -0
  206. data/spec/fixtures/transactions/without_status_and_type.xml +71 -0
  207. data/spec/pagseguro/account_credentials_spec.rb +10 -0
  208. data/spec/pagseguro/account_spec.rb +27 -0
  209. data/spec/pagseguro/address_spec.rb +17 -0
  210. data/spec/pagseguro/application_credentials_spec.rb +11 -0
  211. data/spec/pagseguro/authorization/collection_spec.rb +49 -0
  212. data/spec/pagseguro/authorization/request_serializer_spec.rb +10 -0
  213. data/spec/pagseguro/authorization/response_serializer_spec.rb +19 -0
  214. data/spec/pagseguro/authorization/response_spec.rb +90 -0
  215. data/spec/pagseguro/authorization_request/request_serializer_spec.rb +323 -0
  216. data/spec/pagseguro/authorization_request/response_serializer_spec.rb +15 -0
  217. data/spec/pagseguro/authorization_request/response_spec.rb +36 -0
  218. data/spec/pagseguro/authorization_request_spec.rb +127 -0
  219. data/spec/pagseguro/authorization_spec.rb +111 -0
  220. data/spec/pagseguro/bank_spec.rb +5 -0
  221. data/spec/pagseguro/boleto_transaction_request_spec.rb +9 -0
  222. data/spec/pagseguro/company_spec.rb +12 -0
  223. data/spec/pagseguro/config_spec.rb +5 -0
  224. data/spec/pagseguro/credit_card_transaction_request_spec.rb +36 -0
  225. data/spec/pagseguro/creditor_fee_spec.rb +10 -0
  226. data/spec/pagseguro/document_spec.rb +21 -0
  227. data/spec/pagseguro/documents_spec.rb +37 -0
  228. data/spec/pagseguro/errors_spec.rb +145 -0
  229. data/spec/pagseguro/extensions/collection_object_spec.rb +77 -0
  230. data/spec/pagseguro/features/create_session_spec.rb +52 -0
  231. data/spec/pagseguro/features/create_transaction_request_spec.rb +58 -0
  232. data/spec/pagseguro/holder_spec.rb +10 -0
  233. data/spec/pagseguro/installment/collection_spec.rb +43 -0
  234. data/spec/pagseguro/installment/request_serializer_spec.rb +16 -0
  235. data/spec/pagseguro/installment/response_serializer_spec.rb +33 -0
  236. data/spec/pagseguro/installment/response_spec.rb +56 -0
  237. data/spec/pagseguro/installment_spec.rb +50 -0
  238. data/spec/pagseguro/item_spec.rb +20 -0
  239. data/spec/pagseguro/items_spec.rb +148 -0
  240. data/spec/pagseguro/manual_subscription_charger/request_serializer_spec.rb +79 -0
  241. data/spec/pagseguro/manual_subscription_charger/response_serializer_spec.rb +10 -0
  242. data/spec/pagseguro/manual_subscription_charger/response_spec.rb +65 -0
  243. data/spec/pagseguro/manual_subscription_charger_spec.rb +68 -0
  244. data/spec/pagseguro/notification_spec.rb +6 -0
  245. data/spec/pagseguro/online_debit_transaction_request_spec.rb +18 -0
  246. data/spec/pagseguro/pagseguro_spec.rb +82 -0
  247. data/spec/pagseguro/partner_spec.rb +8 -0
  248. data/spec/pagseguro/payment_method_spec.rb +42 -0
  249. data/spec/pagseguro/payment_release_spec.rb +9 -0
  250. data/spec/pagseguro/payment_releases_spec.rb +34 -0
  251. data/spec/pagseguro/payment_request/request_serializer_spec.rb +283 -0
  252. data/spec/pagseguro/payment_request/response_spec.rb +13 -0
  253. data/spec/pagseguro/payment_request_spec.rb +148 -0
  254. data/spec/pagseguro/payment_status_spec.rb +33 -0
  255. data/spec/pagseguro/permission_spec.rb +7 -0
  256. data/spec/pagseguro/person_spec.rb +10 -0
  257. data/spec/pagseguro/phone_spec.rb +6 -0
  258. data/spec/pagseguro/phones_spec.rb +38 -0
  259. data/spec/pagseguro/receiver_spec.rb +7 -0
  260. data/spec/pagseguro/receiver_split_spec.rb +7 -0
  261. data/spec/pagseguro/request_spec.rb +114 -0
  262. data/spec/pagseguro/sender_spec.rb +25 -0
  263. data/spec/pagseguro/session/response_serializer_spec.rb +12 -0
  264. data/spec/pagseguro/session/response_spec.rb +57 -0
  265. data/spec/pagseguro/session_spec.rb +45 -0
  266. data/spec/pagseguro/shipping_spec.rb +40 -0
  267. data/spec/pagseguro/subscription/request_serializer_spec.rb +233 -0
  268. data/spec/pagseguro/subscription/response_serializer_spec.rb +46 -0
  269. data/spec/pagseguro/subscription/response_spec.rb +79 -0
  270. data/spec/pagseguro/subscription/subscription_search_spec.rb +154 -0
  271. data/spec/pagseguro/subscription_canceller/response_spec.rb +58 -0
  272. data/spec/pagseguro/subscription_canceller_spec.rb +57 -0
  273. data/spec/pagseguro/subscription_change_payment/request_serializer_spec.rb +150 -0
  274. data/spec/pagseguro/subscription_change_payment/response_spec.rb +41 -0
  275. data/spec/pagseguro/subscription_change_payment_spec.rb +60 -0
  276. data/spec/pagseguro/subscription_change_status/request_serializer_spec.rb +19 -0
  277. data/spec/pagseguro/subscription_change_status/response_spec.rb +41 -0
  278. data/spec/pagseguro/subscription_change_status_spec.rb +53 -0
  279. data/spec/pagseguro/subscription_discount/request_serializer_spec.rb +27 -0
  280. data/spec/pagseguro/subscription_discount/response_spec.rb +58 -0
  281. data/spec/pagseguro/subscription_discount_spec.rb +60 -0
  282. data/spec/pagseguro/subscription_payment_method_spec.rb +10 -0
  283. data/spec/pagseguro/subscription_payment_order/response_serializer_spec.rb +24 -0
  284. data/spec/pagseguro/subscription_payment_order/response_spec.rb +55 -0
  285. data/spec/pagseguro/subscription_payment_order_spec.rb +27 -0
  286. data/spec/pagseguro/subscription_plan/request_serializer_spec.rb +253 -0
  287. data/spec/pagseguro/subscription_plan/response_serializer_spec.rb +10 -0
  288. data/spec/pagseguro/subscription_plan/response_spec.rb +65 -0
  289. data/spec/pagseguro/subscription_plan_spec.rb +118 -0
  290. data/spec/pagseguro/subscription_retry/response_spec.rb +58 -0
  291. data/spec/pagseguro/subscription_retry_spec.rb +62 -0
  292. data/spec/pagseguro/subscription_search_payment_order_spec.rb +129 -0
  293. data/spec/pagseguro/subscription_spec.rb +137 -0
  294. data/spec/pagseguro/subscription_transaction_spec.rb +24 -0
  295. data/spec/pagseguro/subscription_transactions_spec.rb +37 -0
  296. data/spec/pagseguro/transaction/collection_spec.rb +43 -0
  297. data/spec/pagseguro/transaction/response_spec.rb +60 -0
  298. data/spec/pagseguro/transaction/search/search_abandoned_spec.rb +55 -0
  299. data/spec/pagseguro/transaction/search/search_by_date_spec.rb +28 -0
  300. data/spec/pagseguro/transaction/search/search_by_reference_spec.rb +21 -0
  301. data/spec/pagseguro/transaction/search_spec.rb +133 -0
  302. data/spec/pagseguro/transaction/serializer_spec.rb +86 -0
  303. data/spec/pagseguro/transaction_cancellation/request_serializer_spec.rb +13 -0
  304. data/spec/pagseguro/transaction_cancellation/response_serializer_spec.rb +9 -0
  305. data/spec/pagseguro/transaction_cancellation/response_spec.rb +45 -0
  306. data/spec/pagseguro/transaction_cancellation_spec.rb +60 -0
  307. data/spec/pagseguro/transaction_installment_spec.rb +6 -0
  308. data/spec/pagseguro/transaction_refund/request_serializer_spec.rb +15 -0
  309. data/spec/pagseguro/transaction_refund/response_serializer_spec.rb +12 -0
  310. data/spec/pagseguro/transaction_refund/response_spec.rb +39 -0
  311. data/spec/pagseguro/transaction_refund_spec.rb +71 -0
  312. data/spec/pagseguro/transaction_request/request_serializer_spec.rb +677 -0
  313. data/spec/pagseguro/transaction_request/response_serializer_spec.rb +52 -0
  314. data/spec/pagseguro/transaction_request/response_spec.rb +63 -0
  315. data/spec/pagseguro/transaction_request_spec.rb +156 -0
  316. data/spec/pagseguro/transaction_spec.rb +265 -0
  317. data/spec/pagseguro/transaction_status_spec.rb +7 -0
  318. data/spec/spec_helper.rb +35 -0
  319. data/spec/support/ensure_type_macro.rb +35 -0
  320. data/spec/support/helpers.rb +14 -0
  321. data/spec/support/mass_assignment_macro.rb +11 -0
  322. data/spec/support/shared_examples_for_configuration.rb +10 -0
  323. data/transaction/transaction_refund.rb +25 -0
  324. metadata +641 -0
@@ -0,0 +1,132 @@
1
+ module PagSeguro
2
+ # It lets you create a subscription without going through PagSeguro screens.
3
+ class Subscription
4
+ include Extensions::MassAssignment
5
+ include Extensions::EnsureType
6
+ include Extensions::Credentiable
7
+
8
+ API_VERSION = :v2
9
+ TEN_DAYS_IN_SECONDS = 864_000
10
+
11
+ # Set the name
12
+ attr_accessor :name
13
+
14
+ # Set the date
15
+ attr_accessor :date
16
+
17
+ # Set the tracker
18
+ attr_accessor :tracker
19
+
20
+ # Set the status
21
+ attr_accessor :status
22
+
23
+ # Set the last event date
24
+ attr_accessor :last_event_date
25
+
26
+ # Set the charge
27
+ attr_accessor :charge
28
+
29
+ # Set the plan
30
+ attr_accessor :plan
31
+
32
+ # Set the reference
33
+ attr_accessor :reference
34
+
35
+ # Get the sender
36
+ attr_reader :sender
37
+
38
+ # Get the payment method
39
+ attr_reader :payment_method
40
+
41
+ # The code of a created to the subscription, must be saved
42
+ attr_accessor :code
43
+
44
+ # Set the sender
45
+ def sender=(sender)
46
+ @sender = ensure_type(Sender, sender)
47
+ end
48
+
49
+ # Set the payment method
50
+ def payment_method=(payment_method)
51
+ @payment_method = ensure_type(SubscriptionPaymentMethod, payment_method)
52
+ end
53
+
54
+ def update_attributes(attrs)
55
+ attrs.each {|name, value| send("#{name}=", value) }
56
+ end
57
+
58
+ def create
59
+ request = Request.post_xml('pre-approvals', nil, credentials, xml_params, extra_options)
60
+ Response.new(request, self).serialize
61
+ self
62
+ end
63
+
64
+ def errors
65
+ @errors ||= Errors.new
66
+ end
67
+
68
+ # Find subscription by notification code
69
+ def self.find_by_notification_code(code, options={})
70
+ load_from_response send_request("pre-approvals/notifications/#{code}", options[:credentials])
71
+ end
72
+
73
+ # Find subscription by subscription code
74
+ def self.find_by_code(code, options={})
75
+ load_from_response send_request("pre-approvals/#{code}", options[:credentials])
76
+ end
77
+
78
+ def self.search_by_days_interval(options={})
79
+ # Default options
80
+ options = {
81
+ interval: 30,
82
+ per_page: 50,
83
+ page: 0
84
+ }.merge(options)
85
+
86
+ SubscriptionSearch.new('pre-approvals/notifications', options)
87
+ end
88
+
89
+ def self.search_by_date_interval(options={})
90
+ # Default options
91
+ options = {
92
+ starts_at: Time.now,
93
+ ends_at: Time.now - TEN_DAYS_IN_SECONDS,
94
+ per_page: 50,
95
+ page: 0
96
+ }.merge(options)
97
+
98
+ SubscriptionSearch.new('pre-approvals', options)
99
+ end
100
+
101
+ def self.load_from_xml(xml)
102
+ new ResponseSerializer.new(xml).serialize_from_search
103
+ end
104
+
105
+ private
106
+
107
+ # Serialize the HTTP response into data.
108
+ def self.load_from_response(request) # :nodoc:
109
+ subscription = new
110
+ Response.new(request, subscription).serialize(:search)
111
+
112
+ subscription
113
+ end
114
+
115
+ # Send a get request to API version, with the path given
116
+ def self.send_request(path, credentials)
117
+ Request.get_with_auth_on_url(path, API_VERSION, credentials)
118
+ end
119
+
120
+ def xml_params
121
+ RequestSerializer.new(self).serialize
122
+ end
123
+
124
+ def extra_options
125
+ { headers: { "Accept" => "application/vnd.pagseguro.com.br.v1+xml;charset=ISO-8859-1" }}
126
+ end
127
+
128
+ def after_initialize
129
+ @errors = Errors.new
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,129 @@
1
+ module PagSeguro
2
+ class Subscription
3
+ class RequestSerializer
4
+ # Get the object
5
+ attr_reader :object
6
+
7
+ def initialize(object)
8
+ @object = object
9
+ end
10
+
11
+ def serialize
12
+ build.to_xml(save_with:
13
+ Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS |
14
+ Nokogiri::XML::Node::SaveOptions::FORMAT
15
+ )
16
+ end
17
+
18
+ private
19
+
20
+ def build
21
+ Nokogiri::XML::Builder.new(encoding: PagSeguro.encoding) do |xml|
22
+ xml.send(:directPreApproval) {
23
+ xml.send(:plan, object.plan) if object.plan
24
+ xml.send(:reference, object.reference) if object.reference
25
+ serialize_sender(xml, object.sender)
26
+ serialize_payment_method(xml, object.payment_method)
27
+ }
28
+ end
29
+ end
30
+
31
+ def serialize_sender(xml, sender)
32
+ return unless sender
33
+
34
+ xml.send(:sender) {
35
+ xml.send(:name, sender.name) if sender.name
36
+ xml.send(:email, sender.email) if sender.email
37
+ xml.send(:ip, sender.ip) if sender.ip
38
+ xml.send(:hash_, sender.hash) if sender.hash
39
+
40
+ serialize_phone(xml, sender.phone)
41
+ serialize_address(xml, sender.address)
42
+ serialize_documents(xml, sender.documents)
43
+ }
44
+ end
45
+
46
+ def serialize_phone(xml, phone)
47
+ return unless phone
48
+
49
+ xml.send(:phone) {
50
+ xml.send(:areaCode, phone.area_code)
51
+ xml.send(:number, phone.number)
52
+ }
53
+ end
54
+
55
+ def serialize_address(xml, address)
56
+ return unless address
57
+
58
+ xml.send(:address) {
59
+ xml.send(:street, address.street) if address.street
60
+ xml.send(:number, address.number) if address.number
61
+ xml.send(:complement, address.complement) if address.complement
62
+ xml.send(:district, address.district) if address.district
63
+ xml.send(:city, address.city) if address.city
64
+ xml.send(:state, address.state) if address.state
65
+ xml.send(:country, address.country) if address.country
66
+ xml.send(:postalCode, address.postal_code) if address.postal_code
67
+ }
68
+ end
69
+
70
+ def serialize_billing_address(xml, address)
71
+ return unless address
72
+
73
+ xml.send(:billingAddress) {
74
+ xml.send(:street, address.street) if address.street
75
+ xml.send(:number, address.number) if address.number
76
+ xml.send(:complement, address.complement) if address.complement
77
+ xml.send(:district, address.district) if address.district
78
+ xml.send(:city, address.city) if address.city
79
+ xml.send(:state, address.state) if address.state
80
+ xml.send(:country, address.country) if address.country
81
+ xml.send(:postalCode, address.postal_code) if address.postal_code
82
+ }
83
+ end
84
+
85
+ def serialize_documents(xml, documents)
86
+ return if documents.empty?
87
+
88
+ xml.send(:documents) {
89
+ documents.each do |document|
90
+ serialize_document(xml, document)
91
+ end
92
+ }
93
+ end
94
+
95
+ def serialize_document(xml, document)
96
+ return unless document
97
+
98
+ xml.send(:document) {
99
+ xml.send(:type, document.type)
100
+ xml.send(:value, document.value)
101
+ }
102
+ end
103
+
104
+ def serialize_payment_method(xml, payment_method)
105
+ return unless payment_method
106
+
107
+ xml.send(:paymentMethod) {
108
+ xml.send(:type, payment_method.type)
109
+ xml.send(:creditCard) {
110
+ xml.send(:token, payment_method.token)
111
+ serialize_holder(xml, payment_method.holder)
112
+ }
113
+ }
114
+ end
115
+
116
+ def serialize_holder(xml, holder)
117
+ return unless holder
118
+
119
+ xml.send(:holder) {
120
+ xml.send(:name, holder.name) if holder.name
121
+ xml.send(:birthDate, holder.birth_date) if holder.birth_date
122
+ serialize_document(xml, holder.document)
123
+ serialize_billing_address(xml, holder.billing_address)
124
+ serialize_phone(xml, holder.phone)
125
+ }
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,49 @@
1
+ module PagSeguro
2
+ class Subscription
3
+ class Response
4
+ # The http response
5
+ attr_reader :response
6
+
7
+ # Set the object that will recive errors or updates
8
+ attr_reader :object
9
+
10
+ def initialize(response, object)
11
+ @response = response
12
+ @object = object
13
+ end
14
+
15
+ def serialize(kind = :normal)
16
+ if success?
17
+ case kind
18
+ when :normal
19
+ object.update_attributes(serialized_data)
20
+ when :search
21
+ object.update_attributes(serialized_data_from_search)
22
+ end
23
+ else
24
+ object.errors.add response
25
+ end
26
+
27
+ object
28
+ end
29
+
30
+ def success?
31
+ response.success? && response.xml?
32
+ end
33
+
34
+ private
35
+
36
+ def xml
37
+ Nokogiri::XML(response.body)
38
+ end
39
+
40
+ def serialized_data
41
+ ResponseSerializer.new(xml).serialize
42
+ end
43
+
44
+ def serialized_data_from_search
45
+ ResponseSerializer.new(xml).serialize_from_search
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,62 @@
1
+ module PagSeguro
2
+ class Subscription
3
+ class ResponseSerializer
4
+ attr_reader :xml
5
+
6
+ def initialize(xml)
7
+ @xml = xml
8
+ end
9
+
10
+ def serialize
11
+ {}.tap do |data|
12
+ data[:code] = xml.css('directPreApproval > code').text
13
+ end
14
+ end
15
+
16
+ def serialize_from_search
17
+ {}.tap do |data|
18
+ data[:name] = xml.at_css('name').text
19
+ data[:code] = xml.css('code').text
20
+ data[:date] = xml.css('date').text
21
+ data[:tracker] = xml.css('tracker').text
22
+ data[:status] = xml.css('status').text
23
+ data[:reference] = xml.css('reference').text
24
+ data[:last_event_date] = xml.css('lastEventDate').text
25
+ data[:charge] = xml.css('charge').text
26
+ data[:sender] = serialize_sender if xml.at_css('sender')
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def serialize_sender
33
+ {}.tap do |data|
34
+ data[:name] = xml.at_css('sender > name').text
35
+ data[:email] = xml.at_css('sender > email').text
36
+ data[:phone] = serialize_phone if xml.at_css('phone')
37
+ data[:address] = serialize_address if xml.at_css('address')
38
+ end
39
+ end
40
+
41
+ def serialize_phone
42
+ {}.tap do |data|
43
+ data[:area_code] = xml.css('sender > phone > areaCode').text
44
+ data[:number] = xml.css('sender > phone > number').text
45
+ end
46
+ end
47
+
48
+ def serialize_address
49
+ {}.tap do |data|
50
+ data[:street] = xml.at_css('sender > address > street').text
51
+ data[:number] = xml.at_css('sender > address > number').text
52
+ data[:complement] = xml.at_css('sender > address > complement').text
53
+ data[:district] = xml.at_css('sender > address > district').text
54
+ data[:city] = xml.at_css('sender > address > city').text
55
+ data[:state] = xml.at_css('sender > address > state').text
56
+ data[:country] = xml.at_css('sender > address > country').text
57
+ data[:postal_code] = xml.at_css('sender > address > postalCode').text
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,135 @@
1
+ module PagSeguro
2
+ class SubscriptionSearch
3
+ # Set the report options.
4
+ #
5
+ # # +per_page+: the page size.
6
+ # # +starts_at+: the report's starting date. Can't be older than 6 months.
7
+ # # +ends_at+: the report's ending date. Can't be greater than 30 days from the starting date.
8
+ #
9
+ attr_reader :options
10
+
11
+ # Set the errors from the report request.
12
+ attr_reader :errors
13
+
14
+ # Return the current page.
15
+ attr_reader :page
16
+
17
+ def initialize(path, options)
18
+ @path = path
19
+ @page = options.delete(:page) || 0
20
+ @options = options
21
+ @errors = Errors.new
22
+ end
23
+
24
+ # Return the list of subscriptions.
25
+ # Each item will be wrapped in a PagSeguro::Subscription instance.
26
+ # Notice that subscriptions instantiated by the report won't have all attributes.
27
+ # If you need additional attributes, do a PagSeguro::Subscription.find_by_code
28
+ # call. Remember that this will perform an additional HTTP request.
29
+ def subscriptions
30
+ xml do |xml|
31
+ xml.css("preApprovalSearchResult > preApprovals > preApproval").map do |node|
32
+ Subscription.load_from_xml(node)
33
+ end
34
+ end
35
+ end
36
+
37
+ # The report's creation date.
38
+ def created_at
39
+ xml do |xml|
40
+ @created_at ||= Time.parse xml.css("preApprovalSearchResult > date").text
41
+ end
42
+ end
43
+
44
+ # How many results the report returned on the given page.
45
+ def results
46
+ xml do |xml|
47
+ @results = xml.css("preApprovalSearchResult > resultsInThisPage").text.to_i
48
+ end
49
+ end
50
+
51
+ # How many pages the report returned.
52
+ def total_pages
53
+ xml do |xml|
54
+ @total_pages ||= xml.css("preApprovalSearchResult > totalPages").text.to_i
55
+ end
56
+ end
57
+
58
+ # Detect if the report has a next page.
59
+ def next_page?
60
+ page.zero? || page < total_pages
61
+ end
62
+
63
+ # Detect if the report has a previous page.
64
+ def previous_page?
65
+ page > 1
66
+ end
67
+
68
+ # Move the page pointer to the next page.
69
+ def next_page!
70
+ return unless next_page?
71
+ @page += 1
72
+ clear!
73
+ end
74
+
75
+ # Move the page pointer to the previous page.
76
+ def previous_page!
77
+ return unless previous_page?
78
+ @page -= 1
79
+ clear!
80
+ end
81
+
82
+ # Detect if the report request returned errors.
83
+ def valid?
84
+ fetch { errors.empty? }
85
+ end
86
+
87
+ private
88
+ def perform_request_and_serialize
89
+ @response = Request.get(@path, api_version, params)
90
+ @errors = Errors.new(@response)
91
+ end
92
+
93
+ # The params that will be sent
94
+ def params
95
+ {}.tap do |param|
96
+ param[:credentials] = options[:credentials]
97
+ param[:page] = page unless page.zero?
98
+ param[:maxPageResults] = options[:per_page]
99
+ param[:initialDate] = options[:starts_at].xmlschema if options[:starts_at]
100
+ param[:finalDate] = options[:ends_at].xmlschema if options[:ends_at]
101
+ param[:interval] = options[:interval] if options[:interval]
102
+ end
103
+ end
104
+
105
+ # The default PagSeguro API version
106
+ def api_version
107
+ :v2
108
+ end
109
+
110
+ def fetched?
111
+ @fetched
112
+ end
113
+
114
+ def fetched!
115
+ @fetched = true
116
+ end
117
+
118
+ def clear!
119
+ @fetched = false
120
+ end
121
+
122
+ def fetch(&block)
123
+ unless fetched?
124
+ perform_request_and_serialize
125
+ fetched!
126
+ end
127
+
128
+ instance_eval(&block)
129
+ end
130
+
131
+ def xml(&block)
132
+ valid? && block.call(@response.data)
133
+ end
134
+ end
135
+ end