wovnrb 3.0.0 → 3.2.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.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -10
  3. data/.rubocop_todo.yml +13 -43
  4. data/Gemfile +0 -5
  5. data/docker/docker-compose.yml +16 -0
  6. data/docker/rails/Dockerfile +6 -0
  7. data/docker/rails/TestSite/.browserslistrc +1 -0
  8. data/docker/rails/TestSite/.gitignore +63 -0
  9. data/docker/rails/TestSite/Gemfile +56 -0
  10. data/docker/rails/TestSite/README.md +24 -0
  11. data/docker/rails/TestSite/Rakefile +6 -0
  12. data/docker/rails/TestSite/app/assets/config/manifest.js +2 -0
  13. data/docker/rails/TestSite/app/assets/images/.keep +0 -0
  14. data/docker/rails/TestSite/app/assets/stylesheets/application.css +15 -0
  15. data/docker/rails/TestSite/app/assets/stylesheets/redirects.scss +3 -0
  16. data/docker/rails/TestSite/app/channels/application_cable/channel.rb +4 -0
  17. data/docker/rails/TestSite/app/channels/application_cable/connection.rb +4 -0
  18. data/docker/rails/TestSite/app/controllers/application_controller.rb +2 -0
  19. data/docker/rails/TestSite/app/controllers/concerns/.keep +0 -0
  20. data/docker/rails/TestSite/app/controllers/custom_response_controller.rb +16 -0
  21. data/docker/rails/TestSite/app/controllers/pages_controller.rb +7 -0
  22. data/docker/rails/TestSite/app/controllers/redirects_controller.rb +5 -0
  23. data/docker/rails/TestSite/app/helpers/application_helper.rb +2 -0
  24. data/docker/rails/TestSite/app/helpers/pages_helper.rb +2 -0
  25. data/docker/rails/TestSite/app/helpers/redirects_helper.rb +2 -0
  26. data/docker/rails/TestSite/app/javascript/channels/consumer.js +6 -0
  27. data/docker/rails/TestSite/app/javascript/channels/index.js +5 -0
  28. data/docker/rails/TestSite/app/javascript/packs/application.js +17 -0
  29. data/docker/rails/TestSite/app/jobs/application_job.rb +7 -0
  30. data/docker/rails/TestSite/app/mailers/application_mailer.rb +4 -0
  31. data/docker/rails/TestSite/app/models/application_record.rb +3 -0
  32. data/docker/rails/TestSite/app/models/concerns/.keep +0 -0
  33. data/docker/rails/TestSite/app/views/layouts/application.html.erb +15 -0
  34. data/docker/rails/TestSite/app/views/layouts/mailer.html.erb +13 -0
  35. data/docker/rails/TestSite/app/views/layouts/mailer.text.erb +1 -0
  36. data/docker/rails/TestSite/babel.config.js +72 -0
  37. data/docker/rails/TestSite/bin/bundle +114 -0
  38. data/docker/rails/TestSite/bin/rails +4 -0
  39. data/docker/rails/TestSite/bin/rake +4 -0
  40. data/docker/rails/TestSite/bin/setup +36 -0
  41. data/docker/rails/TestSite/bin/webpack +18 -0
  42. data/docker/rails/TestSite/bin/webpack-dev-server +18 -0
  43. data/docker/rails/TestSite/bin/yarn +11 -0
  44. data/docker/rails/TestSite/config/application.rb +26 -0
  45. data/docker/rails/TestSite/config/boot.rb +4 -0
  46. data/docker/rails/TestSite/config/cable.yml +10 -0
  47. data/docker/rails/TestSite/config/credentials.yml.enc +1 -0
  48. data/docker/rails/TestSite/config/database.yml +25 -0
  49. data/docker/rails/TestSite/config/environment.rb +5 -0
  50. data/docker/rails/TestSite/config/environments/development.rb +62 -0
  51. data/docker/rails/TestSite/config/environments/production.rb +112 -0
  52. data/docker/rails/TestSite/config/environments/test.rb +49 -0
  53. data/docker/rails/TestSite/config/initializers/application_controller_renderer.rb +8 -0
  54. data/docker/rails/TestSite/config/initializers/assets.rb +14 -0
  55. data/docker/rails/TestSite/config/initializers/backtrace_silencers.rb +7 -0
  56. data/docker/rails/TestSite/config/initializers/content_security_policy.rb +30 -0
  57. data/docker/rails/TestSite/config/initializers/cookies_serializer.rb +5 -0
  58. data/docker/rails/TestSite/config/initializers/filter_parameter_logging.rb +4 -0
  59. data/docker/rails/TestSite/config/initializers/inflections.rb +16 -0
  60. data/docker/rails/TestSite/config/initializers/mime_types.rb +4 -0
  61. data/docker/rails/TestSite/config/initializers/wrap_parameters.rb +14 -0
  62. data/docker/rails/TestSite/config/locales/en.yml +33 -0
  63. data/docker/rails/TestSite/config/puma.rb +38 -0
  64. data/docker/rails/TestSite/config/routes.rb +5 -0
  65. data/docker/rails/TestSite/config/spring.rb +6 -0
  66. data/docker/rails/TestSite/config/storage.yml +34 -0
  67. data/docker/rails/TestSite/config/webpack/development.js +5 -0
  68. data/docker/rails/TestSite/config/webpack/environment.js +3 -0
  69. data/docker/rails/TestSite/config/webpack/production.js +5 -0
  70. data/docker/rails/TestSite/config/webpack/test.js +5 -0
  71. data/docker/rails/TestSite/config/webpacker.yml +96 -0
  72. data/docker/rails/TestSite/config.ru +5 -0
  73. data/docker/rails/TestSite/db/seeds.rb +7 -0
  74. data/docker/rails/TestSite/lib/assets/.keep +0 -0
  75. data/docker/rails/TestSite/lib/tasks/.keep +0 -0
  76. data/docker/rails/TestSite/log/.keep +0 -0
  77. data/docker/rails/TestSite/package.json +15 -0
  78. data/docker/rails/TestSite/postcss.config.js +12 -0
  79. data/docker/rails/TestSite/public/index.html +9 -0
  80. data/docker/rails/TestSite/public/page.html +13 -0
  81. data/docker/rails/TestSite/public/pages/files/plaintext_unicode.txt +204 -0
  82. data/docker/rails/TestSite/public/pages/files/simple_css.css +8 -0
  83. data/docker/rails/TestSite/public/pages/files/simple_javascript.js +2 -0
  84. data/docker/rails/TestSite/public/pages/html5test.html +555 -0
  85. data/docker/rails/TestSite/public/pages/oldhtml.html +335 -0
  86. data/docker/rails/TestSite/public/pages/xhtml.xhtml +726 -0
  87. data/docker/rails/TestSite/public/redirection_target.html +10 -0
  88. data/docker/rails/TestSite/public/testdir/testpage-dir.html +9 -0
  89. data/docker/rails/TestSite/public/testdir/testpage-redirect-destination.html +9 -0
  90. data/docker/rails/TestSite/public/testpage.html +9 -0
  91. data/docker/rails/TestSite/public/wovn_index.html +24 -0
  92. data/docker/rails/TestSite/start.sh +14 -0
  93. data/docker/rails/TestSite/storage/.keep +0 -0
  94. data/docker/rails/TestSite/test/application_system_test_case.rb +5 -0
  95. data/docker/rails/TestSite/test/channels/application_cable/connection_test.rb +11 -0
  96. data/docker/rails/TestSite/test/controllers/.keep +0 -0
  97. data/docker/rails/TestSite/test/controllers/pages_controller_test.rb +7 -0
  98. data/docker/rails/TestSite/test/controllers/redirects_controller_test.rb +7 -0
  99. data/docker/rails/TestSite/test/fixtures/.keep +0 -0
  100. data/docker/rails/TestSite/test/fixtures/files/.keep +0 -0
  101. data/docker/rails/TestSite/test/helpers/.keep +0 -0
  102. data/docker/rails/TestSite/test/integration/.keep +0 -0
  103. data/docker/rails/TestSite/test/mailers/.keep +0 -0
  104. data/docker/rails/TestSite/test/models/.keep +0 -0
  105. data/docker/rails/TestSite/test/system/.keep +0 -0
  106. data/docker/rails/TestSite/test/test_helper.rb +13 -0
  107. data/docker/rails/TestSite/yarn.lock +7642 -0
  108. data/lib/wovnrb/api_translator.rb +5 -3
  109. data/lib/wovnrb/headers.rb +30 -39
  110. data/lib/wovnrb/helpers/nokogumbo_helper.rb +7 -9
  111. data/lib/wovnrb/lang.rb +15 -14
  112. data/lib/wovnrb/railtie.rb +3 -1
  113. data/lib/wovnrb/services/html_converter.rb +8 -8
  114. data/lib/wovnrb/services/wovn_logger.rb +9 -2
  115. data/lib/wovnrb/store.rb +8 -14
  116. data/lib/wovnrb/version.rb +1 -1
  117. data/lib/wovnrb.rb +2 -4
  118. data/makefile +16 -0
  119. data/test/lib/api_translator_test.rb +4 -5
  120. data/test/lib/lang_test.rb +5 -136
  121. data/test/lib/services/html_converter_test.rb +14 -14
  122. data/test/lib/services/wovn_logger_test.rb +5 -3
  123. data/test/lib/store_test.rb +22 -16
  124. data/test/lib/wovnrb_test.rb +16 -16
  125. data/wovnrb.gemspec +5 -4
  126. metadata +120 -18
  127. data/.travis.yml +0 -14
  128. data/lib/wovnrb/text_caches/cache_base.rb +0 -53
  129. data/lib/wovnrb/text_caches/memory_cache.rb +0 -51
  130. data/test/lib/text_caches/cache_base_test.rb +0 -31
  131. data/test/lib/text_caches/memory_cache_test.rb +0 -91
