diff --git a/.circleci/config.yml b/.circleci/config.yml index f5d56103..5e88cdca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,12 +34,12 @@ shared_build_steps: &shared_build_steps - run: name: Installing Dependencies command: | - bundle check || (bundle install --jobs=4 --retry=3 --path vendor/bundle && bundle clean) + bundle config set --local path vendor/bundle + bundle check || (bundle install --jobs=4 --retry=3 && bundle clean) - save_cache: paths: - ./vendor/bundle - - /usr/local/bundle/config key: dependencies-{{ .Environment.CACHE_VERSION }}-{{ checksum "RAILS_VERSION" }}-{{ checksum "Gemfile" }}-{{ checksum "meta-tags.gemspec" }} # run tests! @@ -88,234 +88,220 @@ shared_build_steps: &shared_build_steps jobs: - build-ruby25-rails-5_1_7: + build-ruby26-rails-5_1_7: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.5 + - image: cimg/ruby:2.6 environment: RAILS_VERSION: 5.1.7 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby25-rails-5.1.7 + working_directory: ~/meta-tags/ruby26-rails-5.1.7 steps: *shared_build_steps - build-ruby25-rails-5_2_6: + build-ruby26-rails-5_2_8: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.5 + - image: cimg/ruby:2.6 environment: - RAILS_VERSION: 5.2.6 + RAILS_VERSION: 5.2.8 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby25-rails-5.2.6 + working_directory: ~/meta-tags/ruby26-rails-5.2.8 steps: *shared_build_steps - build-ruby25-rails-6_0_4: + build-ruby26-rails-6_0_5: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.5 + - image: cimg/ruby:2.6 environment: - RAILS_VERSION: 6.0.4 + RAILS_VERSION: 6.0.5 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby25-rails-6.0.4 + working_directory: ~/meta-tags/ruby26-rails-6.0.5 steps: *shared_build_steps - build-ruby25-rails-6_1_0: + build-ruby26-rails-6_1_6: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.5 + - image: cimg/ruby:2.6 environment: - RAILS_VERSION: 6.1.0 + RAILS_VERSION: 6.1.6 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby25-rails-6.1.0 + working_directory: ~/meta-tags/ruby26-rails-6.1.6 steps: *shared_build_steps - build-ruby26-rails-5_1_7: + build-ruby27-rails-5_1_7: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.6 + - image: cimg/ruby:2.7 environment: RAILS_VERSION: 5.1.7 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby26-rails-5.1.7 + working_directory: ~/meta-tags/ruby27-rails-5.1.7 steps: *shared_build_steps - build-ruby26-rails-5_2_6: + build-ruby27-rails-5_2_8: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.6 + - image: cimg/ruby:2.7 environment: - RAILS_VERSION: 5.2.6 + RAILS_VERSION: 5.2.8 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby26-rails-5.2.6 + working_directory: ~/meta-tags/ruby27-rails-5.2.8 steps: *shared_build_steps - build-ruby26-rails-6_0_4: + build-ruby27-rails-6_0_5: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.6 + - image: cimg/ruby:2.7 environment: - RAILS_VERSION: 6.0.4 + RAILS_VERSION: 6.0.5 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby26-rails-6.0.4 + working_directory: ~/meta-tags/ruby27-rails-6.0.5 steps: *shared_build_steps - build-ruby26-rails-6_1_4: + build-ruby27-rails-6_1_6: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.6 + - image: cimg/ruby:2.7 environment: - RAILS_VERSION: 6.1.4 + RAILS_VERSION: 6.1.6 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby26-rails-6.1.4 + working_directory: ~/meta-tags/ruby27-rails-6.1.6 steps: *shared_build_steps - build-ruby27-rails-5_1_7: + build-ruby27-rails-7_0_3: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.7 + - image: cimg/ruby:2.7 environment: - RAILS_VERSION: 5.1.7 + RAILS_VERSION: 7.0.3 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby27-rails-5.1.7 + working_directory: ~/meta-tags/ruby27-rails-7.0.3 steps: *shared_build_steps - build-ruby27-rails-5_2_6: + build-ruby30-rails-6_0_5: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.7 + - image: cimg/ruby:3.0 environment: - RAILS_VERSION: 5.2.6 + RAILS_VERSION: 6.0.5 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby27-rails-5.2.6 + working_directory: ~/meta-tags/ruby30-rails-6.0.5 steps: *shared_build_steps - build-ruby27-rails-6_0_4: + build-ruby30-rails-6_1_6: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.7 + - image: cimg/ruby:3.0 environment: - RAILS_VERSION: 6.0.4 + RAILS_VERSION: 6.1.6 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby27-rails-6.0.4 + working_directory: ~/meta-tags/ruby30-rails-6.1.6 steps: *shared_build_steps - build-ruby27-rails-6_1_4: + build-ruby30-rails-7_0_3: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.7 + - image: cimg/ruby:3.0 environment: - RAILS_VERSION: 6.1.4 + RAILS_VERSION: 7.0.3 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby27-rails-6.1.4 + working_directory: ~/meta-tags/ruby30-rails-7.0.3 steps: *shared_build_steps - build-ruby27-rails-7_0_0_alpha2: + build-ruby31-rails-6_0_5: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:2.7 + - image: cimg/ruby:3.1 environment: - RAILS_VERSION: 7.0.0.alpha2 + RAILS_VERSION: 6.0.5 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby27-rails-7.0.0.alpha2 + working_directory: ~/meta-tags/ruby31-rails-6.0.5 steps: *shared_build_steps - build-ruby30-rails-6_0_4: + build-ruby31-rails-6_1_6: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:3.0 + - image: cimg/ruby:3.1 environment: - RAILS_VERSION: 6.0.4 + RAILS_VERSION: 6.1.6 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 1 - working_directory: ~/meta-tags/ruby30-rails-6.0.4 + working_directory: ~/meta-tags/ruby31-rails-6.1.6 steps: *shared_build_steps - build-ruby30-rails-6_1_4: + build-ruby31-rails-7_0_3: parameters: is_main_build: type: boolean default: false docker: - - image: circleci/ruby:3.0 + - image: cimg/ruby:3.1 environment: - RAILS_VERSION: 6.1.4 + RAILS_VERSION: 7.0.3 ENABLE_CODE_COVERAGE: 1 NO_STEEP: 0 - working_directory: ~/meta-tags/ruby30-rails-6.1.4 - steps: *shared_build_steps - - build-ruby30-rails-7_0_0_alpha2: - parameters: - is_main_build: - type: boolean - default: false - docker: - - image: circleci/ruby:3.0 - environment: - RAILS_VERSION: 7.0.0.alpha2 - ENABLE_CODE_COVERAGE: 1 - NO_STEEP: 1 - working_directory: ~/meta-tags/ruby30-rails-7.0.0.alpha2 + working_directory: ~/meta-tags/ruby31-rails-7.0.3 steps: *shared_build_steps upload-coverage: docker: - - image: circleci/ruby:3.0 + - image: cimg/ruby:3.1 environment: CC_TEST_REPORTER_ID: 8792cbc0d1780830ddd3dd7eb1c25f09f386ba8f04449ad830039469406a6ab3 steps: @@ -325,7 +311,7 @@ jobs: - run: name: Uploading Code Coverage command: | - cd /tmp/workspace/ruby30-rails-6.1.4 + cd /tmp/workspace/ruby31-rails-7.0.3 ./cc-test-reporter upload-coverage --input coverage/codeclimate.coverage.json || true tests: docker: @@ -340,91 +326,86 @@ workflows: test: jobs: - - build-ruby25-rails-5_1_7: + - build-ruby26-rails-5_1_7: is_main_build: false - - build-ruby25-rails-5_2_6: + - build-ruby26-rails-5_2_8: is_main_build: false - - build-ruby25-rails-6_0_4: + - build-ruby26-rails-6_0_5: is_main_build: false - - build-ruby25-rails-6_1_0: + - build-ruby26-rails-6_1_6: is_main_build: false - - build-ruby26-rails-5_1_7: + - build-ruby27-rails-5_1_7: is_main_build: false - - build-ruby26-rails-5_2_6: + - build-ruby27-rails-5_2_8: is_main_build: false - - build-ruby26-rails-6_0_4: + - build-ruby27-rails-6_0_5: is_main_build: false - - build-ruby26-rails-6_1_4: + - build-ruby27-rails-6_1_6: is_main_build: false - - build-ruby27-rails-5_1_7: + - build-ruby27-rails-7_0_3: is_main_build: false - - build-ruby27-rails-5_2_6: + - build-ruby30-rails-6_0_5: is_main_build: false - - build-ruby27-rails-6_0_4: + - build-ruby30-rails-6_1_6: is_main_build: false - - build-ruby27-rails-6_1_4: + - build-ruby30-rails-7_0_3: is_main_build: false - - build-ruby27-rails-7_0_0_alpha2: + - build-ruby31-rails-6_0_5: is_main_build: false - - build-ruby30-rails-6_0_4: + - build-ruby31-rails-6_1_6: is_main_build: false - - build-ruby30-rails-6_1_4: + - build-ruby31-rails-7_0_3: is_main_build: true - - build-ruby30-rails-7_0_0_alpha2: - is_main_build: false - - upload-coverage: requires: - - build-ruby30-rails-6_1_4 + - build-ruby31-rails-7_0_3 - tests: requires: - - build-ruby25-rails-5_1_7 + - build-ruby26-rails-5_1_7 - - build-ruby25-rails-5_2_6 + - build-ruby26-rails-5_2_8 - - build-ruby25-rails-6_0_4 + - build-ruby26-rails-6_0_5 - - build-ruby25-rails-6_1_0 + - build-ruby26-rails-6_1_6 - - build-ruby26-rails-5_1_7 - - - build-ruby26-rails-5_2_6 + - build-ruby27-rails-5_1_7 - - build-ruby26-rails-6_0_4 + - build-ruby27-rails-5_2_8 - - build-ruby26-rails-6_1_4 + - build-ruby27-rails-6_0_5 - - build-ruby27-rails-5_1_7 + - build-ruby27-rails-6_1_6 - - build-ruby27-rails-5_2_6 + - build-ruby27-rails-7_0_3 - - build-ruby27-rails-6_0_4 + - build-ruby30-rails-6_0_5 - - build-ruby27-rails-6_1_4 + - build-ruby30-rails-6_1_6 - - build-ruby27-rails-7_0_0_alpha2 + - build-ruby30-rails-7_0_3 - - build-ruby30-rails-6_0_4 + - build-ruby31-rails-6_0_5 - - build-ruby30-rails-6_1_4 + - build-ruby31-rails-6_1_6 - - build-ruby30-rails-7_0_0_alpha2 + - build-ruby31-rails-7_0_3 diff --git a/.circleci/config.yml.erb b/.circleci/config.yml.erb index c99f6021..f3bc4f03 100644 --- a/.circleci/config.yml.erb +++ b/.circleci/config.yml.erb @@ -3,30 +3,35 @@ # rake circleci # <% - builds = [ - # 2.5 - ['2.5', '5.1.7'], - ['2.5', '5.2.6'], - ['2.5', '6.0.4'], - ['2.5', '6.1.0'], + rails51 = '5.1.7' + rails52 = '5.2.8' + rails60 = '6.0.5' + rails61 = '6.1.6' + rails70 = '7.0.3' + builds = [ # 2.6 - ['2.6', '5.1.7'], - ['2.6', '5.2.6'], - ['2.6', '6.0.4'], - ['2.6', '6.1.4'], + ['2.6', rails51], + ['2.6', rails52], + ['2.6', rails60], + ['2.6', rails61], # 2.7 - ['2.7', '5.1.7'], - ['2.7', '5.2.6'], - ['2.7', '6.0.4'], - ['2.7', '6.1.4'], - ['2.7', '7.0.0.alpha2'], + ['2.7', rails51], + ['2.7', rails52], + ['2.7', rails60], + ['2.7', rails61], + ['2.7', rails70], # 3.0 - ['3.0', '6.0.4'], - ['3.0', '6.1.4', true], - ['3.0', '7.0.0.alpha2'], + ['3.0', rails60], + ['3.0', rails61], + ['3.0', rails70], + + # 3.1 + ['3.1', rails60], + ['3.1', rails61], + ['3.1', rails70, true], ] main_build = builds.find { |_, _, is_main_build| is_main_build } @@ -62,12 +67,12 @@ shared_build_steps: &shared_build_steps - run: name: Installing Dependencies command: | - bundle check || (bundle install --jobs=4 --retry=3 --path vendor/bundle && bundle clean) + bundle config set --local path vendor/bundle + bundle check || (bundle install --jobs=4 --retry=3 && bundle clean) - save_cache: paths: - ./vendor/bundle - - /usr/local/bundle/config key: dependencies-{{ .Environment.CACHE_VERSION }}-{{ checksum "RAILS_VERSION" }}-{{ checksum "Gemfile" }}-{{ checksum "meta-tags.gemspec" }} # run tests! @@ -122,7 +127,7 @@ jobs: type: boolean default: false docker: - - image: circleci/ruby:<%= ruby_version %> + - image: cimg/ruby:<%= ruby_version %> environment: RAILS_VERSION: <%= rails_version %> ENABLE_CODE_COVERAGE: 1 @@ -133,7 +138,7 @@ jobs: upload-coverage: docker: - - image: circleci/ruby:<%= main_build[0] %> + - image: cimg/ruby:<%= main_build[0] %> environment: CC_TEST_REPORTER_ID: 8792cbc0d1780830ddd3dd7eb1c25f09f386ba8f04449ad830039469406a6ab3 steps: diff --git a/.codeclimate.yml b/.codeclimate.yml index 29cb4876..8a98a09f 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -10,7 +10,8 @@ engines: rubocop: enabled: true - channel: rubocop-0-75 + # Check https://github.com/codeclimate/codeclimate-rubocop/branches/all?query=channel%2Frubocop + channel: rubocop-1-31-0 ratings: paths: diff --git a/.rubocop.yml b/.rubocop.yml index 45b26e38..d46219b7 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -14,7 +14,7 @@ AllCops: # We do not specify Ruby version, because CodeClimate should by default # read .ruby-version, and send it down to Rubocop # (see https://github.com/codeclimate/codeclimate-rubocop/pull/68) - TargetRubyVersion: 2.5 + TargetRubyVersion: 2.6 # We will lock Rails version to the newest we have in the company, so we're # always looking to the future. TargetRailsVersion: 5.1 @@ -40,10 +40,7 @@ Layout/DotPosition: Layout/LineLength: Max: 120 Exclude: - - "db/migrate/*" - "spec/**/*" - IgnoredPatterns: - - "^#.*" Layout/MultilineAssignmentLayout: EnforcedStyle: same_line @@ -58,13 +55,9 @@ Layout/SpaceInsideArrayLiteralBrackets: Metrics/AbcSize: Max: 25 - Exclude: - - "db/migrate/*.rb" Metrics/BlockLength: Exclude: - - "db/migrate/*.rb" - - "config/routes.rb" - "**/*.rake" - "spec/**/*_spec.rb" - "spec/spec_helper.rb" @@ -76,21 +69,11 @@ Metrics/ClassLength: Metrics/MethodLength: Max: 30 - Exclude: - - "db/migrate/*" Metrics/ModuleLength: Max: 250 CountComments: false -Rails/UnknownEnv: - Environments: - - development - - test - - production - - staging - - migration - Rails/SafeNavigation: ConvertTry: true diff --git a/CHANGELOG.md b/CHANGELOG.md index d6b1a5ff..79f8970e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## 2.17.0 (Development) [☰](https://github.com/kpumuk/meta-tags/compare/v2.16.0...HEAD) + +Changes: + +- Separate RBS files to _internal directory to avoid exposing RBS ([237](https://github.com/kpumuk/meta-tags/pull/237)) +- Added Ruby 3.1 to supported versions, Ruby 2.6 is minimum supported version ([235](https://github.com/kpumuk/meta-tags/pull/235/)) + ## 2.16.0 (September 24, 2021) [☰](https://github.com/kpumuk/meta-tags/compare/v2.15.0...v2.16.0) Changes: diff --git a/Gemfile b/Gemfile index c7142795..0954c47a 100644 --- a/Gemfile +++ b/Gemfile @@ -10,13 +10,15 @@ if ENV['RAILS_VERSION'] gem 'railties', "~> #{ENV['RAILS_VERSION']}" end -# Ruby typings -gem 'steep', platform: :mri unless ENV["NO_STEEP"] == '1' +unless ENV["NO_STEEP"] == '1' + # Ruby typings + gem 'steep', '~> 1.0.1', platform: :mri +end group :test do # Lock rubocop to a specific version we use on CI. If you update this, # don't forget to switch rubocop channel in the .codeclimate.yml - gem 'rubocop', '~> 1.18.0' + gem 'rubocop', '= 1.31.0' # Cops for rails apps gem 'rubocop-rails' # Apply RSpec rubocop cops diff --git a/README.md b/README.md index 764f2b0d..80d1b9da 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,12 @@ Search Engine Optimization (SEO) plugin for Ruby on Rails applications. ## Ruby on Rails MetaTags main branch fully supports Ruby on Rails 5.1+, and is tested against all -major Rails releases up to 6.1. +major Rails releases up to 7.0. -Ruby versions older than 2.5 are no longer officially supported. +Ruby versions older than 2.6 are no longer officially supported. -_Please note_ that we are no longer support Ruby versions older than 2.4.0 and -Ruby on Rails older than 5.1, because they [reached their End of Life](https://github.com/kpumuk/meta-tags/pull/143). +_Please note_ that we no longer support Ruby versions older than 2.6.0 and +Ruby on Rails older than 5.1, because they reached their [End of Life](https://endoflife.date/ruby). ## Installation diff --git a/Steepfile b/Steepfile index 4bf0753a..b53072e8 100644 --- a/Steepfile +++ b/Steepfile @@ -10,4 +10,6 @@ target :lib do # (because we don't have RBS files for it) ignore "lib/meta_tags/railtie.rb" ignore "lib/generators" + + library "set" end diff --git a/lib/meta_tags.rb b/lib/meta_tags.rb index 24860882..f33aee90 100644 --- a/lib/meta_tags.rb +++ b/lib/meta_tags.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true +require 'set' +require 'active_support/core_ext/hash/indifferent_access' + # MetaTags gem namespace. module MetaTags # Returns MetaTags gem configuration. diff --git a/lib/meta_tags/meta_tags_collection.rb b/lib/meta_tags/meta_tags_collection.rb index 13525e72..64ce9d27 100644 --- a/lib/meta_tags/meta_tags_collection.rb +++ b/lib/meta_tags/meta_tags_collection.rb @@ -9,7 +9,7 @@ class MetaTagsCollection # Initializes a new instance of MetaTagsCollection. # def initialize - @meta_tags = HashWithIndifferentAccess.new + @meta_tags = ActiveSupport::HashWithIndifferentAccess.new end # Returns meta tag value by name. @@ -170,10 +170,10 @@ def extract_robots # Converts input hash to HashWithIndifferentAccess and renames :open_graph to :og. # # @param [Hash] meta_tags list of meta tags. - # @return [HashWithIndifferentAccess] normalized meta tags list. + # @return [ActiveSupport::HashWithIndifferentAccess] normalized meta tags list. # def normalize_open_graph(meta_tags) - meta_tags = meta_tags.kind_of?(HashWithIndifferentAccess) ? meta_tags.dup : meta_tags.with_indifferent_access + meta_tags = meta_tags.with_indifferent_access meta_tags[:og] = meta_tags.delete(:open_graph) if meta_tags.key?(:open_graph) meta_tags end diff --git a/lib/meta_tags/text_normalizer.rb b/lib/meta_tags/text_normalizer.rb index 0f0a1c76..9e038aae 100644 --- a/lib/meta_tags/text_normalizer.rb +++ b/lib/meta_tags/text_normalizer.rb @@ -205,7 +205,7 @@ def calculate_title_limits(site_title, title, separator, global_limit) # What should we truncate first: site title or page title? main_title = MetaTags.config.truncate_site_title_first ? title : [site_title] - main_length = main_title.map(&:length).sum + (main_title.size - 1) * separator.length + main_length = main_title.map(&:length).sum + ((main_title.size - 1) * separator.length) main_limited_length = global_limit secondary_limited_length = global_limit - (main_length > 0 ? main_length + separator.length : 0) diff --git a/lib/meta_tags/view_helper.rb b/lib/meta_tags/view_helper.rb index fb6cf297..892cb1e4 100644 --- a/lib/meta_tags/view_helper.rb +++ b/lib/meta_tags/view_helper.rb @@ -27,7 +27,7 @@ def meta_tags # # @see #display_meta_tags # - def set_meta_tags(meta_tags = {}) # rubocop:disable Naming/AccessorMethodName + def set_meta_tags(meta_tags = {}) self.meta_tags.update(meta_tags) end diff --git a/meta-tags.gemspec b/meta-tags.gemspec index 980ce36d..8f585daf 100644 --- a/meta-tags.gemspec +++ b/meta-tags.gemspec @@ -15,7 +15,7 @@ Gem::Specification.new do |spec| spec.homepage = "https://github.com/kpumuk/meta-tags" spec.license = "MIT" spec.platform = Gem::Platform::RUBY - spec.required_ruby_version = '>= 2.5.0' + spec.required_ruby_version = '>= 2.6.0' spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(\.|(bin|test|spec|features)/)}) } spec.bindir = "exe" @@ -33,10 +33,11 @@ Gem::Specification.new do |spec| spec.signing_key = File.expand_path("~/.ssh/gem-kpumuk.pem") if $PROGRAM_NAME.end_with?('gem') spec.metadata = { - "bug_tracker_uri" => "https://github.com/kpumuk/meta-tags/issues/", - "changelog_uri" => "https://github.com/kpumuk/meta-tags/blob/main/CHANGELOG.md", - "documentation_uri" => "https://rubydoc.info/github/kpumuk/meta-tags/", - "homepage_uri" => "https://github.com/kpumuk/meta-tags/", - "source_code_uri" => "https://github.com/kpumuk/meta-tags/", + "bug_tracker_uri" => "https://github.com/kpumuk/meta-tags/issues/", + "changelog_uri" => "https://github.com/kpumuk/meta-tags/blob/main/CHANGELOG.md", + "documentation_uri" => "https://rubydoc.info/github/kpumuk/meta-tags/", + "homepage_uri" => "https://github.com/kpumuk/meta-tags/", + "source_code_uri" => "https://github.com/kpumuk/meta-tags/", + "rubygems_mfa_required" => "true", } end diff --git a/sig/lib/_internal/rails.rbs b/sig/lib/_internal/rails.rbs index 4ce8f78a..22ef2685 100644 --- a/sig/lib/_internal/rails.rbs +++ b/sig/lib/_internal/rails.rbs @@ -1,6 +1,6 @@ class ::Hash[unchecked out K, unchecked out V] - def with_indifferent_access: () -> instance - def deep_merge!: (instance other) -> self + def with_indifferent_access: () -> ActiveSupport::HashWithIndifferentAccess[K, V] + def deep_merge!: (instance | ActiveSupport::HashWithIndifferentAccess[K, V] other) -> self end class ::Object @@ -8,3 +8,49 @@ class ::Object def blank?: () -> bool def present?: () -> bool end + +class ::Loofah + module TextBehavior + def text: (?Hash[Symbol, untyped]? options) -> String + end + + class DocumentFragment + include TextBehavior + end + + def self.fragment: (String tags, ?String? encoding) -> DocumentFragment +end + +class ::Rails +end + +module ActionController + class Base + include _ActionControllerBase + + def self.helpers: () -> _ActionViewBase + end +end + +module ActiveSupport + class HashWithIndifferentAccess[unchecked out K, unchecked out V] < Hash[K, V] + def with_indifferent_access: () -> self + def deep_merge!: (instance | Hash[K, V] other) -> self + end +end + +interface _ActionControllerBase + def render: (*untyped args) { () -> untyped } -> untyped +end + +interface _ActionViewBase + def tag: (String name, ?Hash[String | Symbol, untyped] options, ?bool open) -> void + + def content_tag: (String name, String content, ?Hash[String | Symbol, untyped] options, ?bool open) -> void + + def safe_join: (Array[String], String) -> String + + def truncate: (String text, ?Hash[Symbol, untyped] options) -> String + + def strip_tags: (String html) -> String +end diff --git a/sig/lib/_rails.rbs b/sig/lib/_rails.rbs deleted file mode 100644 index 81a22b1d..00000000 --- a/sig/lib/_rails.rbs +++ /dev/null @@ -1,17 +0,0 @@ -module MetaTags - interface _ActionControllerBase - def render: (*untyped args) { () -> untyped } -> untyped - end - - interface _ActionViewBase - def tag: (String name, ?Hash[String | Symbol, untyped] options, ?bool open) -> void - - def content_tag: (String name, String content, ?Hash[String | Symbol, untyped] options, ?bool open) -> void - - def safe_join: (Array[String], String) -> String - - def truncate: (String text, ?Hash[Symbol, untyped] options) -> String - - def strip_tags: (String html) -> String - end -end diff --git a/sig/lib/meta_tags/meta_tags_collection.rbs b/sig/lib/meta_tags/meta_tags_collection.rbs index 3d30dd9c..0ddfa59d 100644 --- a/sig/lib/meta_tags/meta_tags_collection.rbs +++ b/sig/lib/meta_tags/meta_tags_collection.rbs @@ -28,7 +28,7 @@ module MetaTags def extract_robots: () -> Hash[String, String] - def normalize_open_graph: (Hash[String | Symbol, untyped] meta_tags) -> Hash[String | Symbol, untyped] + def normalize_open_graph: (Hash[String | Symbol, untyped] meta_tags) -> ActiveSupport::HashWithIndifferentAccess[String | Symbol, untyped] def extract_separator_section: (String | Symbol name, String default) -> String diff --git a/sig/lib/meta_tags/text_normalizer.rbs b/sig/lib/meta_tags/text_normalizer.rbs index 0bd0c775..57c6d686 100644 --- a/sig/lib/meta_tags/text_normalizer.rbs +++ b/sig/lib/meta_tags/text_normalizer.rbs @@ -21,7 +21,7 @@ module MetaTags def cleanup_strings: (keywords? strings, ?strip: bool strip) -> Array[String] - def truncate: (String string, ?Integer limit, ?String natural_separator) -> String + def truncate: (String string, ?Integer? limit, ?String natural_separator) -> String def truncate_array: (Array[String] string_array, ?Integer? limit, ?String separator, ?String natural_separator) -> Array[String] diff --git a/spec/support/shared_examples_for_set_meta_tags.rb b/spec/support/shared_examples_for_set_meta_tags.rb index 4219d87d..dfa95089 100644 --- a/spec/support/shared_examples_for_set_meta_tags.rb +++ b/spec/support/shared_examples_for_set_meta_tags.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -shared_examples_for '.set_meta_tags' do # rubocop:disable Metrics/BlockLength +shared_examples_for '.set_meta_tags' do context 'with a Hash parameter' do it 'updates meta tags' do subject.set_meta_tags(title: 'hello')