wcc-blogs-client 0.4.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d0ee40f5dbfa5ed338bfcfc4ef0a28cf1fac1554
4
- data.tar.gz: cd4b83add94f175077a9a31062caf2a7a9a0dd64
3
+ metadata.gz: b57eccdc0dfb25b616fd887781eb5e3f18b0f00f
4
+ data.tar.gz: 9a0d581af31bbdc61ba14cfe8a4d90ce99957c21
5
5
  SHA512:
6
- metadata.gz: 1b3cb2d385fe25b0c312e2e742d2245f7f4e6eb1a58bc7a4b140b210bb612cab8fcb396c16afbbedfb36555f9c6ed5e73387854b5c477b8b7af3c28f99d2b9b1
7
- data.tar.gz: 2efbf1c351083e6460b1e09db3a383f8e6c6c48ac9ad25720e6a3982823545e11d5080ab77d3772da86e2150e91b29ef3ba91e7dcb2ec302d0d1339b0edcd3d7
6
+ metadata.gz: f418d9d819344d62bf97154b6eb4b516d742e1929e50ba6f295eb43844d9e89d222659d0f4ffc0d6146a90430dc1392a9c1002ee11b57cabd011b04546b51fa6
7
+ data.tar.gz: a2f240ce41b866dfa44e8cda879c522f7e41523cb979f145db96b2db2894dd3c7153afb50678f64294bc17dbeb411e2c845805fbe9ebe8540304940636793e41
@@ -1,5 +1,9 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
+ AllCops:
4
+ DisplayCopNames: true
5
+ TargetRubyVersion: 2.3
6
+
3
7
  Lint/AssignmentInCondition:
4
8
  Enabled: false
5
9
 
data/Guardfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  directories %w[lib spec]
2
4
 
3
5
  group :red_green_refactor, halt_on_fail: true do
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_helper"
2
4
 
3
5
  Bundler::GemHelper.install_tasks
@@ -10,6 +10,10 @@ require 'wcc/blogs/errors'
10
10
  require 'wcc/blogs/metadata'
11
11
  require 'wcc/blogs/post'
12
12
  require 'wcc/blogs/post_summary'
13
+ require 'wcc/blogs/linked_blog_post_summary'
14
+ require 'wcc/blogs/property'
15
+ require 'wcc/blogs/collection'
16
+ require 'wcc/blogs/collection_summary'
13
17
 
14
18
  module WCC::Blogs
15
19
  class << self
@@ -6,11 +6,17 @@ require_relative 'client/response'
6
6
 
7
7
  module WCC::Blogs
8
8
  class Client
9
- attr_reader :base_url, :publishing_target
9
+ attr_reader :base_url, :default_property, :base_path
10
10
 
11
- def initialize(publishing_target:, **options)
12
- @publishing_target = publishing_target
13
- @base_url = options[:base_url] || 'https://di0v2frwtdqnv.cloudfront.net'
11
+ def initialize(**options)
12
+ if options[:publishing_target]
13
+ raise ArgumentError, 'publishing_target has been renamed to default_property'
14
+ end
15
+
16
+ @default_property = options[:default_property]
17
+ base_url = URI.parse(options[:base_url] || 'https://di0v2frwtdqnv.cloudfront.net')
18
+ @base_path = base_url.path == '' ? '/api/v1' : base_url.path
19
+ @base_url = base_url.to_s
14
20
  @connection = options[:connection] || default_connection
15
21
  @query_defaults = options[:query_defaults] || {}
16
22
  end
@@ -26,27 +32,40 @@ module WCC::Blogs
26
32
  get_http(url, query))
27
33
  end
28
34
 
29
- def blog_post(slug, digest: nil) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
30
- path = '/blog/' + slug.sub(%r{^/}, '')
31
- path += '/' + digest if digest
32
- path += '.json'
35
+ def property_show(property = nil)
36
+ property ||= default_property
37
+ raise ArgumentError, 'No Property given' unless property
38
+
39
+ path = base_path + '/property/' + property
40
+ get(path).assert_ok!
41
+ end
42
+
43
+ def collection_show(key)
44
+ path = base_path + '/collection/' + key
45
+ get(path).assert_ok!
46
+ end
47
+
48
+ def blog_list(property: nil, year: nil)
49
+ property ||= default_property
50
+ raise ArgumentError, 'No Property given' unless property
51
+
52
+ path = base_path + '/property/' + property + '/blog'
53
+ path += '/' + year if year
54
+ get(path).assert_ok!
55
+ end
56
+
57
+ def blog_show(slug, digest: nil)
58
+ path = base_path + '/blog/' + slug.sub(%r{^/}, '')
59
+ path += '/' + digest + '.json' if digest
33
60
 
