diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 89f16b62..ab0475c1 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -5,17 +5,18 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- ruby: ['3.1.2', '2.7.5']
+ ruby: ["3.3.10", "4.0.1"]
env:
RAILS_ENV: test
+ BUNDLE_PATH: vendor/bundle
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
+ bundler-cache: true
- name: setup app
run: |
- bundle
cd spec/dummy
bundle exec rails g impressionist -f
bundle exec rake db:create db:migrate RAILS_ENV=test
@@ -23,4 +24,11 @@ jobs:
run: bundle exec rubocop
- name: Run Tests
run: bundle exec rspec
-
+ env:
+ COVERAGE: true
+ - name: Upload Coverage
+ uses: qltysh/qlty-action/coverage@v2
+ with:
+ token: ${{ secrets.QLTY_COVERAGE_TOKEN }}
+ files: coverage/coverage.json
+ if: matrix.ruby == '4.0.1'
\ No newline at end of file
diff --git a/.rubocop.yml b/.rubocop.yml
index c7a7a4de..26ed9af7 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,13 +1,18 @@
+
AllCops:
Exclude:
- "spec/dummy/**/*"
+ - "vendor/bundle/**/*"
+ NewCops: enable
SuggestExtensions: false
+ TargetRubyVersion: 4.0
inherit_from: .rubocop_todo.yml
-require:
- - rubocop-rspec
+plugins:
- rubocop-rails
+ - rubocop-rake
+ - rubocop-rspec
Layout/SpaceAroundMethodCallOperator:
Enabled: true
@@ -23,5 +28,5 @@ Style/HashTransformKeys:
Enabled: True
Style/HashTransformValues:
Enabled: True
-RSpec/FilePath:
+RSpec/SpecFilePathFormat:
Enabled: False
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index f3a5e539..ad3fca2a 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1,660 +1,656 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
-# on 2020-04-25 21:43:29 -0400 using RuboCop version 0.82.0.
+# on 2026-02-08 18:48:27 UTC using RuboCop version 1.84.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 1
-# Configuration parameters: Include.
-# Include: **/*.gemspec
-Gemspec/RubyVersionGlobalsUsage:
- Exclude:
- - "impressionist.gemspec"
Gemspec/RequiredRubyVersion:
Exclude:
- - "impressionist.gemspec"
+ - 'impressionist.gemspec'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: outdent, indent
Layout/AccessModifierIndentation:
Exclude:
- - "lib/impressionist/engine.rb"
+ - 'lib/impressionist/engine.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: with_first_argument, with_fixed_indentation
Layout/ArgumentAlignment:
Exclude:
- - "lib/impressionist/is_impressionable.rb"
- - "lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb"
-
-# Offense count: 1455
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, IndentationWidth.
-# SupportedStyles: with_first_element, with_fixed_indentation
-Layout/ArrayAlignment:
- Exclude:
- - "app/models/impressionist/bots.rb"
+ - 'lib/impressionist/is_impressionable.rb'
+ - 'lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyleAlignWith.
# SupportedStylesAlignWith: either, start_of_block, start_of_line
Layout/BlockAlignment:
Exclude:
- - "lib/impressionist/engine.rb"
+ - 'lib/impressionist/engine.rb'
# Offense count: 3
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Layout/ClosingParenthesisIndentation:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowForAlignment.
Layout/CommentIndentation:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 6
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: leading, trailing
Layout/DotPosition:
Exclude:
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/models/active_record/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
- - "lib/impressionist/setup_association.rb"
- - "lib/impressionist/update_counters.rb"
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/models/active_record/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
+ - 'lib/impressionist/setup_association.rb'
+ - 'lib/impressionist/update_counters.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Layout/EmptyLineAfterGuardClause:
Exclude:
- - "app/models/impressionist/bots.rb"
+ - 'app/models/impressionist/bots.rb'
# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: AllowAdjacentOneLineDefs, NumberOfEmptyLines.
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EmptyLineBetweenMethodDefs, EmptyLineBetweenClassDefs, EmptyLineBetweenModuleDefs, DefLikeMacros, AllowAdjacentOneLineDefs, NumberOfEmptyLines.
Layout/EmptyLineBetweenDefs:
Exclude:
- - "lib/impressionist/counter_cache.rb"
+ - 'lib/impressionist/counter_cache.rb'
# Offense count: 6
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Layout/EmptyLines:
Exclude:
- - "Rakefile"
- - "app/controllers/impressionist_controller.rb"
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/engine.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
+ - 'Rakefile'
+ - 'app/controllers/impressionist_controller.rb'
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/engine.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: around, only_before
Layout/EmptyLinesAroundAccessModifier:
Exclude:
- - "lib/impressionist/setup_association.rb"
+ - 'lib/impressionist/setup_association.rb'
# Offense count: 6
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only
Layout/EmptyLinesAroundClassBody:
Exclude:
- - "lib/generators/impressionist_generator.rb"
- - "lib/impressionist/engine.rb"
- - "lib/impressionist/models/active_record/impression.rb"
- - "lib/impressionist/models/mongoid/impression.rb"
- - "lib/impressionist/rails_toggle.rb"
- - "lib/impressionist/update_counters.rb"
+ - 'lib/generators/impressionist_generator.rb'
+ - 'lib/impressionist/engine.rb'
+ - 'lib/impressionist/models/active_record/impression.rb'
+ - 'lib/impressionist/models/mongoid/impression.rb'
+ - 'lib/impressionist/rails_toggle.rb'
+ - 'lib/impressionist/update_counters.rb'
-# Offense count: 4
-# Cop supports --auto-correct.
+# Offense count: 3
+# This cop supports safe autocorrection (--autocorrect).
Layout/EmptyLinesAroundMethodBody:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
- - "upgrade_migrations/version_0_3_0.rb"
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
+ - 'upgrade_migrations/version_0_3_0.rb'
# Offense count: 19
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines
Layout/EmptyLinesAroundModuleBody:
Exclude:
- - "app/models/impressionist/bots.rb"
- - "app/models/impressionist/impressionable.rb"
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/is_impressionable.rb"
- - "lib/impressionist/models/active_record/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
- - "lib/impressionist/rails_toggle.rb"
- - "lib/impressionist/update_counters.rb"
+ - 'app/models/impressionist/bots.rb'
+ - 'app/models/impressionist/impressionable.rb'
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/is_impressionable.rb'
+ - 'lib/impressionist/models/active_record/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
+ - 'lib/impressionist/rails_toggle.rb'
+ - 'lib/impressionist/update_counters.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
Layout/ExtraSpacing:
Exclude:
- - "lib/impressionist/counter_cache.rb"
+ - 'lib/impressionist/counter_cache.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: consistent, consistent_relative_to_receiver, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
Layout/FirstArgumentIndentation:
Exclude:
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
# SupportedHashRocketStyles: key, separator, table
# SupportedColonStyles: key, separator, table
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
Layout/HashAlignment:
Exclude:
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
# Offense count: 18
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: normal, indented_internal_methods
Layout/IndentationConsistency:
Exclude:
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/engine.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
- - "lib/impressionist/rails_toggle.rb"
- - "lib/impressionist/setup_association.rb"
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/engine.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
+ - 'lib/impressionist/rails_toggle.rb'
+ - 'lib/impressionist/setup_association.rb'
# Offense count: 8
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: IndentationWidth, EnforcedStyle.
# SupportedStyles: spaces, tabs
Layout/IndentationStyle:
Exclude:
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
# Offense count: 24
-# Cop supports --auto-correct.
-# Configuration parameters: Width, IgnoredPatterns.
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: Width, EnforcedStyleAlignWith, AllowedPatterns.
+# SupportedStylesAlignWith: start_of_line, relative_to_receiver
Layout/IndentationWidth:
Exclude:
- - "app/models/impressionist/impressionable.rb"
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/engine.rb"
- - "lib/impressionist/models/active_record/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
- - "lib/impressionist/rails_toggle.rb"
- - "lib/impressionist/setup_association.rb"
+ - 'app/models/impressionist/impressionable.rb'
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/engine.rb'
+ - 'lib/impressionist/models/active_record/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
+ - 'lib/impressionist/rails_toggle.rb'
+ - 'lib/impressionist/setup_association.rb'
# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment.
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment, AllowRBSInlineAnnotation, AllowSteepAnnotation.
Layout/LeadingCommentSpace:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "lib/impressionist/bots.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'lib/impressionist/bots.rb'
# Offense count: 6
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: aligned, indented, indented_relative_to_receiver
Layout/MultilineMethodCallIndentation:
Exclude:
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/models/active_record/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
- - "lib/impressionist/setup_association.rb"
- - "lib/impressionist/update_counters.rb"
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/models/active_record/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
+ - 'lib/impressionist/setup_association.rb'
+ - 'lib/impressionist/update_counters.rb'
# Offense count: 21
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Layout/SpaceAfterComma:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "app/models/impressionist/bots.rb"
- - "lib/impressionist/bots.rb"
- - "upgrade_migrations/version_0_3_0.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'app/models/impressionist/bots.rb'
+ - 'lib/impressionist/bots.rb'
+ - 'upgrade_migrations/version_0_3_0.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyleInsidePipes.
# SupportedStylesInsidePipes: space, no_space
Layout/SpaceAroundBlockParameters:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 13
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: space, no_space
Layout/SpaceAroundEqualsInParameterDefault:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "app/models/impressionist/impressionable.rb"
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/is_impressionable.rb"
- - "lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'app/models/impressionist/impressionable.rb'
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/is_impressionable.rb'
+ - 'lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator, EnforcedStyleForRationalLiterals.
# SupportedStylesForExponentOperator: space, no_space
+# SupportedStylesForRationalLiterals: space, no_space
Layout/SpaceAroundOperators:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
- - "lib/impressionist/counter_cache.rb"
- - "lib/impressionist/models/mongo_mapper/impression.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
+ - 'lib/impressionist/counter_cache.rb'
+ - 'lib/impressionist/models/mongo_mapper/impression.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
# SupportedStyles: space, no_space
# SupportedStylesForEmptyBraces: space, no_space
Layout/SpaceBeforeBlockBraces:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 3
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
# SupportedStyles: space, no_space
# SupportedStylesForEmptyBraces: space, no_space
Layout/SpaceInsideBlockBraces:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 4
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
# SupportedStyles: space, no_space, compact
# SupportedStylesForEmptyBraces: space, no_space
Layout/SpaceInsideHashLiteralBraces:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "lib/impressionist/update_counters.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'lib/impressionist/update_counters.rb'
-# Offense count: 3
-# Cop supports --auto-correct.
+# Offense count: 2
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: final_newline, final_blank_line
Layout/TrailingEmptyLines:
Exclude:
- - "Gemfile"
- - "lib/impressionist/setup_association.rb"
- - "upgrade_migrations/version_1_5_2.rb"
+ - 'lib/impressionist/setup_association.rb'
+ - 'upgrade_migrations/version_1_5_2.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowInHeredoc.
Layout/TrailingWhitespace:
Exclude:
- - "lib/impressionist/setup_association.rb"
+ - 'lib/impressionist/setup_association.rb'
# Offense count: 1
Lint/DuplicateMethods:
Exclude:
- - "lib/impressionist/setup_association.rb"
+ - 'lib/impressionist/setup_association.rb'
+
+# Offense count: 1
+# Configuration parameters: AllowComments.
+Lint/EmptyClass:
+ Exclude:
+ - 'app/models/impression.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Lint/RedundantStringCoercion:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Lint/SendWithMixinArgument:
Exclude:
- - "lib/impressionist/models/active_record/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
+ - 'lib/impressionist/models/active_record/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
Lint/UnusedBlockArgument:
Exclude:
- - "lib/impressionist/engine.rb"
+ - 'lib/impressionist/engine.rb'
# Offense count: 3
-# Configuration parameters: IgnoredMethods.
+# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
Metrics/AbcSize:
- Max: 23
+ Max: 32
-# Offense count: 11
-# Configuration parameters: CountComments, ExcludedMethods.
-# ExcludedMethods: refine
-Metrics/BlockLength:
- Max: 336
+# Offense count: 1
+# Configuration parameters: LengthThreshold.
+Metrics/CollectionLiteralLength:
+ Exclude:
+ - 'app/models/impressionist/bots.rb'
+
+# Offense count: 1
+# Configuration parameters: AllowedMethods, AllowedPatterns.
+Metrics/CyclomaticComplexity:
+ Max: 8
# Offense count: 3
-# Configuration parameters: CountComments, ExcludedMethods.
+# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
Metrics/MethodLength:
- Max: 15
+ Max: 17
# Offense count: 2
-# Configuration parameters: CountComments.
+# Configuration parameters: CountComments, CountAsOne.
Metrics/ModuleLength:
- Max: 1462
+ Max: 1464
+
+# Offense count: 1
+# Configuration parameters: AllowedMethods, AllowedPatterns.
+Metrics/PerceivedComplexity:
+ Max: 10
+
+# Offense count: 4
+# Configuration parameters: Mode, AllowedMethods, AllowedPatterns, AllowBangMethods, WaywardPredicates.
+# AllowedMethods: call
+# WaywardPredicates: infinite?, nonzero?
+Naming/PredicateMethod:
+ Exclude:
+ - 'app/controllers/impressionist_controller.rb'
+ - 'lib/impressionist/is_impressionable.rb'
+ - 'lib/impressionist/setup_association.rb'
# Offense count: 2
-# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
-# NamePrefix: is_, has_, have_
-# ForbiddenPrefixes: is_, has_, have_
+# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros, UseSorbetSigs.
+# NamePrefix: is_, has_, have_, does_
+# ForbiddenPrefixes: is_, has_, have_, does_
# AllowedMethods: is_a?
# MethodDefinitionMacros: define_method, define_singleton_method
-Naming/PredicateName:
+Naming/PredicatePrefix:
Exclude:
- - "spec/**/*"
- - "lib/impressionist/is_impressionable.rb"
- - "lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb"
+ - 'lib/impressionist/is_impressionable.rb'
+ - 'lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb'
# Offense count: 6
-# Configuration parameters: Prefixes.
+# Configuration parameters: Prefixes, AllowedPatterns.
# Prefixes: when, with, without
RSpec/ContextWording:
Exclude:
- - "spec/controllers/impressionist_uniqueness_spec.rb"
- - "spec/controllers/widgets_controller_spec.rb"
+ - 'spec/controllers/impressionist_uniqueness_spec.rb'
+ - 'spec/controllers/widgets_controller_spec.rb'
# Offense count: 31
-# Configuration parameters: Max.
+# Configuration parameters: CountAsOne.
RSpec/ExampleLength:
- Exclude:
- - "spec/controllers/articles_controller_spec.rb"
- - "spec/controllers/impressionist_uniqueness_spec.rb"
- - "spec/controllers/posts_controller_spec.rb"
- - "spec/controllers/widgets_controller_spec.rb"
- - "spec/rails_generators/rails_generators_spec.rb"
- - "spec/setup_association_spec.rb"
+ Max: 16
-# Offense count: 5
-# Configuration parameters: CustomTransform, IgnoreMethods.
-RSpec/FilePath:
- Exclude:
- - "spec/bots_spec.rb"
- - "spec/controllers/impressionist_uniqueness_spec.rb"
- - "spec/models/bots_spec.rb"
- - "spec/rails_toggle_spec.rb"
- - "spec/setup_association_spec.rb"
-
-# Offense count: 77
+# Offense count: 45
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
Exclude:
- - "spec/controllers/articles_controller_spec.rb"
- - "spec/controllers/impressionist_uniqueness_spec.rb"
- - "spec/controllers/widgets_controller_spec.rb"
- - "spec/model_spec.rb"
- - "spec/models/model_spec.rb"
+ - 'spec/controllers/articles_controller_spec.rb'
+ - 'spec/controllers/impressionist_uniqueness_spec.rb'
+ - 'spec/controllers/widgets_controller_spec.rb'
-# Offense count: 5
+# Offense count: 2
# Configuration parameters: .
# SupportedStyles: have_received, receive
RSpec/MessageSpies:
EnforcedStyle: receive
-# Offense count: 29
-# Configuration parameters: AggregateFailuresByDefault.
+# Offense count: 25
RSpec/MultipleExpectations:
Max: 8
# Offense count: 4
+# Configuration parameters: AllowedGroups.
RSpec/NestedGroups:
Max: 4
# Offense count: 2
RSpec/RepeatedExample:
Exclude:
- - "spec/controllers/widgets_controller_spec.rb"
+ - 'spec/controllers/widgets_controller_spec.rb'
# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, Include.
-# SupportedStyles: action, filter
-# Include: app/controllers/**/*.rb
-Rails/ActionFilter:
- Exclude:
- - "app/controllers/impressionist_controller.rb"
-
-# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationRecord:
Exclude:
- - "lib/impressionist/models/active_record/impression.rb"
+ - 'lib/impressionist/models/active_record/impression.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank.
Rails/Present:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 1
-# Configuration parameters: Include.
-# Include: **/Rakefile, **/*.rake
+# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RakeEnvironment:
Exclude:
- - "lib/capistrano/tasks/**/*.rake"
- - "Rakefile"
+ - 'Rakefile'
# Offense count: 1
-# Configuration parameters: Blacklist, Whitelist.
-# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
+# Configuration parameters: ForbiddenMethods, AllowedMethods.
+# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all
Rails/SkipsModelValidations:
Exclude:
- - "lib/impressionist/update_counters.rb"
+ - 'lib/impressionist/update_counters.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: strict, flexible
Rails/TimeZone:
Exclude:
- - "app/models/impressionist/impressionable.rb"
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
+ - 'app/models/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
# SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces
# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
# FunctionalMethods: let, let!, subject, watch
-# IgnoredMethods: lambda, proc, it
+# AllowedMethods: lambda, proc, it
Style/BlockDelimiters:
Exclude:
- - "lib/impressionist/counter_cache.rb"
+ - 'lib/impressionist/counter_cache.rb'
# Offense count: 1
Style/ClassVars:
Exclude:
- - "lib/impressionist.rb"
+ - 'lib/impressionist.rb'
# Offense count: 1
+# This cop supports unsafe autocorrection (--autocorrect-all).
Style/CommentedKeyword:
Exclude:
- - "app/models/impressionist/impressionable.rb"
+ - 'app/models/impressionist/impressionable.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
# SupportedStyles: assign_to_condition, assign_inside_condition
Style/ConditionalAssignment:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
-# Offense count: 24
+# Offense count: 23
+# Configuration parameters: AllowedConstants.
Style/Documentation:
Enabled: false
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Style/EachWithObject:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Style/ExpandPathArguments:
Exclude:
- - "lib/generators/impressionist_generator.rb"
+ - 'lib/generators/impressionist_generator.rb'
-# Offense count: 1
-# Cop supports --auto-correct.
+# Offense count: 2
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: format, sprintf, percent
Style/FormatString:
Exclude:
- - "lib/generators/active_record/impressionist_generator.rb"
+ - 'lib/generators/active_record/impressionist_generator.rb'
-# Offense count: 1
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: annotated, template, unannotated
-Style/FormatStringToken:
- Exclude:
- - "lib/generators/active_record/impressionist_generator.rb"
-
-# Offense count: 41
-# Cop supports --auto-correct.
+# Offense count: 40
+# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
Style/FrozenStringLiteralComment:
Enabled: false
-# Offense count: 3
-# Configuration parameters: MinBodyLength.
+# Offense count: 4
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
Style/GuardClause:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
-# Offense count: 136
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
+# Offense count: 119
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
+# SupportedShorthandSyntax: always, never, either, consistent, either_consistent
Style/HashSyntax:
- Enabled: false
+ Exclude:
+ - 'app/controllers/impressionist_controller.rb'
+ - 'app/models/impressionist/impressionable.rb'
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
+ - 'lib/impressionist/is_impressionable.rb'
+ - 'lib/impressionist/models/mongo_mapper/impression.rb'
+ - 'lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb'
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
+ - 'lib/impressionist/setup_association.rb'
+ - 'lib/impressionist/update_counters.rb'
+ - 'spec/controllers/impressionist_uniqueness_spec.rb'
+ - 'spec/counter_caching_spec.rb'
+ - 'spec/models/impression_spec.rb'
+ - 'spec/spec_helper.rb'
+ - 'upgrade_migrations/version_0_3_0.rb'
+ - 'upgrade_migrations/version_1_5_2.rb'
# Offense count: 3
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Style/IfUnlessModifier:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "app/models/impressionist/impressionable.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'app/models/impressionist/impressionable.rb'
# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
Style/MultilineTernaryOperator:
Exclude:
- - "lib/impressionist/models/mongoid/impressionist/impressionable.rb"
+ - 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
# Offense count: 5
-# Cop supports --auto-correct.
+# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: literals, strict
Style/MutableConstant:
Exclude:
- - "app/models/impressionist/bots.rb"
- - "app/models/impressionist/impressionable.rb"
- - "lib/impressionist/bots.rb"
- - "lib/impressionist/version.rb"
+ - 'app/models/impressionist/bots.rb'
+ - 'app/models/impressionist/impressionable.rb'
+ - 'lib/impressionist/bots.rb'
+ - 'lib/impressionist/version.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Style/Not:
Exclude:
- - "lib/impressionist/rails_toggle.rb"
+ - 'lib/impressionist/rails_toggle.rb'
# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: Strict.
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: Strict, AllowedNumbers, AllowedPatterns.
Style/NumericLiterals:
MinDigits: 6
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Style/RedundantBegin:
Exclude:
- - "lib/impressionist/counter_cache.rb"
+ - 'lib/impressionist/counter_cache.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowMultipleReturnValues.
Style/RedundantReturn:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 4
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Style/RedundantSelf:
Exclude:
- - "app/controllers/impressionist_controller.rb"
- - "lib/impressionist/counter_cache.rb"
+ - 'app/controllers/impressionist_controller.rb'
+ - 'lib/impressionist/counter_cache.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
Style/RescueModifier:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
-# Offense count: 1670
-# Cop supports --auto-correct.
+# Offense count: 1636
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
# SupportedStyles: single_quotes, double_quotes
Style/StringLiterals:
Enabled: false
# Offense count: 40
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: MinSize.
# SupportedStyles: percent, brackets
Style/SymbolArray:
EnforcedStyle: brackets
# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: IgnoredMethods.
-# IgnoredMethods: respond_to, define_method
+# This cop supports unsafe autocorrection (--autocorrect-all).
+# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments.
+# AllowedMethods: define_method, mail, respond_to
Style/SymbolProc:
Exclude:
- - "app/controllers/impressionist_controller.rb"
+ - 'app/controllers/impressionist_controller.rb'
# Offense count: 1
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, AllowSafeAssignment.
# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
Style/TernaryParentheses:
Exclude:
- - "lib/impressionist/controllers/mongoid/impressionist_controller.rb"
+ - 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
# Offense count: 2
-# Cop supports --auto-correct.
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: MinSize, WordRegex.
# SupportedStyles: percent, brackets
Style/WordArray:
EnforcedStyle: brackets
-# Offense count: 401
-# Cop supports --auto-correct.
-# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
+# Offense count: 45
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings.
# URISchemes: http, https
Layout/LineLength:
Max: 197
-
diff --git a/Gemfile b/Gemfile
index 01777386..c7cc3851 100644
--- a/Gemfile
+++ b/Gemfile
@@ -10,12 +10,17 @@ platforms :jruby do
end
group :test do
+ gem 'capybara', '~> 3.40'
gem 'minitest'
gem 'pry'
gem 'rspec', "~> 3.0"
+ gem 'rspec-rails', '~> 8.0'
gem 'rubocop-rails', require: false
+ gem 'rubocop-rake', require: false
gem 'rubocop-rspec', require: false
gem 'simplecov'
+ gem 'simplecov_json_formatter'
+ gem 'sqlite3', '~> 2.9'
gem 'systemu'
end
diff --git a/README.md b/README.md
index b92916ff..42e94858 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@ Add it to your Gemfile
#rails 6
gem 'impressionist'
-
+
#rails 5 or lower
gem 'impressionist', '~>1.6.1'
diff --git a/app/models/impressionist/bots.rb b/app/models/impressionist/bots.rb
index aee7cf9c..9b61f8cf 100644
--- a/app/models/impressionist/bots.rb
+++ b/app/models/impressionist/bots.rb
@@ -8,7 +8,8 @@ def self.bot?(user_agent = nil)
WILD_CARDS = ["bot","yahoo","slurp","google","msn","crawler"]
- LIST = [" UnChaos From Chaos To Order Hybrid Web Search Engine.(vadim_gonchar@unchaos.com)",
+ LIST = [
+ " UnChaos From Chaos To Order Hybrid Web Search Engine.(vadim_gonchar@unchaos.com)",
" UnChaos Bot Hybrid Web Search Engine. (vadim_gonchar@unchaos.com)",
" UnChaosBot From Chaos To Order UnChaos Hybrid Web Search Engine at www.unchaos.com (info@unchaos.com)",
" http://www.sygol.com",
@@ -1463,6 +1464,7 @@ def self.bot?(user_agent = nil)
"Zippy v2.0 - Zippyfinder.com",
"ZoomSpider - wrensoft.com",
"zspider/0.9-dev http://feedback.redkolibri.com/",
- "ZyBorg/1.0 (ZyBorg@WISEnut.com; http://www.WISEnut.com)"]
+ "ZyBorg/1.0 (ZyBorg@WISEnut.com; http://www.WISEnut.com)"
+ ]
end
end
diff --git a/app/models/impressionist/impressionable.rb b/app/models/impressionist/impressionable.rb
index 7bfd8e8d..acf5f742 100644
--- a/app/models/impressionist/impressionable.rb
+++ b/app/models/impressionist/impressionable.rb
@@ -5,7 +5,7 @@ module Impressionable
module ClassMethods
attr_accessor :impressionist_cache_options
- DEFAULT_CACHE ||= {
+ DEFAULT_CACHE = {
:counter_cache => false,
:column_name => :impressions_count,
:unique => :all
@@ -21,11 +21,6 @@ def impressionist_counter_caching?
impressionist_counter_cache_options[:counter_cache]
end
- def counter_caching?
- ::ActiveSupport::Deprecation.warn("#counter_caching? is deprecated; please use #impressionist_counter_caching? instead")
- impressionist_counter_caching?
- end
-
end # end of ClassMethods
def impressionist_count(options={})
@@ -33,10 +28,17 @@ def impressionist_count(options={})
options.reverse_merge!(:filter => :request_hash, :start_date => nil, :end_date => Time.now)
# If a start_date is provided, finds impressions between then and the end_date. Otherwise returns all impressions
- imps = options[:start_date].blank? ? impressions : impressions.where("created_at >= ? and created_at <= ?", options[:start_date], options[:end_date])
+ imps = if options[:start_date].blank?
+ impressions
+ else
+ # Parse date strings to ensure proper timezone handling
+ start_date = options[:start_date].is_a?(String) ? Date.parse(options[:start_date]) : options[:start_date]
+ end_date = options[:end_date].is_a?(String) ? Date.parse(options[:end_date]) : options[:end_date]
+ impressions.where(created_at: start_date..end_date)
+ end
if options[:message]
- imps = imps.where("impressions.message = ?", options[:message])
+ imps = imps.where(impressions: { message: options[:message] })
end
# Count all distinct impressions unless the :all filter is provided.
diff --git a/impressionist.gemspec b/impressionist.gemspec
index 4da56b8a..c7f1dfe0 100644
--- a/impressionist.gemspec
+++ b/impressionist.gemspec
@@ -15,15 +15,11 @@ Gem::Specification.new do |s|
s.authors = ['johnmcaliley']
s.files = `git ls-files`.split("\n")
- s.test_files = `git ls-files -- tests/**/*`.split("\n")
s.require_path = 'lib'
- s.add_dependency "friendly_id"
- s.add_dependency 'nokogiri', RUBY_VERSION < '2.1.0' ? '~> 1.6.0' : '~> 1'
- s.add_dependency 'rails', '>= 3.2.15'
+ s.add_dependency "friendly_id", '~> 5.6'
+ s.add_dependency 'nokogiri', '~> 1.19'
+ s.add_dependency 'rails', '>= 7.2'
- s.add_development_dependency 'bundler', '~> 2.0'
- s.add_development_dependency 'capybara'
- s.add_development_dependency 'rspec-rails'
- s.add_development_dependency 'sqlite3', '~> 2.0'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/lib/generators/active_record/impressionist_generator.rb b/lib/generators/active_record/impressionist_generator.rb
index 1c899782..f3320f50 100644
--- a/lib/generators/active_record/impressionist_generator.rb
+++ b/lib/generators/active_record/impressionist_generator.rb
@@ -2,17 +2,9 @@ module ActiveRecord
module Generators
class ImpressionistGenerator < Rails::Generators::Base
include Rails::Generators::Migration
- source_root File.join(File.dirname(__FILE__), 'templates')
+ include ActiveRecord::Generators::Migration
- # FIX, why is this implementing rails behaviour?
- def self.next_migration_number(dirname)
- sleep 1
- if ActiveRecord::Base.timestamped_migrations
- Time.now.utc.strftime("%Y%m%d%H%M%S")
- else
- "%.3d" % (current_migration_number(dirname) + 1)
- end
- end
+ source_root File.join(File.dirname(__FILE__), 'templates')
def create_migration_file
migration_template 'create_impressions_table.rb.erb', 'db/migrate/create_impressions_table.rb'
diff --git a/lib/generators/active_record/templates/create_impressions_table.rb.erb b/lib/generators/active_record/templates/create_impressions_table.rb.erb
index e0f24283..f36f16bc 100644
--- a/lib/generators/active_record/templates/create_impressions_table.rb.erb
+++ b/lib/generators/active_record/templates/create_impressions_table.rb.erb
@@ -1,4 +1,4 @@
-class CreateImpressionsTable < ActiveRecord::Migration<%= Rails::VERSION::MAJOR >= 5 ? "[#{Rails.version.to_f}]" : "" %>
+class CreateImpressionsTable < ActiveRecord::Migration[7.1]
def self.up
create_table :impressions, :force => true do |t|
t.string :impressionable_type
@@ -15,14 +15,14 @@ class CreateImpressionsTable < ActiveRecord::Migration<%= Rails::VERSION::MAJOR
t.text :params
t.timestamps
end
- add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false, :length => {:message => 255 }
- add_index :impressions, [:impressionable_type, :impressionable_id, :request_hash], :name => "poly_request_index", :unique => false
- add_index :impressions, [:impressionable_type, :impressionable_id, :ip_address], :name => "poly_ip_index", :unique => false
- add_index :impressions, [:impressionable_type, :impressionable_id, :session_hash], :name => "poly_session_index", :unique => false
- add_index :impressions, [:controller_name,:action_name,:request_hash], :name => "controlleraction_request_index", :unique => false
- add_index :impressions, [:controller_name,:action_name,:ip_address], :name => "controlleraction_ip_index", :unique => false
- add_index :impressions, [:controller_name,:action_name,:session_hash], :name => "controlleraction_session_index", :unique => false
- add_index :impressions, [:impressionable_type, :impressionable_id, :params], :name => "poly_params_request_index", :unique => false, :length => {:params => 255 }
+ add_index :impressions, [ :impressionable_type, :message, :impressionable_id ], name: "impressionable_type_message_index", unique: false, length: { message: 255 }
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :request_hash ], name: "poly_request_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :ip_address ], name: "poly_ip_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :session_hash ], name: "poly_session_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name,:request_hash ], name: "controlleraction_request_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name,:ip_address ], name: "controlleraction_ip_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name,:session_hash ], name: "controlleraction_session_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :params ], name: "poly_params_request_index", unique: false, length: { params: 255 }
add_index :impressions, :user_id
end
diff --git a/lib/generators/impressionist_generator.rb b/lib/generators/impressionist_generator.rb
index 274a8f09..6a945a7e 100644
--- a/lib/generators/impressionist_generator.rb
+++ b/lib/generators/impressionist_generator.rb
@@ -1,13 +1,28 @@
module Impressionist
module Generators
class ImpressionistGenerator < Rails::Generators::Base
- hook_for :orm
+ include Rails::Generators::Migration
+
source_root File.expand_path('../templates', __FILE__)
+ def self.next_migration_number(*)
+ Time.now.utc.strftime(
+ Rails.application.config.generators[:migration_number_format] || "%Y%m%d%H%M%S"
+ )
+ end
+
def copy_config_file
template 'impression.rb.erb', 'config/initializers/impression.rb'
end
+ def create_migration_file
+ if defined?(ActiveRecord::Base) && ActiveRecord::Base.respond_to?(:connection)
+ migration_template 'create_impressions_table.rb.erb', 'db/migrate/create_impressions_table.rb'
+ else
+ say_status :skip, "Skipping ActiveRecord migration"
+ say "If you're using Mongoid or MongoMapper, set config.orm = :mongoid (or :mongo_mapper) in config/initializers/impression.rb"
+ end
+ end
end
end
end
diff --git a/lib/generators/templates/create_impressions_table.rb.erb b/lib/generators/templates/create_impressions_table.rb.erb
new file mode 100644
index 00000000..b57b6120
--- /dev/null
+++ b/lib/generators/templates/create_impressions_table.rb.erb
@@ -0,0 +1,32 @@
+class CreateImpressionsTable < ActiveRecord::Migration[7.1]
+ def self.up
+ create_table :impressions, force: true do |t|
+ t.string :impressionable_type
+ t.integer :impressionable_id
+ t.integer :user_id
+ t.string :controller_name
+ t.string :action_name
+ t.string :view_name
+ t.string :request_hash
+ t.string :ip_address
+ t.string :session_hash
+ t.text :message
+ t.text :referrer
+ t.text :params
+ t.timestamps
+ end
+ add_index :impressions, [ :impressionable_type, :message, :impressionable_id ], name: "impressionable_type_message_index", unique: false, length: { message: 255 }
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :request_hash ], name: "poly_request_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :ip_address ], name: "poly_ip_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :session_hash ], name: "poly_session_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name, :request_hash ], name: "controlleraction_request_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name, :ip_address ], name: "controlleraction_ip_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name, :session_hash ], name: "controlleraction_session_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :params ], name: "poly_params_request_index", unique: false, length: { params: 255 }
+ add_index :impressions, :user_id
+ end
+
+ def self.down
+ drop_table :impressions
+ end
+end
diff --git a/lib/generators/templates/impression.rb.erb b/lib/generators/templates/impression.rb.erb
index d54ffcf5..60874eb1 100644
--- a/lib/generators/templates/impression.rb.erb
+++ b/lib/generators/templates/impression.rb.erb
@@ -1,8 +1,5 @@
# Use this hook to configure impressionist parameters
-#Impressionist.setup do |config|
- # Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
- # config.orm = :active_record
-#end
-
-<% orm = options.orm.match(/mongoid|active_record|mongomapper/) %>
-<%= "Impressionist.orm = :#{options.orm}" if String === options.orm %>
+# Impressionist.setup do |config|
+# Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
+# config.orm = :active_record
+# end
diff --git a/lib/impressionist/controllers/mongoid/impressionist_controller.rb b/lib/impressionist/controllers/mongoid/impressionist_controller.rb
index f07cb2f4..5e5a4a09 100644
--- a/lib/impressionist/controllers/mongoid/impressionist_controller.rb
+++ b/lib/impressionist/controllers/mongoid/impressionist_controller.rb
@@ -4,7 +4,7 @@
base = (defined? Moped) ? Moped::BSON : BSON
query_params.reverse_merge!(
:impressionable_type => controller_path.singularize.camelize,
- :impressionable_id=> !base::ObjectId.legal?(params[:id]) ? params[:id] : base::ObjectId.from_string(params[:id])
+ :impressionable_id=> base::ObjectId.legal?(params[:id]) ? base::ObjectId.from_string(params[:id]) : params[:id]
)
associative_create_statement(query_params)
end
diff --git a/lib/impressionist/engine.rb b/lib/impressionist/engine.rb
index 54e4c862..f96c7d6d 100644
--- a/lib/impressionist/engine.rb
+++ b/lib/impressionist/engine.rb
@@ -2,29 +2,29 @@ module Impressionist
class Engine < ::Rails::Engine
attr_accessor :orm
- initializer 'impressionist.model' do |app|
- @orm = Impressionist.orm
- include_orm
- end
+ initializer 'impressionist.model' do |app|
+ @orm = Impressionist.orm
+ include_orm
+ end
- initializer 'impressionist.controller' do
- require "impressionist/controllers/mongoid/impressionist_controller" if orm == :mongoid.to_s
+ initializer 'impressionist.controller' do
+ require "impressionist/controllers/mongoid/impressionist_controller" if orm == :mongoid.to_s
- ActiveSupport.on_load(:action_controller) do
- include ImpressionistController::InstanceMethods
- extend ImpressionistController::ClassMethods
- end
- end
+ ActiveSupport.on_load(:action_controller) do
+ include ImpressionistController::InstanceMethods
+ extend ImpressionistController::ClassMethods
+ end
+ end
- private
+ private
- def include_orm
- require "#{root}/app/models/impressionist/impressionable.rb"
- require "impressionist/models/#{orm}/impression.rb"
- require "impressionist/models/#{orm}/impressionist/impressionable.rb"
- end
+ def include_orm
+ require "#{root}/app/models/impressionist/impressionable.rb"
+ require "impressionist/models/#{orm}/impression.rb"
+ require "impressionist/models/#{orm}/impressionist/impressionable.rb"
+ end
end
end
diff --git a/lib/impressionist/models/mongoid/impression.rb b/lib/impressionist/models/mongoid/impression.rb
index 5e10e337..1bfac085 100644
--- a/lib/impressionist/models/mongoid/impression.rb
+++ b/lib/impressionist/models/mongoid/impression.rb
@@ -6,6 +6,7 @@ class Impression
include Mongoid::Timestamps
include Impressionist::CounterCache
+
Impressionist::SetupAssociation.new(self).set
field :impressionable_id, type: BSON::ObjectId
diff --git a/mise.toml b/mise.toml
new file mode 100644
index 00000000..5a061357
--- /dev/null
+++ b/mise.toml
@@ -0,0 +1,2 @@
+[tools]
+ruby = "4.0.1"
diff --git a/spec/controllers/articles_controller_spec.rb b/spec/controllers/articles_controller_spec.rb
index e519b3bc..113ab160 100644
--- a/spec/controllers/articles_controller_spec.rb
+++ b/spec/controllers/articles_controller_spec.rb
@@ -31,7 +31,7 @@
expect(Impression.all.size).to eq 12
- expect(latest_impression.message).to eq nil
+ expect(latest_impression.message).to be_nil
expect(latest_impression.controller_name).to eq 'articles'
expect(latest_impression.action_name).to eq 'show'
end
@@ -46,7 +46,7 @@
it 'does not log the user_id if user is authenticated' do
get :show, params: { id: 1 }
- expect(Article.first.impressions.last.user_id).to eq nil
+ expect(Article.first.impressions.last.user_id).to be_nil
end
it 'logs the request_hash, ip_address, referrer and session_hash' do
@@ -57,7 +57,7 @@
expect(impression.request_hash.size).to eq 64
expect(impression.ip_address).to eq '0.0.0.0'
expect(impression.session_hash.size).to eq 32
- expect(impression.referrer).to eq nil
+ expect(impression.referrer).to be_nil
end
# Capybara has change the way it works
@@ -80,7 +80,7 @@
expect(impression.request_hash.size).to eq 64
expect(impression.ip_address).to eq '0.0.0.0'
expect(impression.session_hash.size).to eq 32
- expect(impression.referrer).to eq nil
+ expect(impression.referrer).to be_nil
end
it 'logs request with params: {}' do
@@ -92,7 +92,7 @@
expect(impression.request_hash.size).to eq 64
expect(impression.ip_address).to eq '0.0.0.0'
expect(impression.session_hash.size).to eq 32
- expect(impression.referrer).to eq nil
+ expect(impression.referrer).to be_nil
end
describe 'when filtering params' do
diff --git a/spec/controllers/impressionist_uniqueness_spec.rb b/spec/controllers/impressionist_uniqueness_spec.rb
index 2b1d9e08..0e947d8c 100644
--- a/spec/controllers/impressionist_uniqueness_spec.rb
+++ b/spec/controllers/impressionist_uniqueness_spec.rb
@@ -359,9 +359,7 @@
describe "impressionist filter and method uniqueness" do
it "recognize uniqueness" do
impressionable = Post.create
- allow(controller).to receive(:controller_name).and_return("posts") # for correct impressionable type in filter
- allow(controller).to receive(:params).and_return({ :id => impressionable.id.to_s }) # for correct impressionable id in filter
- allow(controller).to receive(:session_hash).and_return("foo")
+ allow(controller).to receive_messages(controller_name: "posts", params: { :id => impressionable.id.to_s }, session_hash: "foo")
allow(controller.request).to receive(:remote_ip).and_return("1.2.3.4")
# order of the following methods is important for the test!
controller.impressionist_subapp_filter(unique: [:ip_address, :request_hash, :session_hash])
@@ -374,9 +372,7 @@
it 'unique' do
impressionable = Profile.create({ username: 'test_profile', slug: 'test_profile' })
- allow(controller).to receive(:controller_name).and_return('profile')
- allow(controller).to receive(:action_name).and_return('show')
- allow(controller).to receive(:params).and_return({ id: impressionable.slug })
+ allow(controller).to receive_messages(controller_name: 'profile', action_name: 'show', params: { id: impressionable.slug })
allow(controller.request).to receive(:remote_ip).and_return('1.2.3.4')
controller.impressionist(impressionable, nil, :unique => [:impressionable_type, :impressionable_id])
diff --git a/spec/counter_caching_spec.rb b/spec/counter_caching_spec.rb
index 10852b6e..1c8709db 100644
--- a/spec/counter_caching_spec.rb
+++ b/spec/counter_caching_spec.rb
@@ -19,18 +19,6 @@
end
end
- describe "self#counter_caching?" do
- it "knows when counter caching is enabled" do
- allow(ActiveSupport::Deprecation).to receive(:warn)
- expect(Widget).to be_counter_caching
- end
-
- it "knows when counter caching is disabled" do
- allow(ActiveSupport::Deprecation).to receive(:warn)
- expect(Article).not_to be_counter_caching
- end
- end
-
describe "#update_impressionist_counter_cache" do
it "updates the counter cache column to reflect the correct number of impressions" do
expect do
diff --git a/spec/dummy/.ruby-version b/spec/dummy/.ruby-version
index 860487ca..5f6fc5ed 100644
--- a/spec/dummy/.ruby-version
+++ b/spec/dummy/.ruby-version
@@ -1 +1 @@
-2.7.1
+3.3.10
diff --git a/spec/dummy/bin/setup b/spec/dummy/bin/setup
index 0e39e8cb..34752fcc 100755
--- a/spec/dummy/bin/setup
+++ b/spec/dummy/bin/setup
@@ -1,7 +1,6 @@
#!/usr/bin/env ruby
require 'fileutils'
-# path to your application root.
APP_ROOT = File.expand_path('..', __dir__)
def system!(*args)
@@ -9,19 +8,10 @@ def system!(*args)
end
FileUtils.chdir APP_ROOT do
- # This script is a way to setup or update your development environment automatically.
- # This script is idempotent, so that you can run it at anytime and get an expectable outcome.
- # Add necessary setup steps to this file.
-
puts '== Installing dependencies =='
system! 'gem install bundler --conservative'
system('bundle check') || system!('bundle install')
- # puts "\n== Copying sample files =="
- # unless File.exist?('config/database.yml')
- # FileUtils.cp 'config/database.yml.sample', 'config/database.yml'
- # end
-
puts "\n== Preparing database =="
system! 'bin/rails db:prepare'
diff --git a/spec/dummy/config.ru b/spec/dummy/config.ru
index f7ba0b52..ad1fbf29 100644
--- a/spec/dummy/config.ru
+++ b/spec/dummy/config.ru
@@ -3,3 +3,4 @@
require_relative 'config/environment'
run Rails.application
+Rails.application.load_server
diff --git a/spec/dummy/config.ru2 b/spec/dummy/config.ru2
deleted file mode 100644
index 86a587d0..00000000
--- a/spec/dummy/config.ru2
+++ /dev/null
@@ -1,4 +0,0 @@
-# This file is used by Rack-based servers to start the application.
-
-require ::File.expand_path('../config/environment', __FILE__)
-run TestApp::Application
diff --git a/spec/dummy/config/application.rb b/spec/dummy/config/application.rb
index 046f5459..c53c4973 100644
--- a/spec/dummy/config/application.rb
+++ b/spec/dummy/config/application.rb
@@ -3,13 +3,11 @@
require 'rails/all'
Bundler.require(*Rails.groups)
-# FIXME
-require "impressionist"
module Dummy
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
- config.load_defaults 6.0
+ config.load_defaults 8.0
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
@@ -17,4 +15,3 @@ class Application < Rails::Application
# the framework and any gems in your application.
end
end
-
diff --git a/spec/dummy/config/boot.rb b/spec/dummy/config/boot.rb
index c9aef85d..7b1ae374 100644
--- a/spec/dummy/config/boot.rb
+++ b/spec/dummy/config/boot.rb
@@ -1,5 +1,6 @@
-# Set up gems listed in the Gemfile.
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
+
$LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
+$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
diff --git a/spec/dummy/config/environments/development.rb b/spec/dummy/config/environments/development.rb
index 7e49c005..c95be39c 100644
--- a/spec/dummy/config/environments/development.rb
+++ b/spec/dummy/config/environments/development.rb
@@ -14,7 +14,7 @@
# Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching.
- if Rails.root.join('tmp', 'caching-dev.txt').exist?
+ if Rails.root.join("tmp/caching-dev.txt").exist?
config.action_controller.perform_caching = true
config.action_controller.enable_fragment_cache_logging = true
@@ -45,18 +45,13 @@
# Highlight code that triggered database queries in logs.
config.active_record.verbose_query_logs = true
- # Debug mode disables concatenation and preprocessing of assets.
- # This option may cause significant delays in view rendering with a large
- # number of complex assets.
- config.assets.debug = true
-
- # Suppress logger output for asset requests.
- config.assets.quiet = true
-
# Raises error for missing translations.
# config.action_view.raise_on_missing_translations = true
# Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem.
# config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+
+ # Don't report deprecations
+ config.active_support.report_deprecations = false
end
diff --git a/spec/dummy/config/environments/production.rb b/spec/dummy/config/environments/production.rb
index b7ad81ba..856f7400 100644
--- a/spec/dummy/config/environments/production.rb
+++ b/spec/dummy/config/environments/production.rb
@@ -48,10 +48,10 @@
# Use the lowest log level to ensure availability of diagnostic information
# when problems arise.
- config.log_level = :debug
+ # config.log_level = :debug
# Prepend all log lines with the following tags.
- config.log_tags = [ :request_id ]
+ config.log_tags = [:request_id]
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
@@ -74,7 +74,7 @@
config.active_support.deprecation = :notify
# Use default logging formatter so that PID and timestamp are not suppressed.
- config.log_formatter = ::Logger::Formatter.new
+ config.log_formatter = Logger::Formatter.new
# Use a different logger for distributed setups.
# require 'syslog/logger'
diff --git a/spec/dummy/config/environments/test.rb b/spec/dummy/config/environments/test.rb
index 4782029e..6200d6ad 100644
--- a/spec/dummy/config/environments/test.rb
+++ b/spec/dummy/config/environments/test.rb
@@ -1,49 +1,21 @@
-# The test environment is used exclusively to run your application's
-# test suite. You never need to work with it otherwise. Remember that
-# your test database is "scratch space" for the test suite and is wiped
-# and recreated between test runs. Don't rely on the data there!
-
Rails.application.configure do
- # Settings specified here will take precedence over those in config/application.rb.
-
- config.cache_classes = false
- config.active_record.legacy_connection_handling = false
-
- # Do not eager load code on boot. This avoids loading your whole application
- # just for the purpose of running a single test. If you are using a tool that
- # preloads Rails for running tests, you may have to set it to true.
+ config.cache_classes = true
config.eager_load = false
- # Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true
config.public_file_server.headers = {
'Cache-Control' => "public, max-age=#{1.hour.to_i}"
}
- # Show full error reports and disable caching.
- config.consider_all_requests_local = true
+ config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.cache_store = :null_store
- # Raise exceptions instead of rendering exception templates.
config.action_dispatch.show_exceptions = false
-
- # Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false
- # Store uploaded files on the local file system in a temporary directory.
config.active_storage.service = :test
-
config.action_mailer.perform_caching = false
-
- # Tell Action Mailer not to deliver emails to the real world.
- # The :test delivery method accumulates sent emails in the
- # ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
-
- # Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr
-
- # Raises error for missing translations.
- # config.action_view.raise_on_missing_translations = true
end
diff --git a/spec/dummy/config/initializers/backtrace_silencers.rb b/spec/dummy/config/initializers/backtrace_silencers.rb
index 59385cdf..d32d6840 100644
--- a/spec/dummy/config/initializers/backtrace_silencers.rb
+++ b/spec/dummy/config/initializers/backtrace_silencers.rb
@@ -1,7 +1 @@
-# Be sure to restart your server when you modify this file.
-
-# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
-# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
-
-# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
-# Rails.backtrace_cleaner.remove_silencers!
+Rails.backtrace_cleaner.remove_silencers!
diff --git a/spec/dummy/config/initializers/content_security_policy.rb b/spec/dummy/config/initializers/content_security_policy.rb
index 41c43016..468a412a 100644
--- a/spec/dummy/config/initializers/content_security_policy.rb
+++ b/spec/dummy/config/initializers/content_security_policy.rb
@@ -1,28 +1,12 @@
# Be sure to restart your server when you modify this file.
-# Define an application-wide content security policy
-# For further information see the following documentation
-# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
-
-# Rails.application.config.content_security_policy do |policy|
-# policy.default_src :self, :https
-# policy.font_src :self, :https, :data
-# policy.img_src :self, :https, :data
-# policy.object_src :none
-# policy.script_src :self, :https
-# policy.style_src :self, :https
-
-# # Specify URI for violation reports
-# # policy.report_uri "/csp-violation-report-endpoint"
-# end
-
-# If you are using UJS then enable automatic nonce generation
-# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
-
-# Set the nonce only to specific directives
-# Rails.application.config.content_security_policy_nonce_directives = %w(script-src)
-
-# Report CSP violations to a specified URI
-# For further information see the following documentation:
-# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
-# Rails.application.config.content_security_policy_report_only = true
+Rails.application.config.content_security_policy do |policy|
+ policy.default_src :self, :https
+ policy.font_src :self, :https, :data
+ policy.img_src :self, :https, :data
+ policy.object_src :none
+ policy.script_src :self, :https
+ policy.style_src :self, :https
+end
+
+Rails.application.config.content_security_policy_nonce_generator = ->(_request) { SecureRandom.base64(16) }
diff --git a/spec/dummy/config/initializers/filter_parameter_logging.rb b/spec/dummy/config/initializers/filter_parameter_logging.rb
index 4a994e1e..6afe4ed5 100644
--- a/spec/dummy/config/initializers/filter_parameter_logging.rb
+++ b/spec/dummy/config/initializers/filter_parameter_logging.rb
@@ -1,4 +1,6 @@
# Be sure to restart your server when you modify this file.
# Configure sensitive parameters which will be filtered from the log file.
-Rails.application.config.filter_parameters += [:password]
+Rails.application.config.filter_parameters = [
+ :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+]
diff --git a/spec/dummy/config/initializers/impression.rb b/spec/dummy/config/initializers/impression.rb
index 2c8d5d24..60874eb1 100644
--- a/spec/dummy/config/initializers/impression.rb
+++ b/spec/dummy/config/initializers/impression.rb
@@ -1,8 +1,5 @@
# Use this hook to configure impressionist parameters
-#Impressionist.setup do |config|
- # Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
- # config.orm = :active_record
-#end
-
-
-
+# Impressionist.setup do |config|
+# Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
+# config.orm = :active_record
+# end
diff --git a/spec/dummy/config/initializers/inflections.rb b/spec/dummy/config/initializers/inflections.rb
index ac033bf9..b0360793 100644
--- a/spec/dummy/config/initializers/inflections.rb
+++ b/spec/dummy/config/initializers/inflections.rb
@@ -1,16 +1,3 @@
-# Be sure to restart your server when you modify this file.
-
-# Add new inflection rules using the following format. Inflections
-# are locale specific, and you may define rules for as many different
-# locales as you wish. All of these examples are active by default:
-# ActiveSupport::Inflector.inflections(:en) do |inflect|
-# inflect.plural /^(ox)$/i, '\1en'
-# inflect.singular /^(ox)en/i, '\1'
-# inflect.irregular 'person', 'people'
-# inflect.uncountable %w( fish sheep )
-# end
-
-# These inflection rules are supported but not enabled by default:
-# ActiveSupport::Inflector.inflections(:en) do |inflect|
-# inflect.acronym 'RESTful'
-# end
+ActiveSupport::Inflector.inflections(:en) do |inflect|
+ inflect.uncountable ['fish', 'sheep']
+end
diff --git a/spec/dummy/config/initializers/mime_types.rb b/spec/dummy/config/initializers/mime_types.rb
index dc189968..ad56e2ae 100644
--- a/spec/dummy/config/initializers/mime_types.rb
+++ b/spec/dummy/config/initializers/mime_types.rb
@@ -1,4 +1,4 @@
-# Be sure to restart your server when you modify this file.
-
-# Add new mime types for use in respond_to blocks:
-# Mime::Type.register "text/richtext", :rtf
+Rails.application.config.mime_types = {
+ "pdf" => "application/pdf",
+ "zip" => "application/zip"
+}
diff --git a/spec/dummy/config/puma.rb b/spec/dummy/config/puma.rb
index 5ed44377..47414626 100644
--- a/spec/dummy/config/puma.rb
+++ b/spec/dummy/config/puma.rb
@@ -1,38 +1,9 @@
-# Puma can serve each request in a thread from an internal thread pool.
-# The `threads` method setting takes two numbers: a minimum and maximum.
-# Any libraries that use thread pools should be configured to match
-# the maximum value specified for Puma. Default is set to 5 threads for minimum
-# and maximum; this matches the default thread size of Active Record.
-#
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count
-# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
-#
-port ENV.fetch("PORT") { 3000 }
-
-# Specifies the `environment` that Puma will run in.
-#
+port ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }
-
-# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
-# Specifies the number of `workers` to boot in clustered mode.
-# Workers are forked web server processes. If using threads and workers together
-# the concurrency of the application would be max `threads` * `workers`.
-# Workers do not work on JRuby or Windows (both of which do not support
-# processes).
-#
-# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
-
-# Use the `preload_app!` method when specifying a `workers` number.
-# This directive tells Puma to first boot the application and load code
-# before forking the application. This takes advantage of Copy On Write
-# process behavior so workers use less memory.
-#
-# preload_app!
-
-# Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart
diff --git a/spec/dummy/db/migrate/20200720143817_create_impressions_table.rb b/spec/dummy/db/migrate/20200720143817_create_impressions_table.rb
deleted file mode 100644
index 1c09a382..00000000
--- a/spec/dummy/db/migrate/20200720143817_create_impressions_table.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-class CreateImpressionsTable < ActiveRecord::Migration[6.0]
- def self.up
- create_table :impressions, :force => true do |t|
- t.string :impressionable_type
- t.integer :impressionable_id
- t.integer :user_id
- t.string :controller_name
- t.string :action_name
- t.string :view_name
- t.string :request_hash
- t.string :ip_address
- t.string :session_hash
- t.text :message
- t.text :referrer
- t.text :params
- t.timestamps
- end
- add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false, :length => {:message => 255 }
- add_index :impressions, [:impressionable_type, :impressionable_id, :request_hash], :name => "poly_request_index", :unique => false
- add_index :impressions, [:impressionable_type, :impressionable_id, :ip_address], :name => "poly_ip_index", :unique => false
- add_index :impressions, [:impressionable_type, :impressionable_id, :session_hash], :name => "poly_session_index", :unique => false
- add_index :impressions, [:controller_name,:action_name,:request_hash], :name => "controlleraction_request_index", :unique => false
- add_index :impressions, [:controller_name,:action_name,:ip_address], :name => "controlleraction_ip_index", :unique => false
- add_index :impressions, [:controller_name,:action_name,:session_hash], :name => "controlleraction_session_index", :unique => false
- add_index :impressions, [:impressionable_type, :impressionable_id, :params], :name => "poly_params_request_index", :unique => false, :length => {:params => 255 }
- add_index :impressions, :user_id
- end
-
- def self.down
- drop_table :impressions
- end
-end
diff --git a/spec/dummy/db/migrate/20260209024613_create_impressions_table.rb b/spec/dummy/db/migrate/20260209024613_create_impressions_table.rb
new file mode 100644
index 00000000..b57b6120
--- /dev/null
+++ b/spec/dummy/db/migrate/20260209024613_create_impressions_table.rb
@@ -0,0 +1,32 @@
+class CreateImpressionsTable < ActiveRecord::Migration[7.1]
+ def self.up
+ create_table :impressions, force: true do |t|
+ t.string :impressionable_type
+ t.integer :impressionable_id
+ t.integer :user_id
+ t.string :controller_name
+ t.string :action_name
+ t.string :view_name
+ t.string :request_hash
+ t.string :ip_address
+ t.string :session_hash
+ t.text :message
+ t.text :referrer
+ t.text :params
+ t.timestamps
+ end
+ add_index :impressions, [ :impressionable_type, :message, :impressionable_id ], name: "impressionable_type_message_index", unique: false, length: { message: 255 }
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :request_hash ], name: "poly_request_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :ip_address ], name: "poly_ip_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :session_hash ], name: "poly_session_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name, :request_hash ], name: "controlleraction_request_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name, :ip_address ], name: "controlleraction_ip_index", unique: false
+ add_index :impressions, [ :controller_name, :action_name, :session_hash ], name: "controlleraction_session_index", unique: false
+ add_index :impressions, [ :impressionable_type, :impressionable_id, :params ], name: "poly_params_request_index", unique: false, length: { params: 255 }
+ add_index :impressions, :user_id
+ end
+
+ def self.down
+ drop_table :impressions
+ end
+end
diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb
index 86e84f7c..549638cf 100644
--- a/spec/dummy/db/schema.rb
+++ b/spec/dummy/db/schema.rb
@@ -2,47 +2,46 @@
# of editing this file, please use the migrations feature of Active Record to
# incrementally modify your database, and then regenerate this schema definition.
#
-# This file is the source Rails uses to define your schema when running `rails
-# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
+# This file is the source Rails uses to define your schema when running `bin/rails
+# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
# be faster and is potentially less error prone than running all of your
# migrations from scratch. Old migrations may fail to apply correctly if those
# migrations use external dependencies or application code.
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 2020_07_20_143817) do
-
+ActiveRecord::Schema[8.1].define(version: 2026_02_09_024613) do
create_table "articles", force: :cascade do |t|
- t.string "name"
t.datetime "created_at"
+ t.string "name"
t.datetime "updated_at"
end
create_table "friendly_id_slugs", force: :cascade do |t|
+ t.datetime "created_at"
t.string "slug", null: false
t.integer "sluggable_id", null: false
t.string "sluggable_type", limit: 40
- t.datetime "created_at"
t.index ["slug", "sluggable_type"], name: "index_friendly_id_slugs_on_slug_and_sluggable_type", unique: true
t.index ["sluggable_id"], name: "index_friendly_id_slugs_on_sluggable_id"
t.index ["sluggable_type"], name: "index_friendly_id_slugs_on_sluggable_type"
end
create_table "impressions", force: :cascade do |t|
- t.string "impressionable_type"
- t.integer "impressionable_id"
- t.integer "user_id"
- t.string "controller_name"
t.string "action_name"
- t.string "view_name"
- t.string "request_hash"
+ t.string "controller_name"
+ t.datetime "created_at", null: false
+ t.integer "impressionable_id"
+ t.string "impressionable_type"
t.string "ip_address"
- t.string "session_hash"
t.text "message"
- t.text "referrer"
t.text "params"
- t.datetime "created_at", precision: 6, null: false
- t.datetime "updated_at", precision: 6, null: false
+ t.text "referrer"
+ t.string "request_hash"
+ t.string "session_hash"
+ t.datetime "updated_at", null: false
+ t.integer "user_id"
+ t.string "view_name"
t.index ["controller_name", "action_name", "ip_address"], name: "controlleraction_ip_index"
t.index ["controller_name", "action_name", "request_hash"], name: "controlleraction_request_index"
t.index ["controller_name", "action_name", "session_hash"], name: "controlleraction_session_index"
@@ -55,23 +54,22 @@
end
create_table "posts", force: :cascade do |t|
- t.string "name"
t.datetime "created_at"
+ t.string "name"
t.datetime "updated_at"
end
create_table "profiles", force: :cascade do |t|
- t.string "username"
- t.string "slug"
t.datetime "created_at"
+ t.string "slug"
t.datetime "updated_at"
+ t.string "username"
end
create_table "widgets", force: :cascade do |t|
- t.string "name"
- t.integer "impressions_count", default: 0
t.datetime "created_at"
+ t.integer "impressions_count", default: 0
+ t.string "name"
t.datetime "updated_at"
end
-
end
diff --git a/spec/dummy/log/development.log b/spec/dummy/log/development.log
index a2f17daa..38b8fe78 100644
--- a/spec/dummy/log/development.log
+++ b/spec/dummy/log/development.log
@@ -127,3 +127,4 @@ Migrating to CreateFriendlyIdSlugs (20150207140310)
[1m[35m (0.0ms)[0m [1m[36mbegin transaction[0m
[1m[36mActiveRecord::InternalMetadata Create (0.3ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES (?, ?, ?, ?)[0m [["key", "schema_sha1"], ["value", "5ae040660cab75fdb1eb4d29b60ed71248910310"], ["created_at", "2020-04-25 22:37:24.504240"], ["updated_at", "2020-04-25 22:37:24.504240"]]
[1m[35m (0.7ms)[0m [1m[36mcommit transaction[0m
+Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`.
diff --git a/spec/rails_generators/rails_generators_spec.rb b/spec/rails_generators/rails_generators_spec.rb
index 45bd238f..39e1e18e 100644
--- a/spec/rails_generators/rails_generators_spec.rb
+++ b/spec/rails_generators/rails_generators_spec.rb
@@ -5,8 +5,8 @@
# started fixing @nbit001
describe Impressionist, :migration do
fixtures :articles, :impressions, :posts, :profiles
- it "deletes existing migration and generate the migration file" do
- pending
+
+ it "deletes existing migration and generate the migration file", skip: "FIXME" do
migrations_dir = Rails.root.join('db/migrate')
impressions_migration = Dir.entries(migrations_dir).grep(/impressions/)[0]
File.delete("#{migrations_dir}/#{impressions_migration}") if impressions_migration.present?
@@ -15,8 +15,7 @@
Dir.entries(migrations_dir).include?(migration_name).should be_truthy
end
- it "runs the migration created in the previous spec" do
- pending
+ it "runs the migration created in the previous spec", skip: "FIXME" do
migrate_output = systemu("rake db:migrate RAILS_ENV=test")
migrate_output[1].include?("CreateImpressionsTable: migrated").should be_truthy
end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index 2318b794..f2cda56a 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -1,11 +1,6 @@
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
-
require 'rails/all'
require 'rspec/rails'
-
require File.expand_path('./test_app/config/environment', __dir__)
-
-RSpec.configure do |config|
-end
diff --git a/spec/rails_toggle_spec.rb b/spec/rails_toggle_spec.rb
index d2c12932..c8c777e9 100644
--- a/spec/rails_toggle_spec.rb
+++ b/spec/rails_toggle_spec.rb
@@ -7,13 +7,13 @@
let(:toggle) { described_class.new }
context 'when using rails < 4' do
- it 'will be included' do
+ it 'is included' do
stub_const('::Rails::VERSION::MAJOR', 3)
expect(toggle).to be_should_include
end
- it 'will not be included when strong parameters is defined' do
+ it 'does not be included when strong parameters is defined' do
stub_const('::Rails::VERSION::MAJOR', 3)
stub_const('StrongParameters', Module.new)
@@ -22,7 +22,7 @@
end
context 'when using rails >= 4' do
- it 'will not be included' do
+ it 'does not be included' do
stub_const('::Rails::VERSION::MAJOR', 4)
expect(toggle).not_to be_should_include
diff --git a/spec/setup_association_spec.rb b/spec/setup_association_spec.rb
index 908c8105..b896a97f 100644
--- a/spec/setup_association_spec.rb
+++ b/spec/setup_association_spec.rb
@@ -8,14 +8,14 @@
let(:mock) { double }
let(:setup_association) { described_class.new(mock) }
- it 'will include when togglable' do
+ it 'includes when togglable' do
allow(mock).to receive(:attr_accessible).and_return(true)
allow(setup_association).to receive(:toggle).and_return(true)
expect(setup_association).to be_include_attr_acc
end
- it 'will not include if it is not togglable' do
+ it 'does not include if it is not togglable' do
allow(setup_association).to receive(:toggle).and_return(false)
expect(setup_association).not_to be_include_attr_acc
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 8eefba3e..685ef802 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,10 +1,13 @@
require 'rubygems'
require 'bundler/setup'
-# Coverage
-require 'simplecov'
-SimpleCov.start do
- add_filter '/spec/'
+if ENV['COVERAGE']
+ require 'simplecov'
+ require 'simplecov_json_formatter'
+ SimpleCov.start do
+ formatter SimpleCov::Formatter::JSONFormatter
+ add_filter '/spec/'
+ end
end
ENV['RAILS_ENV'] ||= 'test'
@@ -23,7 +26,7 @@
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
- config.fixture_path = "spec/fixtures"
+ config.fixture_paths = ["spec/fixtures"]
config.infer_spec_type_from_file_location!
config.mock_with :rspec
@@ -35,9 +38,4 @@
# self explanatory
# runs everything
config.run_all_when_everything_filtered = true
-
- # make the rails logger usable in the tests as logger.xxx "..."
- def logger
- Rails.logger
- end
end