actv 1.1.0

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 (108) hide show
  1. data/.gitignore +30 -0
  2. data/.rspec +2 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +64 -0
  6. data/Gemfile +4 -0
  7. data/Guardfile +20 -0
  8. data/LICENSE +22 -0
  9. data/README.md +63 -0
  10. data/Rakefile +17 -0
  11. data/actv.gemspec +34 -0
  12. data/lib/actv.rb +48 -0
  13. data/lib/actv/address.rb +9 -0
  14. data/lib/actv/article.rb +89 -0
  15. data/lib/actv/article_search_results.rb +15 -0
  16. data/lib/actv/asset.rb +186 -0
  17. data/lib/actv/asset_channel.rb +13 -0
  18. data/lib/actv/asset_component.rb +8 -0
  19. data/lib/actv/asset_description.rb +15 -0
  20. data/lib/actv/asset_description_type.rb +12 -0
  21. data/lib/actv/asset_image.rb +13 -0
  22. data/lib/actv/asset_legacy_data.rb +20 -0
  23. data/lib/actv/asset_price.rb +11 -0
  24. data/lib/actv/asset_seo_url.rb +5 -0
  25. data/lib/actv/asset_status.rb +17 -0
  26. data/lib/actv/asset_tag.rb +9 -0
  27. data/lib/actv/asset_topic.rb +11 -0
  28. data/lib/actv/base.rb +148 -0
  29. data/lib/actv/channel.rb +13 -0
  30. data/lib/actv/client.rb +330 -0
  31. data/lib/actv/configurable.rb +39 -0
  32. data/lib/actv/default.rb +87 -0
  33. data/lib/actv/error.rb +32 -0
  34. data/lib/actv/error/bad_gateway.rb +11 -0
  35. data/lib/actv/error/bad_request.rb +10 -0
  36. data/lib/actv/error/client_error.rb +39 -0
  37. data/lib/actv/error/enhance_your_calm.rb +10 -0
  38. data/lib/actv/error/forbidden.rb +10 -0
  39. data/lib/actv/error/internal_server_error.rb +11 -0
  40. data/lib/actv/error/not_acceptable.rb +10 -0
  41. data/lib/actv/error/not_found.rb +10 -0
  42. data/lib/actv/error/server_error.rb +19 -0
  43. data/lib/actv/error/service_unavailable.rb +11 -0
  44. data/lib/actv/error/unauthorized.rb +10 -0
  45. data/lib/actv/event.rb +213 -0
  46. data/lib/actv/event_result.rb +8 -0
  47. data/lib/actv/event_search_results.rb +11 -0
  48. data/lib/actv/evergreen.rb +53 -0
  49. data/lib/actv/facet.rb +16 -0
  50. data/lib/actv/facet_term.rb +5 -0
  51. data/lib/actv/facet_value.rb +7 -0
  52. data/lib/actv/identity.rb +28 -0
  53. data/lib/actv/interest.rb +39 -0
  54. data/lib/actv/null_object.rb +19 -0
  55. data/lib/actv/phone_number.rb +9 -0
  56. data/lib/actv/place.rb +24 -0
  57. data/lib/actv/popular_interest.rb +18 -0
  58. data/lib/actv/popular_interest_search_results.rb +12 -0
  59. data/lib/actv/request/multipart_with_file.rb +37 -0
  60. data/lib/actv/response/parse_json.rb +29 -0
  61. data/lib/actv/response/raise_client_error.rb +21 -0
  62. data/lib/actv/response/raise_server_error.rb +18 -0
  63. data/lib/actv/search_results.rb +30 -0
  64. data/lib/actv/sub_event.rb +15 -0
  65. data/lib/actv/tag.rb +9 -0
  66. data/lib/actv/topic.rb +9 -0
  67. data/lib/actv/user.rb +38 -0
  68. data/lib/actv/version.rb +3 -0
  69. data/spec/actv/article_search_results_spec.rb +16 -0
  70. data/spec/actv/article_spec.rb +44 -0
  71. data/spec/actv/asset_channel_spec.rb +17 -0
  72. data/spec/actv/asset_description_spec.rb +17 -0
  73. data/spec/actv/asset_image_spec.rb +27 -0
  74. data/spec/actv/asset_price_spec.rb +23 -0
  75. data/spec/actv/asset_spec.rb +172 -0
  76. data/spec/actv/asset_status_spec.rb +24 -0
  77. data/spec/actv/base_spec.rb +51 -0
  78. data/spec/actv/client/articles_spec.rb +130 -0
  79. data/spec/actv/client/assets_spec.rb +87 -0
  80. data/spec/actv/client/event_results_spec.rb +35 -0
  81. data/spec/actv/client/events_spec.rb +99 -0
  82. data/spec/actv/client/search_spec.rb +58 -0
  83. data/spec/actv/client/system_health_spec.rb +16 -0
  84. data/spec/actv/client/users_spec.rb +31 -0
  85. data/spec/actv/client_spec.rb +140 -0
  86. data/spec/actv/event_spec.rb +331 -0
  87. data/spec/actv/evergreen_spec.rb +33 -0
  88. data/spec/actv/identifiable_spec.rb +31 -0
  89. data/spec/actv/null_object_spec.rb +24 -0
  90. data/spec/actv/place_spec.rb +25 -0
  91. data/spec/actv/search_results_spec.rb +44 -0
  92. data/spec/actv/user_spec.rb +25 -0
  93. data/spec/actv_spec.rb +60 -0
  94. data/spec/faraday/response_spec.rb +0 -0
  95. data/spec/fixtures/me.json +21 -0
  96. data/spec/fixtures/system_health.json +1 -0
  97. data/spec/fixtures/valid_article.json +187 -0
  98. data/spec/fixtures/valid_asset.json +185 -0
  99. data/spec/fixtures/valid_event.json +188 -0
  100. data/spec/fixtures/valid_event_results.json +23 -0
  101. data/spec/fixtures/valid_evergreen.json +1 -0
  102. data/spec/fixtures/valid_evergreen_child_1.json +1 -0
  103. data/spec/fixtures/valid_search.json +1282 -0
  104. data/spec/fixtures/valid_search_no_event_results.json +5 -0
  105. data/spec/fixtures/valid_search_no_results.json +9 -0
  106. data/spec/spec_helper.rb +15 -0
  107. data/spec/support/helper.rb +43 -0
  108. metadata +432 -0