34
61
  get(path).tap do |resp|
35
62
  resp.assert_ok!
36
- next if resp.raw['publishingTargets'].any? { |t| t['key'] == publishing_target }
37
-
38
- raise WCC::Blogs::NotFoundException,
39
- "Blog post '#{slug}' is not published to #{publishing_target}"
63
+ check_default_property(resp)
40
64
  end
41
65
  rescue WCC::Blogs::Client::NotFoundError => e
42
66
  raise WCC::Blogs::NotFoundException, e.message
43
67
  end
44
68
 
45
- def list
46
- path = '/targets/' + publishing_target + '.json'
47
- get(path).assert_ok!
48
- end
49
-
50
69
  private
51
70
 
52
71
  def get_http(url, query, headers = {})
@@ -64,6 +83,14 @@ module WCC::Blogs
64
83
  end
65
84
  end
66
85
 
86
+ def check_default_property(resp)
87
+ return unless default_property
88
+ return if resp.raw['publishedProperties'].any? { |t| t['key'] == default_property }
89
+
90
+ raise WCC::Blogs::NotFoundException,
91
+ "Blog post '#{resp.raw['slug']}' is not published to #{default_property}"
92
+ end
93
+
67
94
  def default_connection
68
95
  ::Faraday.new do |faraday|
69
96
  faraday.use :http_cache,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'forwardable'
2
4
 
3
5
  module WCC::Blogs
@@ -18,7 +20,7 @@ module WCC::Blogs
18
20
  alias_method :to_json, :raw
19
21
 
20
22
  def next_page_url
21
- raw.dig('_links', 'previous')
23
+ raw.dig('_links', 'next')
22
24
  end
23
25
 
24
26
  def next_page?
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WCC::Blogs
4
+ class Collection
5
+ extend WCC::Blogs::Utils
6
+
7
+ def self.find(key = nil)
8
+ new(WCC::Blogs.client.collection_show(key).raw, client: WCC::Blogs.client)
9
+ end
10
+
11
+ attr_reader :raw
12
+
13
+ def initialize(raw, client: WCC::Blogs.client)
14
+ @raw = raw
15
+ @client = client
16
+ end
17
+
18
+ def to_param
19
+ key
20
+ end
21
+
22
+ define_camelcase_alias(
23
+ 'key',
24
+ 'title',
25
+ 'digest'
26
+ ) do |camelcase|
27
+ raw[camelcase]
28
+ end
29
+
30
+ def posts
31
+ @posts ||=
32
+ (raw['posts'] || []).map do |summary|
33
+ PostSummary.new(summary, client: @client)
34
+ end
35
+ end
36
+
37
+ def _links
38
+ OpenStruct.new(raw['_links'] || {})
39
+ end
40
+
41
+ alias cache_key digest
42
+ end
43
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WCC::Blogs
4
+ class CollectionSummary
5
+ extend WCC::Blogs::Utils
6
+
7
+ attr_reader :raw
8
+
9
+ def initialize(raw, client: WCC::Blogs.client)
10
+ @raw = raw
11
+ @client = client
12
+ end
13
+
14
+ define_camelcase_alias(
15
+ 'key',
16
+ 'title'
17
+ ) do |camelcase|
18
+ raw[camelcase]
19
+ end
20
+
21
+ def posts
22
+ @posts ||=
23
+ (raw['posts'] || []).map do |summary|
24
+ WCC::Blogs::LinkedBlogPostSummary.new(summary, client: @client)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WCC::Blogs
4
+ class LinkedBlogPostSummary
5
+ extend WCC::Blogs::Utils
6
+
7
+ attr_reader :raw
8
+
9
+ def initialize(raw, client: WCC::Blogs.client)
10
+ @raw = raw
11
+ @client = client
12
+ end
13
+
14
+ def full_post
15
+ Post.new(@client.get(_links.self).raw)
16
+ end
17
+
18
+ define_camelcase_alias(
19
+ 'title',
20
+ 'slug'
21
+ ) do |camelcase|
22
+ raw[camelcase]
23
+ end
24
+
25
+ define_camelcase_alias(
26
+ 'date'
27
+ ) do |camelcase|
28
+ value = raw[camelcase]
29
+
30
+ Time.parse(value) if value&.length
31
+ end
32
+
33
+ def _links
34
+ OpenStruct.new(raw['_links'] || {})
35
+ end
36
+ end
37
+ end
@@ -12,13 +12,15 @@ module WCC::Blogs
12
12
 
13
13
  define_camelcase_alias(
14
14
  'id',
15
- 'canonical_link',
15
+ 'canonical_url',
16
16
  'meta_description',
17
17
  'meta_flag'
18
18
  ) do |camelcase|
19
19
  raw[camelcase]
20
20
  end
21
21
 
22
+ alias canonical_link canonical_url
23
+
22
24
  define_camelcase_alias('meta_keywords') do |camelcase|
23
25
  next unless keywords = raw[camelcase]
24
26
 
@@ -6,7 +6,7 @@ module WCC::Blogs
6
6
  require 'time'
7
7
 
8
8
  def self.find(slug)
9
- new(WCC::Blogs.client.blog_post(slug).raw, client: WCC::Blogs.client)
9
+ new(WCC::Blogs.client.blog_show(slug).raw, client: WCC::Blogs.client)
10
10
  end
11
11
 
12
12
  def self.find_all
@@ -21,13 +21,11 @@ module WCC::Blogs
21
21
  end
22
22
 
23
23
  def author_full_name
24
- return unless author
25
-
26
- [author.firstName, author.lastName].compact.join(' ')
24
+ author&.fullName
27
25
  end
28
26
 
29
27
  def html
30
- @html ||= @client.get(URI.join(host, fragment_path).to_s)
28
+ @html ||= @client.get(_links.fragment)
31
29
  .body
32
30
  .force_encoding('UTF-8')
33
31
  end
@@ -53,6 +51,7 @@ module WCC::Blogs
53
51
  'id',
54
52
  'title',
55
53
  'subtitle',
54
+ 'summary',
56
55
  'slug',
57
56
  'host',
58
57
  'path',
@@ -68,23 +67,41 @@ module WCC::Blogs
68
67
  ) do |camelcase|
69
68
  value = raw[camelcase]
70
69
 
71
- Time.parse(value) if value && value.length
70
+ Time.parse(value) if value&.length
72
71
  end
73
72
 
74
73
  define_camelcase_alias(
75
74
  'author',
76
75
  'hero_image',
77
- 'thumbnail_image'
76
+ 'thumbnail_image',
77
+ 'flags'
78
78
  ) do |camelcase|
79
79
  OpenStruct.new(raw[camelcase]) if raw[camelcase]
80
80
  end
81
81
 
82
- define_camelcase_alias('publishing_targets') do |camelcase|
82
+ def _links
83
+ OpenStruct.new(raw['_links'] || {})
84
+ end
85
+
86
+ define_camelcase_alias(
87
+ 'published_properties',
88
+ 'categories',
89
+ 'tags'
90
+ ) do |camelcase|
83
91
  targets = raw[camelcase] || []
84
92
 
85
93
  targets.map { |val| OpenStruct.new(val) if val }
86
94
  end
87
95
 
96
+ def collection
97
+ CollectionSummary.new(raw['collection'], client: @client) if raw['collection']
98
+ end
99
+
100
+ define_camelcase_alias('related_posts') do |camelcase|
101
+ related = raw[camelcase] || []
102
+ related.map { |val| WCC::Blogs::LinkedBlogPostSummary.new(val, client: @client) }
103
+ end
104
+
88
105
  alias cache_key digest
89
106
  end
90
107
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module WCC::Blogs
2
4
  class PostSummary
3
5
  extend WCC::Blogs::Utils
4
6
 
5
7
  def self.find_all
6
- WCC::Blogs.client.list.items.map do |summary|
8
+ WCC::Blogs.client.blog_list.items.map do |summary|
7
9
  new(summary, client: WCC::Blogs.client)
8
10
  end
9
11
  end
@@ -16,7 +18,7 @@ module WCC::Blogs
16
18
  end
17
19
 
18
20
  def full_post
19
- Post.new(@client.blog_post(slug, digest: digest).raw)
21
+ Post.new(@client.get(_links.self).raw)
20
22
  end
