actv 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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,33 @@
1
+ require 'spec_helper'
2
+ require "active_support/time"
3
+ require "pry"
4
+
5
+ describe ACTV::Evergreen do
6
+ before do
7
+ stub_get("/v2/assets/valid_evergreen.json").to_return(body: fixture("valid_evergreen.json"), headers: { content_type: "application/json; charset=utf-8" })
8
+ stub_get("/v2/assets/068487f1-807f-4fcd-8561-53740f80f6b3.json").to_return(body: fixture("valid_evergreen_child_1.json"), headers: { content_type: "application/json; charset=utf-8" })
9
+ end
10
+
11
+ subject { ACTV.event('valid_evergreen') }
12
+
13
+ def format_date date
14
+ date.strftime('%Y-%m-%dT%H:%M:%S')
15
+ end
16
+ def format_date_in_utc date
17
+ format_date(date) << ' UTC'
18
+ end
19
+
20
+ # describe "available methods" do
21
+ # subject { ACTV::Event.new(assetGuid: 1) }
22
+ # it { should respond_to :online_registration_available? }
23
+ # it { should respond_to :registration_not_yet_open? }
24
+ # it { should respond_to :registration_open? }
25
+ # it { should respond_to :registration_closed? }
26
+ # it { should respond_to :event_ended? }
27
+ # end
28
+
29
+ describe "evergreen?" do
30
+ its(:evergreen?) { should be_true }
31
+ end
32
+ end
33
+
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Identity do
4
+ describe "#initialize" do
5
+ it "raises an ArgumentError when type is not specified" do
6
+ lambda {
7
+ ACTV::Identity.new
8
+ }.should raise_error ArgumentError
9
+ end
10
+ end
11
+
12
+ describe "#==" do
13
+ it "returns true when objects IDs are the same" do
14
+ one = ACTV::Identity.new(:id => 1, :screen_name => "sferik")
15
+ two = ACTV::Identity.new(:id => 1, :screen_name => "garybernhardt")
16
+ (one == two).should be_true
17
+ end
18
+
19
+ it "returns false when objects IDs are different" do
20
+ one = ACTV::Identity.new(:id => 1)
21
+ two = ACTV::Identity.new(:id => 2)
22
+ (one == two).should be_false
23
+ end
24
+
25
+ it "returns false when classes are different" do
26
+ one = ACTV::Identity.new(:id => 1)
27
+ two = ACTV::Base.new(:id => 1)
28
+ (one == two).should be_false
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::NullObject do
4
+ describe "#nil?" do
5
+ it "returns true" do
6
+ null_object = ACTV::NullObject.instance
7
+ null_object.null?.should be_true
8
+ end
9
+ end
10
+
11
+ describe "calling any method" do
12
+ it "returns self" do
13
+ null_object = ACTV::NullObject.instance
14
+ null_object.any.should equal null_object
15
+ end
16
+ end
17
+
18
+ describe "#respond_to?" do
19
+ it "returns true" do
20
+ null_object = ACTV::NullObject.instance
21
+ null_object.respond_to?(:any).should be_true
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::Place do
4
+
5
+ describe "#==" do
6
+ it "return true when objects IDs are the same" do
7
+ asset = ACTV::Place.new(placeGuid: 1, placeName: "Place 1")
8
+ other = ACTV::Place.new(placeGuid: 1, placeName: "Place 2")
9
+ (asset == other).should be_true
10
+ end
11
+
12
+ it "return false when objects IDs are different" do
13
+ asset = ACTV::Place.new(placeGuid: 1)
14
+ other = ACTV::Place.new(placeGuid: 2)
15
+ (asset == other).should be_false
16
+ end
17
+
18
+ it "return false when classes are different" do
19
+ asset = ACTV::Place.new(placeGuid: 1)
20
+ other = ACTV::Identity.new(id: 1)
21
+ (asset == other).should be_false
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::SearchResults do
4
+
5
+ describe '#results' do
6
+ it 'should return an array of ACTV::Asset when results is set' do
7
+ results = ACTV::SearchResults.new({results: [{assetGuid: '123', assetName: 'test1'}, {assetGuid: '345', assetName: 'test2'}]}).results
8
+ results.should be_a Array
9
+ results.first.should be_a ACTV::Asset
10
+ end
11
+
12
+ it 'should return an emtpy array when results is not set' do
13
+ results = ACTV::SearchResults.new({}).results
14
+ results.should eql []
15
+ end
16
+ end
17
+
18
+ describe '#facets' do
19
+ it 'should return an array of ACTV::Facet when facets is set' do
20
+ facets = ACTV::SearchResults.new({facets: [{name: "topicName", terms: [{term: "Running", count: 10}, {term: "Cycling", count: 15}]}, {name: "cityName", terms: [{term: "San Diego", count: 20}]}]}).facets
21
+ facets.should be_a Array
22
+ facets.first.should be_a ACTV::Facet
23
+ end
24
+
25
+ it 'should return an emtpy array when facets is not set' do
26
+ facets = ACTV::SearchResults.new({}).facets
27
+ facets.should eql []
28
+ end
29
+ end
30
+
31
+ describe '#facet_values' do
32
+ it 'should return an array of ACTV::FacetValue when facet_values is set' do
33
+ facet_values = ACTV::SearchResults.new({facet_values: [{name: "topicName", value: "Running", count: 25}, {name: "topicName", value: "Cycling", count: 10}]}).facet_values
34
+ facet_values.should be_a Array
35
+ facet_values.first.should be_a ACTV::FacetValue
36
+ end
37
+
38
+ it 'should return an emtpy array when facets is not set' do
39
+ facets = ACTV::SearchResults.new({}).facet_values
40
+ facets.should eql []
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV::User do
4
+
5
+ describe "#==" do
6
+ it "returns true when object IDs are the same" do
7
+ user = ACTV::User.new(id: 1, first_name: 'Tom')
8
+ other = ACTV::User.new(id: 1, first_name: 'Tim')
9
+ (user == other).should be_true
10
+ end
11
+
12
+ it "returns false when object IDs are different" do
13
+ user = ACTV::User.new(id: 1, first_name: 'Tim')
14
+ other = ACTV::User.new(id: 2, first_name: 'Tim')
15
+ (user == other).should be_false
16
+ end
17
+
18
+ it "returns false when classes are different" do
19
+ user = ACTV::User.new(id: 1)
20
+ other = ACTV::Identity.new(id: 1)
21
+ (user == other).should be_false
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe ACTV do
4
+
5
+ after do
6
+ ACTV.reset!
7
+ end
8
+
9
+ context "when delegating to a client" do
10
+
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
+ end
15
+
16
+ it "requests the correct resource" do
17
+ ACTV.asset('valid_asset')
18
+ a_get("/v2/assets/valid_asset.json").should have_been_made
19
+ end
20
+
21
+ it "returns the same results as a client" do
22
+ ACTV.asset('valid_asset').should eq ACTV::Client.new.asset('valid_asset')
23
+ end
24
+
25
+ end
26
+
27
+ describe '.respond_to?' do
28
+ it "delegates to ACTV::Client" do
29
+ ACTV.respond_to?(:asset).should be_true
30
+ end
31
+
32
+ it "takes an optional argument" do
33
+ ACTV.respond_to?(:asset, true).should be_true
34
+ end
35
+ end
36
+
37
+ describe ".client" do
38
+ it "returns a ACTV::Client" do
39
+ ACTV.client.should be_a ACTV::Client
40
+ end
41
+ end
42
+
43
+ describe ".configure" do
44
+ ACTV::Configurable.keys.each do |key|
45
+ it "sets the #{key.to_s.gsub('_', ' ')}" do
46
+ ACTV.configure do |config|
47
+ config.send("#{key}=", key)
48
+ end
49
+ ACTV.instance_variable_get("@#{key}").should eq key
50
+ end
51
+ end
52
+ end
53
+
54
+ ACTV::Configurable::CONFIG_KEYS.each do |key|
55
+ it "has a default #{key.to_s.gsub('_', ' ')}" do
56
+ ACTV.send(key).should eq ACTV::Default.options[key]
57
+ end
58
+ end
59
+
60
+ end
File without changes
@@ -0,0 +1,21 @@
1
+ {
2
+ "active_eid": "bc7bb889-35df-4e9f-8eb9-18900d1af4e8",
3
+ "id":1,
4
+ "first_name":"Jeff",
5
+ "last_name":"Fang",
6
+ "middle_name":null,
7
+ "gender":"MALE",
8
+ "display_name":"JeffFang",
9
+ "date_of_birth":"1982-10-10T00:00:00+00:00",
10
+ "address":{
11
+ "city":"sfsfsf",
12
+ "country_code":"US",
13
+ "id":"bbb2106a-97f0-4619-bcfe-794bb3311614",
14
+ "line1":"sfsf",
15
+ "line2":"sf",
16
+ "postal_code":"12345",
17
+ "province":"AR"
18
+ },
19
+ "phone_number":null,
20
+ "email":"testSTG@testactive.com"
21
+ }
@@ -0,0 +1 @@
1
+ {"status":"not implemented"}
@@ -0,0 +1,187 @@
1
+ {
2
+
3
+ "assetStatus": {
4
+ "assetStatusId": "2",
5
+ "assetStatusName": "VISIBLE",
6
+ "isSearchable": "true",
7
+ "isDeleted": "false",
8
+ "createdDate": "2012-05-09T22:37:09",
9
+ "modifiedDate": "2012-05-09T22:37:09"
10
+ },
11
+ "organization": { },
12
+ "place": {
13
+ "placeGuid": "91a9a869-e74e-4016-ba1e-2aafb17a9acc",
14
+ "placeName": "Article",
15
+ "placeDsc": "",
16
+ "placeUrlAdr": "",
17
+ "addressLine1Txt": "Article",
18
+ "addressLine2Txt": "",
19
+ "cityName": "Article",
20
+ "stateProvinceCode": "CA",
21
+ "localityName": "",
22
+ "postalCode": "00000",
23
+ "countryName": "USA",
24
+ "countryCode": "",
25
+ "latitude": "37.271875",
26
+ "longitude": "-119.270229",
27
+ "directionsTxt": "",
28
+ "geoPoint": {
29
+ "lat": "37.271875",
30
+ "lon": "-119.270229"
31
+ }
32
+ },
33
+ "evergreenAsset": { },
34
+ "dma": { },
35
+ "sourceSystem": {
36
+ "sourceSystemName": "Active.com Articles",
37
+ "legacyGuid": "CA4EA0B1-7377-470D-B20D-BF6BEA23F040"
38
+ },
39
+ "assetRootAsset": { },
40
+ "assetParentAsset": { },
41
+ "market": {
42
+ "marketId": "8",
43
+ "marketName": "endurance-running"
44
+ },
45
+ "assetGuid": "63e030f3-3df4-402c-9617-d37f6fb2c11a",
46
+ "assetName": "4 Tips on Running Your Best 10K",
47
+ "assetDsc": "",
48
+ "alternateName": "",
49
+ "timezone": "",
50
+ "timezoneAbb": "",
51
+ "timezoneName": "",
52
+ "currencyCd": "",
53
+ "localeCd": "",
54
+ "salesStartDate": null,
55
+ "salesEndDate": null,
56
+ "urlAdr": "http://www.active.com/running/Articles/4-Tips-on-Running-Your-Best-10k.htm",
57
+ "detailPageTemplateId": "",
58
+ "preferredUrlAdr": "",
59
+ "logoUrlAdr": "",
60
+ "activityStartDate": null,
61
+ "activityStartTime": "",
62
+ "activityEndDate": null,
63
+ "activityEndTime": "",
64
+ "donationUrlAdr": "",
65
+ "teamUrlAdr": "",
66
+ "homePageUrlAdr": "",
67
+ "registrationUrlAdr": "",
68
+ "regReqMinAge": "",
69
+ "regReqMaxAge": "",
70
+ "regReqGenderCd": "",
71
+ "resultsUrlAdr": "",
72
+ "isRecurring": "false",
73
+ "contactName": "",
74
+ "contactEmailAdr": "",
75
+ "contactPhone": "",
76
+ "contactTxt": "",
77
+ "showContact": "false",
78
+ "sorId": "",
79
+ "sorCreateDtm": null,
80
+ "sorCreateUserId": "",
81
+ "authorName": "Greg Tymon, M.Ed., C.S.C.S.",
82
+ "publishDate": "2012-07-01T12:12:00",
83
+ "createdDate": "2012-07-06T15:51:52",
84
+ "modifiedDate": "2012-07-09T20:56:06",
85
+ "activityRecurrences": [ ],
86
+ "assetQuantity": { },
87
+ "assetLegacyData": { },
88
+ "assetTags": [
89
+ {
90
+ "tag": {
91
+ "tagId": "3162",
92
+ "tagName": "Article",
93
+ "tagDescription": "articleType"
94
+ }
95
+ }
96
+ ],
97
+ "assetPrices": [ ],
98
+ "assetDescriptions": [
99
+ {
100
+ "descriptionType": {
101
+ "descriptionTypeId": "4",
102
+ "descriptionTypeName": "summary"
103
+ },
104
+ "description": "Running can be endlessly challenging for any participant. There is always another mile or a faster time that you can work towards. Use these tips to push it a little harder on your next run."
105
+ },
106
+ {
107
+ "descriptionType": {
108
+ "descriptionTypeId": "6",
109
+ "descriptionTypeName": "Standard"
110
+ },
111
+ "description": "<p> One of the great virtues of the sport of running is that it can be endlessly challenging for every participant. There is always a greater distance or a faster time just waiting for you to take it on. For beginners, just completing your first three-mile training run can be celebrated as a tremendous accomplishment. </p> <p> For seasoned runners, shaving time from a personal record is its own form of winning. As you age, your progress within age groups may account for new personal bests. And for every runner, it is the running itself that is its own reward.<br /> <br /> If you're relatively new to running, adding up mileage works physiological magic-increasing your stamina, your strength, and your speed. But if you've built a good base of about 25 to 30 miles a week or more and have been running in your comfort zone for a while, you will need to introduce some new training techniques and tweak your habits here and there to get faster. </p> <p> What you need is a well-rounded <a href=/Page23545.aspx title=Your 3-Part Training Plan>training program</a> that incorporates speed work, long runs, and adequate rest and recovery. Here is a quick guide for improving your 10K race time: </p> <h2>Adding Speed Work</h2> <p> The human body adapts very specifically to the demands placed upon it. If you run long and slow, your body will become very efficient at running long and slow. For example, if you run a total of 40 miles per week at a constant pace, you will train the energy...</p>"
112
+ },
113
+ {
114
+ "descriptionType": {
115
+ "descriptionTypeId": "8",
116
+ "descriptionTypeName": "articleSource"
117
+ },
118
+ "description": "<a href=http://www.americanrunning.org/><i>American Running Association</i></a>"
119
+ },
120
+ {
121
+ "descriptionType": {
122
+ "descriptionTypeId": "9",
123
+ "descriptionTypeName": "articleByline"
124
+ },
125
+ "description": "By Greg Tymon, M.Ed., C.S.C.S."
126
+ },
127
+ {
128
+ "descriptionType": {
129
+ "descriptionTypeId": "10",
130
+ "descriptionTypeName": "articleAuthorBio"
131
+ },
132
+ "description": "Author Bio"
133
+ },
134
+ {
135
+ "descriptionType": {
136
+ "descriptionTypeId": "28",
137
+ "descriptionTypeName": "authorFooter"
138
+ },
139
+ "description": "<div class=\"article-signature-block\"> <div class=\"signature-block-photo\"><img width=\"60\" height=\"60\" src=\"/Assets/Running/Experts/Jeff+Galloway_120.jpg\" /></div> <div class=\"author-info\"> <span class=\"author-link\"><a href=\"http://www.active.com/running/experts/jeffgalloway/\" title=\"Jeff Galloway\">Jeff's Bio</a></span> <span class=\"author-name\">Jeff Galloway</span><span class=\"author-title\"> Active.com Running Expert</span> </div> <div class=\"author-text\">Olympian Jeff Galloway has helped over a million runners through his running schools, training programs, beach and Tahoe retreats, books and training programs?which are fun and offer individualized coaching from Jeff. To subscribe to his free newsletter visit <a target=\"_blank\" href=\"http://www.JeffGalloway.com\">JeffGalloway.com</a> </div> </div>"
140
+ }
141
+ ],
142
+ "assetChannels": [
143
+ {
144
+ "sequence": "1",
145
+ "channel": {
146
+ "channelId": "1020",
147
+ "channelName": "Running",
148
+ "channelDsc": "Running"
149
+ }
150
+ }
151
+ ],
152
+ "assetMediaTypes": [ ],
153
+ "assetImages": [
154
+ {
155
+ "imageUrlAdr": "http://www.active.com/AssetFactory.aspx?did=50534",
156
+ "imageName": "image1",
157
+ "imageCaptionTxt": ""
158
+ },
159
+ {
160
+ "imageUrlAdr": "http://www.active.com/AssetFactory.aspx?did=50534",
161
+ "imageName": "authorImage",
162
+ "imageCaptionTxt": "Author"
163
+ }
164
+ ],
165
+ "assetTopics": [
166
+ {
167
+ "sequence": "1",
168
+ "topic": {
169
+ "topicId": "27",
170
+ "topicName": "Running"
171
+ }
172
+ }
173
+ ],
174
+ "assetCategories": [
175
+ {
176
+ "sequence": "1",
177
+ "category": {
178
+ "categoryId": "7",
179
+ "categoryName": "Articles"
180
+ }
181
+ }
182
+ ],
183
+ "assetMetaInterests": [ ],
184
+ "assetComponents": [ ],
185
+ "assetServiceHostName": "int-asset-403"
186
+
187
+ }