richer_text 0.10.0 → 0.11.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
  SHA256:
3
- metadata.gz: 587dab9004a19d9fdd0d5d1c191f01f2d128e73f20a4c10b38b1b43fc6206a94
4
- data.tar.gz: 60ca0263af5e39723bfab6cb3700623aed408bd34e55d4fc6cd81dbebf0f823b
3
+ metadata.gz: b0896d20faa3ab1fcf20e72e0be2fe6902bf2831b8f21bc5d006f6bbac0d4aad
4
+ data.tar.gz: e0b592625c14d7c867087b29129b4bf711e01675eb8e1187a6aa4114fab9eb48
5
5
  SHA512:
6
- metadata.gz: 7d43de3d31186bf8e5c19b1194d817440c10e05e2b4ebfb689882233a4ac7680fb64761476305535c3a1bc5b7f3896116f87419cb824b174dc2e9c7ef5108222
7
- data.tar.gz: 41d039dc8fe7b478d7f106562812c1871c9341438f04441cff205ac6f0df35d7b535571c1e3d6dffd1296c61d369828ab1efcd169b82020a18c65a0f1819184b
6
+ metadata.gz: 3f386bd1e15a650db59353b2627224d5dbdcbcfdaa28f49fe7fde165266cac6d876d618da844a00c7c1d7457468543060437aff4a7c2d41736f7eaf6152d92dc
7
+ data.tar.gz: 364abb9092c4f8bb13959c3dc13291a22b485e8360f12219064ec4bcb73deeff965c4942d5b0320e8d3977ad7bc107a78133649f72a2b02264fa3945a07adc06
@@ -0,0 +1,81 @@
1
+ require "oembed"
2
+
3
+ module RicherText
4
+ class OEmbed < ApplicationRecord
5
+ include RicherText::Embeddable
6
+
7
+ PATTERNS = [
8
+ {source: "^http:\\/\\/([^\\.]+\\.)?flickr\\.com\\/(.*?)", options: ""},
9
+ {source: "^https:\\/\\/([^\\.]+\\.)?flickr\\.com\\/(.*?)", options: ""},
10
+ {source: "^http:\\/\\/flic\\.kr\\/(.*?)", options: ""},
11
+ {source: "^https:\\/\\/flic\\.kr\\/(.*?)", options: ""},
12
+ {source: "^https:\\/\\/([^\\.]+\\.)?imgur\\.com\\/gallery\\/(.*?)", options: ""},
13
+ {source: "^http:\\/\\/([^\\.]+\\.)?imgur\\.com\\/gallery\\/(.*?)", options: ""},
14
+ {source: "^http:\\/\\/instagr\\.am\\/p\\/(.*?)", options: ""},
15
+ {source: "^http:\\/\\/instagram\\.com\\/p\\/(.*?)", options: ""},
16
+ {source: "^http:\\/\\/www\\.instagram\\.com\\/p\\/(.*?)", options: ""},
17
+ {source: "^https:\\/\\/instagr\\.am\\/p\\/(.*?)", options: ""},
18
+ {source: "^https:\\/\\/instagram\\.com\\/p\\/(.*?)", options: ""},
19
+ {source: "^https:\\/\\/www\\.instagram\\.com\\/p\\/(.*?)", options: ""},
20
+ {source: "^http:\\/\\/([^\\.]+\\.)?soundcloud\\.com\\/(.*?)", options: ""},
21
+ {source: "^https:\\/\\/([^\\.]+\\.)?soundcloud\\.com\\/(.*?)", options: ""},
22
+ {source: "^http:\\/\\/open\\.spotify\\.com\\/(.*?)", options: ""},
23
+ {source: "^https:\\/\\/open\\.spotify\\.com\\/(.*?)", options: ""},
24
+ {source: "^http:\\/\\/play\\.spotify\\.com\\/(.*?)", options: ""},
25
+ {source: "^https:\\/\\/play\\.spotify\\.com\\/(.*?)", options: ""},
26
+ {source: "^spotify\\:(.*?)", options: ""},
27
+ {source: "^https:\\/\\/([^\\.]+\\.)?twitter\\.com\\/(.*?)\\/status\\/(.*?)", options: ""},
28
+ {source: "^http:\\/\\/([^\\.]+\\.)?vimeo\\.com\\/(.*?)", options: ""},
29
+ {source: "^https:\\/\\/([^\\.]+\\.)?vimeo\\.com\\/(.*?)", options: ""},
30
+ {source: "^http:\\/\\/([^\\.]+\\.)?youtube\\.com\\/(.*?)", options: ""},
31
+ {source: "^https:\\/\\/([^\\.]+\\.)?youtube\\.com\\/(.*?)", options: ""},
32
+ {source: "^http:\\/\\/([^\\.]+\\.)?youtu\\.be\\/(.*?)", options: ""},
33
+ {source: "^https:\\/\\/([^\\.]+\\.)?youtu\\.be\\/(.*?)", options: ""}
34
+ ]
35
+
36
+ def self.from_url(url)
37
+ find_by!(url: url)
38
+ rescue ActiveRecord::RecordNotFound
39
+ resource = ::OEmbed::Providers.get(url)
40
+ create!(url: url, fields: resource.fields)
41
+ end
42
+
43
+ def self.delegate_fields(*keys)
44
+ keys.each do |key|
45
+ define_method(key) do
46
+ fields[key.to_s]
47
+ end
48
+ end
49
+ end
50
+
51
+ delegate_fields(
52
+ :type,
53
+ :version,
54
+ :title,
55
+ :author_name,
56
+ :author_url,
57
+ :provider_name,
58
+ :provider_url,
59
+ :thumbnail_url,
60
+ :thumbnail_width,
61
+ :thumbnail_height,
62
+ :height,
63
+ :width,
64
+ :html
65
+ )
66
+
67
+ %w[link photo rich video].each do |embed_type|
68
+ define_method "#{embed_type}?" do
69
+ type == embed_type
70
+ end
71
+ end
72
+
73
+ def to_embeddable_partial_path
74
+ "richer_text/o_embeds/embed"
75
+ end
76
+
77
+ def to_richer_text_editor_partial_path
78
+ "richer_text/o_embeds/richer_text_editor_embed"
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,11 @@
1
+ <% if o_embed.thumbnail_url && !o_embed.html %>
2
+ <div class="embed">
3
+ <%= image_tag o_embed.thumbnail_url %>
4
+ </div>
5
+ <% elsif o_embed.html %>
6
+ <div class="embed">
7
+ <%= o_embed.html.html_safe %>
8
+ </div>
9
+ <% elsif o_embed.provider_name %>
10
+ <%= link_to o_embed.provider_name, o_embed.url %>
11
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <% if o_embed.thumbnail_url %>
2
+ <div class="embed">
3
+ <%= image_tag o_embed.thumbnail_url %>
4
+ </div>
5
+ <% elsif o_embed.html %>
6
+ <div class="embed">
7
+ <%= o_embed.html.html_safe %>
8
+ </div>
9
+ <% elsif o_embed.provider_name %>
10
+ <%= link_to o_embed.provider_name, o_embed.url %>
11
+ <% end %>
@@ -0,0 +1,10 @@
1
+ class CreateRicherTextOEmbeds < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :richer_text_o_embeds do |t|
4
+ t.jsonb :fields
5
+ t.string :url
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -17,11 +17,11 @@ module RicherText
17
17
  @embed
18
18
  end
19
19
 
20
- delegate :to_embeddable_partial_path, to: :@embed
20
+ delegate :to_richer_text_editor_partial_path, to: :@embed
21
21
  delegate :model_name, to: :@embed
22
22
 
23
23
  def html
24
- render partial: to_embeddable_partial_path, object: object, as: model_name.element
24
+ render partial: to_richer_text_editor_partial_path, object: object, as: model_name.element
25
25
  end
26
26
  end
27
27
  end
@@ -10,6 +10,10 @@ module RicherText
10
10
  def to_embeddable_partial_path
11
11
  to_partial_path
12
12
  end
13
+
14
+ def to_richer_text_editor_partial_path
15
+ to_partial_path
16
+ end
13
17
  end
14
18
  end
15
19
  end
@@ -1,4 +1,5 @@
1
1
  require "rails"
2
+ require "oembed"
2
3
 
3
4
  module RicherText
4
5
  class Engine < ::Rails::Engine
@@ -15,5 +16,13 @@ module RicherText
15
16
  helper RicherText::TagHelper
16
17
  end
17
18
  end
19
+
20
+ config.after_initialize do
21
+ ::OEmbed::Providers.register_all
22
+ ::OEmbed::Providers.register_fallback(
23
+ ::OEmbed::ProviderDiscovery,
24
+ ::OEmbed::Providers::Noembed
25
+ )
26
+ end
18
27
  end
19
28
  end
@@ -82,7 +82,7 @@ module RicherText
82
82
  end
83
83
 
84
84
  def visit_image(node)
85
- "<img src='#{node.src}' />"
85
+ "<img src='#{node.src}' width='#{node.width}' />"
86
86
  end
87
87
 
88
88
  def visit_text(node, marks)
@@ -8,6 +8,10 @@ module RicherText
8
8
  def signed_id
9
9
  @signed_id = attrs['signedId']
10
10
  end
11
+
12
+ def width
13
+ attrs['width']
14
+ end
11
15
  end
12
16
  end
13
17
  end
@@ -7,7 +7,7 @@ module RicherText
7
7
 
8
8
  def html
9
9
  render partial: embeddable.to_embeddable_partial_path, object: embeddable, as: embeddable.model_name.element
10
- rescue ActiveRecord::RecordNotFound
10
+ rescue ActiveRecord::RecordNotFound, NoMethodError
11
11
  "" # TODO: handle this better
12
12
  end
13
13
 
@@ -1,3 +1,3 @@
1
1
  module RicherText
2
- VERSION = "0.10.0"
2
+ VERSION = "0.11.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: richer_text
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrea Fomera
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-24 00:00:00.000000000 Z
11
+ date: 2023-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 7.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby-oembed
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description:
28
42
  email:
29
43
  - afomera@hey.com
@@ -44,12 +58,16 @@ files:
44
58
  - app/mailers/richer_text/application_mailer.rb
45
59
  - app/models/richer_text/application_record.rb
46
60
  - app/models/richer_text/json_text.rb
61
+ - app/models/richer_text/o_embed.rb
47
62
  - app/models/richer_text/rich_text.rb
48
63
  - app/views/layouts/richer_text/application.html.erb
49
64
  - app/views/richer_text/contents/_content.html.erb
65
+ - app/views/richer_text/o_embeds/_embed.html.erb
66
+ - app/views/richer_text/o_embeds/_richer_text_editor_embed.html.erb
50
67
  - config/routes.rb
51
68
  - db/migrate/20230107020316_create_richer_text_rich_texts.rb
52
69
  - db/migrate/20230916224959_create_richer_text_json_texts.rb
70
+ - db/migrate/20230926034114_create_richer_text_o_embeds.rb
53
71
  - lib/generators/richer_text/install/install_generator.rb
54
72
  - lib/richer_text.rb
55
73
  - lib/richer_text/attribute.rb