21
23
 
22
24
  define_camelcase_alias(
@@ -24,9 +26,7 @@ module WCC::Blogs
24
26
  'title',
25
27
  'subtitle',
26
28
  'slug',
27
- 'path',
28
- 'digest',
29
- 'fragment_path'
29
+ 'digest'
30
30
  ) do |camelcase|
31
31
  raw[camelcase]
32
32
  end
@@ -37,19 +37,29 @@ module WCC::Blogs
37
37
  ) do |camelcase|
38
38
  value = raw[camelcase]
39
39
 
40
- Time.parse(value) if value && value.length
40
+ Time.parse(value) if value&.length
41
41
  end
42
42
 
43
43
  define_camelcase_alias(
44
- 'thumbnail_image'
44
+ 'author',
45
+ 'thumbnail_image',
46
+ 'flags'
45
47
  ) do |camelcase|
46
48
  OpenStruct.new(raw[camelcase]) if raw[camelcase]
47
49
  end
48
50
 
49
- define_camelcase_alias('publishing_targets') do |camelcase|
50
- targets = raw[camelcase] || []
51
+ def _links
52
+ OpenStruct.new(raw['_links'] || {})
53
+ end
54
+
55
+ define_camelcase_alias(
56
+ 'published_properties',
57
+ 'categories',
58
+ 'tags'
59
+ ) do |camelcase|
60
+ values = raw[camelcase] || []
51
61
 
52
- targets.map { |val| OpenStruct.new(val) if val }
62
+ values.map { |val| OpenStruct.new(val) if val }
53
63
  end
54
64
 
55
65
  alias cache_key digest
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WCC::Blogs
4
+ class Property
5
+ extend WCC::Blogs::Utils
6
+ require 'time'
7
+
8
+ def self.find(property = nil)
9
+ new(WCC::Blogs.client.property_show(property).raw, client: WCC::Blogs.client)
10
+ end
11
+
12
+ attr_reader :raw
13
+
14
+ def initialize(raw, client: WCC::Blogs.client)
15
+ @raw = raw
16
+ @client = client
17
+ end
18
+
19
+ def to_param
20
+ key
21
+ end
22
+
23
+ define_camelcase_alias(
24
+ 'key',
25
+ 'digest'
26
+ ) do |camelcase|
27
+ raw[camelcase]
28
+ end
29
+
30
+ def _links
31
+ OpenStruct.new(raw['_links'] || {})
32
+ end
33
+
34
+ define_camelcase_alias(
35
+ 'accepted_tags',
36
+ 'categories'
37
+ ) do |camelcase|
38
+ targets = raw[camelcase] || []
39
+
40
+ targets.map { |val| OpenStruct.new(val) if val }
41
+ end
42
+
43
+ alias cache_key digest
44
+ end
45
+ end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module WCC::Blogs
4
4
  module Utils
5
+ module_function
6
+
5
7
  def camelcase(term)
6
8
  term
7
9
  .to_s
@@ -2,6 +2,6 @@
2
2
 
3
3
  module WCC
4
4
  module Blogs
5
- VERSION = '0.4.0'.freeze
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wcc-blogs-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Watermark Dev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-12 00:00:00.000000000 Z
11
+ date: 2020-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -195,10 +195,14 @@ files:
195
195
  - lib/wcc/blogs.rb
196
196
  - lib/wcc/blogs/client.rb
197
197
  - lib/wcc/blogs/client/response.rb
198
+ - lib/wcc/blogs/collection.rb
199
+ - lib/wcc/blogs/collection_summary.rb
198
200
  - lib/wcc/blogs/errors.rb
201
+ - lib/wcc/blogs/linked_blog_post_summary.rb
199
202
  - lib/wcc/blogs/metadata.rb
200
203
  - lib/wcc/blogs/post.rb
201
204
  - lib/wcc/blogs/post_summary.rb
205
+ - lib/wcc/blogs/property.rb
202
206
  - lib/wcc/blogs/utils.rb
203
207
  - lib/wcc/blogs/version.rb
204
208
  - wcc-blogs-client.gemspec
@@ -222,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
226
  version: '0'
223
227
  requirements: []
224
228
  rubyforge_project:
225
- rubygems_version: 2.6.11
229
+ rubygems_version: 2.5.2
226
230
  signing_key:
227
231
  specification_version: 4
228
232
  summary: ''