Fix CI builds (#286)
* update test app gems and fix more deprecation errors * replace minitest with rspec for consistency. cleanup Rakefile
This commit is contained in:
parent
a8fefb0b84
commit
ef7bec89dc
|
@ -9,5 +9,7 @@
|
||||||
/test_app/vendor
|
/test_app/vendor
|
||||||
Gemfile.lock
|
Gemfile.lock
|
||||||
gemfiles/*.lock
|
gemfiles/*.lock
|
||||||
|
.DS_Store
|
||||||
*.swo
|
*.swo
|
||||||
*.swp
|
.vscode/
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
AllCops:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/db/**/*.rb'
|
||||||
|
|
||||||
|
inherit_from: .rubocop_todo.yml
|
||||||
|
|
||||||
|
require:
|
||||||
|
- rubocop-rspec
|
||||||
|
- rubocop-rails
|
||||||
|
|
||||||
|
Layout/SpaceAroundMethodCallOperator:
|
||||||
|
Enabled: true
|
||||||
|
Lint/RaiseException:
|
||||||
|
Enabled: True
|
||||||
|
Lint/StructNewOverride:
|
||||||
|
Enabled: True
|
||||||
|
Style/ExponentialNotation:
|
||||||
|
Enabled: True
|
||||||
|
Style/HashEachMethods:
|
||||||
|
Enabled: True
|
||||||
|
Style/HashTransformKeys:
|
||||||
|
Enabled: True
|
||||||
|
Style/HashTransformValues:
|
||||||
|
Enabled: True
|
|
@ -0,0 +1,748 @@
|
||||||
|
# This configuration was generated by
|
||||||
|
# `rubocop --auto-gen-config`
|
||||||
|
# on 2020-04-25 16:13:40 -0400 using RuboCop version 0.82.0.
|
||||||
|
# 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: 7
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: TreatCommentsAsGroupSeparators, Include.
|
||||||
|
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
|
||||||
|
Bundler/OrderedGems:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/Gemfile'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Configuration parameters: Include.
|
||||||
|
# Include: **/*.gemspec
|
||||||
|
Gemspec/RubyVersionGlobalsUsage:
|
||||||
|
Exclude:
|
||||||
|
- 'impressionist.gemspec'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, IndentationWidth.
|
||||||
|
# SupportedStyles: outdent, indent
|
||||||
|
Layout/AccessModifierIndentation:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/engine.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyleAlignWith.
|
||||||
|
# SupportedStylesAlignWith: either, start_of_block, start_of_line
|
||||||
|
Layout/BlockAlignment:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/engine.rb'
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/ClosingParenthesisIndentation:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/CommentIndentation:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'tests/test_app/config/initializers/impression.rb'
|
||||||
|
|
||||||
|
# Offense count: 7
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/EmptyLineAfterGuardClause:
|
||||||
|
Exclude:
|
||||||
|
- 'app/models/impressionist/bots.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowAdjacentOneLineDefs, NumberOfEmptyLines.
|
||||||
|
Layout/EmptyLineBetweenDefs:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/counter_cache.rb'
|
||||||
|
|
||||||
|
# Offense count: 8
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
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'
|
||||||
|
- 'tests/test_app/Gemfile'
|
||||||
|
- 'tests/test_app/lib/tasks/cucumber.rake'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
# SupportedStyles: around, only_before
|
||||||
|
Layout/EmptyLinesAroundAccessModifier:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/setup_association.rb'
|
||||||
|
|
||||||
|
# Offense count: 7
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
- 'tests/test_app/app/controllers/dummy_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 7
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/EmptyLinesAroundMethodBody:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'lib/impressionist/counter_cache.rb'
|
||||||
|
- 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
|
||||||
|
- 'tests/test_app/app/controllers/posts_controller.rb'
|
||||||
|
- 'upgrade_migrations/version_0_3_0.rb'
|
||||||
|
|
||||||
|
# Offense count: 19
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 7
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
|
||||||
|
Layout/ExtraSpacing:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/counter_cache.rb'
|
||||||
|
- 'tests/test_app/config.ru'
|
||||||
|
- 'tests/test_app/config/environments/pg_test.rb'
|
||||||
|
- 'tests/test_app/config/environments/test.rb'
|
||||||
|
- 'tests/test_app/script/rails'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 18
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 8
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: IndentationWidth, EnforcedStyle.
|
||||||
|
# SupportedStyles: spaces, tabs
|
||||||
|
Layout/IndentationStyle:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 25
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: Width, IgnoredPatterns.
|
||||||
|
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'
|
||||||
|
- 'tests/test_app/lib/tasks/cucumber.rake'
|
||||||
|
|
||||||
|
# Offense count: 4
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment.
|
||||||
|
Layout/LeadingCommentSpace:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'lib/impressionist/bots.rb'
|
||||||
|
- 'tests/test_app/config/initializers/impression.rb'
|
||||||
|
|
||||||
|
# Offense count: 6
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 22
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Layout/SpaceAfterComma:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'app/models/impressionist/bots.rb'
|
||||||
|
- 'lib/impressionist/bots.rb'
|
||||||
|
- 'tests/test_app/app/controllers/articles_controller.rb'
|
||||||
|
- 'upgrade_migrations/version_0_3_0.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyleInsidePipes.
|
||||||
|
# SupportedStylesInsidePipes: space, no_space
|
||||||
|
Layout/SpaceAroundBlockParameters:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 13
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 8
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
|
||||||
|
# SupportedStylesForExponentOperator: 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'
|
||||||
|
- 'tests/test_app/app/controllers/widgets_controller.rb'
|
||||||
|
- 'tests/test_app/config/environments/pg_test.rb'
|
||||||
|
- 'tests/test_app/config/environments/test.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
# SupportedStylesForEmptyBraces: space, no_space
|
||||||
|
Layout/SpaceBeforeBlockBraces:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 5
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
|
||||||
|
# SupportedStyles: space, no_space
|
||||||
|
# SupportedStylesForEmptyBraces: space, no_space
|
||||||
|
Layout/SpaceInsideBlockBraces:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'tests/test_app/lib/tasks/cucumber.rake'
|
||||||
|
|
||||||
|
# Offense count: 10
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
- 'tests/test_app/lib/tasks/cucumber.rake'
|
||||||
|
|
||||||
|
# Offense count: 4
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
# SupportedStyles: final_newline, final_blank_line
|
||||||
|
Layout/TrailingEmptyLines:
|
||||||
|
Exclude:
|
||||||
|
- 'Gemfile'
|
||||||
|
- 'lib/impressionist/setup_association.rb'
|
||||||
|
- 'tests/test_app/config/initializers/impression.rb'
|
||||||
|
- 'upgrade_migrations/version_1_5_2.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowInHeredoc.
|
||||||
|
Layout/TrailingWhitespace:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/setup_association.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Lint/DeprecatedClassMethods:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/config/boot.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
Lint/DuplicateMethods:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/setup_association.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Lint/RedundantStringCoercion:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Lint/ScriptPermission:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/Rakefile'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Lint/SendWithMixinArgument:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/models/active_record/impressionist/impressionable.rb'
|
||||||
|
- 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
|
||||||
|
Lint/UnusedBlockArgument:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/engine.rb'
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Configuration parameters: IgnoredMethods.
|
||||||
|
Metrics/AbcSize:
|
||||||
|
Max: 23
|
||||||
|
|
||||||
|
# Offense count: 10
|
||||||
|
# Configuration parameters: CountComments, ExcludedMethods.
|
||||||
|
# ExcludedMethods: refine
|
||||||
|
Metrics/BlockLength:
|
||||||
|
Max: 336
|
||||||
|
|
||||||
|
# Offense count: 3
|
||||||
|
# Configuration parameters: CountComments, ExcludedMethods.
|
||||||
|
Metrics/MethodLength:
|
||||||
|
Max: 15
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Configuration parameters: CountComments.
|
||||||
|
Metrics/ModuleLength:
|
||||||
|
Max: 1462
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
|
||||||
|
# NamePrefix: is_, has_, have_
|
||||||
|
# ForbiddenPrefixes: is_, has_, have_
|
||||||
|
# AllowedMethods: is_a?
|
||||||
|
# MethodDefinitionMacros: define_method, define_singleton_method
|
||||||
|
Naming/PredicateName:
|
||||||
|
Exclude:
|
||||||
|
- 'spec/**/*'
|
||||||
|
- 'lib/impressionist/is_impressionable.rb'
|
||||||
|
- 'lib/impressionist/models/mongo_mapper/impressionist/impressionable.rb'
|
||||||
|
|
||||||
|
# Offense count: 6
|
||||||
|
# Configuration parameters: Prefixes.
|
||||||
|
# Prefixes: when, with, without
|
||||||
|
RSpec/ContextWording:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/spec/controllers/impressionist_uniqueness_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/widgets_controller_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 31
|
||||||
|
# Configuration parameters: Max.
|
||||||
|
RSpec/ExampleLength:
|
||||||
|
Exclude:
|
||||||
|
- 'spec/setup_association_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/articles_controller_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/impressionist_uniqueness_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/posts_controller_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/widgets_controller_spec.rb'
|
||||||
|
- 'tests/test_app/spec/rails_generators/rails_generators_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 5
|
||||||
|
# Configuration parameters: CustomTransform, IgnoreMethods.
|
||||||
|
RSpec/FilePath:
|
||||||
|
Exclude:
|
||||||
|
- 'spec/models/bots_spec.rb'
|
||||||
|
- 'spec/rails_toggle_spec.rb'
|
||||||
|
- 'spec/setup_association_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/impressionist_uniqueness_spec.rb'
|
||||||
|
- 'tests/test_app/spec/models/bots_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 61
|
||||||
|
# Configuration parameters: AssignmentOnly.
|
||||||
|
RSpec/InstanceVariable:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/spec/controllers/articles_controller_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/impressionist_uniqueness_spec.rb'
|
||||||
|
- 'tests/test_app/spec/controllers/widgets_controller_spec.rb'
|
||||||
|
- 'tests/test_app/spec/models/model_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 5
|
||||||
|
# Configuration parameters: .
|
||||||
|
# SupportedStyles: have_received, receive
|
||||||
|
RSpec/MessageSpies:
|
||||||
|
EnforcedStyle: receive
|
||||||
|
|
||||||
|
# Offense count: 28
|
||||||
|
# Configuration parameters: AggregateFailuresByDefault.
|
||||||
|
RSpec/MultipleExpectations:
|
||||||
|
Max: 8
|
||||||
|
|
||||||
|
# Offense count: 4
|
||||||
|
RSpec/NestedGroups:
|
||||||
|
Max: 4
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
RSpec/RepeatedExample:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/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: 6
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Rails/ApplicationRecord:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/models/active_record/impression.rb'
|
||||||
|
- 'tests/test_app/app/models/article.rb'
|
||||||
|
- 'tests/test_app/app/models/dummy.rb'
|
||||||
|
- 'tests/test_app/app/models/post.rb'
|
||||||
|
- 'tests/test_app/app/models/profile.rb'
|
||||||
|
- 'tests/test_app/app/models/widget.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
# SupportedStyles: slashes, arguments
|
||||||
|
Rails/FilePath:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/lib/tasks/cucumber.rake'
|
||||||
|
- 'tests/test_app/spec/rails_generators/rails_generators_spec.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank.
|
||||||
|
Rails/Present:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Configuration parameters: Include.
|
||||||
|
# Include: **/Rakefile, **/*.rake
|
||||||
|
Rails/RakeEnvironment:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/capistrano/tasks/**/*.rake'
|
||||||
|
- 'Rakefile'
|
||||||
|
- 'tests/test_app/lib/tasks/cucumber.rake'
|
||||||
|
|
||||||
|
# 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
|
||||||
|
Rails/SkipsModelValidations:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/update_counters.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
# SupportedStyles: strict, flexible
|
||||||
|
Rails/TimeZone:
|
||||||
|
Exclude:
|
||||||
|
- 'app/models/impressionist/impressionable.rb'
|
||||||
|
- 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/BlockComments:
|
||||||
|
Exclude:
|
||||||
|
- 'spec/spec_helper.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, IgnoredMethods, 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
|
||||||
|
Style/BlockDelimiters:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/counter_cache.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
Style/ClassVars:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
Style/CommentedKeyword:
|
||||||
|
Exclude:
|
||||||
|
- 'app/models/impressionist/impressionable.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
|
||||||
|
# SupportedStyles: assign_to_condition, assign_inside_condition
|
||||||
|
Style/ConditionalAssignment:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 36
|
||||||
|
Style/Documentation:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/EachWithObject:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 8
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
# SupportedStyles: compact, expanded
|
||||||
|
Style/EmptyMethod:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/app/controllers/dummy_controller.rb'
|
||||||
|
- 'tests/test_app/app/controllers/posts_controller.rb'
|
||||||
|
- 'tests/test_app/app/controllers/profiles_controller.rb'
|
||||||
|
- 'tests/test_app/app/controllers/widgets_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 7
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/ExpandPathArguments:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/generators/impressionist_generator.rb'
|
||||||
|
- 'tests/test_app/Rakefile'
|
||||||
|
- 'tests/test_app/config/application.rb'
|
||||||
|
- 'tests/test_app/config/boot.rb'
|
||||||
|
- 'tests/test_app/config/environment.rb'
|
||||||
|
- 'tests/test_app/script/rails'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
# SupportedStyles: format, sprintf, percent
|
||||||
|
Style/FormatString:
|
||||||
|
Exclude:
|
||||||
|
- '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: 76
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle.
|
||||||
|
# SupportedStyles: always, always_true, never
|
||||||
|
Style/FrozenStringLiteralComment:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 6
|
||||||
|
# Configuration parameters: MinBodyLength.
|
||||||
|
Style/GuardClause:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'tests/test_app/app/controllers/articles_controller.rb'
|
||||||
|
- 'tests/test_app/app/controllers/posts_controller.rb'
|
||||||
|
- 'tests/test_app/app/controllers/profiles_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 134
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
|
||||||
|
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
|
||||||
|
Style/HashSyntax:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 4
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/IfUnlessModifier:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'app/models/impressionist/impressionable.rb'
|
||||||
|
- 'impressionist.gemspec'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
Style/MultilineTernaryOperator:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/models/mongoid/impressionist/impressionable.rb'
|
||||||
|
|
||||||
|
# Offense count: 5
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/Not:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/rails_toggle.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: Strict.
|
||||||
|
Style/NumericLiterals:
|
||||||
|
MinDigits: 6
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: PreferredDelimiters.
|
||||||
|
Style/PercentLiteralDelimiters:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/config/application.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RedundantBegin:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/counter_cache.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AllowMultipleReturnValues.
|
||||||
|
Style/RedundantReturn:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 4
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RedundantSelf:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
- 'lib/impressionist/counter_cache.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/RescueModifier:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
Style/StderrPuts:
|
||||||
|
Exclude:
|
||||||
|
- 'tests/test_app/lib/tasks/cucumber.rake'
|
||||||
|
|
||||||
|
# Offense count: 1647
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
|
||||||
|
# SupportedStyles: single_quotes, double_quotes
|
||||||
|
Style/StringLiterals:
|
||||||
|
Enabled: false
|
||||||
|
|
||||||
|
# Offense count: 43
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# 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
|
||||||
|
Style/SymbolProc:
|
||||||
|
Exclude:
|
||||||
|
- 'app/controllers/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 1
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, AllowSafeAssignment.
|
||||||
|
# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
|
||||||
|
Style/TernaryParentheses:
|
||||||
|
Exclude:
|
||||||
|
- 'lib/impressionist/controllers/mongoid/impressionist_controller.rb'
|
||||||
|
|
||||||
|
# Offense count: 2
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: EnforcedStyle, MinSize, WordRegex.
|
||||||
|
# SupportedStyles: percent, brackets
|
||||||
|
Style/WordArray:
|
||||||
|
Exclude:
|
||||||
|
- 'app/models/impressionist/bots.rb'
|
||||||
|
- 'lib/impressionist/bots.rb'
|
||||||
|
|
||||||
|
# Offense count: 433
|
||||||
|
# Cop supports --auto-correct.
|
||||||
|
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
||||||
|
# URISchemes: http, https
|
||||||
|
Layout/LineLength:
|
||||||
|
Max: 197
|
28
.travis.yml
28
.travis.yml
|
@ -1,29 +1,29 @@
|
||||||
language: ruby
|
language: ruby
|
||||||
before_install:
|
env:
|
||||||
- gem install bundler
|
- RUBYOPT='-W:no-deprecated -W:no-experimental'
|
||||||
before_script:
|
before_script:
|
||||||
|
- bundle
|
||||||
- cd tests/test_app
|
- cd tests/test_app
|
||||||
|
- bundle --gemfile=./Gemfile
|
||||||
- bundle exec rails g impressionist -f
|
- bundle exec rails g impressionist -f
|
||||||
- bundle exec rake db:create db:migrate RAILS_ENV=test
|
- bundle exec rake db:create db:migrate RAILS_ENV=test
|
||||||
- cd ..
|
- cd ../..
|
||||||
script:
|
script:
|
||||||
- bundle exec rake
|
- rubocop
|
||||||
|
- bundle exec rspec
|
||||||
|
- cd tests/test_app
|
||||||
|
- export BUNDLE_GEMFILE=./Gemfile
|
||||||
|
- bundle
|
||||||
|
- bundle exec rspec
|
||||||
rvm:
|
rvm:
|
||||||
- 1.9.3
|
- 2.7.0
|
||||||
- 2.0.0
|
|
||||||
- 2.1.0
|
|
||||||
- 2.2.0
|
|
||||||
- 2.3.0
|
|
||||||
- jruby-head
|
- jruby-head
|
||||||
- rbx
|
- rbx-4
|
||||||
- ruby-head
|
- ruby-head
|
||||||
gemfile:
|
|
||||||
- gemfiles/rails32.gemfile
|
|
||||||
- gemfiles/rails40.gemfile
|
|
||||||
matrix:
|
matrix:
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- rvm: jruby-head
|
- rvm: jruby-head
|
||||||
- rvm: rbx
|
- rvm: rbx-4
|
||||||
- rvm: ruby-head
|
- rvm: ruby-head
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
notifications:
|
notifications:
|
||||||
|
|
11
Gemfile
11
Gemfile
|
@ -9,16 +9,11 @@ platforms :jruby do
|
||||||
gem 'jruby-openssl'
|
gem 'jruby-openssl'
|
||||||
end
|
end
|
||||||
|
|
||||||
platforms :ruby, :mswin, :mingw do
|
|
||||||
gem 'sqlite3'
|
|
||||||
end
|
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'capybara', '>= 2.0.3'
|
|
||||||
gem 'minitest'
|
gem 'minitest'
|
||||||
gem 'minitest-rails'
|
gem 'rspec', "~> 3.0"
|
||||||
gem 'rails', '>= 3.2.15'
|
gem 'rubocop-rails', require: false
|
||||||
gem 'rspec-rails'
|
gem 'rubocop-rspec', require: false
|
||||||
gem 'simplecov'
|
gem 'simplecov'
|
||||||
gem 'systemu'
|
gem 'systemu'
|
||||||
end
|
end
|
||||||
|
|
26
Rakefile
26
Rakefile
|
@ -1,18 +1,15 @@
|
||||||
require 'bundler/setup'
|
require 'bundler/setup'
|
||||||
|
|
||||||
|
require 'rspec'
|
||||||
require 'rspec/core/rake_task'
|
require 'rspec/core/rake_task'
|
||||||
require 'rake/testtask'
|
require 'rake/testtask'
|
||||||
|
|
||||||
|
|
||||||
|
RSpec::Core::RakeTask.new(:spec)
|
||||||
|
task default: :spec
|
||||||
|
|
||||||
Bundler::GemHelper.install_tasks
|
Bundler::GemHelper.install_tasks
|
||||||
|
|
||||||
# Impressionist will use MiniTest instead of RSpec
|
|
||||||
RSpec::Core::RakeTask.new do |task|
|
|
||||||
task.rspec_opts = "-I ./tests/test_app/spec"
|
|
||||||
task.pattern = "./tests/test_app/spec/**/*_spec.rb"
|
|
||||||
end
|
|
||||||
|
|
||||||
task :test_app => :spec
|
|
||||||
task :default => [:test, :test_app]
|
|
||||||
|
|
||||||
namespace :impressionist do
|
namespace :impressionist do
|
||||||
require File.dirname(__FILE__) + "/lib/impressionist/bots"
|
require File.dirname(__FILE__) + "/lib/impressionist/bots"
|
||||||
|
|
||||||
|
@ -20,15 +17,4 @@ namespace :impressionist do
|
||||||
task :bots do
|
task :bots do
|
||||||
p Impressionist::Bots.consume
|
p Impressionist::Bots.consume
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
# setup :test task to minitest
|
|
||||||
# Rake libs default is lib
|
|
||||||
# libs << path to load test_helper, etc..
|
|
||||||
Rake::TestTask.new do |t|
|
|
||||||
t.libs << "tests/spec"
|
|
||||||
t.pattern = "tests/spec/**/*_spec.rb"
|
|
||||||
t.test_files = FileList["tests/spec/**/*_spec.rb"]
|
|
||||||
t.verbose = true
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
require 'digest/sha2'
|
require 'digest/sha2'
|
||||||
|
|
||||||
|
|
||||||
module ImpressionistController
|
module ImpressionistController
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
def impressionist(opts={})
|
def impressionist(opts={})
|
||||||
|
@ -51,7 +52,14 @@ module ImpressionistController
|
||||||
|
|
||||||
# creates a statment hash that contains default values for creating an impression via an AR relation.
|
# creates a statment hash that contains default values for creating an impression via an AR relation.
|
||||||
def associative_create_statement(query_params={})
|
def associative_create_statement(query_params={})
|
||||||
|
# support older versions of rails:
|
||||||
|
# see https://github.com/rails/rails/pull/34039
|
||||||
|
if Rails::VERSION::MAJOR < 6
|
||||||
|
filter = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
|
||||||
|
else
|
||||||
filter = ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters)
|
filter = ActiveSupport::ParameterFilter.new(Rails.application.config.filter_parameters)
|
||||||
|
end
|
||||||
|
|
||||||
query_params.reverse_merge!(
|
query_params.reverse_merge!(
|
||||||
:controller_name => controller_name,
|
:controller_name => controller_name,
|
||||||
:action_name => action_name,
|
:action_name => action_name,
|
||||||
|
@ -133,14 +141,25 @@ module ImpressionistController
|
||||||
end
|
end
|
||||||
|
|
||||||
def session_hash
|
def session_hash
|
||||||
|
|
||||||
# # careful: request.session_options[:id] encoding in rspec test was ASCII-8BIT
|
# # careful: request.session_options[:id] encoding in rspec test was ASCII-8BIT
|
||||||
# # that broke the database query for uniqueness. not sure if this is a testing only issue.
|
# # that broke the database query for uniqueness. not sure if this is a testing only issue.
|
||||||
# str = request.session_options[:id]
|
# str = request.session_options[:id]
|
||||||
# logger.debug "Encoding: #{str.encoding.inspect}"
|
# logger.debug "Encoding: #{str.encoding.inspect}"
|
||||||
# # request.session_options[:id].encode("ISO-8859-1")
|
# # request.session_options[:id].encode("ISO-8859-1")
|
||||||
|
if Rails::VERSION::MAJOR >= 4
|
||||||
|
session["init"] = true
|
||||||
|
id = session.id.to_s
|
||||||
|
else
|
||||||
id = request.session_options[:id]
|
id = request.session_options[:id]
|
||||||
# rack 2.0.8 releases new version of session id, id.to_s will raise error!
|
end
|
||||||
|
|
||||||
|
unless id.is_a? String
|
||||||
id = id.cookie_value if Rack::Session::SessionId.const_defined?(:ID_VERSION) && Rack::Session::SessionId::ID_VERSION == 2
|
id = id.cookie_value if Rack::Session::SessionId.const_defined?(:ID_VERSION) && Rack::Session::SessionId::ID_VERSION == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
# id = cookies.session.id
|
||||||
|
# rack 2.0.8 releases new version of session id, id.to_s will raise error!
|
||||||
id
|
id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
source 'https://rubygems.org'
|
|
||||||
|
|
||||||
gem 'rake', '>= 0.9', '< 11.0'
|
|
||||||
gem 'rdoc', '>= 2.4.2'
|
|
||||||
|
|
||||||
platforms :jruby do
|
|
||||||
gem 'activerecord-jdbcsqlite3-adapter'
|
|
||||||
gem 'jdbc-sqlite3'
|
|
||||||
gem 'jruby-openssl'
|
|
||||||
end
|
|
||||||
|
|
||||||
platforms :ruby, :mswin, :mingw do
|
|
||||||
gem 'sqlite3'
|
|
||||||
end
|
|
||||||
|
|
||||||
group :test do
|
|
||||||
gem 'public_suffix', '< 1.5.0'
|
|
||||||
gem 'capybara', '>= 2.0.3'
|
|
||||||
gem 'minitest'
|
|
||||||
gem 'minitest-rails'
|
|
||||||
gem 'rails', '~> 3.2.15'
|
|
||||||
gem 'rspec-rails', '~> 2.14.0'
|
|
||||||
gem 'simplecov'
|
|
||||||
gem 'systemu'
|
|
||||||
gem 'friendly_id', '~> 4.0.9'
|
|
||||||
|
|
||||||
# test/unit has been removed by default in Ruby 2.2.x+
|
|
||||||
gem 'test-unit'
|
|
||||||
end
|
|
||||||
|
|
||||||
gemspec :path => '../'
|
|
|
@ -1,31 +0,0 @@
|
||||||
source 'https://rubygems.org'
|
|
||||||
|
|
||||||
gem 'rake', '>= 0.9', '< 11.0'
|
|
||||||
gem 'rdoc', '>= 2.4.2'
|
|
||||||
|
|
||||||
platforms :jruby do
|
|
||||||
gem 'activerecord-jdbcsqlite3-adapter'
|
|
||||||
gem 'jdbc-sqlite3'
|
|
||||||
gem 'jruby-openssl'
|
|
||||||
end
|
|
||||||
|
|
||||||
platforms :ruby, :mswin, :mingw do
|
|
||||||
gem 'sqlite3'
|
|
||||||
end
|
|
||||||
|
|
||||||
group :test do
|
|
||||||
gem 'public_suffix', '< 1.5.0'
|
|
||||||
gem 'capybara', '>= 2.0.3'
|
|
||||||
gem 'minitest'
|
|
||||||
gem 'minitest-rails'
|
|
||||||
gem 'rails', '~> 4.0.1'
|
|
||||||
gem 'rspec-rails', '~> 2.14.0'
|
|
||||||
gem 'simplecov'
|
|
||||||
gem 'systemu'
|
|
||||||
gem 'friendly_id', '~> 5.1.0'
|
|
||||||
|
|
||||||
# test/unit has been removed by default in Ruby 2.2.x+
|
|
||||||
gem 'test-unit'
|
|
||||||
end
|
|
||||||
|
|
||||||
gemspec :path => '../'
|
|
|
@ -1,5 +1,6 @@
|
||||||
# -*- encoding: utf-8 -*-
|
# frozen_string_literal: true
|
||||||
$:.push File.expand_path('../lib', __FILE__)
|
|
||||||
|
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
||||||
require 'impressionist/version'
|
require 'impressionist/version'
|
||||||
|
|
||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
|
@ -16,8 +17,12 @@ Gem::Specification.new do |s|
|
||||||
s.files = `git ls-files`.split("\n")
|
s.files = `git ls-files`.split("\n")
|
||||||
s.test_files = `git ls-files -- tests/**/*`.split("\n")
|
s.test_files = `git ls-files -- tests/**/*`.split("\n")
|
||||||
s.require_path = 'lib'
|
s.require_path = 'lib'
|
||||||
s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if s.respond_to? :required_rubygems_version=
|
if s.respond_to? :required_rubygems_version=
|
||||||
|
s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6')
|
||||||
|
end
|
||||||
|
|
||||||
s.add_dependency 'nokogiri', RUBY_VERSION < '2.1.0' ? '~> 1.6.0' : '~> 1'
|
s.add_dependency 'nokogiri', RUBY_VERSION < '2.1.0' ? '~> 1.6.0' : '~> 1'
|
||||||
s.add_development_dependency 'bundler', '~> 1.0'
|
s.add_dependency 'rails', '>= 3.2.15'
|
||||||
|
s.add_development_dependency 'bundler', '~> 2.0'
|
||||||
|
s.add_development_dependency 'sqlite3', '~> 1.4'
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,7 +15,7 @@ module ActiveRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_migration_file
|
def create_migration_file
|
||||||
migration_template 'create_impressions_table.rb', 'db/migrate/create_impressions_table.rb'
|
migration_template 'create_impressions_table.rb.erb', 'db/migrate/create_impressions_table.rb'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,7 @@ module Impressionist
|
||||||
source_root File.expand_path('../templates', __FILE__)
|
source_root File.expand_path('../templates', __FILE__)
|
||||||
|
|
||||||
def copy_config_file
|
def copy_config_file
|
||||||
template 'impression.rb', 'config/initializers/impression.rb'
|
template 'impression.rb.erb', 'config/initializers/impression.rb'
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
require './app/models/impressionist/bots'
|
||||||
|
|
||||||
|
describe Impressionist::Bots do
|
||||||
|
describe "bot detection" do
|
||||||
|
it "matches wild card" do
|
||||||
|
expect(described_class).to be_bot("google.com bot")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "matches a bot list" do
|
||||||
|
expect(described_class).to be_bot("A-Online Search")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "skips blank user agents" do
|
||||||
|
expect(described_class).not_to be_bot
|
||||||
|
expect(described_class).not_to be_bot("")
|
||||||
|
expect(described_class).not_to be_bot(nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "skips safe matches" do
|
||||||
|
expect(described_class).not_to be_bot('127.0.0.1')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,11 @@
|
||||||
|
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
|
|
@ -0,0 +1,31 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'impressionist/rails_toggle'
|
||||||
|
|
||||||
|
describe Impressionist::RailsToggle do
|
||||||
|
let(:toggle) { described_class.new }
|
||||||
|
|
||||||
|
context 'when using rails < 4' do
|
||||||
|
it 'will be 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
|
||||||
|
stub_const('::Rails::VERSION::MAJOR', 3)
|
||||||
|
stub_const('StrongParameters', Module.new)
|
||||||
|
|
||||||
|
expect(toggle).not_to be_should_include
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when using rails >= 4' do
|
||||||
|
it 'will not be included' do
|
||||||
|
stub_const('::Rails::VERSION::MAJOR', 4)
|
||||||
|
|
||||||
|
expect(toggle).not_to be_should_include
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,48 @@
|
||||||
|
# frozen_string_literal: false
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'impressionist/setup_association'
|
||||||
|
require 'impressionist/rails_toggle'
|
||||||
|
|
||||||
|
describe Impressionist::SetupAssociation do
|
||||||
|
let(:mock) { double }
|
||||||
|
let(:setup_association) { described_class.new(mock) }
|
||||||
|
|
||||||
|
it 'will include when togglable' do
|
||||||
|
expect(mock).to receive(:attr_accessible).with(any_args).and_return(true)
|
||||||
|
expect(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
|
||||||
|
expect(setup_association).to receive(:toggle).and_return(false)
|
||||||
|
expect(setup_association).not_to be_include_attr_acc
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when using rails >= 5' do
|
||||||
|
it 'sets belongs_to' do
|
||||||
|
stub_const('::Rails::VERSION::MAJOR', 5)
|
||||||
|
|
||||||
|
expect(mock).to receive(:belongs_to).twice.with(
|
||||||
|
:impressionable, { polymorphic: true, optional: true }
|
||||||
|
).and_return(true)
|
||||||
|
|
||||||
|
expect(setup_association.define_belongs_to).to be_truthy
|
||||||
|
expect(setup_association.set).to be_falsy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when using rails < 5' do
|
||||||
|
it 'sets belongs_to' do
|
||||||
|
stub_const('::Rails::VERSION::MAJOR', 4)
|
||||||
|
|
||||||
|
expect(mock).to receive(:belongs_to).twice.with(
|
||||||
|
:impressionable, { polymorphic: true }
|
||||||
|
).and_return(true)
|
||||||
|
|
||||||
|
expect(setup_association.define_belongs_to).to be_truthy
|
||||||
|
expect(setup_association.set).to be_falsy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,100 @@
|
||||||
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
||||||
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
||||||
|
# The generated `.rspec` file contains `--require spec_helper` which will cause
|
||||||
|
# this file to always be loaded, without a need to explicitly require it in any
|
||||||
|
# files.
|
||||||
|
#
|
||||||
|
# Given that it is always loaded, you are encouraged to keep this file as
|
||||||
|
# light-weight as possible. Requiring heavyweight dependencies from this file
|
||||||
|
# will add to the boot time of your test suite on EVERY test run, even for an
|
||||||
|
# individual file that may not need all of that loaded. Instead, consider making
|
||||||
|
# a separate helper file that requires the additional dependencies and performs
|
||||||
|
# the additional setup, and require it from the spec files that actually need
|
||||||
|
# it.
|
||||||
|
#
|
||||||
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
||||||
|
RSpec.configure do |config|
|
||||||
|
# rspec-expectations config goes here. You can use an alternate
|
||||||
|
# assertion/expectation library such as wrong or the stdlib/minitest
|
||||||
|
# assertions if you prefer.
|
||||||
|
config.expect_with :rspec do |expectations|
|
||||||
|
# This option will default to `true` in RSpec 4. It makes the `description`
|
||||||
|
# and `failure_message` of custom matchers include text for helper methods
|
||||||
|
# defined using `chain`, e.g.:
|
||||||
|
# be_bigger_than(2).and_smaller_than(4).description
|
||||||
|
# # => "be bigger than 2 and smaller than 4"
|
||||||
|
# ...rather than:
|
||||||
|
# # => "be bigger than 2"
|
||||||
|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
||||||
|
end
|
||||||
|
|
||||||
|
# rspec-mocks config goes here. You can use an alternate test double
|
||||||
|
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
||||||
|
config.mock_with :rspec do |mocks|
|
||||||
|
# Prevents you from mocking or stubbing a method that does not exist on
|
||||||
|
# a real object. This is generally recommended, and will default to
|
||||||
|
# `true` in RSpec 4.
|
||||||
|
mocks.verify_partial_doubles = true
|
||||||
|
end
|
||||||
|
|
||||||
|
# This option will default to `:apply_to_host_groups` in RSpec 4 (and will
|
||||||
|
# have no way to turn it off -- the option exists only for backwards
|
||||||
|
# compatibility in RSpec 3). It causes shared context metadata to be
|
||||||
|
# inherited by the metadata hash of host groups and examples, rather than
|
||||||
|
# triggering implicit auto-inclusion in groups with matching metadata.
|
||||||
|
config.shared_context_metadata_behavior = :apply_to_host_groups
|
||||||
|
|
||||||
|
# The settings below are suggested to provide a good initial experience
|
||||||
|
# with RSpec, but feel free to customize to your heart's content.
|
||||||
|
=begin
|
||||||
|
# This allows you to limit a spec run to individual examples or groups
|
||||||
|
# you care about by tagging them with `:focus` metadata. When nothing
|
||||||
|
# is tagged with `:focus`, all examples get run. RSpec also provides
|
||||||
|
# aliases for `it`, `describe`, and `context` that include `:focus`
|
||||||
|
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
|
||||||
|
config.filter_run_when_matching :focus
|
||||||
|
|
||||||
|
# Allows RSpec to persist some state between runs in order to support
|
||||||
|
# the `--only-failures` and `--next-failure` CLI options. We recommend
|
||||||
|
# you configure your source control system to ignore this file.
|
||||||
|
config.example_status_persistence_file_path = "spec/examples.txt"
|
||||||
|
|
||||||
|
# Limits the available syntax to the non-monkey patched syntax that is
|
||||||
|
# recommended. For more details, see:
|
||||||
|
# - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
|
||||||
|
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
||||||
|
# - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
|
||||||
|
config.disable_monkey_patching!
|
||||||
|
|
||||||
|
# This setting enables warnings. It's recommended, but in some cases may
|
||||||
|
# be too noisy due to issues in dependencies.
|
||||||
|
config.warnings = true
|
||||||
|
|
||||||
|
# Many RSpec users commonly either run the entire suite or an individual
|
||||||
|
# file, and it's useful to allow more verbose output when running an
|
||||||
|
# individual spec file.
|
||||||
|
if config.files_to_run.one?
|
||||||
|
# Use the documentation formatter for detailed output,
|
||||||
|
# unless a formatter has already been configured
|
||||||
|
# (e.g. via a command-line flag).
|
||||||
|
config.default_formatter = "doc"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Print the 10 slowest examples and example groups at the
|
||||||
|
# end of the spec run, to help surface which specs are running
|
||||||
|
# particularly slow.
|
||||||
|
config.profile_examples = 10
|
||||||
|
|
||||||
|
# Run specs in random order to surface order dependencies. If you find an
|
||||||
|
# order dependency and want to debug it, you can fix the order by providing
|
||||||
|
# the seed, which is printed after each run.
|
||||||
|
# --seed 1234
|
||||||
|
config.order = :random
|
||||||
|
|
||||||
|
# Seed global randomization in this process using the `--seed` CLI option.
|
||||||
|
# Setting this allows you to use `--seed` to deterministically reproduce
|
||||||
|
# test failures related to randomization by passing the same `--seed` value
|
||||||
|
# as the one that triggered the failure.
|
||||||
|
Kernel.srand config.seed
|
||||||
|
=end
|
||||||
|
end
|
|
@ -1,7 +0,0 @@
|
||||||
$:.unshift(File.dirname __FILE__)
|
|
||||||
|
|
||||||
require 'rails/all'
|
|
||||||
require 'rails/test_help'
|
|
||||||
require "minitest/autorun"
|
|
||||||
require "minitest/pride"
|
|
||||||
require 'minitest/rails'
|
|
|
@ -1,38 +0,0 @@
|
||||||
# Responsability
|
|
||||||
# Test whether rails version > 4
|
|
||||||
# includes attr_accessible if < 4
|
|
||||||
require 'minitest_helper'
|
|
||||||
require 'impressionist/rails_toggle'
|
|
||||||
|
|
||||||
module Impressionist
|
|
||||||
describe RailsToggle do
|
|
||||||
|
|
||||||
before {
|
|
||||||
@toggle = RailsToggle.new
|
|
||||||
}
|
|
||||||
|
|
||||||
describe "Rails 4" do
|
|
||||||
|
|
||||||
# see your_minitest_path/lib/minitest/mock.rb
|
|
||||||
it "must not include attr_accessible" do
|
|
||||||
@toggle.stub :supported_by_rails?, false do
|
|
||||||
refute @toggle.should_include?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "Strong Parameters" do
|
|
||||||
|
|
||||||
# see your_minitest_path/lib/minitest/mock.rb
|
|
||||||
it "must not include attr_accessible" do
|
|
||||||
@toggle.stub :supported_by_rails?, true do
|
|
||||||
@toggle.stub :using_strong_parameters?, true do
|
|
||||||
refute @toggle.should_include?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,56 +0,0 @@
|
||||||
require 'minitest_helper'
|
|
||||||
require 'impressionist/setup_association'
|
|
||||||
|
|
||||||
module Impressionist
|
|
||||||
describe SetupAssociation do
|
|
||||||
|
|
||||||
let(:mock) { Minitest::Mock.new }
|
|
||||||
let(:set_up) { SetupAssociation.new(mock) }
|
|
||||||
|
|
||||||
before do
|
|
||||||
# expects attr_accessible to return true
|
|
||||||
# and pass 12 arguments
|
|
||||||
mock.
|
|
||||||
expect(:attr_accessible, true) do |args|
|
|
||||||
args.size == 12
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "attr_accessible" do
|
|
||||||
|
|
||||||
it "includes" do
|
|
||||||
set_up.stub :toggle, true do
|
|
||||||
set_up.include_attr_acc?.must_equal true
|
|
||||||
|
|
||||||
mock.verify
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "belongs_to" do
|
|
||||||
|
|
||||||
it "active_record" do
|
|
||||||
mock.expect(:belongs_to, true, [Symbol, Hash])
|
|
||||||
set_up.define_belongs_to.must_equal true
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "#set" do
|
|
||||||
|
|
||||||
it "sets an association" do
|
|
||||||
def set_up.include_attr_acc?; true; end
|
|
||||||
|
|
||||||
set_up.stub(:define_belongs_to, true) {
|
|
||||||
set_up.set.must_equal true
|
|
||||||
}
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
# returns done if thruthy
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1 +1,2 @@
|
||||||
--color
|
--color
|
||||||
|
--require spec_helper
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'rails', '~> 3.2'
|
gem 'rails', '~> 6'
|
||||||
gem 'rake', '< 11.0'
|
|
||||||
gem 'public_suffix', '< 1.5.0'
|
gem 'public_suffix', '< 1.5.0'
|
||||||
|
|
||||||
gem 'impressionist', :path => '../../'
|
gem 'impressionist', :path => '../../'
|
||||||
|
@ -12,11 +12,12 @@ platforms :jruby do
|
||||||
gem 'jruby-openssl'
|
gem 'jruby-openssl'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
gem 'bigdecimal', '1.4.2'
|
||||||
|
|
||||||
platforms :ruby, :mswin, :mingw do
|
platforms :ruby, :mswin, :mingw do
|
||||||
gem 'pg'
|
gem 'pg'
|
||||||
gem 'sqlite3'
|
|
||||||
gem 'mysql2'
|
gem 'mysql2'
|
||||||
gem 'mongoid', '~> 3.1'
|
gem 'mongoid', '~> 7.0'
|
||||||
gem 'bson_ext'
|
gem 'bson_ext'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -25,8 +26,8 @@ gem 'json'
|
||||||
# Gems used only for assets and not required
|
# Gems used only for assets and not required
|
||||||
# in production environments by default.
|
# in production environments by default.
|
||||||
group :assets do
|
group :assets do
|
||||||
gem 'sass-rails', '~> 3.2'
|
gem 'sass-rails', '~> 5.0'
|
||||||
gem 'coffee-rails', '~> 3.2'
|
gem 'coffee-rails', '~> 5.0'
|
||||||
|
|
||||||
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
||||||
# gem 'therubyracer'
|
# gem 'therubyracer'
|
||||||
|
@ -34,9 +35,11 @@ group :assets do
|
||||||
gem 'uglifier', '>= 1.0.3'
|
gem 'uglifier', '>= 1.0.3'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
gem 'autotest-notification'
|
gem 'autotest-notification'
|
||||||
gem 'rspec-rails', '~> 2.14.0'
|
gem 'sqlite3', '~> 1.4'
|
||||||
|
gem 'rspec-rails', '~> 4.0'
|
||||||
gem 'spork'
|
gem 'spork'
|
||||||
|
|
||||||
# test/unit has been removed by default in Ruby 2.2.x+
|
# test/unit has been removed by default in Ruby 2.2.x+
|
||||||
|
@ -47,7 +50,8 @@ group :test do
|
||||||
gem 'capybara'
|
gem 'capybara'
|
||||||
gem 'simplecov'
|
gem 'simplecov'
|
||||||
gem 'systemu'
|
gem 'systemu'
|
||||||
|
gem 'pry'
|
||||||
end
|
end
|
||||||
|
|
||||||
gem 'jquery-rails'
|
gem 'jquery-rails'
|
||||||
gem 'friendly_id', '~> 4.0.9'
|
gem 'friendly_id', '~> 5'
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{}
|
|
@ -1,5 +1,5 @@
|
||||||
# This controller imports the impressionist module to make the modules methods available for testing
|
# This controller imports the impressionist module to make the modules methods available for testing
|
||||||
class DummyController < ActionController::Base
|
class DummyController < ApplicationController
|
||||||
|
|
||||||
impressionist
|
impressionist
|
||||||
|
|
||||||
|
|
|
@ -22,12 +22,10 @@ TestApp::Application.configure do
|
||||||
# Only use best-standards-support built into browsers
|
# Only use best-standards-support built into browsers
|
||||||
config.action_dispatch.best_standards_support = :builtin
|
config.action_dispatch.best_standards_support = :builtin
|
||||||
|
|
||||||
# Raise exception on mass assignment protection for Active Record models
|
config.eager_load = false
|
||||||
config.active_record.mass_assignment_sanitizer = :strict
|
|
||||||
|
|
||||||
# Log the query plan for queries taking more than this (works
|
# Raise exception on mass assignment protection for Active Record models
|
||||||
# with SQLite, MySQL, and PostgreSQL)
|
# config.active_record.mass_assignment_sanitizer = :strict
|
||||||
config.active_record.auto_explain_threshold_in_seconds = 0.5
|
|
||||||
|
|
||||||
# Do not compress assets
|
# Do not compress assets
|
||||||
config.assets.compress = false
|
config.assets.compress = false
|
||||||
|
|
|
@ -29,8 +29,12 @@ TestApp::Application.configure do
|
||||||
# ActionMailer::Base.deliveries array.
|
# ActionMailer::Base.deliveries array.
|
||||||
config.action_mailer.delivery_method = :test
|
config.action_mailer.delivery_method = :test
|
||||||
|
|
||||||
|
config.eager_load = false
|
||||||
|
|
||||||
|
# config.active_record.sqlite3.represent_boolean_as_integer = true
|
||||||
|
|
||||||
# Raise exception on mass assignment protection for Active Record models
|
# Raise exception on mass assignment protection for Active Record models
|
||||||
config.active_record.mass_assignment_sanitizer = :strict
|
# config.active_record.mass_assignment_sanitizer = :strict
|
||||||
|
|
||||||
# Print deprecation notices to the stderr
|
# Print deprecation notices to the stderr
|
||||||
config.active_support.deprecation = :stderr
|
config.active_support.deprecation = :stderr
|
||||||
|
|
|
@ -4,4 +4,4 @@
|
||||||
# If you change this key, all old signed cookies will become invalid!
|
# If you change this key, all old signed cookies will become invalid!
|
||||||
# Make sure the secret is at least 30 characters and all random,
|
# Make sure the secret is at least 30 characters and all random,
|
||||||
# no regular words or you'll be exposed to dictionary attacks.
|
# no regular words or you'll be exposed to dictionary attacks.
|
||||||
TestApp::Application.config.secret_token = '4a6fd2eb397985331d209be32073259ed7c25aef4fafcabb00e483ee548e592322277eb15459bdb257b65f31146eda92684b3e7a98ea1b2dfad9b0d08ab62e10'
|
TestApp::Application.config.secret_key_base = '4a6fd2eb397985331d209be32073259ed7c25aef4fafcabb00e483ee548e592322277eb15459bdb257b65f31146eda92684b3e7a98ea1b2dfad9b0d08ab62e10'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateArticles < ActiveRecord::Migration
|
class CreateArticles < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
create_table :articles do |t|
|
create_table :articles do |t|
|
||||||
t.string :name
|
t.string :name
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreatePosts < ActiveRecord::Migration
|
class CreatePosts < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
create_table :posts do |t|
|
create_table :posts do |t|
|
||||||
t.string :name
|
t.string :name
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateWidgets < ActiveRecord::Migration
|
class CreateWidgets < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
create_table :widgets do |t|
|
create_table :widgets do |t|
|
||||||
t.string :name
|
t.string :name
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateImpressionsTable < ActiveRecord::Migration
|
class CreateImpressionsTable < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
create_table :impressions, :force => true do |t|
|
create_table :impressions, :force => true do |t|
|
||||||
t.string :impressionable_type
|
t.string :impressionable_type
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateProfiles < ActiveRecord::Migration
|
class CreateProfiles < ActiveRecord::Migration[4.2]
|
||||||
def change
|
def change
|
||||||
create_table :profiles do |t|
|
create_table :profiles do |t|
|
||||||
t.string :username
|
t.string :username
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateFriendlyIdSlugs < ActiveRecord::Migration
|
class CreateFriendlyIdSlugs < ActiveRecord::Migration[4.2]
|
||||||
|
|
||||||
def self.up
|
def self.up
|
||||||
create_table :friendly_id_slugs do |t|
|
create_table :friendly_id_slugs do |t|
|
||||||
|
|
|
@ -1,36 +1,34 @@
|
||||||
# encoding: UTF-8
|
|
||||||
# This file is auto-generated from the current state of the database. Instead
|
# This file is auto-generated from the current state of the database. Instead
|
||||||
# of editing this file, please use the migrations feature of Active Record to
|
# of editing this file, please use the migrations feature of Active Record to
|
||||||
# incrementally modify your database, and then regenerate this schema definition.
|
# incrementally modify your database, and then regenerate this schema definition.
|
||||||
#
|
#
|
||||||
# Note that this schema.rb definition is the authoritative source for your
|
# This file is the source Rails uses to define your schema when running `rails
|
||||||
# database schema. If you need to create the application database on another
|
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
||||||
# system, you should be using db:schema:load, not running all the migrations
|
# be faster and is potentially less error prone than running all of your
|
||||||
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
||||||
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
# migrations use external dependencies or application code.
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20150207140310) do
|
ActiveRecord::Schema.define(version: 2015_02_07_140310) do
|
||||||
|
|
||||||
create_table "articles", :force => true do |t|
|
create_table "articles", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "created_at", :null => false
|
|
||||||
t.datetime "updated_at", :null => false
|
|
||||||
end
|
|
||||||
|
|
||||||
create_table "friendly_id_slugs", :force => true do |t|
|
|
||||||
t.string "slug", :null => false
|
|
||||||
t.integer "sluggable_id", :null => false
|
|
||||||
t.string "sluggable_type", :limit => 40
|
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "friendly_id_slugs", ["slug", "sluggable_type"], :name => "index_friendly_id_slugs_on_slug_and_sluggable_type", :unique => true
|
create_table "friendly_id_slugs", force: :cascade do |t|
|
||||||
add_index "friendly_id_slugs", ["sluggable_id"], :name => "index_friendly_id_slugs_on_sluggable_id"
|
t.string "slug", null: false
|
||||||
add_index "friendly_id_slugs", ["sluggable_type"], :name => "index_friendly_id_slugs_on_sluggable_type"
|
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 => true do |t|
|
create_table "impressions", force: :cascade do |t|
|
||||||
t.string "impressionable_type"
|
t.string "impressionable_type"
|
||||||
t.integer "impressionable_id"
|
t.integer "impressionable_id"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
|
@ -43,38 +41,37 @@ ActiveRecord::Schema.define(:version => 20150207140310) do
|
||||||
t.text "message"
|
t.text "message"
|
||||||
t.text "params"
|
t.text "params"
|
||||||
t.text "referrer"
|
t.text "referrer"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at"
|
||||||
|
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"
|
||||||
|
t.index ["impressionable_type", "impressionable_id", "ip_address"], name: "poly_ip_index"
|
||||||
|
t.index ["impressionable_type", "impressionable_id", "params"], name: "poly_params_request_index"
|
||||||
|
t.index ["impressionable_type", "impressionable_id", "request_hash"], name: "poly_request_index"
|
||||||
|
t.index ["impressionable_type", "impressionable_id", "session_hash"], name: "poly_session_index"
|
||||||
|
t.index ["impressionable_type", "message", "impressionable_id"], name: "impressionable_type_message_index"
|
||||||
|
t.index ["user_id"], name: "index_impressions_on_user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "impressions", ["controller_name", "action_name", "ip_address"], :name => "controlleraction_ip_index"
|
create_table "posts", force: :cascade do |t|
|
||||||
add_index "impressions", ["controller_name", "action_name", "request_hash"], :name => "controlleraction_request_index"
|
|
||||||
add_index "impressions", ["controller_name", "action_name", "session_hash"], :name => "controlleraction_session_index"
|
|
||||||
add_index "impressions", ["impressionable_type", "impressionable_id", "ip_address"], :name => "poly_ip_index"
|
|
||||||
add_index "impressions", ["impressionable_type", "impressionable_id", "params"], :name => "poly_params_request_index"
|
|
||||||
add_index "impressions", ["impressionable_type", "impressionable_id", "request_hash"], :name => "poly_request_index"
|
|
||||||
add_index "impressions", ["impressionable_type", "impressionable_id", "session_hash"], :name => "poly_session_index"
|
|
||||||
add_index "impressions", ["impressionable_type", "message", "impressionable_id"], :name => "impressionable_type_message_index"
|
|
||||||
add_index "impressions", ["user_id"], :name => "index_impressions_on_user_id"
|
|
||||||
|
|
||||||
create_table "posts", :force => true do |t|
|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "profiles", :force => true do |t|
|
create_table "profiles", force: :cascade do |t|
|
||||||
t.string "username"
|
t.string "username"
|
||||||
t.string "slug"
|
t.string "slug"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "widgets", :force => true do |t|
|
create_table "widgets", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.integer "impressions_count", :default => 0
|
t.integer "impressions_count", default: 0
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,90 +1,113 @@
|
||||||
|
# frozen_string_literal: false
|
||||||
|
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe ArticlesController do
|
describe ArticlesController, type: :controller do
|
||||||
fixtures :articles,:impressions,:posts,:widgets
|
fixtures :articles, :impressions, :posts, :widgets
|
||||||
|
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
it "should make the impressionable_hash available" do
|
it 'makes the impressionable_hash available' do
|
||||||
get "index"
|
get :index
|
||||||
response.body.include?("false").should eq true
|
expect(response.body).to include('false')
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log an impression with a message" do
|
it 'logs an impression with a message' do
|
||||||
get "index"
|
get 'index'
|
||||||
Impression.all.size.should eq 12
|
|
||||||
Article.first.impressions.last.message.should eq "this is a test article impression"
|
latest_impression = Article.first.impressions.last
|
||||||
Article.first.impressions.last.controller_name.should eq "articles"
|
|
||||||
Article.first.impressions.last.action_name.should eq "index"
|
expect(Impression.all.size).to eq 12
|
||||||
|
|
||||||
|
expect(latest_impression.message).to eq 'this is a test article impression'
|
||||||
|
expect(latest_impression.controller_name).to eq 'articles'
|
||||||
|
expect(latest_impression.action_name).to eq 'index'
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log an impression without a message" do
|
it 'logs an impression without a message' do
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Impression.all.size.should eq 12
|
|
||||||
Article.first.impressions.last.message.should eq nil
|
latest_impression = Article.first.impressions.last
|
||||||
Article.first.impressions.last.controller_name.should eq "articles"
|
|
||||||
Article.first.impressions.last.action_name.should eq "show"
|
expect(Impression.all.size).to eq 12
|
||||||
|
|
||||||
|
expect(latest_impression.message).to eq nil
|
||||||
|
expect(latest_impression.controller_name).to eq 'articles'
|
||||||
|
expect(latest_impression.action_name).to eq 'show'
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log the user_id if user is authenticated (@current_user before_action method)" do
|
it 'logs the user_id if user is authenticated (@current_user before_action method)' do
|
||||||
session[:user_id] = 123
|
session[:user_id] = 123
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Article.first.impressions.last.user_id.should eq 123
|
|
||||||
|
expect(Article.first.impressions.last.user_id).to eq 123
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not log the user_id if user is authenticated" do
|
it 'does not log the user_id if user is authenticated' do
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Article.first.impressions.last.user_id.should eq nil
|
|
||||||
|
expect(Article.first.impressions.last.user_id).to eq nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log the request_hash, ip_address, referrer and session_hash" do
|
it 'logs the request_hash, ip_address, referrer and session_hash' do
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Impression.last.request_hash.size.should eq 64
|
|
||||||
Impression.last.ip_address.should eq "0.0.0.0"
|
impression = Impression.last
|
||||||
Impression.last.session_hash.size.should eq 32
|
|
||||||
Impression.last.referrer.should eq nil
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
# Capybara has change the way it works
|
# Capybara has change the way it works
|
||||||
# We need to pass :type options in order to make include helper methods
|
# We need to pass :type options in order to make include helper methods
|
||||||
# see https://github.com/jnicklas/capybara#using-capybara-with-rspec
|
# see https://github.com/jnicklas/capybara#using-capybara-with-rspec
|
||||||
it "should log the referrer when you click a link", :type => :feature do
|
it 'logs the referrer when you click a link', type: :feature do
|
||||||
|
default_url_options[:host] = "test.host"
|
||||||
|
|
||||||
visit article_url(Article.first)
|
visit article_url(Article.first)
|
||||||
click_link "Same Page"
|
click_link 'Same Page'
|
||||||
Impression.last.referrer.should eq "http://test.host/articles/1"
|
expect(Impression.last.referrer).to eq 'http://test.host/articles/1'
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log request with params (checked = true)" do
|
it 'logs request with params (checked = true)' do
|
||||||
get "show", id: 1, checked: true
|
get :show, params: { id: 1, checked: true }
|
||||||
Impression.last.params.should eq({"checked"=>true})
|
|
||||||
Impression.last.request_hash.size.should eq 64
|
impression = Impression.last
|
||||||
Impression.last.ip_address.should eq "0.0.0.0"
|
|
||||||
Impression.last.session_hash.size.should eq 32
|
expect(impression.params).to eq({ 'checked' => "true" })
|
||||||
Impression.last.referrer.should eq nil
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log request with params {}" do
|
it 'logs request with params: {}' do
|
||||||
get "index"
|
get 'index'
|
||||||
Impression.last.params.should eq({})
|
|
||||||
Impression.last.request_hash.size.should eq 64
|
impression = Impression.last
|
||||||
Impression.last.ip_address.should eq "0.0.0.0"
|
|
||||||
Impression.last.session_hash.size.should eq 32
|
expect(impression.params).to eq({})
|
||||||
Impression.last.referrer.should eq nil
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "when filtering params" do
|
describe 'when filtering params' do
|
||||||
before do
|
before do
|
||||||
@_filtered_params = Rails.application.config.filter_parameters
|
@_filtered_params = Rails.application.config.filter_parameters
|
||||||
Rails.application.config.filter_parameters = [:password]
|
Rails.application.config.filter_parameters = [:password]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "values should not be recorded" do
|
|
||||||
get "index", password: "best-password-ever"
|
|
||||||
Impression.last.params.should eq("password" => "[FILTERED]")
|
|
||||||
end
|
|
||||||
|
|
||||||
after do
|
after do
|
||||||
Rails.application.config.filter_parameters = @_filtered_params
|
Rails.application.config.filter_parameters = @_filtered_params
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'values should not be recorded' do
|
||||||
|
get 'index', params: { password: 'best-password-ever' }
|
||||||
|
expect(Impression.last.params).to eq('password' => '[FILTERED]')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
|
# frozen_string_literal: false
|
||||||
|
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe DummyController do
|
describe DummyController, type: :controller do
|
||||||
fixtures :impressions
|
fixtures :impressions
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
it "should log impression at the per action level on non-restful controller" do
|
it 'logs impression at the per action level on non-restful controller' do
|
||||||
get "index"
|
get 'index'
|
||||||
Impression.all.size.should eq 12
|
expect(Impression.all.size).to eq 12
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,158 +2,192 @@ require 'spec_helper'
|
||||||
|
|
||||||
# we use the posts controller as it uses the impressionsist module. any such controller would do.
|
# we use the posts controller as it uses the impressionsist module. any such controller would do.
|
||||||
describe DummyController do
|
describe DummyController do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
@impression_count = Impression.all.size
|
@impression_count = Impression.all.size
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "impressionist filter uniqueness" do
|
describe "impressionist filter uniqueness" do
|
||||||
|
it "ignore uniqueness if not requested" do
|
||||||
it "should ignore uniqueness if not requested" do
|
|
||||||
controller.impressionist_subapp_filter
|
controller.impressionist_subapp_filter
|
||||||
controller.impressionist_subapp_filter
|
controller.impressionist_subapp_filter
|
||||||
Impression.should have(@impression_count + 2).records
|
|
||||||
|
expect(Impression.count).to eq(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique session" do
|
it "recognize unique session" do
|
||||||
controller.stub(:session_hash).and_return(request.session_options[:id])
|
allow(controller).to receive(:session_hash).and_return(request.session_options[:id])
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:session_hash])
|
controller.impressionist_subapp_filter(unique: [:session_hash])
|
||||||
controller.impressionist_subapp_filter(unique: [:session_hash])
|
controller.impressionist_subapp_filter(unique: [:session_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to eq(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique ip" do
|
it "recognize unique ip" do
|
||||||
controller.request.stub(:remote_ip).and_return("1.2.3.4")
|
allow(controller).to receive(:remote_ip).and_return("1.2.3.4")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address])
|
controller.impressionist_subapp_filter(unique: [:ip_address])
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address])
|
controller.impressionist_subapp_filter(unique: [:ip_address])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique request" do
|
it "recognize unique request" do
|
||||||
controller.impressionist_subapp_filter(unique: [:request_hash])
|
controller.impressionist_subapp_filter(unique: [:request_hash])
|
||||||
controller.impressionist_subapp_filter(unique: [:request_hash])
|
controller.impressionist_subapp_filter(unique: [:request_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique action" do
|
it "recognize unique action" do
|
||||||
controller.stub(:action_name).and_return("test_action")
|
allow(controller).to receive(:action_name).and_return("test_action")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:action_name])
|
controller.impressionist_subapp_filter(unique: [:action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:action_name])
|
controller.impressionist_subapp_filter(unique: [:action_name])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique controller" do
|
it "recognize unique controller" do
|
||||||
controller.stub(:controller_name).and_return("post")
|
allow(controller).to receive(:controller_name).and_return("post")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name])
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique user" do
|
it "recognize unique user" do
|
||||||
controller.stub(:user_id).and_return(42)
|
allow(controller).to receive(:user_id).and_return(42)
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:user_id])
|
controller.impressionist_subapp_filter(unique: [:user_id])
|
||||||
controller.impressionist_subapp_filter(unique: [:user_id])
|
controller.impressionist_subapp_filter(unique: [:user_id])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique referer" do
|
it "recognize unique referer" do
|
||||||
controller.request.stub(:referer).and_return("http://foo/bar")
|
allow(controller.request).to receive(:referer).and_return("http://foo/bar")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:referrer])
|
controller.impressionist_subapp_filter(unique: [:referrer])
|
||||||
controller.impressionist_subapp_filter(unique: [:referrer])
|
controller.impressionist_subapp_filter(unique: [:referrer])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique id" do
|
it "recognize unique id" do
|
||||||
controller.stub(:params).and_return({:id => "666"}) # for correct impressionable id in filter
|
allow(controller).to receive(:params).and_return({ :id => "666" }) # for correct impressionable id in filter
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:impressionable_id])
|
controller.impressionist_subapp_filter(unique: [:impressionable_id])
|
||||||
controller.impressionist_subapp_filter(unique: [:impressionable_id])
|
controller.impressionist_subapp_filter(unique: [:impressionable_id])
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
# extra redundant test for important controller and action combination.
|
# extra redundant test for important controller and action combination.
|
||||||
it "should recognize different controller and action" do
|
it "recognize different controller and action" do
|
||||||
controller.stub(:controller_name).and_return("post")
|
allow(controller).to receive(:controller_name).and_return("post")
|
||||||
controller.stub(:action_name).and_return("test_action")
|
allow(controller).to receive(:action_name).and_return("test_action")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
controller.stub(:action_name).and_return("another_action")
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
|
|
||||||
|
allow(controller).to receive(:action_name).and_return("another_action")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
||||||
Impression.should have(@impression_count + 2).records
|
|
||||||
controller.stub(:controller_name).and_return("article")
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
|
|
||||||
|
allow(controller).to receive(:controller_name).and_return("article")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name, :action_name])
|
||||||
Impression.should have(@impression_count + 3).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different action" do
|
it "recognize different action" do
|
||||||
controller.stub(:action_name).and_return("test_action")
|
allow(controller).to receive(:action_name).and_return("test_action")
|
||||||
controller.impressionist_subapp_filter(unique: [:action_name])
|
controller.impressionist_subapp_filter(unique: [:action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:action_name])
|
controller.impressionist_subapp_filter(unique: [:action_name])
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
controller.stub(:action_name).and_return("another_action")
|
allow(controller).to receive(:action_name).and_return("another_action")
|
||||||
controller.impressionist_subapp_filter(unique: [:action_name])
|
controller.impressionist_subapp_filter(unique: [:action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:action_name])
|
controller.impressionist_subapp_filter(unique: [:action_name])
|
||||||
Impression.should have(@impression_count + 2).records
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different controller" do
|
it "recognize different controller" do
|
||||||
controller.stub(:controller_name).and_return("post")
|
allow(controller).to receive(:controller_name).and_return("post")
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name])
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
controller.stub(:controller_name).and_return("article")
|
allow(controller).to receive(:controller_name).and_return("article")
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:controller_name])
|
controller.impressionist_subapp_filter(unique: [:controller_name])
|
||||||
Impression.should have(@impression_count + 2).records
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different session" do
|
it "recognize different session" do
|
||||||
controller.stub(:session_hash).and_return("foo")
|
allow(controller).to receive(:session_hash).and_return("foo")
|
||||||
controller.impressionist_subapp_filter(unique: [:session_hash])
|
controller.impressionist_subapp_filter(unique: [:session_hash])
|
||||||
controller.impressionist_subapp_filter(unique: [:session_hash])
|
controller.impressionist_subapp_filter(unique: [:session_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
controller.stub(:session_hash).and_return("bar")
|
allow(controller).to receive(:session_hash).and_return("bar")
|
||||||
controller.impressionist_subapp_filter(unique: [:session_hash])
|
controller.impressionist_subapp_filter(unique: [:session_hash])
|
||||||
controller.impressionist_subapp_filter(unique: [:session_hash])
|
controller.impressionist_subapp_filter(unique: [:session_hash])
|
||||||
Impression.should have(@impression_count + 2).records
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different ip" do
|
it "recognize different ip" do
|
||||||
controller.request.stub(:remote_ip).and_return("1.2.3.4")
|
allow(controller.request).to receive(:remote_ip).and_return("1.2.3.4")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address])
|
controller.impressionist_subapp_filter(unique: [:ip_address])
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address])
|
controller.impressionist_subapp_filter(unique: [:ip_address])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
controller.request.stub(:remote_ip).and_return("5.6.7.8")
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
|
|
||||||
|
allow(controller.request).to receive(:remote_ip).and_return("5.6.7.8")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address])
|
controller.impressionist_subapp_filter(unique: [:ip_address])
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address])
|
controller.impressionist_subapp_filter(unique: [:ip_address])
|
||||||
Impression.should have(@impression_count + 2).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different referer" do
|
it "recognize different referer" do
|
||||||
controller.request.stub(:referer).and_return("http://foo/bar")
|
allow(controller.request).to receive(:referer).and_return("http://foo/bar")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:referrer])
|
controller.impressionist_subapp_filter(unique: [:referrer])
|
||||||
controller.impressionist_subapp_filter(unique: [:referrer])
|
controller.impressionist_subapp_filter(unique: [:referrer])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
controller.request.stub(:referer).and_return("http://bar/fo")
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
|
|
||||||
|
allow(controller.request).to receive(:referer).and_return("http://bar/fo")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:referrer])
|
controller.impressionist_subapp_filter(unique: [:referrer])
|
||||||
controller.impressionist_subapp_filter(unique: [:referrer])
|
controller.impressionist_subapp_filter(unique: [:referrer])
|
||||||
Impression.should have(@impression_count + 2).records
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different id" do
|
it "recognize different id" do
|
||||||
controller.stub(:params).and_return({:id => "666"}) # for correct impressionable id in filter
|
allow(controller).to receive(:params).and_return({ :id => "666" }) # for correct impressionable id in filter
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
||||||
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
||||||
controller.stub(:params).and_return({:id => "42"}) # for correct impressionable id in filter
|
|
||||||
|
allow(controller).to receive(:params).and_return({ :id => "42" }) # for correct impressionable id in filter
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
||||||
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
controller.impressionist_subapp_filter(unique: [:impressionable_type, :impressionable_id])
|
||||||
Impression.should have(@impression_count + 2).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize combined uniqueness" do
|
it "recognize combined uniqueness" do
|
||||||
controller.stub(:action_name).and_return("test_action")
|
allow(controller).to receive(:action_name).and_return("test_action")
|
||||||
|
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address, :request_hash, :action_name])
|
controller.impressionist_subapp_filter(unique: [:ip_address, :request_hash, :action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:request_hash, :ip_address, :action_name])
|
controller.impressionist_subapp_filter(unique: [:request_hash, :ip_address, :action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:request_hash, :action_name])
|
controller.impressionist_subapp_filter(unique: [:request_hash, :action_name])
|
||||||
|
@ -162,110 +196,142 @@ describe DummyController do
|
||||||
controller.impressionist_subapp_filter(unique: [:action_name])
|
controller.impressionist_subapp_filter(unique: [:action_name])
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address])
|
controller.impressionist_subapp_filter(unique: [:ip_address])
|
||||||
controller.impressionist_subapp_filter(unique: [:request_hash])
|
controller.impressionist_subapp_filter(unique: [:request_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize combined non-uniqueness" do
|
it "recognize combined non-uniqueness" do
|
||||||
controller.stub(:action_name).and_return(nil)
|
allow(controller).to receive(:action_name).and_return(nil)
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address, :action_name])
|
|
||||||
controller.stub(:action_name).and_return("test_action")
|
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address, :action_name])
|
|
||||||
controller.stub(:action_name).and_return("another_action")
|
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address, :action_name])
|
|
||||||
Impression.should have(@impression_count + 3).records
|
|
||||||
end
|
|
||||||
|
|
||||||
|
controller.impressionist_subapp_filter(unique: [:ip_address, :action_name])
|
||||||
|
|
||||||
|
allow(controller).to receive(:action_name).and_return("test_action")
|
||||||
|
|
||||||
|
controller.impressionist_subapp_filter(unique: [:ip_address, :action_name])
|
||||||
|
|
||||||
|
allow(controller).to receive(:action_name).and_return("another_action")
|
||||||
|
|
||||||
|
controller.impressionist_subapp_filter(unique: [:ip_address, :action_name])
|
||||||
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 3)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "impressionist method uniqueness for impressionables" do
|
describe "impressionist method uniqueness for impressionables" do
|
||||||
|
|
||||||
# in this test we reuse the post model. might break if model changes.
|
# in this test we reuse the post model. might break if model changes.
|
||||||
|
|
||||||
it "should ignore uniqueness if not requested" do
|
it "ignore uniqueness if not requested" do
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.impressionist impressionable
|
controller.impressionist impressionable
|
||||||
controller.impressionist impressionable
|
controller.impressionist impressionable
|
||||||
Impression.should have(@impression_count + 2).records
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique session" do
|
it "recognize unique session" do
|
||||||
controller.stub(:session_hash).and_return(request.session_options[:id])
|
allow(controller).to receive(:session_hash).and_return(request.session_options[:id])
|
||||||
|
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique ip" do
|
it "recognize unique ip" do
|
||||||
controller.request.stub(:remote_ip).and_return("1.2.3.4")
|
allow(controller.request).to receive(:remote_ip).and_return("1.2.3.4")
|
||||||
|
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique request" do
|
it "recognize unique request" do
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.impressionist(impressionable, nil, :unique => [:request_hash])
|
controller.impressionist(impressionable, nil, :unique => [:request_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:request_hash])
|
controller.impressionist(impressionable, nil, :unique => [:request_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique user" do
|
it "recognize unique user" do
|
||||||
controller.stub(:user_id).and_return(666)
|
allow(controller).to receive(:user_id).and_return(666)
|
||||||
|
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize unique referer" do
|
it "recognize unique referer" do
|
||||||
controller.request.stub(:referer).and_return("http://foo/bar")
|
allow(controller.request).to receive(:referer).and_return("http://foo/bar")
|
||||||
|
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.impressionist(impressionable, nil, :unique => [:referrer])
|
controller.impressionist(impressionable, nil, :unique => [:referrer])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:referrer])
|
controller.impressionist(impressionable, nil, :unique => [:referrer])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different session" do
|
it "recognize different session" do
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.stub(:session_hash).and_return("foo")
|
|
||||||
|
allow(controller).to receive(:session_hash).and_return("foo")
|
||||||
|
|
||||||
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
controller.stub(:session_hash).and_return("bar")
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
|
|
||||||
|
allow(controller).to receive(:session_hash).and_return("bar")
|
||||||
|
|
||||||
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
||||||
Impression.should have(@impression_count + 2).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different ip" do
|
it "recognize different ip" do
|
||||||
controller.request.stub(:remote_ip).and_return("1.2.3.4")
|
allow(controller.request).to receive(:remote_ip).and_return("1.2.3.4")
|
||||||
|
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
controller.request.stub(:remote_ip).and_return("5.6.7.8")
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
|
|
||||||
|
allow(controller.request).to receive(:remote_ip).and_return("5.6.7.8")
|
||||||
|
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
||||||
Impression.should have(@impression_count + 2).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize different user" do
|
it "recognize different user" do
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.stub(:user_id).and_return(666)
|
|
||||||
|
allow(controller).to receive(:user_id).and_return(666)
|
||||||
|
|
||||||
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
controller.stub(:user_id).and_return(42)
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
|
|
||||||
|
allow(controller).to receive(:user_id).and_return(42)
|
||||||
|
|
||||||
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
controller.impressionist(impressionable, nil, :unique => [:user_id])
|
||||||
Impression.should have(@impression_count + 2).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 2)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize combined uniqueness" do
|
it "recognize combined uniqueness" do
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.stub(:session_hash).and_return("foo")
|
allow(controller).to receive(:session_hash).and_return("foo")
|
||||||
|
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address, :request_hash, :session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address, :request_hash, :session_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:request_hash, :ip_address, :session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:request_hash, :ip_address, :session_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:request_hash, :session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:request_hash, :session_hash])
|
||||||
|
@ -274,64 +340,62 @@ describe DummyController do
|
||||||
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:session_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:request_hash])
|
controller.impressionist(impressionable, nil, :unique => [:request_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
|
||||||
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should recognize combined non-uniqueness" do
|
it "recognize combined non-uniqueness" do
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.stub(:session_hash).and_return(nil)
|
allow(controller).to receive(:session_hash).and_return(nil)
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address, :session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address, :session_hash])
|
||||||
controller.stub(:session_hash).and_return("foo")
|
allow(controller).to receive(:session_hash).and_return("foo")
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address, :session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address, :session_hash])
|
||||||
controller.stub(:session_hash).and_return("bar")
|
allow(controller).to receive(:session_hash).and_return("bar")
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address, :session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address, :session_hash])
|
||||||
Impression.should have(@impression_count + 3).records
|
expect(Impression.count).to equal(@impression_count + 3)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "impressionist filter and method uniqueness" do
|
describe "impressionist filter and method uniqueness" do
|
||||||
|
it "recognize uniqueness" do
|
||||||
it "should recognize uniqueness" do
|
|
||||||
impressionable = Post.create
|
impressionable = Post.create
|
||||||
controller.stub(:controller_name).and_return("posts") # for correct impressionable type in filter
|
allow(controller).to receive(:controller_name).and_return("posts") # for correct impressionable type in filter
|
||||||
controller.stub(:params).and_return({:id => impressionable.id.to_s}) # for correct impressionable id in filter
|
allow(controller).to receive(:params).and_return({ :id => impressionable.id.to_s }) # for correct impressionable id in filter
|
||||||
controller.stub(:session_hash).and_return("foo")
|
allow(controller).to receive(:session_hash).and_return("foo")
|
||||||
controller.request.stub(:remote_ip).and_return("1.2.3.4")
|
allow(controller.request).to receive(:remote_ip).and_return("1.2.3.4")
|
||||||
# order of the following methods is important for the test!
|
# order of the following methods is important for the test!
|
||||||
controller.impressionist_subapp_filter(unique: [:ip_address, :request_hash, :session_hash])
|
controller.impressionist_subapp_filter(unique: [:ip_address, :request_hash, :session_hash])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:ip_address, :request_hash, :session_hash])
|
controller.impressionist(impressionable, nil, :unique => [:ip_address, :request_hash, :session_hash])
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'impressionist with friendly id' do
|
describe 'impressionist with friendly id' do
|
||||||
it 'should unique' do
|
it 'unique' do
|
||||||
impressionable = Profile.create({username: 'test_profile', slug: 'test_profile'})
|
impressionable = Profile.create({ username: 'test_profile', slug: 'test_profile' })
|
||||||
|
|
||||||
controller.stub(:controller_name).and_return('profile')
|
allow(controller).to receive(:controller_name).and_return('profile')
|
||||||
controller.stub(:action_name).and_return('show')
|
allow(controller).to receive(:action_name).and_return('show')
|
||||||
controller.stub(:params).and_return({id: impressionable.slug})
|
allow(controller).to receive(:params).and_return({ id: impressionable.slug })
|
||||||
controller.request.stub(:remote_ip).and_return('1.2.3.4')
|
allow(controller.request).to receive(:remote_ip).and_return('1.2.3.4')
|
||||||
|
|
||||||
controller.impressionist(impressionable, nil, :unique => [:impressionable_type, :impressionable_id])
|
controller.impressionist(impressionable, nil, :unique => [:impressionable_type, :impressionable_id])
|
||||||
controller.impressionist(impressionable, nil, :unique => [:impressionable_type, :impressionable_id])
|
controller.impressionist(impressionable, nil, :unique => [:impressionable_type, :impressionable_id])
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'an impressionable action' do
|
shared_examples_for 'an impressionable action' do
|
||||||
it 'should record an impression' do
|
it 'record an impression' do
|
||||||
controller.impressionist_subapp_filter(condition)
|
controller.impressionist_subapp_filter(condition)
|
||||||
Impression.should have(@impression_count + 1).records
|
expect(Impression.count).to equal(@impression_count + 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'an unimpressionable action' do
|
shared_examples_for 'an unimpressionable action' do
|
||||||
it 'should record an impression' do
|
it 'record an impression' do
|
||||||
controller.impressionist_subapp_filter(condition)
|
controller.impressionist_subapp_filter(condition)
|
||||||
Impression.should have(@impression_count).records
|
expect(Impression.count).to equal(@impression_count)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -339,27 +403,29 @@ describe DummyController do
|
||||||
describe ":if condition" do
|
describe ":if condition" do
|
||||||
context "true condition" do
|
context "true condition" do
|
||||||
before do
|
before do
|
||||||
controller.stub(:true_condition).and_return(true)
|
allow(controller).to receive(:true_condition).and_return(true)
|
||||||
end
|
|
||||||
it_behaves_like 'an impressionable action' do
|
|
||||||
let(:condition) {{ if: :true_condition }}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'an impressionable action' do
|
it_behaves_like 'an impressionable action' do
|
||||||
let(:condition) {{ if: lambda { true } }}
|
let(:condition) { { if: :true_condition } }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'an impressionable action' do
|
||||||
|
let(:condition) { { if: -> { true } } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "false condition" do
|
context "false condition" do
|
||||||
before do
|
before do
|
||||||
controller.stub(:false_condition).and_return(false)
|
allow(controller).to receive(:false_condition).and_return(false)
|
||||||
end
|
|
||||||
it_behaves_like 'an unimpressionable action' do
|
|
||||||
let(:condition) {{ if: :false_condition }}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'an unimpressionable action' do
|
it_behaves_like 'an unimpressionable action' do
|
||||||
let(:condition) {{ if: lambda { false } }}
|
let(:condition) { { if: :false_condition } }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'an unimpressionable action' do
|
||||||
|
let(:condition) { { if: -> { false } } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -367,30 +433,31 @@ describe DummyController do
|
||||||
describe ":unless condition" do
|
describe ":unless condition" do
|
||||||
context "true condition" do
|
context "true condition" do
|
||||||
before do
|
before do
|
||||||
controller.stub(:true_condition).and_return(true)
|
allow(controller).to receive(:true_condition).and_return(true)
|
||||||
end
|
|
||||||
it_behaves_like 'an unimpressionable action' do
|
|
||||||
let(:condition) {{ unless: :true_condition }}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'an unimpressionable action' do
|
it_behaves_like 'an unimpressionable action' do
|
||||||
let(:condition) {{ unless: lambda { true } }}
|
let(:condition) { { unless: :true_condition } }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'an unimpressionable action' do
|
||||||
|
let(:condition) { { unless: -> { true } } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "false condition" do
|
context "false condition" do
|
||||||
before do
|
before do
|
||||||
controller.stub(:false_condition).and_return(false)
|
allow(controller).to receive(:false_condition).and_return(false)
|
||||||
end
|
|
||||||
it_behaves_like 'an impressionable action' do
|
|
||||||
let(:condition) {{ unless: :false_condition }}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'an impressionable action' do
|
it_behaves_like 'an impressionable action' do
|
||||||
let(:condition) {{ unless: lambda { false } }}
|
let(:condition) { { unless: :false_condition } }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_behaves_like 'an impressionable action' do
|
||||||
|
let(:condition) { { unless: -> { false } } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,28 +1,36 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe PostsController do
|
describe PostsController do
|
||||||
it "should log impression at the action level" do
|
it "logs impression at the action level" do
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Impression.all.size.should eq 12
|
|
||||||
Impression.last.controller_name.should eq "posts"
|
expect(Impression.all.size).to eq 12
|
||||||
Impression.last.action_name.should eq "show"
|
|
||||||
Impression.last.impressionable_type.should eq "Post"
|
impression = Impression.last
|
||||||
Impression.last.impressionable_id.should eq 1
|
|
||||||
|
expect(impression.controller_name).to eq "posts"
|
||||||
|
expect(impression.action_name).to eq "show"
|
||||||
|
expect(impression.impressionable_type).to eq "Post"
|
||||||
|
expect(impression.impressionable_id).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log the user_id if user is authenticated (current_user helper method)" do
|
it "logs the user_id if user is authenticated (current_user helper method)" do
|
||||||
session[:user_id] = 123
|
session[:user_id] = 123
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Post.first.impressions.last.user_id.should eq 123
|
expect(Post.first.impressions.last.user_id).to eq 123
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log impression at the action level with params" do
|
it "logs impression at the action level with params" do
|
||||||
get "show", id: 1, checked: true
|
get :show, params: { id: 1, checked: true }
|
||||||
Impression.all.size.should eq 12
|
|
||||||
Impression.last.params.should eq({"checked"=>true})
|
expect(Impression.all.size).to eq 12
|
||||||
Impression.last.controller_name.should eq "posts"
|
|
||||||
Impression.last.action_name.should eq "show"
|
impression = Impression.last
|
||||||
Impression.last.impressionable_type.should eq "Post"
|
|
||||||
Impression.last.impressionable_id.should eq 1
|
expect(impression.params).to eq({ "checked" => "true" })
|
||||||
|
expect(impression.controller_name).to eq "posts"
|
||||||
|
expect(impression.action_name).to eq "show"
|
||||||
|
expect(impression.impressionable_type).to eq "Post"
|
||||||
|
expect(impression.impressionable_id).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,91 +1,103 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe WidgetsController do
|
describe WidgetsController do
|
||||||
|
before do
|
||||||
before(:each) do
|
|
||||||
@widget = Widget.find(1)
|
@widget = Widget.find(1)
|
||||||
Widget.stub(:find).and_return(@widget)
|
allow(Widget).to receive(:find).and_return(@widget)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log impression at the per action level" do
|
it "logs impression at the per action level" do
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Impression.all.size.should eq 12
|
expect(Impression.all.size).to eq 12
|
||||||
get "index"
|
|
||||||
Impression.all.size.should eq 13
|
get :index
|
||||||
get "new"
|
|
||||||
Impression.all.size.should eq 13
|
expect(Impression.all.size).to eq 13
|
||||||
|
|
||||||
|
get :new
|
||||||
|
|
||||||
|
expect(Impression.all.size).to eq 13
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not log impression when user-agent is in wildcard list" do
|
it "does not log impression when user-agent is in wildcard list" do
|
||||||
request.stub(:user_agent).and_return('somebot')
|
request.env['HTTP_USER_AGENT'] = 'somebot'
|
||||||
get "show", :id=> 1
|
|
||||||
Impression.all.size.should eq 11
|
get :show, params: { id: 1 }
|
||||||
|
expect(Impression.all.size).to eq 11
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not log impression when user-agent is in the bot list" do
|
it "does not log impression when user-agent is in the bot list" do
|
||||||
request.stub(:user_agent).and_return('Acoon Robot v1.50.001')
|
request.env['HTTP_USER_AGENT'] = 'Acoon Robot v1.50.001'
|
||||||
get "show", :id=> 1
|
|
||||||
Impression.all.size.should eq 11
|
get :show, params: { id: 1 }
|
||||||
|
expect(Impression.all.size).to eq 11
|
||||||
end
|
end
|
||||||
|
|
||||||
context "impressionist unique options" do
|
context "impressionist unique options" do
|
||||||
|
it "logs unique impressions at the per action level" do
|
||||||
it "should log unique impressions at the per action level" do
|
get :show, params: { id: 1 }
|
||||||
get "show", :id=> 1
|
expect(Impression.all.size).to eq 12
|
||||||
Impression.all.size.should eq 12
|
get :show, params: { id: 2 }
|
||||||
get "show", :id=> 2
|
expect(Impression.all.size).to eq 13
|
||||||
Impression.all.size.should eq 13
|
get :show, params: { id: 2 }
|
||||||
get "show", :id => 2
|
expect(Impression.all.size).to eq 13
|
||||||
Impression.all.size.should eq 13
|
get :index
|
||||||
get "index"
|
expect(Impression.all.size).to eq 14
|
||||||
Impression.all.size.should eq 14
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should log unique impressions only once per id" do
|
it "logs unique impressions only once per id" do
|
||||||
get "show", :id=> 1
|
get :show, params: { id: 1 }
|
||||||
Impression.all.size.should eq 12
|
expect(Impression.all.size).to eq 12
|
||||||
get "show", :id=> 2
|
get :show, params: { id: 2 }
|
||||||
Impression.all.size.should eq 13
|
expect(Impression.all.size).to eq 13
|
||||||
|
|
||||||
get "show", :id => 2
|
get :show, params: { id: 2 }
|
||||||
Impression.all.size.should eq 13
|
expect(Impression.all.size).to eq 13
|
||||||
|
|
||||||
get "index"
|
get :index
|
||||||
Impression.all.size.should eq 14
|
expect(Impression.all.size).to eq 14
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
context "Impresionist unique params options" do
|
context "Impresionist unique params options" do
|
||||||
it "should log unique impressions at the per action and params level" do
|
it "logs unique impressions at the per action and params level" do
|
||||||
get "show", :id => 1
|
get :show, params: { id: 1 }
|
||||||
Impression.all.size.should eq 12
|
expect(Impression.all.size).to eq 12
|
||||||
get "show", :id => 2, checked: true
|
|
||||||
Impression.all.size.should eq 13
|
get :show, params: { id: 2, checked: true }
|
||||||
get "show", :id => 2, checked: false
|
expect(Impression.all.size).to eq 13
|
||||||
Impression.all.size.should eq 14
|
|
||||||
get "index"
|
get :show, params: { id: 2, checked: false }
|
||||||
Impression.all.size.should eq 15
|
expect(Impression.all.size).to eq 14
|
||||||
|
|
||||||
|
get :index
|
||||||
|
expect(Impression.all.size).to eq 15
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not log impression for same params and same id" do
|
it "does not log impression for same params and same id" do
|
||||||
get "show", :id => 1
|
get :show, params: { id: 1 }
|
||||||
Impression.all.size.should eq 12
|
expect(Impression.all.size).to eq 12
|
||||||
get "show", :id => 1
|
|
||||||
Impression.all.size.should eq 12
|
|
||||||
get "show", :id => 1, checked: true
|
|
||||||
Impression.all.size.should eq 13
|
|
||||||
get "show", :id => 1, checked: false
|
|
||||||
Impression.all.size.should eq 14
|
|
||||||
get "show", :id => 1, checked: true
|
|
||||||
Impression.all.size.should eq 14
|
|
||||||
get "show", :id => 1, checked: false
|
|
||||||
Impression.all.size.should eq 14
|
|
||||||
get "show", :id => 1
|
|
||||||
Impression.all.size.should eq 14
|
|
||||||
get "show", :id => 2
|
|
||||||
Impression.all.size.should eq 15
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
get :show, params: { id: 1 }
|
||||||
|
expect(Impression.all.size).to eq 12
|
||||||
|
|
||||||
|
get :show, params: { id: 1, checked: true }
|
||||||
|
expect(Impression.all.size).to eq 13
|
||||||
|
|
||||||
|
get :show, params: { id: 1, checked: false }
|
||||||
|
expect(Impression.all.size).to eq 14
|
||||||
|
|
||||||
|
get :show, params: { id: 1, checked: true }
|
||||||
|
expect(Impression.all.size).to eq 14
|
||||||
|
|
||||||
|
get :show, params: { id: 1, checked: false }
|
||||||
|
expect(Impression.all.size).to eq 14
|
||||||
|
|
||||||
|
get :show, params: { id: 1 }
|
||||||
|
expect(Impression.all.size).to eq 14
|
||||||
|
|
||||||
|
get :show, params: { id: 2 }
|
||||||
|
expect(Impression.all.size).to eq 15
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,18 +3,19 @@ require 'spec_helper'
|
||||||
describe Impressionist do
|
describe Impressionist do
|
||||||
let(:imp) { RUBY_VERSION.match("1.8") ? "is_impressionable" : :is_impressionable }
|
let(:imp) { RUBY_VERSION.match("1.8") ? "is_impressionable" : :is_impressionable }
|
||||||
|
|
||||||
it "should be extended from ActiveRecord::Base" do
|
it "is extended from ActiveRecord::Base" do
|
||||||
expect(ActiveRecord::Base).to respond_to(imp)
|
expect(ActiveRecord::Base).to respond_to(imp)
|
||||||
#ActiveRecord::Base.methods.include?(method).should be_true
|
# ActiveRecord::Base.methods.include?(method).should be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should include methods in ApplicationController" do
|
it "includes methods in ApplicationController" do
|
||||||
method = RUBY_VERSION.match("1.8") ? "impressionist" : :impressionist
|
method = RUBY_VERSION.match("1.8") ? "impressionist" : :impressionist
|
||||||
expect(ApplicationController).to respond_to(method)
|
expect(ApplicationController).to respond_to(method)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should include the before_action method in ApplicationController" do
|
it "includes the before_action method in ApplicationController" do
|
||||||
filters = ApplicationController._process_action_callbacks.select { |c| c.kind == :before }
|
filters = ApplicationController._process_action_callbacks.select { |c| c.kind == :before }
|
||||||
filters.collect{|filter|filter.filter}.include?(:impressionist_app_filter).should be_true
|
|
||||||
|
expect(filters.collect(&:filter)).to include(:impressionist_app_filter)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,27 +1,26 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Impressionist::Bots do
|
describe Impressionist::Bots do
|
||||||
|
|
||||||
describe "self.bot?" do
|
describe "self.bot?" do
|
||||||
it "is true if user_agent is matches wild card" do
|
it "is true if user_agent is matches wild card" do
|
||||||
Impressionist::Bots.bot?("google.com bot").should be_true
|
expect(described_class).to be_bot("google.com bot")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is true if user_agent is on bot list" do
|
it "is true if user_agent is on bot list" do
|
||||||
Impressionist::Bots.bot?("A-Online Search").should be_true
|
expect(described_class).to be_bot("A-Online Search")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false if user_agent is blank" do
|
it "is false if user_agent is blank" do
|
||||||
Impressionist::Bots.bot?("").should be_false
|
expect(described_class).not_to be_bot("")
|
||||||
Impressionist::Bots.bot?(nil).should be_false
|
expect(described_class).not_to be_bot(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false if user_agent is safe" do
|
it "is false if user_agent is safe" do
|
||||||
Impressionist::Bots.bot?('127.0.0.1').should be_false
|
expect(described_class).not_to be_bot('127.0.0.1')
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is false if user_agent not given" do
|
it "is false if user_agent not given" do
|
||||||
Impressionist::Bots.bot?.should be_false
|
expect(described_class).not_to be_bot
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -5,47 +5,45 @@ describe Impression do
|
||||||
|
|
||||||
let(:widget) { Widget.find(1) }
|
let(:widget) { Widget.find(1) }
|
||||||
|
|
||||||
before(:each) do
|
before do
|
||||||
Impression.destroy_all
|
described_class.destroy_all
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "self#impressionist_counter_caching?" do
|
describe "self#impressionist_counter_caching?" do
|
||||||
it "should know when counter caching is enabled" do
|
it "knows when counter caching is enabled" do
|
||||||
Widget.should be_impressionist_counter_caching
|
expect(Widget).to be_impressionist_counter_caching
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should know when counter caching is disabled" do
|
it "knows when counter caching is disabled" do
|
||||||
Article.should_not be_impressionist_counter_caching
|
expect(Article).not_to be_impressionist_counter_caching
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "self#counter_caching?" do
|
describe "self#counter_caching?" do
|
||||||
it "should know when counter caching is enabled" do
|
it "knows when counter caching is enabled" do
|
||||||
ActiveSupport::Deprecation.should_receive(:warn)
|
allow(ActiveSupport::Deprecation).to receive(:warn)
|
||||||
Widget.should be_counter_caching
|
expect(Widget).to be_counter_caching
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should know when counter caching is disabled" do
|
it "knows when counter caching is disabled" do
|
||||||
ActiveSupport::Deprecation.should_receive(:warn)
|
allow(ActiveSupport::Deprecation).to receive(:warn)
|
||||||
Article.should_not be_counter_caching
|
expect(Article).not_to be_counter_caching
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#update_impressionist_counter_cache" do
|
describe "#update_impressionist_counter_cache" do
|
||||||
it "should update the counter cache column to reflect the correct number of impressions" do
|
it "updates the counter cache column to reflect the correct number of impressions" do
|
||||||
expect {
|
expect do
|
||||||
widget.impressions.create(:request_hash => 'abcd1234')
|
widget.impressions.create(:request_hash => 'abcd1234')
|
||||||
widget.reload
|
widget.reload
|
||||||
}.to change(widget, :impressions_count).from(0).to(1)
|
end.to change(widget, :impressions_count).from(0).to(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not update the timestamp on the impressable" do
|
it "does not update the timestamp on the impressable" do
|
||||||
expect {
|
expect do
|
||||||
widget.impressions.create(:request_hash => 'abcd1234')
|
widget.impressions.create(:request_hash => 'abcd1234')
|
||||||
widget.reload
|
widget.reload
|
||||||
}.to_not change(widget, :updated_at)
|
end.not_to change(widget, :updated_at)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,70 +1,70 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Impression do
|
describe Impression do
|
||||||
fixtures :articles,:impressions,:posts,:profiles
|
fixtures :articles, :impressions, :posts, :profiles
|
||||||
|
|
||||||
before(:each) do
|
before do
|
||||||
@article = Article.find(1)
|
@article = Article.find(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should save a blank impression for an Article that has 10 impressions" do
|
it "saves a blank impression for an Article that has 10 impressions" do
|
||||||
@article.impressions.create
|
@article.impressions.create
|
||||||
@article.impressions.size.should eq 12
|
expect(@article.impressions.size).to eq 12
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should save an impression with a message" do
|
it "saves an impression with a message" do
|
||||||
@article.impressions.create(:message=>"test message")
|
@article.impressions.create(:message => "test message")
|
||||||
@article.impressions.last.message.should eq "test message"
|
expect(@article.impressions.last.message).to eq "test message"
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the impression count for the message specified" do
|
it "returns the impression count for the message specified" do
|
||||||
@article.impressions.create(:message => "pageview")
|
@article.impressions.create(:message => "pageview")
|
||||||
@article.impressions.create(:message => "pageview")
|
@article.impressions.create(:message => "pageview")
|
||||||
@article.impressions.create(:message => "visit")
|
@article.impressions.create(:message => "visit")
|
||||||
|
|
||||||
@article.impressionist_count(:message => "pageview", :filter => :all).should eq 2
|
expect(@article.impressionist_count(:message => "pageview", :filter => :all)).to eq 2
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the impression count for all with no date range specified" do
|
it "returns the impression count for all with no date range specified" do
|
||||||
@article.impressionist_count(:filter=>:all).should eq 11
|
expect(@article.impressionist_count(:filter => :all)).to eq 11
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return unique impression count with no date range specified" do
|
it "returns unique impression count with no date range specified" do
|
||||||
@article.impressionist_count.should eq 9
|
expect(@article.impressionist_count).to eq 9
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return impression count with only start date specified" do
|
it "returns impression count with only start date specified" do
|
||||||
@article.impressionist_count(:start_date=>"2011-01-01",:filter=>:all).should eq 8
|
expect(@article.impressionist_count(:start_date => "2011-01-01", :filter => :all)).to eq 8
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return impression count with whole date range specified" do
|
it "returns impression count with whole date range specified" do
|
||||||
@article.impressionist_count(:start_date=>"2011-01-01",:end_date=>"2011-01-02",:filter=>:all).should eq 7
|
expect(@article.impressionist_count(:start_date => "2011-01-01", :end_date => "2011-01-02", :filter => :all)).to eq 7
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return unique impression count with only start date specified" do
|
it "returns unique impression count with only start date specified" do
|
||||||
@article.impressionist_count(:start_date=>"2011-01-01").should eq 7
|
expect(@article.impressionist_count(:start_date => "2011-01-01")).to eq 7
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return unique impression count with date range specified" do
|
it "returns unique impression count with date range specified" do
|
||||||
@article.impressionist_count(:start_date=>"2011-01-01",:end_date=>"2011-01-02").should eq 7
|
expect(@article.impressionist_count(:start_date => "2011-01-01", :end_date => "2011-01-02")).to eq 7
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return unique impression count using ip address (which in turn eliminates duplicate request_hashes)" do
|
it "returns unique impression count using ip address (which in turn eliminates duplicate request_hashes)" do
|
||||||
@article.impressionist_count(:filter=>:ip_address).should eq 8
|
expect(@article.impressionist_count(:filter => :ip_address)).to eq 8
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return unique impression count using session_hash (which in turn eliminates duplicate request_hashes)" do
|
it "returns unique impression count using session_hash (which in turn eliminates duplicate request_hashes)" do
|
||||||
@article.impressionist_count(:filter=>:session_hash).should eq 7
|
expect(@article.impressionist_count(:filter => :session_hash)).to eq 7
|
||||||
end
|
end
|
||||||
|
|
||||||
# tests :dependent => :delete_all
|
# tests :dependent => :delete_all
|
||||||
it "should delete impressions on deletion of impressionable" do
|
it "deletes impressions on deletion of impressionable" do
|
||||||
#impressions_count = Impression.all.size
|
# impressions_count = Impression.all.size
|
||||||
a = Article.create
|
a = Article.create
|
||||||
i = a.impressions.create
|
i = a.impressions.create
|
||||||
a.destroy
|
a.destroy
|
||||||
a.destroyed?.should be_true
|
|
||||||
Impression.exists?(i.id).should be_false
|
|
||||||
end
|
|
||||||
|
|
||||||
|
expect(a).to be_destroyed
|
||||||
|
expect(described_class).not_to exist(i.id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
require 'systemu'
|
require 'systemu'
|
||||||
|
|
||||||
# FIXME this test might break the others if run before them
|
# FIXME: this test might break the others if run before them
|
||||||
# started fixing @nbit001
|
# started fixing @nbit001
|
||||||
describe Impressionist, :migration do
|
describe Impressionist, :migration do
|
||||||
fixtures :articles,:impressions,:posts,:profiles
|
fixtures :articles, :impressions, :posts, :profiles
|
||||||
it "should delete existing migration and generate the migration file" do
|
it "deletes existing migration and generate the migration file" do
|
||||||
pending
|
pending
|
||||||
migrations_dir = "#{Rails.root}/db/migrate"
|
migrations_dir = "#{Rails.root}/db/migrate"
|
||||||
impressions_migration = Dir.entries(migrations_dir).grep(/impressions/)[0]
|
impressions_migration = Dir.entries(migrations_dir).grep(/impressions/)[0]
|
||||||
File.delete("#{migrations_dir}/#{impressions_migration}") unless impressions_migration.blank?
|
File.delete("#{migrations_dir}/#{impressions_migration}") if impressions_migration.present?
|
||||||
generator_output = systemu("rails g impressionist")[1]
|
generator_output = systemu("rails g impressionist")[1]
|
||||||
migration_name = generator_output.split("migrate/")[1].strip
|
migration_name = generator_output.split("migrate/")[1].strip
|
||||||
Dir.entries(migrations_dir).include?(migration_name).should be_true
|
Dir.entries(migrations_dir).include?(migration_name).should be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should run the migration created in the previous spec" do
|
it "runs the migration created in the previous spec" do
|
||||||
pending
|
pending
|
||||||
migrate_output = systemu("rake db:migrate RAILS_ENV=test")
|
migrate_output = systemu("rake db:migrate RAILS_ENV=test")
|
||||||
migrate_output[1].include?("CreateImpressionsTable: migrated").should be_true
|
migrate_output[1].include?("CreateImpressionsTable: migrated").should be_truthy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,22 +5,18 @@ unless ENV['CI']
|
||||||
SimpleCov.start 'rails'
|
SimpleCov.start 'rails'
|
||||||
end
|
end
|
||||||
|
|
||||||
require File.
|
require File.expand_path('../config/environment', __dir__)
|
||||||
expand_path("../../config/environment", __FILE__)
|
|
||||||
|
|
||||||
require 'rspec/rails'
|
require 'rspec/rails'
|
||||||
require 'capybara/rails'
|
require 'capybara/rails'
|
||||||
|
|
||||||
# Custom matchers and macros, etc...
|
# Custom matchers and macros, etc...
|
||||||
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f|
|
Dir[Rails.root.join("spec/support/**/*.rb")].sort.each do |f|
|
||||||
require f
|
require f
|
||||||
}
|
end
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
|
config.infer_spec_type_from_file_location!
|
||||||
# in order to pass tags(symbols) as true values
|
|
||||||
# you need to tell rspec to do so by
|
|
||||||
config.treat_symbols_as_metadata_keys_with_true_values = true
|
|
||||||
|
|
||||||
config.mock_with :rspec
|
config.mock_with :rspec
|
||||||
|
|
||||||
|
@ -39,5 +35,4 @@ RSpec.configure do |config|
|
||||||
def logger
|
def logger
|
||||||
Rails.logger
|
Rails.logger
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class CreateImpressionsTable < ActiveRecord::Migration
|
class CreateImpressionsTable < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
add_column :impressions, :session_hash, :string
|
add_column :impressions, :session_hash, :string
|
||||||
remove_index :impressions, :name => :poly_index
|
remove_index :impressions, :name => :poly_index
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class Version04UpdateImpressionsTable < ActiveRecord::Migration
|
class Version04UpdateImpressionsTable < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
add_column :impressions, :referrer, :string
|
add_column :impressions, :referrer, :string
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
class Version152UpdateImpressionsTable < ActiveRecord::Migration
|
class Version152UpdateImpressionsTable < ActiveRecord::Migration[4.2]
|
||||||
def self.up
|
def self.up
|
||||||
add_column :impressions, :params, :text
|
add_column :impressions, :params, :text
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue