mobility-actiontext 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/main.yml +18 -0
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +4 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +152 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +91 -0
  9. data/Rakefile +1 -0
  10. data/lib/mobility/action_text.rb +4 -0
  11. data/lib/mobility/action_text/version.rb +7 -0
  12. data/lib/mobility/backends/action_text.rb +98 -0
  13. data/mobility-actiontext.gemspec +33 -0
  14. data/test_app/.gitignore +40 -0
  15. data/test_app/Gemfile +50 -0
  16. data/test_app/Gemfile.lock +221 -0
  17. data/test_app/Rakefile +6 -0
  18. data/test_app/app/assets/config/manifest.js +2 -0
  19. data/test_app/app/assets/stylesheets/application.css +15 -0
  20. data/test_app/app/controllers/application_controller.rb +2 -0
  21. data/test_app/app/helpers/application_helper.rb +2 -0
  22. data/test_app/app/models/application_record.rb +3 -0
  23. data/test_app/app/models/post.rb +7 -0
  24. data/test_app/app/views/layouts/application.html.erb +15 -0
  25. data/test_app/bin/bundle +114 -0
  26. data/test_app/bin/rails +4 -0
  27. data/test_app/bin/rake +4 -0
  28. data/test_app/bin/setup +33 -0
  29. data/test_app/config.ru +6 -0
  30. data/test_app/config/application.rb +35 -0
  31. data/test_app/config/boot.rb +3 -0
  32. data/test_app/config/credentials.yml.enc +1 -0
  33. data/test_app/config/database.yml +25 -0
  34. data/test_app/config/environment.rb +5 -0
  35. data/test_app/config/environments/development.rb +71 -0
  36. data/test_app/config/environments/production.rb +106 -0
  37. data/test_app/config/environments/test.rb +52 -0
  38. data/test_app/config/initializers/application_controller_renderer.rb +8 -0
  39. data/test_app/config/initializers/assets.rb +14 -0
  40. data/test_app/config/initializers/backtrace_silencers.rb +8 -0
  41. data/test_app/config/initializers/content_security_policy.rb +30 -0
  42. data/test_app/config/initializers/cookies_serializer.rb +5 -0
  43. data/test_app/config/initializers/filter_parameter_logging.rb +6 -0
  44. data/test_app/config/initializers/i18n.rb +3 -0
  45. data/test_app/config/initializers/inflections.rb +16 -0
  46. data/test_app/config/initializers/mime_types.rb +4 -0
  47. data/test_app/config/initializers/mobility.rb +15 -0
  48. data/test_app/config/initializers/permissions_policy.rb +11 -0
  49. data/test_app/config/initializers/wrap_parameters.rb +14 -0
  50. data/test_app/config/locales/en.yml +33 -0
  51. data/test_app/config/puma.rb +43 -0
  52. data/test_app/config/routes.rb +3 -0
  53. data/test_app/config/storage.yml +34 -0
  54. data/test_app/db/migrate/20210114124021_create_active_storage_tables.active_storage.rb +39 -0
  55. data/test_app/db/migrate/20210114124022_create_action_text_tables.action_text.rb +16 -0
  56. data/test_app/db/migrate/20210114124951_translate_rich_texts.rb +17 -0
  57. data/test_app/db/migrate/20210114125134_create_posts.rb +7 -0
  58. data/test_app/db/schema.rb +64 -0
  59. data/test_app/db/seeds.rb +7 -0
  60. data/test_app/public/404.html +67 -0
  61. data/test_app/public/422.html +67 -0
  62. data/test_app/public/500.html +66 -0
  63. data/test_app/public/apple-touch-icon-precomposed.png +0 -0
  64. data/test_app/public/apple-touch-icon.png +0 -0
  65. data/test_app/public/favicon.ico +0 -0
  66. data/test_app/public/robots.txt +1 -0
  67. data/test_app/test/application_system_test_case.rb +5 -0
  68. data/test_app/test/fixtures/action_text/rich_texts.yml +35 -0
  69. data/test_app/test/fixtures/posts.yml +3 -0
  70. data/test_app/test/mobility_action_text_test.rb +108 -0
  71. data/test_app/test/test_helper.rb +28 -0
  72. metadata +158 -0
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
File without changes
File without changes
@@ -0,0 +1 @@
1
+ # See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
@@ -0,0 +1,5 @@
1
+ require "test_helper"
2
+
3
+ class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
4
+ driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
5
+ end
@@ -0,0 +1,35 @@
1
+ post_one_title_en:
2
+ record: one (Post)
3
+ name: title
4
+ locale: en
5
+ body: Post Title
6
+
7
+ post_one_title_fr:
8
+ record: one (Post)
9
+ name: title
10
+ locale: fr
11
+ body: Le titre du billet
12
+
13
+ post_one_content_en:
14
+ record: one (Post)
15
+ name: content
16
+ locale: en
17
+ body: <h1>Hello world!</h1>
18
+
19
+ post_one_content_fr:
20
+ record: one (Post)
21
+ name: content
22
+ locale: fr
23
+ body: <h1>Bonjour le monde !</h1>
24
+
25
+ untranslated_title_en:
26
+ record: untranslated (Post)
27
+ name: title
28
+ locale: en
29
+ body: untranslated title
30
+
31
+ untranslated_content_en:
32
+ record: untranslated (Post)
33
+ name: content
34
+ locale: en
35
+ body: untranslated content
@@ -0,0 +1,3 @@
1
+ one: {}
2
+
3
+ untranslated: {}
@@ -0,0 +1,108 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ module Mobility
6
+ class ActionTextTest < ActiveSupport::TestCase
7
+ test 'post title backend is Mobility::Backends::ActionText' do
8
+ post = posts(:one)
9
+
10
+ assert_kind_of Mobility::Backends::ActionText, post.title_backend
11
+ end
12
+
13
+ test 'post content backend is Mobility::Backends::ActionText' do
14
+ post = posts(:one)
15
+
16
+ assert_kind_of Mobility::Backends::ActionText, post.content_backend
17
+ end
18
+
19
+ test 'post has plain_text_translations association' do
20
+ post = posts(:one)
21
+
22
+ assert post.plain_text_translations
23
+ end
24
+
25
+ test 'post has rich_text_translations association' do
26
+ post = posts(:one)
27
+
28
+ assert post.rich_text_translations
29
+ end
30
+
31
+ test 'post has two plain text translations' do
32
+ post = posts(:one)
33
+
34
+ assert_equal 2, post.plain_text_translations.count
35
+ end
36
+
37
+ test 'post has two rich text translations' do
38
+ post = posts(:one)
39
+
40
+ assert_equal 2, post.rich_text_translations.count
41
+ end
42
+
43
+ test 'post has plain text title' do
44
+ post = posts(:one)
45
+
46
+ assert_equal 'Post Title', post.title
47
+ end
48
+
49
+ test 'post has rich text content' do
50
+ post = posts(:one)
51
+
52
+ assert_instance_of Mobility::Backends::ActionText::RichTextTranslation, post.rich_text_content
53
+ assert_equal <<~HTML, post.content.to_s
54
+ <div class="trix-content">
55
+ <h1>Hello world!</h1>
56
+ </div>
57
+ HTML
58
+ end
59
+
60
+ test 'post has different content in different languages' do
61
+ post = posts(:one)
62
+
63
+ I18n.with_locale(:en) do
64
+ assert_equal 'Post Title', post.title
65
+ assert_equal <<~HTML, post.content.to_s
66
+ <div class="trix-content">
67
+ <h1>Hello world!</h1>
68
+ </div>
69
+ HTML
70
+ end
71
+ I18n.with_locale(:fr) do
72
+ assert_equal 'Le titre du billet', post.title
73
+ assert_equal <<~HTML, post.content.to_s
74
+ <div class="trix-content">
75
+ <h1>Bonjour le monde !</h1>
76
+ </div>
77
+ HTML
78
+ end
79
+ end
80
+
81
+ test 'post has no content when switching to untranslated language' do
82
+ post = posts(:untranslated)
83
+
84
+ I18n.with_locale(:en) do
85
+ assert_equal 'untranslated title', post.title
86
+ assert_equal <<~HTML, post.content.to_s
87
+ <div class="trix-content">
88
+ untranslated content
89
+ </div>
90
+ HTML
91
+ end
92
+ I18n.with_locale(:fr) do
93
+ assert_not post.title?
94
+ assert_not post.content?
95
+ end
96
+ end
97
+
98
+ test 'post content is eager loaded' do
99
+ post = assert_queries(2) { Post.with_rich_text_content.last }
100
+
101
+ assert_no_queries do
102
+ assert_equal 'Hello world!', post.content.to_plain_text
103
+
104
+ skip('FIXME: this should execute no queries')
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,28 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+ require_relative "../config/environment"
3
+ require "rails/test_help"
4
+
5
+ class ActiveSupport::TestCase
6
+ # Run tests in parallel with specified workers
7
+ parallelize(workers: :number_of_processors)
8
+
9
+ # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
10
+ fixtures :all
11
+
12
+ def assert_queries(expected_count)
13
+ ActiveRecord::Base.connection.materialize_transactions
14
+
15
+ queries = []
16
+ ActiveSupport::Notifications.subscribe("sql.active_record") do |*, payload|
17
+ queries << payload[:sql] unless %w[ SCHEMA TRANSACTION ].include?(payload[:name])
18
+ end
19
+
20
+ yield.tap do
21
+ assert_equal expected_count, queries.size, "#{queries.size} instead of #{expected_count} queries were executed. #{queries.inspect}"
22
+ end
23
+ end
24
+
25
+ def assert_no_queries(&block)
26
+ assert_queries(0, &block)
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mobility-actiontext
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sébastien Dubois
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-02-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mobility
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '6.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '6.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.4'
55
+ description:
56
+ email:
57
+ - sedubois@users.noreply.github.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".github/workflows/main.yml"
63
+ - ".ruby-version"
64
+ - CHANGELOG.md
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - lib/mobility/action_text.rb
71
+ - lib/mobility/action_text/version.rb
72
+ - lib/mobility/backends/action_text.rb
73
+ - mobility-actiontext.gemspec
74
+ - test_app/.gitignore
75
+ - test_app/Gemfile
76
+ - test_app/Gemfile.lock
77
+ - test_app/Rakefile
78
+ - test_app/app/assets/config/manifest.js
79
+ - test_app/app/assets/stylesheets/application.css
80
+ - test_app/app/controllers/application_controller.rb
81
+ - test_app/app/helpers/application_helper.rb
82
+ - test_app/app/models/application_record.rb
83
+ - test_app/app/models/post.rb
84
+ - test_app/app/views/layouts/application.html.erb
85
+ - test_app/bin/bundle
86
+ - test_app/bin/rails
87
+ - test_app/bin/rake
88
+ - test_app/bin/setup
89
+ - test_app/config.ru
90
+ - test_app/config/application.rb
91
+ - test_app/config/boot.rb
92
+ - test_app/config/credentials.yml.enc
93
+ - test_app/config/database.yml
94
+ - test_app/config/environment.rb
95
+ - test_app/config/environments/development.rb
96
+ - test_app/config/environments/production.rb
97
+ - test_app/config/environments/test.rb
98
+ - test_app/config/initializers/application_controller_renderer.rb
99
+ - test_app/config/initializers/assets.rb
100
+ - test_app/config/initializers/backtrace_silencers.rb
101
+ - test_app/config/initializers/content_security_policy.rb
102
+ - test_app/config/initializers/cookies_serializer.rb
103
+ - test_app/config/initializers/filter_parameter_logging.rb
104
+ - test_app/config/initializers/i18n.rb
105
+ - test_app/config/initializers/inflections.rb
106
+ - test_app/config/initializers/mime_types.rb
107
+ - test_app/config/initializers/mobility.rb
108
+ - test_app/config/initializers/permissions_policy.rb
109
+ - test_app/config/initializers/wrap_parameters.rb
110
+ - test_app/config/locales/en.yml
111
+ - test_app/config/puma.rb
112
+ - test_app/config/routes.rb
113
+ - test_app/config/storage.yml
114
+ - test_app/db/migrate/20210114124021_create_active_storage_tables.active_storage.rb
115
+ - test_app/db/migrate/20210114124022_create_action_text_tables.action_text.rb
116
+ - test_app/db/migrate/20210114124951_translate_rich_texts.rb
117
+ - test_app/db/migrate/20210114125134_create_posts.rb
118
+ - test_app/db/schema.rb
119
+ - test_app/db/seeds.rb
120
+ - test_app/public/404.html
121
+ - test_app/public/422.html
122
+ - test_app/public/500.html
123
+ - test_app/public/apple-touch-icon-precomposed.png
124
+ - test_app/public/apple-touch-icon.png
125
+ - test_app/public/favicon.ico
126
+ - test_app/public/robots.txt
127
+ - test_app/test/application_system_test_case.rb
128
+ - test_app/test/fixtures/action_text/rich_texts.yml
129
+ - test_app/test/fixtures/posts.yml
130
+ - test_app/test/mobility_action_text_test.rb
131
+ - test_app/test/test_helper.rb
132
+ homepage: https://github.com/sedubois/mobility-actiontext
133
+ licenses:
134
+ - MIT
135
+ metadata:
136
+ homepage_uri: https://github.com/sedubois/mobility-actiontext
137
+ source_code_uri: https://github.com/sedubois/mobility-actiontext
138
+ changelog_uri: https://github.com/sedubois/mobility-actiontext/blob/main/CHANGELOG.md
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: 2.7.2
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubygems_version: 3.2.5
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: Translate Rails Action Text rich text with Mobility.
158
+ test_files: []