From 40275844e3a109aa7ebd0552214f825253a5ce3a Mon Sep 17 00:00:00 2001 From: Joonas Date: Mon, 7 Oct 2024 09:20:28 +0300 Subject: [PATCH 1/2] Upgrade to version 0.28 --- .rubocop.yml | 5 +- .rubocop_rails.yml | 93 - .rubocop_ruby.yml | 1767 ----------------- .ruby-version | 2 +- Gemfile | 9 +- Gemfile.lock | 827 ++++---- Rakefile | 16 - .../create_omniauth_registration_override.rb | 4 +- .../gdpr_api/application_controller.rb | 8 +- .../omniauth_callbacks_controller.rb | 4 +- babel.config.json | 25 - decidim-helsinki_profile.gemspec | 2 +- .../authentication/authenticator.rb | 8 +- .../gdpr_api/user_serializer.rb | 6 +- .../helsinki_profile/test/factories.rb | 16 +- .../helsinki_profile/test/oidc_server.rb | 2 +- .../test/profile_graphql/server.rb | 6 +- .../test/test_app/rack/graphql.rb | 2 +- .../verification/metadata_collector.rb | 6 +- lib/decidim/helsinki_profile/version.rb | 4 +- lib/tasks/decidim_helsinki_profile_tasks.rake | 12 +- .../gdpr_api/v1/profiles_controller_spec.rb | 30 +- .../omniauth_callbacks_controller_spec.rb | 16 +- .../authorizations_controller_spec.rb | 2 +- .../authentication/authenticator_spec.rb | 28 +- .../decidim/helsinki_profile/engine_spec.rb | 2 +- .../test/profile_graphql/server_spec.rb | 19 +- spec/spec_helper.rb | 3 +- 28 files changed, 511 insertions(+), 2413 deletions(-) delete mode 100644 .rubocop_rails.yml delete mode 100644 .rubocop_ruby.yml delete mode 100644 babel.config.json diff --git a/.rubocop.yml b/.rubocop.yml index 870c0b9..928b486 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,3 +1,2 @@ -inherit_from: - - .rubocop_ruby.yml - - .rubocop_rails.yml +inherit_gem: + decidim-dev: rubocop-decidim.yml diff --git a/.rubocop_rails.yml b/.rubocop_rails.yml deleted file mode 100644 index 1d1371e..0000000 --- a/.rubocop_rails.yml +++ /dev/null @@ -1,93 +0,0 @@ -require: rubocop-rails - -Rails: - Enabled: true - -Rails/ActionFilter: - Include: - - decidim-*/app/controllers/**/*.rb - -Rails/ContentTag: - Enabled: false - -Rails/CreateTableWithTimestamps: - Enabled: false - -Rails/EnumUniqueness: - Include: - - decidim-*/app/models/**/*.rb - -Rails/Exit: - Include: - - decidim-*/app/**/*.rb - - decidim-*/config/**/*.rb - - decidim-*/lib/**/*.rb - Exclude: - - decidim-*/lib/**/*.rake - -Rails/FindBy: - Include: - - "**/*.rb" - -Rails/FindEach: - Include: - - decidim-*/app/models/**/*.rb - -Rails/HasAndBelongsToMany: - Include: - - decidim-*/app/models/**/*.rb - -Rails/HasManyOrHasOneDependent: - Include: - - decidim-*/app/models/**/*.rb - -Rails/InverseOf: - Enabled: false - -Rails/LexicallyScopedActionFilter: - Include: - - decidim-*/app/controllers/**/*.rb - -Rails/NotNullColumn: - Enabled: false - -Rails/Output: - Include: - - decidim-*/app/**/*.rb - - decidim-*/config/**/*.rb - - decidim-*/db/**/*.rb - - decidim-*/lib/**/*.rb - Exclude: - - decidim-core/db/seeds.rb - - decidim-core/lib/decidim/core.rb - - decidim-core/lib/decidim/component_manifest.rb - - decidim-core/lib/decidim/participatory_space_manifest.rb - - decidim-system/db/seeds.rb - - decidim-templates/db/seeds.rb - -Rails/OutputSafety: - Enabled: false - -Rails/Pluck: - Enabled: false - -Rails/RakeEnvironment: - Enabled: false - -Rails/ReadWriteAttribute: - Include: - - decidim-*/app/models/**/*.rb - -Rails/ReversibleMigration: - Enabled: false - -Rails/ScopeArgs: - Include: - - decidim-*/app/models/**/*.rb - -Rails/SkipsModelValidations: - Enabled: true - -Rails/Validation: - Include: - - decidim-*/app/models/**/*.rb diff --git a/.rubocop_ruby.yml b/.rubocop_ruby.yml deleted file mode 100644 index 1f546cc..0000000 --- a/.rubocop_ruby.yml +++ /dev/null @@ -1,1767 +0,0 @@ -require: - - rubocop-rspec - - rubocop-faker - -# Common configuration. -AllCops: - Include: - - .simplecov - - "**/*.rb" - - "**/*.rake" - - "**/*.gemspec" - - "**/*.ru" - - "**/Gemfile" - - "**/Rakefile" - Exclude: - - "**/node_modules/**/*" - - "**/vendor/**/*" - - "development_app/**/*" - - "decidim_app-design/node_modules/**/*" - - "spec/decidim_dummy_app/**/*" - - "node_modules/**/*" - - "decidim-initiatives/lib/gem_overrides/origami/date.rb" - # Default formatter will be used if no -f/--format option is given. - DefaultFormatter: progress - # Cop names are not displayed in offense messages by default. Change behavior - # by overriding DisplayCopNames, or by giving the -D/--display-cop-names - # option. - DisplayCopNames: true - # Style guide URLs are not displayed in offense messages by default. Change - # behavior by overriding DisplayStyleGuide, or by giving the - # -S/--display-style-guide option. - DisplayStyleGuide: false - # Extra details are not displayed in offense messages by default. Change - # behavior by overriding ExtraDetails, or by giving the - # -E/--extra-details option. - ExtraDetails: false - NewCops: enable - # Additional cops that do not reference a style guide rule may be enabled by - # default. Change behavior by overriding StyleGuideCopsOnly, or by giving - # the --only-guide-cops option. - StyleGuideCopsOnly: false - # All cops except the ones in disabled.yml are enabled by default. Change - # this behavior by overriding DisabledByDefault. When DisabledByDefault is - # true, all cops in the default configuration are disabled, and and only cops - # in user configuration are enabled. This makes cops opt-in instead of - # opt-out. Note that when DisabledByDefault is true, cops in user - # configuration will be enabled even if they don't set the Enabled parameter. - DisabledByDefault: false - # Enables the result cache if true. Can be overridden by the --cache command - # line option. - UseCache: true - # Threshold for how many files can be stored in the result cache before some - # of the files are automatically removed. - MaxFilesInCache: 20000 - # The cache will be stored in "rubocop_cache" under this directory. The name - # "/tmp" is special and will be converted to the system temporary directory, - # which is "/tmp" on Unix-like systems, but could be something else on other - # systems. - CacheRootDirectory: /tmp - # The default cache root directory is /tmp, which on most systems is - # writable by any system user. This means that it is possible for a - # malicious user to anticipate the location of Rubocop's cache directory, - # and create a symlink in its place that could cause Rubocop to overwrite - # unintended files, or read malicious input. If you are certain that your - # cache location is secure from this kind of attack, and wish to use a - # symlinked cache location, set this value to "true". - AllowSymlinksInCacheRootDirectory: true - # What MRI version of the Ruby interpreter is the inspected code intended to - # run on? (If there is more than one, set this to the lowest version.) - # If a value is specified for TargetRubyVersion then it is used. - # Else if .ruby-version exists and it contains an MRI version it is used. - # Otherwise we fallback to the oldest officially supported Ruby version (2.0). - TargetRubyVersion: 3.0 - -# RSpec: -# Patterns: -# - "(?:^|/)spec/" -# - "(?:^|/)test/" - -# Indent private/protected/public as deep as method definitions -Layout/AccessModifierIndentation: - EnforcedStyle: indent - SupportedStyles: - - outdent - - indent - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Style/Alias: - EnforcedStyle: prefer_alias - SupportedStyles: - - prefer_alias - - prefer_alias_method - -# Align the elements of a hash literal if they span more than one line. -Layout/HashAlignment: - # Alignment of entries using hash rocket as separator. Valid values are: - # - # key - left alignment of keys - # "a" => 2 - # "bb" => 3 - # separator - alignment of hash rockets, keys are right aligned - # "a" => 2 - # "bb" => 3 - # table - left alignment of keys, hash rockets, and values - # "a" => 2 - # "bb" => 3 - EnforcedHashRocketStyle: key - # Alignment of entries using colon as separator. Valid values are: - # - # key - left alignment of keys - # a: 0 - # bb: 1 - # separator - alignment of colons, keys are right aligned - # a: 0 - # bb: 1 - # table - left alignment of keys and values - # a: 0 - # bb: 1 - EnforcedColonStyle: key - # Select whether hashes that are the last argument in a method call should be - # inspected? Valid values are: - # - # always_inspect - Inspect both implicit and explicit hashes. - # Registers an offense for: - # function(a: 1, - # b: 2) - # Registers an offense for: - # function({a: 1, - # b: 2}) - # always_ignore - Ignore both implicit and explicit hashes. - # Accepts: - # function(a: 1, - # b: 2) - # Accepts: - # function({a: 1, - # b: 2}) - # ignore_implicit - Ignore only implicit hashes. - # Accepts: - # function(a: 1, - # b: 2) - # Registers an offense for: - # function({a: 1, - # b: 2}) - # ignore_explicit - Ignore only explicit hashes. - # Accepts: - # function({a: 1, - # b: 2}) - # Registers an offense for: - # function(a: 1, - # b: 2) - EnforcedLastArgumentHashStyle: always_inspect - SupportedLastArgumentHashStyles: - - always_inspect - - always_ignore - - ignore_implicit - - ignore_explicit - -Layout/ParameterAlignment: - # Alignment of parameters in multi-line method calls. - # - # The `with_first_parameter` style aligns the following lines along the same - # column as the first parameter. - # - # method_call(a, - # b) - # - # The `with_fixed_indentation` style aligns the following lines with one - # level of indentation relative to the start of the line with the method call. - # - # method_call(a, - # b) - EnforcedStyle: with_first_parameter - SupportedStyles: - - with_first_parameter - - with_fixed_indentation - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Style/ArrayCoercion: - Description: >- - Use Array() instead of explicit Array check or [*var], when dealing - with a variable you want to treat as an Array, but you're not certain it's an array. - StyleGuide: '#array-coercion' - Safe: false - Enabled: false - VersionAdded: '0.88' - -Style/AndOr: - # Whether `and` and `or` are banned only in conditionals (conditionals) - # or completely (always). - EnforcedStyle: always - SupportedStyles: - - always - - conditionals - -Style/AsciiComments: - Enabled: false - -# Checks if usage of %() or %Q() matches configuration. -Style/BarePercentLiterals: - EnforcedStyle: bare_percent - SupportedStyles: - - percent_q - - bare_percent - -Style/BlockDelimiters: - EnforcedStyle: line_count_based - SupportedStyles: - # The `line_count_based` style enforces braces around single line blocks and - # do..end around multi-line blocks. - - line_count_based - # The `semantic` style enforces braces around functional blocks, where the - # primary purpose of the block is to return a value and do..end for - # procedural blocks, where the primary purpose of the block is its - # side-effects. - # - # This looks at the usage of a block's method to determine its type (e.g. is - # the result of a `map` assigned to a variable or passed to another - # method) but exceptions are permitted in the `ProceduralMethods`, - # `FunctionalMethods` and `IgnoredMethods` sections below. - - semantic - # The `braces_for_chaining` style enforces braces around single line blocks - # and do..end around multi-line blocks, except for multi-line blocks whose - # return value is being chained with another method (in which case braces - # are enforced). - - braces_for_chaining - ProceduralMethods: - # Methods that are known to be procedural in nature but look functional from - # their usage, e.g. - # - # time = Benchmark.realtime do - # foo.bar - # end - # - # Here, the return value of the block is discarded but the return value of - # `Benchmark.realtime` is used. - - benchmark - - bm - - bmbm - - create - - each_with_object - - measure - - new - - realtime - - tap - - with_object - FunctionalMethods: - # Methods that are known to be functional in nature but look procedural from - # their usage, e.g. - # - # let(:foo) { Foo.new } - # - # Here, the return value of `Foo.new` is used to define a `foo` helper but - # doesn't appear to be used from the return value of `let`. - - let - - let! - - subject - - watch - IgnoredMethods: - # Methods that can be either procedural or functional and cannot be - # categorised from their usage alone, e.g. - # - # foo = lambda do |x| - # puts "Hello, #{x}" - # end - # - # foo = lambda do |x| - # x * 100 - # end - # - # Here, it is impossible to tell from the return value of `lambda` whether - # the inner block's return value is significant. - - lambda - - proc - - it - -Style/ExplicitBlockArgument: - Enabled: false - -Style/HashEachMethods: - Enabled: false - -Style/HashLikeCase: - MinBranchesCount: 5 - -# Indentation of `when`. -Layout/CaseIndentation: - EnforcedStyle: case - SupportedStyles: - - case - - end - IndentOneStep: false - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - # This only matters if IndentOneStep is true - IndentationWidth: ~ - -Style/ClassAndModuleChildren: - Enabled: false - # Checks the style of children definitions at classes and modules. - # - # Basically there are two different styles: - # - # `nested` - have each child on a separate line - # class Foo - # class Bar - # end - # end - # - # `compact` - combine definitions as much as possible - # class Foo::Bar - # end - # - # The compact style is only forced, for classes / modules with one child. - EnforcedStyle: nested - SupportedStyles: - - nested - - compact - -Style/ClassCheck: - EnforcedStyle: is_a? - SupportedStyles: - - is_a? - - kind_of? - -# Align with the style guide. -Style/CollectionMethods: - # Mapping from undesired method to desired_method - # e.g. to use `detect` over `find`: - # - # CollectionMethods: - # PreferredMethods: - # find: detect - PreferredMethods: - collect: "map" - collect!: "map!" - inject: "reduce" - detect: "find" - find_all: "select" - -# Use ` or %x around command literals. -Style/CommandLiteral: - EnforcedStyle: backticks - # backticks: Always use backticks. - # percent_x: Always use %x. - # mixed: Use backticks on single-line commands, and %x on multi-line commands. - SupportedStyles: - - backticks - - percent_x - - mixed - # If false, the cop will always recommend using %x if one or more backticks - # are found in the command string. - AllowInnerBackticks: false - -# Checks formatting of special comments -Style/CommentAnnotation: - Keywords: - - TODO - - FIXME - - OPTIMIZE - - HACK - - REVIEW - -Style/ConditionalAssignment: - EnforcedStyle: assign_to_condition - SupportedStyles: - - assign_to_condition - - assign_inside_condition - # When configured to `assign_to_condition`, `SingleLineConditionsOnly` - # will only register an offense when all branches of a condition are - # a single line. - # When configured to `assign_inside_condition`, `SingleLineConditionsOnly` - # will only register an offense for assignment to a condition that has - # at least one multiline branch. - SingleLineConditionsOnly: true - -# Checks that you have put a copyright in a comment before any code. -# -# You can override the default Notice in your .rubocop.yml file. -# -# In order to use autocorrect, you must supply a value for the -# AutocorrectNotice key that matches the regexp Notice. A blank -# AutocorrectNotice will cause an error during autocorrect. -# -# Autocorrect will add a copyright notice in a comment at the top -# of the file immediately after any shebang or encoding comments. -# -# Example rubocop.yml: -# -# Style/Copyright: -# Enabled: true -# Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc' -# AutocorrectNotice: "# Copyright (c) 2015 Yahoo! Inc." -# -Style/Copyright: - Notice: '^Copyright (\(c\) )?2[0-9]{3} .+' - AutocorrectNotice: "" - -Style/DocumentationMethod: - RequireForNonPublicMethods: false - -# Multi-line method chaining should be done with leading dots. -Layout/DotPosition: - EnforcedStyle: leading - SupportedStyles: - - leading - - trailing - -# Warn on empty else statements -# empty - warn only on empty else -# nil - warn on else with nil in it -# both - warn on empty else and else with nil in it -Style/EmptyElse: - EnforcedStyle: both - SupportedStyles: - - empty - - nil - - both - -# Use empty lines between defs. -Layout/EmptyLineBetweenDefs: - # If true, this parameter means that single line method definitions don't - # need an empty line between them. - AllowAdjacentOneLineDefs: false - -Layout/EmptyLinesAroundBlockBody: - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines - -Layout/EmptyLinesAroundClassBody: - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines - -Layout/EmptyLinesAroundModuleBody: - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines - -# Checks whether the source file has a utf-8 encoding comment or not -# AutoCorrectEncodingComment must match the regex -# /#.*coding\s?[:=]\s?(?:UTF|utf)-8/ -Style/Encoding: - Enabled: true - -Layout/ExtraSpacing: - # When true, allows most uses of extra spacing if the intent is to align - # things with the previous or next line, not counting empty lines or comment - # lines. - AllowForAlignment: false - # When true, forces the alignment of = in assignments on consecutive lines. - ForceEqualSignAlignment: false - -Naming/FileName: - Exclude: - - "**/Gemfile" - - "**/Rakefile" - - "**/*.gemspec" - - "decidim-dev/lib/decidim-dev.rb" - # When true, requires that each source file should define a class or module - # with a name which matches the file name (converted to ... case). - # It further expects it to be nested inside modules which match the names - # of subdirectories in its path. - ExpectMatchingDefinition: false - # If non-nil, expect all source file names to match the following regex. - # Only the file name itself is matched, not the entire file path. - # Use anchors as necessary if you want to match the entire name rather than - # just a part of it. - Regex: ~ - # With `IgnoreExecutableScripts` set to `true`, this cop does not - # report offending filenames for executable scripts (i.e. source - # files with a shebang in the first line). - IgnoreExecutableScripts: true - -Layout/FirstArgumentIndentation: - EnforcedStyle: special_for_inner_method_call_in_parentheses - SupportedStyles: - # The first parameter should always be indented one step more than the - # preceding line. - - consistent - # The first parameter should normally be indented one step more than the - # preceding line, but if it's a parameter for a method call that is itself - # a parameter in a method call, then the inner parameter should be indented - # relative to the inner method. - - special_for_inner_method_call - # Same as special_for_inner_method_call except that the special rule only - # applies if the outer method call encloses its arguments in parentheses. - - special_for_inner_method_call_in_parentheses - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -# Checks use of for or each in multiline loops. -Style/For: - EnforcedStyle: each - SupportedStyles: - - for - - each - -# Enforce the method used for string formatting. -Style/FormatString: - EnforcedStyle: format - SupportedStyles: - - format - - sprintf - - percent - -Style/FormatStringToken: - EnforcedStyle: template - -Style/FrozenStringLiteralComment: - EnforcedStyle: always - SupportedStyles: - - never - # `always` will always add the frozen string literal comment to a file - # regardless of the Ruby version or if `freeze` or `<<` are called on a - # string literal. If you run code against multiple versions of Ruby, it is - # possible that this will create errors in Ruby 2.3.0+. - - always - -# Built-in global variables are allowed by default. -Style/GlobalVars: - AllowedVariables: [] - -# `MinBodyLength` defines the number of lines of the a body of an if / unless -# needs to have to trigger this cop -Style/GuardClause: - MinBodyLength: 6 - -Style/HashSyntax: - EnforcedStyle: ruby19 - SupportedStyles: - # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys - - ruby19 - # checks for hash rocket syntax for all hashes - - hash_rockets - # forbids mixed key syntaxes (e.g. {a: 1, :b => 2}) - - no_mixed_keys - # enforces both ruby19 and no_mixed_keys styles - - ruby19_no_mixed_keys - # Force hashes that have a symbol value to use hash rockets - UseHashRocketsWithSymbolValues: false - # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style - PreferHashRocketsForNonAlnumEndingSymbols: false - -Layout/IndentationConsistency: - # The difference between `rails` and `normal` is that the `rails` style - # prescribes that in classes and modules the `protected` and `private` - # modifier keywords shall be indented the same as public methods and that - # protected and private members shall be indented one step more than the - # modifiers. Other than that, both styles mean that entities on the same - # logical depth shall have the same indentation. - EnforcedStyle: normal - SupportedStyles: - - normal - - rails - -Layout/IndentationWidth: - # Number of spaces for each indentation level. - Width: 2 - -# Checks the indentation of the first element in an array literal. -Layout/FirstArrayElementIndentation: - # The value `special_inside_parentheses` means that array literals with - # brackets that have their opening bracket on the same line as a surrounding - # opening round parenthesis, shall have their first element indented relative - # to the first position inside the parenthesis. - # - # The value `consistent` means that the indentation of the first element shall - # always be relative to the first position of the line where the opening - # bracket is. - # - # The value `align_brackets` means that the indentation of the first element - # shall always be relative to the position of the opening bracket. - EnforcedStyle: special_inside_parentheses - SupportedStyles: - - special_inside_parentheses - - consistent - - align_brackets - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -# Checks the indentation of assignment RHS, when on a different line from LHS -Layout/AssignmentIndentation: - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -# Checks the indentation of the first key in a hash literal. -Layout/FirstHashElementIndentation: - # The value `special_inside_parentheses` means that hash literals with braces - # that have their opening brace on the same line as a surrounding opening - # round parenthesis, shall have their first key indented relative to the - # first position inside the parenthesis. - # - # The value `consistent` means that the indentation of the first key shall - # always be relative to the first position of the line where the opening - # brace is. - # - # The value `align_braces` means that the indentation of the first key shall - # always be relative to the position of the opening brace. - EnforcedStyle: special_inside_parentheses - SupportedStyles: - - special_inside_parentheses - - consistent - - align_braces - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Style/Lambda: - EnforcedStyle: line_count_dependent - SupportedStyles: - - line_count_dependent - - lambda - - literal - Exclude: - - "**/types/**/*" - - "**/*_interface.rb" - -Style/LambdaCall: - EnforcedStyle: call - SupportedStyles: - - call - - braces - -Style/Next: - # With `always` all conditions at the end of an iteration needs to be - # replaced by next - with `skip_modifier_ifs` the modifier if like this one - # are ignored: [1, 2].each { |a| return "yes" if a == 1 } - EnforcedStyle: skip_modifier_ifs - # `MinBodyLength` defines the number of lines of the a body of an if / unless - # needs to have to trigger this cop - MinBodyLength: 3 - SupportedStyles: - - skip_modifier_ifs - - always - -Style/NonNilCheck: - # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for - # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is - # **usually** OK, but might change behavior. - # - # With `IncludeSemanticChanges` set to `false`, this cop does not report - # offenses for `!x.nil?` and does no changes that might change behavior. - IncludeSemanticChanges: false - -Style/NumericPredicate: - EnforcedStyle: predicate - SupportedStyles: - - predicate - - comparison - -Style/MethodDefParentheses: - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - - require_no_parentheses_except_multiline - -Naming/MethodName: - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase - -Style/ModuleFunction: - EnforcedStyle: module_function - SupportedStyles: - - module_function - - extend_self - -Layout/MultilineArrayBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last element - - symmetrical - - new_line - - same_line - -Layout/MultilineAssignmentLayout: - # The types of assignments which are subject to this rule. - SupportedTypes: - - block - - case - - class - - if - - kwbegin - - module - EnforcedStyle: new_line - SupportedStyles: - # Ensures that the assignment operator and the rhs are on the same line for - # the set of supported types. - - same_line - # Ensures that the assignment operator and the rhs are on separate lines - # for the set of supported types. - - new_line - -Layout/MultilineHashBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on same line as last element - - symmetrical - - new_line - - same_line - -Layout/MultilineMethodCallBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last argument - - symmetrical - - new_line - - same_line - -Layout/MultilineMethodCallIndentation: - EnforcedStyle: aligned - SupportedStyles: - - aligned - - indented - - indented_relative_to_receiver - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Layout/MultilineMethodDefinitionBraceLayout: - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last parameter - - symmetrical - - new_line - - same_line - -Layout/MultilineOperationIndentation: - EnforcedStyle: aligned - SupportedStyles: - - aligned - - indented - # By default, the indentation width from Style/IndentationWidth is used - # But it can be overridden by setting this parameter - IndentationWidth: ~ - -Style/NumericLiterals: - MinDigits: 5 - -Style/NumericLiteralPrefix: - EnforcedOctalStyle: zero_with_o - SupportedOctalStyles: - - zero_with_o - - zero_only - -Style/OptionHash: - # A list of parameter names that will be flagged by this cop. - SuspiciousParamNames: - - options - - opts - - args - - params - - parameters - -# Allow safe assignment in conditions. -Style/ParenthesesAroundCondition: - AllowSafeAssignment: true - -Style/PercentLiteralDelimiters: - PreferredDelimiters: - "%": () - "%i": () - "%q": () - "%Q": () - "%r": "{}" - "%s": () - "%w": () - "%W": () - "%x": () - -Style/PercentQLiterals: - EnforcedStyle: lower_case_q - SupportedStyles: - - lower_case_q # Use %q when possible, %Q when necessary - - upper_case_q # Always use %Q - -Style/SlicingWithRange: - Enabled: false - -Naming/PredicateName: - # Predicate name prefixes. - NamePrefix: - - is_ - - has_ - - have_ - # Predicate name prefixes that should be removed. - ForbiddenPrefixes: - - is_ - - have_ - # Predicate names which, despite having a blacklisted prefix, or no ?, - # should still be accepted - AllowedMethods: - - is_a? - # Exclude Rspec specs because there is a strong convetion to write spec - # helpers in the form of `have_something` or `be_something`. - Exclude: - - "**/spec/**/*" - - "**/test/**/*" - -Style/PreferredHashMethods: - Enabled: true - EnforcedStyle: verbose - -Style/DateTime: - Enabled: true - -Style/Documentation: - Enabled: false - -Style/RaiseArgs: - EnforcedStyle: exploded - SupportedStyles: - - compact # raise Exception.new(msg) - - exploded # raise Exception, msg - -Style/RedundantReturn: - # When true allows code like `return x, y`. - AllowMultipleReturnValues: false - -# Use / or %r around regular expressions. -Style/RegexpLiteral: - EnforcedStyle: slashes - # slashes: Always use slashes. - # percent_r: Always use %r. - # mixed: Use slashes on single-line regexes, and %r on multi-line regexes. - SupportedStyles: - - slashes - - percent_r - - mixed - # If false, the cop will always recommend using %r if one or more slashes - # are found in the regexp string. - AllowInnerSlashes: false - -Style/SafeNavigation: - Enabled: false - -Style/Semicolon: - # Allow ; to separate several expressions on the same line. - AllowAsExpressionSeparator: false - -Style/SignalException: - EnforcedStyle: only_raise - SupportedStyles: - - only_raise - - only_fail - - semantic - -Style/SingleLineBlockParams: - Methods: - - reduce: - - a - - e - - inject: - - a - - e - -Style/SingleLineMethods: - AllowIfMethodIsEmpty: true - -Layout/SpaceBeforeFirstArg: - # When true, allows most uses of extra spacing if the intent is to align - # things with the previous or next line, not counting empty lines or comment - # lines. - AllowForAlignment: true - -Style/SpecialGlobalVars: - EnforcedStyle: use_english_names - SupportedStyles: - - use_perl_names - - use_english_names - -Style/StabbyLambdaParentheses: - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - -Style/StringLiterals: - EnforcedStyle: double_quotes - SupportedStyles: - - single_quotes - - double_quotes - # If true, strings which span multiple lines using \ for continuation must - # use the same type of quotes on each line. - ConsistentQuotesInMultiline: false - -Style/StringLiteralsInInterpolation: - EnforcedStyle: double_quotes - SupportedStyles: - - single_quotes - - double_quotes - -Style/StringMethods: - # Mapping from undesired method to desired_method - # e.g. to use `to_sym` over `intern`: - # - # StringMethods: - # PreferredMethods: - # intern: to_sym - PreferredMethods: - intern: to_sym - -Layout/SpaceAroundBlockParameters: - EnforcedStyleInsidePipes: no_space - -Layout/SpaceAroundEqualsInParameterDefault: - EnforcedStyle: space - SupportedStyles: - - space - - no_space - -Layout/SpaceAroundOperators: - # When true, allows most uses of extra spacing if the intent is to align - # with an operator on the previous or next line, not counting empty lines - # or comment lines. - AllowForAlignment: true - -Layout/SpaceBeforeBlockBraces: - EnforcedStyle: space - SupportedStyles: - - space - - no_space - -Layout/SpaceInsideBlockBraces: - EnforcedStyle: space - SupportedStyles: - - space - - no_space - # Valid values are: space, no_space - EnforcedStyleForEmptyBraces: no_space - # Space between { and |. Overrides EnforcedStyle if there is a conflict. - SpaceBeforeBlockParameters: true - -Layout/SpaceInsideHashLiteralBraces: - EnforcedStyle: space - EnforcedStyleForEmptyBraces: no_space - SupportedStyles: - - space - - no_space - # "compact" normally requires a space inside hash braces, with the exception - # that successive left braces or right braces are collapsed together - - compact - -Layout/SpaceInsideStringInterpolation: - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - -Style/AccessModifierDeclarations: - Enabled: false - -Style/SymbolArray: - EnforcedStyle: brackets - SupportedStyles: - - percent - - brackets - -Style/SymbolProc: - # A list of method names to be ignored by the check. - # The names should be fairly unique, otherwise you'll end up ignoring lots of code. - IgnoredMethods: - - respond_to - - define_method - -Style/TernaryParentheses: - EnforcedStyle: require_no_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - AllowSafeAssignment: true - -Layout/TrailingEmptyLines: - EnforcedStyle: final_newline - SupportedStyles: - - final_newline - - final_blank_line - -Style/TrailingCommaInArguments: - # If `comma`, the cop requires a comma after the last argument, but only for - # parenthesized method calls where each argument is on its own line. - # If `consistent_comma`, the cop requires a comma after the last argument, - # for all parenthesized method calls with arguments. - EnforcedStyleForMultiline: no_comma - -Style/TrailingCommaInArrayLiteral: - # If `comma`, the cop requires a comma after the last item in an array or - # hash, but only when each item is on its own line. - # If `consistent_comma`, the cop requires a comma after the last item of all - # non-empty array and hash literals. - EnforcedStyleForMultiline: no_comma - -Style/TrailingCommaInHashLiteral: - # If `comma`, the cop requires a comma after the last item in an array or - # hash, but only when each item is on its own line. - # If `consistent_comma`, the cop requires a comma after the last item of all - # non-empty array and hash literals. - EnforcedStyleForMultiline: no_comma - -# TrivialAccessors requires exact name matches and doesn't allow -# predicated methods by default. -Style/TrivialAccessors: - # When set to false the cop will suggest the use of accessor methods - # in situations like: - # - # def name - # @other_name - # end - # - # This way you can uncover "hidden" attributes in your code. - ExactNameMatch: true - AllowPredicates: true - # Allows trivial writers that don't end in an equal sign. e.g. - # - # def on_exception(action) - # @on_exception=action - # end - # on_exception :restart - # - # Commonly used in DSLs - AllowDSLWriters: false - IgnoreClassMethods: false - AllowedMethods: - - to_ary - - to_a - - to_c - - to_enum - - to_h - - to_hash - - to_i - - to_int - - to_io - - to_open - - to_path - - to_proc - - to_r - - to_regexp - - to_str - - to_s - - to_sym - -Naming/VariableName: - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase - -Naming/VariableNumber: - EnforcedStyle: normalcase - SupportedStyles: - - snake_case - - normalcase - - non_integer - -# WordArray enforces how array literals of word-like strings should be expressed. -Style/WordArray: - EnforcedStyle: percent - SupportedStyles: - # percent style: %w(word1 word2) - - percent - # bracket style: ["word1", "word2"] - - brackets - # The MinSize option causes the WordArray rule to be ignored for arrays - # smaller than a certain size. The rule is only applied to arrays - # whose element count is greater than or equal to MinSize. - MinSize: 2 - # The regular expression WordRegex decides what is considered a word. - WordRegex: !ruby/regexp '/\A[\p{Word}\n\t]+\z/' - -##################### Metrics ################################## - -Metrics/AbcSize: - # The ABC size is a calculated magnitude, so this number can be an Integer or - # a Float. - Max: 15 - Enabled: false - -Metrics/BlockNesting: - Max: 3 - -Metrics/ClassLength: - CountComments: false # count full line comments? - Max: 100 - Enabled: false - -Metrics/ModuleLength: - CountComments: false # count full line comments? - Max: 100 - Enabled: false - -# Avoid complex methods. -Metrics/CyclomaticComplexity: - Max: 9 - Exclude: - - "bin/bundle" - - "decidim-admin/app/queries/decidim/admin/newsletter_recipients.rb" - - "**/*/dummy_authorization_handler.rb" - - "**/*/permissions.rb" - -Metrics/MethodLength: - CountComments: false # count full line comments? - Max: 15 - Enabled: false - -Metrics/ParameterLists: - Max: 5 - CountKeywordArgs: true - Exclude: - - "decidim-core/lib/decidim/filter_form_builder.rb" - -Metrics/PerceivedComplexity: - Max: 10 - Exclude: - - "decidim-admin/app/queries/decidim/admin/newsletter_recipients.rb" - - "**/*/dummy_authorization_handler.rb" - - "**/*/permissions.rb" - -##################### Lint ################################## - -Lint/AmbiguousBlockAssociation: - Enabled: true - Exclude: - - "**/abilities/**/*" - -# Allow safe assignment in conditions. -Lint/AssignmentInCondition: - AllowSafeAssignment: true - -Lint/ConstantDefinitionInBlock: - Enabled: false - -# Call super to initialize state of the parent class. -Lint/MissingSuper: - Enabled: false - -# checks whether the end keywords are aligned properly for `do` `end` blocks. -Layout/BlockAlignment: - # The value `start_of_block` means that the `end` should be aligned with line - # where the `do` keyword appears. - # The value `start_of_line` means it should be aligned with the whole - # expression's starting line. - # The value `either` means both are allowed. - EnforcedStyleAlignWith: either - -# Align ends correctly. -Layout/EndAlignment: - # The value `keyword` means that `end` should be aligned with the matching - # keyword (if, while, etc.). - # The value `variable` means that in assignments, `end` should be aligned - # with the start of the variable on the left hand side of `=`. In all other - # situations, `end` should still be aligned with the keyword. - # The value `start_of_line` means that `end` should be aligned with the start - # of the line which the matching keyword appears on. - EnforcedStyleAlignWith: keyword - AutoCorrect: false - -Layout/DefEndAlignment: - # The value `def` means that `end` should be aligned with the def keyword. - # The value `start_of_line` means that `end` should be aligned with method - # calls like `private`, `public`, etc, if present in front of the `def` - # keyword on the same line. - EnforcedStyleAlignWith: start_of_line - AutoCorrect: false - -Lint/InheritException: - # The default base class in favour of `Exception`. - EnforcedStyle: runtime_error - SupportedStyles: - - runtime_error - - standard_error - -Layout/LineLength: - Max: 180 - # To make it possible to copy or click on URIs in the code, we allow lines - # containing a URI to be longer than Max. - AllowHeredoc: true - AllowURI: true - URISchemes: - - http - - https - Exclude: - - "**/spec/**/*" - -# Checks for unused block arguments -Lint/UnusedBlockArgument: - IgnoreEmptyBlocks: true - AllowUnusedKeywordArguments: false - -# Checks for unused method arguments. -Lint/UnusedMethodArgument: - AllowUnusedKeywordArguments: false - IgnoreEmptyMethods: true - -##################### Performance ############################ - -Metrics/BlockLength: - Enabled: false - -RSpec/BeforeAfterAll: - Enabled: true - -RSpec/ContextWording: - Enabled: true - Prefixes: - - when - - with - - without - - and - -RSpec/DescribeClass: - Exclude: - - spec/gemfiles_spec.rb - - spec/webpacker_spec.rb - - spec/i18n_spec.rb - - "**/*/spec/**/*_badge_spec.rb" - - decidim-core/spec/lib/global_engines_spec.rb - - "**/tasks/**/*" - -RSpec/EmptyExampleGroup: - Exclude: - - decidim-core/spec/lib/participatory_space_manifest_spec.rb - -RSpec/ExampleLength: - Max: 49 - -RSpec/ExpectInHook: - Enabled: false - -RSpec/IteratedExpectation: - Enabled: true - -RSpec/LetSetup: - Enabled: false - -RSpec/MessageSpies: - Enabled: false - -RSpec/MultipleExpectations: - Enabled: false - -RSpec/MultipleMemoizedHelpers: - Max: 35 - Exclude: - - decidim-assemblies/spec/forms/assembly_form_spec.rb - -RSpec/NestedGroups: - Max: 7 - -RSpec/NamedSubject: - Enabled: false - -RSpec/RepeatedExampleGroupDescription: - Enabled: true - -RSpec/RepeatedExampleGroupBody: - Enabled: true - -RSpec/VerifiedDoubles: - Enabled: false - -RSpec/LeakyConstantDeclaration: - Enabled: false - -RSpec/DescribedClass: - Enabled: false - -# This is the default configuration file. - -Faker/DeprecatedArguments: - Description: 'Checks that Faker arguments style is based on Faker 2.' - Enabled: true - VersionAdded: '0.1' - Reference: 'https://github.com/faker-ruby/faker/blob/master/CHANGELOG.md#v20-2019-31-07' - ArgumentKeywords: - # - # FakerClassName: - # method_name: - # - keyword_name_for_first_argument - # - keyword_name_for_second_argument - # - keyword_name_for_third_argument - # - Faker::Dune: - quote: - - character - saying: - - source - Faker::Books::Lovecraft: - fhtagn: - - number - sentence: - - word_count - - random_words_to_add - words: - - number - - spaces_allowed - sentences: - - number - paragraph: - - sentence_count - - random_sentences_to_add - paragraphs: - - number - paragraph_by_chars: - - characters - Faker::Address: - city: - - options - street_address: - - include_secondary - zip_code: - - state_abbreviation - country_by_code: - - code - country_name_to_code: - - name - Faker::Alphanumeric: - alpha: - - number - alphanumeric: - - number - Faker::App: - semantic_version: - - major - - minor - - patch - Faker::Avatar: - image: - - slug - - size - - format - - set - - bgset - Faker::Bank: - account_number: - - digits - iban: - - country_code - Faker::Boolean: - boolean: - - true_ratio - Faker::ChileRut: - rut: - - min_rut - - fixed - full_rut: - - min_rut - - fixed - Faker::Code: - isbn: - - base - ean: - - base - nric: - - min_age - - max_age - Faker::Commerce: - promotion_code: - - digits - department: - - max - - fixed_amount - price: - - range - - as_string - Faker::Company: - polish_register_of_national_economy: - - length - brazilian_company_number: - - formatted - Faker::CryptoCoin: - coin_name: - - coin - acronym: - - coin - url_logo: - - coin - Faker::Date: - between: - - from - - to - between_except: - - from - - to - - excepted - forward: - - days - backward: - - days - birthday: - - min_age - - max_age - Faker::Demographic: - height: - - unit - Faker::DrivingLicence: - british_driving_licence: - - last_name - - initials - - gender - - date_of_birth - Faker::File: - dir: - - segment_count - - root - - directory_separator - file_name: - - dir - - name - - ext - - directory_separator - Faker::Fillmurray: - image: - - grayscale - - width - - height - Faker::Finance: - vat_number: - - country - Faker::Hipster: - words: - - number - - supplemental - - spaces_allowed - sentence: - - word_count - - supplemental - - random_words_to_add - sentences: - - number - - supplemental - paragraph: - - sentence_count - - supplemental - - random_sentences_to_add - paragraphs: - - number - - supplemental - paragraph_by_chars: - - characters - - supplemental - Faker::IDNumber: - brazilian_citizen_number: - - formatted - brazilian_id: - - formatted - Faker::Internet: - email: - - name - - separators - free_email: - - name - safe_email: - - name - username: - - specifier - - separators - password: - - min_length - - max_length - - mix_case - - special_characters - domain_name: - - subdomain - fix_umlauts: - - string - mac_address: - - prefix - url: - - host - - path - - scheme - slug: - - words - - glue - user_agent: - - vendor - Faker::Invoice: - amount_between: - - from - - to - creditor_reference: - - ref - reference: - - ref - Faker::Json: - shallow_json: - - width - - options - add_depth_to_json: - - json - - width - - options - Faker::Lorem: - words: - - number - - supplemental - characters: - - number - sentence: - - word_count - - supplemental - - random_words_to_add - sentences: - - number - - supplemental - paragraph: - - sentence_count - - supplemental - - random_sentences_to_add - paragraphs: - - number - - supplemental - paragraph_by_chars: - - number - - supplemental - question: - - word_count - - supplemental - - random_words_to_add - questions: - - number - - supplemental - Faker::LoremFlickr: - image: - - size - - search_terms - - match_all - grayscale_image: - - size - - search_terms - - match_all - pixelated_image: - - size - - search_terms - - match_all - colorized_image: - - size - - color - - search_terms - - match_all - Faker::LoremPixel: - image: - - size - - is_gray - - category - - number - - text - - secure - Faker::Markdown: - sandwich: - - sentences - - repeat - Faker::Measurement: - height: - - amount - length: - - amount - volume: - - amount - weight: - - amount - metric_height: - - amount - metric_length: - - amount - metric_volume: - - amount - metric_weight: - - amount - Faker::Name: - initials: - - number - Faker::NationalHealthService: - check_digit: - - number - Faker::Number: - number: - - digits - leading_zero_number: - - digits - decimal_part: - - digits - decimal: - - l_digits - - r_digits - hexadecimal: - - digits - normal: - - mean - - standard_deviation - between: - - from - - to - within: - - range - positive: - - from - - to - negative: - - from - - to - Faker::Omniauth: - google: - - name - - email - - uid - facebook: - - name - - email - - username - - uid - twitter: - - name - - nickname - - uid - linkedin: - - name - - email - - uid - github: - - name - - email - - uid - Faker::PhoneNumber: - subscriber_number: - - length - Faker::Placeholdit: - image: - - size - - format - - background_color - - text_color - - text - Faker::Relationship: - familial: - - connection - Faker::Source: - hello_world: - - lang - print: - - str - - lang - print_1_to_10: - - lang - Faker::String: - random: - - length - Faker::Stripe: - valid_card: - - card_type - valid_token: - - card_type - invalid_card: - - card_error - ccv: - - card_type - Faker::Time: - between: - - from - - to - - format - between_dates: - - from - - to - - period - - format - forward: - - days - - period - - format - backward: - - days - - period - - format - Faker::Twitter: - user: - - include_status - - include_email - status: - - include_user - - include_photo - status_entities: - - include_photo - Faker::Types: - rb_string: - - words - rb_integer: - - from - - to - rb_hash: - - number - - type - complex_rb_hash: - - number - rb_array: - - len - Faker::Vehicle: - model: - - make_of_model - mileage: - - min - - max - license_plate: - - state_abbreviation - Faker::WorldCup: - group: - - group - roster: - - country - - type - Faker::Dota: - quote: - - hero - Faker::Movies::StarWars: - quote: - - character - Decidim::Faker::Localized: - words: - - number - - supplemental - characters: - - number - sentence: - - word_count - - supplemental - - random_words_to_add - sentences: - - number - - supplemental - paragraph: - - sentence_count - - supplemental - - random_sentences_to_add - paragraphs: - - number - - supplemental - paragraph_by_chars: - - number - - supplemental - question: - - word_count - - supplemental - - random_words_to_add - questions: - - number - - supplemental diff --git a/.ruby-version b/.ruby-version index 818bd47..94ff29c 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.0.6 +3.1.1 diff --git a/Gemfile b/Gemfile index edb01d8..80f6950 100644 --- a/Gemfile +++ b/Gemfile @@ -17,17 +17,22 @@ gem "decidim-helsinki_profile", path: "." gem "bootsnap", "~> 1.4" gem "puma", ">= 5.0.0" gem "uglifier", "~> 4.1" -gem "webpacker", "6.0.0.rc.5" group :development, :test do gem "byebug", "~> 11.0", platform: :mri gem "decidim-dev", DECIDIM_VERSION + + # rubocop & rubocop-rspec are set to the following versions because of a change where FactoryBot/CreateList + # must be a boolean instead of contextual. These version locks can be removed when this problem is handled + # through decidim-dev. + gem "rubocop", "~>1.28" gem "rubocop-faker" gem "rubocop-performance", "~> 1.6.0" + gem "rubocop-rspec", "2.20" end group :development do - gem "faker", "~> 2.14" + gem "faker", "~> 3.2" gem "letter_opener_web", "~> 1.4" gem "listen", "~> 3.1" gem "spring", "~> 2.0" diff --git a/Gemfile.lock b/Gemfile.lock index 6696f53..bce1209 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,8 +1,8 @@ PATH remote: . specs: - decidim-helsinki_profile (0.27.0) - decidim-core (~> 0.27.0) + decidim-helsinki_profile (0.28.0) + decidim-core (~> 0.28.0) henkilotunnus (~> 1.2.0) jwt (~> 2.7) omniauth_openid_connect (~> 0.7) @@ -10,40 +10,40 @@ PATH GEM remote: https://rubygems.org/ specs: - actioncable (6.1.7.6) - actionpack (= 6.1.7.6) - activesupport (= 6.1.7.6) + actioncable (6.1.7.8) + actionpack (= 6.1.7.8) + activesupport (= 6.1.7.8) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (6.1.7.6) - actionpack (= 6.1.7.6) - activejob (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionmailbox (6.1.7.8) + actionpack (= 6.1.7.8) + activejob (= 6.1.7.8) + activerecord (= 6.1.7.8) + activestorage (= 6.1.7.8) + activesupport (= 6.1.7.8) mail (>= 2.7.1) - actionmailer (6.1.7.6) - actionpack (= 6.1.7.6) - actionview (= 6.1.7.6) - activejob (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionmailer (6.1.7.8) + actionpack (= 6.1.7.8) + actionview (= 6.1.7.8) + activejob (= 6.1.7.8) + activesupport (= 6.1.7.8) mail (~> 2.5, >= 2.5.4) rails-dom-testing (~> 2.0) - actionpack (6.1.7.6) - actionview (= 6.1.7.6) - activesupport (= 6.1.7.6) + actionpack (6.1.7.8) + actionview (= 6.1.7.8) + activesupport (= 6.1.7.8) rack (~> 2.0, >= 2.0.9) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (6.1.7.6) - actionpack (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + actiontext (6.1.7.8) + actionpack (= 6.1.7.8) + activerecord (= 6.1.7.8) + activestorage (= 6.1.7.8) + activesupport (= 6.1.7.8) nokogiri (>= 1.8.5) - actionview (6.1.7.6) - activesupport (= 6.1.7.6) + actionview (6.1.7.8) + activesupport (= 6.1.7.8) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) @@ -51,73 +51,66 @@ GEM active_link_to (1.0.5) actionpack addressable - activejob (6.1.7.6) - activesupport (= 6.1.7.6) + activejob (6.1.7.8) + activesupport (= 6.1.7.8) globalid (>= 0.3.6) - activemodel (6.1.7.6) - activesupport (= 6.1.7.6) - activerecord (6.1.7.6) - activemodel (= 6.1.7.6) - activesupport (= 6.1.7.6) - activestorage (6.1.7.6) - actionpack (= 6.1.7.6) - activejob (= 6.1.7.6) - activerecord (= 6.1.7.6) - activesupport (= 6.1.7.6) + activemodel (6.1.7.8) + activesupport (= 6.1.7.8) + activerecord (6.1.7.8) + activemodel (= 6.1.7.8) + activesupport (= 6.1.7.8) + activestorage (6.1.7.8) + actionpack (= 6.1.7.8) + activejob (= 6.1.7.8) + activerecord (= 6.1.7.8) + activesupport (= 6.1.7.8) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (6.1.7.6) + activesupport (6.1.7.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) tzinfo (~> 2.0) zeitwerk (~> 2.3) - acts_as_list (0.9.19) - activerecord (>= 3.0) - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) + acts_as_list (1.2.2) + activerecord (>= 6.1) + activesupport (>= 6.1) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) aes_key_wrap (1.1.0) ast (2.4.2) - attr_required (1.0.1) - axe-core-api (4.7.0) - dumb_delegator - virtus - axe-core-rspec (4.1.0) - axe-core-api - dumb_delegator - virtus - axiom-types (0.1.1) - descendants_tracker (~> 0.0.4) - ice_nine (~> 0.11.0) - thread_safe (~> 0.3, >= 0.3.1) - base64 (0.1.1) + attr_required (1.0.2) + base64 (0.2.0) batch-loader (1.5.0) - bcrypt (3.1.19) - better_html (1.0.16) - actionview (>= 4.0) - activesupport (>= 4.0) + bcrypt (3.1.20) + better_html (2.1.1) + actionview (>= 6.0) + activesupport (>= 6.0) ast (~> 2.0) erubi (~> 1.4) - html_tokenizer (~> 0.0.6) parser (>= 2.4) smart_properties - bindata (2.4.15) + bigdecimal (3.1.8) + bindata (2.5.0) bindex (0.8.1) - bootsnap (1.16.0) + bootsnap (1.18.4) msgpack (~> 1.2) browser (2.7.1) - builder (3.2.4) + builder (3.3.0) + bullet (7.2.0) + activesupport (>= 3.0.0) + uniform_notifier (~> 1.11) byebug (11.1.3) - capybara (3.39.2) + capybara (3.40.0) addressable matrix mini_mime (>= 0.1.3) - nokogiri (~> 1.8) + nokogiri (~> 1.11) rack (>= 1.6.0) rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - carrierwave (2.2.4) + carrierwave (2.2.6) activemodel (>= 5.0.0) activesupport (>= 5.0.0) addressable (~> 2.6) @@ -136,96 +129,86 @@ GEM cells-rails (0.1.5) actionpack (>= 5.0) cells (>= 4.1.6, < 5.0.0) - charlock_holmes (0.7.7) - chef-utils (18.2.7) - concurrent-ruby - childprocess (4.1.0) - codecov (0.6.0) - simplecov (>= 0.15, < 0.22) - coercible (1.0.0) - descendants_tracker (~> 0.0.1) - coffee-rails (5.0.0) - coffee-script (>= 2.2.0) - railties (>= 5.2.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) + charlock_holmes (0.7.9) + childprocess (5.1.0) + logger (~> 1.5) + codecov (0.2.12) + json + simplecov commonmarker (0.23.10) - concurrent-ruby (1.2.2) - crack (0.4.5) + concurrent-ruby (1.3.4) + crack (1.0.0) + bigdecimal rexml crass (1.0.6) - css_parser (1.16.0) + css_parser (1.19.0) addressable - date (3.3.3) + csv (3.3.0) + date (3.3.4) date_validator (0.12.0) activemodel (>= 3) activesupport (>= 3) - db-query-matchers (0.10.0) - activesupport (>= 4.0, < 7) - rspec (~> 3.0) - decidim (0.27.4) - decidim-accountability (= 0.27.4) - decidim-admin (= 0.27.4) - decidim-api (= 0.27.4) - decidim-assemblies (= 0.27.4) - decidim-blogs (= 0.27.4) - decidim-budgets (= 0.27.4) - decidim-comments (= 0.27.4) - decidim-core (= 0.27.4) - decidim-debates (= 0.27.4) - decidim-forms (= 0.27.4) - decidim-generators (= 0.27.4) - decidim-meetings (= 0.27.4) - decidim-pages (= 0.27.4) - decidim-participatory_processes (= 0.27.4) - decidim-proposals (= 0.27.4) - decidim-sortitions (= 0.27.4) - decidim-surveys (= 0.27.4) - decidim-system (= 0.27.4) - decidim-templates (= 0.27.4) - decidim-verifications (= 0.27.4) - decidim-accountability (0.27.4) - decidim-comments (= 0.27.4) - decidim-core (= 0.27.4) - decidim-admin (0.27.4) + decidim (0.28.4) + decidim-accountability (= 0.28.4) + decidim-admin (= 0.28.4) + decidim-api (= 0.28.4) + decidim-assemblies (= 0.28.4) + decidim-blogs (= 0.28.4) + decidim-budgets (= 0.28.4) + decidim-comments (= 0.28.4) + decidim-core (= 0.28.4) + decidim-debates (= 0.28.4) + decidim-forms (= 0.28.4) + decidim-generators (= 0.28.4) + decidim-meetings (= 0.28.4) + decidim-pages (= 0.28.4) + decidim-participatory_processes (= 0.28.4) + decidim-proposals (= 0.28.4) + decidim-sortitions (= 0.28.4) + decidim-surveys (= 0.28.4) + decidim-system (= 0.28.4) + decidim-verifications (= 0.28.4) + decidim-accountability (0.28.4) + decidim-comments (= 0.28.4) + decidim-core (= 0.28.4) + decidim-admin (0.28.4) active_link_to (~> 1.0) - decidim-core (= 0.27.4) + decidim-core (= 0.28.4) devise (~> 4.7) devise-i18n (~> 1.2) - devise_invitable (~> 2.0) - decidim-api (0.27.4) - graphql (~> 1.12, < 1.13) - graphql-docs (~> 2.1.0) + devise_invitable (~> 2.0, >= 2.0.9) + decidim-api (0.28.4) + commonmarker (~> 0.23.0, >= 0.23.9) + decidim-core (= 0.28.4) + graphql (~> 2.0.0) + graphql-docs (~> 3.0.1) rack-cors (~> 1.0) - decidim-assemblies (0.27.4) - decidim-core (= 0.27.4) - decidim-blogs (0.27.4) - decidim-admin (= 0.27.4) - decidim-comments (= 0.27.4) - decidim-core (= 0.27.4) - decidim-budgets (0.27.4) - decidim-comments (= 0.27.4) - decidim-core (= 0.27.4) - decidim-comments (0.27.4) - decidim-core (= 0.27.4) + decidim-assemblies (0.28.4) + decidim-core (= 0.28.4) + decidim-blogs (0.28.4) + decidim-admin (= 0.28.4) + decidim-comments (= 0.28.4) + decidim-core (= 0.28.4) + decidim-budgets (0.28.4) + decidim-comments (= 0.28.4) + decidim-core (= 0.28.4) + decidim-comments (0.28.4) + decidim-core (= 0.28.4) redcarpet (~> 3.5, >= 3.5.1) - decidim-core (0.27.4) + decidim-core (0.28.4) active_link_to (~> 1.0) - acts_as_list (~> 0.9) + acts_as_list (~> 1.0) batch-loader (~> 1.2) browser (~> 2.7) - carrierwave (~> 2.2.1) + carrierwave (~> 2.2.5, >= 2.2.5) cells-erb (~> 0.1.0) cells-rails (~> 0.1.3) charlock_holmes (~> 0.7) date_validator (~> 0.12.0) - decidim-api (= 0.27.4) devise (~> 4.7) - devise-i18n (~> 1.2) + devise-i18n (~> 1.2, < 1.11.1) diffy (~> 3.3) - doorkeeper (~> 5.1) + doorkeeper (~> 5.6, >= 5.6.6) doorkeeper-i18n (~> 4.0) file_validators (~> 3.0) fog-local (~> 0.6) @@ -234,110 +217,106 @@ GEM hashdiff (>= 0.4.0, < 2.0.0) invisible_captcha (~> 0.12) kaminari (~> 1.2, >= 1.2.1) - loofah (~> 2.19.0) + loofah (~> 2.19, >= 2.19.1) mime-types (>= 1.16, < 4.0) mini_magick (~> 4.9) - mustache (~> 1.1.0) + net-smtp (~> 0.3.1) omniauth (~> 2.0) omniauth-facebook (~> 5.0) omniauth-google-oauth2 (~> 1.0) omniauth-rails_csrf_protection (~> 1.0) omniauth-twitter (~> 1.4) paper_trail (~> 12.0) - pg (~> 1.1.4, < 2) + pg (~> 1.4.0, < 2) pg_search (~> 2.2) premailer-rails (~> 1.10) - rack (~> 2.2, >= 2.2.3) + psych (~> 4.0) + rack (~> 2.2, >= 2.2.6.4) rack-attack (~> 6.0) - rails (~> 6.1.0) + rails (~> 6.1.7, >= 6.1.7.4) rails-i18n (~> 6.0) - ransack (~> 2.4.1) + ransack (~> 3.2.1) redis (~> 4.1) request_store (~> 1.5.0) rubyXL (~> 3.4) rubyzip (~> 2.0) - seven_zip_ruby (~> 1.3) - social-share-button (~> 1.2, >= 1.2.1) - valid_email2 (~> 2.1) - webpacker (= 6.0.0.rc.5) - webpush (~> 1.1) + shakapacker (~> 7.1.0) + valid_email2 (~> 4.0) + web-push (~> 3.0) wisper (~> 2.0) - decidim-debates (0.27.4) - decidim-comments (= 0.27.4) - decidim-core (= 0.27.4) - decidim-dev (0.27.4) - axe-core-rspec (~> 4.1.0) + decidim-debates (0.28.4) + decidim-comments (= 0.28.4) + decidim-core (= 0.28.4) + decidim-dev (0.28.4) + bullet (~> 7.0) byebug (~> 11.0) - capybara (~> 3.24) - db-query-matchers (~> 0.10.0) - decidim (= 0.27.4) - erb_lint (~> 0.0.35) - factory_bot_rails (~> 4.8) - i18n-tasks (~> 0.9.18) - mdl (~> 0.5) - nokogiri (~> 1.13) - parallel_tests (~> 3.7) - puma (~> 5.0) + capybara (~> 3.39) + decidim (= 0.28.4) + erb_lint (~> 0.4.0) + factory_bot_rails (~> 6.2) + faker (~> 3.2) + i18n-tasks (~> 1.0) + nokogiri (~> 1.14, >= 1.14.3) + parallel_tests (~> 4.2) + puma (~> 6.2, >= 6.3.1) rails-controller-testing (~> 1.0) + rspec (~> 3.12) rspec-cells (~> 0.3.7) - rspec-html-matchers (~> 0.9.1) - rspec-rails (~> 4.0) + rspec-html-matchers (~> 0.10) + rspec-rails (~> 6.0) rspec-retry (~> 0.6.2) - rspec_junit_formatter (~> 0.3.0) - rubocop (~> 1.28.0) - rubocop-rails (~> 2.14) - rubocop-rspec (~> 2.10) - selenium-webdriver (~> 4.1.0) - simplecov (~> 0.21.0) + rspec_junit_formatter (~> 0.6.0) + rubocop (~> 1.50.0) + rubocop-faker (~> 1.1) + rubocop-rails (~> 2.19) + rubocop-rspec (~> 2.20) + selenium-webdriver (~> 4.9) + simplecov (~> 0.22.0) simplecov-cobertura (~> 2.1.0) + spring (~> 2.0) + spring-watcher-listen (~> 2.0) w3c_rspec_validators (~> 0.3.0) - webmock (~> 3.6) + webmock (~> 3.18) wisper-rspec (~> 1.0) - decidim-forms (0.27.4) - decidim-core (= 0.27.4) + decidim-forms (0.28.4) + decidim-core (= 0.28.4) wicked_pdf (~> 2.1) wkhtmltopdf-binary (~> 0.12) - decidim-generators (0.27.4) - decidim-core (= 0.27.4) - decidim-meetings (0.27.4) - decidim-core (= 0.27.4) - decidim-forms (= 0.27.4) + decidim-generators (0.28.4) + decidim-core (= 0.28.4) + decidim-meetings (0.28.4) + decidim-core (= 0.28.4) + decidim-forms (= 0.28.4) icalendar (~> 2.5) - decidim-pages (0.27.4) - decidim-core (= 0.27.4) - decidim-participatory_processes (0.27.4) - decidim-core (= 0.27.4) - decidim-proposals (0.27.4) - decidim-comments (= 0.27.4) - decidim-core (= 0.27.4) - doc2text (~> 0.4.5) + decidim-pages (0.28.4) + decidim-core (= 0.28.4) + decidim-participatory_processes (0.28.4) + decidim-core (= 0.28.4) + decidim-proposals (0.28.4) + decidim-comments (= 0.28.4) + decidim-core (= 0.28.4) + doc2text (~> 0.4.6) redcarpet (~> 3.5, >= 3.5.1) - decidim-sortitions (0.27.4) - decidim-admin (= 0.27.4) - decidim-comments (= 0.27.4) - decidim-core (= 0.27.4) - decidim-proposals (= 0.27.4) - decidim-surveys (0.27.4) - decidim-core (= 0.27.4) - decidim-forms (= 0.27.4) - decidim-templates (= 0.27.4) - decidim-system (0.27.4) + decidim-sortitions (0.28.4) + decidim-admin (= 0.28.4) + decidim-comments (= 0.28.4) + decidim-core (= 0.28.4) + decidim-proposals (= 0.28.4) + decidim-surveys (0.28.4) + decidim-core (= 0.28.4) + decidim-forms (= 0.28.4) + decidim-system (0.28.4) active_link_to (~> 1.0) - decidim-core (= 0.27.4) + decidim-core (= 0.28.4) devise (~> 4.7) devise-i18n (~> 1.2) - devise_invitable (~> 2.0) - decidim-templates (0.27.4) - decidim-core (= 0.27.4) - decidim-forms (= 0.27.4) - decidim-verifications (0.27.4) - decidim-core (= 0.27.4) + devise_invitable (~> 2.0, >= 2.0.9) + decidim-verifications (0.28.4) + decidim-core (= 0.28.4) declarative-builder (0.1.0) declarative-option (< 0.2.0) declarative-option (0.1.0) - descendants_tracker (0.0.4) - thread_safe (~> 0.3, >= 0.3.1) - devise (4.9.2) + devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) @@ -345,54 +324,55 @@ GEM warden (~> 1.2.3) devise-i18n (1.11.0) devise (>= 4.9.0) - devise_invitable (2.0.8) + devise_invitable (2.0.9) actionmailer (>= 5.0) devise (>= 4.6) - diff-lcs (1.5.0) + diff-lcs (1.5.1) diffy (3.4.2) - doc2text (0.4.6) - nokogiri (>= 1.13.2, < 1.15.0) + doc2text (0.4.7) + nokogiri (>= 1.13.2, < 1.17.0) rubyzip (~> 2.3.0) - docile (1.4.0) - doorkeeper (5.6.6) + docile (1.4.1) + doorkeeper (5.7.1) railties (>= 5) doorkeeper-i18n (4.0.1) - dumb_delegator (1.0.0) - erb_lint (0.0.37) + email_validator (2.2.4) + activemodel + erb_lint (0.4.0) activesupport - better_html (~> 1.0.7) - html_tokenizer + better_html (>= 2.0.1) parser (>= 2.7.1.4) rainbow rubocop smart_properties erbse (0.1.4) temple - erubi (1.12.0) - escape_utils (1.3.0) - excon (0.103.0) - execjs (2.9.0) + erubi (1.13.0) + escape_utils (1.2.2) + excon (0.112.0) + execjs (2.9.1) extended-markdown-filter (0.7.0) html-pipeline (~> 2.9) - factory_bot (4.11.1) - activesupport (>= 3.0.0) - factory_bot_rails (4.11.1) - factory_bot (~> 4.11.1) - railties (>= 3.0.0) - faker (2.23.0) + factory_bot (6.5.0) + activesupport (>= 5.0.0) + factory_bot_rails (6.4.3) + factory_bot (~> 6.4) + railties (>= 5.0.0) + faker (3.4.2) i18n (>= 1.8.11, < 2) - faraday (2.7.11) - base64 - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) + faraday (2.12.0) + faraday-net_http (>= 2.0, < 3.4) + json + logger faraday-follow_redirects (0.3.0) faraday (>= 1, < 3) - faraday-net_http (3.0.2) - ffi (1.15.5) + faraday-net_http (3.3.0) + net-http + ffi (1.17.0) file_validators (3.0.0) activemodel (>= 3.2) mime-types (>= 1.0) - fog-core (2.3.0) + fog-core (2.5.0) builder excon (~> 0.71) formatador (>= 0.2, < 2.0) @@ -406,58 +386,63 @@ GEM activesupport (>= 4.1, < 7.1) railties (>= 4.1, < 7.1) gemoji (3.0.1) - geocoder (1.8.2) + geocoder (1.8.3) + base64 (>= 0.1.0) + csv (>= 3.0.0) globalid (1.2.1) activesupport (>= 6.1) - graphql (1.12.24) - graphql-docs (2.1.0) + graphql (2.0.31) + base64 + graphql-docs (3.0.1) commonmarker (~> 0.16) - escape_utils (~> 1.2) + escape_utils (~> 1.2.2) extended-markdown-filter (~> 0.4) gemoji (~> 3.0) - graphql (~> 1.12) + graphql (~> 2.0) html-pipeline (~> 2.9) sass (~> 3.4) - hashdiff (1.0.1) + hashdiff (1.1.1) hashie (5.0.0) henkilotunnus (1.2.0) activemodel (>= 4.2) - highline (2.1.0) - hkdf (0.3.0) + highline (3.1.1) + reline html-pipeline (2.14.3) activesupport (>= 2) nokogiri (>= 1.4) - html_tokenizer (0.0.7) htmlentities (4.3.4) - i18n (1.14.1) + i18n (1.14.6) concurrent-ruby (~> 1.0) - i18n-tasks (0.9.37) + i18n-tasks (1.0.14) activesupport (>= 4.0.2) ast (>= 2.1.0) erubi highline (>= 2.0.0) i18n - parser (>= 2.2.3.0) + parser (>= 3.2.2.1) rails-i18n rainbow (>= 2.2.2, < 4.0) terminal-table (>= 1.5.1) - icalendar (2.9.0) + icalendar (2.10.3) ice_cube (~> 0.16) - ice_cube (0.16.4) - ice_nine (0.11.2) - image_processing (1.12.2) + ostruct + ice_cube (0.17.0) + image_processing (1.13.0) mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) invisible_captcha (0.13.0) rails (>= 3.2.0) - json (2.6.3) - json-jwt (1.16.3) + io-console (0.7.2) + json (2.7.2) + json-jwt (1.16.6) activesupport (>= 4.2) aes_key_wrap + base64 bindata faraday (~> 2.0) faraday-follow_redirects - jwt (2.7.1) + jwt (2.9.3) + base64 kaminari (1.2.2) activesupport (>= 4.1.0) kaminari-actionview (= 1.2.2) @@ -470,63 +455,52 @@ GEM activerecord kaminari-core (= 1.2.2) kaminari-core (1.2.2) - kramdown (2.4.0) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - launchy (2.5.2) + launchy (3.0.1) addressable (~> 2.8) - letter_opener (1.8.1) - launchy (>= 2.2, < 3) + childprocess (~> 5.0) + letter_opener (1.10.0) + launchy (>= 2.2, < 4) letter_opener_web (1.4.1) actionmailer (>= 3.2) letter_opener (~> 1.0) railties (>= 3.2) - listen (3.8.0) + listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - loofah (2.19.1) + logger (1.6.1) + loofah (2.22.0) crass (~> 1.0.2) - nokogiri (>= 1.5.9) + nokogiri (>= 1.12.0) mail (2.8.1) mini_mime (>= 0.1.1) net-imap net-pop net-smtp - marcel (1.0.2) + marcel (1.0.4) matrix (0.4.2) - mdl (0.12.0) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.1) - mixlib-cli (~> 2.1, >= 2.1.1) - mixlib-config (>= 2.2.1, < 4) - mixlib-shellout - method_source (1.0.0) - mime-types (3.5.1) + method_source (1.1.0) + mime-types (3.6.0) + logger mime-types-data (~> 3.2015) - mime-types-data (3.2023.0808) - mini_magick (4.12.0) + mime-types-data (3.2024.1001) + mini_magick (4.13.2) mini_mime (1.1.5) - minitest (5.20.0) - mixlib-cli (2.1.8) - mixlib-config (3.0.27) - tomlrb - mixlib-shellout (3.2.7) - chef-utils + minitest (5.25.1) msgpack (1.7.2) multi_xml (0.6.0) - mustache (1.1.1) - net-imap (0.3.7) + net-http (0.4.1) + uri + net-imap (0.4.16) date net-protocol net-pop (0.1.2) net-protocol - net-protocol (0.2.1) + net-protocol (0.2.2) timeout - net-smtp (0.3.3) + net-smtp (0.3.4) net-protocol - nio4r (2.5.9) - nokogiri (1.14.5-x86_64-linux) + nio4r (2.7.3) + nokogiri (1.16.7-x86_64-linux) racc (~> 1.4) oauth (1.1.0) oauth-tty (~> 1.0, >= 1.0.1) @@ -541,103 +515,109 @@ GEM rack (>= 1.2, < 4) snaky_hash (~> 2.0) version_gem (~> 1.1) - omniauth (2.1.1) + omniauth (2.1.2) hashie (>= 3.4.6) rack (>= 2.2.3) rack-protection omniauth-facebook (5.0.0) omniauth-oauth2 (~> 1.2) - omniauth-google-oauth2 (1.1.1) - jwt (>= 2.0) - oauth2 (~> 2.0.6) + omniauth-google-oauth2 (1.2.0) + jwt (>= 2.9) + oauth2 (~> 2.0) omniauth (~> 2.0) - omniauth-oauth2 (~> 1.8.0) - omniauth-oauth (1.2.0) + omniauth-oauth2 (~> 1.8) + omniauth-oauth (1.2.1) oauth omniauth (>= 1.0, < 3) + rack (>= 1.6.2, < 4) omniauth-oauth2 (1.8.0) oauth2 (>= 1.4, < 3) omniauth (~> 2.0) - omniauth-rails_csrf_protection (1.0.1) + omniauth-rails_csrf_protection (1.0.2) actionpack (>= 4.2) omniauth (~> 2.0) omniauth-twitter (1.4.0) omniauth-oauth (~> 1.1) rack - omniauth_openid_connect (0.7.1) + omniauth_openid_connect (0.8.0) omniauth (>= 1.9, < 3) openid_connect (~> 2.2) - openid_connect (2.2.0) + openid_connect (2.3.0) activemodel attr_required (>= 1.0.0) + email_validator faraday (~> 2.0) faraday-follow_redirects json-jwt (>= 1.16) - net-smtp + mail rack-oauth2 (~> 2.2) swd (~> 2.0) tzinfo - validate_email validate_url webfinger (~> 2.0) + openssl (3.2.0) orm_adapter (0.5.0) + ostruct (0.6.0) paper_trail (12.3.0) activerecord (>= 5.2) request_store (~> 1.1) - parallel (1.23.0) - parallel_tests (3.13.0) + parallel (1.26.3) + parallel_tests (4.7.2) parallel - parser (3.2.2.3) + parser (3.3.5.0) ast (~> 2.4.1) racc - pg (1.1.4) - pg_search (2.3.6) - activerecord (>= 5.2) - activesupport (>= 5.2) - premailer (1.21.0) + pg (1.4.6) + pg_search (2.3.7) + activerecord (>= 6.1) + activesupport (>= 6.1) + premailer (1.27.0) addressable - css_parser (>= 1.12.0) + css_parser (>= 1.19.0) htmlentities (>= 4.0.0) premailer-rails (1.12.0) actionmailer (>= 3) net-smtp premailer (~> 1.7, >= 1.7.9) - public_suffix (5.0.3) - puma (5.6.7) + psych (4.0.6) + stringio + public_suffix (6.0.1) + puma (6.4.3) nio4r (~> 2.0) - racc (1.7.1) - rack (2.2.8) + racc (1.8.1) + rack (2.2.9) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-cors (1.1.1) rack (>= 2.0.0) - rack-oauth2 (2.2.0) + rack-oauth2 (2.2.1) activesupport attr_required faraday (~> 2.0) faraday-follow_redirects json-jwt (>= 1.11.0) rack (>= 2.1.0) - rack-protection (3.1.0) + rack-protection (3.2.0) + base64 (>= 0.1.0) rack (~> 2.2, >= 2.2.4) rack-proxy (0.7.7) rack rack-test (2.1.0) rack (>= 1.3) - rails (6.1.7.6) - actioncable (= 6.1.7.6) - actionmailbox (= 6.1.7.6) - actionmailer (= 6.1.7.6) - actionpack (= 6.1.7.6) - actiontext (= 6.1.7.6) - actionview (= 6.1.7.6) - activejob (= 6.1.7.6) - activemodel (= 6.1.7.6) - activerecord (= 6.1.7.6) - activestorage (= 6.1.7.6) - activesupport (= 6.1.7.6) + rails (6.1.7.8) + actioncable (= 6.1.7.8) + actionmailbox (= 6.1.7.8) + actionmailer (= 6.1.7.8) + actionpack (= 6.1.7.8) + actiontext (= 6.1.7.8) + actionview (= 6.1.7.8) + activejob (= 6.1.7.8) + activemodel (= 6.1.7.8) + activerecord (= 6.1.7.8) + activestorage (= 6.1.7.8) + activesupport (= 6.1.7.8) bundler (>= 1.15.0) - railties (= 6.1.7.6) + railties (= 6.1.7.8) sprockets-rails (>= 2.0.0) rails-controller-testing (1.0.5) actionpack (>= 5.0.1.rc1) @@ -647,93 +627,101 @@ GEM activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.5.0) - loofah (~> 2.19, >= 2.19.1) + rails-html-sanitizer (1.6.0) + loofah (~> 2.21) + nokogiri (~> 1.14) rails-i18n (6.0.0) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 7) - railties (6.1.7.6) - actionpack (= 6.1.7.6) - activesupport (= 6.1.7.6) + railties (6.1.7.8) + actionpack (= 6.1.7.8) + activesupport (= 6.1.7.8) method_source rake (>= 12.2) thor (~> 1.0) rainbow (3.1.1) - rake (13.0.6) - ransack (2.4.2) - activerecord (>= 5.2.4) - activesupport (>= 5.2.4) + rake (13.2.1) + ransack (3.2.1) + activerecord (>= 6.1.5) + activesupport (>= 6.1.5) i18n rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) redcarpet (3.6.0) redis (4.8.1) - regexp_parser (2.8.1) + regexp_parser (2.9.2) + reline (0.5.10) + io-console (~> 0.5) request_store (1.5.1) rack (>= 1.4) - responders (3.1.0) + responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) - rexml (3.2.6) - rspec (3.12.0) - rspec-core (~> 3.12.0) - rspec-expectations (~> 3.12.0) - rspec-mocks (~> 3.12.0) - rspec-cells (0.3.8) + rexml (3.3.8) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-cells (0.3.9) cells (>= 4.0.0, < 6.0.0) - rspec-rails (>= 3.0.0, < 6.1.0) - rspec-core (3.12.2) - rspec-support (~> 3.12.0) - rspec-expectations (3.12.3) + rspec-rails (>= 3.0.0, < 6.2.0) + rspec-core (3.13.1) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.3) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.12.0) - rspec-html-matchers (0.9.4) + rspec-support (~> 3.13.0) + rspec-html-matchers (0.10.0) nokogiri (~> 1) - rspec (>= 3.0.0.a, < 4) - rspec-mocks (3.12.6) + rspec (>= 3.0.0.a) + rspec-mocks (3.13.2) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.12.0) - rspec-rails (4.1.2) - actionpack (>= 4.2) - activesupport (>= 4.2) - railties (>= 4.2) - rspec-core (~> 3.10) - rspec-expectations (~> 3.10) - rspec-mocks (~> 3.10) - rspec-support (~> 3.10) + rspec-support (~> 3.13.0) + rspec-rails (6.1.5) + actionpack (>= 6.1) + activesupport (>= 6.1) + railties (>= 6.1) + rspec-core (~> 3.13) + rspec-expectations (~> 3.13) + rspec-mocks (~> 3.13) + rspec-support (~> 3.13) rspec-retry (0.6.2) rspec-core (> 3.3) - rspec-support (3.12.1) - rspec_junit_formatter (0.3.0) + rspec-support (3.13.1) + rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (1.28.2) + rubocop (1.50.2) + json (~> 2.3) parallel (~> 1.10) - parser (>= 3.1.0.0) + parser (>= 3.2.0.0) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.17.0, < 2.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.28.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.29.0) - parser (>= 3.2.1.0) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.32.3) + parser (>= 3.3.1.0) + rubocop-capybara (2.21.0) + rubocop (~> 1.41) rubocop-faker (1.1.0) faker (>= 2.12.0) rubocop (>= 0.82.0) rubocop-performance (1.6.1) rubocop (>= 0.71.0) - rubocop-rails (2.15.2) + rubocop-rails (2.25.1) activesupport (>= 4.2.0) rack (>= 1.1) - rubocop (>= 1.7.0, < 2.0) - rubocop-rspec (2.11.1) - rubocop (~> 1.19) + rubocop (>= 1.33.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + rubocop-rspec (2.20.0) + rubocop (~> 1.33) + rubocop-capybara (~> 2.17) ruby-progressbar (1.13.0) - ruby-vips (2.1.4) + ruby-vips (2.2.2) ffi (~> 1.12) - ruby2_keywords (0.0.5) - rubyXL (3.4.25) + logger + rubyXL (3.4.27) nokogiri (>= 1.10.8) rubyzip (>= 1.3.0) rubyzip (2.3.2) @@ -742,27 +730,31 @@ GEM sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - selenium-webdriver (4.1.0) - childprocess (>= 0.5, < 5.0) + selenium-webdriver (4.25.0) + base64 (~> 0.2) + logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) - rubyzip (>= 1.2.2) + rubyzip (>= 1.2.2, < 3.0) + websocket (~> 1.0) semantic_range (3.0.0) - seven_zip_ruby (1.3.0) - simplecov (0.21.2) + shakapacker (7.1.0) + activesupport (>= 5.2) + rack-proxy (>= 0.6.1) + railties (>= 5.2) + semantic_range (>= 2.3.0) + simplecov (0.22.0) docile (~> 1.1) simplecov-html (~> 0.11) simplecov_json_formatter (~> 0.1) simplecov-cobertura (2.1.0) rexml simplecov (~> 0.19) - simplecov-html (0.12.3) + simplecov-html (0.13.1) simplecov_json_formatter (0.1.4) smart_properties (1.17.0) snaky_hash (2.0.1) hashie version_gem (~> 1.1, >= 1.1.1) - social-share-button (1.2.4) - coffee-rails spring (2.1.1) spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) @@ -770,44 +762,38 @@ GEM sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) - sprockets-rails (3.4.2) - actionpack (>= 5.2) - activesupport (>= 5.2) + sprockets-rails (3.5.2) + actionpack (>= 6.1) + activesupport (>= 6.1) sprockets (>= 3.0.0) ssrf_filter (1.1.2) - swd (2.0.2) + stringio (3.1.1) + swd (2.0.3) activesupport (>= 3) attr_required (>= 0.0.5) faraday (~> 2.0) faraday-follow_redirects - temple (0.10.2) + temple (0.10.3) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) - thor (1.2.2) - thread_safe (0.3.6) - tilt (2.3.0) - timeout (0.4.0) - tomlrb (2.0.3) + thor (1.3.2) + tilt (2.4.0) + timeout (0.4.1) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - uglifier (4.2.0) + uglifier (4.2.1) execjs (>= 0.3.0, < 3) - unicode-display_width (2.4.2) - valid_email2 (2.3.1) + unicode-display_width (2.6.0) + uniform_notifier (1.16.0) + uri (0.13.1) + valid_email2 (4.0.6) activemodel (>= 3.2) mail (~> 2.5) - validate_email (0.1.6) - activemodel (>= 3.0) - mail (>= 2.2.5) validate_url (1.0.15) activemodel (>= 3.0.0) public_suffix - version_gem (1.1.3) - virtus (2.0.0) - axiom-types (~> 0.1) - coercible (~> 1.0) - descendants_tracker (~> 0.0, >= 0.0.3) + version_gem (1.1.4) w3c_rspec_validators (0.3.0) rails rspec @@ -823,33 +809,29 @@ GEM activemodel (>= 5.0) bindex (>= 0.4.0) railties (>= 5.0) - webfinger (2.1.2) + web-push (3.0.1) + jwt (~> 2.0) + openssl (~> 3.0) + webfinger (2.1.3) activesupport faraday (~> 2.0) faraday-follow_redirects - webmock (3.19.1) + webmock (3.24.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - webpacker (6.0.0.rc.5) - activesupport (>= 5.2) - rack-proxy (>= 0.6.1) - railties (>= 5.2) - semantic_range (>= 2.3.0) - webpush (1.1.0) - hkdf (~> 0.2) - jwt (~> 2.0) + websocket (1.2.11) websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - wicked_pdf (2.7.0) + wicked_pdf (2.8.1) activesupport wisper (2.0.1) wisper-rspec (1.1.0) - wkhtmltopdf-binary (0.12.6.6) + wkhtmltopdf-binary (0.12.6.8) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.6.11) + zeitwerk (2.6.18) PLATFORMS x86_64-linux @@ -858,23 +840,24 @@ DEPENDENCIES bootsnap (~> 1.4) byebug (~> 11.0) codecov - decidim (~> 0.27.0) - decidim-dev (~> 0.27.0) + decidim (~> 0.28.0) + decidim-dev (~> 0.28.0) decidim-helsinki_profile! - faker (~> 2.14) + faker (~> 3.2) letter_opener_web (~> 1.4) listen (~> 3.1) puma (>= 5.0.0) + rubocop (~> 1.28) rubocop-faker rubocop-performance (~> 1.6.0) + rubocop-rspec (= 2.20) spring (~> 2.0) spring-watcher-listen (~> 2.0) uglifier (~> 4.1) web-console (~> 3.7) - webpacker (= 6.0.0.rc.5) RUBY VERSION - ruby 3.0.6p216 + ruby 3.1.1p18 BUNDLED WITH 2.4.12 diff --git a/Rakefile b/Rakefile index 7c0b0c8..0b48bd8 100644 --- a/Rakefile +++ b/Rakefile @@ -6,20 +6,6 @@ def install_module(path) Dir.chdir(path) do system("bundle exec rake decidim_helsinki_profile:install:migrations") system("bundle exec rake db:migrate") - - # Temporary fix to overcome the issue with sass-embedded, see: - # https://github.com/decidim/decidim/pull/11074 - system("npm i sass-embedded@~1.62.0") - end -end - -# Temporary fix to overcome the issue with babel plugin updates, see: -# https://github.com/decidim/decidim/pull/10916 -def fix_babel_config(path) - Dir.chdir(path) do - babel_config = "#{Dir.pwd}/babel.config.json" - File.delete(babel_config) if File.exist?(babel_config) - FileUtils.cp("#{__dir__}/babel.config.json", Dir.pwd) end end @@ -31,7 +17,6 @@ end desc "Generates a dummy app for testing" task test_app: "decidim:generate_external_test_app" do ENV["RAILS_ENV"] = "test" - fix_babel_config("spec/decidim_dummy_app") install_module("spec/decidim_dummy_app") copy_test_initializer("spec/decidim_dummy_app") end @@ -51,6 +36,5 @@ task :development_app do ) end - fix_babel_config("development_app") install_module("development_app") end diff --git a/app/commands/concerns/decidim/helsinki_profile/create_omniauth_registration_override.rb b/app/commands/concerns/decidim/helsinki_profile/create_omniauth_registration_override.rb index e6b9f8b..e9804a3 100644 --- a/app/commands/concerns/decidim/helsinki_profile/create_omniauth_registration_override.rb +++ b/app/commands/concerns/decidim/helsinki_profile/create_omniauth_registration_override.rb @@ -21,8 +21,8 @@ def create_or_find_user def another_user_reserved_email?(email) Decidim::User.unscoped.where.not(id: @user.id).exists?( - organization: organization, - email: email + organization:, + email: ) end end diff --git a/app/controllers/decidim/helsinki_profile/gdpr_api/application_controller.rb b/app/controllers/decidim/helsinki_profile/gdpr_api/application_controller.rb index e9eba32..7e1e5a6 100644 --- a/app/controllers/decidim/helsinki_profile/gdpr_api/application_controller.rb +++ b/app/controllers/decidim/helsinki_profile/gdpr_api/application_controller.rb @@ -33,15 +33,15 @@ def success(data = nil) elsif data render body: data, content_type: "application/json" else - render body: nil, status: :no_content, content_type: "application/json" + head :no_content end end def error(code, message, status: :internal_server_error) render body: { - code: code, - message: message - }, status: status, content_type: "application/json" + code:, + message: + }, status:, content_type: "application/json" end def authorize! diff --git a/app/controllers/decidim/helsinki_profile/omniauth_callbacks_controller.rb b/app/controllers/decidim/helsinki_profile/omniauth_callbacks_controller.rb index 6c87114..2391443 100644 --- a/app/controllers/decidim/helsinki_profile/omniauth_callbacks_controller.rb +++ b/app/controllers/decidim/helsinki_profile/omniauth_callbacks_controller.rb @@ -63,11 +63,13 @@ def helsinki fail_authorize(:identity_bound_to_other_user) end + def failure; end + # This should not do anything as it is a callback for OIDC "silent" # authentication, i.e. when the authentication request was initiated with # `prompt=none`. It could be used for SPA flows to fetch a refresh token. def helsinki_silent - return render body: nil, status: :no_content unless user_signed_in? + return head :no_content unless user_signed_in? render body: "Success" end diff --git a/babel.config.json b/babel.config.json deleted file mode 100644 index 86a38f8..0000000 --- a/babel.config.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", { - "forceAllTransforms": true, - "useBuiltIns": "entry", - "corejs": 3, - "modules": false - } - ], - ["@babel/preset-react"] - ], - "plugins": [ - "@babel/plugin-transform-classes", - [ - "@babel/plugin-transform-runtime", - { - "helpers": false, - "regenerator": true, - "corejs": false - } - ], - ["@babel/plugin-transform-regenerator", { "async": false }] - ] -} diff --git a/decidim-helsinki_profile.gemspec b/decidim-helsinki_profile.gemspec index 2c52fbe..0296e91 100644 --- a/decidim-helsinki_profile.gemspec +++ b/decidim-helsinki_profile.gemspec @@ -7,7 +7,7 @@ require "decidim/helsinki_profile/version" Gem::Specification.new do |spec| spec.name = "decidim-helsinki_profile" spec.version = Decidim::HelsinkiProfile.version - spec.required_ruby_version = ">= 3.0" + spec.required_ruby_version = ">= 3.1" spec.authors = ["Antti Hukkanen"] spec.email = ["antti.hukkanen@mainiotech.fi"] spec.metadata["rubygems_mfa_required"] = "true" diff --git a/lib/decidim/helsinki_profile/authentication/authenticator.rb b/lib/decidim/helsinki_profile/authentication/authenticator.rb index c472451..aedc601 100644 --- a/lib/decidim/helsinki_profile/authentication/authenticator.rb +++ b/lib/decidim/helsinki_profile/authentication/authenticator.rb @@ -54,7 +54,7 @@ def validate! def identify_user!(user) identity = user.identities.find_by( - organization: organization, + organization:, provider: oauth_data[:provider], uid: user_identifier ) @@ -62,7 +62,7 @@ def identify_user!(user) # Check that the identity is not already bound to another user. id = Decidim::Identity.find_by( - organization: organization, + organization:, provider: oauth_data[:provider], uid: user_identifier ) @@ -70,7 +70,7 @@ def identify_user!(user) raise IdentityBoundToOtherUserError if id user.identities.create!( - organization: organization, + organization:, provider: oauth_data[:provider], uid: user_identifier ) @@ -86,7 +86,7 @@ def authorize_user!(user) else authorization = Decidim::Authorization.find_or_initialize_by( name: "helsinki_idp", - user: user + user: ) end diff --git a/lib/decidim/helsinki_profile/gdpr_api/user_serializer.rb b/lib/decidim/helsinki_profile/gdpr_api/user_serializer.rb index 670af3d..088db95 100644 --- a/lib/decidim/helsinki_profile/gdpr_api/user_serializer.rb +++ b/lib/decidim/helsinki_profile/gdpr_api/user_serializer.rb @@ -33,7 +33,7 @@ def user_data end def authorization_data - authorization = Authorization.find_by(user: user, name: "helsinki_idp") + authorization = Authorization.find_by(user:, name: "helsinki_idp") return unless authorization return unless authorization.granted? return if authorization.expired? @@ -69,9 +69,9 @@ def export_value(key, value, record: false) end end name = record ? key.to_s : key.to_s.pluralize - { name: name.upcase, children: children } + { name: name.upcase, children: } else - { key: key.to_s.upcase, value: value } + { key: key.to_s.upcase, value: } end end end diff --git a/lib/decidim/helsinki_profile/test/factories.rb b/lib/decidim/helsinki_profile/test/factories.rb index 027ce8b..6281c05 100644 --- a/lib/decidim/helsinki_profile/test/factories.rb +++ b/lib/decidim/helsinki_profile/test/factories.rb @@ -53,17 +53,17 @@ def municipality_code(municipality_name) nickname { generate(:nickname) } language { "fi" } primary_email { create(:helsinki_profile_email, :primary) } - primary_address { create(:helsinki_profile_address, :primary, locale: locale, city: city, country_code: country_code) } + primary_address { create(:helsinki_profile_address, :primary, locale:, city:, country_code:) } verified_personal_information do create( :helsinki_profile_personal_info, municipality_of_residence: city, - country_code: country_code, + country_code:, address: primary_address, - address_type: address_type, - locale: locale, - first_name: first_name, - last_name: last_name, + address_type:, + locale:, + first_name:, + last_name:, given_name: first_name ) end @@ -96,8 +96,8 @@ def municipality_code(municipality_name) :helsinki_profile_address, *traits, city: municipality_of_residence, - country_code: country_code, - locale: locale + country_code:, + locale: ) end end diff --git a/lib/decidim/helsinki_profile/test/oidc_server.rb b/lib/decidim/helsinki_profile/test/oidc_server.rb index 51447ec..1d2101e 100644 --- a/lib/decidim/helsinki_profile/test/oidc_server.rb +++ b/lib/decidim/helsinki_profile/test/oidc_server.rb @@ -110,7 +110,7 @@ def jwt(payload = {}) } ] }, - scope: scope, + scope:, sid: Faker::Internet.uuid, amr: ["suomi_fi"], loa: "substantial" diff --git a/lib/decidim/helsinki_profile/test/profile_graphql/server.rb b/lib/decidim/helsinki_profile/test/profile_graphql/server.rb index 561087a..eac44b4 100644 --- a/lib/decidim/helsinki_profile/test/profile_graphql/server.rb +++ b/lib/decidim/helsinki_profile/test/profile_graphql/server.rb @@ -19,7 +19,7 @@ def request(req) body = JSON.parse(req.body) raise "Request body does not contain a query" if body["query"].blank? - result = execute(body["query"], current_profile: current_profile) + result = execute(body["query"], current_profile:) { status: 200, @@ -28,9 +28,9 @@ def request(req) end def execute(query, variables: {}, operation_name: nil, current_profile: nil) - context = { current_profile: current_profile, permissions: permissions } + context = { current_profile:, permissions: } - Schema.execute(query, variables: variables, operation_name: operation_name, context: context) + Schema.execute(query, variables:, operation_name:, context:) end def authenticate(authorization) diff --git a/lib/decidim/helsinki_profile/test/test_app/rack/graphql.rb b/lib/decidim/helsinki_profile/test/test_app/rack/graphql.rb index 5f0631d..c41760f 100644 --- a/lib/decidim/helsinki_profile/test/test_app/rack/graphql.rb +++ b/lib/decidim/helsinki_profile/test/test_app/rack/graphql.rb @@ -26,7 +26,7 @@ def serve(request) } result = Decidim::HelsinkiProfile::Test::ProfileGraphql::Schema.execute( body["query"], - context: context, + context:, variables: {}, operation_name: nil ) diff --git a/lib/decidim/helsinki_profile/verification/metadata_collector.rb b/lib/decidim/helsinki_profile/verification/metadata_collector.rb index c88ebd9..95b4152 100644 --- a/lib/decidim/helsinki_profile/verification/metadata_collector.rb +++ b/lib/decidim/helsinki_profile/verification/metadata_collector.rb @@ -36,7 +36,7 @@ def metadata # * Statistics about the voters (customer request) def identity_metadata base_data = { - postal_code: postal_code, + postal_code:, municipality: verified_personal_info[:municipality_of_residence_number], permanent_address: verified_personal_info[:permanent_address].present? }.compact @@ -58,8 +58,8 @@ def identity_metadata date_of_birth = hetu.date_of_birth.to_s base_data.merge( - gender: gender, - date_of_birth: date_of_birth, + gender:, + date_of_birth:, pin_digest: national_id_digest ) end diff --git a/lib/decidim/helsinki_profile/version.rb b/lib/decidim/helsinki_profile/version.rb index 5b862bc..6b3d661 100644 --- a/lib/decidim/helsinki_profile/version.rb +++ b/lib/decidim/helsinki_profile/version.rb @@ -3,11 +3,11 @@ module Decidim module HelsinkiProfile def self.decidim_version - "~> 0.27.0" + "~> 0.28.0" end def self.version - "0.27.0" + "0.28.0" end end end diff --git a/lib/tasks/decidim_helsinki_profile_tasks.rake b/lib/tasks/decidim_helsinki_profile_tasks.rake index a9d93e3..34cd06a 100644 --- a/lib/tasks/decidim_helsinki_profile_tasks.rake +++ b/lib/tasks/decidim_helsinki_profile_tasks.rake @@ -9,16 +9,16 @@ namespace :decidim do uid_signature = Decidim::OmniauthRegistrationForm.create_signature("helsinki", args.uuid) identity = Decidim::Identity.find_by( # Unscoped needed for this to work with the privacy module - user: Decidim::User.unscoped.where(organization: organization), + user: Decidim::User.unscoped.where(organization:), provider: "helsinki", uid: uid_signature ) user = identity.user if identity - user ||= Decidim::User.unscoped.find_by(organization: organization, email: args.email) + user ||= Decidim::User.unscoped.find_by(organization:, email: args.email) user ||= Decidim::User.create!( - organization: organization, + organization:, email: args.email, - nickname: Decidim::UserBaseEntity.nicknamize("helsinkiprofile_test", organization: organization), + nickname: Decidim::UserBaseEntity.nicknamize("helsinkiprofile_test", organization:), name: "Terry Testing", password: "decidim123456789", password_confirmation: "decidim123456789", @@ -29,7 +29,7 @@ namespace :decidim do ) unless identity user.identities.create!( - organization: organization, + organization:, provider: "helsinki", uid: uid_signature ) @@ -48,7 +48,7 @@ namespace :decidim do Decidim::Authorization.create!( name: "helsinki_idp", - user: user, + user:, unique_id: uid_signature, pseudonymized_pin: national_id_digest, granted_at: Time.current, diff --git a/spec/controllers/decidim/helsinki_profile/gdpr_api/v1/profiles_controller_spec.rb b/spec/controllers/decidim/helsinki_profile/gdpr_api/v1/profiles_controller_spec.rb index c7a42a3..6a9108f 100644 --- a/spec/controllers/decidim/helsinki_profile/gdpr_api/v1/profiles_controller_spec.rb +++ b/spec/controllers/decidim/helsinki_profile/gdpr_api/v1/profiles_controller_spec.rb @@ -2,25 +2,25 @@ require "spec_helper" -describe Decidim::HelsinkiProfile::GdprApi::V1::ProfilesController, type: :controller do +describe Decidim::HelsinkiProfile::GdprApi::V1::ProfilesController do routes { Decidim::HelsinkiProfile::Engine.routes } let(:organization) { create(:organization) } - let(:user) { create(:user, :confirmed, organization: organization) } - let!(:identity) { create(:identity, user: user, provider: "helsinki", uid: identity_uid) } + let(:user) { create(:user, :confirmed, organization:) } + let!(:identity) { create(:identity, user:, provider: "helsinki", uid: identity_uid) } let!(:authorization) do create( :authorization, - user: user, + user:, name: "helsinki_idp", unique_id: authorization_unique_id, - pseudonymized_pin: pseudonymized_pin, + pseudonymized_pin:, metadata: authorization_metadata, granted_at: authorization_granted_at ) end let(:identity_uid) do - ::Decidim::OmniauthRegistrationForm.create_signature( + Decidim::OmniauthRegistrationForm.create_signature( "helsinki", profile_uuid ) @@ -115,7 +115,7 @@ end context "when the user is deleted" do - let(:user) { create(:user, :deleted, :confirmed, organization: organization) } + let(:user) { create(:user, :deleted, :confirmed, organization:) } it "responds with 404" do expect(response).to have_http_status(:not_found) @@ -237,7 +237,7 @@ describe "GET show" do it_behaves_like "valid authorization", :ok do - let(:user_data) { JSON.parse(response.body) } + let(:user_data) { response.parsed_body } it "contains the user information" do expect(user_data).to include(export_record(user)) @@ -260,10 +260,10 @@ end context "with comments" do - let(:component) { create(:dummy_component, organization: organization) } - let(:commentable) { create(:dummy_resource, :published, component: component) } - let(:user_comments) { create_list(:comment, 5, author: user, commentable: commentable) } - let(:other_comments) { create_list(:comment, 10, commentable: commentable) } + let(:component) { create(:dummy_component, organization:) } + let(:commentable) { create(:dummy_resource, :published, component:) } + let(:user_comments) { create_list(:comment, 5, author: user, commentable:) } + let(:other_comments) { create_list(:comment, 10, commentable:) } let!(:data) { user_comments && other_comments } @@ -280,9 +280,9 @@ end context "with proposals" do - let(:component) { create(:proposal_component, organization: organization) } - let(:user_proposals) { create_list(:proposal, 5, users: [user], component: component) } - let(:other_proposals) { create_list(:proposal, 10, component: component) } + let(:component) { create(:proposal_component, organization:) } + let(:user_proposals) { create_list(:proposal, 5, users: [user], component:) } + let(:other_proposals) { create_list(:proposal, 10, component:) } let!(:data) { user_proposals && other_proposals } diff --git a/spec/controllers/decidim/helsinki_profile/omniauth_callbacks_controller_spec.rb b/spec/controllers/decidim/helsinki_profile/omniauth_callbacks_controller_spec.rb index 4c2dfa7..6526555 100644 --- a/spec/controllers/decidim/helsinki_profile/omniauth_callbacks_controller_spec.rb +++ b/spec/controllers/decidim/helsinki_profile/omniauth_callbacks_controller_spec.rb @@ -158,7 +158,7 @@ context "when user is signed in" do let(:session) { nil } let!(:confirmed_user) do - create(:user, :confirmed, organization: organization) + create(:user, :confirmed, organization:) end before do @@ -193,7 +193,7 @@ end context "when using remember me" do - let(:confirmed_user) { create(:user, :confirmed, organization: organization) } + let(:confirmed_user) { create(:user, :confirmed, organization:) } before do sign_in confirmed_user @@ -213,9 +213,9 @@ end context "when identity is bound to another user" do - let(:confirmed_user) { create(:user, :confirmed, organization: organization) } - let(:another_user) { create(:user, :confirmed, organization: organization) } - let!(:identity) { create(:identity, user: another_user, provider: "helsinki", uid: profile[:id], organization: organization) } + let(:confirmed_user) { create(:user, :confirmed, organization:) } + let(:another_user) { create(:user, :confirmed, organization:) } + let!(:identity) { create(:identity, user: another_user, provider: "helsinki", uid: profile[:id], organization:) } before do sign_in confirmed_user @@ -242,11 +242,11 @@ describe "GET /users/auth/helsinki/silent" do it "responds with no content" do get("/users/auth/helsinki/silent?code=#{code}&state=#{omniauth_state}", **request_args) - expect(response.code).to eq("204") + expect(response).to have_http_status(:no_content) end context "when the user is signed in" do - let(:user) { create(:user, :confirmed, organization: organization) } + let(:user) { create(:user, :confirmed, organization:) } before do sign_in user @@ -254,7 +254,7 @@ it "responds with success" do get("/users/auth/helsinki/silent?code=#{code}&state=#{omniauth_state}", **request_args) - expect(response.code).to eq("200") + expect(response).to have_http_status(:ok) expect(response.body).to eq("Success") end end diff --git a/spec/controllers/decidim/helsinki_profile/verification/authorizations_controller_spec.rb b/spec/controllers/decidim/helsinki_profile/verification/authorizations_controller_spec.rb index 337841d..58cc38d 100644 --- a/spec/controllers/decidim/helsinki_profile/verification/authorizations_controller_spec.rb +++ b/spec/controllers/decidim/helsinki_profile/verification/authorizations_controller_spec.rb @@ -2,7 +2,7 @@ require "spec_helper" -describe Decidim::HelsinkiProfile::Verification::AuthorizationsController, type: :controller do +describe Decidim::HelsinkiProfile::Verification::AuthorizationsController do routes { Decidim::HelsinkiProfile::Verification::Engine.routes } let(:user) { create(:user, :confirmed) } diff --git a/spec/lib/decidim/helsinki_profile/authentication/authenticator_spec.rb b/spec/lib/decidim/helsinki_profile/authentication/authenticator_spec.rb index 745ff16..96b8c02 100644 --- a/spec/lib/decidim/helsinki_profile/authentication/authenticator_spec.rb +++ b/spec/lib/decidim/helsinki_profile/authentication/authenticator_spec.rb @@ -23,7 +23,7 @@ let(:token) do auth_server.token( sub: oauth_uid, - amr: amr, + amr:, scope: Decidim::HelsinkiProfile.auth_scopes.map(&:to_s).join(" ") ) end @@ -57,7 +57,7 @@ context "when email is available in the OIDC attributes and is reported as verified" do let(:oauth_info) { { email: "user@example.org" } } let(:email_verified) { true } - let(:oauth_raw_info) { base_oauth_raw_info.merge(email_verified: email_verified) } + let(:oauth_raw_info) { base_oauth_raw_info.merge(email_verified:) } context "with suomi_fi" do it "returns the email from OIDC attributes" do @@ -110,7 +110,7 @@ describe "#user_params_from_oauth_hash" do shared_examples_for "expected hash" do it "returns the expected hash" do - signature = ::Decidim::OmniauthRegistrationForm.create_signature( + signature = Decidim::OmniauthRegistrationForm.create_signature( oauth_provider, oauth_uid ) @@ -140,7 +140,7 @@ given_name: "Marja", family_name: "Mainio", national_id_num: "150785-994A", - amr: amr + amr: } end @@ -191,7 +191,7 @@ end describe "#identify_user!" do - let(:user) { create(:user, :confirmed, organization: organization) } + let(:user) { create(:user, :confirmed, organization:) } it "creates a new identity for the user" do id = subject.identify_user!(user) @@ -207,7 +207,7 @@ context "when an identity already exists" do let!(:identity) do user.identities.create!( - organization: organization, + organization:, provider: oauth_provider, uid: oauth_uid ) @@ -226,7 +226,7 @@ let(:old_oauth_uid) { Faker::Internet.uuid } let!(:identity) do user.identities.create!( - organization: organization, + organization:, provider: oauth_provider, uid: old_oauth_uid ) @@ -235,17 +235,17 @@ it "returns a new identity and allows identification" do expect(subject.identify_user!(user).id).not_to eq(identity.id) expect( - Decidim::Identity.where(organization: organization, provider: oauth_provider, user: user).count + Decidim::Identity.where(organization:, provider: oauth_provider, user:).count ).to eq(2) end end context "when a matching identity already exists for another user" do - let(:another_user) { create(:user, :confirmed, organization: organization) } + let(:another_user) { create(:user, :confirmed, organization:) } before do another_user.identities.create!( - organization: organization, + organization:, provider: oauth_provider, uid: oauth_uid ) @@ -262,9 +262,9 @@ end describe "#authorize_user!" do - let(:user) { create(:user, :confirmed, organization: organization) } + let(:user) { create(:user, :confirmed, organization:) } let(:signature) do - ::Decidim::OmniauthRegistrationForm.create_signature( + Decidim::OmniauthRegistrationForm.create_signature( oauth_provider, oauth_uid ) @@ -319,7 +319,7 @@ let!(:authorization) do Decidim::Authorization.create!( name: "helsinki_idp", - user: user, + user:, unique_id: signature ) end @@ -337,7 +337,7 @@ end context "when a matching authorization already exists for another user" do - let(:another_user) { create(:user, :confirmed, organization: organization) } + let(:another_user) { create(:user, :confirmed, organization:) } before do Decidim::Authorization.create!( diff --git a/spec/lib/decidim/helsinki_profile/engine_spec.rb b/spec/lib/decidim/helsinki_profile/engine_spec.rb index fec5e05..68f37d9 100644 --- a/spec/lib/decidim/helsinki_profile/engine_spec.rb +++ b/spec/lib/decidim/helsinki_profile/engine_spec.rb @@ -49,7 +49,7 @@ allow(env).to receive(:[]).with("PATH_INFO").and_return( "/users/auth/helsinki" ) - expect(env).to receive(:[]=).with("devise.mapping", ::Devise.mappings[:user]) + expect(env).to receive(:[]=).with("devise.mapping", Devise.mappings[:user]) allow(Decidim::HelsinkiProfile::OmniauthCallbacksController).to receive( :action ).with(:failure).and_return(action) diff --git a/spec/lib/decidim/helsinki_profile/test/profile_graphql/server_spec.rb b/spec/lib/decidim/helsinki_profile/test/profile_graphql/server_spec.rb index eacdeaf..db89234 100644 --- a/spec/lib/decidim/helsinki_profile/test/profile_graphql/server_spec.rb +++ b/spec/lib/decidim/helsinki_profile/test/profile_graphql/server_spec.rb @@ -10,6 +10,7 @@ describe Decidim::HelsinkiProfile::Test::ProfileGraphql::Server do let(:auth_server) { Decidim::HelsinkiProfile::Test::OidcServer.get(:auth) } let(:auth_token) { auth_server.token(sub: profile[:id]) } + let(:mock_response) { MockResponse.new } let(:response) do Net::HTTP.post( URI.parse(described_class.instance.uri), @@ -32,7 +33,7 @@ end it "runs the GraphQL query" do - expect(response.code).to eq("200") + expect(mock_response.status(response)).to eq(200) expect(response_data).to eq( "myProfile" => { "id" => profile[:id], "firstName" => profile[:first_name] } ) @@ -43,7 +44,7 @@ let(:query) { "myProfile { verifiedPersonalInformation { firstName } }" } it "runs the GraphQL query" do - expect(response.code).to eq("200") + expect(mock_response.status(response)).to eq(200) expect(response_data).to eq( "myProfile" => { "verifiedPersonalInformation" => { "firstName" => profile[:first_name] } } ) @@ -56,7 +57,7 @@ end it "returns an error" do - expect(response.code).to eq("200") + expect(mock_response.status(response)).to eq(200) expect(response_data).to eq( "myProfile" => { "verifiedPersonalInformation" => nil } ) @@ -78,7 +79,7 @@ let(:auth_token) { "foobar" } it "returns errors" do - expect(response.code).to eq("200") + expect(mock_response.status(response)).to eq(200) expect(response_data).to eq("myProfile" => nil) expect(response_errors).to eq( [ @@ -92,4 +93,14 @@ ) end end + + class MockResponse + def status(response) + response.code.to_i + end + + def body(response) + response.body + end + end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index ffc4e8a..a7ad29b 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -45,8 +45,7 @@ :nickname_included_in_password?, # :email_included_in_password?, :domain_included_in_password?, - :password_too_common?, - :blacklisted? + :password_too_common? ].freeze ) end From 629f344c0b9ef3b59500249e6f8e2903d36d5df4 Mon Sep 17 00:00:00 2001 From: Joonas Date: Tue, 22 Oct 2024 12:28:09 +0300 Subject: [PATCH 2/2] Add autocomplete version lock --- Rakefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Rakefile b/Rakefile index 0b48bd8..354ab1b 100644 --- a/Rakefile +++ b/Rakefile @@ -6,6 +6,8 @@ def install_module(path) Dir.chdir(path) do system("bundle exec rake decidim_helsinki_profile:install:migrations") system("bundle exec rake db:migrate") + + system("npm i '@tarekraafat/autocomplete.js@<=10.2.7'") end end