article_json 0.3.3 → 0.3.5

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
- SHA1:
3
- metadata.gz: cb77fa8003fe6ff04b110471104c7f21c96f731c
4
- data.tar.gz: 5ae20ac88f04384394cd27707fdabc98be653171
2
+ SHA256:
3
+ metadata.gz: f34cc736d928d12ee64d0181a15d9b69b2bdfc6c89e76c35ffd79cb6a8acb8d5
4
+ data.tar.gz: 74c2c855413da0691866fe54d1927b4342bb5409a826807821866613203f3db9
5
5
  SHA512:
6
- metadata.gz: 8fbbd7e0de9d4632cc4f491358b1f1c16edb2f0ad63c2be91899636ab6548473f51f35b63dd773f0c5ad0ceb9ea61d4cc5af9712c039cfa6b105cdfa1b55d6f1
7
- data.tar.gz: 04be4accfb46e6c035252ca2be7154f7d2cc6794c1d0b24d09ce5ac1c3ac53ee47e79eca9fb1680dee27ee724a4fde76ee8c03846267d7523ec71f18dcbe2998
6
+ metadata.gz: ec2b0a1718c9f57dd278ce4e11bcca41a84353b3594be06599204b838701199ecaf5e21bb36921ea68c98c7fa7083d2cd8f939fb7253b07305aa4258bbf47c25
7
+ data.tar.gz: 381aad7bba231456aa45bf4f512bd2fa788dffa875b1eccf5a77d859cff28d5b061eb3b7a08c0e51b0915a57c9695c8113d07966b313be0d9ca00ad8759f2469
data/CHANGELOG.md CHANGED
@@ -1,4 +1,12 @@
1
1
  # Changelog