@@ -0,0 +1,130 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Client do
4
+ before do
5
+ @client = ACTV::Client.new
6
+ end
7
+
8
+ describe "#article" do
9
+ context "with a valid article ID passed" do
10
+ before do
11
+ stub_get("/v2/assets/valid_article.json").
12
+ to_return(body: fixture("valid_article.json"), headers: { content_type: "application/json; charset=utf-8" })
13
+ end
14
+
15
+ before(:each) do
16
+ @article = @client.article("valid_article")
17
+ end
18
+
19
+ it "requests the correct article" do
20
+ a_get("/v2/assets/valid_article.json").should have_been_made
21
+ end
22
+
23
+ it "should return the correct summary" do
24
+ @article.summary.should include "Running can be endlessly"
25
+ end
26
+
27
+ it "should return the correct description" do
28
+ @article.description.should include "One of the great virtues"
29
+ end
30
+
31
+ it "should return the correct by line" do
32
+ @article.by_line.should eq "By Greg Tymon, M.Ed., C.S.C.S."
33
+ end
34
+
35
+ it "should return the correct source" do
36
+ @article.source.should include "American Running Association"
37
+ end
38
+
39
+ it "should return the correct author photo" do
40
+ @article.author_photo.url.should eq "/Assets/Running/Experts/Jeff+Galloway_120.jpg"
41
+ end
42
+
43
+ it "should return the correct author bio" do
44
+ @article.author_bio.should =~ /Olympian Jeff Galloway has helped over/
45
+ end
46
+
47
+ it "should return the correct type" do
48
+ @article.type.should eq "Article"
49
+ end
50
+ end
51
+ end
52
+
53
+ describe "#articles" do
54
+ context "performs an article search with no results" do
55
+ before do
56
+ stub_get("/v2/search.json?query=asdf&category=articles").
57
+ to_return(body: fixture("valid_search_no_results.json"), headers: { content_type: "application/json; charset=utf-8" })
58
+ end
59
+
60
+ before(:each) do
61
+ @search_results = @client.articles('asdf')
62
+ end
63
+
64
+ it 'returns an empty array of assets in results' do
65
+ @search_results.results.size.should eql 0
66
+ end
67
+
68
+ it 'returns an empty array of facets' do
69
+ @search_results.facets.size.should eql 0
70
+ end
71
+
72
+ it 'returns an empty array of facet_values in results' do
73
+ @search_results.facet_values.size.should eql 0
74
+ end
75
+ end
76
+
77
+ context "performs a search with results" do
78
+ before do
79
+ stub_get("/v2/search.json?query=running&category=articles").
80
+ to_return(body: fixture("valid_search.json"), headers: { content_type: "application/json; charset=utf-8" })
81
+ end
82
+
83
+ before(:each) do
84
+ @search_results = @client.articles('running')
85
+ end
86
+
87
+ it 'returns the correct array of assets in the results' do
88
+ @search_results.results.first.assetName.should eql 'Running 5K'
89
+ @search_results.results.size.should eql 5
90
+ end
91
+
92
+ it 'returns the correct array of facets' do
93
+ @search_results.facets.size.should eql 1
94
+ @search_results.facets.first.name.should eql 'topicName'
95
+ end
96
+
97
+ it 'returns the correct array of facet_values' do
98
+ @search_results.facet_values.first.name.should eql 'topicName'
99
+ @search_results.facet_values.first.value.should eql 'Running'
100
+ end
101
+ end
102
+
103
+ describe "#popular_articles" do
104
+ context 'performs a search with results' do
105
+ before do
106
+ stub_get("/v2/articles/popular").
107
+ to_return(body: fixture("valid_search.json"), headers: { content_type: "application/json; charset=utf-8" })
108
+ end
109
+
110
+ it 'returns an array of popular articles' do
111
+ search_results = @client.popular_articles()
112
+ search_results.results.size.should eql 5
113
+ end
114
+ end
115
+
116
+ context "performs an popular search with no results" do
117
+ before do
118
+ stub_get("/v2/articles/popular?topic=asdf").
119
+ to_return(body: fixture("valid_search_no_results.json"), headers: { content_type: "application/json; charset=utf-8" })
120
+ end
121
+
122
+ it 'returns an empty array of assets in results' do
123
+ search_results = @client.popular_articles({'topic' => 'asdf'})
124
+ search_results.results.size.should eql 0
125
+ end
126
+ end
127
+ end
128
+
129
+ end
130
+ end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Client do
4
+
5
+ before do
6
+ @client = ACTV::Client.new
7
+ end
8
+
9
+ describe "#asset" do
10
+ context "with a valid asset ID passed" do
11
+ before do
12
+ stub_get("/v2/assets/valid_asset.json").
13
+ to_return(body: fixture("valid_asset.json"), headers: { content_type: "application/json; charset=utf-8" })
14
+
15
+ @asset = @client.asset("valid_asset")[0]
16
+ end
17
+
18
+ it "requests the correct asset" do
19
+ a_get("/v2/assets/valid_asset.json").should have_been_made
20
+ end
21
+
22
+ it "returns the correct place" do
23
+ @asset.place.name.should eq 'Kingwood Park New Jersey'
24
+ end
25
+
26
+ it "returns the correct description" do
27
+ @asset.descriptions.size.should eq 1
28
+ @asset.descriptions.first.description.should eq 'The Run Daddy Run Event is the HCM Foundation way to bring the community together on Fathers Day Weekend to celebrate Fathers and their families. 100% of the proceeds will go to HCM service & scholarship programs.'
29
+ end
30
+
31
+ it "returns the correct status" do
32
+ @asset.status.name.should eq 'VISIBLE'
33
+ end
34
+
35
+ it "returns the correct legacy data" do
36
+ @asset.legacy_data.online_registration?.should eq "true"
37
+ end
38
+
39
+ it "returns the correct asset channel" do
40
+ @asset.channels.size.should eq 2
41
+ @asset.channels.first.sequence.should eq "1"
42
+ end
43
+
44
+ it "returns the correct asset component" do
45
+ @asset.components.size.should eq 2
46
+ @asset.components.first.asset_guid.should eq "63e030f3-3df4-402c-9617-d37f6fb2c11b"
47
+ end
48
+
49
+ it "returns the correct asset prices" do
50
+ @asset.prices.size.should eq 1
51
+ @asset.prices.first.amount.should eq "10"
52
+ end
53
+
54
+ it "returns the correct asset topic" do
55
+ @asset.topics.size.should eq 1
56
+ @asset.topics.first.sequence.should eq "3"
57
+ @asset.topics.first.topic.should be_a ACTV::Topic
58
+ @asset.topics.first.topic.name.should eq "Duathlon"
59
+ @asset.topics.first.topic.taxonomy.should eq "Endurance/Duathlon"
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "#asset_by_path" do
65
+ context "with a valid url passed" do
66
+ before do
67
+ @seo_url = "http://www.active.com/san-francisco-ca/running/crazy-eight-fall-2013"
68
+ @seo_url_md5 = Digest::MD5.hexdigest(@seo_url )
69
+
70
+ stub_get("/v2/seourls/#{@seo_url_md5}?load_asset=true").
71
+ to_return(body: fixture("valid_asset.json"), headers: { content_type: "application/json; charset=utf-8" })
72
+
73
+ @asset = @client.find_asset_by_url(@seo_url)
74
+ end
75
+
76
+ it "returns the correct url" do
77
+ @asset.seo_url.should eq @seo_url
78
+ end
79
+
80
+ it "returns the correct status" do
81
+ @asset.status.name.should eq 'VISIBLE'
82
+ end
83
+
84
+ end
85
+ end
86
+
87
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Client do
4
+
5
+ before do
6
+ @client = ACTV::Client.new
7
+ end
8
+
9
+ describe "#event_results" do
10
+ context "performs a search with results" do
11
+ before do
12
+ stub_get("/api/v1/events/286F5731-9800-4C6E-ADD5-0E3B72392CA7/3BF82BBE-CF88-4E8C-A56F-78F5CE87E4C6.json").
13
+ to_return(body: fixture("valid_event_results.json"), headers: { content_type: "application/json; charset=utf-8" })
14
+ end
15
+
16
+ it 'returns an an event result' do
17
+ search_results = @client.event_results("286F5731-9800-4C6E-ADD5-0E3B72392CA7", "3BF82BBE-CF88-4E8C-A56F-78F5CE87E4C6",{})
18
+ search_results.title.should eql "2013 IRONMAN 70.3 Hawaii"
19
+ end
20
+ end
21
+
22
+ context "performs a search with no results" do
23
+ before do
24
+ stub_get("/v2/events/popular?topic=asdf").
25
+ to_return(body: fixture("valid_search_no_event_results.json"), headers: { content_type: "application/json; charset=utf-8" })
26
+ end
27
+
28
+ it 'returns nil' do
29
+ search_results = @client.event_results("asdf", "asdf",{})
30
+ search_results.should eql nil
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Client do
4
+
5
+ before do
6
+ @client = ACTV::Client.new
7
+ end
8
+
9
+ describe "#event" do
10
+ context "with a valid event ID passed" do
11
+ before do
12
+ stub_get("/v2/assets/valid_event.json").
13
+ to_return(body: fixture("valid_event.json"), headers: { content_type: "application/json; charset=utf-8" })
14
+ end
15
+
16
+ before(:each) do
17
+ @event = @client.event("valid_event")
18
+ end
19
+
20
+ it "requests the correct event" do
21
+ a_get("/v2/assets/valid_event.json").should have_been_made
22
+ end
23
+
24
+ it "has online reigstration available" do
25
+ @event.online_registration_available?.should eq true
26
+ end
27
+
28
+ it "does not have registration not yet open" do
29
+ @event.registration_not_yet_open?.should eq false
30
+ end
31
+
32
+ it "does not have registration open" do
33
+ @event.registration_open?.should eq false
34
+ end
35
+
36
+ it "has registration closed" do
37
+ @event.activityEndDate = "2013-07-24T00:00:00"
38
+ @event.registration_closed?.should eq true
39
+ end
40
+
41
+ it "has ended" do
42
+ @event.ended?.should eq true
43
+ end
44
+ end
45
+ end
46
+
47
+ describe "#popular_events" do
48
+ context "performs a search with results" do
49
+ before do
50
+ stub_get("/v2/events/popular").
51
+ to_return(body: fixture("valid_search.json"), headers: { content_type: "application/json; charset=utf-8" })
52
+ end
53
+
54
+ it 'returns an array of popular events' do
55
+ search_results = @client.popular_events()
56
+ search_results.results.size.should eql 5
57
+ end
58
+ end
59
+
60
+ context "performs a search with no results" do
61
+ before do
62
+ stub_get("/v2/events/popular?topic=asdf").
63
+ to_return(body: fixture("valid_search_no_results.json"), headers: { content_type: "application/json; charset=utf-8" })
64
+ end
65
+
66
+ it 'returns an empty array of assets in results' do
67
+ search_results = @client.popular_events({'topic' => 'asdf'})
68
+ search_results.results.size.should eql 0
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "#upcoming_events" do
74
+ context 'performs a search with results' do
75
+ before do
76
+ stub_get("/v2/events/upcoming").
77
+ to_return(body: fixture("valid_search.json"), headers: { content_type: "application/json; charset=utf-8" })
78
+ end
79
+
80
+ it 'returns an array of upcoming_events' do
81
+ search_results = @client.upcoming_events()
82
+ search_results.results.size.should eql 5
83
+ end
84
+ end
85
+
86
+ context "performs a search with no results" do
87
+ before do
88
+ stub_get("/v2/events/popular?topic=asdf").
89
+ to_return(body: fixture("valid_search_no_results.json"), headers: { content_type: "application/json; charset=utf-8" })
90
+ end
91
+
92
+ it 'returns an empty array of assets in results' do
93
+ search_results = @client.popular_events({'topic' => 'asdf'})
94
+ search_results.results.size.should eql 0
95
+ end
96
+ end
97
+ end
98
+
99
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Client do
4
+
5
+ before do
6
+ @client = ACTV::Client.new
7
+ end
8
+
9
+ describe "#assets aka #search" do
10
+ context "performs a search with no results" do
11
+ before do
12
+ stub_get("/v2/search.json?query=asdf").
13
+ to_return(body: fixture("valid_search_no_results.json"), headers: { content_type: "application/json; charset=utf-8" })
14
+ end
15
+
16
+ it 'returns an empty array of assets in results' do
17
+ search_results = @client.assets('asdf')
18
+ search_results.results.size.should eql 0
19
+ end
20
+
21
+ it 'returns an empty array of facets' do
22
+ search_results = @client.assets('asdf')
23
+ search_results.facets.size.should eql 0
24
+ end
25
+
26
+ it 'returns an empty array of facet_values in results' do
27
+ search_results = @client.assets('asdf')
28
+ search_results.facet_values.size.should eql 0
29
+ end
30
+ end
31
+
32
+ context "performs a search with results" do
33
+ before do
34
+ stub_get("/v2/search.json?query=running").
35
+ to_return(body: fixture("valid_search.json"), headers: { content_type: "application/json; charset=utf-8" })
36
+ end
37
+
38
+ it 'returns the correct array of assets in the results' do
39
+ search_results = @client.assets('running')
40
+ search_results.results.first.assetName.should eql 'Running 5K'
41
+ search_results.results.size.should eql 5
42
+ end
43
+
44
+ it 'returns the correct array of facets' do
45
+ search_results = @client.assets('running')
46
+ search_results.facets.size.should eql 1
47
+ search_results.facets.first.name.should eql 'topicName'
48
+ end
49
+
50
+ it 'returns the correct array of facet_values' do
51
+ search_results = @client.assets('running')
52
+ search_results.facet_values.first.name.should eql 'topicName'
53
+ search_results.facet_values.first.value.should eql 'Running'
54
+ end
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Client do
4
+
5
+ before do
6
+ @client = ACTV::Client.new
7
+ end
8
+
9
+ describe "#system_health" do
10
+ before do
11
+ stub_get("/system_health").
12
+ to_return(:body => fixture("system_health.json"), :headers => {:content_type => "application/json; charset=utf-8"})
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Client do
4
+
5
+ before do
6
+ @client = ACTV::Client.new
7
+ end
8
+
9
+ describe "#me" do
10
+ context "with a valid access token" do
11
+ before do
12
+ stub_get("/v2/me.json").
13
+ to_return(body: fixture("me.json"), headers: { content_type: "application/json; charset=utf-8" })
14
+ end
15
+
16
+ it "requests the correct user" do
17
+ @client.me
18
+ a_get("/v2/me.json").should have_been_made
19
+ end
20
+
21
+ it "returns the correct name" do
22
+ me = @client.me
23
+ me.first_name.should eq 'Jeff'
24
+ me.last_name.should eq 'Fang'
25
+ me.address.city.should eql "sfsfsf"
26
+ me.address.postal_code.should eql "12345"
27
+ end
28
+ end
29
+ end
30
+
31
+ end