tend-ruby 0.0.1

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 (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +24 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +22 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +39 -0
  7. data/Rakefile +12 -0
  8. data/lib/tend/errors/http_error.rb +10 -0
  9. data/lib/tend/errors/not_supported_error.rb +2 -0
  10. data/lib/tend/models/campaign.rb +16 -0
  11. data/lib/tend/models/contact.rb +47 -0
  12. data/lib/tend/models/garden.rb +50 -0
  13. data/lib/tend/models/page.rb +13 -0
  14. data/lib/tend/models/referrer.rb +20 -0
  15. data/lib/tend/models/segment.rb +24 -0
  16. data/lib/tend/models/visit.rb +13 -0
  17. data/lib/tend/util/ht.rb +58 -0
  18. data/lib/tend/util/no_delete.rb +16 -0
  19. data/lib/tend/util/no_find.rb +17 -0
  20. data/lib/tend/util/no_post.rb +17 -0
  21. data/lib/tend/util/no_update.rb +16 -0
  22. data/lib/tend/util/util.rb +53 -0
  23. data/lib/tend.rb +34 -0
  24. data/lib/version.rb +3 -0
  25. data/tend-ruby.gemspec +29 -0
  26. data/test/fixtures/campaign.json +15 -0
  27. data/test/fixtures/contact.json +13 -0
  28. data/test/fixtures/page.json +3 -0
  29. data/test/fixtures/referrer.json +11 -0
  30. data/test/fixtures/segment.json +21 -0
  31. data/test/fixtures/vcr/campaign_all.yml +67 -0
  32. data/test/fixtures/vcr/campaign_contacts.yml +39 -0
  33. data/test/fixtures/vcr/campaign_delete.yml +39 -0
  34. data/test/fixtures/vcr/campaign_find.yml +40 -0
  35. data/test/fixtures/vcr/campaign_update.yml +39 -0
  36. data/test/fixtures/vcr/campaign_visits.yml +40 -0
  37. data/test/fixtures/vcr/contact_all.yml +41 -0
  38. data/test/fixtures/vcr/contact_delete.yml +41 -0
  39. data/test/fixtures/vcr/contact_find.yml +41 -0
  40. data/test/fixtures/vcr/contact_segments.yml +39 -0
  41. data/test/fixtures/vcr/contact_update.yml +42 -0
  42. data/test/fixtures/vcr/contact_visits.yml +89 -0
  43. data/test/fixtures/vcr/page_all.yml +39 -0
  44. data/test/fixtures/vcr/referrer_all.yml +39 -0
  45. data/test/fixtures/vcr/referrer_contacts.yml +39 -0
  46. data/test/fixtures/vcr/referrer_find.yml +39 -0
  47. data/test/fixtures/vcr/referrer_visits.yml +39 -0
  48. data/test/fixtures/vcr/segment_all.yml +43 -0
  49. data/test/fixtures/vcr/segment_assign_as_array.yml +39 -0
  50. data/test/fixtures/vcr/segment_assign_as_strings.yml +39 -0
  51. data/test/fixtures/vcr/segment_assign_one_array.yml +39 -0
  52. data/test/fixtures/vcr/segment_assign_one_string.yml +39 -0
  53. data/test/fixtures/vcr/segment_create.yml +40 -0
  54. data/test/fixtures/vcr/segment_delete.yml +39 -0
  55. data/test/fixtures/vcr/segment_detach_as_array.yml +39 -0
  56. data/test/fixtures/vcr/segment_detach_as_strings.yml +39 -0
  57. data/test/fixtures/vcr/segment_detach_one_array.yml +39 -0
  58. data/test/fixtures/vcr/segment_detach_one_string.yml +39 -0
  59. data/test/fixtures/vcr/segment_find.yml +39 -0
  60. data/test/fixtures/vcr/segment_update.yml +39 -0
  61. data/test/fixtures/vcr/visit_all.yml +89 -0
  62. data/test/fixtures/visit.json +3 -0
  63. data/test/helpers/all.rb +18 -0
  64. data/test/helpers/no_create.rb +20 -0
  65. data/test/helpers/no_delete.rb +20 -0
  66. data/test/helpers/no_find.rb +20 -0
  67. data/test/helpers/no_update.rb +20 -0
  68. data/test/models/campaign_test.rb +37 -0
  69. data/test/models/contact_test.rb +36 -0
  70. data/test/models/page_test.rb +11 -0
  71. data/test/models/referrer_test.rb +25 -0
  72. data/test/models/segment_test.rb +62 -0
  73. data/test/models/visit_test.rb +12 -0
  74. data/test/test_helper.rb +81 -0
  75. metadata +264 -0
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://stevenbristol%40gmail.com:NqNo3bwWZu@tend.io/api/v1/segments/detach
6
+ body:
7
+ encoding: UTF-8
8
+ string: email=stevenbristol%40gmail.com&segments=renamed%20test%20by%20steve%20e31f1b3a-20bd-4605-9844-bab71e230212
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Tue, 06 Oct 2015 13:58:26 GMT
23
+ Server:
24
+ - Apache
25
+ Cache-Control:
26
+ - no-cache
27
+ Set-Cookie:
28
+ - laravel_session=eyJpdiI6InU1N0hpYmRPdkk5bjdYWTdBM1l6WkE9PSIsInZhbHVlIjoicmp4N1RCMlJFTEx2bkswdDB6QXJtZlBOK0R0bWZJTCtxaWtjXC8xZ0lEaVZ2dkxWUmxJWlFLcEwrVk5uVDFaN1czZmMxRnp4bDZYN3dSYStrbWhvUmtBPT0iLCJtYWMiOiI3YWQ4YTExMDE5MzU5N2MwODVhNDA3YjBhNmVmNmEwNTJiYjNkMDRkNTg2OGQwZTVlNmIwN2E1NTY1MWY2NTA2In0%3D;
29
+ expires=Tue, 06-Oct-2015 15:58:26 GMT; Max-Age=7200; path=/; httponly
30
+ Content-Length:
31
+ - '58'
32
+ Content-Type:
33
+ - application/json
34
+ body:
35
+ encoding: UTF-8
36
+ string: '{"message":"segment removed from stevenbristol@gmail.com"}'
37
+ http_version:
38
+ recorded_at: Tue, 06 Oct 2015 13:58:26 GMT
39
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://stevenbristol%40gmail.com:NqNo3bwWZu@tend.io/api/v1/segments/detach
6
+ body:
7
+ encoding: UTF-8
8
+ string: email=stevenbristol%40gmail.com&segments=renamed%20test%20by%20steve%20e31f1b3a-20bd-4605-9844-bab71e230212
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Tue, 06 Oct 2015 13:58:25 GMT
23
+ Server:
24
+ - Apache
25
+ Cache-Control:
26
+ - no-cache
27
+ Set-Cookie:
28
+ - laravel_session=eyJpdiI6IjMxV3JTRTdDRzR0VlJuNEE2XC9RVEhBPT0iLCJ2YWx1ZSI6ImMwaWJaK0t0ZDJcL2NqRjd3TXl3MklSNzZEYUhWSjZGOWhwdzYyNWZsaWRWeEk3T29RYmVaV0hpckJMSjd6WlVYUXpVMk9kK1h1VGtCUkRZREZcL21Mc1E9PSIsIm1hYyI6IjY1NDg3NjVmZmNlMjk3NzRlOGE2YjE0OWYzNGIyNTFkMWM4MzQ2NTJkZDRkNWEzOGJiZTAwMTY0ZjBiYmM0ZWUifQ%3D%3D;
29
+ expires=Tue, 06-Oct-2015 15:58:25 GMT; Max-Age=7200; path=/; httponly
30
+ Content-Length:
31
+ - '58'
32
+ Content-Type:
33
+ - application/json
34
+ body:
35
+ encoding: UTF-8
36
+ string: '{"message":"segment removed from stevenbristol@gmail.com"}'
37
+ http_version:
38
+ recorded_at: Tue, 06 Oct 2015 13:58:25 GMT
39
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://stevenbristol%40gmail.com:NqNo3bwWZu@tend.io/api/v1/segments/1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Mon, 05 Oct 2015 19:21:22 GMT
23
+ Server:
24
+ - Apache
25
+ Cache-Control:
26
+ - no-cache
27
+ Set-Cookie:
28
+ - laravel_session=eyJpdiI6IkJRUFBZeHV3dzV2TGxyMmlWRjZaMUE9PSIsInZhbHVlIjoiXC9HUjBIQldiWDEydjFFOHl2QUNNeUFnQUFPdGptR2ZYSmYrZ3dGRFRHRTJNMExtRTRFdGVRVm9CUUVYcm9Fc0ZcL3QrSG1kckozSEpJSUNPOW1DMHlSdz09IiwibWFjIjoiZTAxMzc2MmFhMzZkNzc5MjUwZjVmZDE3ZWRmN2U2NWVjZDZkYTk5MGFhZmFlOTkyNTk2Nzc3ZTJhMTM2M2JkOSJ9;
29
+ expires=Mon, 05-Oct-2015 21:21:22 GMT; Max-Age=7200; path=/; httponly
30
+ Content-Length:
31
+ - '44'
32
+ Content-Type:
33
+ - application/json
34
+ body:
35
+ encoding: UTF-8
36
+ string: '{"data":{"id":1,"name":"test by steve 2"}}'
37
+ http_version:
38
+ recorded_at: Mon, 05 Oct 2015 19:21:22 GMT
39
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,39 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: https://stevenbristol%40gmail.com:NqNo3bwWZu@tend.io/api/v1/segments/1
6
+ body:
7
+ encoding: UTF-8
8
+ string: name=test2
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Mon, 05 Oct 2015 19:22:21 GMT
23
+ Server:
24
+ - Apache
25
+ Cache-Control:
26
+ - no-cache
27
+ Set-Cookie:
28
+ - laravel_session=eyJpdiI6ImEzeFpVUFlhdk5Ta0VFXC9PeVNaejBRPT0iLCJ2YWx1ZSI6ImxyZUxCXC9VY3VPXC80SElrSzg2ZWNhOXlGSVI4d1wvN0d3dEdzNk5BSTBcL1lDZVh4eUJUc1NvWWV5SEY1MkdBdVBDRXZxWXhHOGp0Z2dmbzM2d1BxbEdhUT09IiwibWFjIjoiMGYwNDU1OWJlMWE3NTQyN2M1MjQ5ZTM4NDg1MjY4YjRjNzg4OTc2Nzk4MDliNWM0NWYyMDg5NWIxNWRiNTk5NSJ9;
29
+ expires=Mon, 05-Oct-2015 21:22:21 GMT; Max-Age=7200; path=/; httponly
30
+ Content-Length:
31
+ - '75'
32
+ Content-Type:
33
+ - application/json
34
+ body:
35
+ encoding: UTF-8
36
+ string: '{"message":"segment successfully updated","data":{"id":1,"name":"test2"}}'
37
+ http_version:
38
+ recorded_at: Mon, 05 Oct 2015 19:22:21 GMT
39
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,89 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://stevenbristol%40gmail.com:NqNo3bwWZu@tend.io/api/v1/visits?page=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Date:
22
+ - Mon, 05 Oct 2015 14:33:23 GMT
23
+ Server:
24
+ - Apache
25
+ Cache-Control:
26
+ - no-cache
27
+ Set-Cookie:
28
+ - laravel_session=eyJpdiI6IkVDeXNxQVRHTmtReWFqQWVhSTAxamc9PSIsInZhbHVlIjoiTFE2ektXYUxpekVlTWxWdDM0ck5MYUpJQ1pXMmhCTmQzd2dtdmprOWJYMnEzVTlXeG1WclF2QWFJV1ordFJrNTZRYTdzdlhxZndFbjY3WkN0RmZKckE9PSIsIm1hYyI6Ijk1YTA1MzNmNDU5YTlhNGYwNDdlZTZmZDg0ZDNkYWM3Y2U3MTMxYmM3YjQ0MjhjMGJmZjhjYjdlZjdjNDc4NzUifQ%3D%3D;
29
+ expires=Mon, 05-Oct-2015 16:33:24 GMT; Max-Age=7200; path=/; httponly
30
+ Content-Length:
31
+ - '6420'
32
+ Content-Type:
33
+ - application/json
34
+ body:
35
+ encoding: UTF-8
36
+ string: '{"data":[{"id":1,"domain":"lesschurn.dev","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31
37
+ 11:40:51"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31
38
+ 11:43:52"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31
39
+ 11:45:24"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31
40
+ 11:45:37"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31
41
+ 11:45:44"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31
42
+ 11:45:46"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31
43
+ 11:45:51"},{"id":"1702994","domain":"lesschurn.io","page":"\/url","referrer":"google.co.uk","campaign":"","date":"2015-07-31
44
+ 12:55:48"},{"id":"1703528","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31
45
+ 13:47:18"},{"id":"1704104","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31
46
+ 14:38:31"},{"id":"1704112","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31
47
+ 14:39:18"},{"id":"1703528","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31
48
+ 14:57:51"},{"id":"1705350","domain":"lesschurn.io","page":"\/url","referrer":"t.co\/Urz9nmofz1","campaign":"","date":"2015-07-31
49
+ 16:32:36"},{"id":"1706533","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31
50
+ 18:57:20"},{"id":"1705350","domain":"lesschurn.io","page":"\/url","referrer":"t.co\/Urz9nmofz1","campaign":"","date":"2015-08-01
51
+ 04:09:20"},{"id":"1710227","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
52
+ 07:35:55"},{"id":"1705350","domain":"lesschurn.io","page":"\/url","referrer":"t.co\/Urz9nmofz1","campaign":"","date":"2015-08-01
53
+ 08:19:04"},{"id":"1711794","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01
54
+ 11:34:11"},{"id":"1712583","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
55
+ 13:20:55"},{"id":"1712583","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
56
+ 13:21:06"},{"id":"1712761","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01
57
+ 13:48:08"},{"id":"1712993","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01
58
+ 14:24:43"},{"id":"1713341","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01
59
+ 15:33:45"},{"id":"1713511","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
60
+ 16:03:47"},{"id":"1710227","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
61
+ 19:07:48"},{"id":"1714585","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
62
+ 19:29:25"},{"id":"1714585","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
63
+ 19:29:36"},{"id":"1714901","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01
64
+ 20:33:15"},{"id":"1714901","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-01
65
+ 20:35:25"},{"id":"1715044","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
66
+ 21:06:52"},{"id":"1715044","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
67
+ 21:07:14"},{"id":"1715055","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01
68
+ 21:08:12"},{"id":"1715044","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01
69
+ 21:09:38"},{"id":"1703528","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01
70
+ 21:12:43"},{"id":"1715970","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02
71
+ 00:30:17"},{"id":"1717935","domain":"lesschurn.io","page":"\/url","referrer":"producthunt.com\/tech\/lesschurn","campaign":"","date":"2015-08-02
72
+ 09:03:40"},{"id":"1717935","domain":"lesschurn.io","page":"\/url","referrer":"producthunt.com\/tech\/lesschurn","campaign":"","date":"2015-08-02
73
+ 09:03:50"},{"id":"1718273","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-02
74
+ 09:48:23"},{"id":"1718273","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-02
75
+ 09:57:23"},{"id":"1718273","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-02
76
+ 09:57:28"},{"id":"1718861","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02
77
+ 11:16:37"},{"id":"1718861","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02
78
+ 11:29:41"},{"id":"1718861","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02
79
+ 11:31:07"},{"id":"1719001","domain":"lesschurn.io","page":"\/url","referrer":"google.com","campaign":"","date":"2015-08-02
80
+ 11:35:20"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02
81
+ 13:15:07"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02
82
+ 13:15:15"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02
83
+ 14:49:55"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02
84
+ 14:52:05"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02
85
+ 14:52:09"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02
86
+ 14:52:10"}],"paginator":{"total_count":4068,"total_pages":82,"current_page":1,"limit":50}}'
87
+ http_version:
88
+ recorded_at: Mon, 05 Oct 2015 14:33:24 GMT
89
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,3 @@
1
+ {
2
+ "all":[{"id":1,"domain":"lesschurn.dev","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31 11:40:51"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31 11:43:52"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31 11:45:24"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31 11:45:37"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31 11:45:44"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31 11:45:46"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31 11:45:51"},{"id":"1702994","domain":"lesschurn.io","page":"\/url","referrer":"google.co.uk","campaign":"","date":"2015-07-31 12:55:48"},{"id":"1703528","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31 13:47:18"},{"id":"1704104","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31 14:38:31"},{"id":"1704112","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31 14:39:18"},{"id":"1703528","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-07-31 14:57:51"},{"id":"1705350","domain":"lesschurn.io","page":"\/url","referrer":"t.co\/Urz9nmofz1","campaign":"","date":"2015-07-31 16:32:36"},{"id":"1706533","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-07-31 18:57:20"},{"id":"1705350","domain":"lesschurn.io","page":"\/url","referrer":"t.co\/Urz9nmofz1","campaign":"","date":"2015-08-01 04:09:20"},{"id":"1710227","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 07:35:55"},{"id":"1705350","domain":"lesschurn.io","page":"\/url","referrer":"t.co\/Urz9nmofz1","campaign":"","date":"2015-08-01 08:19:04"},{"id":"1711794","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01 11:34:11"},{"id":"1712583","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 13:20:55"},{"id":"1712583","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 13:21:06"},{"id":"1712761","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01 13:48:08"},{"id":"1712993","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01 14:24:43"},{"id":"1713341","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01 15:33:45"},{"id":"1713511","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 16:03:47"},{"id":"1710227","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 19:07:48"},{"id":"1714585","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 19:29:25"},{"id":"1714585","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 19:29:36"},{"id":"1714901","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01 20:33:15"},{"id":"1714901","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-01 20:35:25"},{"id":"1715044","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 21:06:52"},{"id":"1715044","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 21:07:14"},{"id":"1715055","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01 21:08:12"},{"id":"1715044","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-01 21:09:38"},{"id":"1703528","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-01 21:12:43"},{"id":"1715970","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02 00:30:17"},{"id":"1717935","domain":"lesschurn.io","page":"\/url","referrer":"producthunt.com\/tech\/lesschurn","campaign":"","date":"2015-08-02 09:03:40"},{"id":"1717935","domain":"lesschurn.io","page":"\/url","referrer":"producthunt.com\/tech\/lesschurn","campaign":"","date":"2015-08-02 09:03:50"},{"id":"1718273","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-02 09:48:23"},{"id":"1718273","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-02 09:57:23"},{"id":"1718273","domain":"lesschurn.io","page":"\/url","referrer":"stripe.com\/docs\/integrations","campaign":"","date":"2015-08-02 09:57:28"},{"id":"1718861","domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02 11:16:37"},{"id":"1718861","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02 11:29:41"},{"id":"1718861","domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02 11:31:07"},{"id":"1719001","domain":"lesschurn.io","page":"\/url","referrer":"google.com","campaign":"","date":"2015-08-02 11:35:20"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02 13:15:07"},{"id":1,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02 13:15:15"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"direct","campaign":"","date":"2015-08-02 14:49:55"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02 14:52:05"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02 14:52:09"},{"id":85328,"domain":"lesschurn.io","page":"\/url","referrer":"","campaign":"","date":"2015-08-02 14:52:10"}]
3
+ }
@@ -0,0 +1,18 @@
1
+ module Test::Helpers::All
2
+ module ClassMethods
3
+
4
+ end
5
+
6
+ module InstanceMethods
7
+
8
+ def test_get_all
9
+ cla = self.class.to_s.gsub("Tend::", "").gsub("Test", "").downcase
10
+ assert_tend_class cla, "all"
11
+ end
12
+ end
13
+
14
+ def self.included(receiver)
15
+ receiver.extend ClassMethods
16
+ receiver.send :include, InstanceMethods
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ module Test::Helpers::NoCreate
2
+ module ClassMethods
3
+
4
+ end
5
+
6
+ module InstanceMethods
7
+
8
+ def test_no_create
9
+ cla = "Tend::#{self.class.to_s.gsub("Test", "")}".constantize
10
+ assert_raises Tend::NotSupportedError do
11
+ cla.create 1
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.included(receiver)
17
+ receiver.extend ClassMethods
18
+ receiver.send :include, InstanceMethods
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Test::Helpers::NoDelete
2
+ module ClassMethods
3
+
4
+ end
5
+
6
+ module InstanceMethods
7
+
8
+ def test_no_update
9
+ cla = "Tend::#{self.class.to_s.gsub("Test", "")}".constantize
10
+ assert_raises Tend::NotSupportedError do
11
+ cla.new({}).delete
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.included(receiver)
17
+ receiver.extend ClassMethods
18
+ receiver.send :include, InstanceMethods
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Test::Helpers::NoFind
2
+ module ClassMethods
3
+
4
+ end
5
+
6
+ module InstanceMethods
7
+
8
+ def test_no_find
9
+ cla = "Tend::#{self.class.to_s.gsub("Test", "")}".constantize
10
+ assert_raises Tend::NotSupportedError do
11
+ cla.find 1
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.included(receiver)
17
+ receiver.extend ClassMethods
18
+ receiver.send :include, InstanceMethods
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ module Test::Helpers::NoUpdate
2
+ module ClassMethods
3
+
4
+ end
5
+
6
+ module InstanceMethods
7
+
8
+ def test_no_update
9
+ cla = "Tend::#{self.class.to_s.gsub("Test", "")}".constantize
10
+ assert_raises Tend::NotSupportedError do
11
+ cla.new({}).update 1
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.included(receiver)
17
+ receiver.extend ClassMethods
18
+ receiver.send :include, InstanceMethods
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path('../../../test/test_helper.rb', __FILE__)
2
+
3
+ class CampaignTest < Minitest::Test
4
+ include Test::Helpers::All
5
+ include Test::Helpers::NoCreate
6
+
7
+
8
+ def test_get_find
9
+ assert_tend_class "campaign", "find", 1
10
+ end
11
+
12
+ def test_update
13
+ assert_tend_instance campaign, "update", {name: "test2"}
14
+ end
15
+
16
+ def test_delete
17
+ assert_tend_instance campaign, "delete"
18
+ end
19
+
20
+ def test_visits
21
+ assert_tend_instance campaign, "visits"
22
+ end
23
+
24
+ def test_contacts
25
+ assert_tend_instance campaign, "contacts"
26
+ end
27
+
28
+
29
+ def campaign
30
+ s = nil
31
+ VCR.use_cassette("campaign_find") do
32
+ s = Tend::Campaign.find 1
33
+ end
34
+ s
35
+ end
36
+
37
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path('../../../test/test_helper.rb', __FILE__)
2
+
3
+ class ContactTest < Minitest::Test
4
+ include Test::Helpers::All
5
+ include Test::Helpers::NoCreate
6
+
7
+
8
+ def test_get_find
9
+ assert_tend_class "contact", "find", 1
10
+ end
11
+
12
+ def test_get_visits
13
+ assert_tend_instance contact, "visits", {reload: true}
14
+ end
15
+
16
+ def test_get_segments
17
+ assert_tend_instance contact, "segments", {reload: true}
18
+ end
19
+
20
+ def test_update
21
+ assert_tend_instance contact, "update", {lastName: "Bristoll"}
22
+ end
23
+
24
+ def test_delete
25
+ assert_tend_instance contact, "delete"
26
+ end
27
+
28
+ def contact
29
+ c = nil
30
+ VCR.use_cassette("contact_find") do
31
+ c = Tend::Contact.find 1
32
+ end
33
+ c
34
+ end
35
+
36
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../test/test_helper.rb', __FILE__)
2
+
3
+ class PageTest < Minitest::Test
4
+ include Test::Helpers::All
5
+ include Test::Helpers::NoFind
6
+ include Test::Helpers::NoCreate
7
+ include Test::Helpers::NoUpdate
8
+ include Test::Helpers::NoDelete
9
+
10
+
11
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../../../test/test_helper.rb', __FILE__)
2
+
3
+ class ReferrerTest < Minitest::Test
4
+ include Test::Helpers::All
5
+ include Test::Helpers::NoCreate
6
+ include Test::Helpers::NoUpdate
7
+ include Test::Helpers::NoDelete
8
+
9
+ def test_get_find
10
+ assert_tend_class "referrer", "find", 1
11
+ end
12
+
13
+ def test_visits
14
+ r = nil
15
+ VCR.use_cassette("referrer_find") { r = Tend::Referrer.find 1}
16
+ assert_tend_instance r, "visits"
17
+ end
18
+
19
+ def test_contacts
20
+ r = nil
21
+ VCR.use_cassette("referrer_find") { r = Tend::Referrer.find 1}
22
+ assert_tend_instance r, "contacts"
23
+ end
24
+
25
+ end
@@ -0,0 +1,62 @@
1
+ require File.expand_path('../../../test/test_helper.rb', __FILE__)
2
+
3
+ class SegmentTest < Minitest::Test
4
+ include Test::Helpers::All
5
+
6
+ def test_create
7
+ assert_tend_class "segment", "create", {name: "test by steve 2"}
8
+ end
9
+
10
+ def test_get_find
11
+ assert_tend_class "segment", "find", 1
12
+ end
13
+
14
+ def test_update
15
+ assert_tend_instance segment, "update", {name: "test2"}
16
+ end
17
+
18
+ def test_delete
19
+ assert_tend_instance segment, "delete"
20
+ end
21
+
22
+ def test_assign_one_string
23
+ assert_tend_class "segment", "assign|one_string", "stevenbristol@gmail.com", "renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212"
24
+ end
25
+
26
+ def test_assign_as_strings
27
+ assert_tend_class "segment", "assign|as_strings", "stevenbristol@gmail.com", "renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212,renamed test by steve 96f63274-9dc3-407a-98a0-21d54bd3f590"
28
+ end
29
+
30
+ def test_assign_one_array
31
+ assert_tend_class "segment", "assign|one_array", "stevenbristol@gmail.com", ["renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212"]
32
+ end
33
+
34
+ def test_assign_as_array
35
+ assert_tend_class "segment", "assign|as_array", "stevenbristol@gmail.com", ["renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212","renamed test by steve 96f63274-9dc3-407a-98a0-21d54bd3f590"]
36
+ end
37
+
38
+ def test_detach_one_string
39
+ assert_tend_class "segment", "detach|one_string", "stevenbristol@gmail.com", "renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212"
40
+ end
41
+
42
+ def test_detach_as_strings
43
+ assert_tend_class "segment", "detach|as_strings", "stevenbristol@gmail.com", "renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212,renamed test by steve 96f63274-9dc3-407a-98a0-21d54bd3f590"
44
+ end
45
+
46
+ def test_detach_one_array
47
+ assert_tend_class "segment", "detach|one_array", "stevenbristol@gmail.com", ["renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212"]
48
+ end
49
+
50
+ def test_detach_as_array
51
+ assert_tend_class "segment", "detach|as_array", "stevenbristol@gmail.com", ["renamed test by steve e31f1b3a-20bd-4605-9844-bab71e230212","renamed test by steve 96f63274-9dc3-407a-98a0-21d54bd3f590"]
52
+ end
53
+
54
+ def segment
55
+ s = nil
56
+ VCR.use_cassette("segment_find") do
57
+ s = Tend::Segment.find 1
58
+ end
59
+ s
60
+ end
61
+
62
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../../test/test_helper.rb', __FILE__)
2
+
3
+ class VisitTest < Minitest::Test
4
+ include Test::Helpers::All
5
+ include Test::Helpers::NoFind
6
+ include Test::Helpers::NoCreate
7
+ include Test::Helpers::NoUpdate
8
+ include Test::Helpers::NoDelete
9
+
10
+
11
+
12
+ end
@@ -0,0 +1,81 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+
3
+ require 'minitest/autorun'
4
+ require 'minitest/pride'
5
+ require "vcr"
6
+
7
+ module Test;end
8
+ module Test::Helpers;end
9
+
10
+ require "tend"
11
+ require "helpers/all"
12
+ require "helpers/no_find"
13
+ require "helpers/no_create"
14
+ require "helpers/no_update"
15
+ require "helpers/no_delete"
16
+
17
+ Tend.user_name = "stevenbristol@gmail.com"
18
+ Tend.password = "NqNo3bwWZu"
19
+
20
+
21
+
22
+ VCR.configure do |config|
23
+ config.cassette_library_dir = "test/fixtures/vcr"
24
+ config.hook_into :webmock # or :fakeweb
25
+ end
26
+
27
+ def fixture file_name, key
28
+ json = File.read( "test/fixtures/#{file_name}.json" )
29
+ JSON.parse( json )[key]
30
+ end
31
+
32
+
33
+ def assert_tend_class class_name, meth, *args
34
+ cla = "Tend::#{class_name.titleize}".constantize
35
+ x = meth.split "|"
36
+ m = x.first
37
+ key = x.first == x.last ? "#{m}" : "#{m}_#{x.last}"
38
+ file_name = "#{class_name}_#{key}"
39
+ VCR.use_cassette(file_name) do
40
+ fix = fixture(class_name, key)
41
+ tend = args.empty? ? cla.send(m) : cla.send(m, *args)
42
+ if fix.is_a? Array
43
+ assert_equal fix.size, tend.size, "The array returned by Tend is not the same size as the fixture array."
44
+ fix.each_with_index do |f, index|
45
+ assert_tend_object f, tend[index]
46
+ end
47
+ else
48
+ assert_tend_object fix, tend
49
+ end
50
+ end
51
+ end
52
+
53
+ def assert_tend_instance instance, meth, *args
54
+ class_name = instance.class.to_s.gsub("Tend::", "").downcase
55
+ VCR.use_cassette("#{class_name}_#{meth}") do
56
+ fix = fixture(class_name, meth)
57
+ tend = args.empty? ? instance.send(meth) : instance.send(meth, *args)
58
+ if fix.is_a? Array
59
+ assert_equal fix.size, tend.size, "The array returned by Tend is not the same size as the fixture array."
60
+ fix.each_with_index do |f, index|
61
+ assert_tend_object f, tend[index]
62
+ end
63
+ else
64
+ assert_tend_object fix, tend
65
+ end
66
+ end
67
+ end
68
+
69
+ def assert_tend_object fixture, tend
70
+ if fixture['message']
71
+ assert_equal fixture["message"], tend
72
+ else
73
+ fixture.each do |k, v|
74
+ assert_equal v, tend.send(k), "Attribute #{k} does not match"
75
+ end
76
+ assert_equal fixture, tend.attributes, "Attributes do not match"
77
+ end
78
+ end
79
+
80
+
81
+