@@ -1,53 +0,0 @@
1
- require 'active_support/inflector'
2
-
3
- module Wovnrb
4
- class CacheBase
5
- @@strategy_map = {
6
- memory: :memory_cache
7
- }
8
-
9
- @@default_base_config = {
10
- strategy: :memory
11
- }
12
-
13
- @@singleton_cache = nil
14
- def self.get_single
15
- raise 'cache is not initialized' unless @@singleton_cache
16
-
17
- @@singleton_cache
18
- end
19
-
20
- def self.set_single(config)
21
- @@singleton_cache = build(config)
22
- end
23
-
24
- def self.reset_cache
25
- @@singleton_cache = nil
26
- end
27
-
28
- def self.build(config)
29
- @config = @@default_base_config.merge config
30
-
31
- strategy = @@strategy_map[@config[:strategy]]
32
- raise "Invalid strategy: #{strategy}" unless strategy
33
-
34
- strategy_sym = strategy.to_sym
35
- begin
36
- require "wovnrb/text_caches/#{strategy_sym}"
37
- rescue LoadError => e
38
- raise "Could not find #{strategy_sym} (#{e})"
39
- end
40
-
41
- strategy_class = Wovnrb.const_get(ActiveSupport::Inflector.camelize(strategy_sym))
42
- strategy_class.new(config)
43
- end
44
-
45
- def put(key, value)
46
- raise NotImplementedError.new('put is not defined')
47
- end
48
-
49
- def get(key)
50
- raise NotImplementedError.new('put is not defined')
51
- end
52
- end
53
- end
@@ -1,51 +0,0 @@
1
- require 'active_support/cache'
2
- require 'lz4-ruby'
3
-
4
- module Wovnrb
5
- class MemoryCache < CacheBase
6
- @@default_memory_cache_config = {
7
- cache_megabytes: 200,
8
- ttl_seconds: 300
9
- }
10
-
11
- def initialize(config)
12
- @config = merge_setting(@@default_memory_cache_config, config)
13
- cache_size = @config[:cache_megabytes].to_f
14
- ttl = @config[:ttl_seconds].to_i
15
- @cache_store = ActiveSupport::Cache::MemoryStore.new(expires_in: ttl.seconds, size: cache_size.megabytes)
16
- end
17
-
18
- def put(key, value)
19
- @cache_store.write(key, compress(value))
20
- end
21
-
22
- def get(key)
23
- stored_value =@cache_store.fetch(key)
24
- decompress(stored_value) if stored_value
25
- end
26
-
27
- def options
28
- @cache_store.options.clone
29
- end
30
-
31
- private
32
- def merge_setting(original_config, merging_config)
33
- config = original_config.clone
34
- config.keys.each do |key|
35
- key_string = key.to_s
36
- if merging_config.has_key?(key_string) && merging_config[key_string].present?
37
- config[key] = merging_config[key_string]
38
- end
39
- end
40
- config
41
- end
42
-
43
- def compress(value)
44
- LZ4.compress(value)
45
- end
46
-
47
- def decompress(value)
48
- LZ4.decompress(value, value.bytesize, 'UTF-8')
49
- end
50
- end
51
- end
@@ -1,31 +0,0 @@
1
- require 'wovnrb/text_caches/cache_base'
2
- require 'minitest/autorun'
3
-
4
- class CacheBaseTest < Minitest::Test
5
- def setup
6
- Wovnrb::CacheBase.reset_cache
7
- end
8
-
9
- def test_build
10
- cache = Wovnrb::CacheBase.build({})
11
- assert_equal('Wovnrb::MemoryCache', cache.class.name)
12
- end
13
-
14
- def test_build_with_invalid_strategy
15
- assert_raises RuntimeError do
16
- Wovnrb::CacheBase.build(strategy: :invalid)
17
- end
18
- end
19
-
20
- def test_set_and_get_single
21
- Wovnrb::CacheBase.set_single({})
22
- cache = Wovnrb::CacheBase.get_single
23
- assert_equal('Wovnrb::MemoryCache', cache.class.name)
24
- end
25
-
26
- def test_get_single_without_set
27
- assert_raises RuntimeError do
28
- Wovnrb::CacheBase.get_single
29
- end
30
- end
31
- end
@@ -1,91 +0,0 @@
1
- require 'wovnrb/text_caches/cache_base'
2
- require 'wovnrb/text_caches/memory_cache'
3
- require 'minitest/autorun'
4
- require 'timecop'
5
-
6
- class MemoryCacheTest < Minitest::Test
7
- def test_initialize
8
- memory = Wovnrb::MemoryCache.new(
9
- 'cache_megabytes' => 1,
10
- 'ttl_seconds' => 1
11
- )
12
- option = memory.options
13
- assert_equal(1.megabytes, option[:size])
14
- assert_equal(1.megabytes, option[:size])
15
- assert_equal(1.seconds, option[:expires_in])
16
- end
17
-
18
- def test_initialize_without_cache_megabytes
19
- memory = Wovnrb::MemoryCache.new(
20
- 'ttl_seconds' => 1
21
- )
22
- option = memory.options
23
- assert_equal(200.megabytes, option[:size])
24
- assert_equal(1.seconds, option[:expires_in])
25
- end
26
-
27
- def test_initialize_without_ttl
28
- memory = Wovnrb::MemoryCache.new(
29
- 'cache_megabytes' => 1
30
- )
31
- option = memory.options
32
- assert_equal(1.megabytes, option[:size])
33
- assert_equal(300.seconds, option[:expires_in])
34
- end
35
-
36
- def test_initialize_with_no_config
37
- memory = Wovnrb::MemoryCache.new({})
38
- option = memory.options
39
- assert_equal(200.megabytes, option[:size])
40
- assert_equal(300.seconds, option[:expires_in])
41
- end
42
-
43
- def test_put_without_cache
44
- memory = Wovnrb::MemoryCache.new({})
45
- memory.put('a', 'b')
46
- assert_equal('b', memory.get('a'))
47
- end
48
-
49
- def test_put_with_cache
50
- memory = Wovnrb::MemoryCache.new({})
51
- memory.put('a', 'b')
52
- memory.put('a', 'b2')
53
- assert_equal('b2', memory.get('a'))
54
- end
55
-
56
- def test_get_with_cache
57
- memory = Wovnrb::MemoryCache.new({})
58
- memory.put('a', 'b')
59
- assert_equal('b', memory.get('a'))
60
- end
61
-
62
- def test_get_without_cache
63
- memory = Wovnrb::MemoryCache.new({})
64
- assert_nil(memory.get('a'))
65
-
66
- end
67
-
68
- def test_get_with_timeout
69
- memory = Wovnrb::MemoryCache.new({})
70
- memory.put('a', 'b')
71
- Timecop.travel(1.day.since)
72
- assert_nil(memory.get('a'))
73
- end
74
-
75
- def test_get_with_over_memory
76
- # ActiveSupport::Cache::MemoryStore has 240 bytes overhead per instance
77
- memory = Wovnrb::MemoryCache.new(
78
- 'cache_megabytes' => 400.0 / 1000 / 1000
79
- )
80
- memory.put('a', 'c')
81
- memory.put('b', 'd')
82
- assert_nil(memory.get('a'))
83
- assert_equal('d', memory.get('b'))
84
- end
85
-
86
- def test_get_with_utf8
87
- memory = Wovnrb::MemoryCache.new({})
88
- memory.put('http://www.example.com', 'あいうえお')
89
- assert_equal('あいうえお', memory.get('http://www.example.com'))
90
- end
91
- end