2
+ ## 0.3.5 - 2018/12/12
3
+ - **Improvements** to import and export image links from Google Docs
4
+ - Import image `href`` from caption text using a custom tag
5
+ - Export the image element href attribute as a link
6
+
7
+ ## 0.3.4 - 2018/5/10
8
+ - **Fix:** Only include slug from the soundcloud URL in google doc parser
9
+
2
10
  ## 0.3.3 - 2018/4/12
3
11
  - Support embedding SoundCloud
4
12
 
@@ -1,16 +1,18 @@
1
1
  module ArticleJSON
2
2
  module Elements
3
3
  class Image < Base
4
- attr_reader :source_url, :caption, :float
4
+ attr_reader :source_url, :caption, :float, :href
5
5
 
6
6
  # @param [String] source_url
7
7
  # @param [Array[ArticleJSON::Elements::Text]] caption
8
8
  # @param [Symbol] float
9
- def initialize(source_url:, caption:, float: nil)
9
+ # @param [String] href
10
+ def initialize(source_url:, caption:, float: nil, href: nil)
10
11
  @type = :image
11
12
  @source_url = source_url
12
13
  @caption = caption
13
14
  @float = float
15
+ @href = href
14
16
  end
15
17
 
16
18
  # Hash representation of this image element
@@ -21,6 +23,7 @@ module ArticleJSON
21
23
  source_url: source_url,
22
24
  float: float,
23
25
  caption: caption.map(&:to_h),
26
+ href: href,
24
27
  }
25
28
  end
26
29
 
@@ -31,7 +34,8 @@ module ArticleJSON
31
34
  new(
32
35
  source_url: hash[:source_url],
33
36
  caption: parse_hash_list(hash[:caption]),
34
- float: hash[:float]&.to_sym
37
+ float: hash[:float]&.to_sym,
38
+ href: hash[:href]
35
39
  )
36
40
  end
37
41
  end
@@ -7,24 +7,38 @@ module ArticleJSON
7
7
  include ArticleJSON::Export::Common::HTML::Elements::Shared::Caption
8
8
  include ArticleJSON::Export::Common::HTML::Elements::Shared::Float
9
9
 
10
- # Generate the `<figure>` node containing the image and caption
10
+ # Generate the `<figure>` node containing the image and caption or
11
+ # an `<a>` node containing the `<figure>` node if href is present.
11
12
  # @return [Nokogiri::XML::Element]
12
13
  def export
14
+ figure_node
15
+ end
16
+
17
+ private
18
+
19
+ # @return [Nokogiri::XML::NodeSet]
20
+ def figure_node
13
21
  create_element(:figure, node_opts) do |figure|
14
- figure.add_child(image_node)
22
+ node = @element.href.present? ? href_node : image_node
23
+ figure.add_child(node)
15
24
  if @element.caption&.any?
16
25
  figure.add_child(caption_node(:figcaption))
17
26
  end
18
27
  end
19
28
  end
20
29
 
21
- private
22
-
23
30
  # @return [Nokogiri::XML::NodeSet]
24
31
  def image_node
25
32
  create_element(:img, src: @element.source_url)
26
33
  end
27
34
 
35
+ # @return [Nokogiri::XML::NodeSet]
36
+ def href_node
37
+ create_element(:a, href: @element.href) do |a|
38
+ a.add_child(image_node)
39
+ end
40
+ end
41
+
28
42
  # @return [Hash]
29
43
  def node_opts
30
44
  return if floating_class.nil?
@@ -17,7 +17,7 @@ module ArticleJSON
17
17
  %r{
18
18
  ^\S* # all protocols & sub domains
19
19
  soundcloud\.com/ # domain
20
- (?<id>.+) # the slug of the user / track
20
+ (?<id>[-/0-9a-z]+) # the slug of the user / track
21
21
  }xi
22
22
  end
23
23
  end
@@ -12,6 +12,7 @@ module ArticleJSON
12
12
  def initialize(node:, caption_node:, css_analyzer:)
13
13
  @node = node
14
14
  @caption_node = caption_node
15
+ @href = href
15
16
  @css_analyzer = css_analyzer
16
17
 
17
18
  # Main node indicates the floating behavior
@@ -36,17 +37,42 @@ module ArticleJSON
36
37
  super if floatable_size?
37
38
  end
38
39
 
40
+ # Extracts an href from the tag [image-link-to: url]) if present
41
+ # in the caption node.
42
+ # @return [String]
43
+ def href
44
+ return if @caption_node.nil?
45
+ match = @caption_node.content.strip.match(href_regexp)
46
+ return if match.nil?
47
+ remove_image_link_tag
48
+ match[:url]
49
+ end
50
+
39
51
  # @return [ArticleJSON::Elements::Image]
40
52
  def element
41
53
  ArticleJSON::Elements::Image.new(
42
54
  source_url: source_url,
43
55
  float: float,
44
- caption: caption
56
+ caption: caption,
57
+ href: @href
45
58
  )
46
59
  end
47
60
 
48
61
  private
49
62
 
63
+ # Removes the [image-link-to: url] tag from the caption node
64
+ def remove_image_link_tag
65
+ @caption_node
66
+ .children
67
+ .first
68
+ .content = @caption_node.content.sub(href_regexp, '').strip
69
+ end
70
+
71
+ # Regular expression to check if there's a [image-link-to: url] tag
72
+ # @return [Regexp]
73
+ def href_regexp
74
+ %r{\[image-link-to:\s+(?<url>.*?)\]}
75
+ end
50
76
  # Check if the image's width can be determined and is less than 500px
51
77
  # This is about 3/4 of the google document width...
52
78
  # @return [Boolean]
@@ -1,3 +1,3 @@
1
1
  module ArticleJSON
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.5'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: article_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Sager
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-04-12 00:00:00.000000000 Z
13
+ date: 2018-12-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -230,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
230
230
  version: '0'
231
231
  requirements: []
232
232
  rubyforge_project:
233
- rubygems_version: 2.6.14
233
+ rubygems_version: 2.7.7
234
234
  signing_key:
235
235
  specification_version: 4
236
236
  summary: JSON Format for News Articles & Ruby Gem