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)  (0.0ms) begin transaction ActiveRecord::InternalMetadata Create (0.3ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["key", "schema_sha1"], ["value", "5ae040660cab75fdb1eb4d29b60ed71248910310"], ["created_at", "2020-04-25 22:37:24.504240"], ["updated_at", "2020-04-25 22:37:24.504240"]]  (0.7ms) commit transaction +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