wcc-blogs-client 0.4.0 → 0.6.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.
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: ''