actv 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +30 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +64 -0
- data/Gemfile +4 -0
- data/Guardfile +20 -0
- data/LICENSE +22 -0
- data/README.md +63 -0
- data/Rakefile +17 -0
- data/actv.gemspec +34 -0
- data/lib/actv.rb +48 -0
- data/lib/actv/address.rb +9 -0
- data/lib/actv/article.rb +89 -0
- data/lib/actv/article_search_results.rb +15 -0
- data/lib/actv/asset.rb +186 -0
- data/lib/actv/asset_channel.rb +13 -0
- data/lib/actv/asset_component.rb +8 -0
- data/lib/actv/asset_description.rb +15 -0
- data/lib/actv/asset_description_type.rb +12 -0
- data/lib/actv/asset_image.rb +13 -0
- data/lib/actv/asset_legacy_data.rb +20 -0
- data/lib/actv/asset_price.rb +11 -0
- data/lib/actv/asset_seo_url.rb +5 -0
- data/lib/actv/asset_status.rb +17 -0
- data/lib/actv/asset_tag.rb +9 -0
- data/lib/actv/asset_topic.rb +11 -0
- data/lib/actv/base.rb +148 -0
- data/lib/actv/channel.rb +13 -0
- data/lib/actv/client.rb +330 -0
- data/lib/actv/configurable.rb +39 -0
- data/lib/actv/default.rb +87 -0
- data/lib/actv/error.rb +32 -0
- data/lib/actv/error/bad_gateway.rb +11 -0
- data/lib/actv/error/bad_request.rb +10 -0
- data/lib/actv/error/client_error.rb +39 -0
- data/lib/actv/error/enhance_your_calm.rb +10 -0
- data/lib/actv/error/forbidden.rb +10 -0
- data/lib/actv/error/internal_server_error.rb +11 -0
- data/lib/actv/error/not_acceptable.rb +10 -0
- data/lib/actv/error/not_found.rb +10 -0
- data/lib/actv/error/server_error.rb +19 -0
- data/lib/actv/error/service_unavailable.rb +11 -0
- data/lib/actv/error/unauthorized.rb +10 -0
- data/lib/actv/event.rb +213 -0
- data/lib/actv/event_result.rb +8 -0
- data/lib/actv/event_search_results.rb +11 -0
- data/lib/actv/evergreen.rb +53 -0
- data/lib/actv/facet.rb +16 -0
- data/lib/actv/facet_term.rb +5 -0
- data/lib/actv/facet_value.rb +7 -0
- data/lib/actv/identity.rb +28 -0
- data/lib/actv/interest.rb +39 -0
- data/lib/actv/null_object.rb +19 -0
- data/lib/actv/phone_number.rb +9 -0
- data/lib/actv/place.rb +24 -0
- data/lib/actv/popular_interest.rb +18 -0
- data/lib/actv/popular_interest_search_results.rb +12 -0
- data/lib/actv/request/multipart_with_file.rb +37 -0
- data/lib/actv/response/parse_json.rb +29 -0
- data/lib/actv/response/raise_client_error.rb +21 -0
- data/lib/actv/response/raise_server_error.rb +18 -0
- data/lib/actv/search_results.rb +30 -0
- data/lib/actv/sub_event.rb +15 -0
- data/lib/actv/tag.rb +9 -0
- data/lib/actv/topic.rb +9 -0
- data/lib/actv/user.rb +38 -0
- data/lib/actv/version.rb +3 -0
- data/spec/actv/article_search_results_spec.rb +16 -0
- data/spec/actv/article_spec.rb +44 -0
- data/spec/actv/asset_channel_spec.rb +17 -0
- data/spec/actv/asset_description_spec.rb +17 -0
- data/spec/actv/asset_image_spec.rb +27 -0
- data/spec/actv/asset_price_spec.rb +23 -0
- data/spec/actv/asset_spec.rb +172 -0
- data/spec/actv/asset_status_spec.rb +24 -0
- data/spec/actv/base_spec.rb +51 -0
- data/spec/actv/client/articles_spec.rb +130 -0
- data/spec/actv/client/assets_spec.rb +87 -0
- data/spec/actv/client/event_results_spec.rb +35 -0
- data/spec/actv/client/events_spec.rb +99 -0
- data/spec/actv/client/search_spec.rb +58 -0
- data/spec/actv/client/system_health_spec.rb +16 -0
- data/spec/actv/client/users_spec.rb +31 -0
- data/spec/actv/client_spec.rb +140 -0
- data/spec/actv/event_spec.rb +331 -0
- data/spec/actv/evergreen_spec.rb +33 -0
- data/spec/actv/identifiable_spec.rb +31 -0
- data/spec/actv/null_object_spec.rb +24 -0
- data/spec/actv/place_spec.rb +25 -0
- data/spec/actv/search_results_spec.rb +44 -0
- data/spec/actv/user_spec.rb +25 -0
- data/spec/actv_spec.rb +60 -0
- data/spec/faraday/response_spec.rb +0 -0
- data/spec/fixtures/me.json +21 -0
- data/spec/fixtures/system_health.json +1 -0
- data/spec/fixtures/valid_article.json +187 -0
- data/spec/fixtures/valid_asset.json +185 -0
- data/spec/fixtures/valid_event.json +188 -0
- data/spec/fixtures/valid_event_results.json +23 -0
- data/spec/fixtures/valid_evergreen.json +1 -0
- data/spec/fixtures/valid_evergreen_child_1.json +1 -0
- data/spec/fixtures/valid_search.json +1282 -0
- data/spec/fixtures/valid_search_no_event_results.json +5 -0
- data/spec/fixtures/valid_search_no_results.json +9 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/support/helper.rb +43 -0
- metadata +432 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
3
|
+
module ACTV
|
4
|
+
class Evergreen < ::SimpleDelegator
|
5
|
+
attr_accessor :asset, :current_event, :events
|
6
|
+
|
7
|
+
def initialize asset
|
8
|
+
super asset
|
9
|
+
@asset = asset
|
10
|
+
@events = []
|
11
|
+
@current_event = {}
|
12
|
+
asset.evergreenAssets.each do |sub_asset|
|
13
|
+
@events << SubEvent.new(sub_asset)
|
14
|
+
@current_event = sub_asset if Time.parse(sub_asset.fetch(:activityEndDate, "1970-01-01T00:00:01")) > Time.parse(@current_event.fetch(:activityEndDate, "1970-01-01T00:00:01"))
|
15
|
+
end
|
16
|
+
@events = @events.sort_by { |event| event.end_date }.reverse
|
17
|
+
@current_event = ACTV.event @current_event[:assetGuid]
|
18
|
+
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def evergreen?
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
def components
|
27
|
+
@current_event.components
|
28
|
+
end
|
29
|
+
|
30
|
+
def legacy_data
|
31
|
+
@current_event.legacy_data
|
32
|
+
end
|
33
|
+
|
34
|
+
def description_by_type type
|
35
|
+
asset_description = @asset.description_by_type type rescue nil
|
36
|
+
|
37
|
+
if asset_description.present?
|
38
|
+
asset_description
|
39
|
+
else
|
40
|
+
@current_event.description_by_type type
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def method_missing method, *args, &block
|
45
|
+
begin
|
46
|
+
@asset.send(method, *args)
|
47
|
+
rescue NoMethodError => e
|
48
|
+
@current_event.send(method, *args)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
data/lib/actv/facet.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'actv/base'
|
2
|
+
|
3
|
+
module ACTV
|
4
|
+
class Identity < ACTV::Base
|
5
|
+
|
6
|
+
# Initializes a new object
|
7
|
+
#
|
8
|
+
# @param attrs [Hash]
|
9
|
+
# @raise [ArgumentError] Error raised when supplied argument is missing an :id key.
|
10
|
+
# @return [ACTV::Base]
|
11
|
+
def initialize(attrs={})
|
12
|
+
super
|
13
|
+
raise ArgumentError, 'argument must have an :id key' unless id
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param other [ACTV::Identity]
|
17
|
+
# @return [Boolean]
|
18
|
+
def ==(other)
|
19
|
+
super || attr_equal(:id, other) || attrs_equal(other)
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Integer]
|
23
|
+
def id
|
24
|
+
@attrs[:id]
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'actv/identity'
|
2
|
+
require 'actv/asset_tag'
|
3
|
+
require 'actv/asset_topic'
|
4
|
+
|
5
|
+
module ACTV
|
6
|
+
class Interest < ACTV::Identity
|
7
|
+
|
8
|
+
attr_reader :interestGuid, :interestName, :urlAdr, :imgUrlAdr, :sorCreatedBy, :sorModifiedBy, :createdDate,
|
9
|
+
:modifiedDate, :interestTags, :interestAttributes, :interestTopics, :assetServiceHostName
|
10
|
+
|
11
|
+
alias id interestGuid
|
12
|
+
alias name interestName
|
13
|
+
alias url urlAdr
|
14
|
+
alias image_url imgUrlAdr
|
15
|
+
alias created_by sorCreatedBy
|
16
|
+
alias modified_by sorModifiedBy
|
17
|
+
alias created_date createdDate
|
18
|
+
alias modified_date modifiedDate
|
19
|
+
alias attributes interestAttributes
|
20
|
+
alias asset_service_host_name assetServiceHostName
|
21
|
+
|
22
|
+
def tags
|
23
|
+
@asset_tags ||= Array(@attrs[:interestTags]).map do |tag|
|
24
|
+
ACTV::AssetTag.new(tag)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
alias interest_tags tags
|
28
|
+
alias interestTags tags
|
29
|
+
|
30
|
+
def topics
|
31
|
+
@asset_topics ||= Array(@attrs[:interestTopics]).map do |topic|
|
32
|
+
ACTV::AssetTopic.new(topic)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
alias interest_topics topics
|
36
|
+
alias interestTopics topics
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module ACTV
|
4
|
+
class NullObject
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
def nil?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(*args, &block)
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def respond_to_missing?(method_name, include_private=false)
|
16
|
+
true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/actv/place.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'actv/identity'
|
2
|
+
|
3
|
+
module ACTV
|
4
|
+
class Place < ACTV::Identity
|
5
|
+
|
6
|
+
attr_reader :placeGuid, :placeName, :placeDsc, :placeUrlAdr, :addressLine1Txt, :addressLine2Txt, :cityName,
|
7
|
+
:stateProvinceCode, :localityName, :postalCode, :countryName, :countryCode, :latitude, :longitude,
|
8
|
+
:directionsTxt
|
9
|
+
|
10
|
+
alias id placeGuid
|
11
|
+
alias name placeName
|
12
|
+
alias description placeDsc
|
13
|
+
alias url placeUrlAdr
|
14
|
+
alias address1 addressLine1Txt
|
15
|
+
alias address2 addressLine2Txt
|
16
|
+
alias city cityName
|
17
|
+
alias state stateProvinceCode
|
18
|
+
alias locality localityName
|
19
|
+
alias postal_code postalCode
|
20
|
+
alias country countryName
|
21
|
+
alias country_code countryCode
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'actv/identity'
|
2
|
+
require 'actv/interest'
|
3
|
+
|
4
|
+
module ACTV
|
5
|
+
class PopularInterest < ACTV::Identity
|
6
|
+
|
7
|
+
attr_reader :_index, :_type, :_id, :_version, :exists, :_source
|
8
|
+
|
9
|
+
alias index _index
|
10
|
+
alias type _type
|
11
|
+
alias id _id
|
12
|
+
alias version _version
|
13
|
+
|
14
|
+
def interest
|
15
|
+
@interest ||= ACTV::Interest.new(@attrs[:_source][:interest]) unless @attrs[:_source].nil? || @attrs[:_source][:interest].nil?
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'actv/search_results'
|
2
|
+
require 'actv/popular_interest'
|
3
|
+
|
4
|
+
module ACTV
|
5
|
+
class PopularInterestSearchResults < ACTV::SearchResults
|
6
|
+
def results
|
7
|
+
@results ||= Array(@attrs[:hits][:hits]).map do |article|
|
8
|
+
ACTV::PopularInterest.new(article)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module ACTV
|
4
|
+
module Request
|
5
|
+
class MultipartWithFile < Faraday::Middleware
|
6
|
+
|
7
|
+
def call(env)
|
8
|
+
if env[:body].is_a?(Hash)
|
9
|
+
env[:body].each do |key, value|
|
10
|
+
if value.is_a?(File)
|
11
|
+
env[:body][key] = Faraday::UploadIO.new(value, mime_type(value.path), value.path)
|
12
|
+
elsif value.is_a?(Hash) && (value[:io].is_a?(IO) || value[:io].is_a?(StringIO))
|
13
|
+
env[:body][key] = Faraday::UploadIO.new(value[:io], mime_type('.' + value[:type]), '')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
@app.call(env)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def mime_type(path)
|
23
|
+
case path
|
24
|
+
when /\.jpe?g/i
|
25
|
+
'image/jpeg'
|
26
|
+
when /\.gif$/i
|
27
|
+
'image/gif'
|
28
|
+
when /\.png$/i
|
29
|
+
'image/png'
|
30
|
+
else
|
31
|
+
'application/octet-stream'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'multi_json'
|
3
|
+
|
4
|
+
module ACTV
|
5
|
+
module Response
|
6
|
+
class ParseJson < Faraday::Response::Middleware
|
7
|
+
|
8
|
+
def parse(body)
|
9
|
+
case body
|
10
|
+
when ''
|
11
|
+
nil
|
12
|
+
when 'true'
|
13
|
+
true
|
14
|
+
when 'false'
|
15
|
+
false
|
16
|
+
else
|
17
|
+
MultiJson.load(body, :symbolize_keys => true)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def on_complete(env)
|
22
|
+
if respond_to?(:parse)
|
23
|
+
env[:body] = parse(env[:body]) unless [204, 304].include?(env[:status])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'actv/error/bad_request'
|
3
|
+
require 'actv/error/enhance_your_calm'
|
4
|
+
require 'actv/error/forbidden'
|
5
|
+
require 'actv/error/not_acceptable'
|
6
|
+
require 'actv/error/not_found'
|
7
|
+
require 'actv/error/unauthorized'
|
8
|
+
|
9
|
+
module ACTV
|
10
|
+
module Response
|
11
|
+
class RaiseClientError < Faraday::Response::Middleware
|
12
|
+
|
13
|
+
def on_complete(env)
|
14
|
+
status_code = env[:status].to_i
|
15
|
+
error_class = ACTV::Error::ClientError.errors[status_code]
|
16
|
+
raise error_class.from_response_body(env[:body]) if error_class
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'actv/error/bad_gateway'
|
3
|
+
require 'actv/error/internal_server_error'
|
4
|
+
require 'actv/error/service_unavailable'
|
5
|
+
|
6
|
+
module ACTV
|
7
|
+
module Response
|
8
|
+
class RaiseServerError < Faraday::Response::Middleware
|
9
|
+
|
10
|
+
def on_complete(env)
|
11
|
+
status_code = env[:status].to_i
|
12
|
+
error_class = ACTV::Error::ServerError.errors[status_code]
|
13
|
+
raise error_class.new if error_class
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'actv/base'
|
2
|
+
require 'actv/facet'
|
3
|
+
require 'actv/facet_value'
|
4
|
+
|
5
|
+
module ACTV
|
6
|
+
class SearchResults < ACTV::Base
|
7
|
+
attr_reader :items_per_page, :start_index, :total_results
|
8
|
+
|
9
|
+
# @return [Array<ACTV::Asset>]
|
10
|
+
def results
|
11
|
+
@results ||= Array(@attrs[:results]).map do |asset|
|
12
|
+
ACTV::Asset.new(asset)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Array<ACTV::Facet>]
|
17
|
+
def facets
|
18
|
+
@facets ||= Array(@attrs[:facets]).map do |facet|
|
19
|
+
ACTV::Facet.new(facet)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [Array<ACTV::FacetValue>]
|
24
|
+
def facet_values
|
25
|
+
@facet_values ||= Array(@attrs[:facet_values]).map do |facet_value|
|
26
|
+
ACTV::FacetValue.new(facet_value)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ACTV
|
2
|
+
class SubEvent
|
3
|
+
attr_accessor :id, :name, :start_date, :end_date, :url
|
4
|
+
|
5
|
+
def initialize hsh
|
6
|
+
@id = hsh[:assetGuid]
|
7
|
+
@name = hsh[:assetName]
|
8
|
+
@start_date = Time.parse(hsh.fetch(:activityStartDate, "1970-01-01T00:00:00"))
|
9
|
+
@end_date = Time.parse(hsh.fetch(:activityEndDate, "1970-01-01T00:00:00"))
|
10
|
+
url = hsh.fetch(:assetSeoUrls, []).first || {}
|
11
|
+
@url = url.fetch :urlAdr, "http://www.active.com/asset_service/#{@id}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
data/lib/actv/tag.rb
ADDED