diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 2303bab6..7995a1d5 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1,297 +1,310 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
-# on 2022-10-08 12:00:00 UTC using RuboCop version 1.36.0.
+# on 2023-05-26 14:15:44 UTC using RuboCop version 1.50.2.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
-# Offense count: 28
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include.
-# Include: **/*.gemfile, **/Gemfile, **/gems.rb
-Bundler/OrderedGems:
+# Offense count: 2
+# Configuration parameters: EnforcedStyle, AllowedGems, Include.
+# SupportedStyles: Gemfile, gems.rb, gemspec
+# Include: **/*.gemspec, **/Gemfile, **/gems.rb
+Gemspec/DevelopmentDependencies:
Exclude:
- - "Gemfile"
+ - 'plugins/messages/foodsoft_messages.gemspec'
+ - 'plugins/wiki/foodsoft_wiki.gemspec'
# Offense count: 9
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: Include.
-# Include: **/*.gemspec
-Gemspec/RequireMFA:
- Exclude:
- - "plugins/current_orders/foodsoft_current_orders.gemspec"
- - "plugins/discourse/foodsoft_discourse.gemspec"
- - "plugins/documents/foodsoft_documents.gemspec"
- - "plugins/links/foodsoft_links.gemspec"
- - "plugins/messages/foodsoft_messages.gemspec"
- - "plugins/polls/foodsoft_polls.gemspec"
- - "plugins/printer/foodsoft_printer.gemspec"
- - "plugins/uservoice/foodsoft_uservoice.gemspec"
- - "plugins/wiki/foodsoft_wiki.gemspec"
-
-# Offense count: 9
-# Configuration parameters: Include.
+# Configuration parameters: Severity, Include.
# Include: **/*.gemspec
Gemspec/RequiredRubyVersion:
Exclude:
- - "plugins/current_orders/foodsoft_current_orders.gemspec"
- - "plugins/discourse/foodsoft_discourse.gemspec"
- - "plugins/documents/foodsoft_documents.gemspec"
- - "plugins/links/foodsoft_links.gemspec"
- - "plugins/messages/foodsoft_messages.gemspec"
- - "plugins/polls/foodsoft_polls.gemspec"
- - "plugins/printer/foodsoft_printer.gemspec"
- - "plugins/uservoice/foodsoft_uservoice.gemspec"
- - "plugins/wiki/foodsoft_wiki.gemspec"
+ - 'plugins/current_orders/foodsoft_current_orders.gemspec'
+ - 'plugins/discourse/foodsoft_discourse.gemspec'
+ - 'plugins/documents/foodsoft_documents.gemspec'
+ - 'plugins/links/foodsoft_links.gemspec'
+ - 'plugins/messages/foodsoft_messages.gemspec'
+ - 'plugins/polls/foodsoft_polls.gemspec'
+ - 'plugins/printer/foodsoft_printer.gemspec'
+ - 'plugins/uservoice/foodsoft_uservoice.gemspec'
+ - 'plugins/wiki/foodsoft_wiki.gemspec'
-# Offense count: 8
-# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
-Lint/AmbiguousBlockAssociation:
- Exclude:
- - "lib/foodsoft/expansion_variables.rb"
- - "spec/api/v1/user/financial_transactions_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/models/article_spec.rb"
-
-# Offense count: 4
+# Offense count: 12
# This cop supports safe autocorrection (--autocorrect).
-Lint/AmbiguousOperatorPrecedence:
+# Configuration parameters: EnforcedStyle, IndentationWidth.
+# SupportedStyles: with_first_argument, with_fixed_indentation
+Layout/ArgumentAlignment:
Exclude:
- - "app/models/concerns/price_calculation.rb"
- - "db/seeds/seed_helper.rb"
- - "plugins/messages/app/mail_receivers/messages_mail_receiver.rb"
- - "plugins/wiki/app/helpers/pages_helper.rb"
+ - 'app/controllers/articles_controller.rb'
+ - 'app/models/ordergroup.rb'
+ - 'config/initializers/currency_display.rb'
+ - 'db/migrate/001_create_users.rb'
+ - 'db/migrate/002_create_groups.rb'
+ - 'db/migrate/008_create_orders.rb'
+ - 'plugins/current_orders/app/helpers/current_orders_helper.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyleAlignWith.
+# SupportedStylesAlignWith: either, start_of_block, start_of_line
+Layout/BlockAlignment:
+ Exclude:
+ - 'app/lib/foodsoft_config.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+Layout/BlockEndNewline:
+ Exclude:
+ - 'app/lib/foodsoft_config.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+Layout/ClosingParenthesisIndentation:
+ Exclude:
+ - 'app/controllers/concerns/auth.rb'
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
-Lint/AmbiguousRegexpLiteral:
+Layout/EmptyLineAfterGuardClause:
Exclude:
- - "app/models/article_category.rb"
- - "lib/foodsoft/expansion_variables.rb"
+ - 'db/migrate/20130622095040_move_weekly_tasks.rb'
+ - 'db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb'
-# Offense count: 40
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+Layout/EmptyLinesAroundMethodBody:
+ Exclude:
+ - 'db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb'
+
+# Offense count: 2
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
+Layout/ExtraSpacing:
+ Exclude:
+ - 'db/migrate/021_remove_table_article_prices.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle, IndentationWidth.
+# SupportedStyles: consistent, consistent_relative_to_receiver, special_for_inner_method_call, special_for_inner_method_call_in_parentheses
+Layout/FirstArgumentIndentation:
+ Exclude:
+ - 'app/controllers/concerns/auth.rb'
+
+# Offense count: 12
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
+# SupportedHashRocketStyles: key, separator, table
+# SupportedColonStyles: key, separator, table
+# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
+Layout/HashAlignment:
+ Exclude:
+ - 'app/controllers/admin/ordergroups_controller.rb'
+ - 'app/controllers/orders_controller.rb'
+ - 'app/documents/order_fax.rb'
+ - 'db/migrate/001_create_users.rb'
+ - 'db/migrate/002_create_groups.rb'
+ - 'db/migrate/008_create_orders.rb'
+ - 'db/migrate/20190101000000_create_active_storage_tables.active_storage.rb'
+ - 'spec/lib/bank_transaction_reference_spec.rb'
+
+# Offense count: 6
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: normal, indented_internal_methods
+Layout/IndentationConsistency:
+ Exclude:
+ - 'db/migrate/20090120184410_road_to_version_three.rb'
+ - 'db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb'
+
+# Offense count: 2
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: Width, AllowedPatterns.
+Layout/IndentationWidth:
+ Exclude:
+ - 'app/lib/foodsoft_config.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: symmetrical, new_line, same_line
+Layout/MultilineMethodCallBraceLayout:
+ Exclude:
+ - 'app/controllers/concerns/auth.rb'
+
+# Offense count: 15
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowInHeredoc.
+Layout/TrailingWhitespace:
+ Exclude:
+ - 'app/controllers/admin/ordergroups_controller.rb'
+ - 'app/controllers/articles_controller.rb'
+ - 'app/controllers/orders_controller.rb'
+ - 'app/documents/order_fax.rb'
+ - 'app/models/ordergroup.rb'
+ - 'config/initializers/currency_display.rb'
+ - 'db/migrate/001_create_users.rb'
+ - 'db/migrate/002_create_groups.rb'
+ - 'db/migrate/008_create_orders.rb'
+ - 'db/migrate/20190101000000_create_active_storage_tables.active_storage.rb'
+ - 'db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb'
+ - 'plugins/current_orders/app/helpers/current_orders_helper.rb'
+ - 'spec/lib/bank_transaction_reference_spec.rb'
+
+# Offense count: 41
+# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowSafeAssignment.
Lint/AssignmentInCondition:
Enabled: false
-# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-Lint/BigDecimalNew:
- Exclude:
- - "app/models/group_order.rb"
- - "config/initializers/extensions.rb"
-
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Lint/BooleanSymbol:
Exclude:
- - "app/models/delivery.rb"
+ - 'app/models/delivery.rb'
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-Lint/DeprecatedClassMethods:
- Exclude:
- - "config/initializers/secret_token.rb"
- - "lib/tasks/foodsoft_setup.rake"
-
-# Offense count: 3
+# Offense count: 4
# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches.
Lint/DuplicateBranch:
Exclude:
- - "app/controllers/concerns/auth_api.rb"
- - "app/controllers/orders_controller.rb"
+ - 'app/controllers/concerns/auth_api.rb'
+ - 'app/controllers/orders_controller.rb'
+ - 'plugins/wiki/app/controllers/pages_controller.rb'
# Offense count: 3
Lint/DuplicateMethods:
Exclude:
- - "app/models/invoice.rb"
- - "plugins/messages/app/models/message.rb"
+ - 'app/models/invoice.rb'
+ - 'plugins/messages/app/models/message.rb'
# Offense count: 2
# Configuration parameters: AllowComments, AllowEmptyLambdas.
Lint/EmptyBlock:
Exclude:
- - "spec/factories/group_order_article.rb"
- - "spec/factories/group_order_article_quantity.rb"
+ - 'spec/factories/group_order_article.rb'
+ - 'spec/factories/group_order_article_quantity.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Lint/EnsureReturn:
Exclude:
- - "app/controllers/finance/bank_accounts_controller.rb"
+ - 'app/controllers/finance/bank_accounts_controller.rb'
-# Offense count: 2
+# Offense count: 1
Lint/IneffectiveAccessModifier:
Exclude:
- - "lib/foodsoft_mail_receiver.rb"
- - "lib/token_verifier.rb"
+ - 'app/lib/foodsoft_mail_receiver.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Lint/Loop:
Exclude:
- - "app/models/concerns/mark_as_deleted_with_name.rb"
+ - 'app/models/concerns/mark_as_deleted_with_name.rb'
# Offense count: 2
Lint/MixedRegexpCaptureTypes:
Exclude:
- - "lib/bank_transaction_reference.rb"
- - "lib/foodsoft_mail_receiver.rb"
+ - 'app/lib/bank_transaction_reference.rb'
+ - 'app/lib/foodsoft_mail_receiver.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Lint/NonDeterministicRequireOrder:
Exclude:
- - "spec/spec_helper.rb"
+ - 'spec/spec_helper.rb'
# Offense count: 1
Lint/ReturnInVoidContext:
Exclude:
- - "lib/foodsoft_config.rb"
-
-# Offense count: 4
-# This cop supports safe autocorrection (--autocorrect).
-Lint/SendWithMixinArgument:
- Exclude:
- - "plugins/discourse/lib/foodsoft_discourse/redirect_to_login.rb"
- - "plugins/messages/lib/foodsoft_messages/user_link.rb"
- - "plugins/uservoice/lib/foodsoft_uservoice.rb"
- - "plugins/wiki/lib/foodsoft_wiki/mailer.rb"
+ - 'app/lib/foodsoft_config.rb'
# Offense count: 1
# Configuration parameters: IgnoreImplicitReferences.
Lint/ShadowedArgument:
Exclude:
- - "app/helpers/deliveries_helper.rb"
+ - 'app/helpers/deliveries_helper.rb'
-# Offense count: 8
+# Offense count: 6
Lint/ShadowingOuterLocalVariable:
Exclude:
- - "app/documents/order_matrix.rb"
- - "app/helpers/group_orders_helper.rb"
- - "app/models/group_order.rb"
- - "app/models/group_order_article.rb"
- - "plugins/discourse/app/controllers/discourse_login_controller.rb"
- - "plugins/polls/app/controllers/polls_controller.rb"
- - "spec/integration/config_spec.rb"
+ - 'app/documents/order_matrix.rb'
+ - 'app/helpers/group_orders_helper.rb'
+ - 'app/models/group_order.rb'
+ - 'app/models/group_order_article.rb'
+ - 'plugins/discourse/app/controllers/discourse_login_controller.rb'
+ - 'plugins/polls/app/controllers/polls_controller.rb'
-# Offense count: 3
+# Offense count: 2
# Configuration parameters: AllowComments, AllowNil.
Lint/SuppressedException:
Exclude:
- - "config/initializers/rails6_backports.rb"
- - "lib/foodsoft_config.rb"
- - "lib/tasks/rspec.rake"
+ - 'app/lib/foodsoft_config.rb'
+ - 'lib/tasks/rspec.rake'
# Offense count: 1
# Configuration parameters: AllowKeywordBlockArguments.
Lint/UnderscorePrefixedVariableName:
Exclude:
- - "app/models/order_article.rb"
-
-# Offense count: 16
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
-Lint/UnusedBlockArgument:
- Exclude:
- - "app/models/article.rb"
- - "app/models/group_order.rb"
- - "config/initializers/exception_notification.rb"
- - "plugins/printer/lib/foodsoft_printer/engine.rb"
- - "plugins/uservoice/lib/foodsoft_uservoice.rb"
- - "plugins/wiki/lib/foodsoft_wiki/wiki_parser.rb"
- - "spec/factories/supplier.rb"
- - "spec/factories/user.rb"
- - "spec/integration/config_spec.rb"
- - "spec/models/article_spec.rb"
-
-# Offense count: 23
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
-Lint/UnusedMethodArgument:
- Exclude:
- - "app/controllers/api/v1/base_controller.rb"
- - "app/controllers/concerns/foodcoop_scope.rb"
- - "app/helpers/application_helper.rb"
- - "app/models/article.rb"
- - "app/models/article_category.rb"
- - "app/models/financial_transaction.rb"
- - "app/models/group_order.rb"
- - "app/models/group_order_article.rb"
- - "app/models/order.rb"
- - "app/models/order_article.rb"
- - "app/models/supplier.rb"
- - "lib/foodsoft_mail_receiver.rb"
- - "lib/order_txt.rb"
- - "lib/render_pdf.rb"
- - "plugins/wiki/lib/foodsoft_wiki/mailer.rb"
-
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: ContextCreatingMethods, MethodCreatingMethods.
-Lint/UselessAccessModifier:
- Exclude:
- - "lib/token_verifier.rb"
- - "plugins/messages/app/models/messagegroup.rb"
+ - 'app/models/order_article.rb'
# Offense count: 14
Lint/UselessAssignment:
Exclude:
- - "app/controllers/admin/ordergroups_controller.rb"
- - "app/helpers/admin/configs_helper.rb"
- - "app/inputs/date_picker_time_input.rb"
- - "app/models/order_article.rb"
- - "db/migrate/003_create_suppliers.rb"
- - "db/migrate/004_create_article_meta.rb"
- - "db/migrate/005_create_financial_transactions.rb"
- - "db/migrate/008_create_orders.rb"
- - "db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_articles.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_groups.rb"
- - "spec/lib/foodsoft_config_spec.rb"
+ - 'app/controllers/admin/ordergroups_controller.rb'
+ - 'app/helpers/admin/configs_helper.rb'
+ - 'app/inputs/date_picker_time_input.rb'
+ - 'app/models/order_article.rb'
+ - 'db/migrate/003_create_suppliers.rb'
+ - 'db/migrate/004_create_article_meta.rb'
+ - 'db/migrate/005_create_financial_transactions.rb'
+ - 'db/migrate/008_create_orders.rb'
+ - 'db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb'
+ - 'plugins/current_orders/app/documents/multiple_orders_by_articles.rb'
+ - 'plugins/current_orders/app/documents/multiple_orders_by_groups.rb'
+ - 'spec/lib/foodsoft_config_spec.rb'
# Offense count: 1
# Configuration parameters: CheckForMethodsWithNoSideEffects.
Lint/Void:
Exclude:
- - "lib/foodsoft_config.rb"
+ - 'app/lib/foodsoft_config.rb'
-# Offense count: 160
-# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, CountRepeatedAttributes.
+# Offense count: 161
+# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
Metrics/AbcSize:
Max: 143
-# Offense count: 17
-# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods, inherit_mode.
+# Offense count: 13
+# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
# AllowedMethods: refine
Metrics/BlockLength:
- Max: 210
+ Max: 66
-# Offense count: 6
+# Offense count: 2
# Configuration parameters: CountBlocks.
Metrics/BlockNesting:
- Max: 5
+ Max: 4
-# Offense count: 18
+# Offense count: 19
# Configuration parameters: CountComments, CountAsOne.
Metrics/ClassLength:
- Max: 288
+ Max: 294
-# Offense count: 52
-# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
+# Offense count: 51
+# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/CyclomaticComplexity:
- Max: 22
+ Max: 20
-# Offense count: 163
-# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
+# Offense count: 164
+# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
Metrics/MethodLength:
Max: 112
# Offense count: 4
# Configuration parameters: CountComments, CountAsOne.
Metrics/ModuleLength:
- Max: 190
+ Max: 191
# Offense count: 1
# Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
@@ -299,47 +312,45 @@ Metrics/ParameterLists:
Max: 6
# Offense count: 36
-# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
+# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/PerceivedComplexity:
- Max: 23
+ Max: 21
# Offense count: 6
Naming/AccessorMethodName:
Exclude:
- - "app/controllers/admin/configs_controller.rb"
- - "lib/bank_account_connector.rb"
- - "lib/foodsoft_config.rb"
- - "spec/integration/config_spec.rb"
+ - 'app/controllers/admin/configs_controller.rb'
+ - 'app/lib/bank_account_connector.rb'
+ - 'app/lib/foodsoft_config.rb'
+ - 'spec/integration/config_spec.rb'
# Offense count: 1
# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
Naming/BlockParameterName:
Exclude:
- - "db/migrate/008_create_orders.rb"
+ - 'db/migrate/008_create_orders.rb'
# Offense count: 1
# Configuration parameters: EnforcedStyleForLeadingUnderscores.
# SupportedStylesForLeadingUnderscores: disallowed, required, optional
Naming/MemoizedInstanceVariableName:
Exclude:
- - "plugins/messages/app/models/message.rb"
+ - 'plugins/messages/app/models/message.rb'
-# Offense count: 19
+# Offense count: 16
# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
-# AllowedNames: as, at, by, db, id, in, io, ip, of, on, os, pp, to
+# AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to
Naming/MethodParameterName:
Exclude:
- - "app/controllers/api/v1/base_controller.rb"
- - "app/controllers/api/v1/user/group_order_articles_controller.rb"
- - "app/helpers/application_helper.rb"
- - "app/helpers/orders_helper.rb"
- - "app/models/user.rb"
- - "lib/foodsoft_date_util.rb"
- - "lib/render_pdf.rb"
- - "spec/integration/config_spec.rb"
- - "spec/integration/receive_spec.rb"
- - "spec/models/order_article_spec.rb"
- - "spec/support/shared_database.rb"
+ - 'app/controllers/api/v1/base_controller.rb'
+ - 'app/controllers/api/v1/user/group_order_articles_controller.rb'
+ - 'app/helpers/application_helper.rb'
+ - 'app/helpers/orders_helper.rb'
+ - 'app/models/user.rb'
+ - 'spec/integration/config_spec.rb'
+ - 'spec/integration/receive_spec.rb'
+ - 'spec/models/order_article_spec.rb'
+ - 'spec/support/shared_database.rb'
# Offense count: 11
# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
@@ -349,217 +360,165 @@ Naming/MethodParameterName:
# MethodDefinitionMacros: define_method, define_singleton_method
Naming/PredicateName:
Exclude:
- - "app/models/financial_transaction_class.rb"
- - "app/models/financial_transaction_type.rb"
- - "app/models/order.rb"
- - "app/models/periodic_task_group.rb"
- - "app/models/supplier.rb"
- - "app/models/task.rb"
- - "app/models/user.rb"
- - "app/serializers/order_serializer.rb"
- - "plugins/messages/app/models/message.rb"
+ - 'app/models/financial_transaction_class.rb'
+ - 'app/models/financial_transaction_type.rb'
+ - 'app/models/order.rb'
+ - 'app/models/periodic_task_group.rb'
+ - 'app/models/supplier.rb'
+ - 'app/models/task.rb'
+ - 'app/models/user.rb'
+ - 'app/serializers/order_serializer.rb'
+ - 'plugins/messages/app/models/message.rb'
-# Offense count: 45
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: PreferredName.
-Naming/RescuedExceptionsVariableName:
- Enabled: false
-
-# Offense count: 22
+# Offense count: 17
# Configuration parameters: EnforcedStyle, AllowedIdentifiers, AllowedPatterns.
# SupportedStyles: snake_case, camelCase
Naming/VariableName:
Exclude:
- - "app/controllers/concerns/auth.rb"
- - "app/helpers/application_helper.rb"
- - "db/migrate/008_create_orders.rb"
- - "lib/bank_account_information_importer.rb"
-
-# Offense count: 23
-# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
-# SupportedStyles: snake_case, normalcase, non_integer
-# AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339
-Naming/VariableNumber:
- Exclude:
- - "app/documents/order_matrix.rb"
- - "spec/api/v1/swagger_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/api/v1/user/ordergroup_spec.rb"
+ - 'app/controllers/concerns/auth.rb'
+ - 'app/helpers/application_helper.rb'
+ - 'db/migrate/008_create_orders.rb'
# Offense count: 4
-RSpec/AnyInstance:
+# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
+# SupportedStyles: snake_case, normalcase, non_integer
+# AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339, x86_64
+Naming/VariableNumber:
Exclude:
- - "spec/api/v1/swagger_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
+ - 'app/documents/order_matrix.rb'
# Offense count: 2
RSpec/BeforeAfterAll:
Exclude:
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
+ - 'spec/lib/foodsoft_mail_receiver_spec.rb'
-# Offense count: 9
+# Offense count: 10
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnabledMethods.
RSpec/Capybara/FeatureMethods:
Exclude:
- - "spec/integration/articles_spec.rb"
- - "spec/integration/balancing_spec.rb"
- - "spec/integration/config_spec.rb"
- - "spec/integration/home_spec.rb"
- - "spec/integration/login_spec.rb"
- - "spec/integration/order_spec.rb"
- - "spec/integration/product_distribution_example_spec.rb"
- - "spec/integration/receive_spec.rb"
- - "spec/integration/session_spec.rb"
- - "spec/integration/supplier_spec.rb"
+ - 'spec/integration/articles_spec.rb'
+ - 'spec/integration/balancing_spec.rb'
+ - 'spec/integration/config_spec.rb'
+ - 'spec/integration/home_spec.rb'
+ - 'spec/integration/login_spec.rb'
+ - 'spec/integration/order_spec.rb'
+ - 'spec/integration/product_distribution_example_spec.rb'
+ - 'spec/integration/receive_spec.rb'
+ - 'spec/integration/session_spec.rb'
+ - 'spec/integration/supplier_spec.rb'
# Offense count: 4
RSpec/Capybara/SpecificMatcher:
Exclude:
- - "spec/integration/login_spec.rb"
- - "spec/integration/session_spec.rb"
+ - 'spec/integration/login_spec.rb'
+ - 'spec/integration/session_spec.rb'
-# Offense count: 27
+# Offense count: 12
# Configuration parameters: Prefixes, AllowedPatterns.
# Prefixes: when, with, without
RSpec/ContextWording:
Exclude:
- - "spec/api/v1/swagger_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/models/order_article_spec.rb"
- - "spec/models/supplier_spec.rb"
+ - 'spec/models/order_article_spec.rb'
+ - 'spec/models/supplier_spec.rb'
-# Offense count: 1
+# Offense count: 7
# Configuration parameters: IgnoredMetadata.
RSpec/DescribeClass:
Exclude:
- - "spec/api/v1/swagger_spec.rb"
+ - 'spec/integration/balancing_spec.rb'
+ - 'spec/integration/config_spec.rb'
+ - 'spec/integration/home_spec.rb'
+ - 'spec/integration/product_distribution_example_spec.rb'
+ - 'spec/integration/receive_spec.rb'
+ - 'spec/integration/session_spec.rb'
+ - 'spec/integration/supplier_spec.rb'
-# Offense count: 126
+# Offense count: 128
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: SkipBlocks, EnforcedStyle.
# SupportedStyles: described_class, explicit
RSpec/DescribedClass:
Exclude:
- - "spec/lib/bank_transaction_reference_spec.rb"
- - "spec/lib/foodsoft_config_spec.rb"
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
- - "spec/lib/token_verifier_spec.rb"
- - "spec/models/group_order_article_spec.rb"
- - "spec/models/order_article_spec.rb"
- - "spec/models/order_spec.rb"
- - "spec/models/ordergroup_spec.rb"
- - "spec/models/user_spec.rb"
+ - 'spec/integration/order_spec.rb'
+ - 'spec/lib/bank_transaction_reference_spec.rb'
+ - 'spec/lib/foodsoft_config_spec.rb'
+ - 'spec/lib/foodsoft_mail_receiver_spec.rb'
+ - 'spec/lib/token_verifier_spec.rb'
+ - 'spec/models/group_order_article_spec.rb'
+ - 'spec/models/order_article_spec.rb'
+ - 'spec/models/order_spec.rb'
+ - 'spec/models/ordergroup_spec.rb'
+ - 'spec/models/user_spec.rb'
-# Offense count: 15
+# Offense count: 14
# This cop supports unsafe autocorrection (--autocorrect-all).
RSpec/EmptyExampleGroup:
Exclude:
- # exclude for rswag tests:
- - 'spec/requests/api/**/*_spec.rb'
+ - 'spec/requests/api/v1/article_categories_controller_spec.rb'
+ - 'spec/requests/api/v1/configs_controller_spec.rb'
+ - 'spec/requests/api/v1/financial_transaction_classes_controller_spec.rb'
+ - 'spec/requests/api/v1/financial_transaction_types_controller_spec.rb'
+ - 'spec/requests/api/v1/financial_transactions_controller_spec.rb'
+ - 'spec/requests/api/v1/navigations_controller_spec.rb'
+ - 'spec/requests/api/v1/order_articles_controller_spec.rb'
+ - 'spec/requests/api/v1/orders_controller_spec.rb'
+ - 'spec/requests/api/v1/user/group_order_articles_spec.rb'
+ - 'spec/requests/api/v1/user/users_spec.rb'
-
-
-# Offense count: 65
+# Offense count: 69
# Configuration parameters: CountAsOne.
RSpec/ExampleLength:
Max: 81
-# Offense count: 7
+# Offense count: 3
# Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly.
# Include: **/*_spec*rb*, **/spec/**/*
RSpec/FilePath:
Exclude:
- - "spec/api/v1/order_articles_spec.rb"
- - "spec/api/v1/user/financial_transactions_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/api/v1/user/ordergroup_spec.rb"
- - "spec/integration/articles_spec.rb"
- - "spec/integration/login_spec.rb"
- - "spec/lib/bank_account_information_importer_spec.rb"
-
-# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: implicit, each, example
-RSpec/HookArgument:
- Exclude:
- - "spec/spec_helper.rb"
-
-# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-RSpec/HooksBeforeExamples:
- Exclude:
- - "spec/integration/balancing_spec.rb"
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: single_line_only, single_statement_only, disallow
-RSpec/ImplicitSubject:
- Exclude:
- - "spec/api/v1/swagger_spec.rb"
+ - 'spec/integration/articles_spec.rb'
+ - 'spec/integration/login_spec.rb'
+ - 'spec/lib/bank_account_information_importer_spec.rb'
# Offense count: 6
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
Exclude:
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
+ - 'spec/lib/foodsoft_mail_receiver_spec.rb'
-# Offense count: 2
+# Offense count: 3
RSpec/IteratedExpectation:
Exclude:
- - "spec/models/order_spec.rb"
- - "spec/models/supplier_spec.rb"
+ - 'spec/models/order_spec.rb'
+ - 'spec/models/supplier_spec.rb'
-# Offense count: 13
+# Offense count: 3
RSpec/LetSetup:
Exclude:
- - "spec/api/v1/swagger_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/api/v1/user/ordergroup_spec.rb"
- - "spec/models/bank_transaction_spec.rb"
- - "spec/models/group_order_article_spec.rb"
- - "spec/models/supplier_spec.rb"
+ - 'spec/models/bank_transaction_spec.rb'
+ - 'spec/models/group_order_article_spec.rb'
+ - 'spec/models/supplier_spec.rb'
# Offense count: 3
RSpec/MissingExampleGroupArgument:
Exclude:
- - "spec/models/group_order_article_spec.rb"
- - "spec/models/group_order_spec.rb"
- - "spec/models/user_spec.rb"
+ - 'spec/models/group_order_article_spec.rb'
+ - 'spec/models/group_order_spec.rb'
+ - 'spec/models/user_spec.rb'
-# Offense count: 88
+# Offense count: 103
RSpec/MultipleExpectations:
Max: 22
-# Offense count: 83
+# Offense count: 36
# Configuration parameters: AllowSubject.
RSpec/MultipleMemoizedHelpers:
- Max: 17
+ Max: 15
-# Offense count: 29
+# Offense count: 8
# Configuration parameters: AllowedGroups.
RSpec/NestedGroups:
- Max: 6
-
-# Offense count: 31
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: not_to, to_not
-RSpec/NotToNot:
- Exclude:
- - "spec/api/v1/user/financial_transactions_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/integration/balancing_spec.rb"
- - "spec/integration/login_spec.rb"
- - "spec/integration/receive_spec.rb"
- - "spec/integration/session_spec.rb"
- - "spec/lib/token_verifier_spec.rb"
- - "spec/models/article_spec.rb"
- - "spec/models/order_spec.rb"
- - "spec/models/supplier_spec.rb"
+ Max: 4
# Offense count: 8
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -567,92 +526,61 @@ RSpec/NotToNot:
# SupportedStyles: inflected, explicit
RSpec/PredicateMatcher:
Exclude:
- - "spec/models/article_spec.rb"
- - "spec/models/user_spec.rb"
+ - 'spec/models/article_spec.rb'
+ - 'spec/models/user_spec.rb'
# Offense count: 6
RSpec/RepeatedDescription:
Exclude:
- - "spec/lib/bank_account_information_importer_spec.rb"
- - "spec/lib/bank_transaction_reference_spec.rb"
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
+ - 'spec/lib/bank_account_information_importer_spec.rb'
+ - 'spec/lib/bank_transaction_reference_spec.rb'
+ - 'spec/lib/foodsoft_mail_receiver_spec.rb'
# Offense count: 4
RSpec/RepeatedExample:
Exclude:
- - "spec/lib/bank_transaction_reference_spec.rb"
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
+ - 'spec/lib/bank_transaction_reference_spec.rb'
+ - 'spec/lib/foodsoft_mail_receiver_spec.rb'
-# Offense count: 7
+# Offense count: 5
RSpec/ScatteredSetup:
Exclude:
- - "spec/api/v1/user/ordergroup_spec.rb"
- - "spec/integration/balancing_spec.rb"
- - "spec/integration/login_spec.rb"
-
-# Offense count: 4
-# Configuration parameters: AllowedPatterns, IgnoredPatterns.
-# SupportedStyles: snake_case, camelCase
-RSpec/VariableName:
- EnforcedStyle: snake_case
- AllowedPatterns:
- - ^Authorization$
+ - 'spec/integration/balancing_spec.rb'
+ - 'spec/integration/login_spec.rb'
# Offense count: 1
# Configuration parameters: IgnoreNameless, IgnoreSymbolicNames.
RSpec/VerifiedDoubles:
Exclude:
- - "spec/support/api_oauth.rb"
-
-# Offense count: 45
-# This cop supports unsafe autocorrection (--autocorrect-all).
-Rails/ActiveRecordAliases:
- Enabled: false
-
-# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/ActiveRecordCallbacksOrder:
- Exclude:
- - "app/models/financial_transaction_type.rb"
- - "app/models/order.rb"
- - "app/models/stock_change.rb"
+ - 'spec/support/api_oauth.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationMailer:
Exclude:
- - "app/mailers/mailer.rb"
+ - 'app/mailers/mailer.rb'
# Offense count: 20
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationRecord:
Exclude:
- - "app/models/supplier_category.rb"
- - "db/migrate/20130718183101_migrate_user_settings.rb"
- - "db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb"
- - "db/migrate/20181201000301_change_ordergroup_default_in_financial_transaction.rb"
- - "db/migrate/20181201000302_change_stock_supplier_to_null_in_order.rb"
- - "db/migrate/20181201000305_ensure_article_for_article_price.rb"
- - "db/migrate/20181201000400_create_supplier_categories.rb"
- - "db/migrate/20181204000000_clear_invalid_invoices_from_orders.rb"
- - "db/migrate/20181204070000_create_stock_events.rb"
- - "plugins/messages/app/models/message_recipient.rb"
- - "plugins/polls/app/models/poll.rb"
- - "plugins/polls/app/models/poll_choice.rb"
- - "plugins/polls/app/models/poll_vote.rb"
- - "plugins/printer/app/models/printer_job.rb"
- - "plugins/printer/app/models/printer_job_update.rb"
+ - 'app/models/supplier_category.rb'
+ - 'db/migrate/20130718183101_migrate_user_settings.rb'
+ - 'db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb'
+ - 'db/migrate/20181201000301_change_ordergroup_default_in_financial_transaction.rb'
+ - 'db/migrate/20181201000302_change_stock_supplier_to_null_in_order.rb'
+ - 'db/migrate/20181201000305_ensure_article_for_article_price.rb'
+ - 'db/migrate/20181201000400_create_supplier_categories.rb'
+ - 'db/migrate/20181204000000_clear_invalid_invoices_from_orders.rb'
+ - 'db/migrate/20181204070000_create_stock_events.rb'
+ - 'plugins/messages/app/models/message_recipient.rb'
+ - 'plugins/polls/app/models/poll.rb'
+ - 'plugins/polls/app/models/poll_choice.rb'
+ - 'plugins/polls/app/models/poll_vote.rb'
+ - 'plugins/printer/app/models/printer_job.rb'
+ - 'plugins/printer/app/models/printer_job_update.rb'
-# Offense count: 1
-# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: NilOrEmpty, NotPresent, UnlessPresent.
-Rails/Blank:
- Exclude:
- - "app/controllers/api/v1/base_controller.rb"
-
-# Offense count: 34
+# Offense count: 35
# Configuration parameters: Include.
# Include: db/migrate/*.rb
Rails/CreateTableWithTimestamps:
@@ -663,146 +591,94 @@ Rails/CreateTableWithTimestamps:
# SupportedStyles: strict, flexible
Rails/Date:
Exclude:
- - "app/controllers/deliveries_controller.rb"
- - "app/documents/order_fax.rb"
- - "app/models/periodic_task_group.rb"
- - "spec/integration/order_spec.rb"
- - "spec/models/order_spec.rb"
+ - 'app/controllers/deliveries_controller.rb'
+ - 'app/documents/order_fax.rb'
+ - 'app/models/periodic_task_group.rb'
+ - 'spec/integration/order_spec.rb'
+ - 'spec/models/order_spec.rb'
-# Offense count: 67
+# Offense count: 68
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Whitelist, AllowedMethods, AllowedReceivers.
-# Whitelist: find_by_sql
-# AllowedMethods: find_by_sql
-# AllowedReceivers: Gem::Specification
+# Whitelist: find_by_sql, find_by_token_for
+# AllowedMethods: find_by_sql, find_by_token_for
+# AllowedReceivers: Gem::Specification, page
Rails/DynamicFindBy:
Enabled: false
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/EnumHash:
- Exclude:
- - "app/models/order.rb"
-
-# Offense count: 8
+# Offense count: 4
# Configuration parameters: EnforcedStyle.
# SupportedStyles: slashes, arguments
Rails/FilePath:
Exclude:
- - "config/application.rb"
- - "config/initializers/secret_token.rb"
- - "lib/order_txt.rb"
- - "lib/render_csv.rb"
- - "lib/render_pdf.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_groups.rb"
- - "spec/api/v1/swagger_spec.rb"
-
-# Offense count: 7
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: Include, AllowedMethods, AllowedPatterns, IgnoredMethods.
-# Include: app/models/**/*.rb
-# AllowedMethods: order, limit, select, lock
-# IgnoredMethods: order, limit, select, lock
-Rails/FindEach:
- Exclude:
- - "app/models/bank_account.rb"
- - "app/models/order.rb"
- - "app/models/ordergroup.rb"
- - "app/models/periodic_task_group.rb"
- - "app/models/task.rb"
+ - 'config/application.rb'
+ - 'config/initializers/secret_token.rb'
+ - 'plugins/current_orders/app/documents/multiple_orders_by_groups.rb'
# Offense count: 26
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasManyOrHasOneDependent:
Exclude:
- - "app/models/article.rb"
- - "app/models/article_category.rb"
- - "app/models/article_price.rb"
- - "app/models/financial_link.rb"
- - "app/models/financial_transaction.rb"
- - "app/models/group_order.rb"
- - "app/models/order.rb"
- - "app/models/ordergroup.rb"
- - "app/models/shared_supplier.rb"
- - "app/models/stock_article.rb"
- - "app/models/supplier.rb"
- - "app/models/supplier_category.rb"
- - "app/models/user.rb"
- - "app/models/workgroup.rb"
+ - 'app/models/article.rb'
+ - 'app/models/article_category.rb'
+ - 'app/models/article_price.rb'
+ - 'app/models/financial_link.rb'
+ - 'app/models/financial_transaction.rb'
+ - 'app/models/group_order.rb'
+ - 'app/models/order.rb'
+ - 'app/models/ordergroup.rb'
+ - 'app/models/shared_supplier.rb'
+ - 'app/models/stock_article.rb'
+ - 'app/models/supplier.rb'
+ - 'app/models/supplier_category.rb'
+ - 'app/models/user.rb'
+ - 'app/models/workgroup.rb'
# Offense count: 14
# Configuration parameters: Include.
# Include: app/helpers/**/*.rb
Rails/HelperInstanceVariable:
Exclude:
- - "app/helpers/admin/configs_helper.rb"
- - "app/helpers/application_helper.rb"
- - "app/helpers/orders_helper.rb"
+ - 'app/helpers/admin/configs_helper.rb'
+ - 'app/helpers/application_helper.rb'
+ - 'app/helpers/orders_helper.rb'
-# Offense count: 14
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: numeric, symbolic
-Rails/HttpStatus:
- Exclude:
- - "app/controllers/admin/bank_accounts_controller.rb"
- - "app/controllers/admin/financial_transaction_classes_controller.rb"
- - "app/controllers/admin/financial_transaction_types_controller.rb"
- - "app/controllers/api/v1/base_controller.rb"
- - "app/controllers/styles_controller.rb"
- - "plugins/links/app/controllers/links_controller.rb"
-
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-Rails/IndexBy:
- Exclude:
- - "app/models/order.rb"
- - "spec/api/v1/user/ordergroup_spec.rb"
-
-# Offense count: 23
+# Offense count: 22
# Configuration parameters: IgnoreScopes, Include.
# Include: app/models/**/*.rb
Rails/InverseOf:
Exclude:
- - "app/models/article.rb"
- - "app/models/bank_transaction.rb"
- - "app/models/financial_transaction.rb"
- - "app/models/group_order.rb"
- - "app/models/invoice.rb"
- - "app/models/mail_delivery_status.rb"
- - "app/models/order.rb"
- - "app/models/shared_article.rb"
- - "app/models/shared_supplier.rb"
- - "app/models/stock_change.rb"
- - "app/models/supplier.rb"
- - "app/models/task.rb"
- - "app/models/user.rb"
- - "app/models/workgroup.rb"
+ - 'app/models/article.rb'
+ - 'app/models/bank_transaction.rb'
+ - 'app/models/financial_transaction.rb'
+ - 'app/models/group_order.rb'
+ - 'app/models/invoice.rb'
+ - 'app/models/mail_delivery_status.rb'
+ - 'app/models/order.rb'
+ - 'app/models/shared_article.rb'
+ - 'app/models/shared_supplier.rb'
+ - 'app/models/stock_change.rb'
+ - 'app/models/supplier.rb'
+ - 'app/models/task.rb'
+ - 'app/models/user.rb'
+ - 'app/models/workgroup.rb'
# Offense count: 2
# Configuration parameters: Include.
# Include: app/controllers/**/*.rb, app/mailers/**/*.rb
Rails/LexicallyScopedActionFilter:
Exclude:
- - "app/controllers/group_orders_controller.rb"
- - "app/controllers/suppliers_controller.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Rails/LinkToBlank:
- Exclude:
- - "app/helpers/application_helper.rb"
+ - 'app/controllers/group_orders_controller.rb'
+ - 'app/controllers/suppliers_controller.rb'
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/NegateInclude:
Exclude:
- - "app/helpers/application_helper.rb"
- - "app/models/supplier.rb"
- - "lib/tasks/foodsoft_setup.rake"
+ - 'app/helpers/application_helper.rb'
+ - 'app/models/supplier.rb'
+ - 'lib/tasks/foodsoft_setup.rake'
# Offense count: 34
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -810,55 +686,36 @@ Rails/NegateInclude:
# Include: app/**/*.rb, config/**/*.rb, db/**/*.rb, lib/**/*.rb
Rails/Output:
Exclude:
- - "config/initializers/resque.rb"
- - "config/initializers/secret_token.rb"
- - "db/migrate/001_create_users.rb"
- - "db/migrate/002_create_groups.rb"
- - "db/migrate/003_create_suppliers.rb"
- - "db/migrate/004_create_article_meta.rb"
- - "db/migrate/005_create_financial_transactions.rb"
- - "db/migrate/006_create_articles.rb"
- - "db/migrate/007_create_article_prices.rb"
- - "db/migrate/008_create_orders.rb"
- - "db/migrate/021_remove_table_article_prices.rb"
- - "db/migrate/20090120184410_road_to_version_three.rb"
- - "db/migrate/20130622095040_move_weekly_tasks.rb"
+ - 'config/initializers/resque.rb'
+ - 'config/initializers/secret_token.rb'
+ - 'db/migrate/001_create_users.rb'
+ - 'db/migrate/002_create_groups.rb'
+ - 'db/migrate/003_create_suppliers.rb'
+ - 'db/migrate/004_create_article_meta.rb'
+ - 'db/migrate/005_create_financial_transactions.rb'
+ - 'db/migrate/006_create_articles.rb'
+ - 'db/migrate/007_create_article_prices.rb'
+ - 'db/migrate/008_create_orders.rb'
+ - 'db/migrate/021_remove_table_article_prices.rb'
+ - 'db/migrate/20090120184410_road_to_version_three.rb'
+ - 'db/migrate/20130622095040_move_weekly_tasks.rb'
# Offense count: 28
Rails/OutputSafety:
Exclude:
- - "app/helpers/admin/configs_helper.rb"
- - "app/helpers/application_helper.rb"
- - "app/helpers/deliveries_helper.rb"
- - "app/helpers/orders_helper.rb"
- - "app/helpers/tasks_helper.rb"
- - "plugins/messages/app/helpers/messages_helper.rb"
- - "plugins/wiki/app/helpers/pages_helper.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Rails/Pluck:
- Exclude:
- - "lib/ordergroups_csv.rb"
-
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-Rails/PluralizationGrammar:
- Exclude:
- - "app/controllers/application_controller.rb"
- - "lib/tasks/foodsoft.rake"
+ - 'app/helpers/admin/configs_helper.rb'
+ - 'app/helpers/application_helper.rb'
+ - 'app/helpers/deliveries_helper.rb'
+ - 'app/helpers/orders_helper.rb'
+ - 'app/helpers/tasks_helper.rb'
+ - 'plugins/messages/app/helpers/messages_helper.rb'
+ - 'plugins/wiki/app/helpers/pages_helper.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Rails/Presence:
Exclude:
- - "db/migrate/021_remove_table_article_prices.rb"
-
-# Offense count: 36
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank.
-Rails/Present:
- Enabled: false
+ - 'db/migrate/021_remove_table_article_prices.rb'
# Offense count: 6
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -866,30 +723,34 @@ Rails/Present:
# Include: **/Rakefile, **/*.rake
Rails/RakeEnvironment:
Exclude:
- - "lib/tasks/foodsoft_setup.rake"
- - "lib/tasks/resque.rake"
+ - 'lib/tasks/foodsoft_setup.rake'
+ - 'lib/tasks/resque.rake'
-# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-Rails/RedundantForeignKey:
- Exclude:
- - "app/models/financial_transaction.rb"
- - "plugins/messages/app/models/message.rb"
-
-# Offense count: 1
+# Offense count: 14
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RedundantPresenceValidationOnBelongsTo:
Exclude:
- - "app/models/financial_transaction_type.rb"
+ - 'app/models/article.rb'
+ - 'app/models/bank_transaction.rb'
+ - 'app/models/delivery.rb'
+ - 'app/models/financial_transaction.rb'
+ - 'app/models/financial_transaction_type.rb'
+ - 'app/models/group_order.rb'
+ - 'app/models/group_order_article.rb'
+ - 'app/models/group_order_article_quantity.rb'
+ - 'app/models/invite.rb'
+ - 'app/models/invoice.rb'
+ - 'app/models/order_article.rb'
+ - 'app/models/order_comment.rb'
+ - 'app/models/stock_change.rb'
# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: ConvertTry.
-Rails/SafeNavigation:
+# This cop supports unsafe autocorrection (--autocorrect-all).
+Rails/RootPathnameMethods:
Exclude:
- - "app/models/group_order_article.rb"
+ - 'lib/tasks/foodsoft_setup.rake'
-# Offense count: 63
+# Offense count: 64
# Configuration parameters: ForbiddenMethods, AllowedMethods.
# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all
Rails/SkipsModelValidations:
@@ -899,11 +760,11 @@ Rails/SkipsModelValidations:
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/SquishedSQLHeredocs:
Exclude:
- - "app/controllers/finance/financial_links_controller.rb"
- - "app/models/financial_link.rb"
- - "db/migrate/20181201000305_ensure_article_for_article_price.rb"
+ - 'app/controllers/finance/financial_links_controller.rb'
+ - 'app/models/financial_link.rb'
+ - 'db/migrate/20181201000305_ensure_article_for_article_price.rb'
-# Offense count: 41
+# Offense count: 42
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: strict, flexible
@@ -913,37 +774,34 @@ Rails/TimeZone:
# Offense count: 1
Rails/TransactionExitStatement:
Exclude:
- - "app/models/bank_transaction.rb"
+ - 'app/models/bank_transaction.rb'
-# Offense count: 3
+# Offense count: 8
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/UniqueValidationWithoutIndex:
Exclude:
- - "app/models/bank_account.rb"
- - "app/models/supplier_category.rb"
+ - 'app/models/bank_account.rb'
+ - 'app/models/financial_transaction_class.rb'
+ - 'app/models/financial_transaction_type.rb'
+ - 'app/models/supplier.rb'
+ - 'app/models/supplier_category.rb'
+ - 'app/models/user.rb'
# Offense count: 2
# Configuration parameters: Environments.
# Environments: development, test, production
Rails/UnknownEnv:
Exclude:
- - "config/initializers/gaffe.rb"
- - "config/initializers/secret_token.rb"
-
-# Offense count: 69
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
-Rails/Validation:
- Enabled: false
+ - 'config/initializers/gaffe.rb'
+ - 'config/initializers/secret_token.rb'
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/WhereEquals:
Exclude:
- - "app/controllers/finance/invoices_controller.rb"
- - "app/models/financial_transaction.rb"
+ - 'app/controllers/finance/invoices_controller.rb'
+ - 'app/models/financial_transaction.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -951,84 +809,54 @@ Rails/WhereEquals:
# SupportedStyles: exists, where
Rails/WhereExists:
Exclude:
- - "app/models/concerns/mark_as_deleted_with_name.rb"
+ - 'app/models/concerns/mark_as_deleted_with_name.rb'
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
Rails/WhereNot:
Exclude:
- - "db/migrate/20140921104907_remove_stale_memberships.rb"
- - "db/migrate/20210205090257_introduce_received_state_in_orders.rb"
+ - 'db/migrate/20140921104907_remove_stale_memberships.rb'
+ - 'db/migrate/20210205090257_introduce_received_state_in_orders.rb'
-# Offense count: 5
+# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
Security/YAMLLoad:
Exclude:
- - "app/controllers/finance/bank_accounts_controller.rb"
- - "db/migrate/20130718183101_migrate_user_settings.rb"
- - "db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb"
- - "lib/foodsoft_config.rb"
- - "spec/api/v1/swagger_spec.rb"
+ - 'app/controllers/finance/bank_accounts_controller.rb'
+ - 'app/lib/foodsoft_config.rb'
+ - 'db/migrate/20130718183101_migrate_user_settings.rb'
+ - 'db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb'
# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: prefer_alias, prefer_alias_method
-Style/Alias:
- Exclude:
- - "config/initializers/session_store.rb"
- - "plugins/discourse/lib/foodsoft_discourse/redirect_to_login.rb"
- - "plugins/printer/lib/foodsoft_printer/order_printer_jobs.rb"
-
-# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, conditionals
Style/AndOr:
Exclude:
- - "config/initializers/extensions.rb"
- - "lib/apple_bar.rb"
- - "plugins/documents/app/controllers/documents_controller.rb"
- - "spec/support/coverage.rb"
+ - 'config/initializers/extensions.rb'
+ - 'plugins/documents/app/controllers/documents_controller.rb'
+ - 'spec/support/coverage.rb'
-# Offense count: 19
+# Offense count: 10
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, IgnoredMethods, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
+# Configuration parameters: EnforcedStyle, ProceduralMethods, FunctionalMethods, AllowedMethods, AllowedPatterns, AllowBracesOnProceduralOneLiners, BracesRequiredMethods.
# SupportedStyles: line_count_based, semantic, braces_for_chaining, always_braces
# ProceduralMethods: benchmark, bm, bmbm, create, each_with_object, measure, new, realtime, tap, with_object
# FunctionalMethods: let, let!, subject, watch
# AllowedMethods: lambda, proc, it
Style/BlockDelimiters:
Exclude:
- - "app/controllers/api/v1/user/ordergroup_controller.rb"
- - "app/helpers/group_orders_helper.rb"
- - "app/helpers/orders_helper.rb"
- - "app/models/order.rb"
- - "db/migrate/008_create_orders.rb"
- - "lib/tasks/resque.rake"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/factories/user.rb"
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
- - "spec/support/coverage.rb"
+ - 'app/lib/foodsoft_config.rb'
+ - 'db/migrate/008_create_orders.rb'
+ - 'spec/factories/user.rb'
+ - 'spec/support/coverage.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowOnConstant, AllowOnSelfClass.
Style/CaseEquality:
Exclude:
- - "lib/tasks/foodsoft_setup.rake"
-
-# Offense count: 7
-# This cop supports unsafe autocorrection (--autocorrect-all).
-Style/CaseLikeIf:
- Exclude:
- - "app/helpers/admin/configs_helper.rb"
- - "app/helpers/group_orders_helper.rb"
- - "app/models/order.rb"
- - "lib/foodsoft_date_util.rb"
- - "lib/render_pdf.rb"
- - "lib/tasks/foodsoft_setup.rake"
- - "plugins/uservoice/lib/foodsoft_uservoice.rb"
+ - 'lib/tasks/foodsoft_setup.rake'
# Offense count: 55
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -1038,95 +866,23 @@ Style/ClassAndModuleChildren:
Enabled: false
# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: is_a?, kind_of?
-Style/ClassCheck:
- Exclude:
- - "app/helpers/orders_helper.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
-# AllowedMethods: ==, equal?, eql?
-Style/ClassEqualityComparison:
- Exclude:
- - "spec/factories/supplier.rb"
-
-# Offense count: 3
Style/ClassVars:
Exclude:
- - "lib/bank_account_connector.rb"
- - "lib/foodsoft/expansion_variables.rb"
- - "lib/foodsoft_mail_receiver.rb"
-
-# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-Style/ColonMethodCall:
- Exclude:
- - "app/models/supplier.rb"
- - "plugins/discourse/app/controllers/discourse_controller.rb"
- - "plugins/messages/app/mail_receivers/messages_mail_receiver.rb"
-
-# Offense count: 7
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, AllowInnerBackticks.
-# SupportedStyles: backticks, percent_x, mixed
-Style/CommandLiteral:
- Exclude:
- - "lib/tasks/foodsoft_setup.rake"
-
-# Offense count: 10
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: Keywords, RequireColon.
-# Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE
-Style/CommentAnnotation:
- Exclude:
- - "app/controllers/admin/configs_controller.rb"
- - "app/inputs/delta_input.rb"
- - "app/models/order_article.rb"
- - "app/models/shared_supplier.rb"
- - "config/application.rb"
- - "spec/models/article_spec.rb"
- - "spec/models/order_spec.rb"
- - "spec/support/shared_database.rb"
+ - 'app/lib/foodsoft_mail_receiver.rb'
# Offense count: 12
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/CommentedKeyword:
Exclude:
- - "app/controllers/deliveries_controller.rb"
- - "app/controllers/finance/balancing_controller.rb"
- - "app/controllers/orders_controller.rb"
- - "app/controllers/stock_takings_controller.rb"
- - "app/controllers/stockit_controller.rb"
- - "config/routes.rb"
- - "db/migrate/20090120184410_road_to_version_three.rb"
+ - 'app/controllers/deliveries_controller.rb'
+ - 'app/controllers/finance/balancing_controller.rb'
+ - 'app/controllers/orders_controller.rb'
+ - 'app/controllers/stock_takings_controller.rb'
+ - 'app/controllers/stockit_controller.rb'
+ - 'config/routes.rb'
+ - 'db/migrate/20090120184410_road_to_version_three.rb'
-# Offense count: 13
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, SingleLineConditionsOnly, IncludeTernaryExpressions.
-# SupportedStyles: assign_to_condition, assign_inside_condition
-Style/ConditionalAssignment:
- Exclude:
- - "app/controllers/application_controller.rb"
- - "app/controllers/articles_controller.rb"
- - "app/controllers/concerns/locale.rb"
- - "app/controllers/finance/bank_transactions_controller.rb"
- - "app/controllers/finance/financial_transactions_controller.rb"
- - "app/controllers/home_controller.rb"
- - "app/controllers/orders_controller.rb"
- - "plugins/documents/app/controllers/documents_controller.rb"
- - "plugins/messages/app/mail_receivers/messages_mail_receiver.rb"
- - "plugins/wiki/app/controllers/pages_controller.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Style/DefWithParentheses:
- Exclude:
- - "app/models/user.rb"
-
-# Offense count: 322
+# Offense count: 337
# Configuration parameters: AllowedConstants.
Style/Documentation:
Enabled: false
@@ -1137,60 +893,20 @@ Style/Documentation:
# SupportedStyles: allowed_in_returns, forbidden
Style/DoubleNegation:
Exclude:
- - "app/controllers/tasks_controller.rb"
+ - 'app/controllers/tasks_controller.rb'
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, AllowComments.
-# SupportedStyles: empty, nil, both
-Style/EmptyElse:
- Exclude:
- - "app/helpers/application_helper.rb"
- - "app/models/article.rb"
- - "app/models/order_article.rb"
- - "app/models/user.rb"
- - "lib/token_verifier.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Style/EmptyLiteral:
- Exclude:
- - "plugins/wiki/app/helpers/pages_helper.rb"
-
-# Offense count: 14
+# Offense count: 6
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: compact, expanded
Style/EmptyMethod:
Exclude:
- - "app/controllers/articles_controller.rb"
- - "app/controllers/feedback_controller.rb"
- - "app/controllers/finance/invoices_controller.rb"
- - "app/controllers/home_controller.rb"
- - "app/controllers/login_controller.rb"
- - "app/mailers/mailer.rb"
- - "db/migrate/024_add_deposit_defaults.rb"
- - "db/migrate/20090120184410_road_to_version_three.rb"
- - "db/migrate/20090907120012_add_missing_indexes.rb"
- - "db/migrate/20130702113610_update_group_order_totals.rb"
- - "db/migrate/20130718183101_migrate_user_settings.rb"
- - "db/migrate/20140318173000_delete_empty_group_order_articles.rb"
- - "lib/bank_account_connector.rb"
-
-# Offense count: 21
-# This cop supports safe autocorrection (--autocorrect).
-Style/ExpandPathArguments:
- Enabled: false
-
-# Offense count: 7
-# This cop supports safe autocorrection (--autocorrect).
-Style/ExplicitBlockArgument:
- Exclude:
- - "app/documents/order_fax.rb"
- - "app/helpers/admin/configs_helper.rb"
- - "app/models/concerns/find_each_with_order.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_articles.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_groups.rb"
+ - 'db/migrate/024_add_deposit_defaults.rb'
+ - 'db/migrate/20090120184410_road_to_version_three.rb'
+ - 'db/migrate/20090907120012_add_missing_indexes.rb'
+ - 'db/migrate/20130702113610_update_group_order_totals.rb'
+ - 'db/migrate/20130718183101_migrate_user_settings.rb'
+ - 'db/migrate/20140318173000_delete_empty_group_order_articles.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -1198,7 +914,7 @@ Style/ExplicitBlockArgument:
# SupportedStyles: left_coerce, right_coerce, single_coerce, fdiv
Style/FloatDivision:
Exclude:
- - "app/models/ordergroup.rb"
+ - 'app/models/ordergroup.rb'
# Offense count: 18
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -1206,33 +922,25 @@ Style/FloatDivision:
# SupportedStyles: each, for
Style/For:
Exclude:
- - "app/controllers/admin/configs_controller.rb"
- - "app/models/delivery.rb"
- - "app/models/group_order.rb"
- - "app/models/order.rb"
- - "app/models/stock_taking.rb"
- - "app/models/supplier.rb"
- - "db/migrate/005_create_financial_transactions.rb"
- - "lib/tasks/foodsoft.rake"
- - "plugins/messages/app/mail_receivers/messages_mail_receiver.rb"
- - "plugins/wiki/app/views/pages/all.rss.builder"
-
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: format, sprintf, percent
-Style/FormatString:
- Exclude:
- - "lib/order_txt.rb"
+ - 'app/controllers/admin/configs_controller.rb'
+ - 'app/models/delivery.rb'
+ - 'app/models/group_order.rb'
+ - 'app/models/order.rb'
+ - 'app/models/stock_taking.rb'
+ - 'app/models/supplier.rb'
+ - 'db/migrate/005_create_financial_transactions.rb'
+ - 'lib/tasks/foodsoft.rake'
+ - 'plugins/messages/app/mail_receivers/messages_mail_receiver.rb'
+ - 'plugins/wiki/app/views/pages/all.rss.builder'
# Offense count: 6
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns, IgnoredMethods.
+# Configuration parameters: MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns.
# SupportedStyles: annotated, template, unannotated
Style/FormatStringToken:
EnforcedStyle: unannotated
-# Offense count: 498
+# Offense count: 511
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
@@ -1243,48 +951,38 @@ Style/FrozenStringLiteralComment:
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/GlobalStdStream:
Exclude:
- - "config/environments/production.rb"
- - "lib/tasks/foodsoft.rake"
- - "lib/tasks/foodsoft_setup.rake"
+ - 'config/environments/production.rb'
+ - 'lib/tasks/foodsoft.rake'
+ - 'lib/tasks/foodsoft_setup.rake'
-# Offense count: 61
+# Offense count: 2
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
Style/GuardClause:
- Enabled: false
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: braces, no_braces
-Style/HashAsLastArrayItem:
Exclude:
- - "app/models/order.rb"
+ - 'db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb'
+ - 'plugins/wiki/app/controllers/pages_controller.rb'
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowSplatArgument.
-Style/HashConversion:
+# Offense count: 2
+# This cop supports unsafe autocorrection (--autocorrect-all).
+Style/HashExcept:
Exclude:
- - "app/helpers/application_helper.rb"
- - "app/models/article.rb"
- - "app/models/order.rb"
- - "plugins/wiki/app/controllers/pages_controller.rb"
- - "spec/api/v1/user/ordergroup_spec.rb"
+ - 'spec/models/article_spec.rb'
# Offense count: 8
# Configuration parameters: MinBranchesCount.
Style/HashLikeCase:
Exclude:
- - "app/controllers/articles_controller.rb"
- - "app/controllers/finance/bank_transactions_controller.rb"
- - "app/controllers/finance/financial_transactions_controller.rb"
- - "app/controllers/home_controller.rb"
- - "app/controllers/orders_controller.rb"
- - "app/helpers/finance/balancing_helper.rb"
- - "plugins/documents/app/controllers/documents_controller.rb"
- - "plugins/wiki/app/controllers/pages_controller.rb"
+ - 'app/controllers/articles_controller.rb'
+ - 'app/controllers/finance/bank_transactions_controller.rb'
+ - 'app/controllers/finance/financial_transactions_controller.rb'
+ - 'app/controllers/home_controller.rb'
+ - 'app/controllers/orders_controller.rb'
+ - 'app/helpers/finance/balancing_helper.rb'
+ - 'plugins/documents/app/controllers/documents_controller.rb'
+ - 'plugins/wiki/app/controllers/pages_controller.rb'
-# Offense count: 3904
+# Offense count: 375
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
@@ -1292,122 +990,64 @@ Style/HashLikeCase:
Style/HashSyntax:
Enabled: false
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowIfModifier.
-Style/IfInsideElse:
- Exclude:
- - "app/models/article.rb"
- - "app/models/task.rb"
- - "lib/apple_bar.rb"
- - "plugins/wiki/app/controllers/pages_controller.rb"
-
-# Offense count: 61
+# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Style/IfUnlessModifier:
- Enabled: false
+ Exclude:
+ - 'db/migrate/20090120184410_road_to_version_three.rb'
-# Offense count: 2
+# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods.
# AllowedMethods: nonzero?
Style/IfWithBooleanLiteralBranches:
Exclude:
- - "app/models/order_article.rb"
- - "app/models/task.rb"
-
-# Offense count: 1
-# This cop supports unsafe autocorrection (--autocorrect-all).
-Style/InfiniteLoop:
- Exclude:
- - "lib/order_pdf.rb"
+ - 'app/models/order_article.rb'
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: InverseMethods, InverseBlocks.
Style/InverseMethods:
Exclude:
- - "app/helpers/application_helper.rb"
- - "app/helpers/deliveries_helper.rb"
- - "spec/support/coverage.rb"
-
-# Offense count: 4
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: line_count_dependent, lambda, literal
-Style/Lambda:
- Exclude:
- - "app/models/financial_link.rb"
- - "lib/foodsoft_mail_receiver.rb"
- - "plugins/messages/app/models/message.rb"
+ - 'app/helpers/application_helper.rb'
+ - 'app/helpers/deliveries_helper.rb'
+ - 'spec/support/coverage.rb'
# Offense count: 5
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/LineEndConcatenation:
Exclude:
- - "db/migrate/20130702113610_update_group_order_totals.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_articles.rb"
+ - 'db/migrate/20130702113610_update_group_order_totals.rb'
+ - 'plugins/current_orders/app/documents/multiple_orders_by_articles.rb'
# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
-Style/MethodCallWithoutArgsParentheses:
+# This cop supports unsafe autocorrection (--autocorrect-all).
+Style/MapToHash:
Exclude:
- - "plugins/discourse/app/controllers/discourse_login_controller.rb"
-
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: require_parentheses, require_no_parentheses, require_no_parentheses_except_multiline
-Style/MethodDefParentheses:
- Exclude:
- - "app/controllers/concerns/send_order_pdf.rb"
- - "app/helpers/application_helper.rb"
- - "app/helpers/finance/invoices_helper.rb"
- - "plugins/discourse/app/controllers/discourse_controller.rb"
+ - 'app/models/article.rb'
# Offense count: 1
Style/MixinUsage:
Exclude:
- - "lib/tasks/foodsoft_setup.rake"
-
-# Offense count: 3
-Style/MultilineBlockChain:
- Exclude:
- - "app/helpers/group_orders_helper.rb"
- - "app/models/order.rb"
- - "config/initializers/rails6_backports.rb"
+ - 'lib/tasks/foodsoft_setup.rake'
# Offense count: 2
+Style/MultilineBlockChain:
+ Exclude:
+ - 'app/helpers/group_orders_helper.rb'
+ - 'app/models/order.rb'
+
+# Offense count: 7
# This cop supports safe autocorrection (--autocorrect).
Style/MultilineIfModifier:
Exclude:
- - "app/models/user.rb"
- - "plugins/current_orders/app/controllers/current_orders/ordergroups_controller.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Style/MultilineIfThen:
- Exclude:
- - "app/controllers/finance/financial_links_controller.rb"
-
-# Offense count: 12
-# This cop supports safe autocorrection (--autocorrect).
-Style/MultilineWhenThen:
- Exclude:
- - "app/controllers/finance/balancing_controller.rb"
- - "app/helpers/application_helper.rb"
- - "app/helpers/finance/balancing_helper.rb"
- - "app/models/order.rb"
-
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowMethodComparison.
-Style/MultipleComparison:
- Exclude:
- - "app/models/order.rb"
- - "app/models/order_article.rb"
- - "spec/models/article_spec.rb"
+ - 'app/controllers/admin/ordergroups_controller.rb'
+ - 'app/controllers/articles_controller.rb'
+ - 'app/controllers/orders_controller.rb'
+ - 'app/documents/order_fax.rb'
+ - 'app/lib/foodsoft_config.rb'
+ - 'app/models/ordergroup.rb'
+ - 'config/initializers/currency_display.rb'
# Offense count: 24
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -1416,75 +1056,23 @@ Style/MultipleComparison:
Style/MutableConstant:
Enabled: false
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: both, prefix, postfix
-Style/NegatedIf:
- Exclude:
- - "app/controllers/orders_controller.rb"
- - "app/helpers/articles_helper.rb"
-
-# Offense count: 4
-# This cop supports safe autocorrection (--autocorrect).
-Style/NegatedIfElseCondition:
- Exclude:
- - "app/controllers/articles_controller.rb"
- - "app/controllers/concerns/auth.rb"
- - "app/models/article.rb"
-
-# Offense count: 8
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowedMethods.
-# AllowedMethods: be, be_a, be_an, be_between, be_falsey, be_kind_of, be_instance_of, be_truthy, be_within, eq, eql, end_with, include, match, raise_error, respond_to, start_with
-Style/NestedParenthesizedCalls:
- Exclude:
- - "app/models/user.rb"
- - "spec/models/order_article_spec.rb"
-
-# Offense count: 7
+# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, MinBodyLength.
# SupportedStyles: skip_modifier_ifs, always
Style/Next:
Exclude:
- - "app/controllers/finance/financial_transactions_controller.rb"
- - "app/controllers/orders_controller.rb"
- - "app/helpers/orders_helper.rb"
- - "db/migrate/20130622095040_move_weekly_tasks.rb"
- - "lib/tasks/foodsoft.rake"
+ - 'db/migrate/20130622095040_move_weekly_tasks.rb'
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: predicate, comparison
-Style/NilComparison:
- Exclude:
- - "app/controllers/application_controller.rb"
- - "plugins/wiki/app/helpers/pages_helper.rb"
-
-# Offense count: 10
-# This cop supports safe autocorrection (--autocorrect).
-Style/Not:
- Exclude:
- - "app/controllers/concerns/auth.rb"
- - "app/controllers/orders_controller.rb"
- - "app/helpers/deliveries_helper.rb"
- - "app/models/group_order_article.rb"
- - "app/models/order_article.rb"
- - "app/models/supplier.rb"
- - "app/models/task.rb"
- - "spec/support/coverage.rb"
-
-# Offense count: 6
-# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Strict, AllowedNumbers, AllowedPatterns.
Style/NumericLiterals:
- MinDigits: 7
+ MinDigits: 6
-# Offense count: 61
+# Offense count: 60
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns, IgnoredMethods.
+# Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns.
# SupportedStyles: predicate, comparison
Style/NumericPredicate:
Enabled: false
@@ -1494,51 +1082,10 @@ Style/NumericPredicate:
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
Exclude:
- - "app/helpers/application_helper.rb"
- - "app/helpers/orders_helper.rb"
- - "app/models/order_article.rb"
- - "lib/tasks/foodsoft_setup.rake"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Style/OrAssignment:
- Exclude:
- - "app/controllers/articles_controller.rb"
-
-# Offense count: 8
-# This cop supports safe autocorrection (--autocorrect).
-Style/ParallelAssignment:
- Exclude:
- - "app/models/article.rb"
- - "app/models/group_order_article.rb"
- - "app/models/supplier.rb"
- - "app/models/user.rb"
- - "spec/models/group_order_article_spec.rb"
- - "spec/support/session_helper.rb"
-
-# Offense count: 12
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowSafeAssignment, AllowInMultilineConditions.
-Style/ParenthesesAroundCondition:
- Exclude:
- - "app/controllers/login_controller.rb"
- - "app/helpers/application_helper.rb"
- - "app/helpers/group_orders_helper.rb"
- - "app/models/group_order_article.rb"
- - "plugins/wiki/app/controllers/pages_controller.rb"
-
-# Offense count: 41
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: PreferredDelimiters.
-Style/PercentLiteralDelimiters:
- Enabled: false
-
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-Style/PerlBackrefs:
- Exclude:
- - "lib/foodsoft/expansion_variables.rb"
- - "plugins/wiki/app/helpers/pages_helper.rb"
+ - 'app/helpers/application_helper.rb'
+ - 'app/helpers/orders_helper.rb'
+ - 'app/models/order_article.rb'
+ - 'lib/tasks/foodsoft_setup.rake'
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -1546,207 +1093,77 @@ Style/PerlBackrefs:
# SupportedStyles: short, verbose
Style/PreferredHashMethods:
Exclude:
- - "app/helpers/admin/configs_helper.rb"
- - "app/helpers/articles_helper.rb"
+ - 'app/helpers/admin/configs_helper.rb'
+ - 'app/helpers/articles_helper.rb'
-# Offense count: 14
-# This cop supports safe autocorrection (--autocorrect).
-Style/Proc:
- Exclude:
- - "app/helpers/deliveries_helper.rb"
- - "app/models/user.rb"
- - "config/navigation.rb"
- - "plugins/current_orders/lib/foodsoft_current_orders/engine.rb"
- - "plugins/links/lib/foodsoft_links/engine.rb"
-
-# Offense count: 6
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, AllowedCompactTypes.
-# SupportedStyles: compact, exploded
-Style/RaiseArgs:
- Exclude:
- - "app/controllers/api/v1/base_controller.rb"
- - "app/controllers/concerns/auth_api.rb"
- - "app/controllers/concerns/foodcoop_scope.rb"
-
-# Offense count: 5
+# Offense count: 4
# This cop supports safe autocorrection (--autocorrect).
Style/RandomWithOffset:
Exclude:
- - "db/migrate/007_create_article_prices.rb"
- - "db/migrate/008_create_orders.rb"
- - "db/seeds/seed_helper.rb"
+ - 'db/migrate/007_create_article_prices.rb'
+ - 'db/migrate/008_create_orders.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Methods.
Style/RedundantArgument:
Exclude:
- - "app/controllers/articles_controller.rb"
-
-# Offense count: 8
-# This cop supports safe autocorrection (--autocorrect).
-Style/RedundantBegin:
- Exclude:
- - "app/controllers/articles_controller.rb"
- - "app/models/order.rb"
- - "lib/foodsoft_mail_receiver.rb"
- - "lib/tasks/multicoops.rake"
- - "spec/lib/foodsoft_mail_receiver_spec.rb"
-
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Style/RedundantConditional:
- Exclude:
- - "app/models/task.rb"
+ - 'app/controllers/articles_controller.rb'
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: SafeForConstants.
Style/RedundantFetchBlock:
Exclude:
- - "config/puma.rb"
+ - 'config/puma.rb'
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-Style/RedundantFileExtensionInRequire:
- Exclude:
- - "db/seeds/small.en.seeds.rb"
- - "db/seeds/small.nl.seeds.rb"
-
-# Offense count: 5
+# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/RedundantInterpolation:
Exclude:
- - "db/migrate/20130718183101_migrate_user_settings.rb"
- - "lib/order_pdf.rb"
- - "spec/i18n_spec.rb"
- - "spec/models/user_spec.rb"
+ - 'db/migrate/20130718183101_migrate_user_settings.rb'
+ - 'spec/i18n_spec.rb'
+ - 'spec/models/user_spec.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
-Style/RedundantRegexpCharacterClass:
+Style/RedundantParentheses:
Exclude:
- - "plugins/wiki/app/helpers/pages_helper.rb"
-
-# Offense count: 7
-# This cop supports safe autocorrection (--autocorrect).
-Style/RedundantRegexpEscape:
- Exclude:
- - "lib/bank_transaction_reference.rb"
- - "lib/foodsoft_mail_receiver.rb"
- - "plugins/documents/app/controllers/documents_controller.rb"
- - "plugins/wiki/app/models/page.rb"
-
-# Offense count: 15
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowMultipleReturnValues.
-Style/RedundantReturn:
- Exclude:
- - "app/controllers/concerns/auth_api.rb"
- - "app/helpers/application_helper.rb"
- - "app/helpers/deliveries_helper.rb"
- - "app/helpers/group_orders_helper.rb"
- - "app/helpers/orders_helper.rb"
- - "app/models/article.rb"
- - "app/models/bank_transaction.rb"
- - "app/models/periodic_task_group.rb"
- - "app/models/supplier.rb"
- - "lib/bank_transaction_reference.rb"
-
-# Offense count: 83
-# This cop supports safe autocorrection (--autocorrect).
-Style/RedundantSelf:
- Enabled: false
+ - 'db/migrate/021_remove_table_article_prices.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/RedundantSort:
Exclude:
- - "app/models/article_category.rb"
+ - 'app/models/article_category.rb'
-# Offense count: 3
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
-# SupportedStyles: slashes, percent_r, mixed
-Style/RegexpLiteral:
- Exclude:
- - "plugins/wiki/app/models/page.rb"
- - "spec/support/coverage.rb"
-
-# Offense count: 16
-# This cop supports safe autocorrection (--autocorrect).
-Style/RescueModifier:
- Exclude:
- - "app/controllers/invites_controller.rb"
- - "app/models/article.rb"
- - "app/models/order.rb"
- - "app/models/ordergroup.rb"
- - "config/application.rb"
- - "lib/apple_bar.rb"
- - "lib/date_time_attribute_validate.rb"
- - "lib/foodsoft_date_util.rb"
- - "plugins/messages/app/models/message.rb"
-
-# Offense count: 51
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: implicit, explicit
-Style/RescueStandardError:
- Enabled: false
-
-# Offense count: 9
+# Offense count: 8
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
# AllowedMethods: present?, blank?, presence, try, try!
Style/SafeNavigation:
Exclude:
- - "app/controllers/concerns/auth_api.rb"
- - "app/controllers/group_order_articles_controller.rb"
- - "app/models/article_category.rb"
- - "app/models/financial_transaction.rb"
- - "app/models/ordergroup.rb"
- - "app/models/user.rb"
- - "plugins/printer/app/controllers/printer_controller.rb"
- - "spec/factories/order.rb"
+ - 'app/controllers/concerns/auth_api.rb'
+ - 'app/controllers/group_order_articles_controller.rb'
+ - 'app/models/article_category.rb'
+ - 'app/models/financial_transaction.rb'
+ - 'app/models/user.rb'
+ - 'plugins/printer/app/controllers/printer_controller.rb'
+ - 'spec/factories/order.rb'
-# Offense count: 1
-# This cop supports safe autocorrection (--autocorrect).
-Style/SelfAssignment:
- Exclude:
- - "app/helpers/application_helper.rb"
-
-# Offense count: 16
+# Offense count: 3
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowAsExpressionSeparator.
Style/Semicolon:
Exclude:
- - "app/controllers/finance/bank_transactions_controller.rb"
- - "app/controllers/finance/financial_transactions_controller.rb"
- - "app/controllers/finance/invoices_controller.rb"
- - "app/controllers/orders_controller.rb"
- - "app/helpers/group_orders_helper.rb"
- - "db/migrate/20090120184410_road_to_version_three.rb"
- - "spec/api/v1/swagger_spec.rb"
- - "spec/api/v1/user/group_order_articles_spec.rb"
- - "spec/api/v1/user/ordergroup_spec.rb"
- - "spec/models/order_article_spec.rb"
+ - 'db/migrate/20090120184410_road_to_version_three.rb'
-# Offense count: 5
+# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/SlicingWithRange:
Exclude:
- - "app/helpers/admin/configs_helper.rb"
- - "config/initializers/session_store.rb"
- - "lib/order_pdf.rb"
-
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowModifier.
-Style/SoleNestedConditional:
- Exclude:
- - "app/controllers/articles_controller.rb"
- - "app/controllers/concerns/auth.rb"
+ - 'app/helpers/admin/configs_helper.rb'
+ - 'config/initializers/session_store.rb'
# Offense count: 9
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -1755,125 +1172,65 @@ Style/SoleNestedConditional:
Style/SpecialGlobalVars:
EnforcedStyle: use_perl_names
-# Offense count: 33
+# Offense count: 34
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode.
Style/StringConcatenation:
Enabled: false
-# Offense count: 1855
+# Offense count: 140
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
# SupportedStyles: single_quotes, double_quotes
Style/StringLiterals:
Enabled: false
-# Offense count: 80
+# Offense count: 19
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: MinSize.
+# Configuration parameters: .
# SupportedStyles: percent, brackets
Style/SymbolArray:
- EnforcedStyle: brackets
+ EnforcedStyle: percent
+ MinSize: 5
-# Offense count: 19
+# Offense count: 20
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, IgnoredMethods, AllowComments.
-# AllowedMethods: respond_to, define_method
+# Configuration parameters: AllowMethodsWithArguments, AllowedMethods, AllowedPatterns, AllowComments.
+# AllowedMethods: define_method, mail, respond_to
Style/SymbolProc:
Exclude:
- - "app/controllers/pickups_controller.rb"
- - "app/helpers/orders_helper.rb"
- - "app/models/delivery.rb"
- - "app/models/financial_transaction_class.rb"
- - "app/models/financial_transaction_type.rb"
- - "app/models/group_order_article.rb"
- - "app/models/order.rb"
- - "app/models/order_article.rb"
- - "app/models/stock_article.rb"
- - "app/models/user.rb"
- - "db/migrate/20090731132547_add_stats_to_groups.rb"
- - "spec/factories/order.rb"
-
-# Offense count: 4
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, AllowSafeAssignment.
-# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
-Style/TernaryParentheses:
- Exclude:
- - "app/models/order_article.rb"
-
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyleForMultiline.
-# SupportedStylesForMultiline: comma, consistent_comma, no_comma
-Style/TrailingCommaInArrayLiteral:
- Exclude:
- - "lib/articles_csv.rb"
- - "lib/invoices_csv.rb"
- - "lib/ordergroups_csv.rb"
-
-# Offense count: 2
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyleForMultiline.
-# SupportedStylesForMultiline: comma, consistent_comma, no_comma
-Style/TrailingCommaInHashLiteral:
- Exclude:
- - "app/controllers/finance/financial_transactions_controller.rb"
- - "config/initializers/exception_notification.rb"
-
-# Offense count: 8
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, AllowedMethods.
-# 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
-Style/TrivialAccessors:
- Exclude:
- - "app/models/order.rb"
- - "lib/bank_account_connector.rb"
- - "plugins/messages/app/models/message.rb"
-
-# Offense count: 5
-# This cop supports safe autocorrection (--autocorrect).
-Style/UnlessElse:
- Exclude:
- - "app/controllers/home_controller.rb"
- - "app/controllers/orders_controller.rb"
- - "app/helpers/group_order_articles_helper.rb"
- - "plugins/current_orders/app/controllers/current_orders/articles_controller.rb"
- - "plugins/wiki/app/helpers/pages_helper.rb"
+ - 'app/controllers/pickups_controller.rb'
+ - 'app/helpers/orders_helper.rb'
+ - 'app/models/delivery.rb'
+ - 'app/models/financial_transaction_class.rb'
+ - 'app/models/financial_transaction_type.rb'
+ - 'app/models/group_order_article.rb'
+ - 'app/models/order.rb'
+ - 'app/models/order_article.rb'
+ - 'app/models/stock_article.rb'
+ - 'app/models/user.rb'
+ - 'db/migrate/20090731132547_add_stats_to_groups.rb'
+ - 'spec/factories/order.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
-Style/WhileUntilModifier:
- Exclude:
- - "app/models/periodic_task_group.rb"
-
-# Offense count: 11
-# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: EnforcedStyle, MinSize, WordRegex.
+# Configuration parameters: WordRegex.
# SupportedStyles: percent, brackets
Style/WordArray:
- Exclude:
- - "app/documents/order_matrix.rb"
- - "app/helpers/application_helper.rb"
- - "app/models/supplier.rb"
- - "db/migrate/006_create_articles.rb"
- - "lib/tasks/foodsoft_setup.rake"
- - "plugins/current_orders/app/controllers/current_orders/group_orders_controller.rb"
- - "plugins/wiki/app/controllers/pages_controller.rb"
- - "plugins/wiki/app/helpers/pages_helper.rb"
- - "spec/support/faker.rb"
+ EnforcedStyle: percent
+ MinSize: 4
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/ZeroLengthPredicate:
Exclude:
- - "app/models/group_order_article.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_articles.rb"
- - "plugins/current_orders/app/documents/multiple_orders_by_groups.rb"
+ - 'app/models/group_order_article.rb'
+ - 'plugins/current_orders/app/documents/multiple_orders_by_articles.rb'
+ - 'plugins/current_orders/app/documents/multiple_orders_by_groups.rb'
-# Offense count: 446
+# Offense count: 282
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, IgnoredPatterns.
+# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
# URISchemes: http, https
Layout/LineLength:
- Max: 420
+ Max: 320
diff --git a/Gemfile b/Gemfile
index 70baa906..2cda86f3 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,75 +1,74 @@
# A sample Gemfile
-source "https://rubygems.org"
+source 'https://rubygems.org'
-gem "rails", '~> 7.0'
gem 'mail', '~> 2.7.1' # bug with mail 2.8.0 https://github.com/mikel/mail/issues/1489
+gem 'rails', '~> 7.0'
-
-gem 'sassc-rails'
gem 'less-rails'
+gem 'sassc-rails'
gem 'uglifier'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby
-gem 'jquery-rails'
-gem 'select2-rails'
-gem 'rails_tokeninput'
+gem 'bootsnap', require: false
gem 'bootstrap-datepicker-rails'
gem 'date_time_attribute'
-gem 'rails-assets-listjs', '0.2.0.beta.4' # remember to maintain list.*.js plugins and template engines on update
gem 'i18n-js', '~> 3.0.0.rc8'
+gem 'jquery-rails'
+gem 'rails-assets-listjs', '0.2.0.beta.4' # remember to maintain list.*.js plugins and template engines on update
gem 'rails-i18n'
-gem 'bootsnap', require: false
+gem 'rails_tokeninput'
+gem 'select2-rails'
-gem 'mysql2'
-gem 'prawn'
-gem 'prawn-table'
-gem 'haml'
-gem 'haml-rails'
-gem 'kaminari'
-gem 'simple_form'
-gem 'inherited_resources'
+gem 'active_model_serializers', '~> 0.10.0'
+gem 'acts_as_tree'
+gem 'attribute_normalizer'
gem 'daemons'
gem 'doorkeeper'
gem 'doorkeeper-i18n'
+gem 'haml'
+gem 'haml-rails'
+gem 'ice_cube'
+gem 'inherited_resources'
+gem 'kaminari'
+gem 'mysql2'
+gem 'prawn'
+gem 'prawn-table'
+gem 'puma'
gem 'rack-cors', require: 'rack/cors'
-gem 'active_model_serializers', '~> 0.10.0'
-gem 'twitter-bootstrap-rails', '~> 2.2.8'
+gem 'rails-settings-cached', '= 0.4.3' # caching breaks tests until Rails 5 https://github.com/huacnlee/rails-settings-cached/issues/73
+gem 'ransack'
+gem 'resque'
+gem 'ruby-units'
+gem 'sd_notify'
+gem 'simple_form'
gem 'simple-navigation', '~> 3.14.0' # 3.x for simple_navigation_bootstrap
gem 'simple-navigation-bootstrap'
gem 'sprockets', '< 4'
-gem 'ransack'
-gem 'acts_as_tree'
-gem 'rails-settings-cached', '= 0.4.3' # caching breaks tests until Rails 5 https://github.com/huacnlee/rails-settings-cached/issues/73
-gem 'resque'
-gem 'puma'
-gem 'sd_notify'
+gem 'twitter-bootstrap-rails', '~> 2.2.8'
gem 'whenever', require: false # For defining cronjobs, see config/schedule.rb
-gem 'ruby-units'
-gem 'attribute_normalizer'
-gem 'ice_cube'
# At time of development 01-06-2022 mmddyyyy necessary fix for config_helper.rb form builder was not in rubygems so we pull from github, see: https://github.com/gregschmit/recurring_select/pull/152
+gem 'exception_notification'
+gem 'gaffe'
+gem 'hashie', '~> 3.4.6', require: false # https://github.com/westfieldlabs/apivore/issues/114
+gem 'midi-smtp-server'
+gem 'mime-types'
gem 'recurring_select', git: 'https://github.com/gregschmit/recurring_select'
gem 'roo'
gem 'roo-xls'
-gem 'spreadsheet'
-gem 'exception_notification'
-gem 'gaffe'
-gem 'ruby-filemagic'
-gem 'mime-types'
-gem 'midi-smtp-server'
-gem 'hashie', '~> 3.4.6', require: false # https://github.com/westfieldlabs/apivore/issues/114
gem 'rswag-api'
gem 'rswag-ui'
+gem 'ruby-filemagic'
+gem 'spreadsheet'
# we use the git version of acts_as_versioned, and need to include it in this Gemfile
gem 'acts_as_versioned', git: 'https://github.com/technoweenie/acts_as_versioned.git'
-gem 'foodsoft_wiki', path: 'plugins/wiki'
-gem 'foodsoft_messages', path: 'plugins/messages'
-gem 'foodsoft_documents', path: 'plugins/documents'
gem 'foodsoft_discourse', path: 'plugins/discourse'
+gem 'foodsoft_documents', path: 'plugins/documents'
gem 'foodsoft_links', path: 'plugins/links'
+gem 'foodsoft_messages', path: 'plugins/messages'
gem 'foodsoft_polls', path: 'plugins/polls'
+gem 'foodsoft_wiki', path: 'plugins/wiki'
# plugins not enabled by default
# gem 'foodsoft_current_orders', path: 'plugins/current_orders'
@@ -77,10 +76,10 @@ gem 'foodsoft_polls', path: 'plugins/polls'
# gem 'foodsoft_uservoice', path: 'plugins/uservoice'
group :development do
- gem 'sqlite3', '~> 1.3.6'
- gem 'mailcatcher'
- gem 'web-console'
gem 'listen'
+ gem 'mailcatcher'
+ gem 'sqlite3', '~> 1.3.6'
+ gem 'web-console'
# Better error output
gem 'better_errors'
@@ -108,17 +107,17 @@ group :development, :test do
end
group :test do
- gem 'rspec-rails'
+ gem 'apparition' # Capybara javascript driver
+ gem 'capybara'
+ gem 'connection_pool'
+ gem 'database_cleaner'
gem 'factory_bot_rails'
gem 'faker'
- gem 'capybara'
- gem 'apparition' # Capybara javascript driver
- gem 'database_cleaner'
- gem 'connection_pool'
+ gem 'rspec-rails'
# need to include rspec components before i18n-spec or rake fails in test environment
+ gem 'i18n-spec'
gem 'rspec-core'
gem 'rspec-rerun'
- gem 'i18n-spec'
# code coverage
gem 'simplecov', require: false
gem 'simplecov-lcov', require: false
diff --git a/Rakefile b/Rakefile
index 835180b2..e59b186f 100755
--- a/Rakefile
+++ b/Rakefile
@@ -1,7 +1,7 @@
#!/usr/bin/env rake
# Add your own tasks in files placed in lib/tasks ending in .rake,
-require File.expand_path('../config/application', __FILE__)
+require File.expand_path('config/application', __dir__)
require 'rake'
require 'rspec-rerun/tasks' if defined?(RSpec) # http://stackoverflow.com/a/16853615/2866660
diff --git a/app/controllers/admin/bank_accounts_controller.rb b/app/controllers/admin/bank_accounts_controller.rb
index e23b03b2..d37f57e8 100644
--- a/app/controllers/admin/bank_accounts_controller.rb
+++ b/app/controllers/admin/bank_accounts_controller.rb
@@ -3,39 +3,39 @@ class Admin::BankAccountsController < Admin::BaseController
def new
@bank_account = BankAccount.new(params[:bank_account])
- render :layout => false
+ render layout: false
+ end
+
+ def edit
+ @bank_account = BankAccount.find(params[:id])
+ render action: 'new', layout: false
end
def create
@bank_account = BankAccount.new(params[:bank_account])
if @bank_account.valid? && @bank_account.save
- redirect_to update_bank_accounts_admin_finances_url, :status => 303
+ redirect_to update_bank_accounts_admin_finances_url, status: :see_other
else
- render :action => 'new', :layout => false
+ render action: 'new', layout: false
end
end
- def edit
- @bank_account = BankAccount.find(params[:id])
- render :action => 'new', :layout => false
- end
-
def update
@bank_account = BankAccount.find(params[:id])
if @bank_account.update(params[:bank_account])
- redirect_to update_bank_accounts_admin_finances_url, :status => 303
+ redirect_to update_bank_accounts_admin_finances_url, status: :see_other
else
- render :action => 'new', :layout => false
+ render action: 'new', layout: false
end
end
def destroy
@bank_account = BankAccount.find(params[:id])
@bank_account.destroy
- redirect_to update_bank_accounts_admin_finances_url, :status => 303
- rescue => error
- flash.now[:alert] = error.message
+ redirect_to update_bank_accounts_admin_finances_url, status: :see_other
+ rescue StandardError => e
+ flash.now[:alert] = e.message
render template: 'shared/alert'
end
end
diff --git a/app/controllers/admin/bank_gateways_controller.rb b/app/controllers/admin/bank_gateways_controller.rb
index 3965c91b..c7ca5516 100644
--- a/app/controllers/admin/bank_gateways_controller.rb
+++ b/app/controllers/admin/bank_gateways_controller.rb
@@ -6,6 +6,11 @@ class Admin::BankGatewaysController < Admin::BaseController
render layout: false
end
+ def edit
+ @bank_gateway = BankGateway.find(params[:id])
+ render action: 'new', layout: false
+ end
+
def create
@bank_gateway = BankGateway.new(params[:bank_gateway])
if @bank_gateway.valid? && @bank_gateway.save
@@ -15,11 +20,6 @@ class Admin::BankGatewaysController < Admin::BaseController
end
end
- def edit
- @bank_gateway = BankGateway.find(params[:id])
- render action: 'new', layout: false
- end
-
def update
@bank_gateway = BankGateway.find(params[:id])
diff --git a/app/controllers/admin/configs_controller.rb b/app/controllers/admin/configs_controller.rb
index 516113af..500c1b87 100644
--- a/app/controllers/admin/configs_controller.rb
+++ b/app/controllers/admin/configs_controller.rb
@@ -1,5 +1,5 @@
class Admin::ConfigsController < Admin::BaseController
- before_action :get_tabs, only: [:show, :list]
+ before_action :get_tabs, only: %i[show list]
def show
@current_tab = @tabs.include?(params[:tab]) ? params[:tab] : @tabs.first
@@ -16,7 +16,7 @@ class Admin::ConfigsController < Admin::BaseController
def update
parse_recurring_selects! params[:config][:order_schedule]
ActiveRecord::Base.transaction do
- # TODO support nested configuration keys
+ # TODO: support nested configuration keys
params[:config].each do |key, val|
FoodsoftConfig[key] = convert_config_value val
end
@@ -29,7 +29,7 @@ class Admin::ConfigsController < Admin::BaseController
# Set configuration tab names as `@tabs`
def get_tabs
- @tabs = %w(foodcoop payment tasks messages layout language security others)
+ @tabs = %w[foodcoop payment tasks messages layout language security others]
# allow engines to modify this list
engines = Rails::Engine.subclasses.map(&:instance).select { |e| e.respond_to?(:configuration) }
engines.each { |e| e.configuration(@tabs, self) }
@@ -38,16 +38,16 @@ class Admin::ConfigsController < Admin::BaseController
# turn recurring rules into something palatable
def parse_recurring_selects!(config)
- if config
- for k in [:pickup, :boxfill, :ends] do
- if config[k]
- # allow clearing it using dummy value '{}' ('' would break recurring_select)
- if config[k][:recurr].present? && config[k][:recurr] != '{}'
- config[k][:recurr] = ActiveSupport::JSON.decode(config[k][:recurr])
- config[k][:recurr] = FoodsoftDateUtil.rule_from(config[k][:recurr]).to_ical if config[k][:recurr]
- else
- config[k] = nil
- end
+ return unless config
+
+ for k in %i[pickup boxfill ends] do
+ if config[k]
+ # allow clearing it using dummy value '{}' ('' would break recurring_select)
+ if config[k][:recurr].present? && config[k][:recurr] != '{}'
+ config[k][:recurr] = ActiveSupport::JSON.decode(config[k][:recurr])
+ config[k][:recurr] = FoodsoftDateUtil.rule_from(config[k][:recurr]).to_ical if config[k][:recurr]
+ else
+ config[k] = nil
end
end
end
diff --git a/app/controllers/admin/finances_controller.rb b/app/controllers/admin/finances_controller.rb
index 5aae587b..75bb7456 100644
--- a/app/controllers/admin/finances_controller.rb
+++ b/app/controllers/admin/finances_controller.rb
@@ -10,21 +10,21 @@ class Admin::FinancesController < Admin::BaseController
def update_bank_accounts
@bank_accounts = BankAccount.order('name')
- render :layout => false
+ render layout: false
end
def update_bank_gateways
@bank_gateways = BankGateway.order('name')
- render :layout => false
+ render layout: false
end
def update_transaction_types
@financial_transaction_classes = FinancialTransactionClass.includes(:financial_transaction_types).order('name ASC')
- render :layout => false
+ render layout: false
end
def update_supplier_categories
@supplier_categories = SupplierCategory.order('name')
- render :layout => false
+ render layout: false
end
end
diff --git a/app/controllers/admin/financial_transaction_classes_controller.rb b/app/controllers/admin/financial_transaction_classes_controller.rb
index e5d27efd..132e9038 100644
--- a/app/controllers/admin/financial_transaction_classes_controller.rb
+++ b/app/controllers/admin/financial_transaction_classes_controller.rb
@@ -6,25 +6,25 @@ class Admin::FinancialTransactionClassesController < Admin::BaseController
render layout: false
end
- def create
- @financial_transaction_class = FinancialTransactionClass.new(params[:financial_transaction_class])
- if @financial_transaction_class.save
- redirect_to update_transaction_types_admin_finances_url, status: 303
- else
- render action: 'new', layout: false
- end
- end
-
def edit
@financial_transaction_class = FinancialTransactionClass.find(params[:id])
render action: 'new', layout: false
end
+ def create
+ @financial_transaction_class = FinancialTransactionClass.new(params[:financial_transaction_class])
+ if @financial_transaction_class.save
+ redirect_to update_transaction_types_admin_finances_url, status: :see_other
+ else
+ render action: 'new', layout: false
+ end
+ end
+
def update
@financial_transaction_class = FinancialTransactionClass.find(params[:id])
if @financial_transaction_class.update(params[:financial_transaction_class])
- redirect_to update_transaction_types_admin_finances_url, status: 303
+ redirect_to update_transaction_types_admin_finances_url, status: :see_other
else
render action: 'new', layout: false
end
@@ -33,9 +33,9 @@ class Admin::FinancialTransactionClassesController < Admin::BaseController
def destroy
@financial_transaction_class = FinancialTransactionClass.find(params[:id])
@financial_transaction_class.destroy!
- redirect_to update_transaction_types_admin_finances_url, status: 303
- rescue => error
- flash.now[:alert] = error.message
+ redirect_to update_transaction_types_admin_finances_url, status: :see_other
+ rescue StandardError => e
+ flash.now[:alert] = e.message
render template: 'shared/alert'
end
end
diff --git a/app/controllers/admin/financial_transaction_types_controller.rb b/app/controllers/admin/financial_transaction_types_controller.rb
index 2710bd6e..322451e4 100644
--- a/app/controllers/admin/financial_transaction_types_controller.rb
+++ b/app/controllers/admin/financial_transaction_types_controller.rb
@@ -7,25 +7,25 @@ class Admin::FinancialTransactionTypesController < Admin::BaseController
render layout: false
end
- def create
- @financial_transaction_type = FinancialTransactionType.new(params[:financial_transaction_type])
- if @financial_transaction_type.save
- redirect_to update_transaction_types_admin_finances_url, status: 303
- else
- render action: 'new', layout: false
- end
- end
-
def edit
@financial_transaction_type = FinancialTransactionType.find(params[:id])
render action: 'new', layout: false
end
+ def create
+ @financial_transaction_type = FinancialTransactionType.new(params[:financial_transaction_type])
+ if @financial_transaction_type.save
+ redirect_to update_transaction_types_admin_finances_url, status: :see_other
+ else
+ render action: 'new', layout: false
+ end
+ end
+
def update
@financial_transaction_type = FinancialTransactionType.find(params[:id])
if @financial_transaction_type.update(params[:financial_transaction_type])
- redirect_to update_transaction_types_admin_finances_url, status: 303
+ redirect_to update_transaction_types_admin_finances_url, status: :see_other
else
render action: 'new', layout: false
end
@@ -34,9 +34,9 @@ class Admin::FinancialTransactionTypesController < Admin::BaseController
def destroy
@financial_transaction_type = FinancialTransactionType.find(params[:id])
@financial_transaction_type.destroy!
- redirect_to update_transaction_types_admin_finances_url, status: 303
- rescue => error
- flash.now[:alert] = error.message
+ redirect_to update_transaction_types_admin_finances_url, status: :see_other
+ rescue StandardError => e
+ flash.now[:alert] = e.message
render template: 'shared/alert'
end
end
diff --git a/app/controllers/admin/mail_delivery_status_controller.rb b/app/controllers/admin/mail_delivery_status_controller.rb
index 52a4db92..c0086044 100644
--- a/app/controllers/admin/mail_delivery_status_controller.rb
+++ b/app/controllers/admin/mail_delivery_status_controller.rb
@@ -3,28 +3,28 @@ class Admin::MailDeliveryStatusController < Admin::BaseController
def index
@maildeliverystatus = MailDeliveryStatus.order(created_at: :desc)
- @maildeliverystatus = @maildeliverystatus.where(email: params[:email]) unless params[:email].blank?
+ @maildeliverystatus = @maildeliverystatus.where(email: params[:email]) if params[:email].present?
@maildeliverystatus = @maildeliverystatus.page(params[:page]).per(@per_page)
end
def show
@maildeliverystatus = MailDeliveryStatus.find(params[:id])
filename = "maildeliverystatus_#{params[:id]}.#{MIME::Types[@maildeliverystatus.attachment_mime].first.preferred_extension}"
- send_data(@maildeliverystatus.attachment_data, :filename => filename, :type => @maildeliverystatus.attachment_mime)
+ send_data(@maildeliverystatus.attachment_data, filename: filename, type: @maildeliverystatus.attachment_mime)
end
def destroy_all
@maildeliverystatus = MailDeliveryStatus.delete_all
redirect_to admin_mail_delivery_status_index_path, notice: t('.notice')
- rescue => error
- redirect_to admin_mail_delivery_status_index_path, alert: I18n.t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to admin_mail_delivery_status_index_path, alert: I18n.t('errors.general_msg', msg: e.message)
end
def destroy
@maildeliverystatus = MailDeliveryStatus.find(params[:id])
@maildeliverystatus.destroy
redirect_to admin_mail_delivery_status_index_path, notice: t('.notice')
- rescue => error
- redirect_to admin_mail_delivery_status_index_path, alert: I18n.t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to admin_mail_delivery_status_index_path, alert: I18n.t('errors.general_msg', msg: e.message)
end
end
diff --git a/app/controllers/admin/ordergroups_controller.rb b/app/controllers/admin/ordergroups_controller.rb
index d9dabe1e..213f3a0d 100644
--- a/app/controllers/admin/ordergroups_controller.rb
+++ b/app/controllers/admin/ordergroups_controller.rb
@@ -2,16 +2,15 @@ class Admin::OrdergroupsController < Admin::BaseController
inherit_resources
def index
- @ordergroups = Ordergroup.undeleted.sort_by_param(params["sort"])
+ @ordergroups = Ordergroup.undeleted.sort_by_param(params['sort'])
if request.format.csv?
- send_data OrdergroupsCsv.new(@ordergroups).to_csv, filename: 'ordergroups.csv', type: 'text/csv'
+ send_data OrdergroupsCsv.new(@ordergroups).to_csv, filename: 'ordergroups.csv',
+ type: 'text/csv'
end
# if somebody uses the search field:
- unless params[:query].blank?
- @ordergroups = @ordergroups.where('name LIKE ?', "%#{params[:query]}%")
- end
+ @ordergroups = @ordergroups.where('name LIKE ?', "%#{params[:query]}%") if params[:query].present?
@ordergroups = @ordergroups.page(params[:page]).per(@per_page)
end
@@ -19,8 +18,8 @@ class Admin::OrdergroupsController < Admin::BaseController
def destroy
@ordergroup = Ordergroup.find(params[:id])
@ordergroup.mark_as_deleted
- redirect_to admin_ordergroups_url, notice: t('admin.ordergroups.destroy.notice')
- rescue => error
- redirect_to admin_ordergroups_url, alert: t('admin.ordergroups.destroy.error')
+ redirect_to admin_ordergroups_url, notice: t('.notice')
+ rescue StandardError => e
+ redirect_to admin_ordergroups_url, alert: t('.error')
end
end
diff --git a/app/controllers/admin/supplier_categories_controller.rb b/app/controllers/admin/supplier_categories_controller.rb
index f5768a21..f119dfb6 100644
--- a/app/controllers/admin/supplier_categories_controller.rb
+++ b/app/controllers/admin/supplier_categories_controller.rb
@@ -6,6 +6,11 @@ class Admin::SupplierCategoriesController < Admin::BaseController
render layout: false
end
+ def edit
+ @supplier_category = SupplierCategory.find(params[:id])
+ render action: 'new', layout: false
+ end
+
def create
@supplier_category = SupplierCategory.new(params[:supplier_category])
if @supplier_category.valid? && @supplier_category.save
@@ -15,11 +20,6 @@ class Admin::SupplierCategoriesController < Admin::BaseController
end
end
- def edit
- @supplier_category = SupplierCategory.find(params[:id])
- render action: 'new', layout: false
- end
-
def update
@supplier_category = SupplierCategory.find(params[:id])
diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb
index 18bbbc1d..7d7e9295 100644
--- a/app/controllers/admin/users_controller.rb
+++ b/app/controllers/admin/users_controller.rb
@@ -3,16 +3,14 @@ class Admin::UsersController < Admin::BaseController
def index
@users = params[:show_deleted] ? User.deleted : User.undeleted
- @users = @users.sort_by_param(params["sort"])
+ @users = @users.sort_by_param(params['sort'])
@users = @users.includes(:mail_delivery_status)
- if request.format.csv?
- send_data UsersCsv.new(@users).to_csv, filename: 'users.csv', type: 'text/csv'
- end
+ send_data UsersCsv.new(@users).to_csv, filename: 'users.csv', type: 'text/csv' if request.format.csv?
# if somebody uses the search field:
- @users = @users.natural_search(params[:user_name]) unless params[:user_name].blank?
+ @users = @users.natural_search(params[:user_name]) if params[:user_name].present?
@users = @users.page(params[:page]).per(@per_page)
end
@@ -20,17 +18,17 @@ class Admin::UsersController < Admin::BaseController
def destroy
@user = User.find(params[:id])
@user.mark_as_deleted
- redirect_to admin_users_url, notice: t('admin.users.destroy.notice')
- rescue => error
- redirect_to admin_users_url, alert: t('admin.users.destroy.error', error: error.message)
+ redirect_to admin_users_url, notice: t('.notice')
+ rescue StandardError => e
+ redirect_to admin_users_url, alert: t('.error', error: e.message)
end
def restore
@user = User.find(params[:id])
@user.restore
- redirect_to admin_users_url, notice: t('admin.users.restore.notice')
- rescue => error
- redirect_to admin_users_url, alert: t('admin.users.restore.error', error: error.message)
+ redirect_to admin_users_url, notice: t('.notice')
+ rescue StandardError => e
+ redirect_to admin_users_url, alert: t('.error', error: e.message)
end
def sudo
diff --git a/app/controllers/admin/workgroups_controller.rb b/app/controllers/admin/workgroups_controller.rb
index 184000bd..f5a9c2a3 100644
--- a/app/controllers/admin/workgroups_controller.rb
+++ b/app/controllers/admin/workgroups_controller.rb
@@ -4,7 +4,7 @@ class Admin::WorkgroupsController < Admin::BaseController
def index
@workgroups = Workgroup.order('name ASC')
# if somebody uses the search field:
- @workgroups = @workgroups.where('name LIKE ?', "%#{params[:query]}%") unless params[:query].blank?
+ @workgroups = @workgroups.where('name LIKE ?', "%#{params[:query]}%") if params[:query].present?
@workgroups = @workgroups.page(params[:page]).per(@per_page)
end
@@ -12,8 +12,8 @@ class Admin::WorkgroupsController < Admin::BaseController
def destroy
@workgroup = Workgroup.find(params[:id])
@workgroup.destroy
- redirect_to admin_workgroups_url, notice: t('admin.workgroups.destroy.notice')
- rescue => error
- redirect_to admin_workgroups_url, alert: t('admin.workgroups.destroy.error', error: error.message)
+ redirect_to admin_workgroups_url, notice: t('.notice')
+ rescue StandardError => e
+ redirect_to admin_workgroups_url, alert: t('.error', error: e.message)
end
end
diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb
index 13e903f1..8bed20ec 100644
--- a/app/controllers/api/v1/base_controller.rb
+++ b/app/controllers/api/v1/base_controller.rb
@@ -20,29 +20,30 @@ class Api::V1::BaseController < ApplicationController
def require_ordergroup
authenticate
- unless current_ordergroup.present?
- raise Api::Errors::PermissionRequired.new('Forbidden, must be in an ordergroup')
- end
+ return if current_ordergroup.present?
+
+ raise Api::Errors::PermissionRequired, 'Forbidden, must be in an ordergroup'
end
def require_minimum_balance
minimum_balance = FoodsoftConfig[:minimum_balance] or return
- if current_ordergroup.account_balance < minimum_balance
- raise Api::Errors::PermissionRequired.new(t('application.controller.error_minimum_balance', min: minimum_balance))
- end
+ return unless current_ordergroup.account_balance < minimum_balance
+
+ raise Api::Errors::PermissionRequired, t('application.controller.error_minimum_balance', min: minimum_balance)
end
def require_enough_apples
- if current_ordergroup.not_enough_apples?
- s = t('group_orders.messages.not_enough_apples', apples: current_ordergroup.apples, stop_ordering_under: FoodsoftConfig[:stop_ordering_under])
- raise Api::Errors::PermissionRequired.new(s)
- end
+ return unless current_ordergroup.not_enough_apples?
+
+ s = t('group_orders.messages.not_enough_apples', apples: current_ordergroup.apples,
+ stop_ordering_under: FoodsoftConfig[:stop_ordering_under])
+ raise Api::Errors::PermissionRequired, s
end
def require_config_enabled(config)
- unless FoodsoftConfig[config]
- raise Api::Errors::PermissionRequired.new(t('application.controller.error_not_enabled', config: config))
- end
+ return if FoodsoftConfig[config]
+
+ raise Api::Errors::PermissionRequired, t('application.controller.error_not_enabled', config: config)
end
def skip_session
@@ -52,12 +53,12 @@ class Api::V1::BaseController < ApplicationController
def not_found_handler(e)
# remove where-clauses from error message (not suitable for end-users)
msg = e.message.try { |m| m.sub(/\s*\[.*?\]\s*$/, '') } || 'Not found'
- render status: 404, json: { error: 'not_found', error_description: msg }
+ render status: :not_found, json: { error: 'not_found', error_description: msg }
end
def not_acceptable_handler(e)
msg = e.message || 'Data not acceptable'
- render status: 422, json: { error: 'not_acceptable', error_description: msg }
+ render status: :unprocessable_entity, json: { error: 'not_acceptable', error_description: msg }
end
def doorkeeper_unauthorized_render_options(error:)
@@ -70,11 +71,11 @@ class Api::V1::BaseController < ApplicationController
def permission_required_handler(e)
msg = e.message || 'Forbidden, user has no access'
- render status: 403, json: { error: 'forbidden', error_description: msg }
+ render status: :forbidden, json: { error: 'forbidden', error_description: msg }
end
# @todo something with ApplicationHelper#show_user
- def show_user(user = current_user, **options)
+ def show_user(user = current_user, **_options)
user.display
end
end
diff --git a/app/controllers/api/v1/user/financial_transactions_controller.rb b/app/controllers/api/v1/user/financial_transactions_controller.rb
index 96b32e28..3de38de9 100644
--- a/app/controllers/api/v1/user/financial_transactions_controller.rb
+++ b/app/controllers/api/v1/user/financial_transactions_controller.rb
@@ -16,7 +16,8 @@ class Api::V1::User::FinancialTransactionsController < Api::V1::BaseController
def create
transaction_type = FinancialTransactionType.find(create_params[:financial_transaction_type_id])
- ft = current_ordergroup.add_financial_transaction!(create_params[:amount], create_params[:note], current_user, transaction_type)
+ ft = current_ordergroup.add_financial_transaction!(create_params[:amount], create_params[:note], current_user,
+ transaction_type)
render json: ft
end
diff --git a/app/controllers/api/v1/user/group_order_articles_controller.rb b/app/controllers/api/v1/user/group_order_articles_controller.rb
index ce258898..4b65a61d 100644
--- a/app/controllers/api/v1/user/group_order_articles_controller.rb
+++ b/app/controllers/api/v1/user/group_order_articles_controller.rb
@@ -4,8 +4,8 @@ class Api::V1::User::GroupOrderArticlesController < Api::V1::BaseController
before_action -> { doorkeeper_authorize! 'group_orders:user' }
before_action :require_ordergroup
- before_action :require_minimum_balance, only: [:create, :update] # destroy is ok
- before_action :require_enough_apples, only: [:create, :update] # destroy is ok
+ before_action :require_minimum_balance, only: %i[create update] # destroy is ok
+ before_action :require_enough_apples, only: %i[create update] # destroy is ok
# @todo allow decreasing amounts when minimum balance isn't met
def index
@@ -35,7 +35,8 @@ class Api::V1::User::GroupOrderArticlesController < Api::V1::BaseController
goa = nil
GroupOrderArticle.transaction do
goa = scope_for_update.includes(:group_order_article_quantities).find(params.require(:id))
- goa.update_quantities((update_params[:quantity] || goa.quantity).to_i, (update_params[:tolerance] || goa.tolerance).to_i)
+ goa.update_quantities((update_params[:quantity] || goa.quantity).to_i,
+ (update_params[:tolerance] || goa.tolerance).to_i)
goa.order_article.update_results!
goa.group_order.update_price!
goa.group_order.update!(updated_by: current_user)
diff --git a/app/controllers/api/v1/user/ordergroup_controller.rb b/app/controllers/api/v1/user/ordergroup_controller.rb
index 08c12b4c..23889fe8 100644
--- a/app/controllers/api/v1/user/ordergroup_controller.rb
+++ b/app/controllers/api/v1/user/ordergroup_controller.rb
@@ -8,13 +8,13 @@ class Api::V1::User::OrdergroupController < Api::V1::BaseController
financial_overview: {
account_balance: ordergroup.account_balance.to_f,
available_funds: ordergroup.get_available_funds.to_f,
- financial_transaction_class_sums: FinancialTransactionClass.sorted.map { |c|
+ financial_transaction_class_sums: FinancialTransactionClass.sorted.map do |c|
{
id: c.id,
name: c.display,
amount: ordergroup["sum_of_class_#{c.id}"].to_f
}
- }
+ end
}
}
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index eb90f9b4..3537f8c4 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -19,10 +19,10 @@ class ApplicationController < ActionController::Base
private
def set_user_last_activity
- if current_user && (session[:last_activity] == nil || session[:last_activity] < 1.minutes.ago)
- current_user.update_attribute(:last_activity, Time.now)
- session[:last_activity] = Time.now
- end
+ return unless current_user && (session[:last_activity].nil? || session[:last_activity] < 1.minute.ago)
+
+ current_user.update_attribute(:last_activity, Time.now)
+ session[:last_activity] = Time.now
end
# Many plugins can be turned on and off on the fly with a `use_` configuration option.
@@ -64,11 +64,11 @@ class ApplicationController < ActionController::Base
end
def items_per_page
- if params[:per_page] && params[:per_page].to_i > 0 && params[:per_page].to_i <= 500
- @per_page = params[:per_page].to_i
- else
- @per_page = 20
- end
+ @per_page = if params[:per_page] && params[:per_page].to_i > 0 && params[:per_page].to_i <= 500
+ params[:per_page].to_i
+ else
+ 20
+ end
end
# Set timezone according to foodcoop preference.
diff --git a/app/controllers/article_categories_controller.rb b/app/controllers/article_categories_controller.rb
index bfa601d3..810bb3ce 100644
--- a/app/controllers/article_categories_controller.rb
+++ b/app/controllers/article_categories_controller.rb
@@ -4,17 +4,17 @@ class ArticleCategoriesController < ApplicationController
before_action :authenticate_article_meta
def create
- create!(:notice => I18n.t('article_categories.create.notice')) { article_categories_path }
+ create!(notice: I18n.t('article_categories.create.notice')) { article_categories_path }
end
def update
- update!(:notice => I18n.t('article_categories.update.notice')) { article_categories_path }
+ update!(notice: I18n.t('article_categories.update.notice')) { article_categories_path }
end
def destroy
destroy!
- rescue => error
- redirect_to article_categories_path, alert: I18n.t('article_categories.destroy.error', message: error.message)
+ rescue StandardError => e
+ redirect_to article_categories_path, alert: I18n.t('article_categories.destroy.error', message: e.message)
end
protected
diff --git a/app/controllers/articles_controller.rb b/app/controllers/articles_controller.rb
index 4161e66a..232391cf 100644
--- a/app/controllers/articles_controller.rb
+++ b/app/controllers/articles_controller.rb
@@ -2,24 +2,24 @@ class ArticlesController < ApplicationController
before_action :authenticate_article_meta, :find_supplier
def index
- if params['sort']
- sort = case params['sort']
- when "name" then "articles.name"
- when "unit" then "articles.unit"
- when "article_category" then "article_categories.name"
- when "note" then "articles.note"
- when "availability" then "articles.availability"
- when "name_reverse" then "articles.name DESC"
- when "unit_reverse" then "articles.unit DESC"
- when "article_category_reverse" then "article_categories.name DESC"
- when "note_reverse" then "articles.note DESC"
- when "availability_reverse" then "articles.availability DESC"
+ sort = if params['sort']
+ case params['sort']
+ when 'name' then 'articles.name'
+ when 'unit' then 'articles.unit'
+ when 'article_category' then 'article_categories.name'
+ when 'note' then 'articles.note'
+ when 'availability' then 'articles.availability'
+ when 'name_reverse' then 'articles.name DESC'
+ when 'unit_reverse' then 'articles.unit DESC'
+ when 'article_category_reverse' then 'article_categories.name DESC'
+ when 'note_reverse' then 'articles.note DESC'
+ when 'availability_reverse' then 'articles.availability DESC'
end
- else
- sort = "article_categories.name, articles.name"
- end
+ else
+ 'article_categories.name, articles.name'
+ end
- @articles = Article.undeleted.where(supplier_id: @supplier, :type => nil).includes(:article_category).order(sort)
+ @articles = Article.undeleted.where(supplier_id: @supplier, type: nil).includes(:article_category).order(sort)
if request.format.csv?
send_data ArticlesCsv.new(@articles, encoding: 'utf-8').to_csv, filename: 'articles.csv', type: 'text/csv'
@@ -32,42 +32,42 @@ class ArticlesController < ApplicationController
respond_to do |format|
format.html
- format.js { render :layout => false }
+ format.js { render layout: false }
end
end
def new
- @article = @supplier.articles.build(:tax => FoodsoftConfig[:tax_default])
- render :layout => false
+ @article = @supplier.articles.build(tax: FoodsoftConfig[:tax_default])
+ render layout: false
end
def copy
@article = @supplier.articles.find(params[:article_id]).dup
- render :layout => false
+ render layout: false
+ end
+
+ def edit
+ @article = Article.find(params[:id])
+ render action: 'new', layout: false
end
def create
@article = Article.new(params[:article])
if @article.valid? && @article.save
- render :layout => false
+ render layout: false
else
- render :action => 'new', :layout => false
+ render action: 'new', layout: false
end
end
- def edit
- @article = Article.find(params[:id])
- render :action => 'new', :layout => false
- end
-
# Updates one Article and highlights the line if succeded
def update
@article = Article.find(params[:id])
if @article.update(params[:article])
- render :layout => false
+ render layout: false
else
- render :action => 'new', :layout => false
+ render action: 'new', layout: false
end
end
@@ -75,7 +75,7 @@ class ArticlesController < ApplicationController
def destroy
@article = Article.find(params[:id])
@article.mark_as_deleted unless @order = @article.in_open_order # If article is in an active Order, the Order will be returned
- render :layout => false
+ render layout: false
end
# Renders a form for editing all articles from a supplier
@@ -87,19 +87,17 @@ class ArticlesController < ApplicationController
def update_all
invalid_articles = false
- begin
- Article.transaction do
- unless params[:articles].blank?
- # Update other article attributes...
- @articles = Article.find(params[:articles].keys)
- @articles.each do |article|
- unless article.update(params[:articles][article.id.to_s])
- invalid_articles = true unless invalid_articles # Remember that there are validation errors
- end
+ Article.transaction do
+ if params[:articles].present?
+ # Update other article attributes...
+ @articles = Article.find(params[:articles].keys)
+ @articles.each do |article|
+ unless article.update(params[:articles][article.id.to_s])
+ invalid_articles ||= true # Remember that there are validation errors
end
-
- raise ActiveRecord::Rollback if invalid_articles # Rollback all changes
end
+
+ raise ActiveRecord::Rollback if invalid_articles # Rollback all changes
end
end
@@ -134,16 +132,15 @@ class ArticlesController < ApplicationController
end
end
# action succeded
- redirect_to supplier_articles_url(@supplier, :per_page => params[:per_page])
- rescue => error
- redirect_to supplier_articles_url(@supplier, :per_page => params[:per_page]),
- :alert => I18n.t('errors.general_msg', :msg => error)
+ redirect_to supplier_articles_url(@supplier, per_page: params[:per_page])
+ rescue StandardError => e
+ redirect_to supplier_articles_url(@supplier, per_page: params[:per_page]),
+ alert: I18n.t('errors.general_msg', msg: e)
end
# lets start with parsing articles from uploaded file, yeah
# Renders the upload form
- def upload
- end
+ def upload; end
# Update articles from a spreadsheet
def parse_upload
@@ -151,13 +148,15 @@ class ArticlesController < ApplicationController
options = { filename: uploaded_file.original_filename }
options[:outlist_absent] = (params[:articles]['outlist_absent'] == '1')
options[:convert_units] = (params[:articles]['convert_units'] == '1')
- @updated_article_pairs, @outlisted_articles, @new_articles = @supplier.sync_from_file uploaded_file.tempfile, options
+ @updated_article_pairs, @outlisted_articles, @new_articles = @supplier.sync_from_file uploaded_file.tempfile,
+ options
if @updated_article_pairs.empty? && @outlisted_articles.empty? && @new_articles.empty?
- redirect_to supplier_articles_path(@supplier), :notice => I18n.t('articles.controller.parse_upload.notice')
+ redirect_to supplier_articles_path(@supplier),
+ notice: I18n.t('articles.controller.parse_upload.notice')
end
@ignored_article_count = 0
- rescue => error
- redirect_to upload_supplier_articles_path(@supplier), :alert => I18n.t('errors.general_msg', :msg => error.message)
+ rescue StandardError => e
+ redirect_to upload_supplier_articles_path(@supplier), alert: I18n.t('errors.general_msg', msg: e.message)
end
# sync all articles with the external database
@@ -165,13 +164,14 @@ class ArticlesController < ApplicationController
def sync
# check if there is an shared_supplier
unless @supplier.shared_supplier
- redirect_to supplier_articles_url(@supplier), :alert => I18n.t('articles.controller.sync.shared_alert', :supplier => @supplier.name)
+ redirect_to supplier_articles_url(@supplier),
+ alert: I18n.t('articles.controller.sync.shared_alert', supplier: @supplier.name)
end
# sync articles against external database
@updated_article_pairs, @outlisted_articles, @new_articles = @supplier.sync_all
- if @updated_article_pairs.empty? && @outlisted_articles.empty? && @new_articles.empty?
- redirect_to supplier_articles_path(@supplier), :notice => I18n.t('articles.controller.sync.notice')
- end
+ return unless @updated_article_pairs.empty? && @outlisted_articles.empty? && @new_articles.empty?
+
+ redirect_to supplier_articles_path(@supplier), notice: I18n.t('articles.controller.sync.notice')
end
# Updates, deletes articles when upload or sync form is submitted
@@ -186,7 +186,7 @@ class ArticlesController < ApplicationController
# delete articles
begin
@outlisted_articles.each(&:mark_as_deleted)
- rescue
+ rescue StandardError
# raises an exception when used in current order
has_error = true
end
@@ -198,15 +198,15 @@ class ArticlesController < ApplicationController
raise ActiveRecord::Rollback if has_error
end
- if !has_error
- redirect_to supplier_articles_path(@supplier), notice: I18n.t('articles.controller.update_sync.notice')
- else
+ if has_error
@updated_article_pairs = @updated_articles.map do |article|
orig_article = Article.find(article.id)
[article, orig_article.unequal_attributes(article)]
end
flash.now.alert = I18n.t('articles.controller.error_invalid')
render params[:from_action] == 'sync' ? :sync : :parse_upload
+ else
+ redirect_to supplier_articles_path(@supplier), notice: I18n.t('articles.controller.update_sync.notice')
end
end
@@ -218,18 +218,18 @@ class ArticlesController < ApplicationController
q[:name_cont_all] = params.fetch(:name_cont_all_joined, '').split(' ')
search = @supplier.shared_supplier.shared_articles.ransack(q)
@articles = search.result.page(params[:page]).per(10)
- render :layout => false
+ render layout: false
end
# fills a form whith values of the selected shared_article
# when the direct parameter is set and the article is valid, it is imported directly
def import
@article = SharedArticle.find(params[:shared_article_id]).build_new_article(@supplier)
- @article.article_category_id = params[:article_category_id] unless params[:article_category_id].blank?
- if params[:direct] && !params[:article_category_id].blank? && @article.valid? && @article.save
- render :action => 'create', :layout => false
+ @article.article_category_id = params[:article_category_id] if params[:article_category_id].present?
+ if params[:direct] && params[:article_category_id].present? && @article.valid? && @article.save
+ render action: 'create', layout: false
else
- render :action => 'new', :layout => false
+ render action: 'new', layout: false
end
end
diff --git a/app/controllers/concerns/auth.rb b/app/controllers/concerns/auth.rb
index 277acd69..edf6ec6f 100644
--- a/app/controllers/concerns/auth.rb
+++ b/app/controllers/concerns/auth.rb
@@ -9,15 +9,19 @@ module Concerns::Auth
def current_user
# check if there is a valid session and return the logged-in user (its object)
- if session[:user_id] && params[:foodcoop]
- # for shared-host installations. check if the cookie-subdomain fits to request.
- @current_user ||= User.undeleted.find_by_id(session[:user_id]) if session[:scope] == FoodsoftConfig.scope
- end
+ return unless session[:user_id] && params[:foodcoop]
+
+ # for shared-host installations. check if the cookie-subdomain fits to request.
+ @current_user ||= User.undeleted.find_by_id(session[:user_id]) if session[:scope] == FoodsoftConfig.scope
end
def deny_access
session[:return_to] = request.original_url
- redirect_to root_url, alert: I18n.t('application.controller.error_denied', sign_in: ActionController::Base.helpers.link_to(t('application.controller.error_denied_sign_in'), login_path))
+ redirect_to root_url,
+ alert: I18n.t('application.controller.error_denied',
+ sign_in: ActionController::Base.helpers.link_to(
+ t('application.controller.error_denied_sign_in'), login_path
+ ))
end
private
@@ -47,12 +51,7 @@ module Concerns::Auth
def authenticate(role = 'any')
# Attempt to retrieve authenticated user from controller instance or session...
- if !current_user
- # No user at all: redirect to login page.
- logout
- session[:return_to] = request.original_url
- redirect_to_login :alert => I18n.t('application.controller.error_authn')
- else
+ if current_user
# We have an authenticated user, now check role...
# Roles gets the user through his memberships.
hasRole = case role
@@ -73,6 +72,11 @@ module Concerns::Auth
else
deny_access
end
+ else
+ # No user at all: redirect to login page.
+ logout
+ session[:return_to] = request.original_url
+ redirect_to_login alert: I18n.t('application.controller.error_authn')
end
end
@@ -116,13 +120,13 @@ module Concerns::Auth
# if fails the user will redirected to startpage
def authenticate_membership_or_admin(group_id = params[:id])
@group = Group.find(group_id)
- unless @group.member?(@current_user) || @current_user.role_admin?
- redirect_to root_path, alert: I18n.t('application.controller.error_members_only')
- end
+ return if @group.member?(@current_user) || @current_user.role_admin?
+
+ redirect_to root_path, alert: I18n.t('application.controller.error_members_only')
end
def authenticate_or_token(prefix, role = 'any')
- if not params[:token].blank?
+ if params[:token].present?
begin
TokenVerifier.new(prefix).verify(params[:token])
rescue ActiveSupport::MessageVerifier::InvalidSignature
diff --git a/app/controllers/concerns/auth_api.rb b/app/controllers/concerns/auth_api.rb
index 2c80dddf..fc16a2c2 100644
--- a/app/controllers/concerns/auth_api.rb
+++ b/app/controllers/concerns/auth_api.rb
@@ -36,9 +36,9 @@ module Concerns::AuthApi
# Make sure that at least one the given OAuth scopes is valid for the current user's permissions.
# @raise Api::Errors::PermissionsRequired
def doorkeeper_authorize_roles!(*scopes)
- unless scopes.any? { |scope| doorkeeper_scope_permitted?(scope) }
- raise Api::Errors::PermissionRequired.new('Forbidden, no permission')
- end
+ return if scopes.any? { |scope| doorkeeper_scope_permitted?(scope) }
+
+ raise Api::Errors::PermissionRequired, 'Forbidden, no permission'
end
# Check whether a given OAuth scope is permitted for the current user.
@@ -48,9 +48,7 @@ module Concerns::AuthApi
def doorkeeper_scope_permitted?(scope)
scope_parts = scope.split(':')
# user sub-scopes like +config:user+ are always permitted
- if scope_parts.last == 'user'
- return true
- end
+ return true if scope_parts.last == 'user'
case scope_parts.first
when 'user' then return true # access to the current user's own profile
@@ -64,8 +62,8 @@ module Concerns::AuthApi
end
case scope
- when 'orders:read' then return true
- when 'orders:write' then return current_user.role_orders?
+ when 'orders:read' then true
+ when 'orders:write' then current_user.role_orders?
end
end
end
diff --git a/app/controllers/concerns/foodcoop_scope.rb b/app/controllers/concerns/foodcoop_scope.rb
index 0a8e382e..7a99adf9 100644
--- a/app/controllers/concerns/foodcoop_scope.rb
+++ b/app/controllers/concerns/foodcoop_scope.rb
@@ -24,12 +24,12 @@ module Concerns::FoodcoopScope
elsif FoodsoftConfig.allowed_foodcoop? foodcoop
FoodsoftConfig.select_foodcoop foodcoop
else
- raise ActionController::RoutingError.new 'Foodcoop Not Found'
+ raise ActionController::RoutingError, 'Foodcoop Not Found'
end
end
# Always stay in foodcoop url scope
- def default_url_options(options = {})
+ def default_url_options(_options = {})
super().merge({ foodcoop: FoodsoftConfig.scope })
end
end
diff --git a/app/controllers/concerns/locale.rb b/app/controllers/concerns/locale.rb
index 22686c15..6a9736fb 100644
--- a/app/controllers/concerns/locale.rb
+++ b/app/controllers/concerns/locale.rb
@@ -18,7 +18,7 @@ module Concerns::Locale
end
def browser_language
- request.env['HTTP_ACCEPT_LANGUAGE'] ? request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first : nil
+ request.env['HTTP_ACCEPT_LANGUAGE']&.scan(/^[a-z]{2}/)&.first
end
def default_language
@@ -30,7 +30,7 @@ module Concerns::Locale
def select_language_according_to_priority
language = explicitly_requested_language || session_language || user_settings_language
language ||= browser_language unless FoodsoftConfig[:ignore_browser_locale]
- language.presence&.to_sym unless language.blank?
+ language.presence&.to_sym if language.present?
end
def available_locales
@@ -38,11 +38,11 @@ module Concerns::Locale
end
def set_locale
- if available_locales.include?(select_language_according_to_priority)
- ::I18n.locale = select_language_according_to_priority
- else
- ::I18n.locale = default_language
- end
+ ::I18n.locale = if available_locales.include?(select_language_according_to_priority)
+ select_language_according_to_priority
+ else
+ default_language
+ end
locale = session[:locale] = ::I18n.locale
logger.info("Set locale to #{locale}")
diff --git a/app/controllers/concerns/send_order_pdf.rb b/app/controllers/concerns/send_order_pdf.rb
index 09225b7c..283512da 100644
--- a/app/controllers/concerns/send_order_pdf.rb
+++ b/app/controllers/concerns/send_order_pdf.rb
@@ -3,7 +3,7 @@ module Concerns::SendOrderPdf
protected
- def send_order_pdf order, document
+ def send_order_pdf(order, document)
klass = case document
when 'groups' then OrderByGroups
when 'articles' then OrderByArticles
diff --git a/app/controllers/deliveries_controller.rb b/app/controllers/deliveries_controller.rb
index 0ecacc9c..15900022 100644
--- a/app/controllers/deliveries_controller.rb
+++ b/app/controllers/deliveries_controller.rb
@@ -1,5 +1,5 @@
class DeliveriesController < ApplicationController
- before_action :find_supplier, :exclude => :fill_new_stock_article_form
+ before_action :find_supplier, exclude: :fill_new_stock_article_form
def index
@deliveries = @supplier.deliveries.order('date DESC')
@@ -15,6 +15,10 @@ class DeliveriesController < ApplicationController
@delivery.date = Date.today # TODO: move to model/database
end
+ def edit
+ @delivery = Delivery.find(params[:id])
+ end
+
def create
@delivery = Delivery.new(params[:delivery])
@@ -22,14 +26,10 @@ class DeliveriesController < ApplicationController
flash[:notice] = I18n.t('deliveries.create.notice')
redirect_to [@supplier, @delivery]
else
- render :action => "new"
+ render action: 'new'
end
end
- def edit
- @delivery = Delivery.find(params[:id])
- end
-
def update
@delivery = Delivery.find(params[:id])
@@ -37,7 +37,7 @@ class DeliveriesController < ApplicationController
flash[:notice] = I18n.t('deliveries.update.notice')
redirect_to [@supplier, @delivery]
else
- render :action => "edit"
+ render action: 'edit'
end
end
@@ -52,18 +52,18 @@ class DeliveriesController < ApplicationController
def add_stock_change
@stock_change = StockChange.new
@stock_change.stock_article = StockArticle.find(params[:stock_article_id])
- render :layout => false
+ render layout: false
end
def form_on_stock_article_create # See publish/subscribe design pattern in /doc.
@stock_article = StockArticle.find(params[:id])
- render :layout => false
+ render layout: false
end
def form_on_stock_article_update # See publish/subscribe design pattern in /doc.
@stock_article = StockArticle.find(params[:id])
- render :layout => false
+ render layout: false
end
end
diff --git a/app/controllers/feedback_controller.rb b/app/controllers/feedback_controller.rb
index ada72859..b4e5ea7e 100644
--- a/app/controllers/feedback_controller.rb
+++ b/app/controllers/feedback_controller.rb
@@ -1,13 +1,12 @@
class FeedbackController < ApplicationController
- def new
- end
+ def new; end
def create
if params[:message].present?
Mailer.feedback(current_user, params[:message]).deliver_now
- redirect_to root_url, notice: t('feedback.create.notice')
+ redirect_to root_url, notice: t('.notice')
else
- render :action => 'new'
+ render action: 'new'
end
end
end
diff --git a/app/controllers/finance/balancing_controller.rb b/app/controllers/finance/balancing_controller.rb
index 4f23ac4f..e1a2dafb 100644
--- a/app/controllers/finance/balancing_controller.rb
+++ b/app/controllers/finance/balancing_controller.rb
@@ -5,7 +5,7 @@ class Finance::BalancingController < Finance::BaseController
def new
@order = Order.find(params[:order_id])
- flash.now.alert = t('finance.balancing.new.alert') if @order.closed?
+ flash.now.alert = t('.alert') if @order.closed?
@comments = @order.comments
@articles = @order.order_articles.ordered_or_member.includes(:article, :article_price,
@@ -13,13 +13,13 @@ class Finance::BalancingController < Finance::BaseController
sort_param = params['sort'] || 'name'
@articles = case sort_param
- when 'name' then
+ when 'name'
@articles.order('articles.name ASC')
- when 'name_reverse' then
+ when 'name_reverse'
@articles.order('articles.name DESC')
- when 'order_number' then
+ when 'order_number'
@articles.order('articles.order_number ASC')
- when 'order_number_reverse' then
+ when 'order_number_reverse'
@articles.order('articles.order_number DESC')
else
@articles
@@ -31,13 +31,13 @@ class Finance::BalancingController < Finance::BaseController
def new_on_order_article_create # See publish/subscribe design pattern in /doc.
@order_article = OrderArticle.find(params[:order_article_id])
- render :layout => false
+ render layout: false
end
def new_on_order_article_update # See publish/subscribe design pattern in /doc.
@order_article = OrderArticle.find(params[:order_article_id])
- render :layout => false
+ render layout: false
end
def update_summary
@@ -46,29 +46,29 @@ class Finance::BalancingController < Finance::BaseController
def edit_note
@order = Order.find(params[:id])
- render :layout => false
+ render layout: false
end
def update_note
@order = Order.find(params[:id])
if @order.update(params[:order])
- render :layout => false
+ render layout: false
else
- render :action => :edit_note, :layout => false
+ render action: :edit_note, layout: false
end
end
def edit_transport
@order = Order.find(params[:id])
- render :layout => false
+ render layout: false
end
def update_transport
@order = Order.find(params[:id])
@order.update!(params[:order])
redirect_to new_finance_order_path(order_id: @order.id)
- rescue => error
- redirect_to new_finance_order_path(order_id: @order.id), alert: t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to new_finance_order_path(order_id: @order.id), alert: t('errors.general_msg', msg: e.message)
end
# before the order will booked, a view lists all Ordergroups and its order_prices
@@ -81,18 +81,18 @@ class Finance::BalancingController < Finance::BaseController
@order = Order.find(params[:id])
@type = FinancialTransactionType.find_by_id(params.permit(:type)[:type])
@order.close!(@current_user, @type)
- redirect_to finance_order_index_url, notice: t('finance.balancing.close.notice')
- rescue => error
- redirect_to new_finance_order_url(order_id: @order.id), alert: t('finance.balancing.close.alert', message: error.message)
+ redirect_to finance_order_index_url, notice: t('.notice')
+ rescue StandardError => e
+ redirect_to new_finance_order_url(order_id: @order.id), alert: t('.alert', message: e.message)
end
# Close the order directly, without automaticly updating ordergroups account balances
def close_direct
@order = Order.find(params[:id])
@order.close_direct!(@current_user)
- redirect_to finance_order_index_url, notice: t('finance.balancing.close_direct.notice')
- rescue => error
- redirect_to finance_order_index_url, alert: t('finance.balancing.close_direct.alert', message: error.message)
+ redirect_to finance_order_index_url, notice: t('.notice')
+ rescue StandardError => e
+ redirect_to finance_order_index_url, alert: t('.alert', message: e.message)
end
def close_all_direct_with_invoice
@@ -103,8 +103,8 @@ class Finance::BalancingController < Finance::BaseController
count += 1
end
end
- redirect_to finance_order_index_url, notice: t('finance.balancing.close_all_direct_with_invoice.notice', count: count)
- rescue => error
- redirect_to finance_order_index_url, alert: t('errors.general_msg', msg: error.message)
+ redirect_to finance_order_index_url, notice: t('.notice', count: count)
+ rescue StandardError => e
+ redirect_to finance_order_index_url, alert: t('errors.general_msg', msg: e.message)
end
end
diff --git a/app/controllers/finance/bank_accounts_controller.rb b/app/controllers/finance/bank_accounts_controller.rb
index 66d9fddd..81403f6a 100644
--- a/app/controllers/finance/bank_accounts_controller.rb
+++ b/app/controllers/finance/bank_accounts_controller.rb
@@ -8,8 +8,8 @@ class Finance::BankAccountsController < Finance::BaseController
@bank_account = BankAccount.find(params[:id])
count = @bank_account.assign_unlinked_transactions
redirect_to finance_bank_account_transactions_url(@bank_account), notice: t('.notice', count: count)
- rescue => error
- redirect_to finance_bank_account_transactions_url(@bank_account), alert: t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to finance_bank_account_transactions_url(@bank_account), alert: t('errors.general_msg', msg: e.message)
end
def import
@@ -33,8 +33,8 @@ class Finance::BankAccountsController < Finance::BaseController
end
needs_redirect = ok
- rescue => error
- flash.alert = t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ flash.alert = t('errors.general_msg', msg: e.message)
needs_redirect = true
ensure
return unless needs_redirect
diff --git a/app/controllers/finance/bank_transactions_controller.rb b/app/controllers/finance/bank_transactions_controller.rb
index 53c35168..22b38d06 100644
--- a/app/controllers/finance/bank_transactions_controller.rb
+++ b/app/controllers/finance/bank_transactions_controller.rb
@@ -3,26 +3,30 @@ class Finance::BankTransactionsController < ApplicationController
inherit_resources
def index
- if params["sort"]
- sort = case params["sort"]
- when "date" then "date"
- when "amount" then "amount"
- when "financial_link" then "financial_link_id"
- when "date_reverse" then "date DESC"
- when "amount_reverse" then "amount DESC"
- when "financial_link_reverse" then "financial_link_id DESC"
+ sort = if params['sort']
+ case params['sort']
+ when 'date' then 'date'
+ when 'amount' then 'amount'
+ when 'financial_link' then 'financial_link_id'
+ when 'date_reverse' then 'date DESC'
+ when 'amount_reverse' then 'amount DESC'
+ when 'financial_link_reverse' then 'financial_link_id DESC'
end
- else
- sort = "date DESC"
- end
+ else
+ 'date DESC'
+ end
@bank_account = BankAccount.find(params[:bank_account_id])
@bank_transactions_all = @bank_account.bank_transactions.order(sort).includes(:financial_link)
- @bank_transactions_all = @bank_transactions_all.where('reference LIKE ? OR text LIKE ?', "%#{params[:query]}%", "%#{params[:query]}%") unless params[:query].nil?
+ unless params[:query].nil?
+ @bank_transactions_all = @bank_transactions_all.where('reference LIKE ? OR text LIKE ?', "%#{params[:query]}%",
+ "%#{params[:query]}%")
+ end
@bank_transactions = @bank_transactions_all.page(params[:page]).per(@per_page)
respond_to do |format|
- format.js; format.html { render }
+ format.js
+ format.html { render }
format.csv do
send_data BankTransactionsCsv.new(@bank_transactions_all).to_csv, filename: 'transactions.csv', type: 'text/csv'
end
diff --git a/app/controllers/finance/financial_links_controller.rb b/app/controllers/finance/financial_links_controller.rb
index 17d8399a..c78a79b3 100644
--- a/app/controllers/finance/financial_links_controller.rb
+++ b/app/controllers/finance/financial_links_controller.rb
@@ -1,5 +1,5 @@
class Finance::FinancialLinksController < Finance::BaseController
- before_action :find_financial_link, except: [:create, :incomplete]
+ before_action :find_financial_link, except: %i[create incomplete]
def show
@items = @financial_link.bank_transactions.map do |bt|
@@ -37,7 +37,7 @@ class Finance::FinancialLinksController < Finance::BaseController
def create
@financial_link = FinancialLink.first_unused_or_create
- if params[:bank_transaction] then
+ if params[:bank_transaction]
bank_transaction = BankTransaction.find(params[:bank_transaction])
bank_transaction.update_attribute :financial_link, @financial_link
end
@@ -72,14 +72,16 @@ class Finance::FinancialLinksController < Finance::BaseController
def create_financial_transaction
financial_transaction = FinancialTransaction.new(financial_transaction_params)
- financial_transaction.ordergroup.add_financial_transaction! financial_transaction.amount, financial_transaction.note, current_user, financial_transaction.financial_transaction_type, @financial_link
+ financial_transaction.ordergroup.add_financial_transaction! financial_transaction.amount,
+ financial_transaction.note, current_user, financial_transaction.financial_transaction_type, @financial_link
redirect_to finance_link_url(@financial_link), notice: t('.notice')
- rescue => error
- redirect_to finance_link_url(@financial_link), alert: t('errors.general_msg', msg: error)
+ rescue StandardError => e
+ redirect_to finance_link_url(@financial_link), alert: t('errors.general_msg', msg: e)
end
def index_financial_transaction
- @financial_transactions = FinancialTransaction.without_financial_link.includes(:financial_transaction_type, :ordergroup)
+ @financial_transactions = FinancialTransaction.without_financial_link.includes(:financial_transaction_type,
+ :ordergroup)
end
def add_financial_transaction
@@ -123,7 +125,7 @@ class Finance::FinancialLinksController < Finance::BaseController
end
def find_best_fitting_ordergroup_id_for_financial_link(financial_link_id)
- FinancialTransaction.joins(<<-SQL).order(created_on: :desc).pluck(:ordergroup_id).first
+ FinancialTransaction.joins(<<-SQL).order(created_on: :desc).pick(:ordergroup_id)
JOIN bank_transactions a ON financial_transactions.financial_link_id = a.financial_link_id
JOIN bank_transactions b ON a.iban = b.iban AND b.financial_link_id = #{financial_link_id.to_i}
SQL
diff --git a/app/controllers/finance/financial_transactions_controller.rb b/app/controllers/finance/financial_transactions_controller.rb
index e0c53e19..6b06cbee 100644
--- a/app/controllers/finance/financial_transactions_controller.rb
+++ b/app/controllers/finance/financial_transactions_controller.rb
@@ -1,22 +1,22 @@
class Finance::FinancialTransactionsController < ApplicationController
before_action :authenticate_finance
- before_action :find_ordergroup, :except => [:new_collection, :create_collection, :index_collection]
+ before_action :find_ordergroup, except: %i[new_collection create_collection index_collection]
inherit_resources
# belongs_to :ordergroup
def index
- if params['sort']
- sort = case params['sort']
- when "date" then "created_on"
- when "note" then "note"
- when "amount" then "amount"
- when "date_reverse" then "created_on DESC"
- when "note_reverse" then "note DESC"
- when "amount_reverse" then "amount DESC"
+ sort = if params['sort']
+ case params['sort']
+ when 'date' then 'created_on'
+ when 'note' then 'note'
+ when 'amount' then 'amount'
+ when 'date_reverse' then 'created_on DESC'
+ when 'note_reverse' then 'note DESC'
+ when 'amount_reverse' then 'amount DESC'
end
- else
- sort = "created_on DESC"
- end
+ else
+ 'created_on DESC'
+ end
@q = FinancialTransaction.ransack(params[:q])
@financial_transactions_all = @q.result(distinct: true).includes(:user).order(sort)
@@ -26,9 +26,11 @@ class Finance::FinancialTransactionsController < ApplicationController
@financial_transactions = @financial_transactions_all.page(params[:page]).per(@per_page)
respond_to do |format|
- format.js; format.html { render }
+ format.js
+ format.html { render }
format.csv do
- send_data FinancialTransactionsCsv.new(@financial_transactions_all).to_csv, filename: 'transactions.csv', type: 'text/csv'
+ send_data FinancialTransactionsCsv.new(@financial_transactions_all).to_csv, filename: 'transactions.csv',
+ type: 'text/csv'
end
end
end
@@ -38,11 +40,11 @@ class Finance::FinancialTransactionsController < ApplicationController
end
def new
- if @ordergroup
- @financial_transaction = @ordergroup.financial_transactions.build
- else
- @financial_transaction = FinancialTransaction.new
- end
+ @financial_transaction = if @ordergroup
+ @ordergroup.financial_transactions.build
+ else
+ FinancialTransaction.new
+ end
end
def create
@@ -53,16 +55,18 @@ class Finance::FinancialTransactionsController < ApplicationController
else
@financial_transaction.save!
end
- redirect_to finance_group_transactions_path(@ordergroup), notice: I18n.t('finance.financial_transactions.controller.create.notice')
- rescue ActiveRecord::RecordInvalid => error
- flash.now[:alert] = error.message
- render :action => :new
+ redirect_to finance_group_transactions_path(@ordergroup),
+ notice: I18n.t('finance.financial_transactions.controller.create.notice')
+ rescue ActiveRecord::RecordInvalid => e
+ flash.now[:alert] = e.message
+ render action: :new
end
def destroy
transaction = FinancialTransaction.find(params[:id])
transaction.revert!(current_user)
- redirect_to finance_group_transactions_path(transaction.ordergroup), notice: t('finance.financial_transactions.controller.destroy.notice')
+ redirect_to finance_group_transactions_path(transaction.ordergroup),
+ notice: t('finance.financial_transactions.controller.destroy.notice')
end
def new_collection
@@ -88,17 +92,17 @@ class Finance::FinancialTransactionsController < ApplicationController
params[:financial_transactions].each do |trans|
# ignore empty amount fields ...
- unless trans[:amount].blank?
- amount = LocalizeInput.parse(trans[:amount]).to_f
- note = params[:note]
- ordergroup = Ordergroup.find(trans[:ordergroup_id])
- if params[:set_balance]
- note += " (#{amount})"
- amount -= ordergroup.financial_transaction_class_balance(type.financial_transaction_class)
- end
- ordergroup.add_financial_transaction!(amount, note, @current_user, type, financial_link)
- foodcoop_amount -= amount
+ next if trans[:amount].blank?
+
+ amount = LocalizeInput.parse(trans[:amount]).to_f
+ note = params[:note]
+ ordergroup = Ordergroup.find(trans[:ordergroup_id])
+ if params[:set_balance]
+ note += " (#{amount})"
+ amount -= ordergroup.financial_transaction_class_balance(type.financial_transaction_class)
end
+ ordergroup.add_financial_transaction!(amount, note, @current_user, type, financial_link)
+ foodcoop_amount -= amount
end
if params[:create_foodcoop_transaction]
@@ -107,7 +111,7 @@ class Finance::FinancialTransactionsController < ApplicationController
user: @current_user,
amount: foodcoop_amount,
note: params[:note],
- financial_link: financial_link,
+ financial_link: financial_link
})
ft.save!
end
@@ -117,8 +121,8 @@ class Finance::FinancialTransactionsController < ApplicationController
url = financial_link ? finance_link_url(financial_link.id) : finance_ordergroups_url
redirect_to url, notice: I18n.t('finance.financial_transactions.controller.create_collection.notice')
- rescue => error
- flash.now[:alert] = error.message
+ rescue StandardError => e
+ flash.now[:alert] = e.message
render action: :new_collection
end
diff --git a/app/controllers/finance/invoices_controller.rb b/app/controllers/finance/invoices_controller.rb
index d981277b..d70b92ec 100644
--- a/app/controllers/finance/invoices_controller.rb
+++ b/app/controllers/finance/invoices_controller.rb
@@ -1,15 +1,16 @@
class Finance::InvoicesController < ApplicationController
before_action :authenticate_finance_or_invoices
- before_action :find_invoice, only: [:show, :edit, :update, :destroy]
- before_action :ensure_can_edit, only: [:edit, :update, :destroy]
+ before_action :find_invoice, only: %i[show edit update destroy]
+ before_action :ensure_can_edit, only: %i[edit update destroy]
def index
@invoices_all = Invoice.includes(:supplier, :deliveries, :orders).order('date DESC')
@invoices = @invoices_all.page(params[:page]).per(@per_page)
respond_to do |format|
- format.js; format.html { render }
+ format.js
+ format.html { render }
format.csv do
send_data InvoicesCsv.new(@invoices_all).to_csv, filename: 'invoices.csv', type: 'text/csv'
end
@@ -20,11 +21,10 @@ class Finance::InvoicesController < ApplicationController
@suppliers = Supplier.includes(:invoices).where('invoices.paid_on IS NULL').references(:invoices)
end
- def show
- end
+ def show; end
def new
- @invoice = Invoice.new :supplier_id => params[:supplier_id]
+ @invoice = Invoice.new supplier_id: params[:supplier_id]
@invoice.deliveries << Delivery.find_by_id(params[:delivery_id]) if params[:delivery_id]
@invoice.orders << Order.find_by_id(params[:order_id]) if params[:order_id]
fill_deliveries_and_orders_collection @invoice.id, @invoice.supplier_id
@@ -36,12 +36,14 @@ class Finance::InvoicesController < ApplicationController
def form_on_supplier_id_change
fill_deliveries_and_orders_collection params[:invoice_id], params[:supplier_id]
- render :layout => false
+ render layout: false
end
def fill_deliveries_and_orders_collection(invoice_id, supplier_id)
- @deliveries_collection = Delivery.where('invoice_id = ? OR (invoice_id IS NULL AND supplier_id = ?)', invoice_id, supplier_id).order(date: :desc).limit(25)
- @orders_collection = Order.where('invoice_id = ? OR (invoice_id IS NULL AND supplier_id = ?)', invoice_id, supplier_id).order(ends: :desc).limit(25)
+ @deliveries_collection = Delivery.where('invoice_id = ? OR (invoice_id IS NULL AND supplier_id = ?)', invoice_id,
+ supplier_id).order(date: :desc).limit(25)
+ @orders_collection = Order.where('invoice_id = ? OR (invoice_id IS NULL AND supplier_id = ?)', invoice_id,
+ supplier_id).order(ends: :desc).limit(25)
end
def create
@@ -58,7 +60,7 @@ class Finance::InvoicesController < ApplicationController
end
else
fill_deliveries_and_orders_collection @invoice.id, @invoice.supplier_id
- render :action => "new"
+ render action: 'new'
end
end
@@ -81,7 +83,7 @@ class Finance::InvoicesController < ApplicationController
@invoice = Invoice.find(params[:invoice_id])
type = MIME::Types[@invoice.attachment_mime].first
filename = "invoice_#{@invoice.id}_attachment.#{type.preferred_extension}"
- send_data(@invoice.attachment_data, :filename => filename, :type => type)
+ send_data(@invoice.attachment_data, filename: filename, type: type)
end
private
@@ -92,8 +94,8 @@ class Finance::InvoicesController < ApplicationController
# Returns true if @current_user can edit the invoice..
def ensure_can_edit
- unless @invoice.user_can_edit?(current_user)
- deny_access
- end
+ return if @invoice.user_can_edit?(current_user)
+
+ deny_access
end
end
diff --git a/app/controllers/finance/ordergroups_controller.rb b/app/controllers/finance/ordergroups_controller.rb
index cb661571..a8836f6b 100644
--- a/app/controllers/finance/ordergroups_controller.rb
+++ b/app/controllers/finance/ordergroups_controller.rb
@@ -1,11 +1,11 @@
class Finance::OrdergroupsController < Finance::BaseController
def index
- m = /^(?
name|sum_of_class_\d+)(?_reverse)?$/.match params["sort"]
+ m = /^(?name|sum_of_class_\d+)(?_reverse)?$/.match params['sort']
if m
sort = m[:col]
sort += ' DESC' if m[:reverse]
else
- sort = "name"
+ sort = 'name'
end
@ordergroups = Ordergroup.undeleted.order(sort)
diff --git a/app/controllers/foodcoop/ordergroups_controller.rb b/app/controllers/foodcoop/ordergroups_controller.rb
index 6940a376..05dfe9cb 100644
--- a/app/controllers/foodcoop/ordergroups_controller.rb
+++ b/app/controllers/foodcoop/ordergroups_controller.rb
@@ -1,20 +1,16 @@
class Foodcoop::OrdergroupsController < ApplicationController
def index
- @ordergroups = Ordergroup.undeleted.sort_by_param(params["sort"])
+ @ordergroups = Ordergroup.undeleted.sort_by_param(params['sort'])
- unless params[:name].blank? # Search by name
- @ordergroups = @ordergroups.where('name LIKE ?', "%#{params[:name]}%")
- end
+ @ordergroups = @ordergroups.where('name LIKE ?', "%#{params[:name]}%") if params[:name].present? # Search by name
- if params[:only_active] # Select only active groups
- @ordergroups = @ordergroups.active
- end
+ @ordergroups = @ordergroups.active if params[:only_active] # Select only active groups
@ordergroups = @ordergroups.page(params[:page]).per(@per_page)
respond_to do |format|
format.html # index.html.erb
- format.js { render :layout => false }
+ format.js { render layout: false }
end
end
end
diff --git a/app/controllers/foodcoop/users_controller.rb b/app/controllers/foodcoop/users_controller.rb
index 196f1be8..17da7ccf 100644
--- a/app/controllers/foodcoop/users_controller.rb
+++ b/app/controllers/foodcoop/users_controller.rb
@@ -1,19 +1,20 @@
class Foodcoop::UsersController < ApplicationController
def index
- @users = User.undeleted.sort_by_param(params["sort"])
+ @users = User.undeleted.sort_by_param(params['sort'])
# if somebody uses the search field:
- @users = @users.natural_search(params[:user_name]) unless params[:user_name].blank?
+ @users = @users.natural_search(params[:user_name]) if params[:user_name].present?
if params[:ordergroup_name]
- @users = @users.joins(:groups).where("groups.type = 'Ordergroup' AND groups.name LIKE ?", "%#{params[:ordergroup_name]}%")
+ @users = @users.joins(:groups).where("groups.type = 'Ordergroup' AND groups.name LIKE ?",
+ "%#{params[:ordergroup_name]}%")
end
@users = @users.page(params[:page]).per(@per_page)
respond_to do |format|
format.html # index.html.haml
- format.js { render :layout => false } # index.js.erb
+ format.js { render layout: false } # index.js.erb
end
end
end
diff --git a/app/controllers/foodcoop/workgroups_controller.rb b/app/controllers/foodcoop/workgroups_controller.rb
index e0f571be..8fd5f423 100644
--- a/app/controllers/foodcoop/workgroups_controller.rb
+++ b/app/controllers/foodcoop/workgroups_controller.rb
@@ -1,9 +1,9 @@
class Foodcoop::WorkgroupsController < ApplicationController
before_action :authenticate_membership_or_admin,
- :except => [:index]
+ except: [:index]
def index
- @workgroups = Workgroup.order("name")
+ @workgroups = Workgroup.order('name')
end
def edit
@@ -13,9 +13,9 @@ class Foodcoop::WorkgroupsController < ApplicationController
def update
@workgroup = Workgroup.find(params[:id])
if @workgroup.update(params[:workgroup])
- redirect_to foodcoop_workgroups_url, :notice => I18n.t('workgroups.update.notice')
+ redirect_to foodcoop_workgroups_url, notice: I18n.t('workgroups.update.notice')
else
- render :action => 'edit'
+ render action: 'edit'
end
end
end
diff --git a/app/controllers/group_order_articles_controller.rb b/app/controllers/group_order_articles_controller.rb
index 5aa50a87..5f58c48a 100644
--- a/app/controllers/group_order_articles_controller.rb
+++ b/app/controllers/group_order_articles_controller.rb
@@ -1,6 +1,6 @@
class GroupOrderArticlesController < ApplicationController
before_action :authenticate_finance
- before_action :find_group_order_article, except: [:new, :create]
+ before_action :find_group_order_article, except: %i[new create]
layout false # We only use this controller to server js snippets, no need for layout rendering
diff --git a/app/controllers/group_orders_controller.rb b/app/controllers/group_orders_controller.rb
index 686f0617..e5a442aa 100644
--- a/app/controllers/group_orders_controller.rb
+++ b/app/controllers/group_orders_controller.rb
@@ -3,9 +3,9 @@
class GroupOrdersController < ApplicationController
# Security
before_action :ensure_ordergroup_member
- before_action :ensure_open_order, :only => [:new, :create, :edit, :update, :order, :stock_order, :saveOrder]
- before_action :ensure_my_group_order, only: [:show, :edit, :update]
- before_action :enough_apples?, only: [:new, :create]
+ before_action :ensure_open_order, only: %i[new create edit update order stock_order saveOrder]
+ before_action :ensure_my_group_order, only: %i[show edit update]
+ before_action :enough_apples?, only: %i[new create]
# Index page.
def index
@@ -13,9 +13,17 @@ class GroupOrdersController < ApplicationController
@finished_not_closed_orders_including_group_order = Order.finished_not_closed.ordergroup_group_orders_map(@ordergroup)
end
+ def show
+ @order = @group_order.order
+ end
+
def new
ordergroup = params[:stock_order] ? nil : @ordergroup
- @group_order = @order.group_orders.build(:ordergroup => ordergroup, :updated_by => current_user)
+ @group_order = @order.group_orders.build(ordergroup: ordergroup, updated_by: current_user)
+ @ordering_data = @group_order.load_data
+ end
+
+ def edit
@ordering_data = @group_order.load_data
end
@@ -23,34 +31,26 @@ class GroupOrdersController < ApplicationController
@group_order = GroupOrder.new(params[:group_order])
begin
@group_order.save_ordering!
- redirect_to group_order_url(@group_order), :notice => I18n.t('group_orders.create.notice')
+ redirect_to group_order_url(@group_order), notice: I18n.t('group_orders.create.notice')
rescue ActiveRecord::StaleObjectError
- redirect_to group_orders_url, :alert => I18n.t('group_orders.create.error_stale')
- rescue => exception
- logger.error('Failed to update order: ' + exception.message)
- redirect_to group_orders_url, :alert => I18n.t('group_orders.create.error_general')
+ redirect_to group_orders_url, alert: I18n.t('group_orders.create.error_stale')
+ rescue StandardError => e
+ logger.error('Failed to update order: ' + e.message)
+ redirect_to group_orders_url, alert: I18n.t('group_orders.create.error_general')
end
end
- def show
- @order = @group_order.order
- end
-
- def edit
- @ordering_data = @group_order.load_data
- end
-
def update
@group_order.attributes = params[:group_order]
@group_order.updated_by = current_user
begin
@group_order.save_ordering!
- redirect_to group_order_url(@group_order), :notice => I18n.t('group_orders.update.notice')
+ redirect_to group_order_url(@group_order), notice: I18n.t('group_orders.update.notice')
rescue ActiveRecord::StaleObjectError
- redirect_to group_orders_url, :alert => I18n.t('group_orders.update.error_stale')
- rescue => exception
- logger.error('Failed to update order: ' + exception.message)
- redirect_to group_orders_url, :alert => I18n.t('group_orders.update.error_general')
+ redirect_to group_orders_url, alert: I18n.t('group_orders.update.error_stale')
+ rescue StandardError => e
+ logger.error('Failed to update order: ' + e.message)
+ redirect_to group_orders_url, alert: I18n.t('group_orders.update.error_general')
end
end
@@ -74,16 +74,16 @@ class GroupOrdersController < ApplicationController
# Used as a :before_action by OrdersController.
def ensure_ordergroup_member
@ordergroup = @current_user.ordergroup
- if @ordergroup.nil?
- redirect_to root_url, :alert => I18n.t('group_orders.errors.no_member')
- end
+ return unless @ordergroup.nil?
+
+ redirect_to root_url, alert: I18n.t('group_orders.errors.no_member')
end
def ensure_open_order
- @order = Order.includes([:supplier, :order_articles]).find(order_id_param)
+ @order = Order.includes(%i[supplier order_articles]).find(order_id_param)
unless @order.open?
flash[:notice] = I18n.t('group_orders.errors.closed')
- redirect_to :action => 'index'
+ redirect_to action: 'index'
end
rescue ActiveRecord::RecordNotFound
redirect_to group_orders_url, alert: I18n.t('group_orders.errors.notfound')
@@ -91,17 +91,17 @@ class GroupOrdersController < ApplicationController
def ensure_my_group_order
@group_order = GroupOrder.find(params[:id])
- if @group_order.ordergroup != @ordergroup && (@group_order.ordergroup || !current_user.role_orders?)
- redirect_to group_orders_url, alert: I18n.t('group_orders.errors.notfound')
- end
+ return unless @group_order.ordergroup != @ordergroup && (@group_order.ordergroup || !current_user.role_orders?)
+
+ redirect_to group_orders_url, alert: I18n.t('group_orders.errors.notfound')
end
def enough_apples?
- if @ordergroup.not_enough_apples?
- redirect_to group_orders_url,
- alert: t('not_enough_apples', scope: 'group_orders.messages', apples: @ordergroup.apples,
- stop_ordering_under: FoodsoftConfig[:stop_ordering_under])
- end
+ return unless @ordergroup.not_enough_apples?
+
+ redirect_to group_orders_url,
+ alert: t('not_enough_apples', scope: 'group_orders.messages', apples: @ordergroup.apples,
+ stop_ordering_under: FoodsoftConfig[:stop_ordering_under])
end
def order_id_param
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index a3d9cd53..f40fb6fb 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -9,8 +9,7 @@ class HomeController < ApplicationController
@unassigned_tasks = Task.order(:due_date).next_unassigned_tasks_for(current_user)
end
- def profile
- end
+ def profile; end
def reference_calculator
if current_user.ordergroup
@@ -36,40 +35,43 @@ class HomeController < ApplicationController
@user = @current_user
@ordergroup = @user.ordergroup
- unless @ordergroup.nil?
+ if @ordergroup.nil?
+ redirect_to root_path, alert: I18n.t('home.no_ordergroups')
+ else
@ordergroup = Ordergroup.include_transaction_class_sum.find(@ordergroup.id)
- if params['sort']
- sort = case params['sort']
- when "date" then "created_on"
- when "note" then "note"
- when "amount" then "amount"
- when "date_reverse" then "created_on DESC"
- when "note_reverse" then "note DESC"
- when "amount_reverse" then "amount DESC"
+ sort = if params['sort']
+ case params['sort']
+ when 'date' then 'created_on'
+ when 'note' then 'note'
+ when 'amount' then 'amount'
+ when 'date_reverse' then 'created_on DESC'
+ when 'note_reverse' then 'note DESC'
+ when 'amount_reverse' then 'amount DESC'
end
- else
- sort = "created_on DESC"
- end
+ else
+ 'created_on DESC'
+ end
@financial_transactions = @ordergroup.financial_transactions.visible.page(params[:page]).per(@per_page).order(sort)
- @financial_transactions = @financial_transactions.where('financial_transactions.note LIKE ?', "%#{params[:query]}%") if params[:query].present?
+ if params[:query].present?
+ @financial_transactions = @financial_transactions.where('financial_transactions.note LIKE ?',
+ "%#{params[:query]}%")
+ end
- else
- redirect_to root_path, alert: I18n.t('home.no_ordergroups')
end
end
# cancel personal memberships direct from the myProfile-page
def cancel_membership
- if params[:membership_id]
- membership = @current_user.memberships.find(params[:membership_id])
- else
- membership = @current_user.memberships.find_by_group_id!(params[:group_id])
- end
+ membership = if params[:membership_id]
+ @current_user.memberships.find(params[:membership_id])
+ else
+ @current_user.memberships.find_by_group_id!(params[:group_id])
+ end
membership.destroy
- redirect_to my_profile_path, notice: I18n.t('home.ordergroup_cancelled', :group => membership.group.name)
+ redirect_to my_profile_path, notice: I18n.t('home.ordergroup_cancelled', group: membership.group.name)
end
protected
@@ -82,8 +84,8 @@ class HomeController < ApplicationController
end
def ordergroup_params
- if params[:user][:ordergroup]
- params.require(:user).require(:ordergroup).permit(:contact_address)
- end
+ return unless params[:user][:ordergroup]
+
+ params.require(:user).require(:ordergroup).permit(:contact_address)
end
end
diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb
index 37fc757b..266a1de5 100644
--- a/app/controllers/invites_controller.rb
+++ b/app/controllers/invites_controller.rb
@@ -3,7 +3,7 @@ class InvitesController < ApplicationController
before_action -> { require_config_disabled :disable_invite }
def new
- @invite = Invite.new(:user => @current_user, :group => @group)
+ @invite = Invite.new(user: @current_user, group: @group)
end
def create
@@ -27,6 +27,10 @@ class InvitesController < ApplicationController
protected
def authenticate_membership_or_admin_for_invites
- authenticate_membership_or_admin((params[:invite][:group_id] rescue params[:id]))
+ authenticate_membership_or_admin(begin
+ params[:invite][:group_id]
+ rescue StandardError
+ params[:id]
+ end)
end
end
diff --git a/app/controllers/login_controller.rb b/app/controllers/login_controller.rb
index 052231c5..4c2fd95b 100644
--- a/app/controllers/login_controller.rb
+++ b/app/controllers/login_controller.rb
@@ -1,6 +1,6 @@
class LoginController < ApplicationController
skip_before_action :authenticate # no authentication since this is the login page
- before_action :validate_token, :only => [:new_password, :update_password]
+ before_action :validate_token, only: %i[new_password update_password]
# Display the form to enter an email address requesting a token to set a new password.
def forgot_password
@@ -9,20 +9,17 @@ class LoginController < ApplicationController
# Sends an email to a user with the token that allows setting a new password through action "password".
def reset_password
- if request.get? || params[:user].nil? # Catch for get request and give better error message.
- redirect_to forgot_password_url, alert: I18n.t('errors.general_again') and return
- end
+ redirect_to forgot_password_url, alert: I18n.t('errors.general_again') and return if request.get? || params[:user].nil? # Catch for get request and give better error message.
if (user = User.undeleted.find_by_email(params[:user][:email]))
user.request_password_reset!
end
- redirect_to login_url, :notice => I18n.t('login.controller.reset_password.notice')
+ redirect_to login_url, notice: I18n.t('login.controller.reset_password.notice')
end
# Set a new password with a token from the password reminder email.
# Called with params :id => User.id and :token => User.reset_password_token to specify a new password.
- def new_password
- end
+ def new_password; end
# Sets a new password.
# Called with params :id => User.id and :token => User.reset_password_token to specify a new password.
@@ -32,7 +29,7 @@ class LoginController < ApplicationController
@user.reset_password_token = nil
@user.reset_password_expires = nil
@user.save
- redirect_to login_url, :notice => I18n.t('login.controller.update_password.notice')
+ redirect_to login_url, notice: I18n.t('login.controller.update_password.notice')
else
render :new_password
end
@@ -50,14 +47,14 @@ class LoginController < ApplicationController
@user = User.new(params[:user])
@user.email = @invite.email
if @user.save
- Membership.new(:user => @user, :group => @invite.group).save!
+ Membership.new(user: @user, group: @invite.group).save!
@invite.destroy
session[:locale] = @user.locale
redirect_to login_url, notice: I18n.t('login.controller.accept_invitation.notice')
end
end
else
- @user = User.new(:email => @invite.email)
+ @user = User.new(email: @invite.email)
end
end
@@ -65,8 +62,8 @@ class LoginController < ApplicationController
def validate_token
@user = User.find_by_id_and_reset_password_token(params[:id], params[:token])
- if (@user.nil? || @user.reset_password_expires < Time.now)
- redirect_to forgot_password_url, alert: I18n.t('login.controller.error_token_invalid')
- end
+ return unless @user.nil? || @user.reset_password_expires < Time.now
+
+ redirect_to forgot_password_url, alert: I18n.t('login.controller.error_token_invalid')
end
end
diff --git a/app/controllers/order_articles_controller.rb b/app/controllers/order_articles_controller.rb
index 0552269d..43a0ea14 100644
--- a/app/controllers/order_articles_controller.rb
+++ b/app/controllers/order_articles_controller.rb
@@ -1,7 +1,7 @@
class OrderArticlesController < ApplicationController
before_action :fetch_order, except: :destroy
- before_action :authenticate_finance_or_invoices, except: [:new, :create]
- before_action :authenticate_finance_orders_or_pickup, except: [:edit, :update, :destroy]
+ before_action :authenticate_finance_or_invoices, except: %i[new create]
+ before_action :authenticate_finance_orders_or_pickup, except: %i[edit update destroy]
layout false # We only use this controller to serve js snippets, no need for layout rendering
@@ -9,28 +9,26 @@ class OrderArticlesController < ApplicationController
@order_article = @order.order_articles.build(params[:order_article])
end
+ def edit
+ @order_article = OrderArticle.find(params[:id])
+ end
+
def create
# The article may be ordered with zero units - in that case do not complain.
# If order_article is ordered and a new order_article is created, an error message will be
# given mentioning that the article already exists, which is desired.
- @order_article = @order.order_articles.where(:article_id => params[:order_article][:article_id]).first
- unless @order_article && @order_article.units_to_order == 0
- @order_article = @order.order_articles.build(params[:order_article])
- end
+ @order_article = @order.order_articles.where(article_id: params[:order_article][:article_id]).first
+ @order_article = @order.order_articles.build(params[:order_article]) unless @order_article && @order_article.units_to_order == 0
@order_article.save!
- rescue
+ rescue StandardError
render action: :new
end
- def edit
- @order_article = OrderArticle.find(params[:id])
- end
-
def update
@order_article = OrderArticle.find(params[:id])
begin
@order_article.update_article_and_price!(params[:order_article], params[:article], params[:article_price])
- rescue
+ rescue StandardError
render action: :edit
end
end
diff --git a/app/controllers/order_comments_controller.rb b/app/controllers/order_comments_controller.rb
index 39067577..3583bb0e 100644
--- a/app/controllers/order_comments_controller.rb
+++ b/app/controllers/order_comments_controller.rb
@@ -1,15 +1,15 @@
class OrderCommentsController < ApplicationController
def new
@order = Order.find(params[:order_id])
- @order_comment = @order.comments.build(:user => current_user)
+ @order_comment = @order.comments.build(user: current_user)
end
def create
@order_comment = OrderComment.new(params[:order_comment])
if @order_comment.save
- render :layout => false
+ render layout: false
else
- render :action => :new, :layout => false
+ render action: :new, layout: false
end
end
end
diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb
index cfa7cef6..bc2d9195 100644
--- a/app/controllers/orders_controller.rb
+++ b/app/controllers/orders_controller.rb
@@ -5,25 +5,26 @@ class OrdersController < ApplicationController
include Concerns::SendOrderPdf
before_action :authenticate_pickups_or_orders
- before_action :authenticate_orders, except: [:receive, :receive_on_order_article_create, :receive_on_order_article_update, :show]
- before_action :remove_empty_article, only: [:create, :update]
+ before_action :authenticate_orders,
+ except: %i[receive receive_on_order_article_create receive_on_order_article_update show]
+ before_action :remove_empty_article, only: %i[create update]
# List orders
def index
@open_orders = Order.open.includes(:supplier)
@finished_orders = Order.finished_not_closed.includes(:supplier)
@per_page = 15
- if params['sort']
- sort = case params['sort']
- when "supplier" then "suppliers.name, ends DESC"
- when "pickup" then "pickup DESC"
- when "ends" then "ends DESC"
- when "supplier_reverse" then "suppliers.name DESC"
- when "ends_reverse" then "ends"
+ sort = if params['sort']
+ case params['sort']
+ when 'supplier' then 'suppliers.name, ends DESC'
+ when 'pickup' then 'pickup DESC'
+ when 'ends' then 'ends DESC'
+ when 'supplier_reverse' then 'suppliers.name DESC'
+ when 'ends_reverse' then 'ends'
end
- else
- sort = "ends DESC"
- end
+ else
+ 'ends DESC'
+ end
@suppliers = Supplier.having_articles.order('suppliers.name')
@orders = Order.closed.includes(:supplier).reorder(sort).page(params[:page]).per(@per_page)
end
@@ -43,7 +44,7 @@ class OrdersController < ApplicationController
respond_to do |format|
format.html
format.js do
- render :layout => false
+ render layout: false
end
format.pdf do
send_order_pdf @order, params[:document]
@@ -66,8 +67,14 @@ class OrdersController < ApplicationController
else
@order = Order.new(supplier_id: params[:supplier_id]).init_dates
end
- rescue => error
- redirect_to orders_url, alert: t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to orders_url, alert: t('errors.general_msg', msg: e.message)
+ end
+
+ # Page to edit an exsiting order.
+ # editing finished orders is done in FinanceController
+ def edit
+ @order = Order.includes(:articles).find(params[:id])
end
# Save a new order.
@@ -81,31 +88,25 @@ class OrdersController < ApplicationController
redirect_to @order
else
logger.debug "[debug] order errors: #{@order.errors.messages}"
- render :action => 'new'
+ render action: 'new'
end
end
- # Page to edit an exsiting order.
- # editing finished orders is done in FinanceController
- def edit
- @order = Order.includes(:articles).find(params[:id])
- end
-
# Update an existing order.
def update
@order = Order.find params[:id]
if @order.update(params[:order].merge(updated_by: current_user))
flash[:notice] = I18n.t('orders.update.notice')
- redirect_to :action => 'show', :id => @order
+ redirect_to action: 'show', id: @order
else
- render :action => 'edit'
+ render action: 'edit'
end
end
# Delete an order.
def destroy
Order.find(params[:id]).destroy
- redirect_to :action => 'index'
+ redirect_to action: 'index'
end
# Finish a current order.
@@ -113,8 +114,8 @@ class OrdersController < ApplicationController
order = Order.find(params[:id])
order.finish!(@current_user)
redirect_to order, notice: I18n.t('orders.finish.notice')
- rescue => error
- redirect_to orders_url, alert: I18n.t('errors.general_msg', :msg => error.message)
+ rescue StandardError => e
+ redirect_to orders_url, alert: I18n.t('errors.general_msg', msg: e.message)
end
# Send a order to the supplier.
@@ -122,20 +123,18 @@ class OrdersController < ApplicationController
order = Order.find(params[:id])
order.send_to_supplier!(@current_user)
redirect_to order, notice: I18n.t('orders.send_to_supplier.notice')
- rescue => error
- redirect_to order, alert: I18n.t('errors.general_msg', :msg => error.message)
+ rescue StandardError => e
+ redirect_to order, alert: I18n.t('errors.general_msg', msg: e.message)
end
def receive
@order = Order.find(params[:id])
- unless request.post?
- @order_articles = @order.order_articles.ordered_or_member.includes(:article).order('articles.order_number, articles.name')
- else
+ if request.post?
Order.transaction do
s = update_order_amounts
@order.update_attribute(:state, 'received') if @order.state != 'received'
- flash[:notice] = (s ? I18n.t('orders.receive.notice', :msg => s) : I18n.t('orders.receive.notice_none'))
+ flash[:notice] = (s ? I18n.t('orders.receive.notice', msg: s) : I18n.t('orders.receive.notice_none'))
end
NotifyReceivedOrderJob.perform_later(@order)
if current_user.role_orders? || current_user.role_finance?
@@ -145,23 +144,25 @@ class OrdersController < ApplicationController
else
redirect_to receive_order_path(@order)
end
+ else
+ @order_articles = @order.order_articles.ordered_or_member.includes(:article).order('articles.order_number, articles.name')
end
end
def receive_on_order_article_create # See publish/subscribe design pattern in /doc.
@order_article = OrderArticle.find(params[:order_article_id])
- render :layout => false
+ render layout: false
end
def receive_on_order_article_update # See publish/subscribe design pattern in /doc.
@order_article = OrderArticle.find(params[:order_article_id])
- render :layout => false
+ render layout: false
end
protected
def update_order_amounts
- return if not params[:order_articles]
+ return unless params[:order_articles]
# where to leave remainder during redistribution
rest_to = []
@@ -176,35 +177,42 @@ class OrdersController < ApplicationController
# "MySQL lock timeout exceeded" errors. It's ok to do
# this article-by-article anway.
params[:order_articles].each do |oa_id, oa_params|
- unless oa_params.blank?
- oa = OrderArticle.find(oa_id)
- # update attributes; don't use update_attribute because it calls save
- # which makes received_changed? not work anymore
- oa.attributes = oa_params
- if oa.units_received_changed?
- counts[0] += 1
- unless oa.units_received.blank?
- cunits[0] += oa.units_received * oa.article.unit_quantity
- oacounts = oa.redistribute oa.units_received * oa.price.unit_quantity, rest_to
- oacounts.each_with_index { |c, i| cunits[i + 1] += c; counts[i + 1] += 1 if c > 0 }
+ next if oa_params.blank?
+
+ oa = OrderArticle.find(oa_id)
+ # update attributes; don't use update_attribute because it calls save
+ # which makes received_changed? not work anymore
+ oa.attributes = oa_params
+ if oa.units_received_changed?
+ counts[0] += 1
+ if oa.units_received.present?
+ cunits[0] += oa.units_received * oa.article.unit_quantity
+ oacounts = oa.redistribute oa.units_received * oa.price.unit_quantity, rest_to
+ oacounts.each_with_index do |c, i|
+ cunits[i + 1] += c
+ counts[i + 1] += 1 if c > 0
end
end
- oa.save!
end
+ oa.save!
end
return nil if counts[0] == 0
notice = []
notice << I18n.t('orders.update_order_amounts.msg1', count: counts[0], units: cunits[0])
- notice << I18n.t('orders.update_order_amounts.msg2', count: counts[1], units: cunits[1]) if params[:rest_to_tolerance]
+ if params[:rest_to_tolerance]
+ notice << I18n.t('orders.update_order_amounts.msg2', count: counts[1],
+ units: cunits[1])
+ end
notice << I18n.t('orders.update_order_amounts.msg3', count: counts[2], units: cunits[2]) if params[:rest_to_stock]
if counts[3] > 0 || cunits[3] > 0
- notice << I18n.t('orders.update_order_amounts.msg4', count: counts[3], units: cunits[3])
+ notice << I18n.t('orders.update_order_amounts.msg4', count: counts[3],
+ units: cunits[3])
end
notice.join(', ')
end
def remove_empty_article
- params[:order][:article_ids].reject!(&:blank?) if params[:order] && params[:order][:article_ids]
+ params[:order][:article_ids].compact_blank! if params[:order] && params[:order][:article_ids]
end
end
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index f3c50e2a..22750360 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -12,10 +12,10 @@ class SessionsController < ApplicationController
user = User.authenticate(params[:nick], params[:password])
if user
user.update_attribute(:last_login, Time.now)
- login_and_redirect_to_return_to user, :notice => I18n.t('sessions.logged_in')
+ login_and_redirect_to_return_to user, notice: I18n.t('sessions.logged_in')
else
flash.now.alert = I18n.t(FoodsoftConfig[:use_nick] ? 'sessions.login_invalid_nick' : 'sessions.login_invalid_email')
- render "new"
+ render 'new'
end
end
@@ -24,7 +24,7 @@ class SessionsController < ApplicationController
if FoodsoftConfig[:logout_redirect_url].present?
redirect_to FoodsoftConfig[:logout_redirect_url]
else
- redirect_to login_url, :notice => I18n.t('sessions.logged_out')
+ redirect_to login_url, notice: I18n.t('sessions.logged_out')
end
end
diff --git a/app/controllers/stock_takings_controller.rb b/app/controllers/stock_takings_controller.rb
index bdf1dc77..e12af6f9 100644
--- a/app/controllers/stock_takings_controller.rb
+++ b/app/controllers/stock_takings_controller.rb
@@ -7,21 +7,21 @@ class StockTakingsController < ApplicationController
def new
@stock_taking = StockTaking.new
- StockArticle.undeleted.each { |a| @stock_taking.stock_changes.build(:stock_article => a) }
+ StockArticle.undeleted.each { |a| @stock_taking.stock_changes.build(stock_article: a) }
end
def new_on_stock_article_create # See publish/subscribe design pattern in /doc.
stock_article = StockArticle.find(params[:stock_article_id])
- @stock_change = StockChange.new(:stock_article => stock_article)
+ @stock_change = StockChange.new(stock_article: stock_article)
- render :layout => false
+ render layout: false
end
def create
- create!(:notice => I18n.t('stock_takings.create.notice'))
+ create!(notice: I18n.t('stock_takings.create.notice'))
end
def update
- update!(:notice => I18n.t('stock_takings.update.notice'))
+ update!(notice: I18n.t('stock_takings.update.notice'))
end
end
diff --git a/app/controllers/stockit_controller.rb b/app/controllers/stockit_controller.rb
index 6dd1511e..8f9b3b3d 100644
--- a/app/controllers/stockit_controller.rb
+++ b/app/controllers/stockit_controller.rb
@@ -7,57 +7,13 @@ class StockitController < ApplicationController
def index_on_stock_article_create # See publish/subscribe design pattern in /doc.
@stock_article = StockArticle.find(params[:id])
- render :layout => false
+ render layout: false
end
def index_on_stock_article_update # See publish/subscribe design pattern in /doc.
@stock_article = StockArticle.find(params[:id])
- render :layout => false
- end
-
- # three possibilites to fill a new_stock_article form
- # (1) start from blank or use params
- def new
- @stock_article = StockArticle.new(params[:stock_article])
-
- render :layout => false
- end
-
- # (2) StockArticle as template
- def copy
- @stock_article = StockArticle.find(params[:stock_article_id]).dup
-
- render :layout => false
- end
-
- # (3) non-stock Article as template
- def derive
- @stock_article = Article.find(params[:old_article_id]).becomes(StockArticle).dup
-
- render :layout => false
- end
-
- def create
- @stock_article = StockArticle.new({ quantity: 0 }.merge(params[:stock_article]))
- @stock_article.save!
- render :layout => false
- rescue ActiveRecord::RecordInvalid
- render :action => 'new', :layout => false
- end
-
- def edit
- @stock_article = StockArticle.find(params[:id])
-
- render :layout => false
- end
-
- def update
- @stock_article = StockArticle.find(params[:id])
- @stock_article.update!(params[:stock_article])
- render :layout => false
- rescue ActiveRecord::RecordInvalid
- render :action => 'edit', :layout => false
+ render layout: false
end
def show
@@ -65,24 +21,68 @@ class StockitController < ApplicationController
@stock_changes = @stock_article.stock_changes.order('stock_changes.created_at DESC')
end
+ # three possibilites to fill a new_stock_article form
+ # (1) start from blank or use params
+ def new
+ @stock_article = StockArticle.new(params[:stock_article])
+
+ render layout: false
+ end
+
+ # (2) StockArticle as template
+ def copy
+ @stock_article = StockArticle.find(params[:stock_article_id]).dup
+
+ render layout: false
+ end
+
+ # (3) non-stock Article as template
+ def derive
+ @stock_article = Article.find(params[:old_article_id]).becomes(StockArticle).dup
+
+ render layout: false
+ end
+
+ def edit
+ @stock_article = StockArticle.find(params[:id])
+
+ render layout: false
+ end
+
+ def create
+ @stock_article = StockArticle.new({ quantity: 0 }.merge(params[:stock_article]))
+ @stock_article.save!
+ render layout: false
+ rescue ActiveRecord::RecordInvalid
+ render action: 'new', layout: false
+ end
+
+ def update
+ @stock_article = StockArticle.find(params[:id])
+ @stock_article.update!(params[:stock_article])
+ render layout: false
+ rescue ActiveRecord::RecordInvalid
+ render action: 'edit', layout: false
+ end
+
def show_on_stock_article_update # See publish/subscribe design pattern in /doc.
@stock_article = StockArticle.find(params[:id])
- render :layout => false
+ render layout: false
end
def destroy
@stock_article = StockArticle.find(params[:id])
@stock_article.mark_as_deleted
- render :layout => false
- rescue => error
- render :partial => "destroy_fail", :layout => false,
- :locals => { :fail_msg => I18n.t('errors.general_msg', :msg => error.message) }
+ render layout: false
+ rescue StandardError => e
+ render partial: 'destroy_fail', layout: false,
+ locals: { fail_msg: I18n.t('errors.general_msg', msg: e.message) }
end
# TODO: Fix this!!
def articles_search
@articles = Article.not_in_stock.limit(8).where('name LIKE ?', "%#{params[:term]}%")
- render :json => @articles.map(&:name)
+ render json: @articles.map(&:name)
end
end
diff --git a/app/controllers/styles_controller.rb b/app/controllers/styles_controller.rb
index 5636ec03..6d3a9fd1 100644
--- a/app/controllers/styles_controller.rb
+++ b/app/controllers/styles_controller.rb
@@ -9,7 +9,7 @@ class StylesController < ApplicationController
def foodcoop
css = FoodsoftConfig[:custom_css]
if css.blank?
- render body: nil, content_type: 'text/css', status: 404
+ render body: nil, content_type: 'text/css', status: :not_found
else
expires_in 1.week, public: true if params[:md5].present?
render body: css, content_type: 'text/css'
diff --git a/app/controllers/suppliers_controller.rb b/app/controllers/suppliers_controller.rb
index e5188f8b..1f1e055d 100644
--- a/app/controllers/suppliers_controller.rb
+++ b/app/controllers/suppliers_controller.rb
@@ -1,5 +1,5 @@
class SuppliersController < ApplicationController
- before_action :authenticate_suppliers, :except => [:index, :list]
+ before_action :authenticate_suppliers, except: %i[index list]
helper :deliveries
def index
@@ -24,6 +24,10 @@ class SuppliersController < ApplicationController
end
end
+ def edit
+ @supplier = Supplier.find(params[:id])
+ end
+
def create
@supplier = Supplier.new(supplier_params)
@supplier.supplier_category ||= SupplierCategory.first
@@ -31,21 +35,17 @@ class SuppliersController < ApplicationController
flash[:notice] = I18n.t('suppliers.create.notice')
redirect_to suppliers_path
else
- render :action => 'new'
+ render action: 'new'
end
end
- def edit
- @supplier = Supplier.find(params[:id])
- end
-
def update
@supplier = Supplier.find(params[:id])
if @supplier.update(supplier_params)
flash[:notice] = I18n.t('suppliers.update.notice')
redirect_to @supplier
else
- render :action => 'edit'
+ render action: 'edit'
end
end
@@ -54,8 +54,8 @@ class SuppliersController < ApplicationController
@supplier.mark_as_deleted
flash[:notice] = I18n.t('suppliers.destroy.notice')
redirect_to suppliers_path
- rescue => e
- flash[:error] = I18n.t('errors.general_msg', :msg => e.message)
+ rescue StandardError => e
+ flash[:error] = I18n.t('errors.general_msg', msg: e.message)
redirect_to @supplier
end
diff --git a/app/controllers/tasks_controller.rb b/app/controllers/tasks_controller.rb
index db4ca1ab..352c71ae 100644
--- a/app/controllers/tasks_controller.rb
+++ b/app/controllers/tasks_controller.rb
@@ -11,35 +11,33 @@ class TasksController < ApplicationController
@accepted_tasks = Task.accepted_tasks_for(current_user)
end
- def new
- @task = Task.new(current_user_id: current_user.id)
- end
-
- def create
- @task = Task.new(current_user_id: current_user.id)
- @task.created_by = current_user
- @task.attributes = (task_params)
- if params[:periodic]
- @task.periodic_task_group = PeriodicTaskGroup.new
- end
- if @task.save
- @task.periodic_task_group.create_tasks_for_upfront_days if params[:periodic]
- redirect_to tasks_url, :notice => I18n.t('tasks.create.notice')
- else
- render :template => "tasks/new"
- end
- end
-
def show
@task = Task.find(params[:id])
end
+ def new
+ @task = Task.new(current_user_id: current_user.id)
+ end
+
def edit
@task = Task.find(params[:id])
@periodic = !!params[:periodic]
@task.current_user_id = current_user.id
end
+ def create
+ @task = Task.new(current_user_id: current_user.id)
+ @task.created_by = current_user
+ @task.attributes = (task_params)
+ @task.periodic_task_group = PeriodicTaskGroup.new if params[:periodic]
+ if @task.save
+ @task.periodic_task_group.create_tasks_for_upfront_days if params[:periodic]
+ redirect_to tasks_url, notice: I18n.t('tasks.create.notice')
+ else
+ render template: 'tasks/new'
+ end
+ end
+
def update
@task = Task.find(params[:id])
task_group = @task.periodic_task_group
@@ -50,16 +48,14 @@ class TasksController < ApplicationController
if @task.errors.empty? && @task.save
task_group.update_tasks_including(@task, prev_due_date) if params[:periodic]
flash[:notice] = I18n.t('tasks.update.notice')
- if was_periodic && !@task.periodic?
- flash[:notice] = I18n.t('tasks.update.notice_converted')
- end
+ flash[:notice] = I18n.t('tasks.update.notice_converted') if was_periodic && !@task.periodic?
if @task.workgroup
redirect_to workgroup_tasks_url(workgroup_id: @task.workgroup_id)
else
redirect_to tasks_url
end
else
- render :template => "tasks/edit"
+ render template: 'tasks/edit'
end
end
@@ -75,7 +71,7 @@ class TasksController < ApplicationController
end
task.update_ordergroup_stats(user_ids)
- redirect_to tasks_url, :notice => I18n.t('tasks.destroy.notice')
+ redirect_to tasks_url, notice: I18n.t('tasks.destroy.notice')
end
# assign current_user to the task and set the assignment to "accepted"
@@ -85,20 +81,20 @@ class TasksController < ApplicationController
if ass = task.is_assigned?(current_user)
ass.update_attribute(:accepted, true)
else
- task.assignments.create(:user => current_user, :accepted => true)
+ task.assignments.create(user: current_user, accepted: true)
end
- redirect_to user_tasks_path, :notice => I18n.t('tasks.accept.notice')
+ redirect_to user_tasks_path, notice: I18n.t('tasks.accept.notice')
end
# deletes assignment between current_user and given taskcurrent_user_id: current_user.id
def reject
Task.find(params[:id]).users.delete(current_user)
- redirect_to :action => "index"
+ redirect_to action: 'index'
end
def set_done
Task.find(params[:id]).update_attribute :done, true
- redirect_to tasks_url, :notice => I18n.t('tasks.set_done.notice')
+ redirect_to tasks_url, notice: I18n.t('tasks.set_done.notice')
end
# Shows all tasks, which are already done
@@ -109,9 +105,9 @@ class TasksController < ApplicationController
# shows workgroup (normal group) to edit weekly_tasks_template
def workgroup
@group = Group.find(params[:workgroup_id])
- if @group.is_a? Ordergroup
- redirect_to tasks_url, :alert => I18n.t('tasks.error_not_found')
- end
+ return unless @group.is_a? Ordergroup
+
+ redirect_to tasks_url, alert: I18n.t('tasks.error_not_found')
end
private
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 503bc79b..df56ade0 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -3,7 +3,7 @@ class UsersController < ApplicationController
def index
@users = User.undeleted.natural_search(params[:q])
respond_to do |format|
- format.json { render :json => @users.map(&:token_attributes).to_json }
+ format.json { render json: @users.map(&:token_attributes).to_json }
end
end
end
diff --git a/app/documents/order_by_articles.rb b/app/documents/order_by_articles.rb
index 84fb5c00..b1a68a11 100644
--- a/app/documents/order_by_articles.rb
+++ b/app/documents/order_by_articles.rb
@@ -1,11 +1,11 @@
class OrderByArticles < OrderPdf
def filename
- I18n.t('documents.order_by_articles.filename', :name => order.name, :date => order.ends.to_date) + '.pdf'
+ I18n.t('documents.order_by_articles.filename', name: order.name, date: order.ends.to_date) + '.pdf'
end
def title
- I18n.t('documents.order_by_articles.title', :name => order.name,
- :date => order.ends.strftime(I18n.t('date.formats.default')))
+ I18n.t('documents.order_by_articles.title', name: order.name,
+ date: order.ends.strftime(I18n.t('date.formats.default')))
end
def body
diff --git a/app/documents/order_by_groups.rb b/app/documents/order_by_groups.rb
index d6711731..e5a72c35 100644
--- a/app/documents/order_by_groups.rb
+++ b/app/documents/order_by_groups.rb
@@ -1,11 +1,11 @@
class OrderByGroups < OrderPdf
def filename
- I18n.t('documents.order_by_groups.filename', :name => order.name, :date => order.ends.to_date) + '.pdf'
+ I18n.t('documents.order_by_groups.filename', name: order.name, date: order.ends.to_date) + '.pdf'
end
def title
- I18n.t('documents.order_by_groups.title', :name => order.name,
- :date => order.ends.strftime(I18n.t('date.formats.default')))
+ I18n.t('documents.order_by_groups.title', name: order.name,
+ date: order.ends.strftime(I18n.t('date.formats.default')))
end
def body
diff --git a/app/documents/order_fax.rb b/app/documents/order_fax.rb
index b4b50577..e881c93f 100644
--- a/app/documents/order_fax.rb
+++ b/app/documents/order_fax.rb
@@ -2,7 +2,7 @@ class OrderFax < OrderPdf
BATCH_SIZE = 250
def filename
- I18n.t('documents.order_fax.filename', :name => order.name, :date => order.ends.to_date) + '.pdf'
+ I18n.t('documents.order_fax.filename', name: order.name, date: order.ends.to_date) + '.pdf'
end
def title
@@ -20,16 +20,18 @@ class OrderFax < OrderPdf
move_down 5
text "#{contact[:zip_code]} #{contact[:city]}", size: fontsize(9), align: :right
move_down 5
- unless order.supplier.try(:customer_number).blank?
- text "#{Supplier.human_attribute_name :customer_number}: #{order.supplier[:customer_number]}", size: fontsize(9), align: :right
+ if order.supplier.try(:customer_number).present?
+ text "#{Supplier.human_attribute_name :customer_number}: #{order.supplier[:customer_number]}",
+ size: fontsize(9), align: :right
move_down 5
end
- unless contact[:phone].blank?
+ if contact[:phone].present?
text "#{Supplier.human_attribute_name :phone}: #{contact[:phone]}", size: fontsize(9), align: :right
move_down 5
end
- unless contact[:email].blank?
- text "#{Supplier.human_attribute_name :email}: #{contact[:email]}", size: fontsize(9), align: :right
+ if contact[:email].present?
+ text "#{Supplier.human_attribute_name :email}: #{contact[:email]}", size: fontsize(9),
+ align: :right
end
end
@@ -38,7 +40,7 @@ class OrderFax < OrderPdf
text order.name
move_down 5
text order.supplier.try(:address).to_s
- unless order.supplier.try(:fax).blank?
+ if order.supplier.try(:fax).present?
move_down 5
text "#{Supplier.human_attribute_name :fax}: #{order.supplier[:fax]}"
end
@@ -50,7 +52,7 @@ class OrderFax < OrderPdf
move_down 10
text "#{Delivery.human_attribute_name :date}:"
move_down 10
- unless order.supplier.try(:contact_person).blank?
+ if order.supplier.try(:contact_person).present?
text "#{Supplier.human_attribute_name :contact_person}: #{order.supplier[:contact_person]}"
move_down 10
end
@@ -78,8 +80,8 @@ class OrderFax < OrderPdf
table.row(0).border_bottom_width = 2
table.columns(1).align = :right
table.columns(3..6).align = :right
- table.row(data.length - 1).columns(0..5).borders = [:top, :bottom]
- table.row(data.length - 1).columns(0).borders = [:top, :bottom, :left]
+ table.row(data.length - 1).columns(0..5).borders = %i[top bottom]
+ table.row(data.length - 1).columns(0).borders = %i[top bottom left]
table.row(data.length - 1).border_top_width = 2
end
# font_size: fontsize(8),
@@ -98,7 +100,7 @@ class OrderFax < OrderPdf
.preload(:article, :article_price)
end
- def each_order_article
- order_articles.find_each_with_order(batch_size: BATCH_SIZE) { |oa| yield oa }
+ def each_order_article(&block)
+ order_articles.find_each_with_order(batch_size: BATCH_SIZE, &block)
end
end
diff --git a/app/documents/order_matrix.rb b/app/documents/order_matrix.rb
index 7269feaf..c45ca5fd 100644
--- a/app/documents/order_matrix.rb
+++ b/app/documents/order_matrix.rb
@@ -3,12 +3,12 @@ class OrderMatrix < OrderPdf
PLACEHOLDER_CHAR = 'X'
def filename
- I18n.t('documents.order_matrix.filename', :name => @order.name, :date => @order.ends.to_date) + '.pdf'
+ I18n.t('documents.order_matrix.filename', name: @order.name, date: @order.ends.to_date) + '.pdf'
end
def title
- I18n.t('documents.order_matrix.title', :name => @order.name,
- :date => @order.ends.strftime(I18n.t('date.formats.default')))
+ I18n.t('documents.order_matrix.title', name: @order.name,
+ date: @order.ends.strftime(I18n.t('date.formats.default')))
end
def body
@@ -87,7 +87,7 @@ class OrderMatrix < OrderPdf
table.cells.border_width = 0.5
table.cells.border_color = '666666'
- table.row(0).borders = [:bottom, :left]
+ table.row(0).borders = %i[bottom left]
table.row(0).padding = [2, 0, 2, 0]
table.row(1..-1).height = row_height_1
table.column(0..1).borders = []
@@ -106,7 +106,7 @@ class OrderMatrix < OrderPdf
table.column(2 + idx).border_width = 2
end
- table.row_colors = ['dddddd', 'ffffff']
+ table.row_colors = %w[dddddd ffffff]
end
first_page = false
diff --git a/app/helpers/admin/configs_helper.rb b/app/helpers/admin/configs_helper.rb
index 0185a0df..3c1da9f0 100644
--- a/app/helpers/admin/configs_helper.rb
+++ b/app/helpers/admin/configs_helper.rb
@@ -28,7 +28,11 @@ module Admin::ConfigsHelper
options[:default] = options[:input_html].delete(:value)
return form.input key, options, &block
end
- block ||= proc { config_input_field form, key, options.merge(options[:input_html]) } if options[:as] == :select_recurring
+ if options[:as] == :select_recurring
+ block ||= proc {
+ config_input_field form, key, options.merge(options[:input_html])
+ }
+ end
form.input key, options, &block
end
@@ -57,11 +61,12 @@ module Admin::ConfigsHelper
unchecked_value = options.delete(:unchecked_value) || 'false'
options[:checked] = 'checked' if v = options.delete(:value) && v != 'false'
# different key for hidden field so that allow clocking on label focuses the control
- form.hidden_field(key, id: "#{key}_", value: unchecked_value, as: :hidden) + form.check_box(key, options, checked_value, false)
+ form.hidden_field(key, id: "#{key}_", value: unchecked_value,
+ as: :hidden) + form.check_box(key, options, checked_value, false)
elsif options[:as] == :select_recurring
options[:value] = FoodsoftDateUtil.rule_from(options[:value])
options[:rules] ||= []
- options[:rules].unshift options[:value] unless options[:value].blank?
+ options[:rules].unshift options[:value] if options[:value].present?
options[:rules].push [I18n.t('recurring_select.not_recurring'), '{}'] if options.delete(:allow_blank) # blank after current value
form.select_recurring key, options.delete(:rules).uniq, options
else
@@ -73,7 +78,7 @@ module Admin::ConfigsHelper
# @param form [ActionView::Helpers::FormBuilder] Form object.
# @param key [Symbol, String] Configuration key of a boolean (e.g. +use_messages+).
# @option options [String] :label Label to show
- def config_use_heading(form, key, options = {})
+ def config_use_heading(form, key, options = {}, &block)
head = content_tag :label do
lbl = options[:label] || config_input_label(form, key)
field = config_input_field(form, key, as: :boolean, boolean_style: :inline,
@@ -83,9 +88,7 @@ module Admin::ConfigsHelper
content_tag :span, (lbl + field).html_safe, config_input_tooltip_options(form, key, {})
end
end
- fields = content_tag(:fieldset, id: "#{key}-fields", class: "collapse#{' in' if @cfg[key]}") do
- yield
- end
+ fields = content_tag(:fieldset, id: "#{key}-fields", class: "collapse#{' in' if @cfg[key]}", &block)
head + fields
end
@@ -127,7 +130,7 @@ module Admin::ConfigsHelper
# tooltip with help info to the right
cfg_path = form.lookup_model_names[1..-1] + [key]
tooltip = I18n.t("config.hints.#{cfg_path.map(&:to_s).join('.')}", default: '')
- unless tooltip.blank?
+ if tooltip.present?
options[:data] ||= {}
options[:data][:toggle] ||= 'tooltip'
options[:data][:placement] ||= 'right'
diff --git a/app/helpers/admin/ordergroups_helper.rb b/app/helpers/admin/ordergroups_helper.rb
index e74fdde5..ecb4bd39 100644
--- a/app/helpers/admin/ordergroups_helper.rb
+++ b/app/helpers/admin/ordergroups_helper.rb
@@ -2,9 +2,7 @@ module Admin::OrdergroupsHelper
def ordergroup_members_title(ordergroup)
s = ''
s += ordergroup.users.map(&:name).join(', ') if ordergroup.users.any?
- if ordergroup.contact_person.present?
- s += "\n" + Ordergroup.human_attribute_name(:contact) + ": " + ordergroup.contact_person
- end
+ s += "\n" + Ordergroup.human_attribute_name(:contact) + ': ' + ordergroup.contact_person if ordergroup.contact_person.present?
s
end
end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index de207901..b962507b 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -4,7 +4,7 @@ module ApplicationHelper
include PathHelper
def format_time(time = Time.now)
- I18n.l(time, :format => "%d.%m.%Y %H:%M") unless time.nil?
+ I18n.l(time, format: '%d.%m.%Y %H:%M') unless time.nil?
end
def format_date(time = Time.now)
@@ -16,7 +16,7 @@ module ApplicationHelper
end
def format_datetime_timespec(time, format)
- I18n.l(time, :format => format) unless (time.nil? || format.nil?)
+ I18n.l(time, format: format) unless time.nil? || format.nil?
end
def format_currency(amount)
@@ -26,28 +26,28 @@ module ApplicationHelper
# Splits an IBAN into groups of 4 digits displayed with margins in between
def format_iban(iban)
- iban && iban.scan(/..?.?.?/).map { |item| content_tag(:span, item, style: "margin-right: 0.5em;") }.join.html_safe
+ iban && iban.scan(/..?.?.?/).map { |item| content_tag(:span, item, style: 'margin-right: 0.5em;') }.join.html_safe
end
# Creates ajax-controlled-links for pagination
def pagination_links_remote(collection, options = {})
per_page = options[:per_page] || @per_page
params = options[:params] || {}
- params = params.merge({ :per_page => per_page })
- paginate collection, :params => params, :remote => true
+ params = params.merge({ per_page: per_page })
+ paginate collection, params: params, remote: true
end
# Link-collection for per_page-options when using the pagination-plugin
def items_per_page(options = {})
per_page_options = options[:per_page_options] || [20, 50, 100, 500]
current = options[:current] || @per_page
- params = params || {}
+ params ||= {}
links = per_page_options.map do |per_page|
- params.merge!({ :per_page => per_page })
+ params.merge!({ per_page: per_page })
link_class = 'btn'
link_class << ' disabled' if per_page == current
- link_to(per_page, params, :remote => true, class: link_class)
+ link_to(per_page, params, remote: true, class: link_class)
end
if options[:wrap] == false
@@ -63,21 +63,19 @@ module ApplicationHelper
# Hmtl options
remote = options[:remote].nil? ? true : options[:remote]
class_name = case params[:sort]
- when key then
+ when key
'sortup'
- when key + '_reverse' then
+ when key + '_reverse'
'sortdown'
- else
- nil
end
html_options = {
- :title => I18n.t('helpers.application.sort_by', text: text),
- :remote => remote,
- :class => class_name
+ title: I18n.t('helpers.application.sort_by', text: text),
+ remote: remote,
+ class: class_name
}
# Url options
- key += "_reverse" if params[:sort] == key
+ key += '_reverse' if params[:sort] == key
per_page = options[:per_page] || @per_page
url_options = params.merge(per_page: per_page, sort: key)
url_options.merge!({ page: params[:page] }) if params[:page]
@@ -95,14 +93,16 @@ module ApplicationHelper
# be overridden by the option 'desc'.
# Other options are passed through to I18n.
def heading_helper(model, attribute, options = {})
- i18nopts = { count: 2 }.merge(options.select { |a| !['short', 'desc'].include?(a) })
+ i18nopts = { count: 2 }.merge(options.select { |a| !%w[short desc].include?(a) })
s = model.human_attribute_name(attribute, i18nopts)
if options[:short]
desc = options[:desc]
- desc ||= model.human_attribute_name("#{attribute}_desc".to_sym, options.merge({ fallback: true, default: '', count: 2 }))
+ desc ||= model.human_attribute_name("#{attribute}_desc".to_sym,
+ options.merge({ fallback: true, default: '', count: 2 }))
desc.blank? && desc = s
- sshort = model.human_attribute_name("#{attribute}_short".to_sym, options.merge({ fallback: true, default: '', count: 2 }))
- s = raw "#{sshort}" unless sshort.blank?
+ sshort = model.human_attribute_name("#{attribute}_short".to_sym,
+ options.merge({ fallback: true, default: '', count: 2 }))
+ s = raw "#{sshort}" if sshort.present?
end
s
end
@@ -117,7 +117,7 @@ module ApplicationHelper
# Returns the weekday. 0 is sunday, 1 is monday and so on
def weekday(dayNumber)
weekdays = I18n.t('date.day_names')
- return weekdays[dayNumber]
+ weekdays[dayNumber]
end
# to set a title for both the h1-tag and the title in the header
@@ -136,13 +136,13 @@ module ApplicationHelper
def icon(name, options = {})
icons = {
- :delete => { :file => 'b_drop.png', :alt => I18n.t('ui.delete') },
- :edit => { :file => 'b_edit.png', :alt => I18n.t('ui.edit') },
- :members => { :file => 'b_users.png', :alt => I18n.t('helpers.application.edit_user') }
+ delete: { file: 'b_drop.png', alt: I18n.t('ui.delete') },
+ edit: { file: 'b_edit.png', alt: I18n.t('ui.edit') },
+ members: { file: 'b_users.png', alt: I18n.t('helpers.application.edit_user') }
}
options[:alt] ||= icons[name][:alt]
options[:title] ||= icons[name][:title]
- options.merge!({ :size => '16x16', :border => "0" })
+ options.merge!({ size: '16x16', border: '0' })
image_tag icons[name][:file], options
end
@@ -150,27 +150,29 @@ module ApplicationHelper
# Remote links with default 'loader'.gif during request
def remote_link_to(text, options = {})
remote_options = {
- :before => "Element.show('loader')",
- :success => "Element.hide('loader')",
- :method => :get
+ before: "Element.show('loader')",
+ success: "Element.hide('loader')",
+ method: :get
}
link_to(text, options[:url], remote_options.merge(options))
end
def format_roles(record, icon = false)
- roles = %w(suppliers article_meta orders pickups finance invoices admin)
+ roles = %w[suppliers article_meta orders pickups finance invoices admin]
roles.select! { |role| record.send "role_#{role}?" }
- names = Hash[roles.map { |r| [r, I18n.t("helpers.application.role_#{r}")] }]
+ names = roles.index_with { |r| I18n.t("helpers.application.role_#{r}") }
if icon
- roles.map { |r| image_tag("role-#{r}.png", size: '22x22', border: 0, alt: names[r], title: names[r]) }.join(' ').html_safe
+ roles.map do |r|
+ image_tag("role-#{r}.png", size: '22x22', border: 0, alt: names[r], title: names[r])
+ end.join(' ').html_safe
else
roles.map { |r| names[r] }.join(', ')
end
end
def link_to_gmaps(address)
- link_to h(address), "http://maps.google.com/?q=#{h(address)}", :title => I18n.t('helpers.application.show_google_maps'),
- :target => "_blank"
+ link_to h(address), "http://maps.google.com/?q=#{h(address)}", title: I18n.t('helpers.application.show_google_maps'),
+ target: '_blank', rel: 'noopener'
end
# Returns flash messages html.
@@ -186,8 +188,8 @@ module ApplicationHelper
type = :success if type == 'notice'
type = :error if type == 'alert'
text = content_tag(:div,
- content_tag(:button, I18n.t('ui.marks.close').html_safe, :class => "close", "data-dismiss" => "alert") +
- message, :class => "alert fade in alert-#{type}")
+ content_tag(:button, I18n.t('ui.marks.close').html_safe, :class => 'close', 'data-dismiss' => 'alert') +
+ message, class: "alert fade in alert-#{type}")
flash_messages << text if message
end
flash_messages.join("\n").html_safe
@@ -195,17 +197,17 @@ module ApplicationHelper
# render base errors in a form after failed validation
# http://railsapps.github.io/twitter-bootstrap-rails.html
- def base_errors resource
+ def base_errors(resource)
return '' if resource.errors.empty? || resource.errors[:base].empty?
messages = resource.errors[:base].map { |msg| content_tag(:li, msg) }.join
- render :partial => 'shared/base_errors', :locals => { :error_messages => messages }
+ render partial: 'shared/base_errors', locals: { error_messages: messages }
end
# show a user, depending on settings
def show_user(user = @current_user, options = {})
if user.nil?
- "?"
+ '?'
elsif FoodsoftConfig[:use_nick]
if options[:full] && options[:markup]
raw "#{h user.nick} (#{h user.first_name} #{h user.last_name})"
@@ -216,7 +218,7 @@ module ApplicationHelper
user.nick.nil? ? I18n.t('helpers.application.nick_fallback') : user.nick
end
else
- "#{user.first_name} #{user.last_name}" + (options[:unique] ? " (\##{user.id})" : '')
+ "#{user.first_name} #{user.last_name}" + (options[:unique] ? " (##{user.id})" : '')
end
end
@@ -258,9 +260,9 @@ module ApplicationHelper
# @return [String] stylesheet tag for foodcoop CSS style (+custom_css+ foodcoop config)
# @see #foodcoop_css_path
- def foodcoop_css_tag(options = {})
- unless FoodsoftConfig[:custom_css].blank?
- stylesheet_link_tag foodcoop_css_path, media: 'all'
- end
+ def foodcoop_css_tag(_options = {})
+ return if FoodsoftConfig[:custom_css].blank?
+
+ stylesheet_link_tag foodcoop_css_path, media: 'all'
end
end
diff --git a/app/helpers/articles_helper.rb b/app/helpers/articles_helper.rb
index add1c6ba..ebad29a4 100644
--- a/app/helpers/articles_helper.rb
+++ b/app/helpers/articles_helper.rb
@@ -3,13 +3,13 @@ module ArticlesHelper
def highlight_new(unequal_attributes, attribute)
return unless unequal_attributes
- unequal_attributes.has_key?(attribute) ? "background-color: yellow" : ""
+ unequal_attributes.has_key?(attribute) ? 'background-color: yellow' : ''
end
def row_classes(article)
classes = []
- classes << "unavailable" if !article.availability
- classes << "just-updated" if article.recently_updated && article.availability
- classes.join(" ")
+ classes << 'unavailable' unless article.availability
+ classes << 'just-updated' if article.recently_updated && article.availability
+ classes.join(' ')
end
end
diff --git a/app/helpers/deliveries_helper.rb b/app/helpers/deliveries_helper.rb
index a97a7df7..ac6e4b35 100644
--- a/app/helpers/deliveries_helper.rb
+++ b/app/helpers/deliveries_helper.rb
@@ -11,11 +11,11 @@ module DeliveriesHelper
def articles_for_select2(articles, except = [], &block)
articles = articles.reorder('articles.name ASC')
- articles = articles.reject { |a| not except.index(a.id).nil? } if except
- block_given? or block = Proc.new { |a| "#{a.name} (#{number_to_currency a.price}/#{a.unit})" }
+ articles = articles.reject { |a| !except.index(a.id).nil? } if except
+ block_given? or block = proc { |a| "#{a.name} (#{number_to_currency a.price}/#{a.unit})" }
articles.map do |a|
- { :id => a.id, :text => block.call(a) }
- end.unshift({ :id => '', :text => '' })
+ { id: a.id, text: block.call(a) }
+ end.unshift({ id: '', text: '' })
end
def articles_for_table(articles)
@@ -23,10 +23,14 @@ module DeliveriesHelper
end
def stock_change_remove_link(stock_change_form)
- return link_to t('deliveries.stock_change_fields.remove_article'), "#", :class => 'remove_new_stock_change btn btn-small' if stock_change_form.object.new_record?
+ if stock_change_form.object.new_record?
+ return link_to t('deliveries.stock_change_fields.remove_article'), '#',
+ class: 'remove_new_stock_change btn btn-small'
+ end
output = stock_change_form.hidden_field :_destroy
- output += link_to t('deliveries.stock_change_fields.remove_article'), "#", :class => 'destroy_stock_change btn btn-small'
- return output.html_safe
+ output += link_to t('deliveries.stock_change_fields.remove_article'), '#',
+ class: 'destroy_stock_change btn btn-small'
+ output.html_safe
end
end
diff --git a/app/helpers/finance/balancing_helper.rb b/app/helpers/finance/balancing_helper.rb
index bc528f04..a123b161 100644
--- a/app/helpers/finance/balancing_helper.rb
+++ b/app/helpers/finance/balancing_helper.rb
@@ -2,11 +2,11 @@ module Finance::BalancingHelper
def balancing_view_partial
view = params[:view] || 'edit_results'
case view
- when 'edit_results' then
+ when 'edit_results'
'edit_results_by_articles'
- when 'groups_overview' then
+ when 'groups_overview'
'shared/articles_by/groups'
- when 'articles_overview' then
+ when 'articles_overview'
'shared/articles_by/articles'
end
end
diff --git a/app/helpers/finance/invoices_helper.rb b/app/helpers/finance/invoices_helper.rb
index ef01a275..0644b501 100644
--- a/app/helpers/finance/invoices_helper.rb
+++ b/app/helpers/finance/invoices_helper.rb
@@ -1,9 +1,9 @@
module Finance::InvoicesHelper
- def format_delivery_item delivery
+ def format_delivery_item(delivery)
format_date(delivery.date)
end
- def format_order_item order
+ def format_order_item(order)
"#{format_date(order.ends)} (#{number_to_currency(order.sum)})"
end
end
diff --git a/app/helpers/group_order_articles_helper.rb b/app/helpers/group_order_articles_helper.rb
index ff003731..3a7efc33 100644
--- a/app/helpers/group_order_articles_helper.rb
+++ b/app/helpers/group_order_articles_helper.rb
@@ -2,12 +2,12 @@ module GroupOrderArticlesHelper
# return an edit field for a GroupOrderArticle result
def group_order_article_edit_result(goa)
result = number_with_precision goa.result, strip_insignificant_zeros: true
- unless goa.group_order.order.finished? && current_user.role_finance?
- result
- else
+ if goa.group_order.order.finished? && current_user.role_finance?
simple_form_for goa, remote: true, html: { 'data-submit-onchange' => 'changed', class: 'delta-input' } do |f|
f.input_field :result, as: :delta, class: 'input-nano', data: { min: 0 }, id: "r_#{goa.id}", value: result
end
+ else
+ result
end
end
end
diff --git a/app/helpers/group_orders_helper.rb b/app/helpers/group_orders_helper.rb
index c5e27c66..a09a066c 100644
--- a/app/helpers/group_orders_helper.rb
+++ b/app/helpers/group_orders_helper.rb
@@ -1,10 +1,11 @@
module GroupOrdersHelper
def data_to_js(ordering_data)
- ordering_data[:order_articles].map { |id, data|
- [id, data[:price], data[:unit], data[:total_price], data[:others_quantity], data[:others_tolerance], data[:used_quantity], data[:quantity_available]]
- }.map { |row|
+ ordering_data[:order_articles].map do |id, data|
+ [id, data[:price], data[:unit], data[:total_price], data[:others_quantity], data[:others_tolerance],
+ data[:used_quantity], data[:quantity_available]]
+ end.map do |row|
"addData(#{row.join(', ')});"
- }.join("\n")
+ end.join("\n")
end
# Returns a link to the page where a group_order can be edited.
@@ -14,9 +15,9 @@ module GroupOrdersHelper
path = if options[:show] && group_order
group_order_path(group_order)
elsif group_order
- edit_group_order_path(group_order, :order_id => order.id)
+ edit_group_order_path(group_order, order_id: order.id)
else
- new_group_order_path(:order_id => order.id)
+ new_group_order_path(order_id: order.id)
end
options.delete(:show)
name = block_given? ? capture(&block) : order.name
@@ -26,7 +27,7 @@ module GroupOrdersHelper
# Return css class names for order result table
def order_article_class_name(quantity, tolerance, result)
- if (quantity + tolerance > 0)
+ if quantity + tolerance > 0
result > 0 ? 'success' : 'failed'
else
'ignored'
@@ -45,12 +46,12 @@ module GroupOrdersHelper
end
def get_missing_units_css_class(quantity_missing)
- if (quantity_missing == 1)
- return 'missing-few';
- elsif (quantity_missing == 0)
- return ''
+ if quantity_missing == 1
+ 'missing-few'
+ elsif quantity_missing == 0
+ ''
else
- return 'missing-many'
+ 'missing-many'
end
end
end
diff --git a/app/helpers/order_articles_helper.rb b/app/helpers/order_articles_helper.rb
index b4290e84..7af4b409 100644
--- a/app/helpers/order_articles_helper.rb
+++ b/app/helpers/order_articles_helper.rb
@@ -1,6 +1,6 @@
module OrderArticlesHelper
def article_label_with_unit(article)
pkg_info = pkg_helper(article, plain: true)
- "#{article.name} (#{[article.unit, pkg_info].reject(&:blank?).join(' ')})"
+ "#{article.name} (#{[article.unit, pkg_info].compact_blank.join(' ')})"
end
end
diff --git a/app/helpers/orders_helper.rb b/app/helpers/orders_helper.rb
index ff238730..d629ccb1 100644
--- a/app/helpers/orders_helper.rb
+++ b/app/helpers/orders_helper.rb
@@ -18,7 +18,7 @@ module OrdersHelper
def options_for_suppliers_to_select
options = [[I18n.t('helpers.orders.option_choose')]]
- options += Supplier.map { |s| [s.name, url_for(action: "new", supplier_id: s.id)] }
+ options += Supplier.map { |s| [s.name, url_for(action: 'new', supplier_id: s.id)] }
options += [[I18n.t('helpers.orders.option_stock'), url_for(action: 'new', supplier_id: nil)]]
options_for_select(options)
end
@@ -29,13 +29,13 @@ module OrdersHelper
nil
else
units_info = []
- [:units_to_order, :units_billed, :units_received].map do |unit|
- if n = order_article.send(unit)
- line = n.to_s + ' '
- line += pkg_helper(order_article.price, options) + ' ' unless n == 0
- line += OrderArticle.human_attribute_name("#{unit}_short", count: n)
- units_info << line
- end
+ %i[units_to_order units_billed units_received].map do |unit|
+ next unless n = order_article.send(unit)
+
+ line = n.to_s + ' '
+ line += pkg_helper(order_article.price, options) + ' ' unless n == 0
+ line += OrderArticle.human_attribute_name("#{unit}_short", count: n)
+ units_info << line
end
units_info.join(', ').html_safe
end
@@ -67,8 +67,8 @@ module OrdersHelper
def pkg_helper_icon(c = nil, options = {})
options = { tag: 'i', class: '' }.merge(options)
if c.nil?
- c = " ".html_safe
- options[:class] += " icon-only"
+ c = ' '.html_safe
+ options[:class] += ' icon-only'
end
content_tag(options[:tag], c, class: "package #{options[:class]}").html_safe
end
@@ -94,11 +94,12 @@ module OrdersHelper
autocomplete: 'off'
if order_article.result_manually_changed?
- input_html = content_tag(:span, class: 'input-prepend intable', title: t('orders.edit_amount.field_locked_title', default: '')) {
+ input_html = content_tag(:span, class: 'input-prepend intable',
+ title: t('orders.edit_amount.field_locked_title', default: '')) do
button_tag(nil, type: :button, class: 'btn unlocker') {
content_tag(:i, nil, class: 'icon icon-unlock')
} + input_html
- }
+ end
end
input_html.html_safe
@@ -109,18 +110,16 @@ module OrdersHelper
def ordergroup_count(order)
group_orders = order.group_orders.includes(:ordergroup)
txt = "#{group_orders.count} #{Ordergroup.model_name.human count: group_orders.count}"
- if group_orders.count == 0
- return txt
- else
- desc = group_orders.includes(:ordergroup).map { |g| g.ordergroup_name }.join(', ')
- content_tag(:abbr, txt, title: desc).html_safe
- end
+ return txt if group_orders.count == 0
+
+ desc = group_orders.includes(:ordergroup).map { |g| g.ordergroup_name }.join(', ')
+ content_tag(:abbr, txt, title: desc).html_safe
end
# @param order_or_supplier [Order, Supplier] Order or supplier to link to
# @return [String] Link to order or supplier, showing its name.
def supplier_link(order_or_supplier)
- if order_or_supplier.kind_of?(Order) && order_or_supplier.stockit?
+ if order_or_supplier.is_a?(Order) && order_or_supplier.stockit?
link_to(order_or_supplier.name, stock_articles_path).html_safe
else
link_to(@order.supplier.name, supplier_path(@order.supplier)).html_safe
@@ -152,7 +151,8 @@ module OrdersHelper
if order.stockit?
content_tag :div, t('orders.index.action_receive'), class: "btn disabled #{options[:class]}"
else
- link_to t('orders.index.action_receive'), receive_order_path(order), class: "btn#{' btn-success' unless order.received?} #{options[:class]}"
+ link_to t('orders.index.action_receive'), receive_order_path(order),
+ class: "btn#{' btn-success' unless order.received?} #{options[:class]}"
end
end
end
diff --git a/app/helpers/stockit_helper.rb b/app/helpers/stockit_helper.rb
index a08e8335..9848198d 100644
--- a/app/helpers/stockit_helper.rb
+++ b/app/helpers/stockit_helper.rb
@@ -1,8 +1,8 @@
module StockitHelper
def stock_article_classes(article)
class_names = []
- class_names << "unavailable" if article.quantity_available <= 0
- class_names.join(" ")
+ class_names << 'unavailable' if article.quantity_available <= 0
+ class_names.join(' ')
end
def link_to_stock_change_reason(stock_change)
@@ -17,8 +17,8 @@ module StockitHelper
def stock_article_price_hint(stock_article)
t('simple_form.hints.stock_article.edit_stock_article.price',
- :stock_article_copy_link => link_to(t('stockit.form.copy_stock_article'),
- stock_article_copy_path(stock_article),
- :remote => true))
+ stock_article_copy_link: link_to(t('stockit.form.copy_stock_article'),
+ stock_article_copy_path(stock_article),
+ remote: true))
end
end
diff --git a/app/helpers/tasks_helper.rb b/app/helpers/tasks_helper.rb
index f6f1fa14..4b12f7a8 100644
--- a/app/helpers/tasks_helper.rb
+++ b/app/helpers/tasks_helper.rb
@@ -1,16 +1,16 @@
module TasksHelper
def task_assignments(task)
task.assignments.map do |ass|
- content_tag :span, show_user(ass.user), :class => (ass.accepted? ? 'accepted' : 'unaccepted')
- end.join(", ").html_safe
+ content_tag :span, show_user(ass.user), class: (ass.accepted? ? 'accepted' : 'unaccepted')
+ end.join(', ').html_safe
end
# generate colored number of still required users
def highlighted_required_users(task)
- unless task.enough_users_assigned?
- content_tag :span, task.still_required_users, class: 'badge badge-important',
- title: I18n.t('helpers.tasks.required_users', :count => task.still_required_users)
- end
+ return if task.enough_users_assigned?
+
+ content_tag :span, task.still_required_users, class: 'badge badge-important',
+ title: I18n.t('helpers.tasks.required_users', count: task.still_required_users)
end
def task_title(task)
diff --git a/app/inputs/delta_input.rb b/app/inputs/delta_input.rb
index adc08960..f4ce1a2b 100644
--- a/app/inputs/delta_input.rb
+++ b/app/inputs/delta_input.rb
@@ -6,7 +6,7 @@ class DeltaInput < SimpleForm::Inputs::StringInput
options[:data] ||= {}
options[:data][:delta] ||= 1
options[:autocomplete] ||= 'off'
- # TODO get generated id, don't know how yet - `add_default_name_and_id_for_value` might be an option
+ # TODO: get generated id, don't know how yet - `add_default_name_and_id_for_value` might be an option
template.content_tag :div, class: 'delta-input input-prepend input-append' do
delta_button(content_tag(:i, nil, class: 'icon icon-minus'), -1, options) +
diff --git a/app/lib/apple_bar.rb b/app/lib/apple_bar.rb
index 236417c6..fb6fcef7 100644
--- a/app/lib/apple_bar.rb
+++ b/app/lib/apple_bar.rb
@@ -29,7 +29,7 @@ class AppleBar
def mean_order_amount_per_job
(1 / @global_avg).round
- rescue
+ rescue StandardError
0
end
diff --git a/app/lib/bank_account_connector.rb b/app/lib/bank_account_connector.rb
index b728ebb9..5e18a816 100644
--- a/app/lib/bank_account_connector.rb
+++ b/app/lib/bank_account_connector.rb
@@ -41,14 +41,14 @@ class BankAccountConnector
end
end
- @@registered_classes = Set.new
+ @registered_classes = Set.new
def self.register(klass)
- @@registered_classes.add klass
+ @registered_classes.add klass
end
def self.find(iban)
- @@registered_classes.each do |klass|
+ @registered_classes.each do |klass|
return klass if klass.handles(iban)
end
nil
diff --git a/app/lib/bank_account_information_importer.rb b/app/lib/bank_account_information_importer.rb
index bebc1ff4..a83c53f7 100644
--- a/app/lib/bank_account_information_importer.rb
+++ b/app/lib/bank_account_information_importer.rb
@@ -17,16 +17,16 @@ class BankAccountInformationImporter
ret = 0
booked.each do |t|
amount = parse_account_information_amount t[:transactionAmount]
- entityName = amount < 0 ? t[:creditorName] : t[:debtorName]
- entityAccount = amount < 0 ? t[:creditorAccount] : t[:debtorAccount]
+ entity_name = amount < 0 ? t[:creditorName] : t[:debtorName]
+ entity_account = amount < 0 ? t[:creditorAccount] : t[:debtorAccount]
reference = [t[:endToEndId], t[:remittanceInformationUnstructured]].join("\n").strip
@bank_account.bank_transactions.where(external_id: t[:transactionId]).first_or_create.update({
date: t[:bookingDate],
amount: amount,
- iban: entityAccount && entityAccount[:iban],
+ iban: entity_account && entity_account[:iban],
reference: reference,
- text: entityName,
+ text: entity_name,
receipt: t[:additionalInformation]
})
ret += 1
@@ -34,7 +34,7 @@ class BankAccountInformationImporter
balances = (data[:balances] ? data[:balances].map { |b| [b[:balanceType], b[:balanceAmount]] } : []).to_h
balance = balances.values.first
- %w(closingBooked expected authorised openingBooked interimAvailable forwardAvailable nonInvoiced).each do |type|
+ %w[closingBooked expected authorised openingBooked interimAvailable forwardAvailable nonInvoiced].each do |type|
value = balances[type]
if value
balance = value
diff --git a/app/lib/date_time_attribute_validate.rb b/app/lib/date_time_attribute_validate.rb
index 23127898..fa53c361 100644
--- a/app/lib/date_time_attribute_validate.rb
+++ b/app/lib/date_time_attribute_validate.rb
@@ -10,66 +10,68 @@ module DateTimeAttributeValidate
super
attributes.each do |attribute|
- validate -> { self.send("#{attribute}_datetime_value_valid") }
+ validate -> { send("#{attribute}_datetime_value_valid") }
# allow resetting the field to nil
before_validation do
- if self.instance_variable_get("@#{attribute}_is_set")
- date = self.instance_variable_get("@#{attribute}_date_value")
- time = self.instance_variable_get("@#{attribute}_time_value")
- if date.blank? && time.blank?
- self.send("#{attribute}=", nil)
- end
+ if instance_variable_get("@#{attribute}_is_set")
+ date = instance_variable_get("@#{attribute}_date_value")
+ time = instance_variable_get("@#{attribute}_time_value")
+ send("#{attribute}=", nil) if date.blank? && time.blank?
end
end
# remember old date and time values
define_method("#{attribute}_date_value=") do |val|
- self.instance_variable_set("@#{attribute}_is_set", true)
- self.instance_variable_set("@#{attribute}_date_value", val)
+ instance_variable_set("@#{attribute}_is_set", true)
+ instance_variable_set("@#{attribute}_date_value", val)
begin
- self.send("#{attribute}_date=", val)
- rescue
+ send("#{attribute}_date=", val)
+ rescue StandardError
nil
end
end
define_method("#{attribute}_time_value=") do |val|
- self.instance_variable_set("@#{attribute}_is_set", true)
- self.instance_variable_set("@#{attribute}_time_value", val)
+ instance_variable_set("@#{attribute}_is_set", true)
+ instance_variable_set("@#{attribute}_time_value", val)
begin
- self.send("#{attribute}_time=", val)
- rescue
+ send("#{attribute}_time=", val)
+ rescue StandardError
nil
end
end
# fallback to field when values are not set
define_method("#{attribute}_date_value") do
- self.instance_variable_get("@#{attribute}_date_value") || self.send("#{attribute}_date").try { |e| e.strftime('%Y-%m-%d') }
+ instance_variable_get("@#{attribute}_date_value") || send("#{attribute}_date").try do |e|
+ e.strftime('%Y-%m-%d')
+ end
end
define_method("#{attribute}_time_value") do
- self.instance_variable_get("@#{attribute}_time_value") || self.send("#{attribute}_time").try { |e| e.strftime('%H:%M') }
+ instance_variable_get("@#{attribute}_time_value") || send("#{attribute}_time").try do |e|
+ e.strftime('%H:%M')
+ end
end
private
# validate date and time
define_method("#{attribute}_datetime_value_valid") do
- date = self.instance_variable_get("@#{attribute}_date_value")
+ date = instance_variable_get("@#{attribute}_date_value")
unless date.blank? || begin
Date.parse(date)
- rescue
+ rescue StandardError
nil
end
- errors.add(attribute, "is not a valid date") # @todo I18n
+ errors.add(attribute, 'is not a valid date') # @todo I18n
end
- time = self.instance_variable_get("@#{attribute}_time_value")
+ time = instance_variable_get("@#{attribute}_time_value")
unless time.blank? || begin
Time.parse(time)
- rescue
+ rescue StandardError
nil
end
- errors.add(attribute, "is not a valid time") # @todo I18n
+ errors.add(attribute, 'is not a valid time') # @todo I18n
end
end
end
diff --git a/app/lib/foodsoft/expansion_variables.rb b/app/lib/foodsoft/expansion_variables.rb
index 97f7b6bb..a4a8153e 100644
--- a/app/lib/foodsoft/expansion_variables.rb
+++ b/app/lib/foodsoft/expansion_variables.rb
@@ -14,7 +14,7 @@ module Foodsoft
cattr_accessor :variables
# Hash of variables. Note that keys are Strings.
- @@variables = {
+ @variables = {
'scope' => -> { FoodsoftConfig.scope },
'name' => -> { FoodsoftConfig[:name] },
'contact.street' => -> { FoodsoftConfig[:contact][:street] },
@@ -39,13 +39,13 @@ module Foodsoft
'supplier_count' => -> { Supplier.undeleted.count },
'active_supplier_count' => -> { active_supplier_count },
'active_suppliers' => -> { active_suppliers },
- 'first_order_date' => -> { I18n.l Order.first.try { |o| o.starts.to_date } }
+ 'first_order_date' => -> { I18n.l(Order.first.try { |o| o.starts.to_date }) }
}
# Return expanded variable
# @return [String] Expanded variable
def self.get(var)
- s = @@variables[var.to_s]
+ s = @variables[var.to_s]
s.respond_to?(:call) ? s.call : s.to_s
end
@@ -55,7 +55,7 @@ module Foodsoft
# @return [String] Expanded string
def self.expand(str, options = {})
str.gsub(/{{([._a-zA-Z0-9]+)}}/) do
- options[::Regexp.last_match(1)] || self.get(::Regexp.last_match(1))
+ options[::Regexp.last_match(1)] || get(::Regexp.last_match(1))
end
end
diff --git a/app/lib/foodsoft_config.rb b/app/lib/foodsoft_config.rb
index 6ea166d3..c7dda590 100644
--- a/app/lib/foodsoft_config.rb
+++ b/app/lib/foodsoft_config.rb
@@ -70,7 +70,7 @@ class FoodsoftConfig
# Load initial config from development or production
set_config Rails.env
# Overwrite scope to have a better namescope than 'production'
- self.scope = config[:default_scope] or raise "No default_scope is set"
+ self.scope = config[:default_scope] or raise 'No default_scope is set'
# Set defaults for backward-compatibility
set_missing
# Make sure relevant configuration is applied, also in single coops mode,
@@ -79,7 +79,7 @@ class FoodsoftConfig
end
def init_mailing
- [:protocol, :host, :port, :script_name].each do |k|
+ %i[protocol host port script_name].each do |k|
ActionMailer::Base.default_url_options[k] = self[k] if self[k]
end
end
@@ -117,7 +117,7 @@ class FoodsoftConfig
# @return [Object] Value of the key.
def [](key)
if RailsSettings::CachedSettings.table_exists? && allowed_key?(key)
- value = RailsSettings::CachedSettings["foodcoop.#{self.scope}.#{key}"]
+ value = RailsSettings::CachedSettings["foodcoop.#{scope}.#{key}"]
value = config[key] if value.nil?
value
else
@@ -139,20 +139,20 @@ class FoodsoftConfig
if config[key] == value || (config[key].nil? && value == false)
# delete (ok if it was already deleted)
begin
- RailsSettings::CachedSettings.destroy "foodcoop.#{self.scope}.#{key}"
+ RailsSettings::CachedSettings.destroy "foodcoop.#{scope}.#{key}"
rescue RailsSettings::Settings::SettingNotFound
end
else
# or store
- RailsSettings::CachedSettings["foodcoop.#{self.scope}.#{key}"] = value
+ RailsSettings::CachedSettings["foodcoop.#{scope}.#{key}"] = value
end
true
end
# @return [Array] Configuration keys that are set (either in +app_config.yml+ or database).
def keys
- keys = RailsSettings::CachedSettings.get_all("foodcoop.#{self.scope}.").try(:keys) || []
- keys.map! { |k| k.gsub(/^foodcoop\.#{self.scope}\./, '') }
+ keys = RailsSettings::CachedSettings.get_all("foodcoop.#{scope}.").try(:keys) || []
+ keys.map! { |k| k.gsub(/^foodcoop\.#{scope}\./, '') }
keys += config.keys
keys.map(&:to_s).uniq
end
@@ -181,10 +181,10 @@ class FoodsoftConfig
# @return [Boolean] Whether this key may be set in the database
def allowed_key?(key)
# fast check for keys without nesting
- if self.config[:protected].include? key
- !self.config[:protected][key]
+ if config[:protected].include? key
+ !config[:protected][key]
else
- !self.config[:protected][:all]
+ !config[:protected][:all]
end
# @todo allow to check nested keys as well
end
@@ -287,7 +287,9 @@ class FoodsoftConfig
def normalize_value(value)
value = value.map { |v| normalize_value(v) } if value.is_a? Array
if value.is_a? Hash
- value = ActiveSupport::HashWithIndifferentAccess[value.to_a.map { |a| [a[0], normalize_value(a[1])] }]
+ value = ActiveSupport::HashWithIndifferentAccess[value.to_a.map do |a|
+ [a[0], normalize_value(a[1])]
+ end]
end
case value
when 'true' then true
diff --git a/app/lib/foodsoft_date_util.rb b/app/lib/foodsoft_date_util.rb
index a14ad453..38dbc6be 100644
--- a/app/lib/foodsoft_date_util.rb
+++ b/app/lib/foodsoft_date_util.rb
@@ -8,26 +8,24 @@ module FoodsoftDateUtil
# @todo handle ical parse errors
occ = begin
schedule.next_occurrence(from).to_time
- rescue
+ rescue StandardError
nil
end
end
- if options && options[:time] && occ
- occ = occ.beginning_of_day.advance(seconds: Time.parse(options[:time]).seconds_since_midnight)
- end
+ occ = occ.beginning_of_day.advance(seconds: Time.parse(options[:time]).seconds_since_midnight) if options && options[:time] && occ
occ
end
- # @param p [String, Symbol, Hash, IceCube::Rule] What to return a rule from.
+ # @param rule [String, Symbol, Hash, IceCube::Rule] What to return a rule from.
# @return [IceCube::Rule] Recurring rule
- def self.rule_from(p)
- case p
+ def self.rule_from(rule)
+ case rule
when String
- IceCube::Rule.from_ical(p)
+ IceCube::Rule.from_ical(rule)
when Hash
- IceCube::Rule.from_hash(p)
+ IceCube::Rule.from_hash(rule)
else
- p
+ rule
end
end
end
diff --git a/app/lib/foodsoft_file.rb b/app/lib/foodsoft_file.rb
index 95d06c60..0a7128ed 100644
--- a/app/lib/foodsoft_file.rb
+++ b/app/lib/foodsoft_file.rb
@@ -7,17 +7,17 @@ class FoodsoftFile
SpreadsheetFile.parse file, options do |row, row_index|
next if row[2].blank?
- article = { :order_number => row[1],
- :name => row[2],
- :note => row[3],
- :manufacturer => row[4],
- :origin => row[5],
- :unit => row[6],
- :price => row[7],
- :tax => row[8],
- :deposit => (row[9].nil? ? "0" : row[9]),
- :unit_quantity => row[10],
- :article_category => row[13] }
+ article = { order_number: row[1],
+ name: row[2],
+ note: row[3],
+ manufacturer: row[4],
+ origin: row[5],
+ unit: row[6],
+ price: row[7],
+ tax: row[8],
+ deposit: (row[9].nil? ? '0' : row[9]),
+ unit_quantity: row[10],
+ article_category: row[13] }
status = row[0] && row[0].strip.downcase == 'x' ? :outlisted : nil
yield status, article, row_index
end
diff --git a/app/lib/foodsoft_mail_receiver.rb b/app/lib/foodsoft_mail_receiver.rb
index 18e93be3..c5ec2edb 100644
--- a/app/lib/foodsoft_mail_receiver.rb
+++ b/app/lib/foodsoft_mail_receiver.rb
@@ -23,8 +23,8 @@ class FoodsoftMailReceiver < MidiSmtpServer::Smtpd
recipient = rcpt_to.gsub(/^\s*<\s*(.*)\s*>\s*$/, '\1')
@handlers << self.class.find_handler(recipient)
rcpt_to
- rescue => error
- logger.info("Can not accept mail for '#{rcpt_to}': #{error}")
+ rescue StandardError => e
+ logger.info("Can not accept mail for '#{rcpt_to}': #{e}")
raise MidiSmtpServer::Smtpd550Exception
end
@@ -32,16 +32,16 @@ class FoodsoftMailReceiver < MidiSmtpServer::Smtpd
@handlers.each do |handler|
handler.call(ctx[:message][:data])
end
- rescue => error
- ExceptionNotifier.notify_exception(error, data: ctx)
- raise error
+ rescue StandardError => e
+ ExceptionNotifier.notify_exception(e, data: ctx)
+ raise e
ensure
@handlers.clear
end
def self.find_handler(recipient)
m = /(?[^@.]+)\.(?[^@]+)(@(?[^@]+))?/.match recipient
- raise "recipient is missing or has an invalid format" if m.nil?
+ raise 'recipient is missing or has an invalid format' if m.nil?
raise "Foodcoop '#{m[:foodcoop]}' could not be found" unless FoodsoftConfig.allowed_foodcoop? m[:foodcoop]
FoodsoftConfig.select_multifoodcoop m[:foodcoop]
@@ -53,6 +53,6 @@ class FoodsoftMailReceiver < MidiSmtpServer::Smtpd
end
end
- raise "invalid format for recipient"
+ raise 'invalid format for recipient'
end
end
diff --git a/app/lib/order_csv.rb b/app/lib/order_csv.rb
index b238f90c..e2449596 100644
--- a/app/lib/order_csv.rb
+++ b/app/lib/order_csv.rb
@@ -14,7 +14,7 @@ class OrderCsv < RenderCsv
end
def data
- @object.order_articles.ordered.includes([:article, :article_price]).all.map do |oa|
+ @object.order_articles.ordered.includes(%i[article article_price]).all.map do |oa|
yield [
oa.units_to_order,
oa.article.order_number,
diff --git a/app/lib/order_pdf.rb b/app/lib/order_pdf.rb
index 164be66b..655e5fbe 100644
--- a/app/lib/order_pdf.rb
+++ b/app/lib/order_pdf.rb
@@ -55,7 +55,7 @@ class OrderPdf < RenderPdf
end
def group_order_article_quantity_with_tolerance(goa)
- goa.tolerance > 0 ? "#{goa.quantity} + #{goa.tolerance}" : "#{goa.quantity}"
+ goa.tolerance > 0 ? "#{goa.quantity} + #{goa.tolerance}" : goa.quantity.to_s
end
def group_order_article_result(goa)
@@ -88,7 +88,7 @@ class OrderPdf < RenderPdf
.pluck('groups.name', 'SUM(group_orders.price)', 'ordergroup_id', 'SUM(group_orders.transport)')
result.map do |item|
- [item.first || stock_ordergroup_name] + item[1..-1]
+ [item.first || stock_ordergroup_name] + item[1..]
end
end
@@ -103,7 +103,7 @@ class OrderPdf < RenderPdf
def each_ordergroup_batch(batch_size)
offset = 0
- while true
+ loop do
go_records = ordergroups(offset, batch_size)
break unless go_records.any?
@@ -136,7 +136,7 @@ class OrderPdf < RenderPdf
group_order_articles(ordergroup)
.includes(order_article: { article: [:supplier] })
.order('suppliers.name, articles.name')
- .preload(order_article: [:article_price, :order])
+ .preload(order_article: %i[article_price order])
.each(&block)
end
diff --git a/app/lib/order_txt.rb b/app/lib/order_txt.rb
index 7f23e705..320e429f 100644
--- a/app/lib/order_txt.rb
+++ b/app/lib/order_txt.rb
@@ -8,23 +8,19 @@ class OrderTxt
def to_txt
supplier = @order.supplier
contact = FoodsoftConfig[:contact].symbolize_keys
- text = I18n.t('orders.fax.heading', :name => FoodsoftConfig[:name])
- text += "\n#{Supplier.human_attribute_name(:customer_number)}: #{supplier.customer_number}" unless supplier.customer_number.blank?
+ text = I18n.t('orders.fax.heading', name: FoodsoftConfig[:name])
+ text += "\n#{Supplier.human_attribute_name(:customer_number)}: #{supplier.customer_number}" if supplier.customer_number.present?
text += "\n" + I18n.t('orders.fax.delivery_day')
text += "\n\n#{supplier.name}\n#{supplier.address}\n#{Supplier.human_attribute_name(:fax)}: #{supplier.fax}\n\n"
- text += "****** " + I18n.t('orders.fax.to_address') + "\n\n"
+ text += '****** ' + I18n.t('orders.fax.to_address') + "\n\n"
text += "#{FoodsoftConfig[:name]}\n#{contact[:street]}\n#{contact[:zip_code]} #{contact[:city]}\n\n"
- text += "****** " + I18n.t('orders.fax.articles') + "\n\n"
- text += format("%8s %8s %s\n", I18n.t('orders.fax.number'), I18n.t('orders.fax.amount'), I18n.t('orders.fax.name'))
+ text += '****** ' + I18n.t('orders.fax.articles') + "\n\n"
+ text += format("%8s %8s %s\n", I18n.t('orders.fax.number'), I18n.t('orders.fax.amount'),
+ I18n.t('orders.fax.name'))
# now display all ordered articles
- @order.order_articles.ordered.includes([:article, :article_price]).each do |oa|
+ @order.order_articles.ordered.includes(%i[article article_price]).each do |oa|
text += format("%8s %8d %s\n", oa.article.order_number, oa.units_to_order.to_i, oa.article.name)
end
text
end
-
- # Helper method to test pdf via rails console: OrderTxt.new(order).save_tmp
- def save_tmp
- File.write("#{Rails.root}/tmp/#{self.class.to_s.underscore}.txt", to_csv.force_encoding("UTF-8"))
- end
end
diff --git a/app/lib/render_csv.rb b/app/lib/render_csv.rb
index 1f20b075..76d77f11 100644
--- a/app/lib/render_csv.rb
+++ b/app/lib/render_csv.rb
@@ -13,7 +13,7 @@ class RenderCsv
end
def to_csv
- options = @options.select { |k| %w(col_sep row_sep).include? k.to_s }
+ options = @options.select { |k| %w[col_sep row_sep].include? k.to_s }
ret = CSV.generate options do |csv|
if h = header
csv << h
@@ -31,12 +31,6 @@ class RenderCsv
yield []
end
- # Helper method to test pdf via rails console: OrderCsv.new(order).save_tmp
- def save_tmp
- encoding = @options[:encoding] || 'UTF-8'
- File.write("#{Rails.root}/tmp/#{self.class.to_s.underscore}.csv", to_csv.force_encoding(encoding))
- end
-
# XXX disable unit to avoid encoding problems, both in unit and whitespace. Also allows computations in spreadsheet.
def number_to_currency(number, options = {})
super(number, options.merge({ unit: '' }))
diff --git a/app/lib/render_pdf.rb b/app/lib/render_pdf.rb
index 479dc4a3..2311e646 100644
--- a/app/lib/render_pdf.rb
+++ b/app/lib/render_pdf.rb
@@ -28,9 +28,9 @@ class RotatedCell < Prawn::Table::Cell::Text
with_font { (@pdf.width_of(@content, options) + padding_top + padding_bottom) * tan_rotation }
end
- def draw_borders(pt)
+ def draw_borders(point)
@pdf.mask(:line_width, :stroke_color) do
- x, y = pt
+ x, y = point
from = [[x - skew, y + (border_top_width / 2.0)],
to = [x, y - height - (border_bottom_width / 2.0)]]
@@ -118,11 +118,6 @@ class RenderPdf < Prawn::Document
render # Render pdf
end
- # Helper method to test pdf via rails console: OrderByGroups.new(order).save_tmp
- def save_tmp
- File.write("#{Rails.root}/tmp/#{self.class.to_s.underscore}.pdf", to_pdf.force_encoding("UTF-8"))
- end
-
# @todo avoid underscore instead of unicode whitespace in pdf :/
def number_to_currency(number, options = {})
super(number, options).gsub("\u202f", ' ') if number
@@ -148,8 +143,8 @@ class RenderPdf < Prawn::Document
protected
- def fontsize(n)
- n
+ def fontsize(size)
+ size
end
# return whether pagebreak or vertical whitespace is used for breaks
diff --git a/app/lib/token_verifier.rb b/app/lib/token_verifier.rb
index b481d60f..5f389943 100644
--- a/app/lib/token_verifier.rb
+++ b/app/lib/token_verifier.rb
@@ -19,9 +19,9 @@ class TokenVerifier < ActiveSupport::MessageVerifier
raise InvalidPrefix unless r[1] == @_prefix
# return original message
- if r.length > 2
- r[2]
- end
+ return unless r.length > 2
+
+ r[2]
end
class InvalidMessage < ActiveSupport::MessageVerifier::InvalidSignature; end
diff --git a/app/mailers/mailer.rb b/app/mailers/mailer.rb
index 52e1354f..90c8a062 100644
--- a/app/mailers/mailer.rb
+++ b/app/mailers/mailer.rb
@@ -81,7 +81,7 @@ class Mailer < ActionMailer::Base
add_order_result_attachments order, options
- subject = I18n.t('mailer.order_result_supplier.subject', :name => order.supplier.name)
+ subject = I18n.t('mailer.order_result_supplier.subject', name: order.supplier.name)
subject += " (#{I18n.t('activerecord.attributes.order.pickup')}: #{format_date(order.pickup)})" if order.pickup
mail to: order.supplier.email,
@@ -122,10 +122,11 @@ class Mailer < ActionMailer::Base
if args[:from].is_a? User
args[:reply_to] ||= args[:from]
- args[:from] = format_address(FoodsoftConfig[:email_sender], I18n.t('mailer.from_via_foodsoft', name: show_user(args[:from])))
+ args[:from] =
+ format_address(FoodsoftConfig[:email_sender], I18n.t('mailer.from_via_foodsoft', name: show_user(args[:from])))
end
- [:bcc, :cc, :reply_to, :sender, :to].each do |k|
+ %i[bcc cc reply_to sender to].each do |k|
user = args[k]
args[k] = format_address(user.email, show_user(user)) if user.is_a? User
end
@@ -145,21 +146,21 @@ class Mailer < ActionMailer::Base
def self.deliver_now_with_user_locale(user, &block)
I18n.with_locale(user.settings['profile']['language']) do
- self.deliver_now(&block)
+ deliver_now(&block)
end
end
def self.deliver_now_with_default_locale(&block)
I18n.with_locale(FoodsoftConfig[:default_locale]) do
- self.deliver_now(&block)
+ deliver_now(&block)
end
end
def self.deliver_now
message = yield
message.deliver_now
- rescue => error
- MailDeliveryStatus.create email: message.to[0], message: error.message
+ rescue StandardError => e
+ MailDeliveryStatus.create email: message.to[0], message: e.message
end
# separate method to allow plugins to mess with the attachments
@@ -169,8 +170,7 @@ class Mailer < ActionMailer::Base
end
# separate method to allow plugins to mess with the text
- def additonal_welcome_text(user)
- end
+ def additonal_welcome_text(user); end
private
diff --git a/app/models/article.rb b/app/models/article.rb
index 76a68605..53cc2708 100644
--- a/app/models/article.rb
+++ b/app/models/article.rb
@@ -42,7 +42,7 @@ class Article < ApplicationRecord
belongs_to :supplier
# @!attribute article_prices
# @return [Array] Price history (current price first).
- has_many :article_prices, -> { order("created_at DESC") }
+ has_many :article_prices, -> { order('created_at DESC') }
# @!attribute order_articles
# @return [Array] Order articles for this article.
has_many :order_articles
@@ -60,16 +60,16 @@ class Article < ApplicationRecord
scope :not_in_stock, -> { where(type: nil) }
# Validations
- validates_presence_of :name, :unit, :price, :tax, :deposit, :unit_quantity, :supplier_id, :article_category
- validates_length_of :name, :in => 4..60
- validates_length_of :unit, :in => 1..15
- validates_length_of :note, :maximum => 255
- validates_length_of :origin, :maximum => 255
- validates_length_of :manufacturer, :maximum => 255
- validates_length_of :order_number, :maximum => 255
- validates_numericality_of :price, :greater_than_or_equal_to => 0
- validates_numericality_of :unit_quantity, :greater_than => 0
- validates_numericality_of :deposit, :tax
+ validates :name, :unit, :price, :tax, :deposit, :unit_quantity, :supplier_id, :article_category, presence: true
+ validates :name, length: { in: 4..60 }
+ validates :unit, length: { in: 1..15 }
+ validates :note, length: { maximum: 255 }
+ validates :origin, length: { maximum: 255 }
+ validates :manufacturer, length: { maximum: 255 }
+ validates :order_number, length: { maximum: 255 }
+ validates :price, numericality: { greater_than_or_equal_to: 0 }
+ validates :unit_quantity, numericality: { greater_than: 0 }
+ validates :deposit, :tax, numericality: true
# validates_uniqueness_of :name, :scope => [:supplier_id, :deleted_at, :type], if: Proc.new {|a| a.supplier.shared_sync_method.blank? or a.supplier.shared_sync_method == 'import' }
# validates_uniqueness_of :name, :scope => [:supplier_id, :deleted_at, :type, :unit, :unit_quantity]
validate :uniqueness_of_name
@@ -78,12 +78,12 @@ class Article < ApplicationRecord
before_save :update_price_history
before_destroy :check_article_in_use
- def self.ransackable_attributes(auth_object = nil)
- %w(id name supplier_id article_category_id unit note manufacturer origin unit_quantity order_number)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id name supplier_id article_category_id unit note manufacturer origin unit_quantity order_number]
end
- def self.ransackable_associations(auth_object = nil)
- %w(article_category supplier order_articles orders)
+ def self.ransackable_associations(_auth_object = nil)
+ %w[article_category supplier order_articles orders]
end
# Returns true if article has been updated at least 2 days ago
@@ -96,7 +96,7 @@ class Article < ApplicationRecord
@in_open_order ||= begin
order_articles = OrderArticle.where(order_id: Order.open.collect(&:id))
order_article = order_articles.detect { |oa| oa.article_id == id }
- order_article ? order_article.order : nil
+ order_article&.order
end
end
@@ -112,15 +112,15 @@ class Article < ApplicationRecord
def shared_article_changed?(supplier = self.supplier)
# skip early if the timestamp hasn't changed
shared_article = self.shared_article(supplier)
- unless shared_article.nil? || self.shared_updated_on == shared_article.updated_on
- attrs = unequal_attributes(shared_article)
- if attrs.empty?
- # when attributes not changed, update timestamp of article
- self.update_attribute(:shared_updated_on, shared_article.updated_on)
- false
- else
- attrs
- end
+ return if shared_article.nil? || shared_updated_on == shared_article.updated_on
+
+ attrs = unequal_attributes(shared_article)
+ if attrs.empty?
+ # when attributes not changed, update timestamp of article
+ update_attribute(:shared_updated_on, shared_article.updated_on)
+ false
+ else
+ attrs
end
end
@@ -131,30 +131,31 @@ class Article < ApplicationRecord
def unequal_attributes(new_article, options = {})
# try to convert different units when desired
if options[:convert_units] == false
- new_price, new_unit_quantity = nil, nil
+ new_price = nil
+ new_unit_quantity = nil
else
new_price, new_unit_quantity = convert_units(new_article)
end
if new_price && new_unit_quantity
- new_unit = self.unit
+ new_unit = unit
else
new_price = new_article.price
new_unit_quantity = new_article.unit_quantity
new_unit = new_article.unit
end
- return Article.compare_attributes(
+ Article.compare_attributes(
{
- :name => [self.name, new_article.name],
- :manufacturer => [self.manufacturer, new_article.manufacturer.to_s],
- :origin => [self.origin, new_article.origin],
- :unit => [self.unit, new_unit],
- :price => [self.price.to_f.round(2), new_price.to_f.round(2)],
- :tax => [self.tax, new_article.tax],
- :deposit => [self.deposit.to_f.round(2), new_article.deposit.to_f.round(2)],
+ name: [name, new_article.name],
+ manufacturer: [manufacturer, new_article.manufacturer.to_s],
+ origin: [origin, new_article.origin],
+ unit: [unit, new_unit],
+ price: [price.to_f.round(2), new_price.to_f.round(2)],
+ tax: [tax, new_article.tax],
+ deposit: [deposit.to_f.round(2), new_article.deposit.to_f.round(2)],
# take care of different num-objects.
- :unit_quantity => [self.unit_quantity.to_s.to_f, new_unit_quantity.to_s.to_f],
- :note => [self.note.to_s, new_article.note.to_s]
+ unit_quantity: [unit_quantity.to_s.to_f, new_unit_quantity.to_s.to_f],
+ note: [note.to_s, new_article.note.to_s]
}
)
end
@@ -165,14 +166,20 @@ class Article < ApplicationRecord
# @param attributes [Hash] Attributes with old and new values
# @return [Hash] Changed attributes with new values
def self.compare_attributes(attributes)
- unequal_attributes = attributes.select { |name, values| values[0] != values[1] && !(values[0].blank? && values[1].blank?) }
- Hash[unequal_attributes.to_a.map { |a| [a[0], a[1].last] }]
+ unequal_attributes = attributes.select do |_name, values|
+ values[0] != values[1] && !(values[0].blank? && values[1].blank?)
+ end
+ unequal_attributes.to_a.map { |a| [a[0], a[1].last] }.to_h
end
# to get the correspondent shared article
def shared_article(supplier = self.supplier)
- self.order_number.blank? and return nil
- @shared_article ||= supplier.shared_supplier.find_article_by_number(self.order_number) rescue nil
+ order_number.blank? and return nil
+ @shared_article ||= begin
+ supplier.shared_supplier.find_article_by_number(order_number)
+ rescue StandardError
+ nil
+ end
end
# convert units in foodcoop-size
@@ -181,31 +188,37 @@ class Article < ApplicationRecord
# returns false if units aren't foodsoft-compatible
# returns nil if units are eqal
def convert_units(new_article = shared_article)
- if unit != new_article.unit
- # legacy, used by foodcoops in Germany
- if new_article.unit == "KI" && unit == "ST" # 'KI' means a box, with a different amount of items in it
- # try to match the size out of its name, e.g. "banana 10-12 St" => 10
- new_unit_quantity = /[0-9\-\s]+(St)/.match(new_article.name).to_s.to_i
- if new_unit_quantity && new_unit_quantity > 0
- new_price = (new_article.price / new_unit_quantity.to_f).round(2)
- [new_price, new_unit_quantity]
- else
- false
- end
- else # use ruby-units to convert
- fc_unit = (::Unit.new(unit) rescue nil)
- supplier_unit = (::Unit.new(new_article.unit) rescue nil)
- if fc_unit && supplier_unit && fc_unit =~ supplier_unit
- conversion_factor = (supplier_unit / fc_unit).to_base.to_r
- new_price = new_article.price / conversion_factor
- new_unit_quantity = new_article.unit_quantity * conversion_factor
- [new_price, new_unit_quantity]
- else
- false
- end
+ return unless unit != new_article.unit
+
+ # legacy, used by foodcoops in Germany
+ if new_article.unit == 'KI' && unit == 'ST' # 'KI' means a box, with a different amount of items in it
+ # try to match the size out of its name, e.g. "banana 10-12 St" => 10
+ new_unit_quantity = /[0-9\-\s]+(St)/.match(new_article.name).to_s.to_i
+ if new_unit_quantity && new_unit_quantity > 0
+ new_price = (new_article.price / new_unit_quantity.to_f).round(2)
+ [new_price, new_unit_quantity]
+ else
+ false
+ end
+ else # use ruby-units to convert
+ fc_unit = begin
+ ::Unit.new(unit)
+ rescue StandardError
+ nil
+ end
+ supplier_unit = begin
+ ::Unit.new(new_article.unit)
+ rescue StandardError
+ nil
+ end
+ if fc_unit && supplier_unit && fc_unit =~ supplier_unit
+ conversion_factor = (supplier_unit / fc_unit).to_base.to_r
+ new_price = new_article.price / conversion_factor
+ new_unit_quantity = new_article.unit_quantity * conversion_factor
+ [new_price, new_unit_quantity]
+ else
+ false
end
- else
- nil
end
end
@@ -222,19 +235,19 @@ class Article < ApplicationRecord
# Checks if the article is in use before it will deleted
def check_article_in_use
- raise I18n.t('articles.model.error_in_use', :article => self.name.to_s) if self.in_open_order
+ raise I18n.t('articles.model.error_in_use', article: name.to_s) if in_open_order
end
# Create an ArticlePrice, when the price-attr are changed.
def update_price_history
- if price_changed?
- article_prices.build(
- :price => price,
- :tax => tax,
- :deposit => deposit,
- :unit_quantity => unit_quantity
- )
- end
+ return unless price_changed?
+
+ article_prices.build(
+ price: price,
+ tax: tax,
+ deposit: deposit,
+ unit_quantity: unit_quantity
+ )
end
def price_changed?
@@ -250,8 +263,8 @@ class Article < ApplicationRecord
# supplier should always be there - except, perhaps, on initialization (on seeding)
if supplier && (supplier.shared_sync_method.blank? || supplier.shared_sync_method == 'import')
errors.add :name, :taken if matches.any?
- else
- errors.add :name, :taken_with_unit if matches.where(unit: unit, unit_quantity: unit_quantity).any?
+ elsif matches.where(unit: unit, unit_quantity: unit_quantity).any?
+ errors.add :name, :taken_with_unit
end
end
end
diff --git a/app/models/article_category.rb b/app/models/article_category.rb
index 28597a59..1574b5d5 100644
--- a/app/models/article_category.rb
+++ b/app/models/article_category.rb
@@ -17,16 +17,16 @@ class ArticleCategory < ApplicationRecord
normalize_attributes :name, :description
- validates :name, :presence => true, :uniqueness => true, :length => { :minimum => 2 }
+ validates :name, presence: true, uniqueness: true, length: { minimum: 2 }
before_destroy :check_for_associated_articles
- def self.ransackable_attributes(auth_object = nil)
- %w(id name)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id name]
end
- def self.ransackable_associations(auth_object = nil)
- %w(articles order_articles orders)
+ def self.ransackable_associations(_auth_object = nil)
+ %w[articles order_articles orders]
end
# Find a category that matches a category name; may return nil.
@@ -40,7 +40,11 @@ class ArticleCategory < ApplicationRecord
# case-insensitive substring match (take the closest match = shortest)
c = ArticleCategory.where('name LIKE ?', "%#{category}%") unless c && c.any?
# case-insensitive phrase present in category description
- c = ArticleCategory.where('description LIKE ?', "%#{category}%").select { |s| s.description.match /(^|,)\s*#{category}\s*(,|$)/i } unless c && c.any?
+ unless c && c.any?
+ c = ArticleCategory.where('description LIKE ?', "%#{category}%").select do |s|
+ s.description.match(/(^|,)\s*#{category}\s*(,|$)/i)
+ end
+ end
# return closest match if there are multiple
c = c.sort_by { |s| s.name.length }.first if c.respond_to? :sort_by
c
@@ -50,6 +54,9 @@ class ArticleCategory < ApplicationRecord
# Deny deleting the category when there are associated articles.
def check_for_associated_articles
- raise I18n.t('activerecord.errors.has_many_left', collection: Article.model_name.human) if articles.undeleted.exists?
+ return unless articles.undeleted.exists?
+
+ raise I18n.t('activerecord.errors.has_many_left',
+ collection: Article.model_name.human)
end
end
diff --git a/app/models/article_price.rb b/app/models/article_price.rb
index f6879eac..ac3b2b4c 100644
--- a/app/models/article_price.rb
+++ b/app/models/article_price.rb
@@ -24,8 +24,8 @@ class ArticlePrice < ApplicationRecord
localize_input_of :price, :tax, :deposit
- validates_presence_of :price, :tax, :deposit, :unit_quantity
- validates_numericality_of :price, :greater_than_or_equal_to => 0
- validates_numericality_of :unit_quantity, :greater_than => 0
- validates_numericality_of :deposit, :tax
+ validates :price, :tax, :deposit, :unit_quantity, presence: true
+ validates :price, numericality: { greater_than_or_equal_to: 0 }
+ validates :unit_quantity, numericality: { greater_than: 0 }
+ validates :deposit, :tax, numericality: true
end
diff --git a/app/models/bank_account.rb b/app/models/bank_account.rb
index de15ee4b..f433b48a 100644
--- a/app/models/bank_account.rb
+++ b/app/models/bank_account.rb
@@ -5,10 +5,10 @@ class BankAccount < ApplicationRecord
normalize_attributes :name, :iban, :description
- validates :name, :presence => true, :uniqueness => true, :length => { :minimum => 2 }
- validates :iban, :presence => true, :uniqueness => true
- validates_format_of :iban, :with => /\A[A-Z]{2}[0-9]{2}[0-9A-Z]{,30}\z/
- validates_numericality_of :balance, :message => I18n.t('bank_account.model.invalid_balance')
+ validates :name, presence: true, uniqueness: true, length: { minimum: 2 }
+ validates :iban, presence: true, uniqueness: true
+ validates :iban, format: { with: /\A[A-Z]{2}[0-9]{2}[0-9A-Z]{,30}\z/ }
+ validates :balance, numericality: { message: I18n.t('bank_account.model.invalid_balance') }
# @return [Function] Method wich can be called to import transaction from a bank or nil if unsupported
def find_connector
@@ -18,10 +18,8 @@ class BankAccount < ApplicationRecord
def assign_unlinked_transactions
count = 0
- bank_transactions.without_financial_link.includes(:supplier, :user).each do |t|
- if t.assign_to_ordergroup || t.assign_to_invoice
- count += 1
- end
+ bank_transactions.without_financial_link.includes(:supplier, :user).find_each do |t|
+ count += 1 if t.assign_to_ordergroup || t.assign_to_invoice
end
count
end
diff --git a/app/models/bank_gateway.rb b/app/models/bank_gateway.rb
index 3811f128..f8043755 100644
--- a/app/models/bank_gateway.rb
+++ b/app/models/bank_gateway.rb
@@ -4,5 +4,5 @@ class BankGateway < ApplicationRecord
scope :with_unattended_support, -> { where.not(unattended_user: nil) }
- validates_presence_of :name, :url
+ validates :name, :url, presence: true
end
diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb
index 5d9d6c04..0f74d1e0 100644
--- a/app/models/bank_transaction.rb
+++ b/app/models/bank_transaction.rb
@@ -22,8 +22,8 @@ class BankTransaction < ApplicationRecord
belongs_to :supplier, optional: true, foreign_key: 'iban', primary_key: 'iban'
belongs_to :user, optional: true, foreign_key: 'iban', primary_key: 'iban'
- validates_presence_of :date, :amount, :bank_account_id
- validates_numericality_of :amount
+ validates :date, :amount, :bank_account_id, presence: true
+ validates :amount, numericality: true
scope :without_financial_link, -> { where(financial_link: nil) }
@@ -31,13 +31,13 @@ class BankTransaction < ApplicationRecord
localize_input_of :amount
def image_url
- 'data:image/png;base64,' + Base64.encode64(self.image)
+ 'data:image/png;base64,' + Base64.encode64(image)
end
def assign_to_invoice
return false unless supplier
- content = text || ""
+ content = text || ''
content += "\n" + reference if reference.present?
invoices = supplier.invoices.unpaid.select { |i| content.include? i.number }
invoices_sum = invoices.map(&:amount).sum
@@ -49,7 +49,7 @@ class BankTransaction < ApplicationRecord
update_attribute :financial_link, link
end
- return true
+ true
end
def assign_to_ordergroup
@@ -78,6 +78,6 @@ class BankTransaction < ApplicationRecord
update_attribute :financial_link, link
end
- return true
+ true
end
end
diff --git a/app/models/concerns/custom_fields.rb b/app/models/concerns/custom_fields.rb
index d54cebe5..aafec389 100644
--- a/app/models/concerns/custom_fields.rb
+++ b/app/models/concerns/custom_fields.rb
@@ -10,7 +10,7 @@ module CustomFields
end
after_save do
- self.settings.custom_fields = custom_fields if custom_fields
+ settings.custom_fields = custom_fields if custom_fields
end
end
end
diff --git a/app/models/concerns/find_each_with_order.rb b/app/models/concerns/find_each_with_order.rb
index 0e7cd5cd..faf545b2 100644
--- a/app/models/concerns/find_each_with_order.rb
+++ b/app/models/concerns/find_each_with_order.rb
@@ -3,9 +3,9 @@ module FindEachWithOrder
extend ActiveSupport::Concern
class_methods do
- def find_each_with_order(options = {})
+ def find_each_with_order(options = {}, &block)
find_in_batches_with_order(options) do |records|
- records.each { |record| yield record }
+ records.each(&block)
end
end
diff --git a/app/models/concerns/localize_input.rb b/app/models/concerns/localize_input.rb
index cfb44a44..296c4c17 100644
--- a/app/models/concerns/localize_input.rb
+++ b/app/models/concerns/localize_input.rb
@@ -5,12 +5,12 @@ module LocalizeInput
return input unless input.is_a? String
Rails.logger.debug { "Input: #{input.inspect}" }
- separator = I18n.t("separator", scope: "number.format")
- delimiter = I18n.t("delimiter", scope: "number.format")
- input.gsub!(delimiter, "") if input.match(/\d+#{Regexp.escape(delimiter)}+\d+#{Regexp.escape(separator)}+\d+/) # Remove delimiter
- input.gsub!(separator, ".") # Replace separator with db compatible character
+ separator = I18n.t('separator', scope: 'number.format')
+ delimiter = I18n.t('delimiter', scope: 'number.format')
+ input.gsub!(delimiter, '') if input.match(/\d+#{Regexp.escape(delimiter)}+\d+#{Regexp.escape(separator)}+\d+/) # Remove delimiter
+ input.gsub!(separator, '.') # Replace separator with db compatible character
input
- rescue
+ rescue StandardError
Rails.logger.warn "Can't localize input: #{input}"
input
end
diff --git a/app/models/concerns/mark_as_deleted_with_name.rb b/app/models/concerns/mark_as_deleted_with_name.rb
index 4b888438..fb0aa590 100644
--- a/app/models/concerns/mark_as_deleted_with_name.rb
+++ b/app/models/concerns/mark_as_deleted_with_name.rb
@@ -3,7 +3,7 @@ module MarkAsDeletedWithName
def mark_as_deleted
# get maximum length of name
- max_length = 100000
+ max_length = 100_000
if lenval = self.class.validators_on(:name).detect { |v| v.is_a?(ActiveModel::Validations::LengthValidator) }
max_length = lenval.options[:maximum]
end
diff --git a/app/models/concerns/price_calculation.rb b/app/models/concerns/price_calculation.rb
index 03b9a7ad..a78191c0 100644
--- a/app/models/concerns/price_calculation.rb
+++ b/app/models/concerns/price_calculation.rb
@@ -15,6 +15,6 @@ module PriceCalculation
private
def add_percent(value, percent)
- (value * (percent * 0.01 + 1)).round(2)
+ (value * ((percent * 0.01) + 1)).round(2)
end
end
diff --git a/app/models/delivery.rb b/app/models/delivery.rb
index ab5ca5ec..bb2aed45 100644
--- a/app/models/delivery.rb
+++ b/app/models/delivery.rb
@@ -4,10 +4,10 @@ class Delivery < StockEvent
scope :recent, -> { order('created_at DESC').limit(10) }
- validates_presence_of :supplier_id
+ validates :supplier_id, presence: true
validate :stock_articles_must_be_unique
- accepts_nested_attributes_for :stock_changes, :allow_destroy => :true
+ accepts_nested_attributes_for :stock_changes, allow_destroy: :true
def new_stock_changes=(stock_change_attributes)
for attributes in stock_change_attributes
@@ -16,7 +16,7 @@ class Delivery < StockEvent
end
def includes_article?(article)
- self.stock_changes.map { |stock_change| stock_change.stock_article.id }.include? article.id
+ stock_changes.map { |stock_change| stock_change.stock_article.id }.include? article.id
end
def sum(type = :gross)
@@ -39,8 +39,8 @@ class Delivery < StockEvent
protected
def stock_articles_must_be_unique
- unless stock_changes.reject { |sc| sc.marked_for_destruction? }.map { |sc| sc.stock_article.id }.uniq!.nil?
- errors.add(:base, I18n.t('model.delivery.each_stock_article_must_be_unique'))
- end
+ return if stock_changes.reject { |sc| sc.marked_for_destruction? }.map { |sc| sc.stock_article.id }.uniq!.nil?
+
+ errors.add(:base, I18n.t('model.delivery.each_stock_article_must_be_unique'))
end
end
diff --git a/app/models/financial_link.rb b/app/models/financial_link.rb
index 30a1955c..51108cd2 100644
--- a/app/models/financial_link.rb
+++ b/app/models/financial_link.rb
@@ -4,13 +4,13 @@ class FinancialLink < ApplicationRecord
has_many :invoices
scope :incomplete, -> { with_full_sum.where.not('full_sums.full_sum' => 0) }
- scope :unused, -> {
+ scope :unused, lambda {
includes(:bank_transactions, :financial_transactions, :invoices)
.where(bank_transactions: { financial_link_id: nil })
.where(financial_transactions: { financial_link_id: nil })
.where(invoices: { financial_link_id: nil })
}
- scope :with_full_sum, -> {
+ scope :with_full_sum, lambda {
select(:id, :note, :full_sum).joins(<<-SQL)
LEFT JOIN (
SELECT id, COALESCE(bt_sum, 0) - COALESCE(ft_sum, 0) + COALESCE(i_sum, 0) AS full_sum
diff --git a/app/models/financial_transaction.rb b/app/models/financial_transaction.rb
index bd2c4e58..1556ecbe 100644
--- a/app/models/financial_transaction.rb
+++ b/app/models/financial_transaction.rb
@@ -8,14 +8,16 @@ class FinancialTransaction < ApplicationRecord
belongs_to :financial_link, optional: true
belongs_to :financial_transaction_type
belongs_to :group_order, optional: true
- belongs_to :reverts, optional: true, class_name: 'FinancialTransaction', foreign_key: 'reverts_id'
+ belongs_to :reverts, optional: true, class_name: 'FinancialTransaction'
has_one :reverted_by, class_name: 'FinancialTransaction', foreign_key: 'reverts_id'
- validates_presence_of :amount, :note, :user_id
- validates_numericality_of :amount, greater_then: -100_000,
- less_than: 100_000
+ validates :amount, :note, :user_id, presence: true
+ validates :amount, numericality: { greater_then: -100_000,
+ less_than: 100_000 }
- scope :visible, -> { joins('LEFT JOIN financial_transactions r ON financial_transactions.id = r.reverts_id').where('r.id IS NULL').where(reverts: nil) }
+ scope :visible, lambda {
+ joins('LEFT JOIN financial_transactions r ON financial_transactions.id = r.reverts_id').where('r.id IS NULL').where(reverts: nil)
+ }
scope :without_financial_link, -> { where(financial_link: nil) }
scope :with_ordergroup, -> { where.not(ordergroup: nil) }
@@ -28,12 +30,12 @@ class FinancialTransaction < ApplicationRecord
# @todo remove alias (and rename created_on to created_at below) after #575
ransack_alias :created_at, :created_on
- def self.ransackable_attributes(auth_object = nil)
- %w(id amount note created_on user_id)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id amount note created_on user_id]
end
- def self.ransackable_associations(auth_object = nil)
- %w() # none, and certainly not user until we've secured that more
+ def self.ransackable_associations(_auth_object = nil)
+ %w[] # none, and certainly not user until we've secured that more
end
# Use this save method instead of simple save and after callback
diff --git a/app/models/financial_transaction_class.rb b/app/models/financial_transaction_class.rb
index 43ded5fd..0c924993 100644
--- a/app/models/financial_transaction_class.rb
+++ b/app/models/financial_transaction_class.rb
@@ -5,7 +5,7 @@ class FinancialTransactionClass < ApplicationRecord
has_many :ordergroups, -> { distinct }, through: :financial_transactions
validates :name, presence: true
- validates_uniqueness_of :name
+ validates :name, uniqueness: true
after_save :update_balance_of_ordergroups
diff --git a/app/models/financial_transaction_type.rb b/app/models/financial_transaction_type.rb
index 392a1a95..97ed7979 100644
--- a/app/models/financial_transaction_type.rb
+++ b/app/models/financial_transaction_type.rb
@@ -5,13 +5,13 @@ class FinancialTransactionType < ApplicationRecord
has_many :ordergroups, -> { distinct }, through: :financial_transactions
validates :name, presence: true
- validates_uniqueness_of :name
- validates_uniqueness_of :name_short, allow_blank: true, allow_nil: true
- validates_format_of :name_short, :with => /\A[A-Za-z]*\z/
+ validates :name, uniqueness: true
+ validates :name_short, uniqueness: { allow_blank: true }
+ validates :name_short, format: { with: /\A[A-Za-z]*\z/ }
validates :financial_transaction_class, presence: true
- after_save :update_balance_of_ordergroups
before_destroy :restrict_deleting_last_financial_transaction_type
+ after_save :update_balance_of_ordergroups
scope :with_name_short, -> { where.not(name_short: [nil, '']) }
@@ -20,7 +20,7 @@ class FinancialTransactionType < ApplicationRecord
end
def self.has_multiple_types
- self.count > 1
+ count > 1
end
protected
diff --git a/app/models/group.rb b/app/models/group.rb
index a667ea5a..a4a770eb 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -7,8 +7,8 @@ class Group < ApplicationRecord
has_many :memberships, dependent: :destroy
has_many :users, -> { where(deleted_at: nil) }, through: :memberships
- validates :name, :presence => true, :length => { :in => 1..25 }
- validates_uniqueness_of :name
+ validates :name, presence: true, length: { in: 1..25 }
+ validates :name, uniqueness: true
attr_reader :user_tokens
@@ -25,7 +25,7 @@ class Group < ApplicationRecord
end
def user_tokens=(ids)
- self.user_ids = ids.split(",")
+ self.user_ids = ids.split(',')
end
def deleted?
diff --git a/app/models/group_order.rb b/app/models/group_order.rb
index f3153c44..183b663a 100644
--- a/app/models/group_order.rb
+++ b/app/models/group_order.rb
@@ -6,14 +6,14 @@ class GroupOrder < ApplicationRecord
belongs_to :order
belongs_to :ordergroup, optional: true
- has_many :group_order_articles, :dependent => :destroy
- has_many :order_articles, :through => :group_order_articles
+ has_many :group_order_articles, dependent: :destroy
+ has_many :order_articles, through: :group_order_articles
has_one :financial_transaction
belongs_to :updated_by, optional: true, class_name: 'User', foreign_key: 'updated_by_user_id'
- validates_presence_of :order_id
- validates_numericality_of :price
- validates_uniqueness_of :ordergroup_id, :scope => :order_id # order groups can only order once per order
+ validates :order_id, presence: true
+ validates :price, numericality: true
+ validates :ordergroup_id, uniqueness: { scope: :order_id } # order groups can only order once per order
scope :in_open_orders, -> { joins(:order).merge(Order.open) }
scope :in_finished_orders, -> { joins(:order).merge(Order.finished_not_closed) }
@@ -21,12 +21,12 @@ class GroupOrder < ApplicationRecord
scope :ordered, -> { includes(:ordergroup).order('groups.name') }
- def self.ransackable_attributes(auth_object = nil)
- %w(id price)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id price]
end
- def self.ransackable_associations(auth_object = nil)
- %w(order group_order_articles)
+ def self.ransackable_associations(_auth_object = nil)
+ %w[order group_order_articles]
end
# Generate some data for the javascript methods in ordering view
@@ -37,24 +37,24 @@ class GroupOrder < ApplicationRecord
# load prices and other stuff....
data[:order_articles] = {}
- order.articles_grouped_by_category.each do |article_category, order_articles|
+ order.articles_grouped_by_category.each do |_article_category, order_articles|
order_articles.each do |order_article|
# Get the result of last time ordering, if possible
goa = group_order_articles.detect { |goa| goa.order_article_id == order_article.id }
# Build hash with relevant data
data[:order_articles][order_article.id] = {
- :price => order_article.article.fc_price,
- :unit => order_article.article.unit_quantity,
- :quantity => (goa ? goa.quantity : 0),
- :others_quantity => order_article.quantity - (goa ? goa.quantity : 0),
- :used_quantity => (goa ? goa.result(:quantity) : 0),
- :tolerance => (goa ? goa.tolerance : 0),
- :others_tolerance => order_article.tolerance - (goa ? goa.tolerance : 0),
- :used_tolerance => (goa ? goa.result(:tolerance) : 0),
- :total_price => (goa ? goa.total_price : 0),
- :missing_units => order_article.missing_units,
- :quantity_available => (order.stockit? ? order_article.article.quantity_available : 0)
+ price: order_article.article.fc_price,
+ unit: order_article.article.unit_quantity,
+ quantity: (goa ? goa.quantity : 0),
+ others_quantity: order_article.quantity - (goa ? goa.quantity : 0),
+ used_quantity: (goa ? goa.result(:quantity) : 0),
+ tolerance: (goa ? goa.tolerance : 0),
+ others_tolerance: order_article.tolerance - (goa ? goa.tolerance : 0),
+ used_tolerance: (goa ? goa.result(:tolerance) : 0),
+ total_price: (goa ? goa.total_price : 0),
+ missing_units: order_article.missing_units,
+ quantity_available: (order.stockit? ? order_article.article.quantity_available : 0)
}
end
end
@@ -69,12 +69,12 @@ class GroupOrder < ApplicationRecord
# Get ordered quantities and update group_order_articles/_quantities...
if group_order_articles_attributes
- quantities = group_order_articles_attributes.fetch(order_article.id.to_s, { :quantity => 0, :tolerance => 0 })
+ quantities = group_order_articles_attributes.fetch(order_article.id.to_s, { quantity: 0, tolerance: 0 })
group_order_article.update_quantities(quantities[:quantity].to_i, quantities[:tolerance].to_i)
end
# Also update results for the order_article
- logger.debug "[save_group_order_articles] update order_article.results!"
+ logger.debug '[save_group_order_articles] update order_article.results!'
order_article.update_results!
end
@@ -83,7 +83,7 @@ class GroupOrder < ApplicationRecord
# Updates the "price" attribute.
def update_price!
- total = group_order_articles.includes(:order_article => [:article, :article_price]).to_a.sum(&:total_price)
+ total = group_order_articles.includes(order_article: %i[article article_price]).to_a.sum(&:total_price)
update_attribute(:price, total)
end
@@ -97,7 +97,12 @@ class GroupOrder < ApplicationRecord
end
def ordergroup_name
- ordergroup ? ordergroup.name : I18n.t('model.group_order.stock_ordergroup_name', :user => updated_by.try(:name) || '?')
+ if ordergroup
+ ordergroup.name
+ else
+ I18n.t('model.group_order.stock_ordergroup_name',
+ user: updated_by.try(:name) || '?')
+ end
end
def total
diff --git a/app/models/group_order_article.rb b/app/models/group_order_article.rb
index 5a02734d..7b95d462 100644
--- a/app/models/group_order_article.rb
+++ b/app/models/group_order_article.rb
@@ -8,21 +8,21 @@ class GroupOrderArticle < ApplicationRecord
belongs_to :order_article
has_many :group_order_article_quantities, dependent: :destroy
- validates_presence_of :group_order, :order_article
- validates_uniqueness_of :order_article_id, :scope => :group_order_id # just once an article per group order
+ validates :group_order, :order_article, presence: true
+ validates :order_article_id, uniqueness: { scope: :group_order_id } # just once an article per group order
validate :check_order_not_closed # don't allow changes to closed (aka settled) orders
validates :quantity, :tolerance, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
- scope :ordered, -> { includes(:group_order => :ordergroup).order('groups.name') }
+ scope :ordered, -> { includes(group_order: :ordergroup).order('groups.name') }
localize_input_of :result
- def self.ransackable_attributes(auth_object = nil)
- %w(id quantity tolerance result)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id quantity tolerance result]
end
- def self.ransackable_associations(auth_object = nil)
- %w(order_article group_order)
+ def self.ransackable_associations(_auth_object = nil)
+ %w[order_article group_order]
end
# Setter used in group_order_article#new
@@ -32,7 +32,7 @@ class GroupOrderArticle < ApplicationRecord
end
def ordergroup_id
- group_order.try!(:ordergroup_id)
+ group_order&.ordergroup_id
end
# Updates the quantity/tolerance for this GroupOrderArticle by updating both GroupOrderArticle properties
@@ -45,7 +45,7 @@ class GroupOrderArticle < ApplicationRecord
# When quantity and tolerance are zero, we don't serve any purpose
if quantity == 0 && tolerance == 0
- logger.debug("Self-destructing since requested quantity and tolerance are zero")
+ logger.debug('Self-destructing since requested quantity and tolerance are zero')
destroy!
return
end
@@ -54,26 +54,28 @@ class GroupOrderArticle < ApplicationRecord
quantities = group_order_article_quantities.order('created_on DESC').to_a
logger.debug("GroupOrderArticleQuantity items found: #{quantities.size}")
- if (quantities.size == 0)
+ if quantities.size == 0
# There is no GroupOrderArticleQuantity item yet, just insert with desired quantities...
- logger.debug("No quantities entry at all, inserting a new one with the desired quantities")
- quantities.push(GroupOrderArticleQuantity.new(:group_order_article => self, :quantity => quantity, :tolerance => tolerance))
- self.quantity, self.tolerance = quantity, tolerance
+ logger.debug('No quantities entry at all, inserting a new one with the desired quantities')
+ quantities.push(GroupOrderArticleQuantity.new(group_order_article: self, quantity: quantity,
+ tolerance: tolerance))
+ self.quantity = quantity
+ self.tolerance = tolerance
else
# Decrease quantity/tolerance if necessary by going through the existing items and decreasing their values...
i = 0
- while (i < quantities.size && (quantity < self.quantity || tolerance < self.tolerance))
+ while i < quantities.size && (quantity < self.quantity || tolerance < self.tolerance)
logger.debug("Need to decrease quantities for GroupOrderArticleQuantity[#{quantities[i].id}]")
- if (quantity < self.quantity && quantities[i].quantity > 0)
+ if quantity < self.quantity && quantities[i].quantity > 0
delta = self.quantity - quantity
- delta = (delta > quantities[i].quantity ? quantities[i].quantity : delta)
+ delta = [delta, quantities[i].quantity].min
logger.debug("Decreasing quantity by #{delta}")
quantities[i].quantity -= delta
self.quantity -= delta
end
- if (tolerance < self.tolerance && quantities[i].tolerance > 0)
+ if tolerance < self.tolerance && quantities[i].tolerance > 0
delta = self.tolerance - tolerance
- delta = (delta > quantities[i].tolerance ? quantities[i].tolerance : delta)
+ delta = [delta, quantities[i].tolerance].min
logger.debug("Decreasing tolerance by #{delta}")
quantities[i].tolerance -= delta
self.tolerance -= delta
@@ -81,12 +83,12 @@ class GroupOrderArticle < ApplicationRecord
i += 1
end
# If there is at least one increased value: insert a new GroupOrderArticleQuantity object
- if (quantity > self.quantity || tolerance > self.tolerance)
- logger.debug("Inserting a new GroupOrderArticleQuantity")
+ if quantity > self.quantity || tolerance > self.tolerance
+ logger.debug('Inserting a new GroupOrderArticleQuantity')
quantities.insert(0, GroupOrderArticleQuantity.new(
- :group_order_article => self,
- :quantity => (quantity > self.quantity ? quantity - self.quantity : 0),
- :tolerance => (tolerance > self.tolerance ? tolerance - self.tolerance : 0)
+ group_order_article: self,
+ quantity: (quantity > self.quantity ? quantity - self.quantity : 0),
+ tolerance: (tolerance > self.tolerance ? tolerance - self.tolerance : 0)
))
# Recalc totals:
self.quantity += quantities[0].quantity
@@ -95,8 +97,9 @@ class GroupOrderArticle < ApplicationRecord
end
# Check if something went terribly wrong and quantites have not been adjusted as desired.
- if (self.quantity != quantity || self.tolerance != tolerance)
- raise ActiveRecord::RecordNotSaved.new('Unable to update GroupOrderArticle/-Quantities to desired quantities!', self)
+ if self.quantity != quantity || self.tolerance != tolerance
+ raise ActiveRecord::RecordNotSaved.new('Unable to update GroupOrderArticle/-Quantities to desired quantities!',
+ self)
end
# Remove zero-only items.
@@ -121,7 +124,7 @@ class GroupOrderArticle < ApplicationRecord
quantity = tolerance = total_quantity = 0
# Get total
- if not total.nil?
+ if !total.nil?
logger.debug "<#{order_article.article.name}> => #{total} (given)"
elsif order_article.article.is_a?(StockArticle)
total = order_article.article.quantity
@@ -145,7 +148,7 @@ class GroupOrderArticle < ApplicationRecord
q = goaq.quantity
q = [q, total - total_quantity].min if first_order_first_serve
total_quantity += q
- if goaq.group_order_article_id == self.id
+ if goaq.group_order_article_id == id
logger.debug "increasing quantity by #{q}"
quantity += q
end
@@ -154,11 +157,11 @@ class GroupOrderArticle < ApplicationRecord
# Determine tolerance to be ordered...
if total_quantity < total
- logger.debug "determining additional items to be ordered from tolerance"
+ logger.debug 'determining additional items to be ordered from tolerance'
order_quantities.each do |goaq|
q = [goaq.tolerance, total - total_quantity].min
total_quantity += q
- if goaq.group_order_article_id == self.id
+ if goaq.group_order_article_id == id
logger.debug "increasing tolerance by #{q}"
tolerance += q
end
@@ -170,7 +173,7 @@ class GroupOrderArticle < ApplicationRecord
end
# memoize result unless a total is given
- r = { :quantity => quantity, :tolerance => tolerance, :total => quantity + tolerance }
+ r = { quantity: quantity, tolerance: tolerance, total: quantity + tolerance }
@calculate_result = r if total.nil?
r
end
@@ -185,8 +188,8 @@ class GroupOrderArticle < ApplicationRecord
# This is used for automatic distribution, e.g., in order.finish! or when receiving orders
def save_results!(article_total = nil)
new_result = calculate_result(article_total)[:total]
- self.update_attribute(:result_computed, new_result)
- self.update_attribute(:result, new_result)
+ update_attribute(:result_computed, new_result)
+ update_attribute(:result, new_result)
end
# Returns total price for this individual article
@@ -213,8 +216,8 @@ class GroupOrderArticle < ApplicationRecord
private
def check_order_not_closed
- if order_article.order.closed?
- errors.add(:order_article, I18n.t('model.group_order_article.order_closed'))
- end
+ return unless order_article.order.closed?
+
+ errors.add(:order_article, I18n.t('model.group_order_article.order_closed'))
end
end
diff --git a/app/models/group_order_article_quantity.rb b/app/models/group_order_article_quantity.rb
index 1e29985f..12832b2c 100644
--- a/app/models/group_order_article_quantity.rb
+++ b/app/models/group_order_article_quantity.rb
@@ -4,5 +4,5 @@
class GroupOrderArticleQuantity < ApplicationRecord
belongs_to :group_order_article
- validates_presence_of :group_order_article_id
+ validates :group_order_article_id, presence: true
end
diff --git a/app/models/invite.rb b/app/models/invite.rb
index e37a8a18..d471aa50 100644
--- a/app/models/invite.rb
+++ b/app/models/invite.rb
@@ -5,12 +5,12 @@ class Invite < ApplicationRecord
belongs_to :user
belongs_to :group
- validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
- validates_presence_of :user
- validates_presence_of :group
- validates_presence_of :token
- validates_presence_of :expires_at
- validate :email_not_already_registered, :on => :create
+ validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i }
+ validates :user, presence: true
+ validates :group, presence: true
+ validates :token, presence: true
+ validates :expires_at, presence: true
+ validate :email_not_already_registered, on: :create
before_validation :set_token_and_expires_at
@@ -19,15 +19,15 @@ class Invite < ApplicationRecord
# Before validation, set token and expires_at.
def set_token_and_expires_at
self.token = Digest::SHA1.hexdigest(Time.now.to_s + rand(100).to_s)
- self.expires_at = Time.now.advance(:days => 7)
+ self.expires_at = Time.now.advance(days: 7)
end
private
# Custom validation: check that email does not already belong to a registered user.
def email_not_already_registered
- unless User.find_by_email(self.email).nil?
- errors.add(:email, I18n.t('invites.errors.already_member'))
- end
+ return if User.find_by_email(email).nil?
+
+ errors.add(:email, I18n.t('invites.errors.already_member'))
end
end
diff --git a/app/models/invoice.rb b/app/models/invoice.rb
index f2a8866f..2bf3aaee 100644
--- a/app/models/invoice.rb
+++ b/app/models/invoice.rb
@@ -3,13 +3,13 @@ class Invoice < ApplicationRecord
include LocalizeInput
belongs_to :supplier
- belongs_to :created_by, :class_name => 'User', :foreign_key => 'created_by_user_id'
+ belongs_to :created_by, class_name: 'User', foreign_key: 'created_by_user_id'
belongs_to :financial_link, optional: true
has_many :deliveries, dependent: :nullify
has_many :orders, dependent: :nullify
- validates_presence_of :supplier_id
- validates_numericality_of :amount, :deposit, :deposit_credit
+ validates :supplier_id, presence: true
+ validates :amount, :deposit, :deposit_credit, numericality: true
validate :valid_attachment
scope :unpaid, -> { where(paid_on: nil) }
@@ -23,18 +23,18 @@ class Invoice < ApplicationRecord
def attachment=(incoming_file)
self.attachment_data = incoming_file.read
# allow to soft-fail when FileMagic isn't present and removed from Gemfile (e.g. Heroku)
- self.attachment_mime = defined?(FileMagic) ? FileMagic.new(FileMagic::MAGIC_MIME).buffer(self.attachment_data) : 'application/octet-stream'
+ self.attachment_mime = defined?(FileMagic) ? FileMagic.new(FileMagic::MAGIC_MIME).buffer(attachment_data) : 'application/octet-stream'
end
def delete_attachment=(value)
- if value == '1'
- self.attachment_data = nil
- self.attachment_mime = nil
- end
+ return unless value == '1'
+
+ self.attachment_data = nil
+ self.attachment_mime = nil
end
def user_can_edit?(user)
- user.role_finance? || (user.role_invoices? && !self.paid_on && self.created_by.try(:id) == user.id)
+ user.role_finance? || (user.role_invoices? && !paid_on && created_by.try(:id) == user.id)
end
# Amount without deposit
@@ -45,9 +45,9 @@ class Invoice < ApplicationRecord
def orders_sum
orders
.joins(order_articles: [:article_price])
- .sum("COALESCE(order_articles.units_received, order_articles.units_billed, order_articles.units_to_order)" \
- + "* article_prices.unit_quantity" \
- + "* ROUND((article_prices.price + article_prices.deposit) * (100 + article_prices.tax) / 100, 2)")
+ .sum('COALESCE(order_articles.units_received, order_articles.units_billed, order_articles.units_to_order)' \
+ + '* article_prices.unit_quantity' \
+ + '* ROUND((article_prices.price + article_prices.deposit) * (100 + article_prices.tax) / 100, 2)')
end
def orders_transport_sum
@@ -63,11 +63,11 @@ class Invoice < ApplicationRecord
protected
def valid_attachment
- if attachment_data
- mime = MIME::Type.simplified(attachment_mime)
- unless ['application/pdf', 'image/jpeg'].include? mime
- errors.add :attachment, I18n.t('model.invoice.invalid_mime', :mime => mime)
- end
- end
+ return unless attachment_data
+
+ mime = MIME::Type.simplified(attachment_mime)
+ return if ['application/pdf', 'image/jpeg'].include? mime
+
+ errors.add :attachment, I18n.t('model.invoice.invalid_mime', mime: mime)
end
end
diff --git a/app/models/membership.rb b/app/models/membership.rb
index bebf00e2..4ebc061c 100644
--- a/app/models/membership.rb
+++ b/app/models/membership.rb
@@ -8,6 +8,6 @@ class Membership < ApplicationRecord
# check if this is the last admin-membership and deny
def check_last_admin
- raise I18n.t('model.membership.no_admin_delete') if self.group.role_admin? && self.group.memberships.size == 1 && Group.where(role_admin: true).count == 1
+ raise I18n.t('model.membership.no_admin_delete') if group.role_admin? && group.memberships.size == 1 && Group.where(role_admin: true).count == 1
end
end
diff --git a/app/models/order.rb b/app/models/order.rb
index e83307f3..ada62e59 100644
--- a/app/models/order.rb
+++ b/app/models/order.rb
@@ -2,29 +2,29 @@ class Order < ApplicationRecord
attr_accessor :ignore_warnings, :transport_distribution
# Associations
- has_many :order_articles, :dependent => :destroy
- has_many :articles, :through => :order_articles
- has_many :group_orders, :dependent => :destroy
- has_many :ordergroups, :through => :group_orders
- has_many :users_ordered, :through => :ordergroups, :source => :users
- has_many :comments, -> { order('created_at') }, :class_name => "OrderComment"
+ has_many :order_articles, dependent: :destroy
+ has_many :articles, through: :order_articles
+ has_many :group_orders, dependent: :destroy
+ has_many :ordergroups, through: :group_orders
+ has_many :users_ordered, through: :ordergroups, source: :users
+ has_many :comments, -> { order('created_at') }, class_name: 'OrderComment'
has_many :stock_changes
belongs_to :invoice, optional: true
belongs_to :supplier, optional: true
- belongs_to :updated_by, :class_name => 'User', :foreign_key => 'updated_by_user_id'
- belongs_to :created_by, :class_name => 'User', :foreign_key => 'created_by_user_id'
+ belongs_to :updated_by, class_name: 'User', foreign_key: 'updated_by_user_id'
+ belongs_to :created_by, class_name: 'User', foreign_key: 'created_by_user_id'
enum end_action: { no_end_action: 0, auto_close: 1, auto_close_and_send: 2, auto_close_and_send_min_quantity: 3 }
- enum transport_distribution: [:skip, :ordergroup, :price, :articles]
+ enum transport_distribution: { skip: 0, ordergroup: 1, price: 2, articles: 3 }
# Validations
- validates_presence_of :starts
+ validates :starts, presence: true
validate :starts_before_ends, :include_articles
validate :keep_ordered_articles
+ before_validation :distribute_transport
# Callbacks
after_save :save_order_articles, :update_price_of_group_orders!
- before_validation :distribute_transport
# Finders
scope :started, -> { where('starts <= ?', Time.now) }
@@ -49,12 +49,12 @@ class Order < ApplicationRecord
include DateTimeAttributeValidate
date_time_attribute :starts, :boxfill, :ends
- def self.ransackable_attributes(auth_object = nil)
- %w(id state supplier_id starts boxfill ends pickup)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id state supplier_id starts boxfill ends pickup]
end
- def self.ransackable_associations(auth_object = nil)
- %w(supplier articles order_articles)
+ def self.ransackable_associations(_auth_object = nil)
+ %w[supplier articles order_articles]
end
def stockit?
@@ -70,9 +70,9 @@ class Order < ApplicationRecord
# make sure to include those articles which are no longer available
# but which have already been ordered in this stock order
StockArticle.available.includes(:article_category)
- .order('article_categories.name', 'articles.name').reject { |a|
+ .order('article_categories.name', 'articles.name').reject do |a|
a.quantity_available <= 0 && !a.ordered_in_order?(self)
- }.group_by { |a| a.article_category.name }
+ end.group_by { |a| a.article_category.name }
else
supplier.articles.available.group_by { |a| a.article_category.name }
end
@@ -87,9 +87,7 @@ class Order < ApplicationRecord
end
# Save ids, and create/delete order_articles after successfully saved the order
- def article_ids=(ids)
- @article_ids = ids
- end
+ attr_writer :article_ids
def article_ids
@article_ids ||= order_articles.map { |a| a.article_id.to_s }
@@ -101,19 +99,19 @@ class Order < ApplicationRecord
end
def open?
- state == "open"
+ state == 'open'
end
def finished?
- state == "finished" || state == "received"
+ state == 'finished' || state == 'received'
end
def received?
- state == "received"
+ state == 'received'
end
def closed?
- state == "closed"
+ state == 'closed'
end
def boxfill?
@@ -134,11 +132,18 @@ class Order < ApplicationRecord
self.starts ||= Time.now
if FoodsoftConfig[:order_schedule]
# try to be smart when picking a reference day
- last = (DateTime.parse(FoodsoftConfig[:order_schedule][:initial]) rescue nil)
+ last = begin
+ DateTime.parse(FoodsoftConfig[:order_schedule][:initial])
+ rescue StandardError
+ nil
+ end
last ||= Order.finished.reorder(:starts).first.try(:starts)
last ||= self.starts
# adjust boxfill and end date
- self.boxfill ||= FoodsoftDateUtil.next_occurrence last, self.starts, FoodsoftConfig[:order_schedule][:boxfill] if is_boxfill_useful?
+ if is_boxfill_useful?
+ self.boxfill ||= FoodsoftDateUtil.next_occurrence last, self.starts,
+ FoodsoftConfig[:order_schedule][:boxfill]
+ end
self.ends ||= FoodsoftDateUtil.next_occurrence last, self.starts, FoodsoftConfig[:order_schedule][:ends]
end
self
@@ -149,7 +154,7 @@ class Order < ApplicationRecord
def self.ordergroup_group_orders_map(ordergroup)
orders = includes(:supplier)
group_orders = GroupOrder.where(ordergroup_id: ordergroup.id, order_id: orders.map(&:id))
- group_orders_hash = Hash[group_orders.collect { |go| [go.order_id, go] }]
+ group_orders_hash = group_orders.index_by { |go| go.order_id }
orders.map do |order|
{
order: order,
@@ -160,11 +165,11 @@ class Order < ApplicationRecord
# search GroupOrder of given Ordergroup
def group_order(ordergroup)
- group_orders.where(:ordergroup_id => ordergroup.id).first
+ group_orders.where(ordergroup_id: ordergroup.id).first
end
def stock_group_order
- group_orders.where(:ordergroup_id => nil).first
+ group_orders.where(ordergroup_id: nil).first
end
# Returns OrderArticles in a nested Array, grouped by category and ordered by article name.
@@ -172,7 +177,7 @@ class Order < ApplicationRecord
# e.g: [["drugs",[teethpaste, toiletpaper]], ["fruits" => [apple, banana, lemon]]]
def articles_grouped_by_category
@articles_grouped_by_category ||= order_articles
- .includes([:article_price, :group_order_articles, :article => :article_category])
+ .includes([:article_price, :group_order_articles, { article: :article_category }])
.order('articles.name')
.group_by { |a| a.article.article_category.name }
.sort { |a, b| a[0] <=> b[0] }
@@ -189,10 +194,10 @@ class Order < ApplicationRecord
# FIXME: Consider order.foodcoop_result
def profit(options = {})
markup = options[:without_markup] || false
- if invoice
- groups_sum = markup ? sum(:groups_without_markup) : sum(:groups)
- groups_sum - invoice.net_amount
- end
+ return unless invoice
+
+ groups_sum = markup ? sum(:groups_without_markup) : sum(:groups)
+ groups_sum - invoice.net_amount
end
# Returns the all round price of a finished order
@@ -202,7 +207,7 @@ class Order < ApplicationRecord
# :fc, guess what...
def sum(type = :gross)
total = 0
- if type == :net || type == :gross || type == :fc
+ if %i[net gross fc].include?(type)
for oa in order_articles.ordered.includes(:article, :article_price)
quantity = oa.units * oa.price.unit_quantity
case type
@@ -214,8 +219,8 @@ class Order < ApplicationRecord
total += quantity * oa.price.fc_price
end
end
- elsif type == :groups || type == :groups_without_markup
- for go in group_orders.includes(group_order_articles: { order_article: [:article, :article_price] })
+ elsif %i[groups groups_without_markup].include?(type)
+ for go in group_orders.includes(group_order_articles: { order_article: %i[article article_price] })
for goa in go.group_order_articles
case type
when :groups
@@ -232,36 +237,36 @@ class Order < ApplicationRecord
# Finishes this order. This will set the order state to "finish" and the end property to the current time.
# Ignored if the order is already finished.
def finish!(user)
- unless finished?
- Order.transaction do
- # set new order state (needed by notify_order_finished)
- update!(state: 'finished', ends: Time.now, updated_by: user)
+ return if finished?
- # Update order_articles. Save the current article_price to keep price consistency
- # Also save results for each group_order_result
- # Clean up
- order_articles.includes(:article).each do |oa|
- oa.update_attribute(:article_price, oa.article.article_prices.first)
- oa.group_order_articles.each do |goa|
- goa.save_results!
- # Delete no longer required order-history (group_order_article_quantities) and
- # TODO: Do we need articles, which aren't ordered? (units_to_order == 0 ?)
- # A: Yes, we do - for redistributing articles when the number of articles
- # delivered changes, and for statistics on popular articles. Records
- # with both tolerance and quantity zero can be deleted.
- # goa.group_order_article_quantities.clear
- end
+ Order.transaction do
+ # set new order state (needed by notify_order_finished)
+ update!(state: 'finished', ends: Time.now, updated_by: user)
+
+ # Update order_articles. Save the current article_price to keep price consistency
+ # Also save results for each group_order_result
+ # Clean up
+ order_articles.includes(:article).find_each do |oa|
+ oa.update_attribute(:article_price, oa.article.article_prices.first)
+ oa.group_order_articles.each do |goa|
+ goa.save_results!
+ # Delete no longer required order-history (group_order_article_quantities) and
+ # TODO: Do we need articles, which aren't ordered? (units_to_order == 0 ?)
+ # A: Yes, we do - for redistributing articles when the number of articles
+ # delivered changes, and for statistics on popular articles. Records
+ # with both tolerance and quantity zero can be deleted.
+ # goa.group_order_article_quantities.clear
end
-
- # Update GroupOrder prices
- group_orders.each(&:update_price!)
-
- # Stats
- ordergroups.each(&:update_stats!)
-
- # Notifications
- NotifyFinishedOrderJob.perform_later(self)
end
+
+ # Update GroupOrder prices
+ group_orders.each(&:update_price!)
+
+ # Stats
+ ordergroups.each(&:update_stats!)
+
+ # Notifications
+ NotifyFinishedOrderJob.perform_later(self)
end
end
@@ -277,11 +282,11 @@ class Order < ApplicationRecord
if stockit? # Decreases the quantity of stock_articles
for oa in order_articles.includes(:article)
oa.update_results! # Update units_to_order of order_article
- stock_changes.create! :stock_article => oa.article, :quantity => oa.units_to_order * -1
+ stock_changes.create! stock_article: oa.article, quantity: oa.units_to_order * -1
end
end
- self.update!(state: 'closed', updated_by: user, foodcoop_result: profit)
+ update!(state: 'closed', updated_by: user, foodcoop_result: profit)
end
end
@@ -289,7 +294,10 @@ class Order < ApplicationRecord
def close_direct!(user)
raise I18n.t('orders.model.error_closed') if closed?
- comments.create(user: user, text: I18n.t('orders.model.close_direct_message')) unless FoodsoftConfig[:charge_members_manually]
+ unless FoodsoftConfig[:charge_members_manually]
+ comments.create(user: user,
+ text: I18n.t('orders.model.close_direct_message'))
+ end
update!(state: 'closed', updated_by: user)
end
@@ -313,13 +321,12 @@ class Order < ApplicationRecord
end
def self.finish_ended!
- orders = Order.where.not(end_action: Order.end_actions[:no_end_action]).where(state: 'open').where('ends <= ?', DateTime.now)
+ orders = Order.where.not(end_action: Order.end_actions[:no_end_action]).where(state: 'open').where('ends <= ?',
+ DateTime.now)
orders.each do |order|
- begin
- order.do_end_action!
- rescue => error
- ExceptionNotifier.notify_exception(error, data: { foodcoop: FoodsoftConfig.scope, order_id: order.id })
- end
+ order.do_end_action!
+ rescue StandardError => e
+ ExceptionNotifier.notify_exception(e, data: { foodcoop: FoodsoftConfig.scope, order_id: order.id })
end
end
@@ -329,7 +336,10 @@ class Order < ApplicationRecord
delta = Rails.env.test? ? 1 : 0 # since Rails 4.2 tests appear to have time differences, with this validation failing
errors.add(:ends, I18n.t('orders.model.error_starts_before_ends')) if ends && starts && ends <= (starts - delta)
errors.add(:ends, I18n.t('orders.model.error_boxfill_before_ends')) if ends && boxfill && ends <= (boxfill - delta)
- errors.add(:boxfill, I18n.t('orders.model.error_starts_before_boxfill')) if boxfill && starts && boxfill <= (starts - delta)
+ return unless boxfill && starts && boxfill <= (starts - delta)
+
+ errors.add(:boxfill,
+ I18n.t('orders.model.error_starts_before_boxfill'))
end
def include_articles
@@ -340,17 +350,17 @@ class Order < ApplicationRecord
chosen_order_articles = order_articles.where(article_id: article_ids)
to_be_removed = order_articles - chosen_order_articles
to_be_removed_but_ordered = to_be_removed.select { |a| a.quantity > 0 || a.tolerance > 0 }
- unless to_be_removed_but_ordered.empty? || ignore_warnings
- errors.add(:articles, I18n.t(stockit? ? 'orders.model.warning_ordered_stock' : 'orders.model.warning_ordered'))
- @erroneous_article_ids = to_be_removed_but_ordered.map { |a| a.article_id }
- end
+ return if to_be_removed_but_ordered.empty? || ignore_warnings
+
+ errors.add(:articles, I18n.t(stockit? ? 'orders.model.warning_ordered_stock' : 'orders.model.warning_ordered'))
+ @erroneous_article_ids = to_be_removed_but_ordered.map { |a| a.article_id }
end
def save_order_articles
# fetch selected articles
articles_list = Article.find(article_ids)
# create new order_articles
- (articles_list - articles).each { |article| order_articles.create(:article => article) }
+ (articles_list - articles).each { |article| order_articles.create(article: article) }
# delete old order_articles
articles.reject { |article| articles_list.include?(article) }.each do |article|
order_articles.detect { |order_article| order_article.article_id == article.id }.destroy
@@ -363,17 +373,17 @@ class Order < ApplicationRecord
return unless group_orders.any?
case transport_distribution.try(&:to_i)
- when Order.transport_distributions[:ordergroup] then
+ when Order.transport_distributions[:ordergroup]
amount = transport / group_orders.size
group_orders.each do |go|
go.transport = amount.ceil(2)
end
- when Order.transport_distributions[:price] then
+ when Order.transport_distributions[:price]
amount = transport / group_orders.sum(:price)
group_orders.each do |go|
go.transport = (amount * go.price).ceil(2)
end
- when Order.transport_distributions[:articles] then
+ when Order.transport_distributions[:articles]
amount = transport / group_orders.includes(:group_order_articles).sum(:result)
group_orders.each do |go|
go.transport = (amount * go.group_order_articles.sum(:result)).ceil(2)
@@ -389,7 +399,7 @@ class Order < ApplicationRecord
def charge_group_orders!(user, transaction_type = nil)
note = transaction_note
- group_orders.includes(:ordergroup).each do |group_order|
+ group_orders.includes(:ordergroup).find_each do |group_order|
if group_order.ordergroup
price = group_order.total * -1 # decrease! account balance
group_order.ordergroup.add_financial_transaction!(price, note, user, transaction_type, nil, group_order)
diff --git a/app/models/order_article.rb b/app/models/order_article.rb
index cda24ae2..14193d15 100644
--- a/app/models/order_article.rb
+++ b/app/models/order_article.rb
@@ -7,25 +7,27 @@ class OrderArticle < ApplicationRecord
belongs_to :order
belongs_to :article
belongs_to :article_price, optional: true
- has_many :group_order_articles, :dependent => :destroy
+ has_many :group_order_articles, dependent: :destroy
- validates_presence_of :order_id, :article_id
+ validates :order_id, :article_id, presence: true
validate :article_and_price_exist
- validates_uniqueness_of :article_id, scope: :order_id
+ validates :article_id, uniqueness: { scope: :order_id }
- _ordered_sql = "order_articles.units_to_order > 0 OR order_articles.units_billed > 0 OR order_articles.units_received > 0"
+ _ordered_sql = 'order_articles.units_to_order > 0 OR order_articles.units_billed > 0 OR order_articles.units_received > 0'
scope :ordered, -> { where(_ordered_sql) }
- scope :ordered_or_member, -> { includes(:group_order_articles).where("#{_ordered_sql} OR order_articles.quantity > 0 OR group_order_articles.result > 0") }
+ scope :ordered_or_member, lambda {
+ includes(:group_order_articles).where("#{_ordered_sql} OR order_articles.quantity > 0 OR group_order_articles.result > 0")
+ }
before_create :init_from_balancing
after_destroy :update_ordergroup_prices
- def self.ransackable_attributes(auth_object = nil)
- %w(id order_id article_id quantity tolerance units_to_order)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id order_id article_id quantity tolerance units_to_order]
end
- def self.ransackable_associations(auth_object = nil)
- %w(order article)
+ def self.ransackable_associations(_auth_object = nil)
+ %w[order article]
end
# This method returns either the ArticlePrice or the Article
@@ -46,7 +48,7 @@ class OrderArticle < ApplicationRecord
# In balancing this can differ from ordered (by supplier) quantity for this article.
def group_orders_sum
quantity = group_order_articles.collect(&:result).sum
- { :quantity => quantity, :price => quantity * price.fc_price }
+ { quantity: quantity, price: quantity * price.fc_price }
end
# Update quantity/tolerance/units_to_order from group_order_articles
@@ -97,15 +99,13 @@ class OrderArticle < ApplicationRecord
units * price.unit_quantity * price.gross_price
end
- def ordered_quantities_different_from_group_orders?(ordered_mark = "!", billed_mark = "?", received_mark = "?")
- if not units_received.nil?
- ((units_received * price.unit_quantity) == group_orders_sum[:quantity]) ? false : received_mark
- elsif not units_billed.nil?
- ((units_billed * price.unit_quantity) == group_orders_sum[:quantity]) ? false : billed_mark
- elsif not units_to_order.nil?
- ((units_to_order * price.unit_quantity) == group_orders_sum[:quantity]) ? false : ordered_mark
- else
- nil # can happen in integration tests
+ def ordered_quantities_different_from_group_orders?(ordered_mark = '!', billed_mark = '?', received_mark = '?')
+ if !units_received.nil?
+ (units_received * price.unit_quantity) == group_orders_sum[:quantity] ? false : received_mark
+ elsif !units_billed.nil?
+ (units_billed * price.unit_quantity) == group_orders_sum[:quantity] ? false : billed_mark
+ elsif !units_to_order.nil?
+ (units_to_order * price.unit_quantity) == group_orders_sum[:quantity] ? false : ordered_mark
end
end
@@ -124,7 +124,7 @@ class OrderArticle < ApplicationRecord
if surplus.index(:tolerance).nil?
qty_for_members = [qty_left, self.quantity].min
else
- qty_for_members = [qty_left, self.quantity + self.tolerance].min
+ qty_for_members = [qty_left, self.quantity + tolerance].min
counts[surplus.index(:tolerance)] = [0, qty_for_members - self.quantity].max
end
@@ -139,9 +139,7 @@ class OrderArticle < ApplicationRecord
# 2) if not found, create new stock article
# avoiding duplicate stock article names
end
- if qty_left > 0 && surplus.index(nil)
- counts[surplus.index(nil)] = qty_left
- end
+ counts[surplus.index(nil)] = qty_left if qty_left > 0 && surplus.index(nil)
# Update GroupOrder prices & Ordergroup stats
# TODO only affected group_orders, and once after redistributing all articles
@@ -150,7 +148,7 @@ class OrderArticle < ApplicationRecord
order.ordergroups.each(&:update_stats!)
end
- # TODO notifications
+ # TODO: notifications
counts
end
@@ -159,7 +157,7 @@ class OrderArticle < ApplicationRecord
def update_article_and_price!(order_article_attributes, article_attributes, price_attributes = nil)
OrderArticle.transaction do
# Updates self
- self.update!(order_article_attributes)
+ update!(order_article_attributes)
# Updates article
article.update!(article_attributes)
@@ -186,7 +184,7 @@ class OrderArticle < ApplicationRecord
end
def update_global_price=(value)
- @update_global_price = (value == true || value == '1') ? true : false
+ @update_global_price = [true, '1'].include?(value) ? true : false
end
# @return [Number] Units missing for the last +unit_quantity+ of the article.
@@ -210,16 +208,19 @@ class OrderArticle < ApplicationRecord
private
def article_and_price_exist
- errors.add(:article, I18n.t('model.order_article.error_price')) if !(article = Article.find(article_id)) || article.fc_price.nil?
- rescue
+ if !(article = Article.find(article_id)) || article.fc_price.nil?
+ errors.add(:article,
+ I18n.t('model.order_article.error_price'))
+ end
+ rescue StandardError
errors.add(:article, I18n.t('model.order_article.error_price'))
end
# Associate with current article price if created in a finished order
def init_from_balancing
- if order.present? && order.finished?
- self.article_price = article.article_prices.first
- end
+ return unless order.present? && order.finished?
+
+ self.article_price = article.article_prices.first
end
def update_ordergroup_prices
@@ -241,7 +242,8 @@ class OrderArticle < ApplicationRecord
unless (delta_q == 0 && delta_t >= 0) ||
(delta_mis < 0 && delta_box >= 0 && delta_t >= 0) ||
(delta_q > 0 && delta_q == -delta_t)
- raise ActiveRecord::RecordNotSaved.new("Change not acceptable in boxfill phase for '#{article.name}', sorry.", self)
+ raise ActiveRecord::RecordNotSaved.new("Change not acceptable in boxfill phase for '#{article.name}', sorry.",
+ self)
end
end
diff --git a/app/models/order_comment.rb b/app/models/order_comment.rb
index 5f35d98c..b11388b0 100644
--- a/app/models/order_comment.rb
+++ b/app/models/order_comment.rb
@@ -2,6 +2,6 @@ class OrderComment < ApplicationRecord
belongs_to :order
belongs_to :user
- validates_presence_of :order_id, :user_id, :text
- validates_length_of :text, :minimum => 3
+ validates :order_id, :user_id, :text, presence: true
+ validates :text, length: { minimum: 3 }
end
diff --git a/app/models/ordergroup.rb b/app/models/ordergroup.rb
index c29ec762..6770fc55 100644
--- a/app/models/ordergroup.rb
+++ b/app/models/ordergroup.rb
@@ -15,7 +15,7 @@ class Ordergroup < Group
has_many :orders, through: :group_orders
has_many :group_order_articles, through: :group_orders
- validates_numericality_of :account_balance, :message => I18n.t('ordergroups.model.invalid_balance')
+ validates :account_balance, numericality: { message: I18n.t('ordergroups.model.invalid_balance') }
validate :uniqueness_of_name, :uniqueness_of_members
after_create :update_stats!
@@ -32,7 +32,7 @@ class Ordergroup < Group
def self.include_transaction_class_sum
columns = ['groups.*']
- FinancialTransactionClass.all.each do |c|
+ FinancialTransactionClass.all.find_each do |c|
columns << "sum(CASE financial_transaction_types.financial_transaction_class_id WHEN #{c.id} THEN financial_transactions.amount ELSE 0 END) AS sum_of_class_#{c.id}"
end
@@ -51,9 +51,9 @@ class Ordergroup < Group
def last_user_activity
last_active_user = users.order('users.last_activity DESC').first
- if last_active_user
- last_active_user.last_activity
- end
+ return unless last_active_user
+
+ last_active_user.last_activity
end
# the most recent order this ordergroup was participating in
@@ -86,12 +86,14 @@ class Ordergroup < Group
# Throws an exception if it fails.
def add_financial_transaction!(amount, note, user, transaction_type, link = nil, group_order = nil)
transaction do
- t = FinancialTransaction.new(ordergroup: self, amount: amount, note: note, user: user, financial_transaction_type: transaction_type, financial_link: link, group_order: group_order)
+ t = FinancialTransaction.new(ordergroup: self, amount: amount, note: note, user: user,
+ financial_transaction_type: transaction_type, financial_link: link, group_order: group_order)
t.save!
update_balance!
# Notify only when order group had a positive balance before the last transaction:
- if t.amount < 0 && self.account_balance < 0 && self.account_balance - t.amount >= 0
- NotifyNegativeBalanceJob.perform_later(self, t)
+ if t.amount < 0 && account_balance < 0 && account_balance - t.amount >= 0
+ NotifyNegativeBalanceJob.perform_later(self,
+ t)
end
t
end
@@ -101,10 +103,11 @@ class Ordergroup < Group
# Get hours for every job of each user in period
jobs = users.to_a.sum { |u| u.tasks.done.where('updated_on > ?', APPLE_MONTH_AGO.month.ago).sum(:duration) }
# Get group_order.price for every finished order in this period
- orders_sum = group_orders.includes(:order).merge(Order.finished).where('orders.ends >= ?', APPLE_MONTH_AGO.month.ago).references(:orders).sum(:price)
+ orders_sum = group_orders.includes(:order).merge(Order.finished).where('orders.ends >= ?',
+ APPLE_MONTH_AGO.month.ago).references(:orders).sum(:price)
@readonly = false # Dirty hack, avoid getting RecordReadOnly exception when called in task after_save callback. A rails bug?
- update_attribute(:stats, { :jobs_size => jobs, :orders_sum => orders_sum })
+ update_attribute(:stats, { jobs_size: jobs, orders_sum: orders_sum })
end
def update_balance!
@@ -116,13 +119,17 @@ class Ordergroup < Group
end
def avg_jobs_per_euro
- stats[:jobs_size].to_f / stats[:orders_sum].to_f rescue 0
+ stats[:jobs_size].to_f / stats[:orders_sum].to_f
+ rescue StandardError
+ 0
end
# This is the ordergroup job per euro performance
# in comparison to the hole foodcoop average
def apples
- ((avg_jobs_per_euro / Ordergroup.avg_jobs_per_euro) * 100).to_i rescue 0
+ ((avg_jobs_per_euro / Ordergroup.avg_jobs_per_euro) * 100).to_i
+ rescue StandardError
+ 0
end
# If the the option stop_ordering_under is set, the ordergroup is only allowed to participate in an order,
@@ -141,7 +148,11 @@ class Ordergroup < Group
# Global average
def self.avg_jobs_per_euro
stats = Ordergroup.pluck(:stats)
- stats.sum { |s| s[:jobs_size].to_f } / stats.sum { |s| s[:orders_sum].to_f } rescue 0
+ begin
+ stats.sum { |s| s[:jobs_size].to_f } / stats.sum { |s| s[:orders_sum].to_f }
+ rescue StandardError
+ 0
+ end
end
def account_updated
@@ -149,22 +160,22 @@ class Ordergroup < Group
end
def self.sort_by_param(param)
- param ||= "name"
+ param ||= 'name'
sort_param_map = {
- "name" => "name",
- "name_reverse" => "name DESC",
- "members_count" => "count(users.id)",
- "members_count_reverse" => "count(users.id) DESC",
- "last_user_activity" => "max(users.last_activity)",
- "last_user_activity_reverse" => "max(users.last_activity) DESC",
- "last_order" => "max(orders.starts)",
- "last_order_reverse" => "max(orders.starts) DESC"
+ 'name' => 'name',
+ 'name_reverse' => 'name DESC',
+ 'members_count' => 'count(users.id)',
+ 'members_count_reverse' => 'count(users.id) DESC',
+ 'last_user_activity' => 'max(users.last_activity)',
+ 'last_user_activity_reverse' => 'max(users.last_activity) DESC',
+ 'last_order' => 'max(orders.starts)',
+ 'last_order_reverse' => 'max(orders.starts) DESC'
}
result = self
- result = result.left_joins(:users).group("groups.id") if param.starts_with?("members_count", "last_user_activity")
- result = result.left_joins(:orders).group("groups.id") if param.starts_with?("last_order")
+ result = result.left_joins(:users).group('groups.id') if param.starts_with?('members_count', 'last_user_activity')
+ result = result.left_joins(:orders).group('groups.id') if param.starts_with?('last_order')
# Never pass user input data to Arel.sql() because of SQL Injection vulnerabilities.
# This case here is okay, as param is mapped to the actual order string.
@@ -176,17 +187,21 @@ class Ordergroup < Group
# Make sure, that a user can only be in one ordergroup
def uniqueness_of_members
users.each do |user|
- errors.add :user_tokens, I18n.t('ordergroups.model.error_single_group', :user => user.display) if user.groups.where(:type => 'Ordergroup').size > 1
+ next unless user.groups.where(type: 'Ordergroup').size > 1
+
+ errors.add :user_tokens,
+ I18n.t('ordergroups.model.error_single_group',
+ user: user.display)
end
end
# Make sure, the name is uniq, add usefull message if uniq group is already deleted
def uniqueness_of_name
group = Ordergroup.where(name: name)
- group = group.where.not(id: self.id) unless new_record?
- if group.exists?
- message = group.first.deleted? ? :taken_with_deleted : :taken
- errors.add :name, message
- end
+ group = group.where.not(id: id) unless new_record?
+ return unless group.exists?
+
+ message = group.first.deleted? ? :taken_with_deleted : :taken
+ errors.add :name, message
end
end
diff --git a/app/models/periodic_task_group.rb b/app/models/periodic_task_group.rb
index c0a2b10f..f9e9f249 100644
--- a/app/models/periodic_task_group.rb
+++ b/app/models/periodic_task_group.rb
@@ -5,7 +5,7 @@ class PeriodicTaskGroup < ApplicationRecord
return false if tasks.empty?
return false if tasks.first.due_date.nil?
- return true
+ true
end
def create_next_task
@@ -18,15 +18,13 @@ class PeriodicTaskGroup < ApplicationRecord
next_task.save
self.next_task_date += period_days
- self.save
+ save
end
def create_tasks_until(create_until)
- if has_next_task?
- while next_task_date.nil? || next_task_date < create_until
- create_next_task
- end
- end
+ return unless has_next_task?
+
+ create_next_task while next_task_date.nil? || next_task_date < create_until
end
def create_tasks_for_upfront_days
@@ -36,7 +34,7 @@ class PeriodicTaskGroup < ApplicationRecord
end
def exclude_tasks_before(task)
- tasks.where("due_date < '#{task.due_date}'").each do |t|
+ tasks.where("due_date < '#{task.due_date}'").find_each do |t|
t.update_attribute(:periodic_task_group, nil)
end
end
@@ -53,7 +51,7 @@ class PeriodicTaskGroup < ApplicationRecord
due_date: task.due_date + due_date_delta)
end
group_tasks.each do |task|
- task.update_columns(periodic_task_group_id: self.id)
+ task.update_columns(periodic_task_group_id: id)
end
end
diff --git a/app/models/shared_article.rb b/app/models/shared_article.rb
index 238b48f0..c390a021 100644
--- a/app/models/shared_article.rb
+++ b/app/models/shared_article.rb
@@ -4,23 +4,23 @@ class SharedArticle < ApplicationRecord
# set correct table_name in external DB
self.table_name = 'articles'
- belongs_to :shared_supplier, :foreign_key => :supplier_id
+ belongs_to :shared_supplier, foreign_key: :supplier_id
def build_new_article(supplier)
supplier.articles.build(
- :name => name,
- :unit => unit,
- :note => note,
- :manufacturer => manufacturer,
- :origin => origin,
- :price => price,
- :tax => tax,
- :deposit => deposit,
- :unit_quantity => unit_quantity,
- :order_number => number,
- :article_category => ArticleCategory.find_match(category),
+ name: name,
+ unit: unit,
+ note: note,
+ manufacturer: manufacturer,
+ origin: origin,
+ price: price,
+ tax: tax,
+ deposit: deposit,
+ unit_quantity: unit_quantity,
+ order_number: number,
+ article_category: ArticleCategory.find_match(category),
# convert to db-compatible-string
- :shared_updated_on => updated_on.to_formatted_s(:db)
+ shared_updated_on: updated_on.to_fs(:db)
)
end
end
diff --git a/app/models/shared_supplier.rb b/app/models/shared_supplier.rb
index 29c9c1ab..e2b23805 100644
--- a/app/models/shared_supplier.rb
+++ b/app/models/shared_supplier.rb
@@ -5,10 +5,10 @@ class SharedSupplier < ApplicationRecord
self.table_name = 'suppliers'
has_many :suppliers, -> { undeleted }
- has_many :shared_articles, :foreign_key => :supplier_id
+ has_many :shared_articles, foreign_key: :supplier_id
def find_article_by_number(order_number)
- # note that `shared_articles` uses number instead order_number
+ # NOTE: that `shared_articles` uses number instead order_number
cached_articles.detect { |a| a.number == order_number }
end
@@ -19,15 +19,18 @@ class SharedSupplier < ApplicationRecord
# These set of attributes are used to autofill attributes of new supplier,
# when created by import from shared supplier feature.
def autofill_attributes
- whitelist = %w(name address phone fax email url delivery_days note)
+ whitelist = %w[name address phone fax email url delivery_days note]
attributes.select { |k, _v| whitelist.include?(k) }
end
# return list of synchronisation methods available for this supplier
def shared_sync_methods
methods = []
- methods += %w(all_available all_unavailable) if shared_articles.count < FoodsoftConfig[:shared_supplier_article_sync_limit]
- methods += %w(import)
+ if shared_articles.count < FoodsoftConfig[:shared_supplier_article_sync_limit]
+ methods += %w[all_available
+ all_unavailable]
+ end
+ methods += %w[import]
methods
end
end
diff --git a/app/models/stock_article.rb b/app/models/stock_article.rb
index 42a06d49..14b8d5ef 100644
--- a/app/models/stock_article.rb
+++ b/app/models/stock_article.rb
@@ -10,11 +10,11 @@ class StockArticle < Article
ransack_alias :quantity_available, :quantity # in-line with {StockArticleSerializer}
def self.ransackable_attributes(auth_object = nil)
- super(auth_object) - %w(supplier_id) + %w(quantity)
+ super(auth_object) - %w[supplier_id] + %w[quantity]
end
def self.ransackable_associations(auth_object = nil)
- super(auth_object) - %w(supplier)
+ super(auth_object) - %w[supplier]
end
# Update the quantity of items in stock
@@ -48,7 +48,7 @@ class StockArticle < Article
protected
def check_quantity
- raise I18n.t('stockit.check.not_empty', :name => name) unless quantity == 0
+ raise I18n.t('stockit.check.not_empty', name: name) unless quantity == 0
end
# Overwrite Price history of Article. For StockArticles isn't it necessary.
diff --git a/app/models/stock_change.rb b/app/models/stock_change.rb
index 4cbd8939..03d92c74 100644
--- a/app/models/stock_change.rb
+++ b/app/models/stock_change.rb
@@ -4,11 +4,11 @@ class StockChange < ApplicationRecord
belongs_to :stock_taking, optional: true, foreign_key: 'stock_event_id'
belongs_to :stock_article
- validates_presence_of :stock_article_id, :quantity
- validates_numericality_of :quantity
+ validates :stock_article_id, :quantity, presence: true
+ validates :quantity, numericality: true
- after_save :update_article_quantity
after_destroy :update_article_quantity
+ after_save :update_article_quantity
protected
diff --git a/app/models/stock_event.rb b/app/models/stock_event.rb
index 4fd82864..7134f7b0 100644
--- a/app/models/stock_event.rb
+++ b/app/models/stock_event.rb
@@ -2,5 +2,5 @@ class StockEvent < ApplicationRecord
has_many :stock_changes, dependent: :destroy
has_many :stock_articles, through: :stock_changes
- validates_presence_of :date
+ validates :date, presence: true
end
diff --git a/app/models/supplier.rb b/app/models/supplier.rb
index 862f5c24..56999be1 100644
--- a/app/models/supplier.rb
+++ b/app/models/supplier.rb
@@ -2,7 +2,9 @@ class Supplier < ApplicationRecord
include MarkAsDeletedWithName
include CustomFields
- has_many :articles, -> { where(:type => nil).includes(:article_category).order('article_categories.name', 'articles.name') }
+ has_many :articles, lambda {
+ where(type: nil).includes(:article_category).order('article_categories.name', 'articles.name')
+ }
has_many :stock_articles, -> { includes(:article_category).order('article_categories.name', 'articles.name') }
has_many :orders
has_many :deliveries
@@ -10,24 +12,24 @@ class Supplier < ApplicationRecord
belongs_to :supplier_category
belongs_to :shared_supplier, optional: true # for the sharedLists-App
- validates :name, :presence => true, :length => { :in => 4..30 }
- validates :phone, :presence => true, :length => { :in => 8..25 }
- validates :address, :presence => true, :length => { :in => 8..50 }
- validates_format_of :iban, :with => /\A[A-Z]{2}[0-9]{2}[0-9A-Z]{,30}\z/, :allow_blank => true
- validates_uniqueness_of :iban, :case_sensitive => false, :allow_blank => true
- validates_length_of :order_howto, :note, maximum: 250
+ validates :name, presence: true, length: { in: 4..30 }
+ validates :phone, presence: true, length: { in: 8..25 }
+ validates :address, presence: true, length: { in: 8..50 }
+ validates :iban, format: { with: /\A[A-Z]{2}[0-9]{2}[0-9A-Z]{,30}\z/, allow_blank: true }
+ validates :iban, uniqueness: { case_sensitive: false, allow_blank: true }
+ validates :order_howto, :note, length: { maximum: 250 }
validate :valid_shared_sync_method
validate :uniqueness_of_name
scope :undeleted, -> { where(deleted_at: nil) }
scope :having_articles, -> { where(id: Article.undeleted.select(:supplier_id).distinct) }
- def self.ransackable_attributes(auth_object = nil)
- %w(id name)
+ def self.ransackable_attributes(_auth_object = nil)
+ %w[id name]
end
- def self.ransackable_associations(auth_object = nil)
- %w(articles stock_articles orders)
+ def self.ransackable_associations(_auth_object = nil)
+ %w[articles stock_articles orders]
end
# sync all articles with the external database
@@ -35,7 +37,9 @@ class Supplier < ApplicationRecord
# also returns an array with outlisted_articles, which should be deleted
# also returns an array with new articles, which should be added (depending on shared_sync_method)
def sync_all
- updated_article_pairs, outlisted_articles, new_articles = [], [], []
+ updated_article_pairs = []
+ outlisted_articles = []
+ new_articles = []
existing_articles = Set.new
for article in articles.undeleted
# try to find the associated shared_article
@@ -44,30 +48,28 @@ class Supplier < ApplicationRecord
if shared_article # article will be updated
existing_articles.add(shared_article.id)
unequal_attributes = article.shared_article_changed?(self)
- unless unequal_attributes.blank? # skip if shared_article has not been changed
+ if unequal_attributes.present? # skip if shared_article has not been changed
article.attributes = unequal_attributes
updated_article_pairs << [article, unequal_attributes]
end
# Articles with no order number can be used to put non-shared articles
# in a shared supplier, with sync keeping them.
- elsif not article.order_number.blank?
+ elsif article.order_number.present?
# article isn't in external database anymore
outlisted_articles << article
end
end
# Find any new articles, unless the import is manual
- if ['all_available', 'all_unavailable'].include?(shared_sync_method)
+ if %w[all_available all_unavailable].include?(shared_sync_method)
# build new articles
shared_supplier
.shared_articles
.where.not(id: existing_articles.to_a)
.find_each { |new_shared_article| new_articles << new_shared_article.build_new_article(self) }
# make them unavailable when desired
- if shared_sync_method == 'all_unavailable'
- new_articles.each { |new_article| new_article.availability = false }
- end
+ new_articles.each { |new_article| new_article.availability = false } if shared_sync_method == 'all_unavailable'
end
- return [updated_article_pairs, outlisted_articles, new_articles]
+ [updated_article_pairs, outlisted_articles, new_articles]
end
# Synchronise articles with spreadsheet.
@@ -78,8 +80,10 @@ class Supplier < ApplicationRecord
# @option options [Boolean] :convert_units Omit or set to +true+ to keep current units, recomputing unit quantity and price.
def sync_from_file(file, options = {})
all_order_numbers = []
- updated_article_pairs, outlisted_articles, new_articles = [], [], []
- FoodsoftFile::parse file, options do |status, new_attrs, line|
+ updated_article_pairs = []
+ outlisted_articles = []
+ new_articles = []
+ FoodsoftFile.parse file, options do |status, new_attrs, line|
article = articles.undeleted.where(order_number: new_attrs[:order_number]).first
new_attrs[:article_category] = ArticleCategory.find_match(new_attrs[:article_category])
new_attrs[:tax] ||= FoodsoftConfig[:tax_default]
@@ -101,15 +105,13 @@ class Supplier < ApplicationRecord
# stop when there is a parsing error
elsif status.is_a? String
# @todo move I18n key to model
- raise I18n.t('articles.model.error_parse', :msg => status, :line => line.to_s)
+ raise I18n.t('articles.model.error_parse', msg: status, line: line.to_s)
end
all_order_numbers << article.order_number if article
end
- if options[:outlist_absent]
- outlisted_articles += articles.undeleted.where.not(order_number: all_order_numbers + [nil])
- end
- return [updated_article_pairs, outlisted_articles, new_articles]
+ outlisted_articles += articles.undeleted.where.not(order_number: all_order_numbers + [nil]) if options[:outlist_absent]
+ [updated_article_pairs, outlisted_articles, new_articles]
end
# default value
@@ -140,18 +142,18 @@ class Supplier < ApplicationRecord
# make sure the shared_sync_method is allowed for the shared supplier
def valid_shared_sync_method
- if shared_supplier && !shared_supplier.shared_sync_methods.include?(shared_sync_method)
- errors.add :shared_sync_method, :included
- end
+ return unless shared_supplier && !shared_supplier.shared_sync_methods.include?(shared_sync_method)
+
+ errors.add :shared_sync_method, :included
end
# Make sure, the name is uniq, add usefull message if uniq group is already deleted
def uniqueness_of_name
supplier = Supplier.where(name: name)
- supplier = supplier.where.not(id: self.id) unless new_record?
- if supplier.exists?
- message = supplier.first.deleted? ? :taken_with_deleted : :taken
- errors.add :name, message
- end
+ supplier = supplier.where.not(id: id) unless new_record?
+ return unless supplier.exists?
+
+ message = supplier.first.deleted? ? :taken_with_deleted : :taken
+ errors.add :name, message
end
end
diff --git a/app/models/task.rb b/app/models/task.rb
index cd748eb3..1343b8f4 100644
--- a/app/models/task.rb
+++ b/app/models/task.rb
@@ -1,9 +1,9 @@
class Task < ApplicationRecord
- has_many :assignments, :dependent => :destroy
- has_many :users, :through => :assignments
+ has_many :assignments, dependent: :destroy
+ has_many :users, through: :assignments
belongs_to :workgroup, optional: true
belongs_to :periodic_task_group, optional: true
- belongs_to :created_by, :class_name => 'User', :foreign_key => 'created_by_user_id', optional: true
+ belongs_to :created_by, class_name: 'User', foreign_key: 'created_by_user_id', optional: true
scope :non_group, -> { where(workgroup_id: nil, done: false) }
scope :done, -> { where(done: true) }
@@ -11,12 +11,12 @@ class Task < ApplicationRecord
attr_accessor :current_user_id
- validates :name, :presence => true, :length => { :minimum => 3 }
- validates :required_users, :presence => true
- validates_numericality_of :duration, :required_users, :only_integer => true, :greater_than => 0
- validates_length_of :description, maximum: 250
+ validates :name, presence: true, length: { minimum: 3 }
+ validates :required_users, presence: true
+ validates :duration, :required_users, numericality: { only_integer: true, greater_than: 0 }
+ validates :description, length: { maximum: 250 }
validates :done, exclusion: { in: [true] }, if: :periodic?, on: :create
- validates_presence_of :due_date, if: :periodic?
+ validates :due_date, presence: { if: :periodic? }
before_save :exclude_from_periodic_task_group, if: :changed?, unless: :new_record?
after_save :update_ordergroup_stats
@@ -35,7 +35,7 @@ class Task < ApplicationRecord
# find all tasks in the period (or another number of days)
def self.next_assigned_tasks_for(user, number = FoodsoftConfig[:tasks_period_days].to_i)
user.tasks.undone.where(assignments: { accepted: true })
- .where(["tasks.due_date >= ? AND tasks.due_date <= ?", Time.now, number.days.from_now])
+ .where(['tasks.due_date >= ? AND tasks.due_date <= ?', Time.now, number.days.from_now])
end
# count tasks with not enough responsible people
@@ -49,7 +49,7 @@ class Task < ApplicationRecord
def self.next_unassigned_tasks_for(user, max = 2)
periodic_task_group_count = {}
- self.unassigned_tasks_for(user).reject do |item|
+ unassigned_tasks_for(user).reject do |item|
next false unless item.periodic_task_group
count = periodic_task_group_count[item.periodic_task_group] || 0
@@ -59,19 +59,19 @@ class Task < ApplicationRecord
end
def periodic?
- not periodic_task_group.nil?
+ !periodic_task_group.nil?
end
def is_assigned?(user)
- self.assignments.detect { |ass| ass.user_id == user.id }
+ assignments.detect { |ass| ass.user_id == user.id }
end
def is_accepted?(user)
- self.assignments.detect { |ass| ass.user_id == user.id && ass.accepted }
+ assignments.detect { |ass| ass.user_id == user.id && ass.accepted }
end
def enough_users_assigned?
- assignments.to_a.count(&:accepted) >= required_users ? true : false
+ assignments.to_a.count(&:accepted) >= required_users
end
def still_required_users
@@ -82,39 +82,35 @@ class Task < ApplicationRecord
# and makes the users responsible for the task
# TODO: check for maximal number of users
def user_list=(ids)
- list = ids.split(",").map(&:to_i)
+ list = ids.split(',').map(&:to_i)
new_users = (list - users.collect(&:id)).uniq
old_users = users.reject { |user| list.include?(user.id) }
self.class.transaction do
# delete old assignments
- if old_users.any?
- assignments.where(user_id: old_users.map(&:id)).each(&:destroy)
- end
+ assignments.where(user_id: old_users.map(&:id)).find_each(&:destroy) if old_users.any?
# create new assignments
new_users.each do |id|
user = User.find(id)
if user.blank?
errors.add(:user_list)
+ elsif id == current_user_id.to_i
+ assignments.build user: user, accepted: true
+ # current_user will accept, when he puts himself to the list of users
else
- if id == current_user_id.to_i
- # current_user will accept, when he puts himself to the list of users
- self.assignments.build :user => user, :accepted => true
- else
- # normal assignement
- self.assignments.build :user => user
- end
+ # normal assignement
+ assignments.build user: user
end
end
end
end
def user_list
- @user_list ||= users.collect(&:id).join(", ")
+ @user_list ||= users.collect(&:id).join(', ')
end
def update_ordergroup_stats(user_ids = self.user_ids)
- Ordergroup.joins(:users).where(users: { id: user_ids }).each(&:update_stats!)
+ Ordergroup.joins(:users).where(users: { id: user_ids }).find_each(&:update_stats!)
end
def exclude_from_periodic_task_group
diff --git a/app/models/user.rb b/app/models/user.rb
index 05a67547..12d457b0 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -4,19 +4,19 @@ class User < ApplicationRecord
include CustomFields
# TODO: acts_as_paraniod ??
- has_many :memberships, :dependent => :destroy
- has_many :groups, :through => :memberships
+ has_many :memberships, dependent: :destroy
+ has_many :groups, through: :memberships
# has_one :ordergroup, :through => :memberships, :source => :group, :class_name => "Ordergroup"
def ordergroup
- Ordergroup.joins(:memberships).where(memberships: { user_id: self.id }).first
+ Ordergroup.joins(:memberships).where(memberships: { user_id: id }).first
end
- has_many :workgroups, :through => :memberships, :source => :group, :class_name => "Workgroup"
- has_many :assignments, :dependent => :destroy
- has_many :tasks, :through => :assignments
- has_many :send_messages, :class_name => "Message", :foreign_key => "sender_id"
- has_many :created_orders, :class_name => 'Order', :foreign_key => 'created_by_user_id', :dependent => :nullify
- has_many :mail_delivery_status, :class_name => 'MailDeliveryStatus', :foreign_key => 'email', :primary_key => 'email'
+ has_many :workgroups, through: :memberships, source: :group, class_name: 'Workgroup'
+ has_many :assignments, dependent: :destroy
+ has_many :tasks, through: :assignments
+ has_many :send_messages, class_name: 'Message', foreign_key: 'sender_id'
+ has_many :created_orders, class_name: 'Order', foreign_key: 'created_by_user_id', dependent: :nullify
+ has_many :mail_delivery_status, class_name: 'MailDeliveryStatus', foreign_key: 'email', primary_key: 'email'
attr_accessor :create_ordergroup, :password, :send_welcome_mail, :settings_attributes
@@ -26,22 +26,22 @@ class User < ApplicationRecord
# makes the current_user (logged-in-user) available in models
cattr_accessor :current_user
- validates_presence_of :email
- validates_presence_of :password, :on => :create
- validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
- validates_uniqueness_of :email, :case_sensitive => false
- validates_presence_of :first_name # for simple_form validations
- validates_length_of :first_name, :in => 2..50
- validates_confirmation_of :password
- validates_length_of :password, :in => 5..50, :allow_blank => true
+ validates :email, presence: true
+ validates :password, presence: { on: :create }
+ validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i }
+ validates :email, uniqueness: { case_sensitive: false }
+ validates :first_name, presence: true # for simple_form validations
+ validates :first_name, length: { in: 2..50 }
+ validates :password, confirmation: true
+ validates :password, length: { in: 5..50, allow_blank: true }
# allow nick to be nil depending on foodcoop config
# TODO Rails 4 may have a more beautiful way
# http://stackoverflow.com/questions/19845910/conditional-allow-nil-part-of-validation
- validates_length_of :nick, :in => 2..25, :allow_nil => true, :unless => Proc.new { FoodsoftConfig[:use_nick] }
- validates_length_of :nick, :in => 2..25, :allow_nil => false, :if => Proc.new { FoodsoftConfig[:use_nick] }
- validates_uniqueness_of :nick, :case_sensitive => false, :allow_nil => true # allow_nil in length validation
- validates_format_of :iban, :with => /\A[A-Z]{2}[0-9]{2}[0-9A-Z]{,30}\z/, :allow_blank => true
- validates_uniqueness_of :iban, :case_sensitive => false, :allow_blank => true
+ validates :nick, length: { in: 2..25, allow_nil: true, unless: proc { FoodsoftConfig[:use_nick] } }
+ validates :nick, length: { in: 2..25, allow_nil: false, if: proc { FoodsoftConfig[:use_nick] } }
+ validates :nick, uniqueness: { case_sensitive: false, allow_nil: true } # allow_nil in length validation
+ validates :iban, format: { with: /\A[A-Z]{2}[0-9]{2}[0-9A-Z]{,30}\z/, allow_blank: true }
+ validates :iban, uniqueness: { case_sensitive: false, allow_blank: true }
before_validation :set_password
after_initialize do
@@ -58,17 +58,19 @@ class User < ApplicationRecord
end
after_save do
- settings_attributes.each do |key, value|
- value.each do |k, v|
- case v
- when '1'
- value[k] = true
- when '0'
- value[k] = false
+ if settings_attributes
+ settings_attributes.each do |key, value|
+ value.each do |k, v|
+ case v
+ when '1'
+ value[k] = true
+ when '0'
+ value[k] = false
+ end
end
+ settings.merge!(key, value)
end
- self.settings.merge!(key, value)
- end if settings_attributes
+ end
if ActiveModel::Type::Boolean.new.cast(create_ordergroup)
og = Ordergroup.new({ name: name })
@@ -103,7 +105,7 @@ class User < ApplicationRecord
match_name = q.split.map do |a|
users[:first_name].matches("%#{a}%").or users[:last_name].matches("%#{a}%")
end.reduce(:and)
- User.where(match_nick.or match_name)
+ User.where(match_nick.or(match_name))
end
def locale
@@ -111,7 +113,7 @@ class User < ApplicationRecord
end
def name
- [first_name, last_name].join(" ")
+ [first_name, last_name].join(' ')
end
def receive_email?
@@ -120,22 +122,24 @@ class User < ApplicationRecord
# Sets the user's password. It will be stored encrypted along with a random salt.
def set_password
- unless password.blank?
- salt = [Array.new(6) { rand(256).chr }.join].pack("m").chomp
- self.password_hash, self.password_salt = Digest::SHA1.hexdigest(password + salt), salt
- end
+ return if password.blank?
+
+ salt = [Array.new(6) { rand(256).chr }.join].pack('m').chomp
+ self.password_hash = Digest::SHA1.hexdigest(password + salt)
+ self.password_salt = salt
end
# Returns true if the password argument matches the user's password.
def has_password(password)
- Digest::SHA1.hexdigest(password + self.password_salt) == self.password_hash
+ Digest::SHA1.hexdigest(password + password_salt) == password_hash
end
# Returns a random password.
def new_random_password(size = 6)
- c = %w(b c d f g h j k l m n p qu r s t v w x z ch cr fr nd ng nk nt ph pr rd sh sl sp st th tr)
- v = %w(a e i o u y)
- f, r = true, ''
+ c = %w[b c d f g h j k l m n p qu r s t v w x z ch cr fr nd ng nk nt ph pr rd sh sl sp st th tr]
+ v = %w[a e i o u y]
+ f = true
+ r = ''
(size * 2).times do
r << (f ? c[rand * c.size] : v[rand * v.size])
f = !f
@@ -198,12 +202,12 @@ class User < ApplicationRecord
# returns true if user is a member of a given group
def member_of?(group)
- group.users.exists?(self.id)
+ group.users.exists?(id)
end
# Returns an array with the users groups (but without the Ordergroups -> because tpye=>"")
- def member_of_groups()
- self.groups.where(type: '')
+ def member_of_groups
+ groups.where(type: '')
end
def deleted?
@@ -220,11 +224,9 @@ class User < ApplicationRecord
def self.authenticate(login, password)
user = find_by_nick(login) || find_by_email(login)
- if user && password && user.has_password(password)
- user
- else
- nil
- end
+ return unless user && password && user.has_password(password)
+
+ user
end
def self.custom_fields
@@ -248,29 +250,29 @@ class User < ApplicationRecord
def token_attributes
# would be sensible to match ApplicationController#show_user
# this should not be part of the model anyway
- { :id => id, :name => "#{display} (#{ordergroup.try(:name)})" }
+ { id: id, name: "#{display} (#{ordergroup.try(:name)})" }
end
def self.sort_by_param(param)
- param ||= "name"
+ param ||= 'name'
sort_param_map = {
- "nick" => "nick",
- "nick_reverse" => "nick DESC",
- "name" => "first_name, last_name",
- "name_reverse" => "first_name DESC, last_name DESC",
- "email" => "users.email",
- "email_reverse" => "users.email DESC",
- "phone" => "phone",
- "phone_reverse" => "phone DESC",
- "last_activity" => "last_activity",
- "last_activity_reverse" => "last_activity DESC",
- "ordergroup" => "IFNULL(groups.type, '') <> 'Ordergroup', groups.name",
- "ordergroup_reverse" => "IFNULL(groups.type, '') <> 'Ordergroup', groups.name DESC"
+ 'nick' => 'nick',
+ 'nick_reverse' => 'nick DESC',
+ 'name' => 'first_name, last_name',
+ 'name_reverse' => 'first_name DESC, last_name DESC',
+ 'email' => 'users.email',
+ 'email_reverse' => 'users.email DESC',
+ 'phone' => 'phone',
+ 'phone_reverse' => 'phone DESC',
+ 'last_activity' => 'last_activity',
+ 'last_activity_reverse' => 'last_activity DESC',
+ 'ordergroup' => "IFNULL(groups.type, '') <> 'Ordergroup', groups.name",
+ 'ordergroup_reverse' => "IFNULL(groups.type, '') <> 'Ordergroup', groups.name DESC"
}
# Never pass user input data to Arel.sql() because of SQL Injection vulnerabilities.
# This case here is okay, as param is mapped to the actual order string.
- self.eager_load(:groups).order(Arel.sql(sort_param_map[param])) # eager_load is like left_join but without duplicates
+ eager_load(:groups).order(Arel.sql(sort_param_map[param])) # eager_load is like left_join but without duplicates
end
end
diff --git a/app/models/workgroup.rb b/app/models/workgroup.rb
index bf50c27b..271dec8d 100644
--- a/app/models/workgroup.rb
+++ b/app/models/workgroup.rb
@@ -3,26 +3,26 @@ class Workgroup < Group
has_many :tasks
# returns all non-finished tasks
- has_many :open_tasks, -> { where(:done => false).order('due_date', 'name') }, :class_name => 'Task'
+ has_many :open_tasks, -> { where(done: false).order('due_date', 'name') }, class_name: 'Task'
- validates_uniqueness_of :name
- validate :last_admin_on_earth, :on => :update
+ validates :name, uniqueness: true
+ validate :last_admin_on_earth, on: :update
before_destroy :check_last_admin_group
protected
# Check before destroy a group, if this is the last group with admin role
def check_last_admin_group
- if role_admin && Workgroup.where(role_admin: true).size == 1
- raise I18n.t('workgroups.error_last_admin_group')
- end
+ return unless role_admin && Workgroup.where(role_admin: true).size == 1
+
+ raise I18n.t('workgroups.error_last_admin_group')
end
# add validation check on update
# Return an error if this is the last group with admin role and role_admin should set to false
def last_admin_on_earth
- if !role_admin && !Workgroup.where(role_admin: true).where.not(id: id).exists?
- errors.add(:role_admin, I18n.t('workgroups.error_last_admin_role'))
- end
+ return unless !role_admin && !Workgroup.where(role_admin: true).where.not(id: id).exists?
+
+ errors.add(:role_admin, I18n.t('workgroups.error_last_admin_role'))
end
end
diff --git a/config.ru b/config.ru
index f986eadb..eeab736b 100644
--- a/config.ru
+++ b/config.ru
@@ -1,6 +1,6 @@
# This file is used by Rack-based servers to start the application.
-require ::File.expand_path('../config/environment', __FILE__)
+require File.expand_path('config/environment', __dir__)
# https://gist.github.com/ebeigarts/5450422
map ENV.fetch('RAILS_RELATIVE_URL_ROOT', '/') do
diff --git a/config/application.rb b/config/application.rb
index 9c0ade99..71883b57 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -29,12 +29,14 @@ module Foodsoft
# Internationalization.
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.yml')]
- config.i18n.available_locales = Pathname.glob(Rails.root.join('config', 'locales', '{??,???}{-*,}.yml')).map { |p| p.basename('.yml').to_s }
+ config.i18n.available_locales = Pathname.glob(Rails.root.join('config', 'locales', '{??,???}{-*,}.yml')).map do |p|
+ p.basename('.yml').to_s
+ end
config.i18n.default_locale = :en
config.i18n.fallbacks = [:en]
# Configure the default encoding used in templates for Ruby 1.9.
- config.encoding = "utf-8"
+ config.encoding = 'utf-8'
# Enable escaping HTML in JSON.
config.active_support.escape_html_entities_in_json = true
@@ -44,7 +46,7 @@ module Foodsoft
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql
- # TODO Disable this. Uncommenting this line will currently cause rspec to fail.
+ # TODO: Disable this. Uncommenting this line will currently cause rspec to fail.
config.action_controller.permit_all_parameters = true
config.active_job.queue_adapter = :resque
@@ -82,5 +84,9 @@ module Foodsoft
# Foodsoft version
VERSION = Rails.root.join('VERSION').read.strip
# Current revision, or +nil+
- REVISION = (Rails.root.join('REVISION').read.strip rescue nil)
+ REVISION = begin
+ Rails.root.join('REVISION').read.strip
+ rescue StandardError
+ nil
+ end
end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index d0f06b95..e1a4e97f 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,4 +1,4 @@
-require "active_support/core_ext/integer/time"
+require 'active_support/core_ext/integer/time'
# Foodsoft production configuration.
#
@@ -51,7 +51,7 @@ Rails.application.configure do
# config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- config.force_ssl = ENV["RAILS_FORCE_SSL"] != "false"
+ config.force_ssl = ENV['RAILS_FORCE_SSL'] != 'false'
# Include generic and useful information about system operation, but avoid logging too much
# information to avoid inadvertent exposure of personally identifiable information (PII).
@@ -97,9 +97,18 @@ Rails.application.configure do
config.action_mailer.smtp_settings[:domain] = ENV['SMTP_DOMAIN'] if ENV['SMTP_DOMAIN'].present?
config.action_mailer.smtp_settings[:user_name] = ENV['SMTP_USER_NAME'] if ENV['SMTP_USER_NAME'].present?
config.action_mailer.smtp_settings[:password] = ENV['SMTP_PASSWORD'] if ENV['SMTP_PASSWORD'].present?
- config.action_mailer.smtp_settings[:authentication] = ENV['SMTP_AUTHENTICATION'] if ENV['SMTP_AUTHENTICATION'].present?
- config.action_mailer.smtp_settings[:enable_starttls_auto] = ENV['SMTP_ENABLE_STARTTLS_AUTO'] == 'true' if ENV['SMTP_ENABLE_STARTTLS_AUTO'].present?
- config.action_mailer.smtp_settings[:openssl_verify_mode] = ENV['SMTP_OPENSSL_VERIFY_MODE'] if ENV['SMTP_OPENSSL_VERIFY_MODE'].present?
+ if ENV['SMTP_AUTHENTICATION'].present?
+ config.action_mailer.smtp_settings[:authentication] =
+ ENV['SMTP_AUTHENTICATION']
+ end
+ if ENV['SMTP_ENABLE_STARTTLS_AUTO'].present?
+ config.action_mailer.smtp_settings[:enable_starttls_auto] =
+ ENV['SMTP_ENABLE_STARTTLS_AUTO'] == 'true'
+ end
+ if ENV['SMTP_OPENSSL_VERIFY_MODE'].present?
+ config.action_mailer.smtp_settings[:openssl_verify_mode] =
+ ENV['SMTP_OPENSSL_VERIFY_MODE']
+ end
else
# Use sendmail as default to avoid ssl cert problems
config.action_mailer.delivery_method = :sendmail
@@ -112,7 +121,7 @@ Rails.application.configure do
# require 'syslog/logger'
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
- if ENV["RAILS_LOG_TO_STDOUT"].present?
+ if ENV['RAILS_LOG_TO_STDOUT'].present?
logger = ActiveSupport::Logger.new(STDOUT)
logger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(logger)
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 6ea4d1e7..5f6cef4d 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,4 +1,4 @@
-require "active_support/core_ext/integer/time"
+require 'active_support/core_ext/integer/time'
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
@@ -14,12 +14,12 @@ Rails.application.configure do
# Eager loading loads your whole application. When running a single test locally,
# this probably isn't necessary. It's a good idea to do in a continuous integration
# system, or in some way before deploying your code.
- config.eager_load = ENV["CI"].present?
+ config.eager_load = ENV['CI'].present?
# Configure public file server for tests with Cache-Control for performance.
config.public_file_server.enabled = true
config.public_file_server.headers = {
- "Cache-Control" => "public, max-age=#{1.hour.to_i}"
+ 'Cache-Control' => "public, max-age=#{1.hour.to_i}"
}
# Show full error reports and disable caching.
diff --git a/config/initializers/currency_display.rb b/config/initializers/currency_display.rb
index 71d108d2..24ceeb8b 100644
--- a/config/initializers/currency_display.rb
+++ b/config/initializers/currency_display.rb
@@ -2,6 +2,7 @@
# have it shown in all other languages too
I18n.available_locales.each do |locale|
unless locale == I18n.default_locale
- I18n.backend.store_translations(locale, number: { currency: { format: { unit: nil } } })
+ I18n.backend.store_translations(locale,
+ number: { currency: { format: { unit: nil } } })
end
end
diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb
index 83293820..d01c9a5f 100644
--- a/config/initializers/doorkeeper.rb
+++ b/config/initializers/doorkeeper.rb
@@ -100,7 +100,7 @@ Doorkeeper.configure do
# http://tools.ietf.org/html/rfc6819#section-4.4.2
# http://tools.ietf.org/html/rfc6819#section-4.4.3
#
- grant_flows %w(authorization_code implicit password)
+ grant_flows %w[authorization_code implicit password]
# Under some circumstances you might want to have applications auto-approved,
# so that the user skips the authorization step.
diff --git a/config/initializers/exception_notification.rb b/config/initializers/exception_notification.rb
index 10107865..3d342465 100644
--- a/config/initializers/exception_notification.rb
+++ b/config/initializers/exception_notification.rb
@@ -14,7 +14,7 @@ ExceptionNotification.configure do |config|
# Adds a condition to decide when an exception must be ignored or not.
# The ignore_if method can be invoked multiple times to add extra conditions.
- config.ignore_if do |exception, options|
+ config.ignore_if do |_exception, _options|
Rails.env.development? || Rails.env.test?
end
@@ -23,9 +23,9 @@ ExceptionNotification.configure do |config|
# Email notifier sends notifications by email.
if notification = FoodsoftConfig[:notification]
config.add_notifier :email, {
- :email_prefix => notification[:email_prefix],
- :sender_address => notification[:sender_address],
- :exception_recipients => notification[:error_recipients],
+ email_prefix: notification[:email_prefix],
+ sender_address: notification[:sender_address],
+ exception_recipients: notification[:error_recipients]
}
end
diff --git a/config/initializers/extensions.rb b/config/initializers/extensions.rb
index 68c7c8f4..d276aecb 100644
--- a/config/initializers/extensions.rb
+++ b/config/initializers/extensions.rb
@@ -2,7 +2,7 @@
class String
# remove comma from decimal inputs
def self.delocalized_decimal(string)
- if !string.blank? and string.is_a?(String)
+ if string.present? and string.is_a?(String)
BigDecimal(string.sub(',', '.'))
else
string
@@ -13,6 +13,6 @@ end
class Array
def cumulative_sum
csum = 0
- self.map { |val| csum += val }
+ map { |val| csum += val }
end
end
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index adc6568c..166997c5 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -3,6 +3,6 @@
# Configure parameters to be filtered from the log file. Use this to limit dissemination of
# sensitive information. See the ActiveSupport::ParameterFilter documentation for supported
# notations and behaviors.
-Rails.application.config.filter_parameters += [
- :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+Rails.application.config.filter_parameters += %i[
+ passw secret token _key crypt salt certificate otp ssn
]
diff --git a/config/initializers/rack.rb b/config/initializers/rack.rb
index 30970ec9..aa462561 100644
--- a/config/initializers/rack.rb
+++ b/config/initializers/rack.rb
@@ -1,3 +1,3 @@
# Increase key space for post request.
# Warning, this is dangerous. See http://stackoverflow.com/questions/12243694/getting-error-exceeded-available-parameter-key-space
-Rack::Utils.key_space_limit = 262144
+Rack::Utils.key_space_limit = 262_144
diff --git a/config/initializers/ruby_units.rb b/config/initializers/ruby_units.rb
index b8b56cca..af422fcb 100644
--- a/config/initializers/ruby_units.rb
+++ b/config/initializers/ruby_units.rb
@@ -2,28 +2,28 @@
if defined? RubyUnits
RubyUnits::Unit.redefine!('liter') do |unit|
- unit.aliases += %w{ltr}
+ unit.aliases += %w[ltr]
end
RubyUnits::Unit.redefine!('kilogram') do |unit|
- unit.aliases += %w{KG}
+ unit.aliases += %w[KG]
end
RubyUnits::Unit.redefine!('gram') do |unit|
- unit.aliases += %w{gr}
+ unit.aliases += %w[gr]
end
RubyUnits::Unit.define('piece') do |unit|
unit.definition = RubyUnits::Unit.new('1 each')
- unit.aliases = %w{pc pcs piece pieces} # locale: en
- unit.aliases += %w{st stuk stuks} # locale: nl
+ unit.aliases = %w[pc pcs piece pieces] # locale: en
+ unit.aliases += %w[st stuk stuks] # locale: nl
unit.kind = :counting
end
RubyUnits::Unit.define('bag') do |unit|
unit.definition = RubyUnits::Unit.new('1 each')
- unit.aliases = %w{bag bags blt sachet sachets} # locale: en
- unit.aliases += %w{zak zakken zakje zakjes} # locale: nl
+ unit.aliases = %w[bag bags blt sachet sachets] # locale: en
+ unit.aliases += %w[zak zakken zakje zakjes] # locale: nl
unit.kind = :counting
end
diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb
index 4f01f173..fe62df4a 100644
--- a/config/initializers/secret_token.rb
+++ b/config/initializers/secret_token.rb
@@ -8,12 +8,12 @@ Foodsoft::Application.config.secret_key_base = begin
if (token = ENV.fetch('SECRET_KEY_BASE', nil)).present?
token
elsif Rails.env.production? || Rails.env.staging?
- raise "You must set SECRET_KEY_BASE"
+ raise 'You must set SECRET_KEY_BASE'
elsif Rails.env.test?
SecureRandom.hex(30) # doesn't really matter
else
sf = Rails.root.join('tmp', 'secret_key_base')
- if File.exists?(sf)
+ if File.exist?(sf)
File.read(sf)
else
puts "=> Generating initial SECRET_KEY_BASE in #{sf}"
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
index d7841180..370a202e 100644
--- a/config/initializers/session_store.rb
+++ b/config/initializers/session_store.rb
@@ -3,7 +3,7 @@
module ActionDispatch
module Session
class SlugCookieStore < CookieStore
- alias_method :orig_set_cookie, :set_cookie
+ alias orig_set_cookie set_cookie
def set_cookie(request, session_id, cookie)
if script_name = FoodsoftConfig[:script_name]
diff --git a/config/initializers/simple_form_bootstrap.rb b/config/initializers/simple_form_bootstrap.rb
index a95278d0..1292ac83 100644
--- a/config/initializers/simple_form_bootstrap.rb
+++ b/config/initializers/simple_form_bootstrap.rb
@@ -11,7 +11,7 @@ SimpleForm.setup do |config|
end
end
- config.wrappers :prepend, tag: 'div', class: "control-group", error_class: 'error' do |b|
+ config.wrappers :prepend, tag: 'div', class: 'control-group', error_class: 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
@@ -24,7 +24,7 @@ SimpleForm.setup do |config|
end
end
- config.wrappers :append, tag: 'div', class: "control-group", error_class: 'error' do |b|
+ config.wrappers :append, tag: 'div', class: 'control-group', error_class: 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
diff --git a/config/initializers/zeitwerk.rb b/config/initializers/zeitwerk.rb
index 9c505a26..ede05b16 100644
--- a/config/initializers/zeitwerk.rb
+++ b/config/initializers/zeitwerk.rb
@@ -1,5 +1,4 @@
# config/initializers/zeitwerk.rb
ActiveSupport::Dependencies
.autoload_paths
- .delete("#{Rails.root}/app/controllers/concerns")
-
\ No newline at end of file
+ .delete(Rails.root.join('app/controllers/concerns').to_s)
diff --git a/config/navigation.rb b/config/navigation.rb
index c8b7d088..857b931f 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -21,31 +21,44 @@ SimpleNavigation::Configuration.run do |navigation|
primary.item :orders, I18n.t('navigation.orders.title'), '#' do |subnav|
subnav.item :ordering, I18n.t('navigation.orders.ordering'), group_orders_path
subnav.item :ordering_archive, I18n.t('navigation.orders.archive'), archive_group_orders_path
- subnav.item :orders, I18n.t('navigation.orders.manage'), orders_path, if: Proc.new { current_user.role_orders? }
- subnav.item :pickups, I18n.t('navigation.orders.pickups'), pickups_path, if: Proc.new { current_user.role_pickups? }
+ subnav.item :orders, I18n.t('navigation.orders.manage'), orders_path, if: proc { current_user.role_orders? }
+ subnav.item :pickups, I18n.t('navigation.orders.pickups'), pickups_path, if: proc {
+ current_user.role_pickups?
+ }
end
primary.item :articles, I18n.t('navigation.articles.title'), '#',
- if: Proc.new { current_user.role_article_meta? or current_user.role_suppliers? } do |subnav|
+ if: proc { current_user.role_article_meta? or current_user.role_suppliers? } do |subnav|
subnav.item :suppliers, I18n.t('navigation.articles.suppliers'), suppliers_path
subnav.item :stockit, I18n.t('navigation.articles.stock'), stock_articles_path
subnav.item :categories, I18n.t('navigation.articles.categories'), article_categories_path
end
- primary.item :finance, I18n.t('navigation.finances.title'), '#', if: Proc.new { current_user.role_finance? || current_user.role_invoices? } do |subnav|
- subnav.item :finance_home, I18n.t('navigation.finances.home'), finance_root_path, if: Proc.new { current_user.role_finance? }
- subnav.item :finance_home, I18n.t('navigation.finances.bank_accounts'), finance_bank_accounts_path, if: Proc.new { current_user.role_finance? }
- subnav.item :accounts, I18n.t('navigation.finances.accounts'), finance_ordergroups_path, if: Proc.new { current_user.role_finance? }
- subnav.item :balancing, I18n.t('navigation.finances.balancing'), finance_order_index_path, if: Proc.new { current_user.role_finance? }
+ primary.item :finance, I18n.t('navigation.finances.title'), '#', if: proc {
+ current_user.role_finance? || current_user.role_invoices?
+ } do |subnav|
+ subnav.item :finance_home, I18n.t('navigation.finances.home'), finance_root_path, if: proc {
+ current_user.role_finance?
+ }
+ subnav.item :finance_home, I18n.t('navigation.finances.bank_accounts'), finance_bank_accounts_path, if: proc {
+ current_user.role_finance?
+ }
+ subnav.item :accounts, I18n.t('navigation.finances.accounts'), finance_ordergroups_path, if: proc {
+ current_user.role_finance?
+ }
+ subnav.item :balancing, I18n.t('navigation.finances.balancing'), finance_order_index_path, if: proc {
+ current_user.role_finance?
+ }
subnav.item :invoices, I18n.t('navigation.finances.invoices'), finance_invoices_path
end
- primary.item :admin, I18n.t('navigation.admin.title'), '#', if: Proc.new { current_user.role_admin? } do |subnav|
+ primary.item :admin, I18n.t('navigation.admin.title'), '#', if: proc { current_user.role_admin? } do |subnav|
subnav.item :admin_home, I18n.t('navigation.admin.home'), admin_root_path
subnav.item :users, I18n.t('navigation.admin.users'), admin_users_path
subnav.item :ordergroups, I18n.t('navigation.admin.ordergroups'), admin_ordergroups_path
subnav.item :workgroups, I18n.t('navigation.admin.workgroups'), admin_workgroups_path
- subnav.item :mail_delivery_status, I18n.t('navigation.admin.mail_delivery_status'), admin_mail_delivery_status_index_path
+ subnav.item :mail_delivery_status, I18n.t('navigation.admin.mail_delivery_status'),
+ admin_mail_delivery_status_index_path
subnav.item :finances, I18n.t('navigation.admin.finance'), admin_finances_path
subnav.item :config, I18n.t('navigation.admin.config'), admin_config_path
end
diff --git a/config/puma.rb b/config/puma.rb
index 4f4fd1cf..609df0ad 100644
--- a/config/puma.rb
+++ b/config/puma.rb
@@ -4,19 +4,19 @@
# the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum; this matches the default thread size of Active Record.
#
-threads_count = ENV.fetch("RAILS_MAX_THREADS") { 1 }
+threads_count = ENV.fetch('RAILS_MAX_THREADS') { 1 }
threads threads_count, threads_count
# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
-port ENV.fetch("PORT") { 3000 }
+port ENV.fetch('PORT') { 3000 }
# Bind automatically to all systemd activated sockets
bind_to_activated_sockets
# Specifies the `environment` that Puma will run in.
#
-environment ENV.fetch("RAILS_ENV") { "development" }
+environment ENV.fetch('RAILS_ENV') { 'development' }
# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked webserver processes. If using threads and workers together
@@ -24,7 +24,7 @@ environment ENV.fetch("RAILS_ENV") { "development" }
# Workers do not work on JRuby or Windows (both of which do not support
# processes).
#
-workers ENV.fetch("WEB_CONCURRENCY") { 8 }
+workers ENV.fetch('WEB_CONCURRENCY') { 8 }
# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
diff --git a/config/routes.rb b/config/routes.rb
index 764dcab0..8fea34b0 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -2,11 +2,11 @@
Rails.application.routes.draw do
mount Rswag::Ui::Engine => '/api-docs'
mount Rswag::Api::Engine => '/api-docs'
- get "order_comments/new"
+ get 'order_comments/new'
- get "comments/new"
+ get 'comments/new'
- get "sessions/new"
+ get 'sessions/new'
root to: 'sessions#redirect_to_foodcoop', as: nil
@@ -24,8 +24,8 @@ Rails.application.routes.draw do
post '/login/reset_password' => 'login#reset_password', as: :reset_password
get '/login/new_password' => 'login#new_password', as: :new_password
patch '/login/update_password' => 'login#update_password', as: :update_password
- match '/login/accept_invitation/:token' => 'login#accept_invitation', as: :accept_invitation, via: [:get, :post]
- resources :sessions, only: [:new, :create, :destroy]
+ match '/login/accept_invitation/:token' => 'login#accept_invitation', as: :accept_invitation, via: %i[get post]
+ resources :sessions, only: %i[new create destroy]
get '/foodcoop.css' => 'styles#foodcoop', as: 'foodcoop_css'
@@ -65,11 +65,11 @@ Rails.application.routes.draw do
resources :group_order_articles
- resources :order_comments, only: [:new, :create]
+ resources :order_comments, only: %i[new create]
############ Foodcoop orga
- resources :invites, only: [:new, :create]
+ resources :invites, only: %i[new create]
resources :tasks do
collection do
@@ -91,7 +91,7 @@ Rails.application.routes.draw do
resources :ordergroups, only: [:index]
- resources :workgroups, only: [:index, :edit, :update]
+ resources :workgroups, only: %i[index edit update]
end
########### Article management
@@ -175,7 +175,7 @@ Rails.application.routes.draw do
get :unpaid, on: :collection
end
- resources :links, controller: 'financial_links', only: [:create, :show] do
+ resources :links, controller: 'financial_links', only: %i[create show] do
collection do
get :incomplete
end
@@ -185,8 +185,10 @@ Rails.application.routes.draw do
delete 'bank_transactions/:bank_transaction', action: 'remove_bank_transaction', as: 'remove_bank_transaction'
get :index_financial_transaction
- put 'financial_transactions/:financial_transaction', action: 'add_financial_transaction', as: 'add_financial_transaction'
- delete 'financial_transactions/:financial_transaction', action: 'remove_financial_transaction', as: 'remove_financial_transaction'
+ put 'financial_transactions/:financial_transaction', action: 'add_financial_transaction',
+ as: 'add_financial_transaction'
+ delete 'financial_transactions/:financial_transaction', action: 'remove_financial_transaction',
+ as: 'remove_financial_transaction'
get :index_invoice
put 'invoices/:invoice', action: 'add_invoice', as: 'add_invoice'
@@ -200,12 +202,14 @@ Rails.application.routes.draw do
resources :ordergroups, only: [:index] do
resources :financial_transactions, as: :transactions
end
- resources :financial_transactions, as: :foodcoop_financial_transactions, path: 'foodcoop/financial_transactions', only: [:index, :new, :create]
+ resources :financial_transactions, as: :foodcoop_financial_transactions, path: 'foodcoop/financial_transactions',
+ only: %i[index new create]
get :transactions, controller: :financial_transactions, action: :index_collection
delete 'transactions/:id', controller: :financial_transactions, action: :destroy, as: :transaction
get 'transactions/new_collection' => 'financial_transactions#new_collection', as: 'new_transaction_collection'
- post 'transactions/create_collection' => 'financial_transactions#create_collection', as: 'create_transaction_collection'
+ post 'transactions/create_collection' => 'financial_transactions#create_collection',
+ as: 'create_transaction_collection'
resources :bank_accounts, only: [:index] do
member do
@@ -217,7 +221,7 @@ Rails.application.routes.draw do
resources :bank_transactions, as: :transactions
end
- resources :bank_transactions, only: [:index, :show]
+ resources :bank_transactions, only: %i[index show]
end
########### Administration
@@ -251,11 +255,11 @@ Rails.application.routes.draw do
get :memberships, on: :member
end
- resources :mail_delivery_status, only: [:index, :show, :destroy] do
+ resources :mail_delivery_status, only: %i[index show destroy] do
delete :index, on: :collection, action: :destroy_all
end
- resource :config, only: [:show, :update] do
+ resource :config, only: %i[show update] do
get :list
end
end
@@ -270,23 +274,23 @@ Rails.application.routes.draw do
namespace :user do
root to: 'users#show'
get :financial_overview, to: 'ordergroup#financial_overview'
- resources :financial_transactions, only: [:index, :show, :create]
+ resources :financial_transactions, only: %i[index show create]
resources :group_order_articles
end
- resources :financial_transaction_classes, only: [:index, :show]
- resources :financial_transaction_types, only: [:index, :show]
- resources :financial_transactions, only: [:index, :show]
- resources :orders, only: [:index, :show]
- resources :order_articles, only: [:index, :show]
+ resources :financial_transaction_classes, only: %i[index show]
+ resources :financial_transaction_types, only: %i[index show]
+ resources :financial_transactions, only: %i[index show]
+ resources :orders, only: %i[index show]
+ resources :order_articles, only: %i[index show]
resources :group_order_articles
- resources :article_categories, only: [:index, :show]
+ resources :article_categories, only: %i[index show]
end
end
############## Feedback
- resource :feedback, only: [:new, :create], controller: 'feedback'
+ resource :feedback, only: %i[new create], controller: 'feedback'
############## The rest
diff --git a/config/schedule.rb b/config/schedule.rb
index f22c1348..72e3cbcc 100644
--- a/config/schedule.rb
+++ b/config/schedule.rb
@@ -2,22 +2,22 @@
# Learn more: http://github.com/javan/whenever
# Upcoming tasks notifier
-every :day, :at => '7:20 am' do
- rake "multicoops:run TASK=foodsoft:notify_upcoming_tasks"
- rake "multicoops:run TASK=foodsoft:notify_users_of_weekly_task"
+every :day, at: '7:20 am' do
+ rake 'multicoops:run TASK=foodsoft:notify_upcoming_tasks'
+ rake 'multicoops:run TASK=foodsoft:notify_users_of_weekly_task'
end
# Import and assign bank transactions
-every :weekday, :at => %w(5:56am 6:04pm) do
- rake "multicoops:run TASK=foodsoft:import_and_assign_bank_transactions"
+every :weekday, at: %w[5:56am 6:04pm] do
+ rake 'multicoops:run TASK=foodsoft:import_and_assign_bank_transactions'
end
# Weekly taks
-every :sunday, :at => '7:14 am' do
- rake "multicoops:run TASK=foodsoft:create_upcoming_periodic_tasks"
+every :sunday, at: '7:14 am' do
+ rake 'multicoops:run TASK=foodsoft:create_upcoming_periodic_tasks'
end
# Finish ended orders
every 1.minute do
- rake "multicoops:run TASK=foodsoft:finish_ended_orders"
+ rake 'multicoops:run TASK=foodsoft:finish_ended_orders'
end
diff --git a/config/spring.rb b/config/spring.rb
index c9119b40..9fa7863f 100644
--- a/config/spring.rb
+++ b/config/spring.rb
@@ -1,6 +1,6 @@
-%w(
+%w[
.ruby-version
.rbenv-vars
tmp/restart.txt
tmp/caching-dev.txt
-).each { |path| Spring.watch(path) }
+].each { |path| Spring.watch(path) }
diff --git a/db/migrate/001_create_users.rb b/db/migrate/001_create_users.rb
index ab4a560a..e530bdbf 100644
--- a/db/migrate/001_create_users.rb
+++ b/db/migrate/001_create_users.rb
@@ -4,30 +4,31 @@ class CreateUsers < ActiveRecord::Migration[4.2]
def self.up
create_table :users do |t|
- t.column :nick, :string, :null => false
- t.column :password_hash, :string, :null => false
- t.column :password_salt, :string, :null => false
- t.column :first_name, :string, :null => false
- t.column :last_name, :string, :null => false
- t.column :email, :string, :null => false
+ t.column :nick, :string, null: false
+ t.column :password_hash, :string, null: false
+ t.column :password_salt, :string, null: false
+ t.column :first_name, :string, null: false
+ t.column :last_name, :string, null: false
+ t.column :email, :string, null: false
t.column :phone, :string
t.column :address, :string
- t.column :created_on, :timestamp, :null => false
+ t.column :created_on, :timestamp, null: false
end
- add_index(:users, :nick, :unique => true)
- add_index(:users, :email, :unique => true)
+ add_index(:users, :nick, unique: true)
+ add_index(:users, :email, unique: true)
# Create the default admin user...
puts "Creating user #{USER_ADMIN} with password 'secret'..."
- user = User.new(:nick => USER_ADMIN, :first_name => "Anton", :last_name => "Administrator", :email => "admin@foo.test")
- user.password = "secret"
- raise "Failed!" unless user.save && User.find_by_nick(USER_ADMIN).has_password("secret")
+ user = User.new(nick: USER_ADMIN, first_name: 'Anton', last_name: 'Administrator',
+ email: 'admin@foo.test')
+ user.password = 'secret'
+ raise 'Failed!' unless user.save && User.find_by_nick(USER_ADMIN).has_password('secret')
# Create a normal user...
puts "Creating user #{USER_TEST} with password 'foobar'..."
- user = User.new(:nick => USER_TEST, :first_name => "Tim", :last_name => "Tester", :email => "test@foo.test")
- user.password = "foobar"
- raise "Failed!" unless user.save && User.find_by_nick(USER_TEST).has_password("foobar")
+ user = User.new(nick: USER_TEST, first_name: 'Tim', last_name: 'Tester', email: 'test@foo.test')
+ user.password = 'foobar'
+ raise 'Failed!' unless user.save && User.find_by_nick(USER_TEST).has_password('foobar')
end
def self.down
diff --git a/db/migrate/002_create_groups.rb b/db/migrate/002_create_groups.rb
index bb7427b9..31104a1e 100644
--- a/db/migrate/002_create_groups.rb
+++ b/db/migrate/002_create_groups.rb
@@ -4,47 +4,48 @@ class CreateGroups < ActiveRecord::Migration[4.2]
def self.up
create_table :groups do |t|
- t.column :type, :string, :null => false # inheritance, types: Group, OrderGroup
- t.column :name, :string, :null => false
+ t.column :type, :string, null: false # inheritance, types: Group, OrderGroup
+ t.column :name, :string, null: false
t.column :description, :string
t.column :actual_size, :integer # OrderGroup column
- t.column :account_balance, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0 # OrderGroup column
+ t.column :account_balance, :decimal, precision: 8, scale: 2, null: false, default: 0 # OrderGroup column
t.column :account_updated, :timestamp # OrderGroup column
- t.column :created_on, :timestamp, :null => false
- t.column :role_admin, :boolean, :default => false, :null => false
+ t.column :created_on, :timestamp, null: false
+ t.column :role_admin, :boolean, default: false, null: false
end
- add_index(:groups, :name, :unique => true)
+ add_index(:groups, :name, unique: true)
create_table :memberships do |t|
- t.column :group_id, :integer, :null => false
- t.column :user_id, :integer, :null => false
+ t.column :group_id, :integer, null: false
+ t.column :user_id, :integer, null: false
end
- add_index(:memberships, [:user_id, :group_id], :unique => true)
+ add_index(:memberships, %i[user_id group_id], unique: true)
# Create the default "Administrators" group...
puts "Creating group #{GROUP_ADMIN}..."
- Group.create(:name => GROUP_ADMIN, :description => "System administrators.", :role_admin => true)
+ Group.create(name: GROUP_ADMIN, description: 'System administrators.', role_admin: true)
raise 'Failed!' unless administrators = Group.find_by_name(GROUP_ADMIN)
# Create a sample order group...
puts "Creating order group #{GROUP_ORDER}..."
- ordergroup = OrderGroup.create!(:name => GROUP_ORDER, :description => "A sample order group created by the migration.", :actual_size => 1, :account_updated => Time.now)
- raise "Wrong type created!" unless ordergroup.is_a?(OrderGroup)
+ ordergroup = OrderGroup.create!(name: GROUP_ORDER,
+ description: 'A sample order group created by the migration.', actual_size: 1, account_updated: Time.now)
+ raise 'Wrong type created!' unless ordergroup.is_a?(OrderGroup)
# Get the admin user and join the admin group...
raise "User #{CreateUsers::USER_ADMIN} not found, cannot join group '#{administrators.name}'!" unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
puts "Joining #{CreateUsers::USER_ADMIN} user to new '#{administrators.name}' group as a group admin..."
- membership = Membership.create(:group => administrators, :user => admin)
- raise "Failed!" unless admin.memberships.first == membership
+ membership = Membership.create(group: administrators, user: admin)
+ raise 'Failed!' unless admin.memberships.first == membership
raise "User #{CreateUsers::USER_ADMIN} has no admin_roles" unless admin.role_admin?
# Get the test user and join the order group...
raise "User #{CreateUsers::USER_TEST} not found, cannot join group '#{ordergroup.name}'!" unless test = User.find_by_nick(CreateUsers::USER_TEST)
puts "Joining #{CreateUsers::USER_TEST} user to new '#{ordergroup.name}' group as a group admin..."
- membership = Membership.create(:group => ordergroup, :user => test)
- raise "Failed!" unless test.memberships.first == membership
+ membership = Membership.create(group: ordergroup, user: test)
+ raise 'Failed!' unless test.memberships.first == membership
end
def self.down
diff --git a/db/migrate/003_create_suppliers.rb b/db/migrate/003_create_suppliers.rb
index 2b38c9c1..72e148b8 100644
--- a/db/migrate/003_create_suppliers.rb
+++ b/db/migrate/003_create_suppliers.rb
@@ -2,17 +2,17 @@ class CreateSuppliers < ActiveRecord::Migration[4.2]
SUPPLIER_SAMPLE = 'Sample Supplier'
def self.up
- add_column :groups, :role_suppliers, :boolean, :default => false, :null => false
+ add_column :groups, :role_suppliers, :boolean, default: false, null: false
Group.reset_column_information
puts "Give #{CreateGroups::GROUP_ADMIN} the role supplier .."
- raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_suppliers, true)
- raise "Cannot find admin user!" unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
- raise "Failed to enable role_suppliers with admin user!" unless admin.role_suppliers?
+ raise 'Failed' unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_suppliers, true)
+ raise 'Cannot find admin user!' unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
+ raise 'Failed to enable role_suppliers with admin user!' unless admin.role_suppliers?
create_table :suppliers do |t|
- t.column :name, :string, :null => false
- t.column :address, :string, :null => false
- t.column :phone, :string, :null => false
+ t.column :name, :string, null: false
+ t.column :address, :string, null: false
+ t.column :phone, :string, null: false
t.column :phone2, :string
t.column :fax, :string
t.column :email, :string
@@ -23,12 +23,12 @@ class CreateSuppliers < ActiveRecord::Migration[4.2]
t.column :order_howto, :string
t.column :note, :string
end
- add_index(:suppliers, :name, :unique => true)
+ add_index(:suppliers, :name, unique: true)
# Create sample supplier...
puts "Creating sample supplier '#{SUPPLIER_SAMPLE}'..."
- Supplier.create(:name => SUPPLIER_SAMPLE, :address => "Organic City", :phone => "0123-555555")
- raise "Failed!" unless supplier = Supplier.find_by_name(SUPPLIER_SAMPLE)
+ Supplier.create(name: SUPPLIER_SAMPLE, address: 'Organic City', phone: '0123-555555')
+ raise 'Failed!' unless supplier = Supplier.find_by_name(SUPPLIER_SAMPLE)
end
def self.down
diff --git a/db/migrate/004_create_article_meta.rb b/db/migrate/004_create_article_meta.rb
index eb81f550..36c22f65 100644
--- a/db/migrate/004_create_article_meta.rb
+++ b/db/migrate/004_create_article_meta.rb
@@ -5,24 +5,24 @@ class CreateArticleMeta < ActiveRecord::Migration[4.2]
def self.up
# Add user roles...
- add_column :groups, :role_article_meta, :boolean, :default => false, :null => false
+ add_column :groups, :role_article_meta, :boolean, default: false, null: false
Group.reset_column_information
puts "Give #{CreateGroups::GROUP_ADMIN} the role article_meta .."
- raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_article_meta, true)
+ raise 'Failed' unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_article_meta, true)
raise 'Cannot find admin user!' unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
raise 'Failed to enable role_article_meta with admin user!' unless admin.role_article_meta?
# ArticleCategories
create_table :article_categories do |t|
- t.column :name, :string, :null => false
+ t.column :name, :string, null: false
t.column :description, :string
end
- add_index(:article_categories, :name, :unique => true)
+ add_index(:article_categories, :name, unique: true)
# Create sample category...
puts "Creating sample article category '#{CATEGORY_SAMPLE}'..."
- ArticleCategory.create(:name => CATEGORY_SAMPLE, :description => "This is just a sample article category.")
- raise "Failed!" unless category = ArticleCategory.find_by_name(CATEGORY_SAMPLE)
+ ArticleCategory.create(name: CATEGORY_SAMPLE, description: 'This is just a sample article category.')
+ raise 'Failed!' unless category = ArticleCategory.find_by_name(CATEGORY_SAMPLE)
end
def self.down
diff --git a/db/migrate/005_create_financial_transactions.rb b/db/migrate/005_create_financial_transactions.rb
index 0b1cef89..7ca0e83c 100644
--- a/db/migrate/005_create_financial_transactions.rb
+++ b/db/migrate/005_create_financial_transactions.rb
@@ -2,19 +2,19 @@ class CreateFinancialTransactions < ActiveRecord::Migration[4.2]
def self.up
# Create Financial Transactions
create_table :financial_transactions do |t|
- t.column :order_group_id, :integer, :null => false
- t.column :amount, :decimal, :precision => 8, :scale => 2, :null => false
- t.column :note, :text, :null => false
- t.column :user_id, :integer, :null => false
- t.column :created_on, :datetime, :null => false
+ t.column :order_group_id, :integer, null: false
+ t.column :amount, :decimal, precision: 8, scale: 2, null: false
+ t.column :note, :text, null: false
+ t.column :user_id, :integer, null: false
+ t.column :created_on, :datetime, null: false
end
# add column for the finance role
puts 'add column in "groups" for the finance role'
- add_column :groups, :role_finance, :boolean, :default => false, :null => false
+ add_column :groups, :role_finance, :boolean, default: false, null: false
Group.reset_column_information
puts "Give #{CreateGroups::GROUP_ADMIN} the role finance .."
- raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_finance, true)
+ raise 'Failed' unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_finance, true)
raise 'Cannot find admin user!' unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
raise 'Failed to enable role_finance with admin user!' unless admin.role_finance?
@@ -27,8 +27,8 @@ class CreateFinancialTransactions < ActiveRecord::Migration[4.2]
ordergroup.addFinancialTransaction(i, "Sample Transaction Nr. #{i}", admin)
balance += i
end
- raise "Failed!" unless financial_transaction = FinancialTransaction.find_by_note('Sample Transaction Nr. 1')
- raise "Failed to update account_balance!" unless OrderGroup.find(ordergroup.id).account_balance == balance
+ raise 'Failed!' unless financial_transaction = FinancialTransaction.find_by_note('Sample Transaction Nr. 1')
+ raise 'Failed to update account_balance!' unless OrderGroup.find(ordergroup.id).account_balance == balance
end
def self.down
diff --git a/db/migrate/006_create_articles.rb b/db/migrate/006_create_articles.rb
index 9a43c8dc..fd11e659 100644
--- a/db/migrate/006_create_articles.rb
+++ b/db/migrate/006_create_articles.rb
@@ -1,17 +1,17 @@
class CreateArticles < ActiveRecord::Migration[4.2]
- SAMPLE_ARTICLE_NAMES = ['banana', 'kiwi', 'strawberry']
+ SAMPLE_ARTICLE_NAMES = %w[banana kiwi strawberry]
def self.up
create_table :articles do |t|
- t.column :name, :string, :null => false
- t.column :supplier_id, :integer, :null => false
- t.column :article_category_id, :integer, :null => false
- t.column :unit, :string, :null => false
+ t.column :name, :string, null: false
+ t.column :supplier_id, :integer, null: false
+ t.column :article_category_id, :integer, null: false
+ t.column :unit, :string, null: false
t.column :note, :string
- t.column :availability, :boolean, :default => true, :null => false
+ t.column :availability, :boolean, default: true, null: false
t.column :current_price_id, :integer
end
- add_index(:articles, :name, :unique => true)
+ add_index(:articles, :name, unique: true)
# Create 30 sample articles...
puts "Create 3 articles of the supplier '#{CreateSuppliers::SUPPLIER_SAMPLE}'..."
@@ -20,14 +20,14 @@ class CreateArticles < ActiveRecord::Migration[4.2]
SAMPLE_ARTICLE_NAMES.each do |a|
puts 'Create Article ' + a
- Article.create(:name => a,
- :supplier => supplier,
- :article_category => category,
- :unit => '500g',
- :note => 'delicious',
- :availability => true)
+ Article.create(name: a,
+ supplier: supplier,
+ article_category: category,
+ unit: '500g',
+ note: 'delicious',
+ availability: true)
end
- raise "Failed!" unless Article.find(:all).length == SAMPLE_ARTICLE_NAMES.length
+ raise 'Failed!' unless Article.find(:all).length == SAMPLE_ARTICLE_NAMES.length
end
def self.down
diff --git a/db/migrate/007_create_article_prices.rb b/db/migrate/007_create_article_prices.rb
index ed5b0793..56167a1a 100644
--- a/db/migrate/007_create_article_prices.rb
+++ b/db/migrate/007_create_article_prices.rb
@@ -1,13 +1,13 @@
class CreateArticlePrices < ActiveRecord::Migration[4.2]
def self.up
create_table :article_prices do |t|
- t.column :article_id, :int, :null => false
- t.column :clear_price, :decimal, :precision => 8, :scale => 2, :null => false
- t.column :gross_price, :decimal, :precision => 8, :scale => 2, :null => false # gross price, incl. vat, refund and price markup
- t.column :tax, :float, :null => false, :default => 0
- t.column :refund, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
+ t.column :article_id, :int, null: false
+ t.column :clear_price, :decimal, precision: 8, scale: 2, null: false
+ t.column :gross_price, :decimal, precision: 8, scale: 2, null: false # gross price, incl. vat, refund and price markup
+ t.column :tax, :float, null: false, default: 0
+ t.column :refund, :decimal, precision: 8, scale: 2, null: false, default: 0
t.column :updated_on, :datetime
- t.column :unit_quantity, :int, :default => 1, :null => false
+ t.column :unit_quantity, :int, default: 1, null: false
t.column :order_number, :string
end
add_index(:article_prices, :article_id)
@@ -18,11 +18,11 @@ class CreateArticlePrices < ActiveRecord::Migration[4.2]
puts 'Create Price for article ' + a
raise "article #{a} not found!" unless article = Article.find_by_name(a)
- new_price = ArticlePrice.new(:clear_price => rand(4) + 1,
- :tax => 7.0,
- :refund => 0,
- :unit_quantity => rand(10) + 1,
- :order_number => rand(9999))
+ new_price = ArticlePrice.new(clear_price: rand(1..4),
+ tax: 7.0,
+ refund: 0,
+ unit_quantity: rand(1..10),
+ order_number: rand(9999))
article.add_price(new_price)
raise 'Failed!' unless ArticlePrice.find_by_article_id(article.id)
end
diff --git a/db/migrate/008_create_orders.rb b/db/migrate/008_create_orders.rb
index 6eb8c921..4e138899 100644
--- a/db/migrate/008_create_orders.rb
+++ b/db/migrate/008_create_orders.rb
@@ -4,28 +4,28 @@ class CreateOrders < ActiveRecord::Migration[4.2]
def self.up
# Order role
- add_column :groups, :role_orders, :boolean, :default => false, :null => false
+ add_column :groups, :role_orders, :boolean, default: false, null: false
Group.reset_column_information
puts "Give #{CreateGroups::GROUP_ADMIN} the role finance .."
- raise "Failed" unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_orders, true)
+ raise 'Failed' unless Group.find_by_name(CreateGroups::GROUP_ADMIN).update_attribute(:role_orders, true)
raise 'Cannot find admin user!' unless admin = User.find_by_nick(CreateUsers::USER_ADMIN)
raise 'Failed to enable role_orders with admin user!' unless admin.role_orders?
# Create the default "Order" group...
puts 'Creating group "Orders"...'
- Group.create(:name => GROUP_ORDER, :description => "working group for managing orders", :role_orders => true)
- raise "Failed!" unless Group.find_by_name(GROUP_ORDER)
+ Group.create(name: GROUP_ORDER, description: 'working group for managing orders', role_orders: true)
+ raise 'Failed!' unless Group.find_by_name(GROUP_ORDER)
# Order
create_table :orders do |t|
- t.column :name, :string, :null => false
- t.column :supplier_id, :integer, :null => false
- t.column :starts, :datetime, :null => false
+ t.column :name, :string, null: false
+ t.column :supplier_id, :integer, null: false
+ t.column :starts, :datetime, null: false
t.column :ends, :datetime
t.column :note, :string
- t.column :finished, :boolean, :default => false, :null => false
- t.column :booked, :boolean, :null => false, :default => false
- t.column :lock_version, :integer, :null => false, :default => 0
+ t.column :finished, :boolean, default: false, null: false
+ t.column :booked, :boolean, null: false, default: false
+ t.column :lock_version, :integer, null: false, default: 0
t.column :updated_by_user_id, :integer
end
add_index(:orders, :starts)
@@ -35,74 +35,77 @@ class CreateOrders < ActiveRecord::Migration[4.2]
puts "Creating order '#{ORDER_TEST}'..."
raise "Supplier '#{CreateSuppliers::SUPPLIER_SAMPLE}' not found!" unless supplier = Supplier.find_by_name(CreateSuppliers::SUPPLIER_SAMPLE)
- Order.create(:name => ORDER_TEST, :supplier => supplier, :starts => Time.now)
+ Order.create(name: ORDER_TEST, supplier: supplier, starts: Time.now)
raise 'Creating test order failed!' unless order = Order.find_by_name(ORDER_TEST)
# OrderArticle
create_table :order_articles do |t|
- t.column :order_id, :integer, :null => false
- t.column :article_id, :integer, :null => false
- t.column :quantity, :integer, :null => false, :default => 0
- t.column :tolerance, :integer, :null => false, :default => 0
- t.column :units_to_order, :integer, :null => false, :default => 0
- t.column :lock_version, :integer, :null => false, :default => 0
+ t.column :order_id, :integer, null: false
+ t.column :article_id, :integer, null: false
+ t.column :quantity, :integer, null: false, default: 0
+ t.column :tolerance, :integer, null: false, default: 0
+ t.column :units_to_order, :integer, null: false, default: 0
+ t.column :lock_version, :integer, null: false, default: 0
end
- add_index(:order_articles, [:order_id, :article_id], :unique => true)
+ add_index(:order_articles, %i[order_id article_id], unique: true)
puts 'Adding articles to the order...'
- CreateArticles::SAMPLE_ARTICLE_NAMES.each { |a|
+ CreateArticles::SAMPLE_ARTICLE_NAMES.each do |a|
puts "Article #{a}..."
raise 'Article not found!' unless article = Article.find_by_name(a)
raise 'No price found for article!' unless price = article.current_price
- OrderArticle.create(:order => order, :article => article)
+ OrderArticle.create(order: order, article: article)
raise 'Creating OrderArticle failed!' unless OrderArticle.find_by_order_id_and_article_id(order.id, article.id)
- }
+ end
raise 'Creating OrderArticles failed!' unless order.articles.size == CreateArticles::SAMPLE_ARTICLE_NAMES.length
# GroupOrder
create_table :group_orders do |t|
- t.column :order_group_id, :integer, :null => false
- t.column :order_id, :integer, :null => false
- t.column :price, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
- t.column :lock_version, :integer, :null => false, :default => 0
- t.column :updated_on, :timestamp, :null => false
- t.column :updated_by_user_id, :integer, :null => false
+ t.column :order_group_id, :integer, null: false
+ t.column :order_id, :integer, null: false
+ t.column :price, :decimal, precision: 8, scale: 2, null: false, default: 0
+ t.column :lock_version, :integer, null: false, default: 0
+ t.column :updated_on, :timestamp, null: false
+ t.column :updated_by_user_id, :integer, null: false
end
- add_index(:group_orders, [:order_group_id, :order_id], :unique => true)
+ add_index(:group_orders, %i[order_group_id order_id], unique: true)
puts 'Adding group order...'
raise "Cannot find user #{CreateUsers::USER_TEST}" unless user = User.find_by_nick(CreateUsers::USER_TEST)
raise "Cannot find OrderGroup '#{CreateGroups::GROUP_ORDER}'!" unless orderGroup = OrderGroup.find_by_name(CreateGroups::GROUP_ORDER)
- GroupOrder.create(:order_group => orderGroup, :order => order, :price => 0, :updated_by => user)
- raise 'Retrieving group order failed!' unless groupOrder = orderGroup.group_orders.find(:first, :conditions => "order_id = #{order.id}")
+ GroupOrder.create(order_group: orderGroup, order: order, price: 0, updated_by: user)
+ raise 'Retrieving group order failed!' unless groupOrder = orderGroup.group_orders.find(:first,
+ conditions: "order_id = #{order.id}")
# GroupOrderArticles
create_table :group_order_articles do |t|
- t.column :group_order_id, :integer, :null => false
- t.column :order_article_id, :integer, :null => false
- t.column :quantity, :integer, :null => false
- t.column :tolerance, :integer, :null => false
- t.column :updated_on, :timestamp, :null => false
+ t.column :group_order_id, :integer, null: false
+ t.column :order_article_id, :integer, null: false
+ t.column :quantity, :integer, null: false
+ t.column :tolerance, :integer, null: false
+ t.column :updated_on, :timestamp, null: false
end
- add_index(:group_order_articles, [:group_order_id, :order_article_id], :unique => true, :name => "goa_index")
+ add_index(:group_order_articles, %i[group_order_id order_article_id], unique: true, name: 'goa_index')
# GroupOrderArticleQuantity
create_table :group_order_article_quantities do |t|
- t.column :group_order_article_id, :int, :null => false
- t.column :quantity, :int, :default => 0
- t.column :tolerance, :int, :default => 0
- t.column :created_on, :timestamp, :null => false
+ t.column :group_order_article_id, :int, null: false
+ t.column :quantity, :int, default: 0
+ t.column :tolerance, :int, default: 0
+ t.column :created_on, :timestamp, null: false
end
puts 'Adding articles to group order...'
- order.order_articles.each { |orderArticle|
+ order.order_articles.each do |orderArticle|
puts "Article #{orderArticle.article.name}..."
- GroupOrderArticle.create(:group_order => groupOrder, :order_article => orderArticle, :quantity => 0, :tolerance => 0)
- raise 'Failed to create order!' unless article = GroupOrderArticle.find(:first, :conditions => "group_order_id = #{groupOrder.id} AND order_article_id = #{orderArticle.id}")
+ GroupOrderArticle.create(group_order: groupOrder, order_article: orderArticle, quantity: 0,
+ tolerance: 0)
+ raise 'Failed to create order!' unless article = GroupOrderArticle.find(:first,
+ conditions: "group_order_id = #{groupOrder.id} AND order_article_id = #{orderArticle.id}")
- article.updateQuantities(rand(6) + 1, rand(4) + 1)
- }
+ article.updateQuantities(rand(1..6), rand(1..4))
+ end
raise 'Failed to create orders!' unless groupOrder.order_articles.size == order.order_articles.size
groupOrder.updatePrice
diff --git a/db/migrate/009_create_order_results.rb b/db/migrate/009_create_order_results.rb
index 20b75193..6b1cc65a 100644
--- a/db/migrate/009_create_order_results.rb
+++ b/db/migrate/009_create_order_results.rb
@@ -1,32 +1,32 @@
class CreateOrderResults < ActiveRecord::Migration[4.2]
def self.up
create_table :group_order_results do |t|
- t.column :order_id, :int, :null => false
- t.column :group_name, :string, :null => false
- t.column :price, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
+ t.column :order_id, :int, null: false
+ t.column :group_name, :string, null: false
+ t.column :price, :decimal, precision: 8, scale: 2, null: false, default: 0
end
- add_index(:group_order_results, [:group_name, :order_id], :unique => true)
+ add_index(:group_order_results, %i[group_name order_id], unique: true)
create_table :order_article_results do |t|
- t.column :order_id, :int, :null => false
- t.column :name, :string, :null => false
- t.column :unit, :string, :null => false
+ t.column :order_id, :int, null: false
+ t.column :name, :string, null: false
+ t.column :unit, :string, null: false
t.column :note, :string
- t.column :clear_price, :decimal, :precision => 8, :scale => 2, :null => false
- t.column :gross_price, :decimal, :precision => 8, :scale => 2, :null => false
- t.column :tax, :float, :null => false, :default => 0
- t.column :refund, :decimal, :precision => 8, :scale => 2
- t.column :fc_markup, :float, :null => false
+ t.column :clear_price, :decimal, precision: 8, scale: 2, null: false
+ t.column :gross_price, :decimal, precision: 8, scale: 2, null: false
+ t.column :tax, :float, null: false, default: 0
+ t.column :refund, :decimal, precision: 8, scale: 2
+ t.column :fc_markup, :float, null: false
t.column :order_number, :string
- t.column :unit_quantity, :int, :null => false
- t.column :units_to_order, :int, :null => false
+ t.column :unit_quantity, :int, null: false
+ t.column :units_to_order, :int, null: false
end
add_index(:order_article_results, :order_id)
create_table :group_order_article_results do |t|
- t.column :order_article_result_id, :int, :null => false
- t.column :group_order_result_id, :int, :null => false
- t.column :quantity, :int, :null => false
+ t.column :order_article_result_id, :int, null: false
+ t.column :group_order_result_id, :int, null: false
+ t.column :quantity, :int, null: false
t.column :tolerance, :int
end
add_index(:group_order_article_results, :order_article_result_id)
diff --git a/db/migrate/011_create_comments.rb b/db/migrate/011_create_comments.rb
index 28fc0428..55148d08 100644
--- a/db/migrate/011_create_comments.rb
+++ b/db/migrate/011_create_comments.rb
@@ -1,16 +1,16 @@
class CreateComments < ActiveRecord::Migration[4.2]
def self.up
- create_table :comments, :force => true do |t|
- t.column :title, :string, :limit => 50, :default => ""
- t.column :comment, :string, :default => ""
- t.column :created_at, :datetime, :null => false
- t.column :commentable_id, :integer, :default => 0, :null => false
- t.column :commentable_type, :string, :limit => 15,
- :default => "", :null => false
- t.column :user_id, :integer, :default => 0, :null => false
+ create_table :comments, force: true do |t|
+ t.column :title, :string, limit: 50, default: ''
+ t.column :comment, :string, default: ''
+ t.column :created_at, :datetime, null: false
+ t.column :commentable_id, :integer, default: 0, null: false
+ t.column :commentable_type, :string, limit: 15,
+ default: '', null: false
+ t.column :user_id, :integer, default: 0, null: false
end
- add_index :comments, ["user_id"], :name => "fk_comments_user"
+ add_index :comments, ['user_id'], name: 'fk_comments_user'
end
def self.down
diff --git a/db/migrate/012_create_order_clearing.rb b/db/migrate/012_create_order_clearing.rb
index 1d3133fd..9ddb4ad3 100644
--- a/db/migrate/012_create_order_clearing.rb
+++ b/db/migrate/012_create_order_clearing.rb
@@ -1,8 +1,8 @@
class CreateOrderClearing < ActiveRecord::Migration[4.2]
def self.up
- add_column :orders, :invoice_amount, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
- add_column :orders, :refund, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
- add_column :orders, :refund_credit, :decimal, :precision => 8, :scale => 2, :null => false, :default => 0
+ add_column :orders, :invoice_amount, :decimal, precision: 8, scale: 2, null: false, default: 0
+ add_column :orders, :refund, :decimal, precision: 8, scale: 2, null: false, default: 0
+ add_column :orders, :refund_credit, :decimal, precision: 8, scale: 2, null: false, default: 0
add_column :orders, :invoice_number, :string
add_column :orders, :invoice_date, :string
end
diff --git a/db/migrate/013_add_messaging.rb b/db/migrate/013_add_messaging.rb
index 84ba8d6f..7f01b2dd 100644
--- a/db/migrate/013_add_messaging.rb
+++ b/db/migrate/013_add_messaging.rb
@@ -3,13 +3,13 @@ class AddMessaging < ActiveRecord::Migration[4.2]
# Table that holds the messages:
create_table :messages do |t|
t.column :sender_id, :integer
- t.column :recipient_id, :integer, :null => false
- t.column :recipients, :string, :null => false
- t.column :subject, :string, :null => false
- t.column :body, :text, :null => false
- t.column :read, :boolean, :null => false, :default => false
- t.column :email_state, :integer, :null => false
- t.column :created_on, :timestamp, :null => false
+ t.column :recipient_id, :integer, null: false
+ t.column :recipients, :string, null: false
+ t.column :subject, :string, null: false
+ t.column :body, :text, null: false
+ t.column :read, :boolean, null: false, default: false
+ t.column :email_state, :integer, null: false
+ t.column :created_on, :timestamp, null: false
end
add_index(:messages, :sender_id)
add_index(:messages, :recipient_id)
diff --git a/db/migrate/014_create_tasks.rb b/db/migrate/014_create_tasks.rb
index db878546..8872523e 100644
--- a/db/migrate/014_create_tasks.rb
+++ b/db/migrate/014_create_tasks.rb
@@ -1,26 +1,26 @@
class CreateTasks < ActiveRecord::Migration[4.2]
def self.up
create_table :tasks do |t|
- t.column :name, :string, :null => false
+ t.column :name, :string, null: false
t.column :description, :string
t.column :due_date, :date
- t.column :done, :boolean, :default => false
+ t.column :done, :boolean, default: false
t.column :group_id, :integer
- t.column :assigned, :boolean, :default => false
- t.column :created_on, :datetime, :null => false
- t.column :updated_on, :datetime, :null => false
+ t.column :assigned, :boolean, default: false
+ t.column :created_on, :datetime, null: false
+ t.column :updated_on, :datetime, null: false
end
add_index :tasks, :name
add_index :tasks, :due_date
create_table :assignments do |t|
- t.column :user_id, :integer, :null => false
- t.column :task_id, :integer, :null => false
- t.column :accepted, :boolean, :default => false
+ t.column :user_id, :integer, null: false
+ t.column :task_id, :integer, null: false
+ t.column :accepted, :boolean, default: false
end
- add_index :assignments, [:user_id, :task_id], :unique => true
+ add_index :assignments, %i[user_id task_id], unique: true
- add_column :groups, :weekly_task, :boolean, :default => false # if group has an job for every week
+ add_column :groups, :weekly_task, :boolean, default: false # if group has an job for every week
add_column :groups, :weekday, :integer # e.g. 1 means monday, 2 = tuesday an so on
add_column :groups, :task_name, :string # the name of the weekly task
add_column :groups, :task_description, :string
diff --git a/db/migrate/015_change_result_quantities.rb b/db/migrate/015_change_result_quantities.rb
index 23731334..56020eab 100644
--- a/db/migrate/015_change_result_quantities.rb
+++ b/db/migrate/015_change_result_quantities.rb
@@ -1,11 +1,11 @@
class ChangeResultQuantities < ActiveRecord::Migration[4.2]
def self.up
- change_column :group_order_article_results, :quantity, :decimal, :precision => 6, :scale => 3
- change_column :order_article_results, :units_to_order, :decimal, :precision => 6, :scale => 3, :null => false
+ change_column :group_order_article_results, :quantity, :decimal, precision: 6, scale: 3
+ change_column :order_article_results, :units_to_order, :decimal, precision: 6, scale: 3, null: false
end
def self.down
- change_column :group_order_article_results, :quantity, :integer, :null => false
- change_column :order_article_results, :units_to_order, :integer, :default => 0, :null => false
+ change_column :group_order_article_results, :quantity, :integer, null: false
+ change_column :order_article_results, :units_to_order, :integer, default: 0, null: false
end
end
diff --git a/db/migrate/018_create_invites.rb b/db/migrate/018_create_invites.rb
index cc8a1ebc..49c3edf9 100644
--- a/db/migrate/018_create_invites.rb
+++ b/db/migrate/018_create_invites.rb
@@ -1,11 +1,11 @@
class CreateInvites < ActiveRecord::Migration[4.2]
def self.up
create_table :invites do |t|
- t.column :token, :string, :null => false
- t.column :expires_at, :timestamp, :null => false
- t.column :group_id, :integer, :null => false
- t.column :user_id, :integer, :null => false
- t.column :email, :string, :null => false
+ t.column :token, :string, null: false
+ t.column :expires_at, :timestamp, null: false
+ t.column :group_id, :integer, null: false
+ t.column :user_id, :integer, null: false
+ t.column :email, :string, null: false
end
add_index :invites, :token
end
diff --git a/db/migrate/019_remove_uniqueness_of_article_name.rb b/db/migrate/019_remove_uniqueness_of_article_name.rb
index 7504a66a..50170cb8 100644
--- a/db/migrate/019_remove_uniqueness_of_article_name.rb
+++ b/db/migrate/019_remove_uniqueness_of_article_name.rb
@@ -1,11 +1,11 @@
class RemoveUniquenessOfArticleName < ActiveRecord::Migration[4.2]
def self.up
remove_index :articles, :name
- add_index :articles, [:name, :supplier_id]
+ add_index :articles, %i[name supplier_id]
end
def self.down
- remove_index :articles, [:name, :supplier_id]
- add_index :articles, :name, :unique => true
+ remove_index :articles, %i[name supplier_id]
+ add_index :articles, :name, unique: true
end
end
diff --git a/db/migrate/021_remove_table_article_prices.rb b/db/migrate/021_remove_table_article_prices.rb
index 7f172065..9b586fca 100644
--- a/db/migrate/021_remove_table_article_prices.rb
+++ b/db/migrate/021_remove_table_article_prices.rb
@@ -1,19 +1,19 @@
class RemoveTableArticlePrices < ActiveRecord::Migration[4.2]
def self.up
- puts "create columns in articles ..."
- add_column "articles", "clear_price", :decimal, :precision => 8, :scale => 2, :default => 0.0, :null => false
- add_column "articles", "gross_price", :decimal, :precision => 8, :scale => 2, :default => 0.0, :null => false
- add_column "articles", "tax", :float
- add_column "articles", "refund", :decimal, :precision => 8, :scale => 2, :default => 0.0, :null => false
- add_column "articles", "unit_quantity", :integer, :default => 1, :null => false
- add_column "articles", "order_number", :string
- add_column "articles", "created_at", :datetime
- add_column "articles", "updated_at", :datetime
+ puts 'create columns in articles ...'
+ add_column 'articles', 'clear_price', :decimal, precision: 8, scale: 2, default: 0.0, null: false
+ add_column 'articles', 'gross_price', :decimal, precision: 8, scale: 2, default: 0.0, null: false
+ add_column 'articles', 'tax', :float
+ add_column 'articles', 'refund', :decimal, precision: 8, scale: 2, default: 0.0, null: false
+ add_column 'articles', 'unit_quantity', :integer, default: 1, null: false
+ add_column 'articles', 'order_number', :string
+ add_column 'articles', 'created_at', :datetime
+ add_column 'articles', 'updated_at', :datetime
# stop auto-updating the timestamps to make the data-copy safe!
Article.record_timestamps = false
- puts "now copy values of article_prices into new articles-columns..."
+ puts 'now copy values of article_prices into new articles-columns...'
Article.find(:all).each do |article|
price = article.current_price
article.update!(clear_price: price.clear_price,
@@ -26,46 +26,46 @@ class RemoveTableArticlePrices < ActiveRecord::Migration[4.2]
created_at: price.updated_on)
end
- puts "delete article_prices, current_price attribute"
+ puts 'delete article_prices, current_price attribute'
drop_table :article_prices
remove_column :articles, :current_price_id
end
def self.down
add_column :articles, :current_price_id, :integer
- create_table "article_prices", :force => true do |t|
- t.integer "article_id", :default => 0, :null => false
- t.decimal "clear_price", :precision => 8, :scale => 2, :default => 0.0, :null => false
- t.decimal "gross_price", :precision => 8, :scale => 2, :default => 0.0, :null => false
- t.float "tax", :default => 0.0, :null => false
- t.decimal "refund", :precision => 8, :scale => 2, :default => 0.0, :null => false
- t.datetime "updated_on"
- t.integer "unit_quantity", :default => 1, :null => false
- t.string "order_number"
+ create_table 'article_prices', force: true do |t|
+ t.integer 'article_id', default: 0, null: false
+ t.decimal 'clear_price', precision: 8, scale: 2, default: 0.0, null: false
+ t.decimal 'gross_price', precision: 8, scale: 2, default: 0.0, null: false
+ t.float 'tax', default: 0.0, null: false
+ t.decimal 'refund', precision: 8, scale: 2, default: 0.0, null: false
+ t.datetime 'updated_on'
+ t.integer 'unit_quantity', default: 1, null: false
+ t.string 'order_number'
end
# copy data from article now into old ArticlePrice-object
Article.find(:all).each do |article|
- price = ArticlePrice.create(:clear_price => article.clear_price,
- :gross_price => article.gross_price,
- :tax => article.tax,
- :refund => article.refund,
- :unit_quantity => article.unit_quantity,
- :order_number => article.order_number.blank? ? nil : article.order_number,
- :updated_on => article.updated_at)
+ price = ArticlePrice.create(clear_price: article.clear_price,
+ gross_price: article.gross_price,
+ tax: article.tax,
+ refund: article.refund,
+ unit_quantity: article.unit_quantity,
+ order_number: article.order_number.presence,
+ updated_on: article.updated_at)
article.update_attribute(:current_price, price)
price.update_attribute(:article, article)
end
# remove new columns
- remove_column "articles", "clear_price"
- remove_column "articles", "gross_price"
- remove_column "articles", "tax"
- remove_column "articles", "refund"
- remove_column "articles", "unit_quantity"
- remove_column "articles", "order_number"
- remove_column "articles", "created_at"
- remove_column "articles", "updated_at"
+ remove_column 'articles', 'clear_price'
+ remove_column 'articles', 'gross_price'
+ remove_column 'articles', 'tax'
+ remove_column 'articles', 'refund'
+ remove_column 'articles', 'unit_quantity'
+ remove_column 'articles', 'order_number'
+ remove_column 'articles', 'created_at'
+ remove_column 'articles', 'updated_at'
end
end
diff --git a/db/migrate/022_add_required_user_for_task.rb b/db/migrate/022_add_required_user_for_task.rb
index 9e8d9621..105e1593 100644
--- a/db/migrate/022_add_required_user_for_task.rb
+++ b/db/migrate/022_add_required_user_for_task.rb
@@ -1,7 +1,7 @@
class AddRequiredUserForTask < ActiveRecord::Migration[4.2]
def self.up
- add_column :tasks, :required_users, :integer, :default => 1
- add_column :groups, :task_required_users, :integer, :default => 1
+ add_column :tasks, :required_users, :integer, default: 1
+ add_column :groups, :task_required_users, :integer, default: 1
# add default values to every task and group
Task.find(:all).each { |task| task.update_attribute :required_users, 1 }
Group.workgroups.each { |group| group.update_attribute :task_required_users, 1 }
diff --git a/db/migrate/024_add_deposit_defaults.rb b/db/migrate/024_add_deposit_defaults.rb
index ed9da063..68afdf5a 100644
--- a/db/migrate/024_add_deposit_defaults.rb
+++ b/db/migrate/024_add_deposit_defaults.rb
@@ -7,6 +7,5 @@ class AddDepositDefaults < ActiveRecord::Migration[4.2]
change_column_default :orders, :deposit_credit, 0.0
end
- def self.down
- end
+ def self.down; end
end
diff --git a/db/migrate/025_extend_comments.rb b/db/migrate/025_extend_comments.rb
index 662b92fd..3b1b1da2 100644
--- a/db/migrate/025_extend_comments.rb
+++ b/db/migrate/025_extend_comments.rb
@@ -1,9 +1,9 @@
class ExtendComments < ActiveRecord::Migration[4.2]
def self.up
- change_column :comments, :comment, :text, :default => ""
+ change_column :comments, :comment, :text, default: ''
end
def self.down
- change_column :comments, :comment, :string, :default => ""
+ change_column :comments, :comment, :string, default: ''
end
end
diff --git a/db/migrate/20090120184410_road_to_version_three.rb b/db/migrate/20090120184410_road_to_version_three.rb
index 4bacff24..d271aee3 100644
--- a/db/migrate/20090120184410_road_to_version_three.rb
+++ b/db/migrate/20090120184410_road_to_version_three.rb
@@ -10,10 +10,10 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
create_table :messages do |t|
t.references :sender
t.text :recipients_ids
- t.string :subject, :null => false
+ t.string :subject, null: false
t.text :body
- t.integer :email_state, :default => 0, :null => false
- t.boolean :private, :default => false
+ t.integer :email_state, default: 0, null: false
+ t.boolean :private, default: false
t.datetime :created_at
end
@@ -23,9 +23,9 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
add_column :groups, :deleted_at, :datetime
# == Workgroups
- puts "Migrate all groups to workgroups.."
- Group.find(:all, :conditions => { :type => "" }).each do |workgroup|
- workgroup.update_attribute(:type, "Workgroup")
+ puts 'Migrate all groups to workgroups..'
+ Group.find(:all, conditions: { type: '' }).each do |workgroup|
+ workgroup.update_attribute(:type, 'Workgroup')
end
# == Ordergroups
@@ -34,11 +34,11 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
rename_column :financial_transactions, :order_group_id, :ordergroup_id
rename_column :group_orders, :order_group_id, :ordergroup_id
rename_column :tasks, :group_id, :workgroup_id
- remove_index :group_orders, :name => "index_group_orders_on_order_group_id_and_order_id"
- add_index :group_orders, [:ordergroup_id, :order_id], :unique => true
+ remove_index :group_orders, name: 'index_group_orders_on_order_group_id_and_order_id'
+ add_index :group_orders, %i[ordergroup_id order_id], unique: true
- Group.find(:all, :conditions => { :type => "OrderGroup" }).each do |ordergroup|
- ordergroup.update_attribute(:type, "Ordergroup")
+ Group.find(:all, conditions: { type: 'OrderGroup' }).each do |ordergroup|
+ ordergroup.update_attribute(:type, 'Ordergroup')
end
# move contact-infos from users to ordergroups
add_column :groups, :contact_person, :string
@@ -46,9 +46,7 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
add_column :groups, :contact_address, :string
Ordergroup.all.each do |ordergroup|
contact = ordergroup.users.first
- if contact
- ordergroup.update(contact_person: contact.name, contact_phone: contact.phone, contact_address: contact.address)
- end
+ ordergroup.update(contact_person: contact.name, contact_phone: contact.phone, contact_address: contact.address) if contact
end
remove_column :users, :address
@@ -57,15 +55,18 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
drop_table :group_order_results
drop_table :order_article_results
drop_table :group_order_article_results
- GroupOrder.delete_all; OrderArticle.delete_all; GroupOrderArticle.delete_all; GroupOrderArticleQuantity.delete_all
+ GroupOrder.delete_all
+ OrderArticle.delete_all
+ GroupOrderArticle.delete_all
+ GroupOrderArticleQuantity.delete_all
create_table :orders do |t|
t.references :supplier
t.text :note
t.datetime :starts
t.datetime :ends
- t.string :state, :default => "open" # Statemachine ... open -> finished -> closed
- t.integer :lock_version, :default => 0, :null => false
+ t.string :state, default: 'open' # Statemachine ... open -> finished -> closed
+ t.integer :lock_version, default: 0, null: false
t.integer :updated_by_user_id
end
@@ -78,9 +79,9 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
t.date :date
t.date :paid_on
t.text :note
- t.decimal :amount, :null => false, :precision => 8, :scale => 2, :default => 0.0
- t.decimal :deposit, :precision => 8, :scale => 2, :default => 0.0, :null => false
- t.decimal :deposit_credit, :precision => 8, :scale => 2, :default => 0.0, :null => false
+ t.decimal :amount, null: false, precision: 8, scale: 2, default: 0.0
+ t.decimal :deposit, precision: 8, scale: 2, default: 0.0, null: false
+ t.decimal :deposit_credit, precision: 8, scale: 2, default: 0.0, null: false
t.timestamps
end
@@ -107,41 +108,41 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
# == ArticlePrice
create_table :article_prices do |t|
t.references :article
- t.decimal :price, :precision => 8, :scale => 2, :default => 0.0, :null => false
- t.decimal :tax, :precision => 8, :scale => 2, :default => 0.0, :null => false
- t.decimal :deposit, :precision => 8, :scale => 2, :default => 0.0, :null => false
+ t.decimal :price, precision: 8, scale: 2, default: 0.0, null: false
+ t.decimal :tax, precision: 8, scale: 2, default: 0.0, null: false
+ t.decimal :deposit, precision: 8, scale: 2, default: 0.0, null: false
t.integer :unit_quantity
t.datetime :created_at
end
# Create price history for every Article
Article.all.each do |a|
- a.article_prices.create :price => a.price, :tax => a.tax,
- :deposit => a.deposit, :unit_quantity => a.unit_quantity
+ a.article_prices.create price: a.price, tax: a.tax,
+ deposit: a.deposit, unit_quantity: a.unit_quantity
end
# Every Article has now a Category. Fix it if neccessary.
- Article.all(:conditions => { :article_category_id => nil }).each do |article|
+ Article.all(conditions: { article_category_id: nil }).each do |article|
article.update_attribute(:article_category, ArticleCategory.first)
end
# order-articles
add_column :order_articles, :article_price_id, :integer
# == GroupOrder
- change_column :group_orders, :updated_by_user_id, :integer, :default => nil, :null => true
+ change_column :group_orders, :updated_by_user_id, :integer, default: nil, null: true
# == GroupOrderArticle
# The total order result in ordergroup is now saved!
- add_column :group_order_articles, :result, :integer, :default => nil
+ add_column :group_order_articles, :result, :integer, default: nil
# == StockArticle
add_column :articles, :type, :string
- add_column :articles, :quantity, :integer, :default => 0
+ add_column :articles, :quantity, :integer, default: 0
# == StockChanges
create_table :stock_changes do |t|
t.references :delivery
t.references :order
t.references :stock_article
- t.integer :quantity, :default => 0
+ t.integer :quantity, default: 0
t.datetime :created_at
end
@@ -158,6 +159,5 @@ class RoadToVersionThree < ActiveRecord::Migration[4.2]
User.all.each { |u| u.settings['notify.upcoming_tasks'] = 1 }
end
- def self.down
- end
+ def self.down; end
end
diff --git a/db/migrate/20090317175355_add_profit_to_orders.rb b/db/migrate/20090317175355_add_profit_to_orders.rb
index 59f79609..78013f7d 100644
--- a/db/migrate/20090317175355_add_profit_to_orders.rb
+++ b/db/migrate/20090317175355_add_profit_to_orders.rb
@@ -1,6 +1,6 @@
class AddProfitToOrders < ActiveRecord::Migration[4.2]
def self.up
- add_column :orders, :foodcoop_result, :decimal, :precision => 8, :scale => 2
+ add_column :orders, :foodcoop_result, :decimal, precision: 8, scale: 2
Order.closed.each do |order|
order.update_attribute(:foodcoop_result, order.profit)
diff --git a/db/migrate/20090325175756_create_pages.foodsoft_wiki_engine.rb b/db/migrate/20090325175756_create_pages.foodsoft_wiki_engine.rb
index c5692f35..d2221013 100644
--- a/db/migrate/20090325175756_create_pages.foodsoft_wiki_engine.rb
+++ b/db/migrate/20090325175756_create_pages.foodsoft_wiki_engine.rb
@@ -5,7 +5,7 @@ class CreatePages < ActiveRecord::Migration[4.2]
t.string :title
t.text :body
t.string :permalink
- t.integer :lock_version, :default => 0
+ t.integer :lock_version, default: 0
t.integer :updated_by
t.integer :redirect
t.integer :parent_id
diff --git a/db/migrate/20090405131156_modify_group_order_article_result.rb b/db/migrate/20090405131156_modify_group_order_article_result.rb
index 44e0dea8..b979422e 100644
--- a/db/migrate/20090405131156_modify_group_order_article_result.rb
+++ b/db/migrate/20090405131156_modify_group_order_article_result.rb
@@ -1,6 +1,6 @@
class ModifyGroupOrderArticleResult < ActiveRecord::Migration[4.2]
def self.up
- change_column :group_order_articles, :result, :decimal, :precision => 8, :scale => 3
+ change_column :group_order_articles, :result, :decimal, precision: 8, scale: 3
end
def self.down
diff --git a/db/migrate/20090907120012_add_missing_indexes.rb b/db/migrate/20090907120012_add_missing_indexes.rb
index 189b0417..93ea8771 100644
--- a/db/migrate/20090907120012_add_missing_indexes.rb
+++ b/db/migrate/20090907120012_add_missing_indexes.rb
@@ -1,35 +1,34 @@
class AddMissingIndexes < ActiveRecord::Migration[4.2]
def self.up
- add_index "article_prices", ["article_id"]
+ add_index 'article_prices', ['article_id']
- add_index "articles", ["supplier_id"]
- add_index "articles", ["article_category_id"]
- add_index "articles", ["type"]
+ add_index 'articles', ['supplier_id']
+ add_index 'articles', ['article_category_id']
+ add_index 'articles', ['type']
- add_index "deliveries", ["supplier_id"]
+ add_index 'deliveries', ['supplier_id']
- add_index "financial_transactions", ["ordergroup_id"]
+ add_index 'financial_transactions', ['ordergroup_id']
- add_index "group_order_article_quantities", ["group_order_article_id"]
- add_index "group_orders", ["order_id"]
- add_index "group_orders", ["ordergroup_id"]
+ add_index 'group_order_article_quantities', ['group_order_article_id']
+ add_index 'group_orders', ['order_id']
+ add_index 'group_orders', ['ordergroup_id']
- add_index "invoices", ["supplier_id"]
- add_index "invoices", ["delivery_id"]
+ add_index 'invoices', ['supplier_id']
+ add_index 'invoices', ['delivery_id']
- add_index "order_articles", ["order_id"]
+ add_index 'order_articles', ['order_id']
- add_index "order_comments", ["order_id"]
+ add_index 'order_comments', ['order_id']
- add_index "orders", ["state"]
+ add_index 'orders', ['state']
- add_index "stock_changes", ["delivery_id"]
- add_index "stock_changes", ["stock_article_id"]
- add_index "stock_changes", ["stock_taking_id"]
+ add_index 'stock_changes', ['delivery_id']
+ add_index 'stock_changes', ['stock_article_id']
+ add_index 'stock_changes', ['stock_taking_id']
- add_index "tasks", ["workgroup_id"]
+ add_index 'tasks', ['workgroup_id']
end
- def self.down
- end
+ def self.down; end
end
diff --git a/db/migrate/20110507184920_add_duration_to_tasks.rb b/db/migrate/20110507184920_add_duration_to_tasks.rb
index 33a11494..86347508 100644
--- a/db/migrate/20110507184920_add_duration_to_tasks.rb
+++ b/db/migrate/20110507184920_add_duration_to_tasks.rb
@@ -1,6 +1,6 @@
class AddDurationToTasks < ActiveRecord::Migration[4.2]
def self.up
- add_column :tasks, :duration, :integer, :default => 1
+ add_column :tasks, :duration, :integer, default: 1
end
def self.down
diff --git a/db/migrate/20110507192928_add_task_duration_to_workgroups.rb b/db/migrate/20110507192928_add_task_duration_to_workgroups.rb
index c5b4844b..fd703d17 100644
--- a/db/migrate/20110507192928_add_task_duration_to_workgroups.rb
+++ b/db/migrate/20110507192928_add_task_duration_to_workgroups.rb
@@ -1,6 +1,6 @@
class AddTaskDurationToWorkgroups < ActiveRecord::Migration[4.2]
def self.up
- add_column :groups, :task_duration, :integer, :default => 1
+ add_column :groups, :task_duration, :integer, default: 1
end
def self.down
diff --git a/db/migrate/20120622094337_add_next_weekly_tasks_number_to_workgroups.rb b/db/migrate/20120622094337_add_next_weekly_tasks_number_to_workgroups.rb
index b8ac8c81..eeca92b3 100644
--- a/db/migrate/20120622094337_add_next_weekly_tasks_number_to_workgroups.rb
+++ b/db/migrate/20120622094337_add_next_weekly_tasks_number_to_workgroups.rb
@@ -1,6 +1,6 @@
class AddNextWeeklyTasksNumberToWorkgroups < ActiveRecord::Migration[4.2]
def self.up
- add_column :groups, :next_weekly_tasks_number, :integer, :default => 8
+ add_column :groups, :next_weekly_tasks_number, :integer, default: 8
end
def self.down
diff --git a/db/migrate/20130622095040_move_weekly_tasks.rb b/db/migrate/20130622095040_move_weekly_tasks.rb
index 3865a498..d57f3108 100644
--- a/db/migrate/20130622095040_move_weekly_tasks.rb
+++ b/db/migrate/20130622095040_move_weekly_tasks.rb
@@ -15,21 +15,21 @@ class MoveWeeklyTasks < ActiveRecord::Migration[4.2]
def down
PeriodicTaskGroup.all.each do |task_group|
- unless task_group.tasks.empty?
- task = task_group.tasks.first
- workgroup = task.workgroup
- puts "Writing task data of group #{task_group.id} to workgroup #{workgroup.name}"
- workgroup_attributes = {
- weekly_task: true,
- weekday: task.due_date.days_to_week_start(:sunday),
- task_name: task.name,
- task_description: task.description,
- task_required_users: task.required_users,
- task_duration: task.duration
- }
- workgroup.update(workgroup_attributes)
- task_group.tasks.update_all weekly: true
- end
+ next if task_group.tasks.empty?
+
+ task = task_group.tasks.first
+ workgroup = task.workgroup
+ puts "Writing task data of group #{task_group.id} to workgroup #{workgroup.name}"
+ workgroup_attributes = {
+ weekly_task: true,
+ weekday: task.due_date.days_to_week_start(:sunday),
+ task_name: task.name,
+ task_description: task.description,
+ task_required_users: task.required_users,
+ task_duration: task.duration
+ }
+ workgroup.update(workgroup_attributes)
+ task_group.tasks.update_all weekly: true
end
end
diff --git a/db/migrate/20130702113610_update_group_order_totals.rb b/db/migrate/20130702113610_update_group_order_totals.rb
index da57126a..52edbad4 100644
--- a/db/migrate/20130702113610_update_group_order_totals.rb
+++ b/db/migrate/20130702113610_update_group_order_totals.rb
@@ -1,18 +1,17 @@
class UpdateGroupOrderTotals < ActiveRecord::Migration[4.2]
def self.up
say "If you have ever modified an order after it was settled, the group_order's " +
- "price may be calculated incorrectly. This can take a lot of time on a " +
- "large database."
+ 'price may be calculated incorrectly. This can take a lot of time on a ' +
+ 'large database.'
- say "If you do want to update the ordergroup totals, open the rails console " +
- "(by running `rails c`), and enter:"
+ say 'If you do want to update the ordergroup totals, open the rails console ' +
+ '(by running `rails c`), and enter:'
- say "GroupOrder.all.each { |go| go.order.closed? and go.update_price! }", subitem: true
+ say 'GroupOrder.all.each { |go| go.order.closed? and go.update_price! }', subitem: true
- say "You may want to check first that no undesired accounting issues are introduced. " +
- "It may be wise to discuss this with those responsible for the ordering finances."
+ say 'You may want to check first that no undesired accounting issues are introduced. ' +
+ 'It may be wise to discuss this with those responsible for the ordering finances.'
end
- def self.down
- end
+ def self.down; end
end
diff --git a/db/migrate/20130718183100_create_settings.rb b/db/migrate/20130718183100_create_settings.rb
index 9928a9b3..90639d71 100644
--- a/db/migrate/20130718183100_create_settings.rb
+++ b/db/migrate/20130718183100_create_settings.rb
@@ -8,7 +8,7 @@ class CreateSettings < ActiveRecord::Migration[4.2]
t.timestamps
end
- add_index :settings, [:thing_type, :thing_id, :var], unique: true
+ add_index :settings, %i[thing_type thing_id var], unique: true
end
def self.down
diff --git a/db/migrate/20130718183101_migrate_user_settings.rb b/db/migrate/20130718183101_migrate_user_settings.rb
index 04cfaeb8..2d0e3c56 100644
--- a/db/migrate/20130718183101_migrate_user_settings.rb
+++ b/db/migrate/20130718183101_migrate_user_settings.rb
@@ -46,8 +46,7 @@ class MigrateUserSettings < ActiveRecord::Migration[4.2]
drop_table :configurable_settings
end
- def down
- end
+ def down; end
end
# this is the base class of all configurable settings
diff --git a/db/migrate/20130920201529_allow_missing_nick.rb b/db/migrate/20130920201529_allow_missing_nick.rb
index ed818860..fcf1d8c8 100644
--- a/db/migrate/20130920201529_allow_missing_nick.rb
+++ b/db/migrate/20130920201529_allow_missing_nick.rb
@@ -1,9 +1,9 @@
class AllowMissingNick < ActiveRecord::Migration[4.2]
def self.up
- change_column :users, :nick, :string, :default => nil, :null => true
+ change_column :users, :nick, :string, default: nil, null: true
end
def self.down
- change_column :users, :nick, :string, :default => "", :null => false
+ change_column :users, :nick, :string, default: '', null: false
end
end
diff --git a/db/migrate/20140102170431_add_result_computed_to_group_order_articles.rb b/db/migrate/20140102170431_add_result_computed_to_group_order_articles.rb
index dd9fc407..0bb885d9 100644
--- a/db/migrate/20140102170431_add_result_computed_to_group_order_articles.rb
+++ b/db/migrate/20140102170431_add_result_computed_to_group_order_articles.rb
@@ -1,6 +1,6 @@
class AddResultComputedToGroupOrderArticles < ActiveRecord::Migration[4.2]
def change
add_column :group_order_articles, :result_computed,
- :decimal, :precision => 8, :scale => 3
+ :decimal, precision: 8, scale: 3
end
end
diff --git a/db/migrate/20140318173000_delete_empty_group_order_articles.rb b/db/migrate/20140318173000_delete_empty_group_order_articles.rb
index 1e053c3c..c5b396ed 100644
--- a/db/migrate/20140318173000_delete_empty_group_order_articles.rb
+++ b/db/migrate/20140318173000_delete_empty_group_order_articles.rb
@@ -4,6 +4,5 @@ class DeleteEmptyGroupOrderArticles < ActiveRecord::Migration[4.2]
GroupOrderArticle.where(quantity: 0, tolerance: 0, result: [0, nil], result_computed: [0, nil]).delete_all
end
- def down
- end
+ def down; end
end
diff --git a/db/migrate/20140921104907_remove_stale_memberships.rb b/db/migrate/20140921104907_remove_stale_memberships.rb
index de5b719b..26b6c834 100644
--- a/db/migrate/20140921104907_remove_stale_memberships.rb
+++ b/db/migrate/20140921104907_remove_stale_memberships.rb
@@ -1,5 +1,5 @@
class RemoveStaleMemberships < ActiveRecord::Migration[4.2]
def up
- Membership.where("group_id NOT IN (?)", Group.ids).delete_all
+ Membership.where.not(group_id: Group.ids).delete_all
end
end
diff --git a/db/migrate/20160217194036_add_role_invoices_to_group.rb b/db/migrate/20160217194036_add_role_invoices_to_group.rb
index 6946fe05..5a86f425 100644
--- a/db/migrate/20160217194036_add_role_invoices_to_group.rb
+++ b/db/migrate/20160217194036_add_role_invoices_to_group.rb
@@ -1,5 +1,5 @@
class AddRoleInvoicesToGroup < ActiveRecord::Migration[4.2]
def change
- add_column :groups, :role_invoices, :boolean, :default => false, :null => false
+ add_column :groups, :role_invoices, :boolean, default: false, null: false
end
end
diff --git a/db/migrate/20160218151041_add_attachment_to_invoice.rb b/db/migrate/20160218151041_add_attachment_to_invoice.rb
index 58bac66d..1767905c 100644
--- a/db/migrate/20160218151041_add_attachment_to_invoice.rb
+++ b/db/migrate/20160218151041_add_attachment_to_invoice.rb
@@ -1,6 +1,6 @@
class AddAttachmentToInvoice < ActiveRecord::Migration[4.2]
def change
add_column :invoices, :attachment_mime, :string
- add_column :invoices, :attachment_data, :binary, :limit => 8.megabyte
+ add_column :invoices, :attachment_data, :binary, limit: 8.megabyte
end
end
diff --git a/db/migrate/20160219123220_create_financial_transaction_class_and_types.rb b/db/migrate/20160219123220_create_financial_transaction_class_and_types.rb
index 5fcf318b..3c05035d 100644
--- a/db/migrate/20160219123220_create_financial_transaction_class_and_types.rb
+++ b/db/migrate/20160219123220_create_financial_transaction_class_and_types.rb
@@ -1,12 +1,12 @@
class CreateFinancialTransactionClassAndTypes < ActiveRecord::Migration[4.2]
def change
create_table :financial_transaction_classes do |t|
- t.string :name, :null => false
+ t.string :name, null: false
end
create_table :financial_transaction_types do |t|
- t.string :name, :null => false
- t.references :financial_transaction_class, :null => false
+ t.string :name, null: false
+ t.references :financial_transaction_class, null: false
end
change_table :financial_transactions do |t|
@@ -17,7 +17,7 @@ class CreateFinancialTransactionClassAndTypes < ActiveRecord::Migration[4.2]
dir.up do
execute "INSERT INTO financial_transaction_classes (id, name) VALUES (1, 'Standard')"
execute "INSERT INTO financial_transaction_types (id, name, financial_transaction_class_id) VALUES (1, 'Foodsoft', 1)"
- execute "UPDATE financial_transactions SET financial_transaction_type_id = 1"
+ execute 'UPDATE financial_transactions SET financial_transaction_type_id = 1'
end
end
diff --git a/db/migrate/20160224201529_allow_stock_group_order.rb b/db/migrate/20160224201529_allow_stock_group_order.rb
index a77879e3..6c9197f0 100644
--- a/db/migrate/20160224201529_allow_stock_group_order.rb
+++ b/db/migrate/20160224201529_allow_stock_group_order.rb
@@ -1,9 +1,9 @@
class AllowStockGroupOrder < ActiveRecord::Migration[4.2]
def self.up
- change_column :group_orders, :ordergroup_id, :integer, :default => nil, :null => true
+ change_column :group_orders, :ordergroup_id, :integer, default: nil, null: true
end
def self.down
- change_column :group_orders, :ordergroup_id, :integer, :default => 0, :null => false
+ change_column :group_orders, :ordergroup_id, :integer, default: 0, null: false
end
end
diff --git a/db/migrate/20160226000000_add_email_to_message.foodsoft_messages_engine.rb b/db/migrate/20160226000000_add_email_to_message.foodsoft_messages_engine.rb
index 95b35273..ceeafa15 100644
--- a/db/migrate/20160226000000_add_email_to_message.foodsoft_messages_engine.rb
+++ b/db/migrate/20160226000000_add_email_to_message.foodsoft_messages_engine.rb
@@ -2,6 +2,6 @@
class AddEmailToMessage < ActiveRecord::Migration[4.2]
def change
add_column :messages, :salt, :string
- add_column :messages, :received_email, :binary, :limit => 1.megabyte
+ add_column :messages, :received_email, :binary, limit: 1.megabyte
end
end
diff --git a/db/migrate/20170801000000_create_mail_delivery_status.rb b/db/migrate/20170801000000_create_mail_delivery_status.rb
index 2fd40674..69fa1b75 100644
--- a/db/migrate/20170801000000_create_mail_delivery_status.rb
+++ b/db/migrate/20170801000000_create_mail_delivery_status.rb
@@ -2,8 +2,8 @@ class CreateMailDeliveryStatus < ActiveRecord::Migration[4.2]
def change
create_table :mail_delivery_status do |t|
t.datetime :created_at
- t.string :email, :null => false
- t.string :message, :null => false
+ t.string :email, null: false
+ t.string :message, null: false
t.string :attachment_mime
t.binary :attachment_data, limit: 16.megabyte
diff --git a/db/migrate/20181110000000_create_polls.foodsoft_polls_engine.rb b/db/migrate/20181110000000_create_polls.foodsoft_polls_engine.rb
index 990e75f0..120b7eef 100644
--- a/db/migrate/20181110000000_create_polls.foodsoft_polls_engine.rb
+++ b/db/migrate/20181110000000_create_polls.foodsoft_polls_engine.rb
@@ -24,14 +24,14 @@ class CreatePolls < ActiveRecord::Migration[4.2]
t.references :ordergroup
t.text :note
t.timestamps
- t.index [:poll_id, :user_id, :ordergroup_id], unique: true
+ t.index %i[poll_id user_id ordergroup_id], unique: true
end
create_table :poll_choices do |t|
t.references :poll_vote, null: false
t.integer :choice, null: false
t.integer :value, null: false
- t.index [:poll_vote_id, :choice], unique: true
+ t.index %i[poll_vote_id choice], unique: true
end
end
end
diff --git a/db/migrate/20181120000000_increase_choices_size.foodsoft_polls_engine.rb b/db/migrate/20181120000000_increase_choices_size.foodsoft_polls_engine.rb
index d809e3ea..621863dd 100644
--- a/db/migrate/20181120000000_increase_choices_size.foodsoft_polls_engine.rb
+++ b/db/migrate/20181120000000_increase_choices_size.foodsoft_polls_engine.rb
@@ -1,5 +1,5 @@
class IncreaseChoicesSize < ActiveRecord::Migration[4.2]
def up
- change_column :polls, :choices, :text, limit: 65535
+ change_column :polls, :choices, :text, limit: 65_535
end
end
diff --git a/db/migrate/20181201000000_create_printer_jobs.foodsoft_printer_engine.rb b/db/migrate/20181201000000_create_printer_jobs.foodsoft_printer_engine.rb
index ee7665e4..36d175c5 100644
--- a/db/migrate/20181201000000_create_printer_jobs.foodsoft_printer_engine.rb
+++ b/db/migrate/20181201000000_create_printer_jobs.foodsoft_printer_engine.rb
@@ -15,6 +15,6 @@ class CreatePrinterJobs < ActiveRecord::Migration[4.2]
t.text :message
end
- add_index :printer_job_updates, [:printer_job_id, :created_at]
+ add_index :printer_job_updates, %i[printer_job_id created_at]
end
end
diff --git a/db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb b/db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb
index e931f748..b1d0d51c 100644
--- a/db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb
+++ b/db/migrate/20181201000100_create_message_recipients.foodsoft_messages.rb
@@ -14,7 +14,7 @@ class CreateMessageRecipients < ActiveRecord::Migration[4.2]
t.datetime :read_at
end
- add_index :message_recipients, [:user_id, :read_at]
+ add_index :message_recipients, %i[user_id read_at]
Message.all.each do |m|
recipients = YAML.load(m.recipients_ids).map do |r|
diff --git a/db/migrate/20190101000000_create_active_storage_tables.active_storage.rb b/db/migrate/20190101000000_create_active_storage_tables.active_storage.rb
index 3739c2e8..df49a7b0 100644
--- a/db/migrate/20190101000000_create_active_storage_tables.active_storage.rb
+++ b/db/migrate/20190101000000_create_active_storage_tables.active_storage.rb
@@ -20,7 +20,8 @@ class CreateActiveStorageTables < ActiveRecord::Migration[4.2][5.2]
t.datetime :created_at, null: false
- t.index [:record_type, :record_id, :name, :blob_id], name: "index_active_storage_attachments_uniqueness", unique: true
+ t.index %i[record_type record_id name blob_id], name: 'index_active_storage_attachments_uniqueness',
+ unique: true
t.foreign_key :active_storage_blobs, column: :blob_id
end
end
diff --git a/db/migrate/20210205090257_introduce_received_state_in_orders.rb b/db/migrate/20210205090257_introduce_received_state_in_orders.rb
index ffeff588..ca7ce999 100644
--- a/db/migrate/20210205090257_introduce_received_state_in_orders.rb
+++ b/db/migrate/20210205090257_introduce_received_state_in_orders.rb
@@ -1,7 +1,7 @@
class IntroduceReceivedStateInOrders < ActiveRecord::Migration[5.2]
def up
Order.where(state: 'finished').each do |order|
- order.update_attribute(:state, 'received') if order.order_articles.where('units_received IS NOT NULL').any?
+ order.update_attribute(:state, 'received') if order.order_articles.where.not(units_received: nil).any?
end
end
diff --git a/db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb b/db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb
index a15c6ce8..379003ed 100644
--- a/db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb
+++ b/db/migrate/20230106144438_add_service_name_to_active_storage_blobs.active_storage.rb
@@ -3,15 +3,15 @@ class AddServiceNameToActiveStorageBlobs < ActiveRecord::Migration[6.0]
def up
return unless table_exists?(:active_storage_blobs)
- unless column_exists?(:active_storage_blobs, :service_name)
- add_column :active_storage_blobs, :service_name, :string
+ return if column_exists?(:active_storage_blobs, :service_name)
- if configured_service = ActiveStorage::Blob.service.name
- ActiveStorage::Blob.unscoped.update_all(service_name: configured_service)
- end
+ add_column :active_storage_blobs, :service_name, :string
- change_column :active_storage_blobs, :service_name, :string, null: false
+ if configured_service = ActiveStorage::Blob.service.name
+ ActiveStorage::Blob.unscoped.update_all(service_name: configured_service)
end
+
+ change_column :active_storage_blobs, :service_name, :string, null: false
end
def down
diff --git a/db/migrate/20230106144439_create_active_storage_variant_records.active_storage.rb b/db/migrate/20230106144439_create_active_storage_variant_records.active_storage.rb
index e1020fc9..58cc779a 100644
--- a/db/migrate/20230106144439_create_active_storage_variant_records.active_storage.rb
+++ b/db/migrate/20230106144439_create_active_storage_variant_records.active_storage.rb
@@ -8,7 +8,7 @@ class CreateActiveStorageVariantRecords < ActiveRecord::Migration[6.0]
t.belongs_to :blob, null: false, index: false, type: blobs_primary_key_type
t.string :variation_digest, null: false
- t.index [:blob_id, :variation_digest], name: "index_active_storage_variant_records_uniqueness", unique: true
+ t.index %i[blob_id variation_digest], name: 'index_active_storage_variant_records_uniqueness', unique: true
t.foreign_key :active_storage_blobs, column: :blob_id
end
end
diff --git a/db/seeds/minimal.seeds.rb b/db/seeds/minimal.seeds.rb
index d38ef10e..bbf97e10 100644
--- a/db/seeds/minimal.seeds.rb
+++ b/db/seeds/minimal.seeds.rb
@@ -2,30 +2,30 @@
# Create working group with full rights
administrators = Workgroup.create!(
- :name => "Administrators",
- :description => "System administrators.",
- :role_admin => true,
- :role_finance => true,
- :role_article_meta => true,
- :role_pickups => true,
- :role_suppliers => true,
- :role_orders => true
+ name: 'Administrators',
+ description: 'System administrators.',
+ role_admin: true,
+ role_finance: true,
+ role_article_meta: true,
+ role_pickups: true,
+ role_suppliers: true,
+ role_orders: true
)
# Create admin user
User.create!(
- :nick => "admin",
- :first_name => "Anton",
- :last_name => "Administrator",
- :email => "admin@foo.test",
- :password => "secret",
- :groups => [administrators]
+ nick: 'admin',
+ first_name: 'Anton',
+ last_name: 'Administrator',
+ email: 'admin@foo.test',
+ password: 'secret',
+ groups: [administrators]
)
# First entry for financial transaction types
-financial_transaction_class = FinancialTransactionClass.create!(:name => "Other")
-FinancialTransactionType.create!(:name => "Foodcoop", :financial_transaction_class_id => financial_transaction_class.id)
+financial_transaction_class = FinancialTransactionClass.create!(name: 'Other')
+FinancialTransactionType.create!(name: 'Foodcoop', financial_transaction_class_id: financial_transaction_class.id)
# First entry for article categories
-SupplierCategory.create!(:name => "Other", :financial_transaction_class_id => financial_transaction_class.id)
-ArticleCategory.create!(:name => "Other", :description => "other, misc, unknown")
+SupplierCategory.create!(name: 'Other', financial_transaction_class_id: financial_transaction_class.id)
+ArticleCategory.create!(name: 'Other', description: 'other, misc, unknown')
diff --git a/db/seeds/seed_helper.rb b/db/seeds/seed_helper.rb
index a1f958bf..05272319 100644
--- a/db/seeds/seed_helper.rb
+++ b/db/seeds/seed_helper.rb
@@ -8,10 +8,10 @@ def seed_group_orders
# order 3..12 times a random article
go = og.group_orders.create!(order: order, updated_by_user_id: 1)
- (rand(10) + 3).times do
+ rand(3..12).times do
goa = go.group_order_articles.find_or_create_by!(order_article: order.order_articles.offset(rand(noas)).first)
unit_quantity = goa.order_article.price.unit_quantity
- goa.update_quantities rand([4, unit_quantity * 2 + 2].max), rand(unit_quantity)
+ goa.update_quantities rand([4, (unit_quantity * 2) + 2].max), rand(unit_quantity)
end
end
# update totals
diff --git a/db/seeds/small.en.seeds.rb b/db/seeds/small.en.seeds.rb
index 52f0b9db..6c832e1d 100644
--- a/db/seeds/small.en.seeds.rb
+++ b/db/seeds/small.en.seeds.rb
@@ -1,174 +1,300 @@
-require_relative 'seed_helper.rb'
+require_relative 'seed_helper'
## Financial transaction classes
-FinancialTransactionClass.create!(:id => 1, :name => 'Standard')
-FinancialTransactionClass.create!(:id => 2, :name => 'Foodsoft')
+FinancialTransactionClass.create!(id: 1, name: 'Standard')
+FinancialTransactionClass.create!(id: 2, name: 'Foodsoft')
## Suppliers & articles
-SupplierCategory.create!(:id => 1, :name => "Other", :financial_transaction_class_id => 1)
+SupplierCategory.create!(id: 1, name: 'Other', financial_transaction_class_id: 1)
Supplier.create!([
- { :id => 1, :name => "Beautiful bakery", :supplier_category_id => 1, :address => "Smallstreet 1, Cookilage", :phone => "0123456789", :email => "info@bbakery.test", :min_order_quantity => "100" },
- { :id => 2, :name => "Chocolatiers", :supplier_category_id => 1, :address => "Multatuliroad 1, Amsterdam", :phone => "0123456789", :email => "info@chocolatiers.test", :url => "http://www.chocolatiers.test/", :contact_person => "Max Pure", :delivery_days => "Tue, Fr (Amsterdam)" },
- { :id => 3, :name => "Cheesemaker", :supplier_category_id => 1, :address => "Cheesestreet 5, London", :phone => "0123456789", :url => "http://www.cheesemaker.test/" },
- { :id => 4, :name => "The Nuthome", :supplier_category_id => 1, :address => "Alexanderplatz, Berlin", :phone => "0123456789", :email => "info@thenuthome.test", :url => "http://www.thenuthome.test/", :note => "delivery in Berlin; €9 delivery costs for orders under €123" }
+ { id: 1, name: 'Beautiful bakery', supplier_category_id: 1,
+ address: 'Smallstreet 1, Cookilage', phone: '0123456789', email: 'info@bbakery.test', min_order_quantity: '100' },
+ { id: 2, name: 'Chocolatiers', supplier_category_id: 1,
+ address: 'Multatuliroad 1, Amsterdam', phone: '0123456789', email: 'info@chocolatiers.test', url: 'http://www.chocolatiers.test/', contact_person: 'Max Pure', delivery_days: 'Tue, Fr (Amsterdam)' },
+ { id: 3, name: 'Cheesemaker', supplier_category_id: 1,
+ address: 'Cheesestreet 5, London', phone: '0123456789', url: 'http://www.cheesemaker.test/' },
+ { id: 4, name: 'The Nuthome', supplier_category_id: 1,
+ address: 'Alexanderplatz, Berlin', phone: '0123456789', email: 'info@thenuthome.test', url: 'http://www.thenuthome.test/', note: 'delivery in Berlin; €9 delivery costs for orders under €123' }
])
-ArticleCategory.create!(:id => 1, :name => "Other", :description => "other, misc, unknown")
-ArticleCategory.create!(:id => 2, :name => "Fruit")
-ArticleCategory.create!(:id => 3, :name => "Vegetables")
-ArticleCategory.create!(:id => 4, :name => "Potatoes & onions")
-ArticleCategory.create!(:id => 5, :name => "Bread & Bakery")
-ArticleCategory.create!(:id => 6, :name => "Drinks", :description => "juice, fruit juice, vegetable juice, soda")
-ArticleCategory.create!(:id => 7, :name => "Herbs & Spices")
-ArticleCategory.create!(:id => 8, :name => "Milk & products", :description => "milk, butter, cream, yoghurt, cheese, eggs, milk substitutes")
-ArticleCategory.create!(:id => 9, :name => "Fish & Sea")
-ArticleCategory.create!(:id => 10, :name => "Meat")
-ArticleCategory.create!(:id => 11, :name => "Oils & Fats")
-ArticleCategory.create!(:id => 12, :name => "Grains & Legumes")
-ArticleCategory.create!(:id => 13, :name => "Nuts & Seeds")
-ArticleCategory.create!(:id => 14, :name => "Sugar & Sweets")
+ArticleCategory.create!(id: 1, name: 'Other', description: 'other, misc, unknown')
+ArticleCategory.create!(id: 2, name: 'Fruit')
+ArticleCategory.create!(id: 3, name: 'Vegetables')
+ArticleCategory.create!(id: 4, name: 'Potatoes & onions')
+ArticleCategory.create!(id: 5, name: 'Bread & Bakery')
+ArticleCategory.create!(id: 6, name: 'Drinks', description: 'juice, fruit juice, vegetable juice, soda')
+ArticleCategory.create!(id: 7, name: 'Herbs & Spices')
+ArticleCategory.create!(id: 8, name: 'Milk & products',
+ description: 'milk, butter, cream, yoghurt, cheese, eggs, milk substitutes')
+ArticleCategory.create!(id: 9, name: 'Fish & Sea')
+ArticleCategory.create!(id: 10, name: 'Meat')
+ArticleCategory.create!(id: 11, name: 'Oils & Fats')
+ArticleCategory.create!(id: 12, name: 'Grains & Legumes')
+ArticleCategory.create!(id: 13, name: 'Nuts & Seeds')
+ArticleCategory.create!(id: 14, name: 'Sugar & Sweets')
-Article.create!(:name => "Brown whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Brown half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Brown sesame whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Brown sesame half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Light wheat whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Light wheat half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Bread with sunflower seeds whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Bread with sunflower seeds half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Bread with walnuts whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Bread with walnuts half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Kennemerlandbread whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Kennemerlandbread half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Maize bread whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Maize bread half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 1200 gram whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 1200 gram half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 900 gram whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 900 gram half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Speltbread whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Speltbread half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Country bread 900gram whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Country bread 900gram half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "White whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "White half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "White with poppy seeds whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "White with poppy seeds half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Fig bread whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Fig bread half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Beer-based bread whole", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Beer-based bread half", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Raisin bun", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.99E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Muesli bun", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Brioche", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.99E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Brown croissant", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Croissants", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Cheese croissants", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocolatecroissants", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Soepstengels white", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Soepstengels volkoren", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.99E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Pumpkin-seed buns", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.88E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "White buns", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.66E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Brown buns", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.66E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Tomato-feta bread", :supplier_id => 1, :article_category_id => 5, :unit => "pc", :note => "organic", :availability => true, :manufacturer => "The Baker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocolate Bar Milk (37%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "organic", :availability => true, :manufacturer => "Chocolatemakers", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocolate Bar Pure (68%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "organic", :availability => true, :manufacturer => "Chocolatemakers", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocolate Bar Milk (40%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "organic", :availability => true, :manufacturer => "Chocolatemakers", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocolate Bar Pure (75%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "organic", :availability => true, :manufacturer => "Chocolatemakers", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocolate Bar Swan Pure (75%)", :supplier_id => 2, :article_category_id => 14, :unit => "120gr", :note => "organic", :availability => true, :manufacturer => "Chocolatemakers", :origin => "NL", :price => 0.66E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Cacao nibs", :supplier_id => 2, :article_category_id => 14, :unit => "1 kg", :note => "organic", :availability => true, :manufacturer => "Chocolatemakers", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Cheese Cow-young", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.88E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese cow- young matured", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.99E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese cow- matured", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 12)
-Article.create!(:name => "Cheese cow- extra matured", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.12E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "cheese Cow- old", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "cheese cow -very old", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.12E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese Cow-nettle young", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.99E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese cow- nettle young matured", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.1075E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese cow- nettle matured", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese Cow-cumin young", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.99E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese cow- cumin young matured", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.1075E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cheese cow- cumin matured", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "organic", :availability => true, :manufacturer => "Cheesefarm", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cashew nuts", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.4444E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 22, :order_number => ":b936051")
-Article.create!(:name => "Hazel white", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":9e3f85b")
-Article.create!(:name => "Hazel brown", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":d278041")
-Article.create!(:name => "Almond Brown Spanish", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.999E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":0b51a8d")
-Article.create!(:name => "Brazil nuts (organic)", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.6666E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 20, :order_number => ":01e59e3")
-Article.create!(:name => "Organic walnut light halves", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.333E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":7ff8587")
-Article.create!(:name => "Pinenuts", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 25, :order_number => ":aa88d9f")
-Article.create!(:name => "Pumpkin", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 25, :order_number => ":e63069b")
-Article.create!(:name => "Sunflower seeds (organic)", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.999E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 25, :order_number => ":0428388")
-Article.create!(:name => "Amandel White Spaans", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "organic", :availability => true, :price => 0.66666E3, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":a8f0734")
-Article.create!(:name => "Cashew", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.6666E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":1d26958")
-Article.create!(:name => "Almonds blanched", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.333E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":31439e2")
-Article.create!(:name => "Almonds natural", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":9c49374")
-Article.create!(:name => "Walnut ELH halves", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.4444E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":92907d1")
-Article.create!(:name => "Walnut ELP parts", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.8888E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":395640e")
-Article.create!(:name => "Brazil nuts", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.8888E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":710acbb")
-Article.create!(:name => "Macadamia type 0", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":bbaf40b")
-Article.create!(:name => "Pecan", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55555E3, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":7958183")
-Article.create!(:name => "Hazelnuts natural", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.6666E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":50392a8")
-Article.create!(:name => "Hazelnuts blanched", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":4fe6525")
-Article.create!(:name => "Mixed Nuts", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.333E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":c051b22")
-Article.create!(:name => "Peanuts", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.777E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":f507577")
-Article.create!(:name => "Small peanuts", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.8888E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":ce563bb")
-Article.create!(:name => "Medjoul dates", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":8232061")
-Article.create!(:name => "Turkish apricots natural", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":185084f")
-Article.create!(:name => "Turkish apricots sulfurised", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":2b2fb20")
-Article.create!(:name => "Spanish Figs", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.444E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":82590b1")
-Article.create!(:name => "Turkish Figs", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.555E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":cabeeb6")
-Article.create!(:name => "Sour Apricots South-Africa", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":2ac18b7")
-Article.create!(:name => "Blue raisins Flames", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":16bfa75")
-Article.create!(:name => "Yellow Raisins", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.2222E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":1c59324")
-Article.create!(:name => "Red Raisins", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":c3fcd84")
-Article.create!(:name => "Cranberries whole", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.222E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":921c168")
-Article.create!(:name => "Dried apples", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.555E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":902c67b")
-Article.create!(:name => "Dried plums without core", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.222E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":a847f91")
-Article.create!(:name => "Pumpkin seeds", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.111E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":535645f")
-Article.create!(:name => "Sunflower seeds", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.666E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":4ab9a83")
-Article.create!(:name => "Linseed", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":04be223")
-Article.create!(:name => "Poppy seeds", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.7777E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":ec5b2b9")
-Article.create!(:name => "Pine nuts medium china", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.2222E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":0e5b0b8")
-Article.create!(:name => "Goji berries", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":d52ee00")
-Article.create!(:name => "Mulberries", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.5555E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":5f46bd5")
-Article.create!(:name => "Peeled Hemp", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.5555E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":c39165b")
-Article.create!(:name => "Incaberries", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":8d44fe7")
-Article.create!(:name => "Blueberries", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.2222E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":9a95422")
-Article.create!(:name => "Chia seeds", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55555E3, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":416d57b")
-Article.create!(:name => "Coconut grated", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":b3f65e4")
+Article.create!(name: 'Brown whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Brown half', supplier_id: 1, article_category_id: 5, unit: 'pc', note: 'organic',
+ availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Brown sesame whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Brown sesame half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Light wheat whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Light wheat half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Bread with sunflower seeds whole', supplier_id: 1, article_category_id: 5,
+ unit: 'pc', note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Bread with sunflower seeds half', supplier_id: 1, article_category_id: 5,
+ unit: 'pc', note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Bread with walnuts whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Bread with walnuts half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Kennemerlandbread whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Kennemerlandbread half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Maize bread whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Maize bread half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 1200 gram whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 1200 gram half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 900 gram whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 900 gram half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Speltbread whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Speltbread half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Country bread 900gram whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Country bread 900gram half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'White whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'White half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'White with poppy seeds whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'White with poppy seeds half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Fig bread whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Fig bread half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Beer-based bread whole', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Beer-based bread half', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Raisin bun', supplier_id: 1, article_category_id: 5, unit: 'pc', note: 'organic',
+ availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.99E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Muesli bun', supplier_id: 1, article_category_id: 5, unit: 'pc', note: 'organic',
+ availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Brioche', supplier_id: 1, article_category_id: 5, unit: 'pc', note: 'organic',
+ availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.99E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Brown croissant', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Croissants', supplier_id: 1, article_category_id: 5, unit: 'pc', note: 'organic',
+ availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Cheese croissants', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocolatecroissants', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Soepstengels white', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Soepstengels volkoren', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.99E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Pumpkin-seed buns', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.88E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'White buns', supplier_id: 1, article_category_id: 5, unit: 'pc', note: 'organic',
+ availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.66E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Brown buns', supplier_id: 1, article_category_id: 5, unit: 'pc', note: 'organic',
+ availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.66E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Tomato-feta bread', supplier_id: 1, article_category_id: 5, unit: 'pc',
+ note: 'organic', availability: true, manufacturer: 'The Baker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocolate Bar Milk (37%)', supplier_id: 2, article_category_id: 14, unit: '90gr',
+ note: 'organic', availability: true, manufacturer: 'Chocolatemakers', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocolate Bar Pure (68%)', supplier_id: 2, article_category_id: 14, unit: '90gr',
+ note: 'organic', availability: true, manufacturer: 'Chocolatemakers', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocolate Bar Milk (40%)', supplier_id: 2, article_category_id: 14, unit: '90gr',
+ note: 'organic', availability: true, manufacturer: 'Chocolatemakers', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocolate Bar Pure (75%)', supplier_id: 2, article_category_id: 14, unit: '90gr',
+ note: 'organic', availability: true, manufacturer: 'Chocolatemakers', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocolate Bar Swan Pure (75%)', supplier_id: 2, article_category_id: 14,
+ unit: '120gr', note: 'organic', availability: true, manufacturer: 'Chocolatemakers', origin: 'NL', price: 0.66E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Cacao nibs', supplier_id: 2, article_category_id: 14, unit: '1 kg',
+ note: 'organic', availability: true, manufacturer: 'Chocolatemakers', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Cheese Cow-young', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.88E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese cow- young matured', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.99E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese cow- matured', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 12)
+Article.create!(name: 'Cheese cow- extra matured', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.12E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'cheese Cow- old', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'cheese cow -very old', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.12E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese Cow-nettle young', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.99E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese cow- nettle young matured', supplier_id: 3, article_category_id: 8,
+ unit: 'kg', note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.1075E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese cow- nettle matured', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese Cow-cumin young', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.99E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese cow- cumin young matured', supplier_id: 3, article_category_id: 8,
+ unit: 'kg', note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.1075E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cheese cow- cumin matured', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'organic', availability: true, manufacturer: 'Cheesefarm', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cashew nuts', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.4444E2, tax: 6.0, deposit: 0.0, unit_quantity: 22, order_number: ':b936051')
+Article.create!(name: 'Hazel white', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':9e3f85b')
+Article.create!(name: 'Hazel brown', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':d278041')
+Article.create!(name: 'Almond Brown Spanish', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.999E1, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':0b51a8d')
+Article.create!(name: 'Brazil nuts (organic)', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.6666E2, tax: 6.0, deposit: 0.0, unit_quantity: 20, order_number: ':01e59e3')
+Article.create!(name: 'Organic walnut light halves', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.333E1, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':7ff8587')
+Article.create!(name: 'Pinenuts', supplier_id: 4, article_category_id: 13, unit: 'kg', note: 'organic',
+ availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 25, order_number: ':aa88d9f')
+Article.create!(name: 'Pumpkin', supplier_id: 4, article_category_id: 13, unit: 'kg', note: 'organic',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 25, order_number: ':e63069b')
+Article.create!(name: 'Sunflower seeds (organic)', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.999E1, tax: 6.0, deposit: 0.0, unit_quantity: 25, order_number: ':0428388')
+Article.create!(name: 'Amandel White Spaans', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'organic', availability: true, price: 0.66666E3, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':a8f0734')
+Article.create!(name: 'Cashew', supplier_id: 4, article_category_id: 13, unit: 'kg', availability: true,
+ price: 0.6666E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':1d26958')
+Article.create!(name: 'Almonds blanched', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.333E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':31439e2')
+Article.create!(name: 'Almonds natural', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':9c49374')
+Article.create!(name: 'Walnut ELH halves', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.4444E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':92907d1')
+Article.create!(name: 'Walnut ELP parts', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.8888E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':395640e')
+Article.create!(name: 'Brazil nuts', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.8888E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':710acbb')
+Article.create!(name: 'Macadamia type 0', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':bbaf40b')
+Article.create!(name: 'Pecan', supplier_id: 4, article_category_id: 13, unit: 'kg', availability: true,
+ price: 0.55555E3, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':7958183')
+Article.create!(name: 'Hazelnuts natural', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.6666E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':50392a8')
+Article.create!(name: 'Hazelnuts blanched', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':4fe6525')
+Article.create!(name: 'Mixed Nuts', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.333E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':c051b22')
+Article.create!(name: 'Peanuts', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.777E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':f507577')
+Article.create!(name: 'Small peanuts', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.8888E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':ce563bb')
+Article.create!(name: 'Medjoul dates', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':8232061')
+Article.create!(name: 'Turkish apricots natural', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':185084f')
+Article.create!(name: 'Turkish apricots sulfurised', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':2b2fb20')
+Article.create!(name: 'Spanish Figs', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.444E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':82590b1')
+Article.create!(name: 'Turkish Figs', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.555E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':cabeeb6')
+Article.create!(name: 'Sour Apricots South-Africa', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':2ac18b7')
+Article.create!(name: 'Blue raisins Flames', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':16bfa75')
+Article.create!(name: 'Yellow Raisins', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.2222E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':1c59324')
+Article.create!(name: 'Red Raisins', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':c3fcd84')
+Article.create!(name: 'Cranberries whole', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.222E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':921c168')
+Article.create!(name: 'Dried apples', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.555E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':902c67b')
+Article.create!(name: 'Dried plums without core', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.222E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':a847f91')
+Article.create!(name: 'Pumpkin seeds', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.111E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':535645f')
+Article.create!(name: 'Sunflower seeds', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.666E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':4ab9a83')
+Article.create!(name: 'Linseed', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.55E0, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':04be223')
+Article.create!(name: 'Poppy seeds', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.7777E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':ec5b2b9')
+Article.create!(name: 'Pine nuts medium china', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.2222E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':0e5b0b8')
+Article.create!(name: 'Goji berries', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':d52ee00')
+Article.create!(name: 'Mulberries', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.5555E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':5f46bd5')
+Article.create!(name: 'Peeled Hemp', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.5555E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':c39165b')
+Article.create!(name: 'Incaberries', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':8d44fe7')
+Article.create!(name: 'Blueberries', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.2222E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':9a95422')
+Article.create!(name: 'Chia seeds', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.55555E3, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':416d57b')
+Article.create!(name: 'Coconut grated', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.55E0, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':b3f65e4')
## Members & groups
-User.create!(:id => 1, :nick => "admin", :password => "secret", :first_name => "Anton", :last_name => "Administrator", :email => "admin@foo.test", :phone => "+4421486548", :created_on => 'Wed, 15 Jan 2014 16:15:33 UTC +00:00')
-User.create!(:id => 2, :nick => "john", :password => "secret", :first_name => "John", :last_name => "Doe", :email => "john@doe.test", :created_on => 'Sun, 19 Jan 2014 17:38:22 UTC +00:00')
-User.create!(:id => 3, :nick => "peter", :password => "secret", :first_name => "Peter", :last_name => "Peters", :email => "peter@peters.test", :phone => "+4711235486811", :created_on => 'Sat, 25 Jan 2014 20:20:36 UTC +00:00')
-User.create!(:id => 4, :nick => "jan", :password => "secret", :first_name => "Jan", :last_name => "Lou", :email => "jan@lou.test", :created_on => 'Mon, 27 Jan 2014 16:22:14 UTC +00:00')
-User.create!(:id => 5, :nick => "mary", :password => "secret", :first_name => "Mary", :last_name => "Lou", :email => "marie@lou.test", :created_on => 'Mon, 03 Feb 2014 11:47:17 UTC +00:00')
-User.find_by_nick("mary").update(last_activity: 5.days.ago)
+User.create!(id: 1, nick: 'admin', password: 'secret', first_name: 'Anton', last_name: 'Administrator',
+ email: 'admin@foo.test', phone: '+4421486548', created_on: 'Wed, 15 Jan 2014 16:15:33 UTC +00:00')
+User.create!(id: 2, nick: 'john', password: 'secret', first_name: 'John', last_name: 'Doe',
+ email: 'john@doe.test', created_on: 'Sun, 19 Jan 2014 17:38:22 UTC +00:00')
+User.create!(id: 3, nick: 'peter', password: 'secret', first_name: 'Peter', last_name: 'Peters',
+ email: 'peter@peters.test', phone: '+4711235486811', created_on: 'Sat, 25 Jan 2014 20:20:36 UTC +00:00')
+User.create!(id: 4, nick: 'jan', password: 'secret', first_name: 'Jan', last_name: 'Lou',
+ email: 'jan@lou.test', created_on: 'Mon, 27 Jan 2014 16:22:14 UTC +00:00')
+User.create!(id: 5, nick: 'mary', password: 'secret', first_name: 'Mary', last_name: 'Lou',
+ email: 'marie@lou.test', created_on: 'Mon, 03 Feb 2014 11:47:17 UTC +00:00')
+User.find_by_nick('mary').update(last_activity: 5.days.ago)
-Workgroup.create!(:id => 1, :name => "Administrators", :description => "System administrators.", :account_balance => 0.0, :created_on => 'Wed, 15 Jan 2014 16:15:33 UTC +00:00', :role_admin => true, :role_suppliers => true, :role_article_meta => true, :role_finance => true, :role_orders => true, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Workgroup.create!(:id => 2, :name => "Finances", :account_balance => 0.0, :created_on => 'Sun, 19 Jan 2014 17:40:03 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => true, :role_orders => false, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Workgroup.create!(:id => 3, :name => "Ordering", :account_balance => 0.0, :created_on => 'Thu, 20 Feb 2014 14:44:47 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => true, :role_finance => false, :role_orders => true, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Workgroup.create!(:id => 4, :name => "Assortment", :account_balance => 0.0, :created_on => 'Wed, 09 Apr 2014 12:24:55 UTC +00:00', :role_admin => false, :role_suppliers => true, :role_article_meta => true, :role_finance => false, :role_orders => false, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Ordergroup.create!(:id => 5, :name => "Admin Administrator", :account_balance => 0.0, :created_on => 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :stats => { :jobs_size => 0, :orders_sum => 1021.74 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => true)
-Ordergroup.create!(:id => 6, :name => "Pete's house", :account_balance => -0.35E2, :created_on => 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :contact_person => "Piet Pieterssen", :stats => { :jobs_size => 0, :orders_sum => 60.96 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Ordergroup.create!(:id => 7, :name => "Jan Klaassen", :account_balance => -0.35E2, :created_on => 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :contact_person => "Jan Klaassen", :stats => { :jobs_size => 0, :orders_sum => 0 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Ordergroup.create!(:id => 8, :name => "John Doe", :account_balance => 0.90E2, :created_on => 'Wed, 09 Apr 2014 12:23:29 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :contact_person => "John Doe", :stats => { :jobs_size => 0, :orders_sum => 0 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
+Workgroup.create!(id: 1, name: 'Administrators', description: 'System administrators.',
+ account_balance: 0.0, created_on: 'Wed, 15 Jan 2014 16:15:33 UTC +00:00', role_admin: true, role_suppliers: true, role_article_meta: true, role_finance: true, role_orders: true, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Workgroup.create!(id: 2, name: 'Finances', account_balance: 0.0,
+ created_on: 'Sun, 19 Jan 2014 17:40:03 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: true, role_orders: false, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Workgroup.create!(id: 3, name: 'Ordering', account_balance: 0.0,
+ created_on: 'Thu, 20 Feb 2014 14:44:47 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: true, role_finance: false, role_orders: true, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Workgroup.create!(id: 4, name: 'Assortment', account_balance: 0.0,
+ created_on: 'Wed, 09 Apr 2014 12:24:55 UTC +00:00', role_admin: false, role_suppliers: true, role_article_meta: true, role_finance: false, role_orders: false, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Ordergroup.create!(id: 5, name: 'Admin Administrator', account_balance: 0.0,
+ created_on: 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, stats: { jobs_size: 0, orders_sum: 1021.74 }, next_weekly_tasks_number: 8, ignore_apple_restriction: true)
+Ordergroup.create!(id: 6, name: "Pete's house", account_balance: -0.35E2,
+ created_on: 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, contact_person: 'Piet Pieterssen', stats: { jobs_size: 0, orders_sum: 60.96 }, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Ordergroup.create!(id: 7, name: 'Jan Klaassen', account_balance: -0.35E2,
+ created_on: 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, contact_person: 'Jan Klaassen', stats: { jobs_size: 0, orders_sum: 0 }, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Ordergroup.create!(id: 8, name: 'John Doe', account_balance: 0.90E2,
+ created_on: 'Wed, 09 Apr 2014 12:23:29 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, contact_person: 'John Doe', stats: { jobs_size: 0, orders_sum: 0 }, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
-Membership.create!(:group_id => 1, :user_id => 1)
-Membership.create!(:group_id => 5, :user_id => 1)
-Membership.create!(:group_id => 2, :user_id => 2)
-Membership.create!(:group_id => 8, :user_id => 2)
-Membership.create!(:group_id => 6, :user_id => 3)
-Membership.create!(:group_id => 7, :user_id => 4)
-Membership.create!(:group_id => 8, :user_id => 4)
-Membership.create!(:group_id => 3, :user_id => 4)
-Membership.create!(:group_id => 7, :user_id => 5)
-Membership.create!(:group_id => 3, :user_id => 5)
-Membership.create!(:group_id => 4, :user_id => 5)
+Membership.create!(group_id: 1, user_id: 1)
+Membership.create!(group_id: 5, user_id: 1)
+Membership.create!(group_id: 2, user_id: 2)
+Membership.create!(group_id: 8, user_id: 2)
+Membership.create!(group_id: 6, user_id: 3)
+Membership.create!(group_id: 7, user_id: 4)
+Membership.create!(group_id: 8, user_id: 4)
+Membership.create!(group_id: 3, user_id: 4)
+Membership.create!(group_id: 7, user_id: 5)
+Membership.create!(group_id: 3, user_id: 5)
+Membership.create!(group_id: 4, user_id: 5)
## Orders & OrderArticles
@@ -182,10 +308,15 @@ seed_group_orders
## Finances
-FinancialTransactionType.create!(:id => 1, :name => "Foodcoop", :financial_transaction_class_id => 1)
+FinancialTransactionType.create!(id: 1, name: 'Foodcoop', financial_transaction_class_id: 1)
-FinancialTransaction.create!(:id => 1, :ordergroup_id => 5, :amount => -0.35E2, :note => "Membership fee for ordergroup", :user_id => 1, :created_on => 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 3, :ordergroup_id => 6, :amount => -0.35E2, :note => "Membership fee for ordergroup", :user_id => 1, :created_on => 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 4, :ordergroup_id => 7, :amount => -0.35E2, :note => "Membership fee for ordergroup", :user_id => 1, :created_on => 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 5, :ordergroup_id => 5, :amount => 0.35E2, :note => "payment", :user_id => 2, :created_on => 'Wed, 05 Feb 2014 16:49:24 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 6, :ordergroup_id => 8, :amount => 0.90E2, :note => "Bank transfer", :user_id => 2, :created_on => 'Mon, 17 Feb 2014 16:19:34 UTC +00:00', :financial_transaction_type_id => 1)
+FinancialTransaction.create!(id: 1, ordergroup_id: 5, amount: -0.35E2,
+ note: 'Membership fee for ordergroup', user_id: 1, created_on: 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 3, ordergroup_id: 6, amount: -0.35E2,
+ note: 'Membership fee for ordergroup', user_id: 1, created_on: 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 4, ordergroup_id: 7, amount: -0.35E2,
+ note: 'Membership fee for ordergroup', user_id: 1, created_on: 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 5, ordergroup_id: 5, amount: 0.35E2, note: 'payment', user_id: 2,
+ created_on: 'Wed, 05 Feb 2014 16:49:24 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 6, ordergroup_id: 8, amount: 0.90E2, note: 'Bank transfer', user_id: 2,
+ created_on: 'Mon, 17 Feb 2014 16:19:34 UTC +00:00', financial_transaction_type_id: 1)
diff --git a/db/seeds/small.nl.seeds.rb b/db/seeds/small.nl.seeds.rb
index afa9cc04..1dd39992 100644
--- a/db/seeds/small.nl.seeds.rb
+++ b/db/seeds/small.nl.seeds.rb
@@ -1,173 +1,300 @@
-require_relative 'seed_helper.rb'
+require_relative 'seed_helper'
## Financial transaction classes
-FinancialTransactionClass.create!(:id => 1, :name => 'Standaard')
-FinancialTransactionClass.create!(:id => 2, :name => 'Foodsoft')
+FinancialTransactionClass.create!(id: 1, name: 'Standaard')
+FinancialTransactionClass.create!(id: 2, name: 'Foodsoft')
## Suppliers & articles
-SupplierCategory.create!(:id => 1, :name => "Other", :financial_transaction_class_id => 1)
+SupplierCategory.create!(id: 1, name: 'Other', financial_transaction_class_id: 1)
Supplier.create!([
- { :id => 1, :name => "Koekenbakker", :supplier_category_id => 1, :address => "Dorpsstraat 1, Koekange", :phone => "012 3456789", :email => "info@dekoekenbakker.test", :min_order_quantity => "100" },
- { :id => 2, :name => "Chocolademakkers", :supplier_category_id => 1, :address => "Multatuliweg 1, Amsterdam", :phone => "012 3456789", :email => "info@chocolademakkers.test", :url => "http://www.chocolademakkers.test/", :contact_person => "Max Puur", :delivery_days => "di, vr (Amsterdam)" },
- { :id => 3, :name => "Kaasmaker", :supplier_category_id => 1, :address => "Waagplein, Alkmaar", :phone => "012 3456789", :url => "http://www.kaaskamer.test/" },
- { :id => 4, :name => "Notenhuis", :supplier_category_id => 1, :address => "Damrak 1, Amsterdam", :phone => "012 3456789", :email => "info@notenhuis.test", :url => "http://www.notenhuis.test/", :note => "leveren in Amsterdam; €9 leverkosten bij bestellingen onder €123" }
+ { id: 1, name: 'Koekenbakker', supplier_category_id: 1,
+ address: 'Dorpsstraat 1, Koekange', phone: '012 3456789', email: 'info@dekoekenbakker.test', min_order_quantity: '100' },
+ { id: 2, name: 'Chocolademakkers', supplier_category_id: 1,
+ address: 'Multatuliweg 1, Amsterdam', phone: '012 3456789', email: 'info@chocolademakkers.test', url: 'http://www.chocolademakkers.test/', contact_person: 'Max Puur', delivery_days: 'di, vr (Amsterdam)' },
+ { id: 3, name: 'Kaasmaker', supplier_category_id: 1, address: 'Waagplein, Alkmaar',
+ phone: '012 3456789', url: 'http://www.kaaskamer.test/' },
+ { id: 4, name: 'Notenhuis', supplier_category_id: 1, address: 'Damrak 1, Amsterdam',
+ phone: '012 3456789', email: 'info@notenhuis.test', url: 'http://www.notenhuis.test/', note: 'leveren in Amsterdam; €9 leverkosten bij bestellingen onder €123' }
])
-ArticleCategory.create!(:id => 1, :name => "Other", :description => "overig, anders, onbekend")
-ArticleCategory.create!(:id => 2, :name => "Fruit")
-ArticleCategory.create!(:id => 3, :name => "Groenten")
-ArticleCategory.create!(:id => 4, :name => "Aardappels & uien")
-ArticleCategory.create!(:id => 5, :name => "Brood & Bakkerij")
-ArticleCategory.create!(:id => 6, :name => "Dranken", :description => "sap, fruitsap, groentesap, frisdrank")
-ArticleCategory.create!(:id => 7, :name => "Kruiden", :description => "kruiden, specerijen, conserveringsmiddelen, extracten")
-ArticleCategory.create!(:id => 8, :name => "Zuivel", :description => "melk, boter, room, yoghurt, kaas, eieren, zuivelvervangers")
-ArticleCategory.create!(:id => 9, :name => "Vis & Zee", :description => "vis, schaaldieren, schelpdieren")
-ArticleCategory.create!(:id => 10, :name => "Vlees & Gevogelte")
-ArticleCategory.create!(:id => 11, :name => "Oliën & Vetten")
-ArticleCategory.create!(:id => 12, :name => "Graan & Peulvruchten")
-ArticleCategory.create!(:id => 13, :name => "Noten & Zaden")
-ArticleCategory.create!(:id => 14, :name => "Zoetwaren & Zoetstof")
+ArticleCategory.create!(id: 1, name: 'Other', description: 'overig, anders, onbekend')
+ArticleCategory.create!(id: 2, name: 'Fruit')
+ArticleCategory.create!(id: 3, name: 'Groenten')
+ArticleCategory.create!(id: 4, name: 'Aardappels & uien')
+ArticleCategory.create!(id: 5, name: 'Brood & Bakkerij')
+ArticleCategory.create!(id: 6, name: 'Dranken', description: 'sap, fruitsap, groentesap, frisdrank')
+ArticleCategory.create!(id: 7, name: 'Kruiden',
+ description: 'kruiden, specerijen, conserveringsmiddelen, extracten')
+ArticleCategory.create!(id: 8, name: 'Zuivel',
+ description: 'melk, boter, room, yoghurt, kaas, eieren, zuivelvervangers')
+ArticleCategory.create!(id: 9, name: 'Vis & Zee', description: 'vis, schaaldieren, schelpdieren')
+ArticleCategory.create!(id: 10, name: 'Vlees & Gevogelte')
+ArticleCategory.create!(id: 11, name: 'Oliën & Vetten')
+ArticleCategory.create!(id: 12, name: 'Graan & Peulvruchten')
+ArticleCategory.create!(id: 13, name: 'Noten & Zaden')
+ArticleCategory.create!(id: 14, name: 'Zoetwaren & Zoetstof')
-Article.create!(:name => "Volkoren heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Volkoren half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Volkoren sesam heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Volkoren sesam half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Licht tarwe heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Licht tarwe half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Zonnebloempitbrood heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Zonnebloempitbrood half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Walnoten vloer heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Walnoten vloer half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Kennemerlandbrood heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Kennemerlandbrood half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Maisbrood heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Maisbrood half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 1200 gram heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 1200 gram half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 900 gram heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Oberlander 900 gram half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Speltbrood heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Speltbrood half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Landbrood 900gram heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Landbrood 900gram half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Wit heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Wit half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Wit met maanzaad heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Wit met maanzaad half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Vijgenbrood heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Vijgenbrood half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Bierborstelbrood heel", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.33E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Bierborstelbrood half", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Krentenbol", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.99E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Mueslibol", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Brioche", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.91E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Volkoren croissant", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Croissants", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Kaas croissants", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocoladecroissants", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Soepstengels wit", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Soepstengels volkoren", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.99E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Pompoenpitten broodjes", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.88E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Witte kadetjes", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.66E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Bruine kadetjes", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.66E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Tomaten feta broodje", :supplier_id => 1, :article_category_id => 5, :unit => "stuk", :note => "bio", :availability => true, :manufacturer => "De Bakker", :origin => "NL", :price => 0.11E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocoladereep Melk (37%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "bio", :availability => true, :manufacturer => "Chocolademakkers", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocoladereep Puur (68%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "bio", :availability => true, :manufacturer => "Chocolademakkers", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocoladereep Drie Mensen Melk (40%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "bio", :availability => true, :manufacturer => "Chocolademakkers", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocoladereep Drie Mensen Puur (75%)", :supplier_id => 2, :article_category_id => 14, :unit => "90gr", :note => "bio", :availability => true, :manufacturer => "Chocolademakkers", :origin => "NL", :price => 0.22E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Chocoladereep Zwaan Puur (75%)", :supplier_id => 2, :article_category_id => 14, :unit => "120gr", :note => "bio", :availability => true, :manufacturer => "Chocolademakkers", :origin => "NL", :price => 0.66E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Cacao nibs", :supplier_id => 2, :article_category_id => 14, :unit => "1 kg", :note => "bio", :availability => true, :manufacturer => "Chocolademakkers", :origin => "NL", :price => 0.10E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1)
-Article.create!(:name => "Kaas Koe-jong", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.88E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas koe- jong belegen", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.99E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas koe- belegen", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 12)
-Article.create!(:name => "Kaas koe- extra belegen", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "kaas Koe- oud", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.1375E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "kaas koe -overjarig", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas Koe-brandnetel jong", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.99E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas koe- brandnetel jong belegen", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas koe- brandnetel belegen", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas Koe-komijn jong", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.99E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas koe- komijn jong belegen", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Kaas koe- komijn belegen", :supplier_id => 3, :article_category_id => 8, :unit => "kg", :note => "bio", :availability => true, :manufacturer => "Kaasboerderij", :origin => "NL", :price => 0.11E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 8)
-Article.create!(:name => "Cashewnoten", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.4444E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 22, :order_number => ":b936051")
-Article.create!(:name => "Hazel wit", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":9e3f85b")
-Article.create!(:name => "Hazel bruin", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":d278041")
-Article.create!(:name => "Amandel Bruin Spaans", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.999E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":0b51a8d")
-Article.create!(:name => "Paranoten (bio)", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.6666E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 20, :order_number => ":01e59e3")
-Article.create!(:name => "Bio walnoten light halfjes", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.333E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":7ff8587")
-Article.create!(:name => "Pijnboompitten", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 25, :order_number => ":aa88d9f")
-Article.create!(:name => "Pompoen", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 25, :order_number => ":e63069b")
-Article.create!(:name => "Zonnepitten (bio)", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.999E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 25, :order_number => ":0428388")
-Article.create!(:name => "Amandel Wit Spaans", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :note => "bio", :availability => true, :price => 0.66666E3, :tax => 6.0, :deposit => 0.0, :unit_quantity => 10, :order_number => ":a8f0734")
-Article.create!(:name => "Cashew", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.6666E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":1d26958")
-Article.create!(:name => "Amandelen geblancheerd", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.333E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":31439e2")
-Article.create!(:name => "Amandelen naturel", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":9c49374")
-Article.create!(:name => "Walnoot ELH hafjes", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.4444E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":92907d1")
-Article.create!(:name => "Walnoot ELP stukjes", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.8888E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":395640e")
-Article.create!(:name => "Paranoten", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.8888E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":710acbb")
-Article.create!(:name => "Macadamia Stijl 0", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":bbaf40b")
-Article.create!(:name => "Pecan", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55555E3, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":7958183")
-Article.create!(:name => "Hazelnoten naturel", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.6666E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":50392a8")
-Article.create!(:name => "Hazelnoten geblancheerd", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":4fe6525")
-Article.create!(:name => "Gemengde Noten", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.333E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":c051b22")
-Article.create!(:name => "Pinda's", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.777E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":f507577")
-Article.create!(:name => "Vliespinda's klein", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.8888E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":ce563bb")
-Article.create!(:name => "Medjoul dadels", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.3333E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":8232061")
-Article.create!(:name => "Turkse Abrikozen ongezwaveld", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":185084f")
-Article.create!(:name => "Turkse Abrikozen gezwaveld", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":2b2fb20")
-Article.create!(:name => "Spaanse Vijgen", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.444E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":82590b1")
-Article.create!(:name => "Turkse Vijgen", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.555E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":cabeeb6")
-Article.create!(:name => "Zure Abrikozen Zuid Afrika", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":2ac18b7")
-Article.create!(:name => "Blauwe rozijnen Flames", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":16bfa75")
-Article.create!(:name => "Gele Rozijnen", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.2222E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":1c59324")
-Article.create!(:name => "Rode Rozijnen", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.1111E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":c3fcd84")
-Article.create!(:name => "Cranberries heel", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.222E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":921c168")
-Article.create!(:name => "Gedroogde Appeltjes", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.555E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":902c67b")
-Article.create!(:name => "Gedroogde pruimen zonder pit", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.222E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":a847f91")
-Article.create!(:name => "Pompoenpitten", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.111E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":535645f")
-Article.create!(:name => "Zonnenbloepitten", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.666E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":4ab9a83")
-Article.create!(:name => "Lijnzaad", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":04be223")
-Article.create!(:name => "Maanzaad", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.7777E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":ec5b2b9")
-Article.create!(:name => "Pijnboompitten medium china", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.2222E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":0e5b0b8")
-Article.create!(:name => "Goji bessen", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":d52ee00")
-Article.create!(:name => "Mulberries", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.5555E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":5f46bd5")
-Article.create!(:name => "Gepelde Hennep", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.5555E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":c39165b")
-Article.create!(:name => "Incaberries", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.888E1, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":8d44fe7")
-Article.create!(:name => "Blueberries", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.2222E2, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":9a95422")
-Article.create!(:name => "Chia zaad", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55555E3, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":416d57b")
-Article.create!(:name => "Cocos Rasp", :supplier_id => 4, :article_category_id => 13, :unit => "kg", :availability => true, :price => 0.55E0, :tax => 6.0, :deposit => 0.0, :unit_quantity => 1, :order_number => ":b3f65e4")
+Article.create!(name: 'Volkoren heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Volkoren half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Volkoren sesam heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Volkoren sesam half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Licht tarwe heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Licht tarwe half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Zonnebloempitbrood heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Zonnebloempitbrood half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Walnoten vloer heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Walnoten vloer half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Kennemerlandbrood heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Kennemerlandbrood half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Maisbrood heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Maisbrood half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 1200 gram heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 1200 gram half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 900 gram heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Oberlander 900 gram half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Speltbrood heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Speltbrood half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Landbrood 900gram heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Landbrood 900gram half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Wit heel', supplier_id: 1, article_category_id: 5, unit: 'stuk', note: 'bio',
+ availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Wit half', supplier_id: 1, article_category_id: 5, unit: 'stuk', note: 'bio',
+ availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Wit met maanzaad heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Wit met maanzaad half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Vijgenbrood heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Vijgenbrood half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Bierborstelbrood heel', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.33E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Bierborstelbrood half', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Krentenbol', supplier_id: 1, article_category_id: 5, unit: 'stuk', note: 'bio',
+ availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.99E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Mueslibol', supplier_id: 1, article_category_id: 5, unit: 'stuk', note: 'bio',
+ availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Brioche', supplier_id: 1, article_category_id: 5, unit: 'stuk', note: 'bio',
+ availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.91E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Volkoren croissant', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Croissants', supplier_id: 1, article_category_id: 5, unit: 'stuk', note: 'bio',
+ availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Kaas croissants', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocoladecroissants', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Soepstengels wit', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Soepstengels volkoren', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.99E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Pompoenpitten broodjes', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.88E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Witte kadetjes', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.66E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Bruine kadetjes', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.66E0, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Tomaten feta broodje', supplier_id: 1, article_category_id: 5, unit: 'stuk',
+ note: 'bio', availability: true, manufacturer: 'De Bakker', origin: 'NL', price: 0.11E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocoladereep Melk (37%)', supplier_id: 2, article_category_id: 14, unit: '90gr',
+ note: 'bio', availability: true, manufacturer: 'Chocolademakkers', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocoladereep Puur (68%)', supplier_id: 2, article_category_id: 14, unit: '90gr',
+ note: 'bio', availability: true, manufacturer: 'Chocolademakkers', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocoladereep Drie Mensen Melk (40%)', supplier_id: 2, article_category_id: 14,
+ unit: '90gr', note: 'bio', availability: true, manufacturer: 'Chocolademakkers', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocoladereep Drie Mensen Puur (75%)', supplier_id: 2, article_category_id: 14,
+ unit: '90gr', note: 'bio', availability: true, manufacturer: 'Chocolademakkers', origin: 'NL', price: 0.22E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Chocoladereep Zwaan Puur (75%)', supplier_id: 2, article_category_id: 14,
+ unit: '120gr', note: 'bio', availability: true, manufacturer: 'Chocolademakkers', origin: 'NL', price: 0.66E1, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Cacao nibs', supplier_id: 2, article_category_id: 14, unit: '1 kg', note: 'bio',
+ availability: true, manufacturer: 'Chocolademakkers', origin: 'NL', price: 0.10E2, tax: 6.0, deposit: 0.0, unit_quantity: 1)
+Article.create!(name: 'Kaas Koe-jong', supplier_id: 3, article_category_id: 8, unit: 'kg', note: 'bio',
+ availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.88E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas koe- jong belegen', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.99E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas koe- belegen', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 12)
+Article.create!(name: 'Kaas koe- extra belegen', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'kaas Koe- oud', supplier_id: 3, article_category_id: 8, unit: 'kg', note: 'bio',
+ availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.1375E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'kaas koe -overjarig', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas Koe-brandnetel jong', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.99E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas koe- brandnetel jong belegen', supplier_id: 3, article_category_id: 8,
+ unit: 'kg', note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas koe- brandnetel belegen', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas Koe-komijn jong', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.99E1, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas koe- komijn jong belegen', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Kaas koe- komijn belegen', supplier_id: 3, article_category_id: 8, unit: 'kg',
+ note: 'bio', availability: true, manufacturer: 'Kaasboerderij', origin: 'NL', price: 0.11E2, tax: 6.0, deposit: 0.0, unit_quantity: 8)
+Article.create!(name: 'Cashewnoten', supplier_id: 4, article_category_id: 13, unit: 'kg', note: 'bio',
+ availability: true, price: 0.4444E2, tax: 6.0, deposit: 0.0, unit_quantity: 22, order_number: ':b936051')
+Article.create!(name: 'Hazel wit', supplier_id: 4, article_category_id: 13, unit: 'kg', note: 'bio',
+ availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':9e3f85b')
+Article.create!(name: 'Hazel bruin', supplier_id: 4, article_category_id: 13, unit: 'kg', note: 'bio',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':d278041')
+Article.create!(name: 'Amandel Bruin Spaans', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'bio', availability: true, price: 0.999E1, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':0b51a8d')
+Article.create!(name: 'Paranoten (bio)', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'bio', availability: true, price: 0.6666E2, tax: 6.0, deposit: 0.0, unit_quantity: 20, order_number: ':01e59e3')
+Article.create!(name: 'Bio walnoten light halfjes', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'bio', availability: true, price: 0.333E1, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':7ff8587')
+Article.create!(name: 'Pijnboompitten', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'bio', availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 25, order_number: ':aa88d9f')
+Article.create!(name: 'Pompoen', supplier_id: 4, article_category_id: 13, unit: 'kg', note: 'bio',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 25, order_number: ':e63069b')
+Article.create!(name: 'Zonnepitten (bio)', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'bio', availability: true, price: 0.999E1, tax: 6.0, deposit: 0.0, unit_quantity: 25, order_number: ':0428388')
+Article.create!(name: 'Amandel Wit Spaans', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ note: 'bio', availability: true, price: 0.66666E3, tax: 6.0, deposit: 0.0, unit_quantity: 10, order_number: ':a8f0734')
+Article.create!(name: 'Cashew', supplier_id: 4, article_category_id: 13, unit: 'kg', availability: true,
+ price: 0.6666E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':1d26958')
+Article.create!(name: 'Amandelen geblancheerd', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.333E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':31439e2')
+Article.create!(name: 'Amandelen naturel', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':9c49374')
+Article.create!(name: 'Walnoot ELH hafjes', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.4444E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':92907d1')
+Article.create!(name: 'Walnoot ELP stukjes', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.8888E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':395640e')
+Article.create!(name: 'Paranoten', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.8888E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':710acbb')
+Article.create!(name: 'Macadamia Stijl 0', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':bbaf40b')
+Article.create!(name: 'Pecan', supplier_id: 4, article_category_id: 13, unit: 'kg', availability: true,
+ price: 0.55555E3, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':7958183')
+Article.create!(name: 'Hazelnoten naturel', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.6666E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':50392a8')
+Article.create!(name: 'Hazelnoten geblancheerd', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':4fe6525')
+Article.create!(name: 'Gemengde Noten', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.333E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':c051b22')
+Article.create!(name: "Pinda's", supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.777E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':f507577')
+Article.create!(name: "Vliespinda's klein", supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.8888E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':ce563bb')
+Article.create!(name: 'Medjoul dadels', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.3333E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':8232061')
+Article.create!(name: 'Turkse Abrikozen ongezwaveld', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':185084f')
+Article.create!(name: 'Turkse Abrikozen gezwaveld', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':2b2fb20')
+Article.create!(name: 'Spaanse Vijgen', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.444E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':82590b1')
+Article.create!(name: 'Turkse Vijgen', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.555E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':cabeeb6')
+Article.create!(name: 'Zure Abrikozen Zuid Afrika', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':2ac18b7')
+Article.create!(name: 'Blauwe rozijnen Flames', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':16bfa75')
+Article.create!(name: 'Gele Rozijnen', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.2222E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':1c59324')
+Article.create!(name: 'Rode Rozijnen', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.1111E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':c3fcd84')
+Article.create!(name: 'Cranberries heel', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.222E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':921c168')
+Article.create!(name: 'Gedroogde Appeltjes', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.555E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':902c67b')
+Article.create!(name: 'Gedroogde pruimen zonder pit', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.222E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':a847f91')
+Article.create!(name: 'Pompoenpitten', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.111E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':535645f')
+Article.create!(name: 'Zonnenbloepitten', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.666E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':4ab9a83')
+Article.create!(name: 'Lijnzaad', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.55E0, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':04be223')
+Article.create!(name: 'Maanzaad', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.7777E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':ec5b2b9')
+Article.create!(name: 'Pijnboompitten medium china', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.2222E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':0e5b0b8')
+Article.create!(name: 'Goji bessen', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':d52ee00')
+Article.create!(name: 'Mulberries', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.5555E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':5f46bd5')
+Article.create!(name: 'Gepelde Hennep', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.5555E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':c39165b')
+Article.create!(name: 'Incaberries', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.888E1, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':8d44fe7')
+Article.create!(name: 'Blueberries', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.2222E2, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':9a95422')
+Article.create!(name: 'Chia zaad', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.55555E3, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':416d57b')
+Article.create!(name: 'Cocos Rasp', supplier_id: 4, article_category_id: 13, unit: 'kg',
+ availability: true, price: 0.55E0, tax: 6.0, deposit: 0.0, unit_quantity: 1, order_number: ':b3f65e4')
## Members & groups
-User.create!(:id => 1, :nick => "admin", :password => "secret", :first_name => "Anton", :last_name => "Administrator", :email => "admin@foo.test", :created_on => 'Wed, 15 Jan 2014 16:15:33 UTC +00:00')
-User.create!(:id => 2, :nick => "john", :password => "secret", :first_name => "John", :last_name => "Doe", :email => "john@doe.test", :created_on => 'Sun, 19 Jan 2014 17:38:22 UTC +00:00')
-User.create!(:id => 3, :nick => "peter", :password => "secret", :first_name => "Peter", :last_name => "Pieterssen", :email => "peter@pieterssen.test", :created_on => 'Sat, 25 Jan 2014 20:20:36 UTC +00:00')
-User.create!(:id => 4, :nick => "jan", :password => "secret", :first_name => "Jan", :last_name => "Klaassen", :email => "jan@klaassen.test", :created_on => 'Mon, 27 Jan 2014 16:22:14 UTC +00:00')
-User.create!(:id => 5, :nick => "mary", :password => "secret", :first_name => "Marie", :last_name => "Klaassen", :email => "mary@klaassen.test", :created_on => 'Mon, 03 Feb 2014 11:47:17 UTC +00:00')
+User.create!(id: 1, nick: 'admin', password: 'secret', first_name: 'Anton', last_name: 'Administrator',
+ email: 'admin@foo.test', created_on: 'Wed, 15 Jan 2014 16:15:33 UTC +00:00')
+User.create!(id: 2, nick: 'john', password: 'secret', first_name: 'John', last_name: 'Doe',
+ email: 'john@doe.test', created_on: 'Sun, 19 Jan 2014 17:38:22 UTC +00:00')
+User.create!(id: 3, nick: 'peter', password: 'secret', first_name: 'Peter', last_name: 'Pieterssen',
+ email: 'peter@pieterssen.test', created_on: 'Sat, 25 Jan 2014 20:20:36 UTC +00:00')
+User.create!(id: 4, nick: 'jan', password: 'secret', first_name: 'Jan', last_name: 'Klaassen',
+ email: 'jan@klaassen.test', created_on: 'Mon, 27 Jan 2014 16:22:14 UTC +00:00')
+User.create!(id: 5, nick: 'mary', password: 'secret', first_name: 'Marie', last_name: 'Klaassen',
+ email: 'mary@klaassen.test', created_on: 'Mon, 03 Feb 2014 11:47:17 UTC +00:00')
-Workgroup.create!(:id => 1, :name => "Admins", :description => "Beheerders", :account_balance => 0.0, :created_on => 'Wed, 15 Jan 2014 16:15:33 UTC +00:00', :role_admin => true, :role_suppliers => true, :role_article_meta => true, :role_finance => true, :role_orders => true, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Workgroup.create!(:id => 2, :name => "Financiën", :account_balance => 0.0, :created_on => 'Sun, 19 Jan 2014 17:40:03 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => true, :role_orders => false, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Workgroup.create!(:id => 3, :name => "Bestellen", :account_balance => 0.0, :created_on => 'Thu, 20 Feb 2014 14:44:47 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => true, :role_finance => false, :role_orders => true, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Workgroup.create!(:id => 4, :name => "Assortiment", :account_balance => 0.0, :created_on => 'Wed, 09 Apr 2014 12:24:55 UTC +00:00', :role_admin => false, :role_suppliers => true, :role_article_meta => true, :role_finance => false, :role_orders => false, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Ordergroup.create!(:id => 5, :name => "Admin Administrator", :account_balance => 0.0, :created_on => 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :stats => { :jobs_size => 0, :orders_sum => 1021.74 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => true)
-Ordergroup.create!(:id => 6, :name => "Peter's huis", :account_balance => -0.35E2, :created_on => 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :contact_person => "Piet Pieterssen", :stats => { :jobs_size => 0, :orders_sum => 60.96 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Ordergroup.create!(:id => 7, :name => "Jan Klaassen", :account_balance => -0.35E2, :created_on => 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :contact_person => "Jan Klaassen", :stats => { :jobs_size => 0, :orders_sum => 0 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
-Ordergroup.create!(:id => 8, :name => "John Doe", :account_balance => 0.90E2, :created_on => 'Wed, 09 Apr 2014 12:23:29 UTC +00:00', :role_admin => false, :role_suppliers => false, :role_article_meta => false, :role_finance => false, :role_orders => false, :contact_person => "John Doe", :stats => { :jobs_size => 0, :orders_sum => 0 }, :next_weekly_tasks_number => 8, :ignore_apple_restriction => false)
+Workgroup.create!(id: 1, name: 'Admins', description: 'Beheerders', account_balance: 0.0,
+ created_on: 'Wed, 15 Jan 2014 16:15:33 UTC +00:00', role_admin: true, role_suppliers: true, role_article_meta: true, role_finance: true, role_orders: true, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Workgroup.create!(id: 2, name: 'Financiën', account_balance: 0.0,
+ created_on: 'Sun, 19 Jan 2014 17:40:03 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: true, role_orders: false, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Workgroup.create!(id: 3, name: 'Bestellen', account_balance: 0.0,
+ created_on: 'Thu, 20 Feb 2014 14:44:47 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: true, role_finance: false, role_orders: true, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Workgroup.create!(id: 4, name: 'Assortiment', account_balance: 0.0,
+ created_on: 'Wed, 09 Apr 2014 12:24:55 UTC +00:00', role_admin: false, role_suppliers: true, role_article_meta: true, role_finance: false, role_orders: false, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Ordergroup.create!(id: 5, name: 'Admin Administrator', account_balance: 0.0,
+ created_on: 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, stats: { jobs_size: 0, orders_sum: 1021.74 }, next_weekly_tasks_number: 8, ignore_apple_restriction: true)
+Ordergroup.create!(id: 6, name: "Peter's huis", account_balance: -0.35E2,
+ created_on: 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, contact_person: 'Piet Pieterssen', stats: { jobs_size: 0, orders_sum: 60.96 }, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Ordergroup.create!(id: 7, name: 'Jan Klaassen', account_balance: -0.35E2,
+ created_on: 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, contact_person: 'Jan Klaassen', stats: { jobs_size: 0, orders_sum: 0 }, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
+Ordergroup.create!(id: 8, name: 'John Doe', account_balance: 0.90E2,
+ created_on: 'Wed, 09 Apr 2014 12:23:29 UTC +00:00', role_admin: false, role_suppliers: false, role_article_meta: false, role_finance: false, role_orders: false, contact_person: 'John Doe', stats: { jobs_size: 0, orders_sum: 0 }, next_weekly_tasks_number: 8, ignore_apple_restriction: false)
-Membership.create!(:group_id => 1, :user_id => 1)
-Membership.create!(:group_id => 5, :user_id => 1)
-Membership.create!(:group_id => 2, :user_id => 2)
-Membership.create!(:group_id => 8, :user_id => 2)
-Membership.create!(:group_id => 6, :user_id => 3)
-Membership.create!(:group_id => 7, :user_id => 4)
-Membership.create!(:group_id => 8, :user_id => 4)
-Membership.create!(:group_id => 3, :user_id => 4)
-Membership.create!(:group_id => 7, :user_id => 5)
-Membership.create!(:group_id => 3, :user_id => 5)
-Membership.create!(:group_id => 4, :user_id => 5)
+Membership.create!(group_id: 1, user_id: 1)
+Membership.create!(group_id: 5, user_id: 1)
+Membership.create!(group_id: 2, user_id: 2)
+Membership.create!(group_id: 8, user_id: 2)
+Membership.create!(group_id: 6, user_id: 3)
+Membership.create!(group_id: 7, user_id: 4)
+Membership.create!(group_id: 8, user_id: 4)
+Membership.create!(group_id: 3, user_id: 4)
+Membership.create!(group_id: 7, user_id: 5)
+Membership.create!(group_id: 3, user_id: 5)
+Membership.create!(group_id: 4, user_id: 5)
## Orders & OrderArticles
@@ -181,10 +308,15 @@ seed_group_orders
## Finances
-FinancialTransactionType.create!(:id => 1, :name => "Foodcoop", :financial_transaction_class_id => 1)
+FinancialTransactionType.create!(id: 1, name: 'Foodcoop', financial_transaction_class_id: 1)
-FinancialTransaction.create!(:id => 1, :ordergroup_id => 5, :amount => -0.35E2, :note => "Membership fee for ordergroup", :user_id => 1, :created_on => 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 3, :ordergroup_id => 6, :amount => -0.35E2, :note => "Membership fee for ordergroup", :user_id => 1, :created_on => 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 4, :ordergroup_id => 7, :amount => -0.35E2, :note => "Membership fee for ordergroup", :user_id => 1, :created_on => 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 5, :ordergroup_id => 5, :amount => 0.35E2, :note => "payment", :user_id => 2, :created_on => 'Wed, 05 Feb 2014 16:49:24 UTC +00:00', :financial_transaction_type_id => 1)
-FinancialTransaction.create!(:id => 6, :ordergroup_id => 8, :amount => 0.90E2, :note => "Bank transfer", :user_id => 2, :created_on => 'Mon, 17 Feb 2014 16:19:34 UTC +00:00', :financial_transaction_type_id => 1)
+FinancialTransaction.create!(id: 1, ordergroup_id: 5, amount: -0.35E2,
+ note: 'Membership fee for ordergroup', user_id: 1, created_on: 'Sat, 18 Jan 2014 00:38:48 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 3, ordergroup_id: 6, amount: -0.35E2,
+ note: 'Membership fee for ordergroup', user_id: 1, created_on: 'Sat, 25 Jan 2014 20:20:37 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 4, ordergroup_id: 7, amount: -0.35E2,
+ note: 'Membership fee for ordergroup', user_id: 1, created_on: 'Mon, 27 Jan 2014 16:22:14 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 5, ordergroup_id: 5, amount: 0.35E2, note: 'payment', user_id: 2,
+ created_on: 'Wed, 05 Feb 2014 16:49:24 UTC +00:00', financial_transaction_type_id: 1)
+FinancialTransaction.create!(id: 6, ordergroup_id: 8, amount: 0.90E2, note: 'Bank transfer', user_id: 2,
+ created_on: 'Mon, 17 Feb 2014 16:19:34 UTC +00:00', financial_transaction_type_id: 1)
diff --git a/lib/tasks/foodsoft.rake b/lib/tasks/foodsoft.rake
index 760cd5bc..218bb39f 100644
--- a/lib/tasks/foodsoft.rake
+++ b/lib/tasks/foodsoft.rake
@@ -1,61 +1,61 @@
# put in here all foodsoft tasks
# => :environment loads the environment an gives easy access to the application
namespace :foodsoft do
- desc "Finish ended orders"
- task :finish_ended_orders => :environment do
+ desc 'Finish ended orders'
+ task finish_ended_orders: :environment do
Order.finish_ended!
end
- desc "Notify users of upcoming tasks"
- task :notify_upcoming_tasks => :environment do
+ desc 'Notify users of upcoming tasks'
+ task notify_upcoming_tasks: :environment do
tasks = Task.where(done: false, due_date: 1.day.from_now.to_date)
for task in tasks
rake_say "Send notifications for #{task.name} to .."
for user in task.users
- if user.settings.notify['upcoming_tasks']
- Mailer.deliver_now_with_user_locale user do
- Mailer.upcoming_tasks(user, task)
- end
+ next unless user.settings.notify['upcoming_tasks']
+
+ Mailer.deliver_now_with_user_locale user do
+ Mailer.upcoming_tasks(user, task)
end
end
end
end
- desc "Notify workgroup of upcoming weekly task"
- task :notify_users_of_weekly_task => :environment do
- tasks = Task.where(done: false, due_date: 7.day.from_now.to_date)
+ desc 'Notify workgroup of upcoming weekly task'
+ task notify_users_of_weekly_task: :environment do
+ tasks = Task.where(done: false, due_date: 7.days.from_now.to_date)
for task in tasks
- unless task.enough_users_assigned?
- workgroup = task.workgroup
- if workgroup
- rake_say "Notify workgroup: #{workgroup.name} for task #{task.name}"
- for user in workgroup.users
- if user.receive_email?
- Mailer.deliver_now_with_user_locale user do
- Mailer.not_enough_users_assigned(task, user)
- end
- end
- end
+ next if task.enough_users_assigned?
+
+ workgroup = task.workgroup
+ next unless workgroup
+
+ rake_say "Notify workgroup: #{workgroup.name} for task #{task.name}"
+ for user in workgroup.users
+ next unless user.receive_email?
+
+ Mailer.deliver_now_with_user_locale user do
+ Mailer.not_enough_users_assigned(task, user)
end
end
end
end
- desc "Create upcoming periodic tasks"
- task :create_upcoming_periodic_tasks => :environment do
+ desc 'Create upcoming periodic tasks'
+ task create_upcoming_periodic_tasks: :environment do
for tg in PeriodicTaskGroup.all
created_until = tg.create_tasks_for_upfront_days
rake_say "created until #{created_until}"
end
end
- desc "Parse incoming email on stdin (options: RECIPIENT=foodcoop.handling)"
- task :parse_reply_email => :environment do
+ desc 'Parse incoming email on stdin (options: RECIPIENT=foodcoop.handling)'
+ task parse_reply_email: :environment do
FoodsoftMailReceiver.received ENV.fetch('RECIPIENT', nil), STDIN.read
end
- desc "Start STMP server for incoming email (options: SMTP_SERVER_PORT=2525, SMTP_SERVER_HOST=0.0.0.0)"
- task :reply_email_smtp_server => :environment do
+ desc 'Start STMP server for incoming email (options: SMTP_SERVER_PORT=2525, SMTP_SERVER_HOST=0.0.0.0)'
+ task reply_email_smtp_server: :environment do
port = ENV['SMTP_SERVER_PORT'].present? ? ENV['SMTP_SERVER_PORT'].to_i : 2525
host = ENV.fetch('SMTP_SERVER_HOST', nil)
rake_say "Started SMTP server for incoming email on port #{port}."
@@ -64,8 +64,8 @@ namespace :foodsoft do
server.join
end
- desc "Import and assign bank transactions"
- task :import_and_assign_bank_transactions => :environment do
+ desc 'Import and assign bank transactions'
+ task import_and_assign_bank_transactions: :environment do
BankAccount.find_each do |ba|
importer = ba.find_connector
next unless importer
diff --git a/lib/tasks/foodsoft_setup.rake b/lib/tasks/foodsoft_setup.rake
index be2309ff..e7fe0a3b 100644
--- a/lib/tasks/foodsoft_setup.rake
+++ b/lib/tasks/foodsoft_setup.rake
@@ -9,14 +9,14 @@ module Colors
end
{
- :black => 30,
- :red => 31,
- :green => 32,
- :yellow => 33,
- :blue => 34,
- :magenta => 35,
- :cyan => 36,
- :white => 37
+ black: 30,
+ red: 31,
+ green: 32,
+ yellow: 33,
+ blue: 34,
+ magenta: 35,
+ cyan: 36,
+ white: 37
}.each do |key, color_code|
define_method key do |text|
colorize(text, color_code)
@@ -26,31 +26,31 @@ end
include Colors
namespace :foodsoft do
- desc "Setup foodsoft"
+ desc 'Setup foodsoft'
task :setup_development do
- puts yellow "This task will help you get your foodcoop running in development."
+ puts yellow 'This task will help you get your foodcoop running in development.'
setup_bundler
setup_app_config
setup_development
setup_database
setup_storage
start_mailcatcher
- puts yellow "All done! Your foodsoft setup should be running smoothly."
+ puts yellow 'All done! Your foodsoft setup should be running smoothly.'
start_server
end
- desc "Setup foodsoft"
+ desc 'Setup foodsoft'
task :setup_development_docker do
- puts yellow "This task will help you get your foodcoop running in development via docker."
+ puts yellow 'This task will help you get your foodcoop running in development via docker.'
setup_app_config
setup_development
setup_storage
setup_run_rake_db_setup
- puts yellow "All done! Your foodsoft setup should be running smoothly via docker."
+ puts yellow 'All done! Your foodsoft setup should be running smoothly via docker.'
end
namespace :setup do
- desc "Initialize stock configuration"
+ desc 'Initialize stock configuration'
task :stock_config do
setup_app_config
setup_storage
@@ -60,39 +60,39 @@ namespace :foodsoft do
end
def setup_bundler
- puts yellow "Installing bundler if not installed..."
+ puts yellow 'Installing bundler if not installed...'
%x(if [ -z `which bundle` ]; then gem install bundler --no-rdoc --no-ri; fi)
- puts yellow "Executing bundle install..."
- %x(bundle install)
+ puts yellow 'Executing bundle install...'
+ `bundle install`
end
def setup_database
file = 'config/database.yml'
if ENV['DATABASE_URL']
- puts blue "DATABASE_URL found, please remember to also set it when running Foodsoft"
+ puts blue 'DATABASE_URL found, please remember to also set it when running Foodsoft'
return nil
end
return nil if skip?(file)
- database = ask("What kind of database do you use?\nOptions:\n(1) MySQL\n(2) SQLite", ["1", "2"])
- if database == "1"
- puts yellow "Using MySQL..."
- %x(cp -p #{Rails.root.join("#{file}.MySQL_SAMPLE")} #{Rails.root.join(file)})
- elsif database == "2"
- puts yellow "Using SQLite..."
- %x(cp -p #{Rails.root.join("#{file}.SQLite_SAMPLE")} #{Rails.root.join(file)})
+ database = ask("What kind of database do you use?\nOptions:\n(1) MySQL\n(2) SQLite", %w[1 2])
+ if database == '1'
+ puts yellow 'Using MySQL...'
+ `cp -p #{Rails.root.join("#{file}.MySQL_SAMPLE")} #{Rails.root.join(file)}`
+ elsif database == '2'
+ puts yellow 'Using SQLite...'
+ `cp -p #{Rails.root.join("#{file}.SQLite_SAMPLE")} #{Rails.root.join(file)}`
end
reminder(file)
- puts blue "IMPORTANT: Edit (rake-generated) config/database.yml with valid username and password for EACH env before continuing!"
- finished = ask("Finished?\nOptions:\n(y) Yes", ["y"])
+ puts blue 'IMPORTANT: Edit (rake-generated) config/database.yml with valid username and password for EACH env before continuing!'
+ finished = ask("Finished?\nOptions:\n(y) Yes", ['y'])
setup_run_rake_db_setup if finished
end
def setup_run_rake_db_setup
- Rake::Task["db:setup"].reenable
- db_setup = capture_stdout { Rake::Task["db:setup"].invoke }
+ Rake::Task['db:setup'].reenable
+ db_setup = capture_stdout { Rake::Task['db:setup'].invoke }
puts db_setup
end
@@ -102,7 +102,7 @@ def setup_app_config
return nil if skip?(file)
puts yellow "Copying #{file}..."
- %x(cp -p #{sample} #{Rails.root.join(file)})
+ `cp -p #{sample} #{Rails.root.join(file)}`
reminder(file)
end
@@ -111,7 +111,7 @@ def setup_development
return nil if skip?(file)
puts yellow "Copying #{file}..."
- %x(cp -p #{Rails.root.join("#{file}.SAMPLE")} #{Rails.root.join(file)})
+ `cp -p #{Rails.root.join("#{file}.SAMPLE")} #{Rails.root.join(file)}`
reminder(file)
end
@@ -120,18 +120,18 @@ def setup_storage
return nil if skip?(file)
puts yellow "Copying #{file}..."
- %x(cp -p #{Rails.root.join("#{file}.SAMPLE")} #{Rails.root.join(file)})
+ `cp -p #{Rails.root.join("#{file}.SAMPLE")} #{Rails.root.join(file)}`
reminder(file)
end
def start_mailcatcher
return nil if ENV['MAILCATCHER_PORT'] # skip when it has an existing Docker container
- mailcatcher = ask("Do you want to start mailcatcher?\nOptions:\n(y) Yes\n(n) No", ["y", "n"])
- if mailcatcher === "y"
- puts yellow "Starting mailcatcher at http://localhost:1080..."
- %x(mailcatcher)
- end
+ mailcatcher = ask("Do you want to start mailcatcher?\nOptions:\n(y) Yes\n(n) No", %w[y n])
+ return unless mailcatcher === 'y'
+
+ puts yellow 'Starting mailcatcher at http://localhost:1080...'
+ `mailcatcher`
end
def start_server
@@ -144,7 +144,7 @@ def ask(question, answers = false)
puts question
input = STDIN.gets.chomp
if input.blank? || (answers && !answers.include?(input))
- puts red "Your Input is not valid. Try again!"
+ puts red 'Your Input is not valid. Try again!'
input = ask(question, answers)
end
input
@@ -152,8 +152,11 @@ end
def skip?(file)
output = false
- skip = ask(cyan("We found #{file}!\nOptions:\n(1) Skip step\n(2) Force rewrite"), ["1", "2"]) if File.exists?(Rails.root.join(file))
- output = true if skip == "1"
+ if File.exist?(Rails.root.join(file))
+ skip = ask(cyan("We found #{file}!\nOptions:\n(1) Skip step\n(2) Force rewrite"),
+ %w[1 2])
+ end
+ output = true if skip == '1'
output
end
diff --git a/lib/tasks/multicoops.rake b/lib/tasks/multicoops.rake
index f0c76b8f..1e5ef44d 100644
--- a/lib/tasks/multicoops.rake
+++ b/lib/tasks/multicoops.rake
@@ -4,23 +4,21 @@
namespace :multicoops do
desc 'Runs a specific rake task for each registered foodcoop, use rake multicoops:run TASK=db:migrate'
- task :run => :environment do
+ task run: :environment do
task_to_run = ENV.fetch('TASK', nil)
last_error = nil
FoodsoftConfig.each_coop do |coop|
- begin
- rake_say "Run '#{task_to_run}' for #{coop}"
- Rake::Task[task_to_run].execute
- rescue => error
- last_error = error
- ExceptionNotifier.notify_exception(error, data: { foodcoop: coop })
- end
+ rake_say "Run '#{task_to_run}' for #{coop}"
+ Rake::Task[task_to_run].execute
+ rescue StandardError => e
+ last_error = e
+ ExceptionNotifier.notify_exception(e, data: { foodcoop: coop })
end
raise last_error if last_error
end
desc 'Runs a specific rake task for a single coop, use rake mutlicoops:run_single TASK=db:migrate FOODCOOP=demo'
- task :run_single => :environment do
+ task run_single: :environment do
task_to_run = ENV.fetch('TASK', nil)
FoodsoftConfig.select_foodcoop ENV.fetch('FOODCOOP', nil)
rake_say "Run '#{task_to_run}' for #{ENV.fetch('FOODCOOP', nil)}"
diff --git a/lib/tasks/resque.rake b/lib/tasks/resque.rake
index 2c50bf69..8705035a 100644
--- a/lib/tasks/resque.rake
+++ b/lib/tasks/resque.rake
@@ -1,32 +1,32 @@
-require "resque/tasks"
+require 'resque/tasks'
def run_worker(queue, count = 1)
puts "Starting #{count} worker(s) with QUEUE: #{queue}"
- ops = { :pgroup => true, :err => ["log/resque_worker_foodsoft_notifier.log", "a"],
- :out => ["log/resque_worker_foodsoft_notifier.log", "a"] }
- env_vars = { "QUEUE" => queue.to_s, "PIDFILE" => "tmp/pids/resque_worker_foodsoft_notifier.pid" }
- count.times {
+ ops = { pgroup: true, err: ['log/resque_worker_foodsoft_notifier.log', 'a'],
+ out: ['log/resque_worker_foodsoft_notifier.log', 'a'] }
+ env_vars = { 'QUEUE' => queue.to_s, 'PIDFILE' => 'tmp/pids/resque_worker_foodsoft_notifier.pid' }
+ count.times do
## Using Kernel.spawn and Process.detach because regular system() call would
## cause the processes to quit when capistrano finishes
- pid = spawn(env_vars, "bundle exec rake resque:work", ops)
+ pid = spawn(env_vars, 'bundle exec rake resque:work', ops)
Process.detach(pid)
- }
+ end
end
namespace :resque do
- task :setup => :environment
+ task setup: :environment
- desc "Restart running workers"
+ desc 'Restart running workers'
task :restart_workers do
Rake::Task['resque:stop_workers'].invoke
Rake::Task['resque:start_workers'].invoke
end
- desc "Quit running workers"
+ desc 'Quit running workers'
task :stop_workers do
pids = File.read('tmp/pids/resque_worker_foodsoft_notifier.pid').split("\n")
if pids.empty?
- puts "No workers to kill"
+ puts 'No workers to kill'
else
syscmd = "kill -s QUIT #{pids.join(' ')}"
puts "Running syscmd: #{syscmd}"
@@ -34,8 +34,8 @@ namespace :resque do
end
end
- desc "Start workers"
+ desc 'Start workers'
task :start_workers do
- run_worker("foodsoft_notifier")
+ run_worker('foodsoft_notifier')
end
end
diff --git a/lib/tasks/rspec.rake b/lib/tasks/rspec.rake
index 4f0c4081..a90fa407 100644
--- a/lib/tasks/rspec.rake
+++ b/lib/tasks/rspec.rake
@@ -2,7 +2,7 @@ begin
require 'rspec/core/rake_task'
task(:spec).clear
RSpec::Core::RakeTask.new(:spec)
- task :default => :spec
+ task default: :spec
# Use `rspec` to run a single test. When a test fails in rake but not
# with rspec, you can use the following to run a single test using rake:
diff --git a/plugins/current_orders/app/controllers/current_orders/articles_controller.rb b/plugins/current_orders/app/controllers/current_orders/articles_controller.rb
index ef23f332..51111f3f 100644
--- a/plugins/current_orders/app/controllers/current_orders/articles_controller.rb
+++ b/plugins/current_orders/app/controllers/current_orders/articles_controller.rb
@@ -1,6 +1,6 @@
class CurrentOrders::ArticlesController < ApplicationController
before_action :authenticate_orders
- before_action :find_order_and_order_article, only: [:index, :show]
+ before_action :find_order_and_order_article, only: %i[index show]
def index
# sometimes need to pass id as parameter for forms
@@ -26,11 +26,11 @@ class CurrentOrders::ArticlesController < ApplicationController
def find_order_and_order_article
@current_orders = Order.finished_not_closed
- unless params[:order_id].blank?
+ if params[:order_id].blank?
+ @order_articles = OrderArticle.where(order_id: @current_orders.all.map(&:id))
+ else
@order = Order.find(params[:order_id])
@order_articles = @order.order_articles
- else
- @order_articles = OrderArticle.where(order_id: @current_orders.all.map(&:id))
end
@q = OrderArticle.ransack(params[:q])
@order_articles = @order_articles.ordered.merge(@q.result).includes(:article, :article_price)
diff --git a/plugins/current_orders/app/controllers/current_orders/group_orders_controller.rb b/plugins/current_orders/app/controllers/current_orders/group_orders_controller.rb
index 717ebba8..945bfd30 100644
--- a/plugins/current_orders/app/controllers/current_orders/group_orders_controller.rb
+++ b/plugins/current_orders/app/controllers/current_orders/group_orders_controller.rb
@@ -4,10 +4,10 @@ class CurrentOrders::GroupOrdersController < ApplicationController
def index
# XXX code duplication lib/foodsoft_current_orders/app/controllers/current_orders/ordergroups_controller.rb
- @order_ids = Order.where(state: ['open', 'finished']).all.map(&:id)
- @goas = GroupOrderArticle.includes(:group_order => :ordergroup).includes(:order_article)
+ @order_ids = Order.where(state: %w[open finished]).all.map(&:id)
+ @goas = GroupOrderArticle.includes(group_order: :ordergroup).includes(:order_article)
.where(group_orders: { order_id: @order_ids, ordergroup_id: @ordergroup.id }).ordered
- @articles_grouped_by_category = @goas.includes(:order_article => { :article => :article_category })
+ @articles_grouped_by_category = @goas.includes(order_article: { article: :article_category })
.order('articles.name')
.group_by { |a| a.order_article.article.article_category.name }
.sort { |a, b| a[0] <=> b[0] }
@@ -18,8 +18,8 @@ class CurrentOrders::GroupOrdersController < ApplicationController
# XXX code duplication from GroupOrdersController
def ensure_ordergroup_member
@ordergroup = @current_user.ordergroup
- if @ordergroup.nil?
- redirect_to root_url, :alert => I18n.t('group_orders.errors.no_member')
- end
+ return unless @ordergroup.nil?
+
+ redirect_to root_url, alert: I18n.t('group_orders.errors.no_member')
end
end
diff --git a/plugins/current_orders/app/controllers/current_orders/ordergroups_controller.rb b/plugins/current_orders/app/controllers/current_orders/ordergroups_controller.rb
index 708016a9..94390a0a 100644
--- a/plugins/current_orders/app/controllers/current_orders/ordergroups_controller.rb
+++ b/plugins/current_orders/app/controllers/current_orders/ordergroups_controller.rb
@@ -1,6 +1,6 @@
class CurrentOrders::OrdergroupsController < ApplicationController
before_action :authenticate_orders
- before_action :find_group_orders, only: [:index, :show]
+ before_action :find_group_orders, only: %i[index show]
def index
# sometimes need to pass id as parameter for forms
@@ -34,8 +34,11 @@ class CurrentOrders::OrdergroupsController < ApplicationController
@all_ordergroups.sort_by! { |o| @ordered_group_ids.include?(o.id) ? o.name : "ZZZZZ#{o.name}" }
@ordergroup = Ordergroup.find(params[:id]) unless params[:id].nil?
- @goas = GroupOrderArticle.includes(:group_order, :order_article => [:article, :article_price])
- .where(group_orders: { order_id: @order_ids, ordergroup_id: @ordergroup.id }).ordered.all unless @ordergroup.nil?
+ return if @ordergroup.nil?
+
+ @goas = GroupOrderArticle.includes(:group_order, order_article: %i[article article_price])
+ .where(group_orders: { order_id: @order_ids,
+ ordergroup_id: @ordergroup.id }).ordered.all
end
helper_method \
diff --git a/plugins/current_orders/app/documents/multiple_orders_by_articles.rb b/plugins/current_orders/app/documents/multiple_orders_by_articles.rb
index 48d8a058..95b2e3b6 100644
--- a/plugins/current_orders/app/documents/multiple_orders_by_articles.rb
+++ b/plugins/current_orders/app/documents/multiple_orders_by_articles.rb
@@ -77,11 +77,11 @@ class MultipleOrdersByArticles < OrderPdf
.includes(:article).references(:article)
.reorder('order_articles.order_id, articles.name')
.preload(:article_price) # preload not join, just in case it went missing
- .preload(:order, :group_order_articles => { :group_order => :ordergroup })
+ .preload(:order, group_order_articles: { group_order: :ordergroup })
end
- def each_order_article
- order_articles.find_each_with_order(batch_size: BATCH_SIZE) { |oa| yield oa }
+ def each_order_article(&block)
+ order_articles.find_each_with_order(batch_size: BATCH_SIZE, &block)
end
def group_order_articles_for(order_article)
@@ -90,7 +90,7 @@ class MultipleOrdersByArticles < OrderPdf
goas
end
- def each_group_order_article_for(group_order)
- group_order_articles_for(group_order).each { |goa| yield goa }
+ def each_group_order_article_for(group_order, &block)
+ group_order_articles_for(group_order).each(&block)
end
end
diff --git a/plugins/current_orders/app/documents/multiple_orders_by_groups.rb b/plugins/current_orders/app/documents/multiple_orders_by_groups.rb
index 0c9eefa9..a09ef1d4 100644
--- a/plugins/current_orders/app/documents/multiple_orders_by_groups.rb
+++ b/plugins/current_orders/app/documents/multiple_orders_by_groups.rb
@@ -113,7 +113,7 @@ class MultipleOrdersByGroups < OrderPdf
s
end
- def each_ordergroup
+ def each_ordergroup(&block)
ordergroups.find_in_batches_with_order(batch_size: BATCH_SIZE) do |ordergroups|
@group_order_article_batch = GroupOrderArticle
.joins(:group_order)
@@ -121,8 +121,8 @@ class MultipleOrdersByGroups < OrderPdf
.where(group_orders: { ordergroup_id: ordergroups.map(&:id) })
.order('group_orders.order_id, group_order_articles.id')
.preload(group_orders: { order: :supplier })
- .preload(order_article: [:article, :article_price, :order])
- ordergroups.each { |ordergroup| yield ordergroup }
+ .preload(order_article: %i[article article_price order])
+ ordergroups.each(&block)
end
end
@@ -130,7 +130,7 @@ class MultipleOrdersByGroups < OrderPdf
@group_order_article_batch.select { |goa| goa.group_order.ordergroup_id == ordergroup.id }
end
- def each_group_order_article_for(ordergroup)
- group_order_articles_for(ordergroup).each { |goa| yield goa }
+ def each_group_order_article_for(ordergroup, &block)
+ group_order_articles_for(ordergroup).each(&block)
end
end
diff --git a/plugins/current_orders/app/helpers/current_orders_helper.rb b/plugins/current_orders/app/helpers/current_orders_helper.rb
index 3bbab482..c62493a1 100644
--- a/plugins/current_orders/app/helpers/current_orders_helper.rb
+++ b/plugins/current_orders/app/helpers/current_orders_helper.rb
@@ -6,7 +6,9 @@ module CurrentOrdersHelper
elsif funds == 0
I18n.t('helpers.current_orders.pay_none')
else
- content_tag :b, I18n.t('helpers.current_orders.pay_amount', amount: number_to_currency(-ordergroup.get_available_funds))
+ content_tag :b,
+ I18n.t('helpers.current_orders.pay_amount',
+ amount: number_to_currency(-ordergroup.get_available_funds))
end
end
end
diff --git a/plugins/current_orders/config/routes.rb b/plugins/current_orders/config/routes.rb
index f642fc31..aeb2b014 100644
--- a/plugins/current_orders/config/routes.rb
+++ b/plugins/current_orders/config/routes.rb
@@ -1,27 +1,27 @@
Rails.application.routes.draw do
scope '/:foodcoop' do
namespace :current_orders do
- resources :ordergroups, :only => [:index, :show] do
+ resources :ordergroups, only: %i[index show] do
collection do
get :show_on_group_order_article_create
get :show_on_group_order_article_update
end
end
- resources :articles, :only => [:index, :show] do
+ resources :articles, only: %i[index show] do
collection do
get :show_on_group_order_article_create
end
end
- resource :orders, :only => [:show] do
+ resource :orders, only: [:show] do
collection do
get :my
get :receive
end
end
- resources :group_orders, :only => [:index]
+ resources :group_orders, only: [:index]
end
end
end
diff --git a/plugins/current_orders/foodsoft_current_orders.gemspec b/plugins/current_orders/foodsoft_current_orders.gemspec
index c444fbec..f8e22ce6 100644
--- a/plugins/current_orders/foodsoft_current_orders.gemspec
+++ b/plugins/current_orders/foodsoft_current_orders.gemspec
@@ -1,20 +1,21 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_current_orders/version"
+require 'foodsoft_current_orders/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_current_orders"
+ s.name = 'foodsoft_current_orders'
s.version = FoodsoftCurrentOrders::VERSION
- s.authors = ["wvengen"]
- s.email = ["dev-voko@willem.engen.nl"]
- s.homepage = "https://github.com/foodcoop-adam/foodsoft"
- s.summary = "Quick support for working on all currently active orders in foodsoft."
- s.description = ""
+ s.authors = ['wvengen']
+ s.email = ['dev-voko@willem.engen.nl']
+ s.homepage = 'https://github.com/foodcoop-adam/foodsoft'
+ s.summary = 'Quick support for working on all currently active orders in foodsoft.'
+ s.description = ''
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
- s.add_dependency "deface", "~> 1.0"
+ s.add_dependency 'rails'
+ s.add_dependency 'deface', '~> 1.0'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/current_orders/lib/foodsoft_current_orders.rb b/plugins/current_orders/lib/foodsoft_current_orders.rb
index 5a9a7c82..8227bea4 100644
--- a/plugins/current_orders/lib/foodsoft_current_orders.rb
+++ b/plugins/current_orders/lib/foodsoft_current_orders.rb
@@ -1,5 +1,5 @@
-require "deface"
-require "foodsoft_current_orders/engine"
+require 'deface'
+require 'foodsoft_current_orders/engine'
module FoodsoftCurrentOrders
def self.enabled?
diff --git a/plugins/current_orders/lib/foodsoft_current_orders/engine.rb b/plugins/current_orders/lib/foodsoft_current_orders/engine.rb
index 07427b56..c6236acb 100644
--- a/plugins/current_orders/lib/foodsoft_current_orders/engine.rb
+++ b/plugins/current_orders/lib/foodsoft_current_orders/engine.rb
@@ -4,12 +4,15 @@ module FoodsoftCurrentOrders
return unless FoodsoftCurrentOrders.enabled?
return if primary[:orders].nil?
- cond = Proc.new { current_user.role_orders? }
+ cond = proc { current_user.role_orders? }
[
SimpleNavigation::Item.new(primary, :stage_divider, nil, nil, class: 'divider', if: cond),
- SimpleNavigation::Item.new(primary, :current_orders_receive, I18n.t('current_orders.navigation.receive'), context.receive_current_orders_orders_path, if: cond),
- SimpleNavigation::Item.new(primary, :current_orders_articles, I18n.t('current_orders.navigation.articles'), context.current_orders_articles_path, if: cond),
- SimpleNavigation::Item.new(primary, :current_orders_ordergroups, I18n.t('current_orders.navigation.ordergroups'), context.current_orders_ordergroups_path, if: cond)
+ SimpleNavigation::Item.new(primary, :current_orders_receive, I18n.t('current_orders.navigation.receive'),
+ context.receive_current_orders_orders_path, if: cond),
+ SimpleNavigation::Item.new(primary, :current_orders_articles, I18n.t('current_orders.navigation.articles'),
+ context.current_orders_articles_path, if: cond),
+ SimpleNavigation::Item.new(primary, :current_orders_ordergroups,
+ I18n.t('current_orders.navigation.ordergroups'), context.current_orders_ordergroups_path, if: cond)
].each { |i| primary[:orders].sub_navigation.items << i }
end
end
diff --git a/plugins/current_orders/lib/foodsoft_current_orders/version.rb b/plugins/current_orders/lib/foodsoft_current_orders/version.rb
index af58aa9c..9e916ba6 100644
--- a/plugins/current_orders/lib/foodsoft_current_orders/version.rb
+++ b/plugins/current_orders/lib/foodsoft_current_orders/version.rb
@@ -1,3 +1,3 @@
module FoodsoftCurrentOrders
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/discourse/Rakefile b/plugins/discourse/Rakefile
index cb56e2e5..abec3d42 100755
--- a/plugins/discourse/Rakefile
+++ b/plugins/discourse/Rakefile
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_files.include('lib/**/*.rb')
end
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
t.verbose = false
end
-task :default => :test
+task default: :test
diff --git a/plugins/discourse/app/controllers/discourse_controller.rb b/plugins/discourse/app/controllers/discourse_controller.rb
index 5a65f61c..0e62f14d 100644
--- a/plugins/discourse/app/controllers/discourse_controller.rb
+++ b/plugins/discourse/app/controllers/discourse_controller.rb
@@ -11,7 +11,7 @@ class DiscourseController < ApplicationController
def redirect_to_with_payload(url, payload)
base64_payload = Base64.strict_encode64 payload.to_query
- sso = CGI::escape base64_payload
+ sso = CGI.escape base64_payload
sig = get_hmac_hex_string base64_payload
redirect_to "#{url}#{url.include?('?') ? '&' : '?'}sso=#{sso}&sig=#{sig}"
end
@@ -21,7 +21,7 @@ class DiscourseController < ApplicationController
payload.symbolize_keys!
end
- def get_hmac_hex_string payload
+ def get_hmac_hex_string(payload)
discourse_sso_secret = FoodsoftConfig[:discourse_sso_secret]
OpenSSL::HMAC.hexdigest 'sha256', discourse_sso_secret, payload
end
diff --git a/plugins/discourse/app/controllers/discourse_login_controller.rb b/plugins/discourse/app/controllers/discourse_login_controller.rb
index 1c8fe938..bd7a81e3 100644
--- a/plugins/discourse/app/controllers/discourse_login_controller.rb
+++ b/plugins/discourse/app/controllers/discourse_login_controller.rb
@@ -5,7 +5,7 @@ class DiscourseLoginController < DiscourseController
def initiate
discourse_url = FoodsoftConfig[:discourse_url]
- nonce = SecureRandom.hex()
+ nonce = SecureRandom.hex
return_sso_url = url_for(action: :callback, only_path: false)
session[:discourse_sso_nonce] = nonce
@@ -36,7 +36,7 @@ class DiscourseLoginController < DiscourseController
user.save!
login_and_redirect_to_return_to user, notice: I18n.t('discourse.callback.logged_in')
- rescue => error
- redirect_to login_url, alert: error.to_s
+ rescue StandardError => e
+ redirect_to login_url, alert: e.to_s
end
end
diff --git a/plugins/discourse/app/controllers/discourse_sso_controller.rb b/plugins/discourse/app/controllers/discourse_sso_controller.rb
index e8f742b6..04dc8d1c 100644
--- a/plugins/discourse/app/controllers/discourse_sso_controller.rb
+++ b/plugins/discourse/app/controllers/discourse_sso_controller.rb
@@ -17,7 +17,7 @@ class DiscourseSsoController < DiscourseController
external_id: "#{FoodsoftConfig.scope}/#{current_user.id}",
username: current_user.nick,
name: current_user.name
- rescue => error
- redirect_to root_url, alert: error.to_s
+ rescue StandardError => e
+ redirect_to root_url, alert: e.to_s
end
end
diff --git a/plugins/discourse/foodsoft_discourse.gemspec b/plugins/discourse/foodsoft_discourse.gemspec
index 4400bcf4..1e6113ce 100644
--- a/plugins/discourse/foodsoft_discourse.gemspec
+++ b/plugins/discourse/foodsoft_discourse.gemspec
@@ -1,20 +1,21 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_discourse/version"
+require 'foodsoft_discourse/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_discourse"
+ s.name = 'foodsoft_discourse'
s.version = FoodsoftDiscourse::VERSION
- s.authors = ["paroga"]
- s.email = ["paroga@paroga.com"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Discourse plugin for foodsoft."
- s.description = "Allow SSO login via Discourse"
+ s.authors = ['paroga']
+ s.email = ['paroga@paroga.com']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Discourse plugin for foodsoft.'
+ s.description = 'Allow SSO login via Discourse'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
- s.add_dependency "deface", "~> 1.0"
+ s.add_dependency 'rails'
+ s.add_dependency 'deface', '~> 1.0'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/discourse/lib/foodsoft_discourse/redirect_to_login.rb b/plugins/discourse/lib/foodsoft_discourse/redirect_to_login.rb
index 901979b1..6ddfdb13 100644
--- a/plugins/discourse/lib/foodsoft_discourse/redirect_to_login.rb
+++ b/plugins/discourse/lib/foodsoft_discourse/redirect_to_login.rb
@@ -2,7 +2,7 @@ module FoodsoftDiscourse
module RedirectToLogin
def self.included(base) # :nodoc:
base.class_eval do
- alias foodsoft_discourse_orig_redirect_to_login redirect_to_login
+ alias_method :foodsoft_discourse_orig_redirect_to_login, :redirect_to_login
def redirect_to_login(options = {})
if FoodsoftDiscourse.enabled? && !FoodsoftConfig[:discourse_sso]
@@ -18,5 +18,5 @@ end
# modify existing helper
ActiveSupport.on_load(:after_initialize) do
- Concerns::Auth.send :include, FoodsoftDiscourse::RedirectToLogin
+ Concerns::Auth.include FoodsoftDiscourse::RedirectToLogin
end
diff --git a/plugins/discourse/lib/foodsoft_discourse/version.rb b/plugins/discourse/lib/foodsoft_discourse/version.rb
index 2b8d4138..60d38a51 100644
--- a/plugins/discourse/lib/foodsoft_discourse/version.rb
+++ b/plugins/discourse/lib/foodsoft_discourse/version.rb
@@ -1,3 +1,3 @@
module FoodsoftDiscourse
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/documents/Rakefile b/plugins/documents/Rakefile
index 2834c5f3..861a530a 100755
--- a/plugins/documents/Rakefile
+++ b/plugins/documents/Rakefile
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_files.include('lib/**/*.rb')
end
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
t.verbose = false
end
-task :default => :test
+task default: :test
diff --git a/plugins/documents/app/controllers/documents_controller.rb b/plugins/documents/app/controllers/documents_controller.rb
index b97470a5..7290ef3c 100644
--- a/plugins/documents/app/controllers/documents_controller.rb
+++ b/plugins/documents/app/controllers/documents_controller.rb
@@ -4,16 +4,16 @@ class DocumentsController < ApplicationController
before_action -> { require_plugin_enabled FoodsoftDocuments }
def index
- if params["sort"]
- sort = case params["sort"]
- when "name" then "data IS NULL DESC, name"
- when "created_at" then "created_at"
- when "name_reverse" then "data IS NULL, name DESC"
- when "created_at_reverse" then "created_at DESC"
+ sort = if params['sort']
+ case params['sort']
+ when 'name' then 'data IS NULL DESC, name'
+ when 'created_at' then 'created_at'
+ when 'name_reverse' then 'data IS NULL, name DESC'
+ when 'created_at_reverse' then 'created_at DESC'
end
- else
- sort = "data IS NULL DESC, name"
- end
+ else
+ 'data IS NULL DESC, name'
+ end
@documents = Document.where(parent: @document).page(params[:page]).per(@per_page).order(sort)
end
@@ -34,22 +34,22 @@ class DocumentsController < ApplicationController
if @document.name.empty?
name = File.basename(data.original_filename)
- @document.name = name.gsub(/[^\w\.\-]/, '_')
+ @document.name = name.gsub(/[^\w.-]/, '_')
end
end
@document.created_by = current_user
@document.save!
redirect_to @document.parent || documents_path, notice: t('.notice')
- rescue => error
- redirect_to @document.parent || documents_path, alert: t('.error', error: error.message)
+ rescue StandardError => e
+ redirect_to @document.parent || documents_path, alert: t('.error', error: e.message)
end
def update
@document = Document.find(params[:id])
@document.update_attribute(:parent_id, params[:parent_id])
redirect_to @document.parent || documents_path, notice: t('.notice')
- rescue => error
- redirect_to @document.parent || documents_path, alert: t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to @document.parent || documents_path, alert: t('errors.general_msg', msg: e.message)
end
def destroy
@@ -60,8 +60,8 @@ class DocumentsController < ApplicationController
else
redirect_to documents_path, alert: t('.no_right')
end
- rescue => error
- redirect_to documents_path, alert: t('.error', error: error.message)
+ rescue StandardError => e
+ redirect_to documents_path, alert: t('.error', error: e.message)
end
def show
diff --git a/plugins/documents/foodsoft_documents.gemspec b/plugins/documents/foodsoft_documents.gemspec
index 1301fa11..63d3b428 100644
--- a/plugins/documents/foodsoft_documents.gemspec
+++ b/plugins/documents/foodsoft_documents.gemspec
@@ -1,21 +1,22 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_documents/version"
+require 'foodsoft_documents/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_documents"
+ s.name = 'foodsoft_documents'
s.version = FoodsoftDocuments::VERSION
- s.authors = ["paroga"]
- s.email = ["paroga@paroga.com"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Documents plugin for foodsoft."
- s.description = "Adds simple document management to foodsoft."
+ s.authors = ['paroga']
+ s.email = ['paroga@paroga.com']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Documents plugin for foodsoft.'
+ s.description = 'Adds simple document management to foodsoft.'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
- s.add_dependency "deface", "~> 1.0"
- s.add_dependency "ruby-filemagic"
+ s.add_dependency 'rails'
+ s.add_dependency 'deface', '~> 1.0'
+ s.add_dependency 'ruby-filemagic'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/documents/lib/foodsoft_documents/engine.rb b/plugins/documents/lib/foodsoft_documents/engine.rb
index 970b3aa5..de81904c 100644
--- a/plugins/documents/lib/foodsoft_documents/engine.rb
+++ b/plugins/documents/lib/foodsoft_documents/engine.rb
@@ -8,9 +8,9 @@ module FoodsoftDocuments
sub_nav.items <<
SimpleNavigation::Item.new(primary, :documents, I18n.t('navigation.documents'), context.documents_path)
# move to right before tasks item
- if i = sub_nav.items.index(sub_nav[:tasks])
- sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
- end
+ return unless i = sub_nav.items.index(sub_nav[:tasks])
+
+ sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
end
def default_foodsoft_config(cfg)
diff --git a/plugins/documents/lib/foodsoft_documents/version.rb b/plugins/documents/lib/foodsoft_documents/version.rb
index 6e57dbb3..7096e468 100644
--- a/plugins/documents/lib/foodsoft_documents/version.rb
+++ b/plugins/documents/lib/foodsoft_documents/version.rb
@@ -1,3 +1,3 @@
module FoodsoftDocuments
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/links/Rakefile b/plugins/links/Rakefile
index fb6356f8..a9902fd3 100755
--- a/plugins/links/Rakefile
+++ b/plugins/links/Rakefile
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_files.include('lib/**/*.rb')
end
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
t.verbose = false
end
-task :default => :test
+task default: :test
diff --git a/plugins/links/app/controllers/admin/links_controller.rb b/plugins/links/app/controllers/admin/links_controller.rb
index 2b6a7a35..dc8b359e 100644
--- a/plugins/links/app/controllers/admin/links_controller.rb
+++ b/plugins/links/app/controllers/admin/links_controller.rb
@@ -37,8 +37,8 @@ class Admin::LinksController < Admin::BaseController
link = Link.find(params[:id])
link.destroy!
redirect_to admin_links_path
- rescue => error
- redirect_to admin_links_path, I18n.t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to admin_links_path, I18n.t('errors.general_msg', msg: e.message)
end
private
diff --git a/plugins/links/app/controllers/links_controller.rb b/plugins/links/app/controllers/links_controller.rb
index 143fc63d..27615517 100644
--- a/plugins/links/app/controllers/links_controller.rb
+++ b/plugins/links/app/controllers/links_controller.rb
@@ -5,9 +5,7 @@ class LinksController < ApplicationController
link = Link.find(params[:id])
url = link.url
- if link.workgroup && !current_user.role_admin? && !link.workgroup.member?(current_user)
- return deny_access
- end
+ return deny_access if link.workgroup && !current_user.role_admin? && !link.workgroup.member?(current_user)
if link.indirect
uri = URI.parse url
@@ -19,11 +17,9 @@ class LinksController < ApplicationController
url = result.header['Location']
- unless url
- return redirect_to root_url, alert: t('.indirect_no_location')
- end
+ return redirect_to root_url, alert: t('.indirect_no_location') unless url
end
- redirect_to url, status: 302
+ redirect_to url, status: :found
end
end
diff --git a/plugins/links/foodsoft_links.gemspec b/plugins/links/foodsoft_links.gemspec
index e899c082..c879f4b1 100644
--- a/plugins/links/foodsoft_links.gemspec
+++ b/plugins/links/foodsoft_links.gemspec
@@ -1,20 +1,21 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_links/version"
+require 'foodsoft_links/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_links"
+ s.name = 'foodsoft_links'
s.version = FoodsoftLinks::VERSION
- s.authors = ["paroga"]
- s.email = ["paroga@paroga.com"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Links plugin for foodsoft."
- s.description = "Adds simple link management to foodsoft."
+ s.authors = ['paroga']
+ s.email = ['paroga@paroga.com']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Links plugin for foodsoft.'
+ s.description = 'Adds simple link management to foodsoft.'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
- s.add_dependency "deface", "~> 1.0"
+ s.add_dependency 'rails'
+ s.add_dependency 'deface', '~> 1.0'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/links/lib/foodsoft_links/engine.rb b/plugins/links/lib/foodsoft_links/engine.rb
index ab6d9175..52672597 100644
--- a/plugins/links/lib/foodsoft_links/engine.rb
+++ b/plugins/links/lib/foodsoft_links/engine.rb
@@ -1,7 +1,7 @@
module FoodsoftLinks
class Engine < ::Rails::Engine
def navigation(primary, context)
- primary.item :links, I18n.t('navigation.links'), '#', if: Proc.new { visble_links(context).any? } do |subnav|
+ primary.item :links, I18n.t('navigation.links'), '#', if: proc { visble_links(context).any? } do |subnav|
visble_links(context).each do |link|
subnav.item link.id, link.name, context.link_path(link)
end
@@ -11,15 +11,15 @@ module FoodsoftLinks
primary.items.insert(i, primary.items.delete_at(-1))
end
- unless primary[:admin].nil?
- sub_nav = primary[:admin].sub_navigation
- sub_nav.items <<
- SimpleNavigation::Item.new(primary, :links, I18n.t('navigation.admin.links'), context.admin_links_path)
- # move to right before config item
- if i = sub_nav.items.index(sub_nav[:config])
- sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
- end
- end
+ return if primary[:admin].nil?
+
+ sub_nav = primary[:admin].sub_navigation
+ sub_nav.items <<
+ SimpleNavigation::Item.new(primary, :links, I18n.t('navigation.admin.links'), context.admin_links_path)
+ # move to right before config item
+ return unless i = sub_nav.items.index(sub_nav[:config])
+
+ sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
end
def visble_links(context)
diff --git a/plugins/links/lib/foodsoft_links/version.rb b/plugins/links/lib/foodsoft_links/version.rb
index 20341ca4..707cfdb3 100644
--- a/plugins/links/lib/foodsoft_links/version.rb
+++ b/plugins/links/lib/foodsoft_links/version.rb
@@ -1,3 +1,3 @@
module FoodsoftLinks
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/messages/Rakefile b/plugins/messages/Rakefile
index ac014bdd..9e2cbeab 100755
--- a/plugins/messages/Rakefile
+++ b/plugins/messages/Rakefile
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_files.include('lib/**/*.rb')
end
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
t.verbose = false
end
-task :default => :test
+task default: :test
diff --git a/plugins/messages/app/controllers/admin/messagegroups_controller.rb b/plugins/messages/app/controllers/admin/messagegroups_controller.rb
index cce57474..76fbbfb9 100644
--- a/plugins/messages/app/controllers/admin/messagegroups_controller.rb
+++ b/plugins/messages/app/controllers/admin/messagegroups_controller.rb
@@ -4,7 +4,7 @@ class Admin::MessagegroupsController < Admin::BaseController
def index
@messagegroups = Messagegroup.order('name ASC')
# if somebody uses the search field:
- @messagegroups = @messagegroups.where('name LIKE ?', "%#{params[:query]}%") unless params[:query].blank?
+ @messagegroups = @messagegroups.where('name LIKE ?', "%#{params[:query]}%") if params[:query].present?
@messagegroups = @messagegroups.page(params[:page]).per(@per_page)
end
@@ -13,7 +13,7 @@ class Admin::MessagegroupsController < Admin::BaseController
@messagegroup = Messagegroup.find(params[:id])
@messagegroup.destroy
redirect_to admin_messagegroups_url, notice: t('admin.messagegroups.destroy.notice')
- rescue => error
- redirect_to admin_messagegroups_url, alert: t('admin.messagegroups.destroy.error', error: error.message)
+ rescue StandardError => e
+ redirect_to admin_messagegroups_url, alert: t('admin.messagegroups.destroy.error', error: e.message)
end
end
diff --git a/plugins/messages/app/controllers/messagegroups_controller.rb b/plugins/messages/app/controllers/messagegroups_controller.rb
index e9ba6770..7629eab8 100644
--- a/plugins/messages/app/controllers/messagegroups_controller.rb
+++ b/plugins/messages/app/controllers/messagegroups_controller.rb
@@ -1,17 +1,17 @@
class MessagegroupsController < ApplicationController
def index
- @messagegroups = Messagegroup.order("name")
+ @messagegroups = Messagegroup.order('name')
end
def join
@messagegroup = Messagegroup.find(params[:id])
@messagegroup.users << current_user
- redirect_to messagegroups_url, :notice => I18n.t('messagegroups.join.notice')
+ redirect_to messagegroups_url, notice: I18n.t('messagegroups.join.notice')
end
def leave
@messagegroup = Messagegroup.find(params[:id])
@messagegroup.users.destroy(current_user)
- redirect_to messagegroups_url, :notice => I18n.t('messagegroups.leave.notice')
+ redirect_to messagegroups_url, notice: I18n.t('messagegroups.leave.notice')
end
end
diff --git a/plugins/messages/app/controllers/messages_controller.rb b/plugins/messages/app/controllers/messages_controller.rb
index 628f145b..3a003752 100644
--- a/plugins/messages/app/controllers/messages_controller.rb
+++ b/plugins/messages/app/controllers/messages_controller.rb
@@ -10,21 +10,20 @@ class MessagesController < ApplicationController
def new
@message = Message.new(params[:message])
- if @message.reply_to
- original_message = Message.find(@message.reply_to)
- if original_message.reply_to
- @message.reply_to = original_message.reply_to
- end
- if original_message.is_readable_for?(current_user)
- @message.add_recipients [original_message.sender_id]
- @message.group_id = original_message.group_id
- @message.private = original_message.private
- @message.subject = I18n.t('messages.model.reply_subject', :subject => original_message.subject)
- @message.body = I18n.t('messages.model.reply_header', :user => original_message.sender.display, :when => I18n.l(original_message.created_at, :format => :short)) + "\n"
- original_message.body.each_line { |l| @message.body += I18n.t('messages.model.reply_indent', :line => l) }
- else
- redirect_to new_message_url, alert: I18n.t('messages.new.error_private')
- end
+ return unless @message.reply_to
+
+ original_message = Message.find(@message.reply_to)
+ @message.reply_to = original_message.reply_to if original_message.reply_to
+ if original_message.is_readable_for?(current_user)
+ @message.add_recipients [original_message.sender_id]
+ @message.group_id = original_message.group_id
+ @message.private = original_message.private
+ @message.subject = I18n.t('messages.model.reply_subject', subject: original_message.subject)
+ @message.body = I18n.t('messages.model.reply_header', user: original_message.sender.display,
+ when: I18n.l(original_message.created_at, format: :short)) + "\n"
+ original_message.body.each_line { |l| @message.body += I18n.t('messages.model.reply_indent', line: l) }
+ else
+ redirect_to new_message_url, alert: I18n.t('messages.new.error_private')
end
end
@@ -33,18 +32,18 @@ class MessagesController < ApplicationController
@message = @current_user.send_messages.new(params[:message])
if @message.save
DeliverMessageJob.perform_later(@message)
- redirect_to messages_url, :notice => I18n.t('messages.create.notice')
+ redirect_to messages_url, notice: I18n.t('messages.create.notice')
else
- render :action => 'new'
+ render action: 'new'
end
end
# Shows a single message.
def show
@message = Message.find(params[:id])
- unless @message.is_readable_for?(current_user)
- redirect_to messages_url, alert: I18n.t('messages.new.error_private')
- end
+ return if @message.is_readable_for?(current_user)
+
+ redirect_to messages_url, alert: I18n.t('messages.new.error_private')
end
def toggle_private
diff --git a/plugins/messages/app/helpers/messages_helper.rb b/plugins/messages/app/helpers/messages_helper.rb
index d5371fe4..adb8fe88 100644
--- a/plugins/messages/app/helpers/messages_helper.rb
+++ b/plugins/messages/app/helpers/messages_helper.rb
@@ -1,11 +1,11 @@
module MessagesHelper
def format_subject(message, length)
if message.subject.length > length
- subject = truncate(message.subject, :length => length)
- body = ""
+ subject = truncate(message.subject, length: length)
+ body = ''
else
subject = message.subject
- body = truncate(message.body, :length => length - subject.length)
+ body = truncate(message.body, length: length - subject.length)
end
"#{link_to(h(subject), message)} #{h(body)}".html_safe
end
diff --git a/plugins/messages/app/mail_receivers/messages_mail_receiver.rb b/plugins/messages/app/mail_receivers/messages_mail_receiver.rb
index e9ca99f3..006c3f8d 100644
--- a/plugins/messages/app/mail_receivers/messages_mail_receiver.rb
+++ b/plugins/messages/app/mail_receivers/messages_mail_receiver.rb
@@ -1,4 +1,4 @@
-require "email_reply_trimmer"
+require 'email_reply_trimmer'
class MessagesMailReceiver
def self.regexp
@@ -9,29 +9,25 @@ class MessagesMailReceiver
@message = Message.find_by_id(match[:message_id])
@user = User.find_by_id(match[:user_id])
- raise "Message could not be found" if @message.nil?
- raise "User could not be found" if @user.nil?
+ raise 'Message could not be found' if @message.nil?
+ raise 'User could not be found' if @user.nil?
hash = @message.mail_hash_for_user(@user)
- raise "Hash does not match expectations" unless hash.casecmp(match[:hash]) == 0
+ raise 'Hash does not match expectations' unless hash.casecmp(match[:hash]) == 0
end
def received(data)
mail = Mail.new data
mail_part = get_mail_part(mail)
- raise "No valid content could be found" if mail_part.nil?
+ raise 'No valid content could be found' if mail_part.nil?
body = mail_part.body.decoded
- unless mail_part.content_type_parameters.nil?
- body = body.force_encoding mail_part.content_type_parameters[:charset]
- end
+ body = body.force_encoding mail_part.content_type_parameters[:charset] unless mail_part.content_type_parameters.nil?
- if MIME::Type.simplified(mail_part.content_type) == "text/html"
- body = Nokogiri::HTML(body).text
- end
+ body = Nokogiri::HTML(body).text if MIME::Type.simplified(mail_part.content_type) == 'text/html'
- body.encode!(Encoding::default_internal)
+ body.encode!(Encoding.default_internal)
body = EmailReplyTrimmer.trim(body)
raise BlankBodyException if body.empty?
@@ -39,16 +35,16 @@ class MessagesMailReceiver
group: @message.group,
private: @message.private,
received_email: data
- if @message.reply_to
- message.reply_to_message = @message.reply_to_message
- else
- message.reply_to_message = @message
- end
- if mail.subject
- message.subject = mail.subject.gsub("[#{FoodsoftConfig[:name]}] ", "")
- else
- message.subject = I18n.t('messages.model.reply_subject', subject: message.reply_to_message.subject)
- end
+ message.reply_to_message = if @message.reply_to
+ @message.reply_to_message
+ else
+ @message
+ end
+ message.subject = if mail.subject
+ mail.subject.gsub("[#{FoodsoftConfig[:name]}] ", '')
+ else
+ I18n.t('messages.model.reply_subject', subject: message.reply_to_message.subject)
+ end
message.add_recipients [@message.sender_id]
message.save!
@@ -64,9 +60,7 @@ class MessagesMailReceiver
for part in mail.parts
part = get_mail_part(part)
content_type = MIME::Type.simplified(part.content_type)
- if content_type == "text/plain" || !mail_part && content_type == "text/html"
- mail_part = part
- end
+ mail_part = part if content_type == 'text/plain' || (!mail_part && content_type == 'text/html')
end
mail_part
end
diff --git a/plugins/messages/app/models/message.rb b/plugins/messages/app/models/message.rb
index f6b03c10..b6554322 100644
--- a/plugins/messages/app/models/message.rb
+++ b/plugins/messages/app/models/message.rb
@@ -1,17 +1,17 @@
-require "base32"
+require 'base32'
class Message < ApplicationRecord
- belongs_to :sender, class_name: 'User', foreign_key: 'sender_id'
- belongs_to :group, optional: true, class_name: 'Group', foreign_key: 'group_id'
+ belongs_to :sender, class_name: 'User'
+ belongs_to :group, optional: true, class_name: 'Group'
belongs_to :reply_to_message, optional: true, class_name: 'Message', foreign_key: 'reply_to'
has_many :message_recipients, dependent: :destroy
has_many :recipients, through: :message_recipients, source: :user
attr_accessor :send_method, :recipient_tokens, :order_id
- scope :threads, -> { where(:reply_to => nil) }
- scope :thread, ->(id) { where("id = ? OR reply_to = ?", id, id) }
- scope :readable_for, ->(user) {
+ scope :threads, -> { where(reply_to: nil) }
+ scope :thread, ->(id) { where('id = ? OR reply_to = ?', id, id) }
+ scope :readable_for, lambda { |user|
user_id = user.try(&:id)
joins(:message_recipients)
@@ -20,7 +20,7 @@ class Message < ApplicationRecord
}
validates_presence_of :message_recipients, :subject, :body
- validates_length_of :subject, :in => 1..255
+ validates_length_of :subject, in: 1..255
after_initialize do
@recipients_ids ||= []
@@ -33,7 +33,7 @@ class Message < ApplicationRecord
def create_message_recipients
user_ids = @recipients_ids
user_ids += User.undeleted.pluck(:id) if send_method == 'all'
- user_ids += Group.find(group_id).users.pluck(:id) unless group_id.blank?
+ user_ids += Group.find(group_id).users.pluck(:id) if group_id.present?
user_ids += Order.find(order_id).users_ordered.pluck(:id) if send_method == 'order'
user_ids.uniq.each do |user_id|
@@ -47,7 +47,7 @@ class Message < ApplicationRecord
end
def group_id=(group_id)
- group = Group.find(group_id) unless group_id.blank?
+ group = Group.find(group_id) if group_id.present?
if group
@send_method = 'workgroup' if group.type == 'Workgroup'
@send_method = 'ordergroup' if group.type == 'Ordergroup'
@@ -96,29 +96,29 @@ class Message < ApplicationRecord
def mail_hash_for_user(user)
digest = Digest::SHA1.new
- digest.update self.id.to_s
- digest.update ":"
+ digest.update id.to_s
+ digest.update ':'
digest.update salt
- digest.update ":"
+ digest.update ':'
digest.update user.id.to_s
Base32.encode digest.digest
end
# Returns true if this message is a system message, i.e. was sent automatically by Foodsoft itself.
def system_message?
- self.sender_id.nil?
+ sender_id.nil?
end
def sender_name
- system_message? ? I18n.t('layouts.foodsoft') : sender.display rescue "?"
+ system_message? ? I18n.t('layouts.foodsoft') : sender.display
+ rescue StandardError
+ '?'
end
- def recipients_ids
- @recipients_ids
- end
+ attr_reader :recipients_ids
def last_reply
- Message.where(reply_to: self.id).order(:created_at).last
+ Message.where(reply_to: id).order(:created_at).last
end
def is_readable_for?(user)
@@ -135,6 +135,6 @@ class Message < ApplicationRecord
private
def create_salt
- self.salt = [Array.new(6) { rand(256).chr }.join].pack("m").chomp
+ self.salt = [Array.new(6) { rand(256).chr }.join].pack('m').chomp
end
end
diff --git a/plugins/messages/app/models/message_recipient.rb b/plugins/messages/app/models/message_recipient.rb
index e205ea5b..671b557d 100644
--- a/plugins/messages/app/models/message_recipient.rb
+++ b/plugins/messages/app/models/message_recipient.rb
@@ -2,5 +2,5 @@ class MessageRecipient < ActiveRecord::Base
belongs_to :message
belongs_to :user
- enum email_state: [:pending, :sent, :skipped]
+ enum email_state: %i[pending sent skipped]
end
diff --git a/plugins/messages/app/models/messagegroup.rb b/plugins/messages/app/models/messagegroup.rb
index 7c7f6c03..93666dd5 100644
--- a/plugins/messages/app/models/messagegroup.rb
+++ b/plugins/messages/app/models/messagegroup.rb
@@ -1,5 +1,3 @@
class Messagegroup < Group
validates_uniqueness_of :name
-
- protected
end
diff --git a/plugins/messages/config/routes.rb b/plugins/messages/config/routes.rb
index d66eebdd..6d276428 100644
--- a/plugins/messages/config/routes.rb
+++ b/plugins/messages/config/routes.rb
@@ -1,13 +1,13 @@
Rails.application.routes.draw do
scope '/:foodcoop' do
- resources :messages, :only => [:index, :show, :new, :create] do
+ resources :messages, only: %i[index show new create] do
member do
get :thread
post :toggle_private
end
end
- resources :message_threads, :only => [:index, :show]
+ resources :message_threads, only: %i[index show]
resources :messagegroups, only: [:index] do
member do
diff --git a/plugins/messages/db/migrate/20160226000000_add_email_to_message.rb b/plugins/messages/db/migrate/20160226000000_add_email_to_message.rb
index 411600c7..034b023b 100644
--- a/plugins/messages/db/migrate/20160226000000_add_email_to_message.rb
+++ b/plugins/messages/db/migrate/20160226000000_add_email_to_message.rb
@@ -1,6 +1,6 @@
class AddEmailToMessage < ActiveRecord::Migration[4.2]
def change
add_column :messages, :salt, :string
- add_column :messages, :received_email, :binary, :limit => 1.megabyte
+ add_column :messages, :received_email, :binary, limit: 1.megabyte
end
end
diff --git a/plugins/messages/foodsoft_messages.gemspec b/plugins/messages/foodsoft_messages.gemspec
index 0dfc7163..e7967191 100644
--- a/plugins/messages/foodsoft_messages.gemspec
+++ b/plugins/messages/foodsoft_messages.gemspec
@@ -1,25 +1,26 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_messages/version"
+require 'foodsoft_messages/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_messages"
+ s.name = 'foodsoft_messages'
s.version = FoodsoftMessages::VERSION
- s.authors = ["robwa"]
- s.email = ["foodsoft-messages@ini.tiative.net"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Messaging plugin for foodsoft."
- s.description = "Adds the ability to exchange messages to foodsoft."
+ s.authors = ['robwa']
+ s.email = ['foodsoft-messages@ini.tiative.net']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Messaging plugin for foodsoft.'
+ s.description = 'Adds the ability to exchange messages to foodsoft.'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
- s.add_dependency "base32"
- s.add_dependency "deface", "~> 1.0"
- s.add_dependency "email_reply_trimmer"
- s.add_dependency "mail"
+ s.add_dependency 'rails'
+ s.add_dependency 'base32'
+ s.add_dependency 'deface', '~> 1.0'
+ s.add_dependency 'email_reply_trimmer'
+ s.add_dependency 'mail'
- s.add_development_dependency "sqlite3"
+ s.add_development_dependency 'sqlite3'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/messages/lib/foodsoft_messages.rb b/plugins/messages/lib/foodsoft_messages.rb
index b457c8f1..9fc71928 100644
--- a/plugins/messages/lib/foodsoft_messages.rb
+++ b/plugins/messages/lib/foodsoft_messages.rb
@@ -1,7 +1,7 @@
-require "foodsoft_messages/engine"
-require "foodsoft_messages/mail_receiver"
-require "foodsoft_messages/user_link"
-require "deface"
+require 'foodsoft_messages/engine'
+require 'foodsoft_messages/mail_receiver'
+require 'foodsoft_messages/user_link'
+require 'deface'
module FoodsoftMessages
# Return whether messages are used or not.
diff --git a/plugins/messages/lib/foodsoft_messages/engine.rb b/plugins/messages/lib/foodsoft_messages/engine.rb
index 0f67abb7..f054ada6 100644
--- a/plugins/messages/lib/foodsoft_messages/engine.rb
+++ b/plugins/messages/lib/foodsoft_messages/engine.rb
@@ -12,15 +12,16 @@ module FoodsoftMessages
sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
end
end
- unless primary[:admin].nil?
- sub_nav = primary[:admin].sub_navigation
- sub_nav.items <<
- SimpleNavigation::Item.new(primary, :messagegroups, I18n.t('navigation.admin.messagegroups'), context.admin_messagegroups_path)
- # move to right before config item
- if i = sub_nav.items.index(sub_nav[:config])
- sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
- end
- end
+ return if primary[:admin].nil?
+
+ sub_nav = primary[:admin].sub_navigation
+ sub_nav.items <<
+ SimpleNavigation::Item.new(primary, :messagegroups, I18n.t('navigation.admin.messagegroups'),
+ context.admin_messagegroups_path)
+ # move to right before config item
+ return unless i = sub_nav.items.index(sub_nav[:config])
+
+ sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
end
def default_foodsoft_config(cfg)
diff --git a/plugins/messages/lib/foodsoft_messages/user_link.rb b/plugins/messages/lib/foodsoft_messages/user_link.rb
index bfab42b6..6fcf99c4 100644
--- a/plugins/messages/lib/foodsoft_messages/user_link.rb
+++ b/plugins/messages/lib/foodsoft_messages/user_link.rb
@@ -8,7 +8,7 @@ module FoodsoftMessages
show_user user
else
link_to show_user(user), new_message_path('message[mail_to]' => user.id),
- :title => I18n.t('helpers.messages.write_message')
+ title: I18n.t('helpers.messages.write_message')
end
end
end
@@ -18,5 +18,5 @@ end
# modify existing helper
ActiveSupport.on_load(:after_initialize) do
- ApplicationHelper.send :include, FoodsoftMessages::UserLink
+ ApplicationHelper.include FoodsoftMessages::UserLink
end
diff --git a/plugins/messages/lib/foodsoft_messages/version.rb b/plugins/messages/lib/foodsoft_messages/version.rb
index 2da75575..6209100d 100644
--- a/plugins/messages/lib/foodsoft_messages/version.rb
+++ b/plugins/messages/lib/foodsoft_messages/version.rb
@@ -1,3 +1,3 @@
module FoodsoftMessages
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/polls/Rakefile b/plugins/polls/Rakefile
index 2834c5f3..861a530a 100755
--- a/plugins/polls/Rakefile
+++ b/plugins/polls/Rakefile
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_files.include('lib/**/*.rb')
end
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
t.verbose = false
end
-task :default => :test
+task default: :test
diff --git a/plugins/polls/app/controllers/polls_controller.rb b/plugins/polls/app/controllers/polls_controller.rb
index b0c1a9eb..110c4d3f 100644
--- a/plugins/polls/app/controllers/polls_controller.rb
+++ b/plugins/polls/app/controllers/polls_controller.rb
@@ -27,9 +27,9 @@ class PollsController < ApplicationController
def edit
@poll = Poll.find(params[:id])
- if user_has_no_right
- redirect_to polls_path, alert: t('.no_right')
- end
+ return unless user_has_no_right
+
+ redirect_to polls_path, alert: t('.no_right')
end
def update
@@ -53,8 +53,8 @@ class PollsController < ApplicationController
@poll.destroy
redirect_to polls_path, notice: t('.notice')
end
- rescue => error
- redirect_to polls_path, alert: t('.error', error: error.message)
+ rescue StandardError => e
+ redirect_to polls_path, alert: t('.error', error: e.message)
end
def vote
@@ -73,25 +73,25 @@ class PollsController < ApplicationController
@poll_vote = @poll.poll_votes.where(attributes).first_or_initialize
- if request.post?
- @poll_vote.update!(note: params[:note], user: current_user)
+ return unless request.post?
- if @poll.single_select?
- choices = {}
- choice = params[:choice]
- choices[choice] = '1' if choice
- else
- choices = params[:choices].try(:to_h) || {}
- end
+ @poll_vote.update!(note: params[:note], user: current_user)
- @poll_vote.poll_choices = choices.map do |choice, value|
- poll_choice = @poll_vote.poll_choices.where(choice: choice).first_or_initialize
- poll_choice.update!(value: value)
- poll_choice
- end
-
- redirect_to @poll
+ if @poll.single_select?
+ choices = {}
+ choice = params[:choice]
+ choices[choice] = '1' if choice
+ else
+ choices = params[:choices].try(:to_h) || {}
end
+
+ @poll_vote.poll_choices = choices.map do |choice, value|
+ poll_choice = @poll_vote.poll_choices.where(choice: choice).first_or_initialize
+ poll_choice.update!(value: value)
+ poll_choice
+ end
+
+ redirect_to @poll
end
private
diff --git a/plugins/polls/db/migrate/20181110000000_create_polls.rb b/plugins/polls/db/migrate/20181110000000_create_polls.rb
index 990e75f0..120b7eef 100644
--- a/plugins/polls/db/migrate/20181110000000_create_polls.rb
+++ b/plugins/polls/db/migrate/20181110000000_create_polls.rb
@@ -24,14 +24,14 @@ class CreatePolls < ActiveRecord::Migration[4.2]
t.references :ordergroup
t.text :note
t.timestamps
- t.index [:poll_id, :user_id, :ordergroup_id], unique: true
+ t.index %i[poll_id user_id ordergroup_id], unique: true
end
create_table :poll_choices do |t|
t.references :poll_vote, null: false
t.integer :choice, null: false
t.integer :value, null: false
- t.index [:poll_vote_id, :choice], unique: true
+ t.index %i[poll_vote_id choice], unique: true
end
end
end
diff --git a/plugins/polls/db/migrate/20181120000000_increase_choices_size.rb b/plugins/polls/db/migrate/20181120000000_increase_choices_size.rb
index d809e3ea..621863dd 100644
--- a/plugins/polls/db/migrate/20181120000000_increase_choices_size.rb
+++ b/plugins/polls/db/migrate/20181120000000_increase_choices_size.rb
@@ -1,5 +1,5 @@
class IncreaseChoicesSize < ActiveRecord::Migration[4.2]
def up
- change_column :polls, :choices, :text, limit: 65535
+ change_column :polls, :choices, :text, limit: 65_535
end
end
diff --git a/plugins/polls/foodsoft_polls.gemspec b/plugins/polls/foodsoft_polls.gemspec
index 63e7db29..607a1276 100644
--- a/plugins/polls/foodsoft_polls.gemspec
+++ b/plugins/polls/foodsoft_polls.gemspec
@@ -1,20 +1,21 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_polls/version"
+require 'foodsoft_polls/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_polls"
+ s.name = 'foodsoft_polls'
s.version = FoodsoftPolls::VERSION
- s.authors = ["paroga"]
- s.email = ["paroga@paroga.com"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Polls plugin for foodsoft."
- s.description = "Adds possibility to do polls with foodsoft."
+ s.authors = ['paroga']
+ s.email = ['paroga@paroga.com']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Polls plugin for foodsoft.'
+ s.description = 'Adds possibility to do polls with foodsoft.'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
- s.add_dependency "deface", "~> 1.0"
+ s.add_dependency 'rails'
+ s.add_dependency 'deface', '~> 1.0'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/polls/lib/foodsoft_polls/engine.rb b/plugins/polls/lib/foodsoft_polls/engine.rb
index a76399f0..e4812345 100644
--- a/plugins/polls/lib/foodsoft_polls/engine.rb
+++ b/plugins/polls/lib/foodsoft_polls/engine.rb
@@ -8,9 +8,9 @@ module FoodsoftPolls
sub_nav.items <<
SimpleNavigation::Item.new(primary, :polls, I18n.t('navigation.polls'), context.polls_path)
# move to right before tasks item
- if i = sub_nav.items.index(sub_nav[:tasks])
- sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
- end
+ return unless i = sub_nav.items.index(sub_nav[:tasks])
+
+ sub_nav.items.insert(i, sub_nav.items.delete_at(-1))
end
end
end
diff --git a/plugins/polls/lib/foodsoft_polls/version.rb b/plugins/polls/lib/foodsoft_polls/version.rb
index 5f3fb96d..84369283 100644
--- a/plugins/polls/lib/foodsoft_polls/version.rb
+++ b/plugins/polls/lib/foodsoft_polls/version.rb
@@ -1,3 +1,3 @@
module FoodsoftPolls
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/printer/Rakefile b/plugins/printer/Rakefile
index 1c9d9839..fbf50e1d 100755
--- a/plugins/printer/Rakefile
+++ b/plugins/printer/Rakefile
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_files.include('lib/**/*.rb')
end
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
t.verbose = false
end
-task :default => :test
+task default: :test
diff --git a/plugins/printer/app/controllers/printer_controller.rb b/plugins/printer/app/controllers/printer_controller.rb
index 178787da..78f13377 100644
--- a/plugins/printer/app/controllers/printer_controller.rb
+++ b/plugins/printer/app/controllers/printer_controller.rb
@@ -37,9 +37,7 @@ class PrinterController < ApplicationController
job = PrinterJob.unfinished.find_by_id(json[:id])
return unless job
- if json[:state]
- job.add_update! json[:state], json[:message]
- end
+ job.add_update! json[:state], json[:message] if json[:state]
job.finish! if json[:finish]
end
diff --git a/plugins/printer/app/controllers/printer_jobs_controller.rb b/plugins/printer/app/controllers/printer_jobs_controller.rb
index 37c864e9..4ba13803 100644
--- a/plugins/printer/app/controllers/printer_jobs_controller.rb
+++ b/plugins/printer/app/controllers/printer_jobs_controller.rb
@@ -15,7 +15,7 @@ class PrinterJobsController < ApplicationController
state = order.open? ? 'queued' : 'ready'
count = 0
PrinterJob.transaction do
- %w(articles fax groups matrix).each do |document|
+ %w[articles fax groups matrix].each do |document|
next unless FoodsoftConfig["printer_print_order_#{document}"]
job = PrinterJob.create! order: order, document: document, created_by: current_user
@@ -47,7 +47,7 @@ class PrinterJobsController < ApplicationController
job = PrinterJob.find(params[:id])
job.finish! current_user
redirect_to printer_jobs_path, notice: t('.notice')
- rescue => error
- redirect_to printer_jobs_path, t('errors.general_msg', msg: error.message)
+ rescue StandardError => e
+ redirect_to printer_jobs_path, t('errors.general_msg', msg: e.message)
end
end
diff --git a/plugins/printer/config/routes.rb b/plugins/printer/config/routes.rb
index c81fc786..298ddfea 100644
--- a/plugins/printer/config/routes.rb
+++ b/plugins/printer/config/routes.rb
@@ -4,7 +4,7 @@ Rails.application.routes.draw do
get :socket, on: :collection
end
- resources :printer_jobs, only: [:index, :create, :show, :destroy] do
+ resources :printer_jobs, only: %i[index create show destroy] do
post :requeue, on: :member
get :document, on: :member
end
diff --git a/plugins/printer/db/migrate/20181201000000_create_printer_jobs.rb b/plugins/printer/db/migrate/20181201000000_create_printer_jobs.rb
index ee7665e4..36d175c5 100644
--- a/plugins/printer/db/migrate/20181201000000_create_printer_jobs.rb
+++ b/plugins/printer/db/migrate/20181201000000_create_printer_jobs.rb
@@ -15,6 +15,6 @@ class CreatePrinterJobs < ActiveRecord::Migration[4.2]
t.text :message
end
- add_index :printer_job_updates, [:printer_job_id, :created_at]
+ add_index :printer_job_updates, %i[printer_job_id created_at]
end
end
diff --git a/plugins/printer/foodsoft_printer.gemspec b/plugins/printer/foodsoft_printer.gemspec
index d0eea89a..a6e54455 100644
--- a/plugins/printer/foodsoft_printer.gemspec
+++ b/plugins/printer/foodsoft_printer.gemspec
@@ -1,21 +1,22 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_printer/version"
+require 'foodsoft_printer/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_printer"
+ s.name = 'foodsoft_printer'
s.version = FoodsoftPrinter::VERSION
- s.authors = ["paroga"]
- s.email = ["paroga@paroga.com"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Printer plugin for foodsoft."
- s.description = "Add a printer queue to foodsoft."
+ s.authors = ['paroga']
+ s.email = ['paroga@paroga.com']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Printer plugin for foodsoft.'
+ s.description = 'Add a printer queue to foodsoft.'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
- s.add_dependency "deface", "~> 1.0"
- s.add_dependency "tubesock"
+ s.add_dependency 'rails'
+ s.add_dependency 'deface', '~> 1.0'
+ s.add_dependency 'tubesock'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/printer/lib/foodsoft_printer/engine.rb b/plugins/printer/lib/foodsoft_printer/engine.rb
index 22144e30..8f1f00cc 100644
--- a/plugins/printer/lib/foodsoft_printer/engine.rb
+++ b/plugins/printer/lib/foodsoft_printer/engine.rb
@@ -3,18 +3,19 @@ module FoodsoftPrinter
def navigation(primary, context)
return unless FoodsoftPrinter.enabled?
- unless primary[:orders].nil?
- sub_nav = primary[:orders].sub_navigation
- sub_nav.items <<
- SimpleNavigation::Item.new(primary, :printer_jobs, I18n.t('navigation.orders.printer_jobs'), context.printer_jobs_path)
- end
+ return if primary[:orders].nil?
+
+ sub_nav = primary[:orders].sub_navigation
+ sub_nav.items <<
+ SimpleNavigation::Item.new(primary, :printer_jobs, I18n.t('navigation.orders.printer_jobs'),
+ context.printer_jobs_path)
end
def default_foodsoft_config(cfg)
cfg[:use_printer] = false
end
- initializer 'foodsoft_printer.order_printer_jobs' do |app|
+ initializer 'foodsoft_printer.order_printer_jobs' do |_app|
if Rails.configuration.cache_classes
OrderPrinterJobs.install
else
diff --git a/plugins/printer/lib/foodsoft_printer/order_printer_jobs.rb b/plugins/printer/lib/foodsoft_printer/order_printer_jobs.rb
index 7501a69e..4c7eeeaa 100644
--- a/plugins/printer/lib/foodsoft_printer/order_printer_jobs.rb
+++ b/plugins/printer/lib/foodsoft_printer/order_printer_jobs.rb
@@ -4,14 +4,14 @@ module FoodsoftPrinter
base.class_eval do
has_many :printer_jobs, dependent: :destroy
- alias foodsoft_printer_orig_finish! finish!
+ alias_method :foodsoft_printer_orig_finish!, :finish!
def finish!(user)
foodsoft_printer_orig_finish!(user)
- unless finished?
- printer_jobs.unfinished.each do |job|
- job.add_update! 'ready'
- end
+ return if finished?
+
+ printer_jobs.unfinished.each do |job|
+ job.add_update! 'ready'
end
end
end
diff --git a/plugins/printer/lib/foodsoft_printer/version.rb b/plugins/printer/lib/foodsoft_printer/version.rb
index 17bd39cb..e9d2ad84 100644
--- a/plugins/printer/lib/foodsoft_printer/version.rb
+++ b/plugins/printer/lib/foodsoft_printer/version.rb
@@ -1,3 +1,3 @@
module FoodsoftPrinter
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/uservoice/foodsoft_uservoice.gemspec b/plugins/uservoice/foodsoft_uservoice.gemspec
index f33760fb..4defe395 100644
--- a/plugins/uservoice/foodsoft_uservoice.gemspec
+++ b/plugins/uservoice/foodsoft_uservoice.gemspec
@@ -1,20 +1,21 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_uservoice/version"
+require 'foodsoft_uservoice/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_uservoice"
+ s.name = 'foodsoft_uservoice'
s.version = FoodsoftUservoice::VERSION
- s.authors = ["wvengen"]
- s.email = ["dev-foodsoft@willem.engen.nl"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Uservoice plugin for foodsoft."
- s.description = "Adds a uservoice feedback button to foodsoft."
+ s.authors = ['wvengen']
+ s.email = ['dev-foodsoft@willem.engen.nl']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Uservoice plugin for foodsoft.'
+ s.description = 'Adds a uservoice feedback button to foodsoft.'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['README.md']
- s.add_dependency "rails"
- s.add_dependency "content_for_in_controllers"
+ s.add_dependency 'rails'
+ s.add_dependency 'content_for_in_controllers'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/uservoice/lib/foodsoft_uservoice.rb b/plugins/uservoice/lib/foodsoft_uservoice.rb
index b4718445..2d5b764b 100644
--- a/plugins/uservoice/lib/foodsoft_uservoice.rb
+++ b/plugins/uservoice/lib/foodsoft_uservoice.rb
@@ -1,5 +1,5 @@
-require "content_for_in_controllers"
-require "foodsoft_uservoice/engine"
+require 'content_for_in_controllers'
+require 'foodsoft_uservoice/engine'
module FoodsoftUservoice
# enabled when configured, but can still be disabled by use_uservoice option
@@ -19,11 +19,11 @@ module FoodsoftUservoice
# include uservoice javascript
api_key = FoodsoftConfig[:uservoice]['api_key']
- js_pre = "UserVoice=window.UserVoice||[];"
+ js_pre = 'UserVoice=window.UserVoice||[];'
js_load = "var uv=document.createElement('script');uv.type='text/javascript';uv.async=true;uv.src='//widget.uservoice.com/#{view_context.j api_key}.js';var s=document.getElementsByTagName('script')[0];s.parentNode.insertBefore(uv,s);"
# configuration
- sections = FoodsoftConfig[:uservoice].reject { |k, v| k == 'api_key' }
+ sections = FoodsoftConfig[:uservoice].except('api_key')
sections.each_pair do |k, v|
if k == 'identify'
v['id'] = current_user.try(:id) if v.include?('id')
@@ -48,5 +48,5 @@ module FoodsoftUservoice
end
ActiveSupport.on_load(:after_initialize) do
- ApplicationController.send :include, FoodsoftUservoice::LoadUservoice
+ ApplicationController.include FoodsoftUservoice::LoadUservoice
end
diff --git a/plugins/uservoice/lib/foodsoft_uservoice/version.rb b/plugins/uservoice/lib/foodsoft_uservoice/version.rb
index 8d78e3de..e806ff1d 100644
--- a/plugins/uservoice/lib/foodsoft_uservoice/version.rb
+++ b/plugins/uservoice/lib/foodsoft_uservoice/version.rb
@@ -1,3 +1,3 @@
module FoodsoftUservoice
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/wiki/Rakefile b/plugins/wiki/Rakefile
index 5d2e31db..dd14bed8 100755
--- a/plugins/wiki/Rakefile
+++ b/plugins/wiki/Rakefile
@@ -20,7 +20,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_files.include('lib/**/*.rb')
end
-APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
+APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -34,4 +34,4 @@ Rake::TestTask.new(:test) do |t|
t.verbose = false
end
-task :default => :test
+task default: :test
diff --git a/plugins/wiki/app/controllers/pages_controller.rb b/plugins/wiki/app/controllers/pages_controller.rb
index c065abe7..0e28e2d5 100644
--- a/plugins/wiki/app/controllers/pages_controller.rb
+++ b/plugins/wiki/app/controllers/pages_controller.rb
@@ -1,20 +1,20 @@
class PagesController < ApplicationController
before_action -> { require_plugin_enabled FoodsoftWiki }
- before_action :catch_special_pages, only: [:show, :new]
+ before_action :catch_special_pages, only: %i[show new]
- skip_before_action :authenticate, :only => :all
- before_action :only => :all do
- authenticate_or_token(['wiki', 'all'])
+ skip_before_action :authenticate, only: :all
+ before_action only: :all do
+ authenticate_or_token(%w[wiki all])
end
before_action do
content_for :head, view_context.rss_meta_tag
end
def index
- @page = Page.find_by_permalink "Home"
+ @page = Page.find_by_permalink 'Home'
if @page
- render :action => 'show'
+ render action: 'show'
else
redirect_to all_pages_path
end
@@ -34,11 +34,11 @@ class PagesController < ApplicationController
end
if @page.nil?
- redirect_to new_page_path(:title => params[:permalink])
+ redirect_to new_page_path(title: params[:permalink])
elsif @page.redirect?
page = Page.find_by_id(@page.redirect)
unless page.nil?
- flash[:notice] = I18n.t('pages.cshow.redirect_notice', :page => @page.title)
+ flash[:notice] = I18n.t('pages.cshow.redirect_notice', page: @page.title)
redirect_to wiki_page_path(page.permalink)
end
end
@@ -46,12 +46,12 @@ class PagesController < ApplicationController
def new
@page = Page.new
- @page.title = params[:title].gsub("_", " ") if params[:title]
+ @page.title = params[:title].gsub('_', ' ') if params[:title]
@page.parent = Page.find_by_permalink(params[:parent]) if params[:parent]
respond_to do |format|
format.html # new.html.erb
- format.xml { render :xml => @page }
+ format.xml { render xml: @page }
end
end
@@ -60,36 +60,32 @@ class PagesController < ApplicationController
end
def create
- @page = Page.new(params[:page].merge({ :user => current_user }))
+ @page = Page.new(params[:page].merge({ user: current_user }))
if params[:preview]
- render :action => 'new'
+ render action: 'new'
+ elsif @page.save
+ flash[:notice] = I18n.t('pages.create.notice')
+ redirect_to(wiki_page_path(@page.permalink))
else
- if @page.save
- flash[:notice] = I18n.t('pages.create.notice')
- redirect_to(wiki_page_path(@page.permalink))
- else
- render :action => "new"
- end
+ render action: 'new'
end
end
def update
@page = Page.find(params[:id])
- @page.attributes = params[:page].merge({ :user => current_user })
+ @page.attributes = params[:page].merge({ user: current_user })
if params[:preview]
@page.attributes = params[:page]
- render :action => 'edit'
+ render action: 'edit'
+ elsif @page.save
+ @page.parent_id = parent_id if params[:parent_id].present? \
+ && params[:parent_id] != @page_id
+ flash[:notice] = I18n.t('pages.update.notice')
+ redirect_to wiki_page_path(@page.permalink)
else
- if @page.save
- @page.parent_id = parent_id if (!params[:parent_id].blank? \
- && params[:parent_id] != @page_id)
- flash[:notice] = I18n.t('pages.update.notice')
- redirect_to wiki_page_path(@page.permalink)
- else
- render :action => "edit"
- end
+ render action: 'edit'
end
rescue ActiveRecord::StaleObjectError
flash[:error] = I18n.t('pages.error_stale_object')
@@ -100,7 +96,7 @@ class PagesController < ApplicationController
@page = Page.find(params[:id])
@page.destroy
- flash[:notice] = I18n.t('pages.destroy.notice', :page => @page.title)
+ flash[:notice] = I18n.t('pages.destroy.notice', page: @page.title)
redirect_to wiki_path
end
@@ -109,23 +105,23 @@ class PagesController < ApplicationController
@partial = params[:view] || 'site_map'
if params[:name]
- @pages = @pages.where("title LIKE ?", "%#{params[:name]}%").limit(20)
+ @pages = @pages.where('title LIKE ?', "%#{params[:name]}%").limit(20)
@partial = 'title_list'
end
- if params[:sort]
- sort = case params[:sort]
- when "title" then "title"
- when "title_reverse" then "title DESC"
- when "last_updated" then "updated_at DESC"
- when "last_updated_reverse" then "updated_at"
+ sort = if params[:sort]
+ case params[:sort]
+ when 'title' then 'title'
+ when 'title_reverse' then 'title DESC'
+ when 'last_updated' then 'updated_at DESC'
+ when 'last_updated_reverse' then 'updated_at'
end
- else
- sort = "title"
- end
+ else
+ 'title'
+ end
@pages = @pages.order(sort)
respond_to do |format|
format.html
- format.rss { render :layout => false }
+ format.rss { render layout: false }
end
end
@@ -150,15 +146,15 @@ class PagesController < ApplicationController
def variables
keys = Foodsoft::ExpansionVariables.variables.keys
- @variables = Hash[keys.map { |k| [k, Foodsoft::ExpansionVariables.get(k)] }]
+ @variables = keys.index_with { |k| Foodsoft::ExpansionVariables.get(k) }
render 'variables'
end
private
def catch_special_pages
- if params[:id] == 'Help:Foodsoft_variables'
- variables
- end
+ return unless params[:id] == 'Help:Foodsoft_variables'
+
+ variables
end
end
diff --git a/plugins/wiki/app/helpers/pages_helper.rb b/plugins/wiki/app/helpers/pages_helper.rb
index 2c1479f3..869f59d1 100644
--- a/plugins/wiki/app/helpers/pages_helper.rb
+++ b/plugins/wiki/app/helpers/pages_helper.rb
@@ -2,70 +2,70 @@ module PagesHelper
include WikiCloth
def rss_meta_tag
- tag.link(rel: "alternate", type: "application/rss+xml", title: "RSS", href: all_pages_rss_url).html_safe
+ tag.link(rel: 'alternate', type: 'application/rss+xml', title: 'RSS', href: all_pages_rss_url).html_safe
end
def wikified_body(body, title = nil)
FoodsoftWiki::WikiParser.new(data: body + "\n", params: { referer: title }).to_html(noedit: true).html_safe
- rescue => e
+ rescue StandardError => e
# try the following with line breaks: === one === == two == = three =
content_tag :span, class: 'alert alert-error' do
- I18n.t '.wikicloth_exception', :msg => e
+ I18n.t '.wikicloth_exception', msg: e
end.html_safe
end
def link_to_wikipage(page, text = nil)
- if text == nil
- link_to page.title, wiki_page_path(:permalink => page.permalink)
+ if text.nil?
+ link_to page.title, wiki_page_path(permalink: page.permalink)
else
- link_to text, wiki_page_path(:permalink => page.permalink)
+ link_to text, wiki_page_path(permalink: page.permalink)
end
end
def link_to_wikipage_by_permalink(permalink, text = nil)
- unless permalink.blank?
- page = Page.find_by_permalink(permalink)
- if page.nil?
- if text.nil?
- link_to permalink, new_page_path(:title => permalink)
- else
- link_to text, new_page_path(:title => permalink)
- end
+ return if permalink.blank?
+
+ page = Page.find_by_permalink(permalink)
+ if page.nil?
+ if text.nil?
+ link_to permalink, new_page_path(title: permalink)
else
- link_to_wikipage(page, text)
+ link_to text, new_page_path(title: permalink)
end
+ else
+ link_to_wikipage(page, text)
end
end
def generate_toc(body)
toc = String.new
- body.gsub(/^([=]{1,6})\s*(.*?)\s*(\1)/) do
- number = $1.length - 1
- name = $2
+ body.gsub(/^(={1,6})\s*(.*?)\s*(\1)/) do
+ number = ::Regexp.last_match(1).length - 1
+ name = ::Regexp.last_match(2)
- toc << "*" * number + " #{name}\n"
+ toc << (('*' * number) + " #{name}\n")
end
- unless toc.blank?
- FoodsoftWiki::WikiParser.new(data: toc).to_html.gsub(/([^<>\n]*)/) do
- name = $1
- anchor = name.gsub(/\s/, '_').gsub(/[^a-zA-Z_]/, '')
- "#{name.truncate(20)}"
- end.html_safe
- end
+ return if toc.blank?
+
+ FoodsoftWiki::WikiParser.new(data: toc).to_html.gsub(/([^<>\n]*)/) do
+ name = ::Regexp.last_match(1)
+ anchor = name.gsub(/\s/, '_').gsub(/[^a-zA-Z_]/, '')
+ "#{name.truncate(20)}"
+ end.html_safe
end
def parent_pages_to_select(current_page)
- unless current_page.homepage? # Homepage is the page trees root!
+ if current_page.homepage?
+ []
+ else # Homepage is the page trees root!
Page.non_redirected.reject { |p| p == current_page || p.ancestors.include?(current_page) }
- else
- Array.new
end
end
# return url for all_pages rss feed
def all_pages_rss_url(options = {})
- token = TokenVerifier.new(['wiki', 'all']).generate
- all_pages_url({ :format => 'rss', :token => token }.merge(options))
+ token = TokenVerifier.new(%w[wiki all]).generate
+ all_pages_url({ format: 'rss', token: token }.merge(options))
end
end
diff --git a/plugins/wiki/app/models/page.rb b/plugins/wiki/app/models/page.rb
index e773afa7..26d2393d 100644
--- a/plugins/wiki/app/models/page.rb
+++ b/plugins/wiki/app/models/page.rb
@@ -1,61 +1,62 @@
class Page < ApplicationRecord
include ActsAsTree
- belongs_to :user, :foreign_key => 'updated_by'
+ belongs_to :user, foreign_key: 'updated_by'
acts_as_versioned version_column: :lock_version
- self.non_versioned_columns += %w(permalink created_at title)
+ self.non_versioned_columns += %w[permalink created_at title]
- acts_as_tree :order => "title"
+ acts_as_tree order: 'title'
attr_accessor :old_title # Save title to create redirect page when editing title
validates_presence_of :title, :body
validates_uniqueness_of :permalink, :title
- before_validation :set_permalink, :on => :create
- before_validation :update_permalink, :on => :update
+ before_validation :set_permalink, on: :create
+ before_validation :update_permalink, on: :update
after_update :create_redirect
- scope :non_redirected, -> { where(:redirect => nil) }
- scope :no_parent, -> { where(:parent_id => nil) }
+ scope :non_redirected, -> { where(redirect: nil) }
+ scope :no_parent, -> { where(parent_id: nil) }
def self.permalink(title)
- title.gsub(/[\/\.,;@\s]/, "_").gsub(/[\"\']/, "")
+ title.gsub(%r{[/.,;@\s]}, '_').gsub(/["']/, '')
end
def homepage?
- permalink == "Home"
+ permalink == 'Home'
end
def self.dashboard
- where(permalink: "Dashboard").first
+ where(permalink: 'Dashboard').first
end
def self.public_front_page
- where(permalink: "Public_frontpage").first
+ where(permalink: 'Public_frontpage').first
end
def self.welcome_mail
- where(permalink: "Welcome_mail").first
+ where(permalink: 'Welcome_mail').first
end
def set_permalink
- unless title.blank?
- self.permalink = Page.count == 0 ? "Home" : Page.permalink(title)
- end
+ return if title.blank?
+
+ self.permalink = Page.count == 0 ? 'Home' : Page.permalink(title)
end
def diff
current = versions.latest
- old = versions.where(["page_id = ? and lock_version < ?", current.page_id, current.lock_version]).order('lock_version DESC').first
+ old = versions.where(['page_id = ? and lock_version < ?', current.page_id,
+ current.lock_version]).order('lock_version DESC').first
if old
o = ''
Diffy::Diff.new(old.body, current.body).each do |line|
case line
- when /^\+/ then o += "#{line.chomp}
" unless line.chomp == "+"
- when /^-/ then o += "#{line.chomp}
" unless line.chomp == "-"
+ when /^\+/ then o += "#{line.chomp}
" unless line.chomp == '+'
+ when /^-/ then o += "#{line.chomp}
" unless line.chomp == '-'
end
end
o
@@ -67,19 +68,19 @@ class Page < ApplicationRecord
protected
def update_permalink
- if changed.include?("title")
- set_permalink
- self.old_title = changes["title"].first # Save title for creating redirect
- end
+ return unless changed.include?('title')
+
+ set_permalink
+ self.old_title = changes['title'].first # Save title for creating redirect
end
def create_redirect
- unless old_title.blank?
- Page.create :redirect => id,
- :title => old_title,
- :body => I18n.t('model.page.redirect', :title => title),
- :permalink => Page.permalink(old_title),
- :updated_by => updated_by
- end
+ return if old_title.blank?
+
+ Page.create redirect: id,
+ title: old_title,
+ body: I18n.t('model.page.redirect', title: title),
+ permalink: Page.permalink(old_title),
+ updated_by: updated_by
end
end
diff --git a/plugins/wiki/app/views/pages/all.rss.builder b/plugins/wiki/app/views/pages/all.rss.builder
index f7194763..7f0b4e10 100644
--- a/plugins/wiki/app/views/pages/all.rss.builder
+++ b/plugins/wiki/app/views/pages/all.rss.builder
@@ -1,16 +1,16 @@
-xml.instruct! :xml, :version => "1.0"
-xml.rss :version => "2.0" do
+xml.instruct! :xml, version: '1.0'
+xml.rss version: '2.0' do
xml.channel do
- xml.title FoodsoftConfig[:name] + " Wiki"
- xml.description ""
+ xml.title FoodsoftConfig[:name] + ' Wiki'
+ xml.description ''
xml.link FoodsoftConfig[:homepage]
for page in @pages
xml.item do
xml.title page.title
- xml.description page.diff, :type => "html"
+ xml.description page.diff, type: 'html'
xml.author User.find_by_id(page.updated_by).try(:display)
- xml.pubDate page.updated_at.to_s(:rfc822)
+ xml.pubDate page.updated_at.to_fs(:rfc822)
xml.link wiki_page_path(page.permalink)
xml.guid page.updated_at.to_i
end
diff --git a/plugins/wiki/config/routes.rb b/plugins/wiki/config/routes.rb
index 4ebad572..ad713366 100644
--- a/plugins/wiki/config/routes.rb
+++ b/plugins/wiki/config/routes.rb
@@ -1,12 +1,12 @@
Rails.application.routes.draw do
scope '/:foodcoop' do
resources :pages do
- get :all, :on => :collection
- get :version, :on => :member
- get :revert, :on => :member
- get :diff, :on => :member
+ get :all, on: :collection
+ get :version, on: :member
+ get :revert, on: :member
+ get :diff, on: :member
end
get '/wiki/:permalink' => 'pages#show', :as => 'wiki_page' # , :constraints => {:permalink => /[^\s]+/}
- get '/wiki' => 'pages#show', :defaults => { :permalink => 'Home' }, :as => 'wiki'
+ get '/wiki' => 'pages#show', :defaults => { permalink: 'Home' }, :as => 'wiki'
end
end
diff --git a/plugins/wiki/db/migrate/20090325175756_create_pages.rb b/plugins/wiki/db/migrate/20090325175756_create_pages.rb
index 846decf8..cdd00e2b 100644
--- a/plugins/wiki/db/migrate/20090325175756_create_pages.rb
+++ b/plugins/wiki/db/migrate/20090325175756_create_pages.rb
@@ -4,7 +4,7 @@ class CreatePages < ActiveRecord::Migration[4.2]
t.string :title
t.text :body
t.string :permalink
- t.integer :lock_version, :default => 0
+ t.integer :lock_version, default: 0
t.integer :updated_by
t.integer :redirect
t.integer :parent_id
diff --git a/plugins/wiki/foodsoft_wiki.gemspec b/plugins/wiki/foodsoft_wiki.gemspec
index 371872c5..58be331d 100644
--- a/plugins/wiki/foodsoft_wiki.gemspec
+++ b/plugins/wiki/foodsoft_wiki.gemspec
@@ -1,26 +1,27 @@
-$:.push File.expand_path("../lib", __FILE__)
+$:.push File.expand_path('lib', __dir__)
# Maintain your gem's version:
-require "foodsoft_wiki/version"
+require 'foodsoft_wiki/version'
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
- s.name = "foodsoft_wiki"
+ s.name = 'foodsoft_wiki'
s.version = FoodsoftWiki::VERSION
- s.authors = ["wvengen"]
- s.email = ["dev-foodsoft@willem.engen.nl"]
- s.homepage = "https://github.com/foodcoops/foodsoft"
- s.summary = "Wiki plugin for foodsoft."
- s.description = "Adds a wiki to foodsoft."
+ s.authors = ['wvengen']
+ s.email = ['dev-foodsoft@willem.engen.nl']
+ s.homepage = 'https://github.com/foodcoops/foodsoft'
+ s.summary = 'Wiki plugin for foodsoft.'
+ s.description = 'Adds a wiki to foodsoft.'
- s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile", "README.md"]
+ s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile', 'README.md']
- s.add_dependency "rails"
+ s.add_dependency 'rails'
s.add_dependency 'wikicloth'
s.add_dependency 'twitter-text', '~> 1.14' # wikicloth doesn't support version 2
s.add_dependency 'acts_as_versioned' # need git version, make sure that is included in foodsoft's Gemfile
- s.add_dependency "deface", "~> 1.0"
+ s.add_dependency 'deface', '~> 1.0'
s.add_dependency 'diffy'
s.add_dependency 'content_for_in_controllers'
- s.add_development_dependency "sqlite3"
+ s.add_development_dependency 'sqlite3'
+ s.metadata['rubygems_mfa_required'] = 'true'
end
diff --git a/plugins/wiki/lib/foodsoft_wiki/engine.rb b/plugins/wiki/lib/foodsoft_wiki/engine.rb
index 4cc20f6a..ae2ce462 100644
--- a/plugins/wiki/lib/foodsoft_wiki/engine.rb
+++ b/plugins/wiki/lib/foodsoft_wiki/engine.rb
@@ -8,17 +8,17 @@ module FoodsoftWiki
subnav.item :all_pages, I18n.t('navigation.wiki.all_pages'), ctx.all_pages_path, id: nil
end
# move this last added item to just after the foodcoop menu
- if i = primary.items.index(primary[:foodcoop])
- primary.items.insert(i + 1, primary.items.delete_at(-1))
- end
+ return unless i = primary.items.index(primary[:foodcoop])
+
+ primary.items.insert(i + 1, primary.items.delete_at(-1))
end
def default_foodsoft_config(cfg)
cfg[:use_wiki] = true
end
- initializer "foodsoft_wiki.assets.precompile" do |app|
- app.config.assets.precompile += %w(icons/feed-icon-14x14.png)
+ initializer 'foodsoft_wiki.assets.precompile' do |app|
+ app.config.assets.precompile += %w[icons/feed-icon-14x14.png]
end
end
end
diff --git a/plugins/wiki/lib/foodsoft_wiki/mailer.rb b/plugins/wiki/lib/foodsoft_wiki/mailer.rb
index 83a110f1..4b7a892d 100644
--- a/plugins/wiki/lib/foodsoft_wiki/mailer.rb
+++ b/plugins/wiki/lib/foodsoft_wiki/mailer.rb
@@ -3,10 +3,10 @@ module FoodsoftWiki
def self.included(base) # :nodoc:
base.class_eval do
# modify user presentation link to writing a message for the user
- def additonal_welcome_text(user)
- if FoodsoftWiki.enabled? && (page = Page.welcome_mail)
- page.body
- end
+ def additonal_welcome_text(_user)
+ return unless FoodsoftWiki.enabled? && (page = Page.welcome_mail)
+
+ page.body
end
end
end
@@ -15,5 +15,5 @@ end
# modify existing helper
ActiveSupport.on_load(:after_initialize) do
- Mailer.send :include, FoodsoftWiki::Mailer
+ Mailer.include FoodsoftWiki::Mailer
end
diff --git a/plugins/wiki/lib/foodsoft_wiki/version.rb b/plugins/wiki/lib/foodsoft_wiki/version.rb
index 2a67a94e..580ee3ed 100644
--- a/plugins/wiki/lib/foodsoft_wiki/version.rb
+++ b/plugins/wiki/lib/foodsoft_wiki/version.rb
@@ -1,3 +1,3 @@
module FoodsoftWiki
- VERSION = "0.0.1"
+ VERSION = '0.0.1'
end
diff --git a/plugins/wiki/lib/foodsoft_wiki/wiki_parser.rb b/plugins/wiki/lib/foodsoft_wiki/wiki_parser.rb
index 37e58465..6e14d2a8 100644
--- a/plugins/wiki/lib/foodsoft_wiki/wiki_parser.rb
+++ b/plugins/wiki/lib/foodsoft_wiki/wiki_parser.rb
@@ -10,7 +10,7 @@ module FoodsoftWiki
link_attributes_for do |page|
permalink = Page.permalink(page)
- if Page.exists?(:permalink => permalink)
+ if Page.exists?(permalink: permalink)
{ href: url_for(:wiki_page_path, permalink: permalink) }
elsif page.include? '#'
# If "Foo#Bar" does not exist then consider "Foo" with anchor.
@@ -20,8 +20,8 @@ module FoodsoftWiki
end
end
- section_link do |section|
- ""
+ section_link do |_section|
+ ''
end
def to_html(render_options = {})
@@ -41,7 +41,7 @@ module FoodsoftWiki
return { href: '#' + anchor } if page.empty?
permalink = Page.permalink(page)
- if Page.exists?(:permalink => permalink)
+ if Page.exists?(permalink: permalink)
{ href: url_for(:wiki_page_path, permalink: permalink, anchor: anchor) }
else
# Do not suggest to use number signs in the title.
diff --git a/script/rails b/script/rails
index bd79dce5..3c234a25 100755
--- a/script/rails
+++ b/script/rails
@@ -1,6 +1,6 @@
#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require File.expand_path('../../config/boot', __FILE__)
+APP_PATH = File.expand_path('../config/application', __dir__)
+require File.expand_path('../config/boot', __dir__)
require 'rails/commands'
diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb
index c5732bd9..525c27e4 100644
--- a/spec/controllers/home_controller_spec.rb
+++ b/spec/controllers/home_controller_spec.rb
@@ -2,8 +2,8 @@
require 'spec_helper'
-describe HomeController, type: :controller do
- let(:user) { create :user }
+describe HomeController do
+ let(:user) { create(:user) }
describe 'GET index' do
describe 'NOT logged in' do
@@ -45,7 +45,7 @@ describe HomeController, type: :controller do
end
describe 'with ordergroup user' do
- let(:og_user) { create :user, :ordergroup }
+ let(:og_user) { create(:user, :ordergroup) }
before { login og_user }
@@ -59,7 +59,7 @@ describe HomeController, type: :controller do
describe 'GET update_profile' do
describe 'with simple user' do
let(:unchanged_attributes) { user.attributes.slice('first_name', 'last_name', 'email') }
- let(:changed_attributes) { attributes_for :user }
+ let(:changed_attributes) { attributes_for(:user) }
let(:invalid_attributes) { { email: 'e.mail.com' } }
before { login user }
@@ -80,12 +80,13 @@ describe HomeController, type: :controller do
expect(response).to have_http_status(:redirect)
expect(response).to redirect_to(my_profile_path)
expect(flash[:notice]).to match(/#{I18n.t('home.changes_saved')}/)
- expect(user.reload.attributes.slice(:first_name, :last_name, :email)).to eq(changed_attributes.slice('first_name', 'last_name', 'email'))
+ expect(user.reload.attributes.slice(:first_name, :last_name,
+ :email)).to eq(changed_attributes.slice('first_name', 'last_name', 'email'))
end
end
describe 'with ordergroup user' do
- let(:og_user) { create :user, :ordergroup }
+ let(:og_user) { create(:user, :ordergroup) }
let(:unchanged_attributes) { og_user.attributes.slice('first_name', 'last_name', 'email') }
let(:changed_attributes) { unchanged_attributes.merge({ ordergroup: { contact_address: 'new Adress 7' } }) }
@@ -112,7 +113,7 @@ describe HomeController, type: :controller do
end
describe 'with ordergroup user' do
- let(:og_user) { create :user, :ordergroup }
+ let(:og_user) { create(:user, :ordergroup) }
before { login og_user }
@@ -132,13 +133,13 @@ describe HomeController, type: :controller do
get_with_defaults :cancel_membership
end.to raise_error(ActiveRecord::RecordNotFound)
expect do
- get_with_defaults :cancel_membership, params: { membership_id: 424242 }
+ get_with_defaults :cancel_membership, params: { membership_id: 424_242 }
end.to raise_error(ActiveRecord::RecordNotFound)
end
end
describe 'with ordergroup user' do
- let(:fin_user) { create :user, :role_finance }
+ let(:fin_user) { create(:user, :role_finance) }
before { login fin_user }
diff --git a/spec/factories/delivery.rb b/spec/factories/delivery.rb
index 5d27d870..e3b37d0a 100644
--- a/spec/factories/delivery.rb
+++ b/spec/factories/delivery.rb
@@ -2,7 +2,7 @@ require 'factory_bot'
FactoryBot.define do
factory :delivery do
- supplier { create :supplier }
+ supplier { create(:supplier) }
date { Time.now }
end
end
diff --git a/spec/factories/group_order.rb b/spec/factories/group_order.rb
index f7e910df..d62172ea 100644
--- a/spec/factories/group_order.rb
+++ b/spec/factories/group_order.rb
@@ -4,6 +4,6 @@ FactoryBot.define do
# requires order
factory :group_order do
ordergroup { create(:user, groups: [FactoryBot.create(:ordergroup)]).ordergroup }
- updated_by { create :user }
+ updated_by { create(:user) }
end
end
diff --git a/spec/factories/invoice.rb b/spec/factories/invoice.rb
index b3e65a17..3564d977 100644
--- a/spec/factories/invoice.rb
+++ b/spec/factories/invoice.rb
@@ -3,9 +3,9 @@ require 'factory_bot'
FactoryBot.define do
factory :invoice do
supplier
- number { rand(1..99999) }
+ number { rand(1..99_999) }
amount { rand(0.1..26.0).round(2) }
- created_by { create :user }
+ created_by { create(:user) }
after :create do |invoice|
invoice.supplier.reload
diff --git a/spec/factories/order.rb b/spec/factories/order.rb
index 87febae2..970bd040 100644
--- a/spec/factories/order.rb
+++ b/spec/factories/order.rb
@@ -3,10 +3,10 @@ require 'factory_bot'
FactoryBot.define do
factory :order do
starts { Time.now }
- supplier { create :supplier, article_count: (article_count.nil? ? true : article_count) }
+ supplier { create(:supplier, article_count: (article_count.nil? ? true : article_count)) }
article_ids { supplier.articles.map(&:id) unless supplier.nil? }
- created_by { create :user }
- updated_by { create :user }
+ created_by { create(:user) }
+ updated_by { create(:user) }
transient do
article_count { true }
diff --git a/spec/factories/supplier.rb b/spec/factories/supplier.rb
index 67ba3528..ef592a60 100644
--- a/spec/factories/supplier.rb
+++ b/spec/factories/supplier.rb
@@ -10,8 +10,8 @@ FactoryBot.define do
article_count { 0 }
end
- before :create do |supplier, evaluator|
- next if supplier.class == SharedSupplier
+ before :create do |supplier, _evaluator|
+ next if supplier.instance_of?(SharedSupplier)
next if supplier.supplier_category_id?
supplier.supplier_category = create :supplier_category
@@ -20,7 +20,7 @@ FactoryBot.define do
after :create do |supplier, evaluator|
article_count = evaluator.article_count
article_count = rand(1..99) if article_count == true
- create_list :article, article_count, supplier: supplier
+ create_list(:article, article_count, supplier: supplier)
end
factory :shared_supplier, class: 'SharedSupplier'
diff --git a/spec/factories/user.rb b/spec/factories/user.rb
index a6067e6b..9563c15c 100644
--- a/spec/factories/user.rb
+++ b/spec/factories/user.rb
@@ -10,21 +10,21 @@ FactoryBot.define do
factory :admin do
sequence(:nick) { |n| "admin#{n}" }
first_name { 'Administrator' }
- after :create do |user, evaluator|
- create :workgroup, role_admin: true, user_ids: [user.id]
+ after :create do |user, _evaluator|
+ create(:workgroup, role_admin: true, user_ids: [user.id])
end
end
trait :ordergroup do
- after :create do |user, evaluator|
- create :ordergroup, user_ids: [user.id]
+ after :create do |user, _evaluator|
+ create(:ordergroup, user_ids: [user.id])
end
end
- [:ordergroup, :finance, :invoices, :article_meta, :suppliers, :pickups, :orders].each do |role|
+ %i[ordergroup finance invoices article_meta suppliers pickups orders].each do |role|
trait "role_#{role}".to_sym do
- after :create do |user, evaluator|
- create :workgroup, "role_#{role}" => true, user_ids: [user.id]
+ after :create do |user, _evaluator|
+ create(:workgroup, "role_#{role}" => true, user_ids: [user.id])
end
end
end
@@ -37,7 +37,7 @@ FactoryBot.define do
type { 'Workgroup' }
end
- factory :ordergroup, class: "Ordergroup" do
+ factory :ordergroup, class: 'Ordergroup' do
type { 'Ordergroup' }
sequence(:name) { |n| "Order group ##{n}" }
# workaround to avoid needing to save the ordergroup
diff --git a/spec/integration/articles_spec.rb b/spec/integration/articles_spec.rb
index bbd5e375..bddd80d6 100644
--- a/spec/integration/articles_spec.rb
+++ b/spec/integration/articles_spec.rb
@@ -1,9 +1,9 @@
require_relative '../spec_helper'
feature ArticlesController do
- let(:user) { create :user, groups: [create(:workgroup, role_article_meta: true)] }
- let(:supplier) { create :supplier }
- let!(:article_category) { create :article_category }
+ let(:user) { create(:user, groups: [create(:workgroup, role_article_meta: true)]) }
+ let(:supplier) { create(:supplier) }
+ let!(:article_category) { create(:article_category) }
before { login user }
@@ -18,15 +18,15 @@ feature ArticlesController do
it 'can create a new article' do
click_on I18n.t('articles.index.new')
expect(page).to have_selector('form#new_article')
- article = build :article, supplier: supplier, article_category: article_category
+ article = build(:article, supplier: supplier, article_category: article_category)
within('#new_article') do
- fill_in 'article_name', :with => article.name
- fill_in 'article_unit', :with => article.unit
- select article.article_category.name, :from => 'article_article_category_id'
- fill_in 'article_price', :with => article.price
- fill_in 'article_unit_quantity', :with => article.unit_quantity
- fill_in 'article_tax', :with => article.tax
- fill_in 'article_deposit', :with => article.deposit
+ fill_in 'article_name', with: article.name
+ fill_in 'article_unit', with: article.unit
+ select article.article_category.name, from: 'article_article_category_id'
+ fill_in 'article_price', with: article.price
+ fill_in 'article_unit_quantity', with: article.unit_quantity
+ fill_in 'article_tax', with: article.tax
+ fill_in 'article_deposit', with: article.deposit
# "Element cannot be scrolled into view" error, js as workaround
# find('input[type="submit"]').click
page.execute_script('$("form#new_article").submit();')
@@ -50,22 +50,22 @@ feature ArticlesController do
it do
find('input[type="submit"]').click
- expect(find("tr:nth-child(1) #new_articles__note").value).to eq "bio â—Ž"
- expect(find("tr:nth-child(2) #new_articles__name").value).to eq "Pijnboompitten"
+ expect(find('tr:nth-child(1) #new_articles__note').value).to eq 'bio â—Ž'
+ expect(find('tr:nth-child(2) #new_articles__name').value).to eq 'Pijnboompitten'
4.times do |i|
all("tr:nth-child(#{i + 1}) select > option")[1].select_option
end
find('input[type="submit"]').click
- expect(page).to have_content("Pijnboompitten")
+ expect(page).to have_content('Pijnboompitten')
expect(supplier.articles.count).to eq 4
end
end
end
- describe "can update existing article" do
- let!(:article) { create :article, supplier: supplier, name: 'Foobar', order_number: 1, unit: '250 g' }
+ describe 'can update existing article' do
+ let!(:article) { create(:article, supplier: supplier, name: 'Foobar', order_number: 1, unit: '250 g') }
it do
find('input[type="submit"]').click
@@ -77,35 +77,35 @@ feature ArticlesController do
end
end
- describe "handles missing data" do
+ describe 'handles missing data' do
it do
find('input[type="submit"]').click # to overview
find('input[type="submit"]').click # missing category, re-show form
expect(find('tr.alert')).to be_present
expect(supplier.articles.count).to eq 0
- all("tr select > option")[1].select_option
+ all('tr select > option')[1].select_option
find('input[type="submit"]').click # now it should succeed
expect(supplier.articles.count).to eq 1
end
end
- describe "can remove an existing article" do
- let!(:article) { create :article, supplier: supplier, name: 'Foobar', order_number: 99999 }
+ describe 'can remove an existing article' do
+ let!(:article) { create(:article, supplier: supplier, name: 'Foobar', order_number: 99_999) }
it do
check('articles_outlist_absent')
find('input[type="submit"]').click
expect(find("#outlisted_articles_#{article.id}", visible: :all)).to be_present
- all("tr select > option")[1].select_option
+ all('tr select > option')[1].select_option
find('input[type="submit"]').click
expect(article.reload.deleted?).to be true
end
end
- describe "can convert units when updating" do
- let!(:article) { create :article, supplier: supplier, order_number: 1, unit: '250 g' }
+ describe 'can convert units when updating' do
+ let!(:article) { create(:article, supplier: supplier, order_number: 1, unit: '250 g') }
it do
check('articles_convert_units')
diff --git a/spec/integration/balancing_spec.rb b/spec/integration/balancing_spec.rb
index 556d102d..d8e58e6d 100644
--- a/spec/integration/balancing_spec.rb
+++ b/spec/integration/balancing_spec.rb
@@ -1,17 +1,17 @@
require_relative '../spec_helper'
feature 'settling an order', js: true do
- let(:ftt) { create :financial_transaction_type }
- let(:admin) { create :user, groups: [create(:workgroup, role_finance: true)] }
- let(:user) { create :user, groups: [create(:ordergroup)] }
- let(:supplier) { create :supplier }
- let(:article) { create :article, supplier: supplier, unit_quantity: 1 }
- let(:order) { create :order, supplier: supplier, article_ids: [article.id] } # need to ref article
- let(:go1) { create :group_order, order: order }
- let(:go2) { create :group_order, order: order }
+ let(:ftt) { create(:financial_transaction_type) }
+ let(:admin) { create(:user, groups: [create(:workgroup, role_finance: true)]) }
+ let(:user) { create(:user, groups: [create(:ordergroup)]) }
+ let(:supplier) { create(:supplier) }
+ let(:article) { create(:article, supplier: supplier, unit_quantity: 1) }
+ let(:order) { create(:order, supplier: supplier, article_ids: [article.id]) } # need to ref article
+ let(:go1) { create(:group_order, order: order) }
+ let(:go2) { create(:group_order, order: order) }
let(:oa) { order.order_articles.find_by_article_id(article.id) }
- let(:goa1) { create :group_order_article, group_order: go1, order_article: oa }
- let(:goa2) { create :group_order_article, group_order: go2, order_article: oa }
+ let(:goa1) { create(:group_order_article, group_order: go1, order_article: oa) }
+ let(:goa2) { create(:group_order_article, group_order: go2, order_article: oa) }
before do
goa1.update_quantities(3, 0)
@@ -22,6 +22,9 @@ feature 'settling an order', js: true do
goa2.reload
end
+ before { visit new_finance_order_path(order_id: order.id) }
+ before { login admin }
+
it 'has correct order result' do
expect(oa.quantity).to eq(4)
expect(oa.tolerance).to eq(0)
@@ -29,10 +32,6 @@ feature 'settling an order', js: true do
expect(goa2.result).to eq(1)
end
- before { login admin }
-
- before { visit new_finance_order_path(order_id: order.id) }
-
it 'has product ordered visible' do
expect(page).to have_content(article.name)
expect(page).to have_selector("#order_article_#{oa.id}")
@@ -59,7 +58,7 @@ feature 'settling an order', js: true do
click_link I18n.t('ui.delete')
end
end
- expect(page).to_not have_selector("#order_article_#{oa.id}")
+ expect(page).not_to have_selector("#order_article_#{oa.id}")
expect(OrderArticle.exists?(oa.id)).to be true
oa.reload
expect(oa.quantity).to eq(4)
@@ -77,7 +76,7 @@ feature 'settling an order', js: true do
click_link I18n.t('ui.delete')
end
end
- expect(page).to_not have_selector("#order_article_#{oa.id}")
+ expect(page).not_to have_selector("#order_article_#{oa.id}")
expect(OrderArticle.exists?(oa.id)).to be false
end
@@ -87,7 +86,7 @@ feature 'settling an order', js: true do
within("#group_order_article_#{goa1.id}") do
click_link I18n.t('ui.delete')
end
- expect(page).to_not have_selector("#group_order_article_#{goa1.id}")
+ expect(page).not_to have_selector("#group_order_article_#{goa1.id}")
expect(OrderArticle.exists?(oa.id)).to be true
expect(GroupOrderArticle.exists?(goa1.id)).to be true
goa1.reload
@@ -103,7 +102,7 @@ feature 'settling an order', js: true do
within("#group_order_article_#{goa1.id}") do
click_link I18n.t('ui.delete')
end
- expect(page).to_not have_selector("#group_order_article_#{goa1.id}")
+ expect(page).not_to have_selector("#group_order_article_#{goa1.id}")
expect(OrderArticle.exists?(oa.id)).to be true
expect(GroupOrderArticle.exists?(goa1.id)).to be false
end
@@ -134,15 +133,15 @@ feature 'settling an order', js: true do
end
expect(page).to have_selector('form#new_group_order_article')
within('#new_group_order_article') do
- select user.ordergroup.name, :from => 'group_order_article_ordergroup_id'
+ select user.ordergroup.name, from: 'group_order_article_ordergroup_id'
find_by_id('group_order_article_result').set(8)
sleep 0.25
find('input[type="submit"]').click
end
- expect(page).to_not have_selector('form#new_group_order_article')
+ expect(page).not_to have_selector('form#new_group_order_article')
expect(page).to have_content(user.ordergroup.name)
goa = GroupOrderArticle.last
- expect(goa).to_not be_nil
+ expect(goa).not_to be_nil
expect(goa.result).to eq 8
expect(page).to have_selector("#group_order_article_#{goa.id}")
expect(find("#r_#{goa.id}").value.to_f).to eq 8
@@ -169,8 +168,8 @@ feature 'settling an order', js: true do
end
it 'can add an article' do
- new_article = create :article, supplier: supplier
- expect(page).to_not have_content(new_article.name)
+ new_article = create(:article, supplier: supplier)
+ expect(page).not_to have_content(new_article.name)
click_link I18n.t('finance.balancing.edit_results_by_articles.add_article')
expect(page).to have_selector('form#new_order_article')
within('#new_order_article') do
@@ -178,8 +177,8 @@ feature 'settling an order', js: true do
sleep 0.25
find('input[type="submit"]').click
end
- expect(page).to_not have_selector('form#new_order_article')
+ expect(page).not_to have_selector('form#new_order_article')
expect(page).to have_content(new_article.name)
- expect(order.order_articles.where(article_id: new_article.id)).to_not be_nil
+ expect(order.order_articles.where(article_id: new_article.id)).not_to be_nil
end
end
diff --git a/spec/integration/config_spec.rb b/spec/integration/config_spec.rb
index 91f376dd..4f67802a 100644
--- a/spec/integration/config_spec.rb
+++ b/spec/integration/config_spec.rb
@@ -3,7 +3,7 @@ require_relative '../spec_helper'
feature 'admin/configs' do
let(:name) { Faker::Lorem.words(number: rand(2..4)).join(' ') }
let(:email) { Faker::Internet.email }
- let(:admin) { create :admin }
+ let(:admin) { create(:admin) }
before { login admin }
@@ -51,13 +51,13 @@ feature 'admin/configs' do
end
def compact_hash_deep!(h)
- h.each do |k, v|
+ h.each do |_k, v|
if v.is_a? Hash
compact_hash_deep!(v)
- v.reject! { |k, v| v.blank? }
+ v.compact_blank!
end
end
- h.reject! { |k, v| v.blank? }
+ h.compact_blank!
h
end
end
diff --git a/spec/integration/home_spec.rb b/spec/integration/home_spec.rb
index 313b9afe..87390bd9 100644
--- a/spec/integration/home_spec.rb
+++ b/spec/integration/home_spec.rb
@@ -1,7 +1,7 @@
require_relative '../spec_helper'
feature 'my profile page' do
- let(:user) { create :user }
+ let(:user) { create(:user) }
before { login user }
diff --git a/spec/integration/login_spec.rb b/spec/integration/login_spec.rb
index 49af6852..747d170f 100644
--- a/spec/integration/login_spec.rb
+++ b/spec/integration/login_spec.rb
@@ -1,7 +1,7 @@
require_relative '../spec_helper'
feature LoginController do
- let(:user) { create :user }
+ let(:user) { create(:user) }
describe 'forgot password' do
before { visit forgot_password_path }
@@ -36,7 +36,7 @@ feature LoginController do
it 'is not accessible' do
expect(page).to have_selector '.alert-error'
- expect(page).to_not have_selector 'input[type=password]'
+ expect(page).not_to have_selector 'input[type=password]'
end
end
diff --git a/spec/integration/order_spec.rb b/spec/integration/order_spec.rb
index dd768997..37b9e60a 100644
--- a/spec/integration/order_spec.rb
+++ b/spec/integration/order_spec.rb
@@ -1,12 +1,12 @@
require_relative '../spec_helper'
feature Order, js: true do
- let(:admin) { create :user, groups: [create(:workgroup, role_orders: true)] }
- let(:article) { create :article, unit_quantity: 1 }
- let(:order) { create :order, supplier: article.supplier, article_ids: [article.id] } # need to ref article
- let(:go1) { create :group_order, order: order }
+ let(:admin) { create(:user, groups: [create(:workgroup, role_orders: true)]) }
+ let(:article) { create(:article, unit_quantity: 1) }
+ let(:order) { create(:order, supplier: article.supplier, article_ids: [article.id]) } # need to ref article
+ let(:go1) { create(:group_order, order: order) }
let(:oa) { order.order_articles.find_by_article_id(article.id) }
- let(:goa1) { create :group_order_article, group_order: go1, order_article: oa }
+ let(:goa1) { create(:group_order_article, group_order: go1, order_article: oa) }
before { login admin }
diff --git a/spec/integration/product_distribution_example_spec.rb b/spec/integration/product_distribution_example_spec.rb
index e15642f1..2c1af327 100644
--- a/spec/integration/product_distribution_example_spec.rb
+++ b/spec/integration/product_distribution_example_spec.rb
@@ -1,12 +1,12 @@
require_relative '../spec_helper'
feature 'product distribution', js: true do
- let(:ftt) { create :financial_transaction_type }
- let(:admin) { create :admin }
- let(:user_a) { create :user, groups: [create(:ordergroup)] }
- let(:user_b) { create :user, groups: [create(:ordergroup)] }
- let(:supplier) { create :supplier }
- let(:article) { create :article, supplier: supplier, unit_quantity: 5 }
+ let(:ftt) { create(:financial_transaction_type) }
+ let(:admin) { create(:admin) }
+ let(:user_a) { create(:user, groups: [create(:ordergroup)]) }
+ let(:user_b) { create(:user, groups: [create(:ordergroup)]) }
+ let(:supplier) { create(:supplier) }
+ let(:article) { create(:article, supplier: supplier, unit_quantity: 5) }
let(:order) { create(:order, supplier: supplier, article_ids: [article.id]) }
let(:oa) { order.order_articles.first }
@@ -50,10 +50,10 @@ feature 'product distribution', js: true do
expect(oa.quantity).to eq(6)
expect(oa.tolerance).to eq(1)
# Gruppe a bekommt 3 einheiten.
- goa_a = oa.group_order_articles.joins(:group_order).where(:group_orders => { :ordergroup_id => user_a.ordergroup.id }).first
+ goa_a = oa.group_order_articles.joins(:group_order).where(group_orders: { ordergroup_id: user_a.ordergroup.id }).first
expect(goa_a.result).to eq(3)
# gruppe b bekommt 2 einheiten.
- goa_b = oa.group_order_articles.joins(:group_order).where(:group_orders => { :ordergroup_id => user_b.ordergroup.id }).first
+ goa_b = oa.group_order_articles.joins(:group_order).where(group_orders: { ordergroup_id: user_b.ordergroup.id }).first
expect(goa_b.result).to eq(2)
end
end
diff --git a/spec/integration/receive_spec.rb b/spec/integration/receive_spec.rb
index 3b65107e..6bf021e8 100644
--- a/spec/integration/receive_spec.rb
+++ b/spec/integration/receive_spec.rb
@@ -1,15 +1,15 @@
require_relative '../spec_helper'
feature 'receiving an order', js: true do
- let(:admin) { create :user, groups: [create(:workgroup, role_orders: true)] }
- let(:supplier) { create :supplier }
- let(:article) { create :article, supplier: supplier, unit_quantity: 3 }
- let(:order) { create :order, supplier: supplier, article_ids: [article.id] } # need to ref article
- let(:go1) { create :group_order, order: order }
- let(:go2) { create :group_order, order: order }
+ let(:admin) { create(:user, groups: [create(:workgroup, role_orders: true)]) }
+ let(:supplier) { create(:supplier) }
+ let(:article) { create(:article, supplier: supplier, unit_quantity: 3) }
+ let(:order) { create(:order, supplier: supplier, article_ids: [article.id]) } # need to ref article
+ let(:go1) { create(:group_order, order: order) }
+ let(:go2) { create(:group_order, order: order) }
let(:oa) { order.order_articles.find_by_article_id(article.id) }
- let(:goa1) { create :group_order_article, group_order: go1, order_article: oa }
- let(:goa2) { create :group_order_article, group_order: go2, order_article: oa }
+ let(:goa1) { create(:group_order_article, group_order: go1, order_article: oa) }
+ let(:goa2) { create(:group_order_article, group_order: go2, order_article: oa) }
# set quantities of group_order_articles
def set_quantities(q1, q2)
@@ -46,7 +46,7 @@ feature 'receiving an order', js: true do
it 'has product not ordered invisible' do
set_quantities [0, 0], [0, 0]
visit receive_order_path(id: order.id)
- expect(page).to_not have_selector("#order_article_#{oa.id}")
+ expect(page).not_to have_selector("#order_article_#{oa.id}")
end
it 'is not received by default' do
@@ -58,7 +58,7 @@ feature 'receiving an order', js: true do
it 'does not change anything when received is ordered' do
set_quantities [2, 0], [3, 2]
visit receive_order_path(id: order.id)
- fill_in "order_articles_#{oa.id}_units_received", :with => oa.units_to_order
+ fill_in "order_articles_#{oa.id}_units_received", with: oa.units_to_order
find('input[type="submit"]').click
expect(page).to have_selector('body')
check_quantities 2, 2, 4
@@ -67,7 +67,7 @@ feature 'receiving an order', js: true do
it 'redistributes properly when received is more' do
set_quantities [2, 0], [3, 2]
visit receive_order_path(id: order.id)
- fill_in "order_articles_#{oa.id}_units_received", :with => 3
+ fill_in "order_articles_#{oa.id}_units_received", with: 3
find('input[type="submit"]').click
expect(page).to have_selector('body')
check_quantities 3, 2, 5
@@ -76,7 +76,7 @@ feature 'receiving an order', js: true do
it 'redistributes properly when received is less' do
set_quantities [2, 0], [3, 2]
visit receive_order_path(id: order.id)
- fill_in "order_articles_#{oa.id}_units_received", :with => 1
+ fill_in "order_articles_#{oa.id}_units_received", with: 1
find('input[type="submit"]').click
expect(page).to have_selector('body')
check_quantities 1, 2, 1
diff --git a/spec/integration/session_spec.rb b/spec/integration/session_spec.rb
index 2571ccab..e264efcb 100644
--- a/spec/integration/session_spec.rb
+++ b/spec/integration/session_spec.rb
@@ -1,7 +1,7 @@
require_relative '../spec_helper'
feature 'the session' do
- let(:user) { create :user }
+ let(:user) { create(:user) }
describe 'login page' do
it 'is accessible' do
@@ -11,7 +11,7 @@ feature 'the session' do
it 'logs me in' do
login user
- expect(page).to_not have_selector('.alert-error')
+ expect(page).not_to have_selector('.alert-error')
end
it 'does not log me in with wrong password' do
@@ -21,10 +21,10 @@ feature 'the session' do
it 'can log me in using an email address' do
visit login_path
- fill_in 'nick', :with => user.email
- fill_in 'password', :with => user.password
+ fill_in 'nick', with: user.email
+ fill_in 'password', with: user.password
find('input[type=submit]').click
- expect(page).to_not have_selector('.alert-error')
+ expect(page).not_to have_selector('.alert-error')
end
end
end
diff --git a/spec/integration/supplier_spec.rb b/spec/integration/supplier_spec.rb
index 178892b8..5683d8da 100644
--- a/spec/integration/supplier_spec.rb
+++ b/spec/integration/supplier_spec.rb
@@ -1,20 +1,20 @@
require_relative '../spec_helper'
feature 'supplier' do
- let(:supplier) { create :supplier }
- let(:user) { create :user, :role_suppliers }
+ let(:supplier) { create(:supplier) }
+ let(:user) { create(:user, :role_suppliers) }
before { login user }
describe 'create new' do
it 'can be created' do
- create :supplier_category
+ create(:supplier_category)
visit new_supplier_path
- supplier = build :supplier
+ supplier = build(:supplier)
within('#new_supplier') do
- fill_in 'supplier_name', :with => supplier.name
- fill_in 'supplier_address', :with => supplier.address
- fill_in 'supplier_phone', :with => supplier.phone
+ fill_in 'supplier_name', with: supplier.name
+ fill_in 'supplier_address', with: supplier.address
+ fill_in 'supplier_phone', with: supplier.phone
find('input[type="submit"]').click
end
expect(page).to have_content(supplier.name)
@@ -38,7 +38,7 @@ feature 'supplier' do
end
it 'can be updated' do
- new_supplier = build :supplier
+ new_supplier = build(:supplier)
supplier
visit edit_supplier_path(id: supplier.id)
fill_in 'supplier_name', with: new_supplier.name
diff --git a/spec/lib/bank_account_information_importer_spec.rb b/spec/lib/bank_account_information_importer_spec.rb
index 40c3b1ea..cbe48fe2 100644
--- a/spec/lib/bank_account_information_importer_spec.rb
+++ b/spec/lib/bank_account_information_importer_spec.rb
@@ -1,7 +1,7 @@
require_relative '../spec_helper'
describe BankTransaction do
- let(:bank_account) { create :bank_account }
+ let(:bank_account) { create(:bank_account) }
it 'empty content' do
content = ''
@@ -188,7 +188,7 @@ describe BankTransaction do
expect(bt.date).to eq('2019-02-13'.to_date)
expect(bt.text).to eq('Deutsche Bundesbahn')
expect(bt.iban).to eq('DE72957284895783674747')
- expect(bt.reference).to eq("743574386368 Muenchen-Hamburg 27.03.2019")
+ expect(bt.reference).to eq('743574386368 Muenchen-Hamburg 27.03.2019')
expect(bt.receipt).to eq('Lastschrift')
end
@@ -277,7 +277,7 @@ describe BankTransaction do
expect(bt.date).to eq('2019-02-14'.to_date)
expect(bt.text).to eq('superbank AG')
expect(bt.iban).to be_nil
- expect(bt.reference).to eq("Ãœberweisung US, Wechselspesen u Provision")
+ expect(bt.reference).to eq('Ãœberweisung US, Wechselspesen u Provision')
expect(bt.receipt).to eq('Spesen/Gebühren')
end
@@ -384,7 +384,7 @@ describe BankTransaction do
expect(bank_account.last_transaction_date).to eq('2020-01-01'.to_date)
expect(bank_account.balance).to eq(22)
- bt1 = bank_account.bank_transactions.find_by_external_id("T1")
+ bt1 = bank_account.bank_transactions.find_by_external_id('T1')
expect(bt1.amount).to eq(11)
expect(bt1.date).to eq('2020-01-01'.to_date)
expect(bt1.text).to eq('DN1')
@@ -392,7 +392,7 @@ describe BankTransaction do
expect(bt1.reference).to eq('')
expect(bt1.receipt).to eq('AI1')
- bt2 = bank_account.bank_transactions.find_by_external_id("T2")
+ bt2 = bank_account.bank_transactions.find_by_external_id('T2')
expect(bt2.amount).to eq(-22)
expect(bt2.date).to eq('2010-02-01'.to_date)
expect(bt2.text).to eq('CN2')
@@ -400,7 +400,7 @@ describe BankTransaction do
expect(bt2.reference).to eq('RI2')
expect(bt2.receipt).to be_nil
- bt3 = bank_account.bank_transactions.find_by_external_id("T3")
+ bt3 = bank_account.bank_transactions.find_by_external_id('T3')
expect(bt3.amount).to eq(33)
expect(bt3.date).to eq('2000-03-01'.to_date)
expect(bt3.text).to eq('DN3')
diff --git a/spec/lib/bank_transaction_reference_spec.rb b/spec/lib/bank_transaction_reference_spec.rb
index a03e901b..de999906 100644
--- a/spec/lib/bank_transaction_reference_spec.rb
+++ b/spec/lib/bank_transaction_reference_spec.rb
@@ -34,62 +34,65 @@ describe BankTransactionReference do
end
it 'returns correct value for FS1A1' do
- expect(BankTransactionReference.parse('FS1A1')).to match({ group: 1, parts: { "A" => 1 } })
+ expect(BankTransactionReference.parse('FS1A1')).to match({ group: 1, parts: { 'A' => 1 } })
end
it 'returns correct value for FS1.2A3' do
- expect(BankTransactionReference.parse('FS1.2A3')).to match({ group: 1, user: 2, parts: { "A" => 3 } })
+ expect(BankTransactionReference.parse('FS1.2A3')).to match({ group: 1, user: 2, parts: { 'A' => 3 } })
end
it 'returns correct value for FS1A2B3C4' do
- expect(BankTransactionReference.parse('FS1A2B3C4')).to match({ group: 1, parts: { "A" => 2, "B" => 3, "C" => 4 } })
+ expect(BankTransactionReference.parse('FS1A2B3C4')).to match({ group: 1, parts: { 'A' => 2, 'B' => 3, 'C' => 4 } })
end
it 'returns correct value for FS1A2B3A4' do
- expect(BankTransactionReference.parse('FS1A2B3A4')).to match({ group: 1, parts: { "A" => 6, "B" => 3 } })
+ expect(BankTransactionReference.parse('FS1A2B3A4')).to match({ group: 1, parts: { 'A' => 6, 'B' => 3 } })
end
it 'returns correct value for FS1A2.34B5.67C8.90' do
- expect(BankTransactionReference.parse('FS1A2.34B5.67C8.90')).to match({ group: 1, parts: { "A" => 2.34, "B" => 5.67, "C" => 8.90 } })
+ expect(BankTransactionReference.parse('FS1A2.34B5.67C8.90')).to match({ group: 1,
+ parts: { 'A' => 2.34, 'B' => 5.67,
+ 'C' => 8.90 } })
end
it 'returns correct value for FS123A456 with comma-separated prefix' do
- expect(BankTransactionReference.parse('x,FS123A456')).to match({ group: 123, parts: { "A" => 456 } })
+ expect(BankTransactionReference.parse('x,FS123A456')).to match({ group: 123, parts: { 'A' => 456 } })
end
it 'returns correct value for FS123A456 with minus-separated prefix' do
- expect(BankTransactionReference.parse('x-FS123A456')).to match({ group: 123, parts: { "A" => 456 } })
+ expect(BankTransactionReference.parse('x-FS123A456')).to match({ group: 123, parts: { 'A' => 456 } })
end
it 'returns correct value for FS123A456 with semicolon-separated prefix' do
- expect(BankTransactionReference.parse('x;FS123A456')).to match({ group: 123, parts: { "A" => 456 } })
+ expect(BankTransactionReference.parse('x;FS123A456')).to match({ group: 123, parts: { 'A' => 456 } })
end
it 'returns correct value for FS123A456 with space-separated prefix' do
- expect(BankTransactionReference.parse('x FS123A456')).to match({ group: 123, parts: { "A" => 456 } })
+ expect(BankTransactionReference.parse('x FS123A456')).to match({ group: 123, parts: { 'A' => 456 } })
end
it 'returns correct value for FS234A567 with comma-separated suffix' do
- expect(BankTransactionReference.parse('FS234A567,x')).to match({ group: 234, parts: { "A" => 567 } })
+ expect(BankTransactionReference.parse('FS234A567,x')).to match({ group: 234, parts: { 'A' => 567 } })
end
it 'returns correct value for FS234A567 with minus-separated suffix' do
- expect(BankTransactionReference.parse('FS234A567-x')).to match({ group: 234, parts: { "A" => 567 } })
+ expect(BankTransactionReference.parse('FS234A567-x')).to match({ group: 234, parts: { 'A' => 567 } })
end
it 'returns correct value for FS234A567 with space-separated suffix' do
- expect(BankTransactionReference.parse('FS234A567 x')).to match({ group: 234, parts: { "A" => 567 } })
+ expect(BankTransactionReference.parse('FS234A567 x')).to match({ group: 234, parts: { 'A' => 567 } })
end
it 'returns correct value for FS234A567 with semicolon-separated suffix' do
- expect(BankTransactionReference.parse('FS234A567;x')).to match({ group: 234, parts: { "A" => 567 } })
+ expect(BankTransactionReference.parse('FS234A567;x')).to match({ group: 234, parts: { 'A' => 567 } })
end
it 'returns correct value for FS234A567 with minus-separated suffix' do
- expect(BankTransactionReference.parse('FS234A567-x')).to match({ group: 234, parts: { "A" => 567 } })
+ expect(BankTransactionReference.parse('FS234A567-x')).to match({ group: 234, parts: { 'A' => 567 } })
end
it 'returns correct value for FS34.56A67.89 with prefix and suffix' do
- expect(BankTransactionReference.parse('prefix FS34.56A67.89, suffix')).to match({ group: 34, user: 56, parts: { "A" => 67.89 } })
+ expect(BankTransactionReference.parse('prefix FS34.56A67.89, suffix')).to match({ group: 34, user: 56,
+ parts: { 'A' => 67.89 } })
end
end
diff --git a/spec/lib/foodsoft_mail_receiver_spec.rb b/spec/lib/foodsoft_mail_receiver_spec.rb
index 59eab47b..47ddb57d 100644
--- a/spec/lib/foodsoft_mail_receiver_spec.rb
+++ b/spec/lib/foodsoft_mail_receiver_spec.rb
@@ -6,55 +6,6 @@ describe FoodsoftMailReceiver do
@server.start
end
- it 'does not accept empty addresses' do
- begin
- FoodsoftMailReceiver.received('', 'body')
- rescue => error
- expect(error.to_s).to include 'missing'
- end
- end
-
- it 'does not accept invalid addresses' do
- begin
- FoodsoftMailReceiver.received('invalid', 'body')
- rescue => error
- expect(error.to_s).to include 'has an invalid format'
- end
- end
-
- it 'does not accept invalid scope in address' do
- begin
- FoodsoftMailReceiver.received('invalid.invalid', 'body')
- rescue => error
- expect(error.to_s).to include 'could not be found'
- end
- end
-
- it 'does not accept address without handler' do
- begin
- address = "#{FoodsoftConfig[:default_scope]}.invalid"
- FoodsoftMailReceiver.received(address, 'body')
- rescue => error
- expect(error.to_s).to include 'invalid format for recipient'
- end
- end
-
- it 'does not accept invalid addresses via SMTP' do
- expect {
- Net::SMTP.start(@server.hosts.first, @server.ports.first) do |smtp|
- smtp.send_message 'body', 'from@example.com', 'invalid'
- end
- }.to raise_error(Net::SMTPFatalError)
- end
-
- it 'does not accept invalid addresses via SMTP' do
- expect {
- Net::SMTP.start(@server.hosts.first, @server.ports.first) do |smtp|
- smtp.send_message 'body', 'from@example.com', 'invalid'
- end
- }.to raise_error(Net::SMTPFatalError)
- end
-
# TODO: Reanable this test.
# It raised "Mysql2::Error: Lock wait timeout exceeded" at time of writing.
# it 'accepts bounce mails via SMTP' do
@@ -74,4 +25,45 @@ describe FoodsoftMailReceiver do
after :all do
@server.shutdown
end
+
+ it 'does not accept empty addresses' do
+ FoodsoftMailReceiver.received('', 'body')
+ rescue StandardError => e
+ expect(e.to_s).to include 'missing'
+ end
+
+ it 'does not accept invalid addresses' do
+ FoodsoftMailReceiver.received('invalid', 'body')
+ rescue StandardError => e
+ expect(e.to_s).to include 'has an invalid format'
+ end
+
+ it 'does not accept invalid scope in address' do
+ FoodsoftMailReceiver.received('invalid.invalid', 'body')
+ rescue StandardError => e
+ expect(e.to_s).to include 'could not be found'
+ end
+
+ it 'does not accept address without handler' do
+ address = "#{FoodsoftConfig[:default_scope]}.invalid"
+ FoodsoftMailReceiver.received(address, 'body')
+ rescue StandardError => e
+ expect(e.to_s).to include 'invalid format for recipient'
+ end
+
+ it 'does not accept invalid addresses via SMTP' do
+ expect do
+ Net::SMTP.start(@server.hosts.first, @server.ports.first) do |smtp|
+ smtp.send_message 'body', 'from@example.com', 'invalid'
+ end
+ end.to raise_error(Net::SMTPFatalError)
+ end
+
+ it 'does not accept invalid addresses via SMTP' do
+ expect do
+ Net::SMTP.start(@server.hosts.first, @server.ports.first) do |smtp|
+ smtp.send_message 'body', 'from@example.com', 'invalid'
+ end
+ end.to raise_error(Net::SMTPFatalError)
+ end
end
diff --git a/spec/lib/token_verifier_spec.rb b/spec/lib/token_verifier_spec.rb
index d4a7e5ea..3097e888 100644
--- a/spec/lib/token_verifier_spec.rb
+++ b/spec/lib/token_verifier_spec.rb
@@ -6,12 +6,12 @@ describe TokenVerifier do
let(:msg) { v.generate }
it 'validates' do
- expect { v.verify(msg) }.to_not raise_error
+ expect { v.verify(msg) }.not_to raise_error
end
it 'validates when recreated' do
v2 = TokenVerifier.new(prefix)
- expect { v2.verify(msg) }.to_not raise_error
+ expect { v2.verify(msg) }.not_to raise_error
end
it 'does not validate with a different prefix' do
@@ -32,7 +32,9 @@ describe TokenVerifier do
end
it 'does not validate a random string' do
- expect { v.verify(Faker::Lorem.characters(number: 100)) }.to raise_error(ActiveSupport::MessageVerifier::InvalidSignature)
+ expect do
+ v.verify(Faker::Lorem.characters(number: 100))
+ end.to raise_error(ActiveSupport::MessageVerifier::InvalidSignature)
end
it 'returns the message' do
diff --git a/spec/models/article_spec.rb b/spec/models/article_spec.rb
index 519f5b64..f104c101 100644
--- a/spec/models/article_spec.rb
+++ b/spec/models/article_spec.rb
@@ -1,11 +1,11 @@
require_relative '../spec_helper'
describe Article do
- let(:supplier) { create :supplier }
- let(:article) { create :article, supplier: supplier }
+ let(:supplier) { create(:supplier) }
+ let(:article) { create(:article, supplier: supplier) }
it 'has a unique name' do
- article2 = build :article, supplier: supplier, name: article.name
+ article2 = build(:article, supplier: supplier, name: article.name)
expect(article2).to be_invalid
end
@@ -21,21 +21,21 @@ describe Article do
end
it 'returns false when invalid unit' do
- article1 = build :article, supplier: supplier, unit: 'invalid'
+ article1 = build(:article, supplier: supplier, unit: 'invalid')
expect(article.convert_units(article1)).to be false
end
it 'converts from ST to KI (german foodcoops legacy)' do
- article1 = build :article, supplier: supplier, unit: 'ST'
- article2 = build :article, supplier: supplier, name: 'banana 10-12 St', price: 12.34, unit: 'KI'
+ article1 = build(:article, supplier: supplier, unit: 'ST')
+ article2 = build(:article, supplier: supplier, name: 'banana 10-12 St', price: 12.34, unit: 'KI')
new_price, new_unit_quantity = article1.convert_units(article2)
expect(new_unit_quantity).to eq 10
expect(new_price).to eq 1.23
end
it 'converts from g to kg' do
- article1 = build :article, supplier: supplier, unit: 'kg'
- article2 = build :article, supplier: supplier, unit: 'g', price: 0.12, unit_quantity: 1500
+ article1 = build(:article, supplier: supplier, unit: 'kg')
+ article2 = build(:article, supplier: supplier, unit: 'g', price: 0.12, unit_quantity: 1500)
new_price, new_unit_quantity = article1.convert_units(article2)
expect(new_unit_quantity).to eq 1.5
expect(new_price).to eq 120
@@ -43,7 +43,7 @@ describe Article do
end
it 'computes changed article attributes' do
- article2 = build :article, supplier: supplier, name: 'banana'
+ article2 = build(:article, supplier: supplier, name: 'banana')
expect(article.unequal_attributes(article2)[:name]).to eq 'banana'
end
@@ -83,7 +83,7 @@ describe Article do
end
it 'is knows its open order' do
- order = create :order, supplier: supplier, article_ids: [article.id]
+ order = create(:order, supplier: supplier, article_ids: [article.id])
expect(article.in_open_order).to eq(order)
end
@@ -91,26 +91,26 @@ describe Article do
expect(article.shared_article).to be_nil
end
- describe 'connected to a shared database', :type => :feature do
- let(:shared_article) { create :shared_article }
- let(:supplier) { create :supplier, shared_supplier_id: shared_article.supplier_id }
- let(:article) { create :article, supplier: supplier, order_number: shared_article.order_number }
+ describe 'connected to a shared database', type: :feature do
+ let(:shared_article) { create(:shared_article) }
+ let(:supplier) { create(:supplier, shared_supplier_id: shared_article.supplier_id) }
+ let(:article) { create(:article, supplier: supplier, order_number: shared_article.order_number) }
it 'can be found in the shared database' do
- expect(article.shared_article).to_not be_nil
+ expect(article.shared_article).not_to be_nil
end
it 'can find updates' do
changed = article.shared_article_changed?
- expect(changed).to_not be_falsey
+ expect(changed).not_to be_falsey
expect(changed.length).to be > 1
end
it 'can be synchronised' do
- # TODO move article sync from supplier to article
+ # TODO: move article sync from supplier to article
article # need to reference for it to exist when syncing
updated_article = supplier.sync_all[0].select { |s| s[0].id == article.id }.first[0]
- article.update(updated_article.attributes.reject { |k, v| k == 'id' or k == 'type' })
+ article.update(updated_article.attributes.reject { |k, _v| %w[id type].include?(k) })
expect(article.name).to eq(shared_article.name)
# now synchronising shouldn't change anything anymore
expect(article.shared_article_changed?).to be_falsey
@@ -131,9 +131,9 @@ describe Article do
article.unit = '200g'
article.shared_updated_on -= 1 # to make update do something
article.save!
- # TODO get sync functionality in article
+ # TODO: get sync functionality in article
updated_article = supplier.sync_all[0].select { |s| s[0].id == article.id }.first[0]
- article.update!(updated_article.attributes.reject { |k, v| k == 'id' or k == 'type' })
+ article.update!(updated_article.attributes.reject { |k, _v| %w[id type].include?(k) })
expect(article.unit).to eq '200g'
expect(article.unit_quantity).to eq 5
expect(article.price).to be_within(0.005).of(shared_article.price / 5)
diff --git a/spec/models/bank_transaction_spec.rb b/spec/models/bank_transaction_spec.rb
index 21d6185e..14172676 100644
--- a/spec/models/bank_transaction_spec.rb
+++ b/spec/models/bank_transaction_spec.rb
@@ -1,24 +1,32 @@
require_relative '../spec_helper'
describe BankTransaction do
- let(:bank_account) { create :bank_account }
- let(:ordergroup) { create :ordergroup }
- let(:supplier) { create :supplier, iban: Faker::Bank.iban }
- let!(:user) { create :user, groups: [ordergroup] }
- let!(:ftt_a) { create :financial_transaction_type, name_short: 'A' }
- let!(:ftt_b) { create :financial_transaction_type, name_short: 'B' }
+ let(:bank_account) { create(:bank_account) }
+ let(:ordergroup) { create(:ordergroup) }
+ let(:supplier) { create(:supplier, iban: Faker::Bank.iban) }
+ let!(:user) { create(:user, groups: [ordergroup]) }
+ let!(:ftt_a) { create(:financial_transaction_type, name_short: 'A') }
+ let!(:ftt_b) { create(:financial_transaction_type, name_short: 'B') }
describe 'supplier' do
- let!(:invoice1) { create :invoice, supplier: supplier, number: '11', amount: 10 }
- let!(:invoice2) { create :invoice, supplier: supplier, number: '22', amount: 20 }
- let!(:invoice3) { create :invoice, supplier: supplier, number: '33', amount: 30 }
- let!(:invoice4) { create :invoice, supplier: supplier, number: '44', amount: 40 }
- let!(:invoice5) { create :invoice, supplier: supplier, number: '55', amount: 50 }
+ let!(:invoice1) { create(:invoice, supplier: supplier, number: '11', amount: 10) }
+ let!(:invoice2) { create(:invoice, supplier: supplier, number: '22', amount: 20) }
+ let!(:invoice3) { create(:invoice, supplier: supplier, number: '33', amount: 30) }
+ let!(:invoice4) { create(:invoice, supplier: supplier, number: '44', amount: 40) }
+ let!(:invoice5) { create(:invoice, supplier: supplier, number: '55', amount: 50) }
- let!(:bank_transaction1) { create :bank_transaction, bank_account: bank_account, iban: supplier.iban, reference: '11', amount: 10 }
- let!(:bank_transaction2) { create :bank_transaction, bank_account: bank_account, iban: supplier.iban, reference: '22', amount: -20 }
- let!(:bank_transaction3) { create :bank_transaction, bank_account: bank_account, iban: supplier.iban, reference: '33,44', amount: -70 }
- let!(:bank_transaction4) { create :bank_transaction, bank_account: bank_account, iban: supplier.iban, text: '55', amount: -50 }
+ let!(:bank_transaction1) do
+ create(:bank_transaction, bank_account: bank_account, iban: supplier.iban, reference: '11', amount: 10)
+ end
+ let!(:bank_transaction2) do
+ create(:bank_transaction, bank_account: bank_account, iban: supplier.iban, reference: '22', amount: -20)
+ end
+ let!(:bank_transaction3) do
+ create(:bank_transaction, bank_account: bank_account, iban: supplier.iban, reference: '33,44', amount: -70)
+ end
+ let!(:bank_transaction4) do
+ create(:bank_transaction, bank_account: bank_account, iban: supplier.iban, text: '55', amount: -50)
+ end
it 'ignores invoices with invalid amount' do
expect(bank_transaction1.assign_to_invoice).to be false
@@ -49,14 +57,26 @@ describe BankTransaction do
end
describe 'ordergroup' do
- let!(:bank_transaction1) { create :bank_transaction, bank_account: bank_account, reference: "invalid", amount: 10 }
- let!(:bank_transaction2) { create :bank_transaction, bank_account: bank_account, reference: "FS99A10", amount: 10 }
- let!(:bank_transaction3) { create :bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}.99A10", amount: 10 }
- let!(:bank_transaction4) { create :bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}A10", amount: 99 }
- let!(:bank_transaction5) { create :bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}A10", amount: 10 }
- let!(:bank_transaction6) { create :bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}A10B20", amount: 30 }
- let!(:bank_transaction7) { create :bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}.#{user.id}A10", amount: 10 }
- let!(:bank_transaction8) { create :bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}X10", amount: 10 }
+ let!(:bank_transaction1) { create(:bank_transaction, bank_account: bank_account, reference: 'invalid', amount: 10) }
+ let!(:bank_transaction2) { create(:bank_transaction, bank_account: bank_account, reference: 'FS99A10', amount: 10) }
+ let!(:bank_transaction3) do
+ create(:bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}.99A10", amount: 10)
+ end
+ let!(:bank_transaction4) do
+ create(:bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}A10", amount: 99)
+ end
+ let!(:bank_transaction5) do
+ create(:bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}A10", amount: 10)
+ end
+ let!(:bank_transaction6) do
+ create(:bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}A10B20", amount: 30)
+ end
+ let!(:bank_transaction7) do
+ create(:bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}.#{user.id}A10", amount: 10)
+ end
+ let!(:bank_transaction8) do
+ create(:bank_transaction, bank_account: bank_account, reference: "FS#{ordergroup.id}X10", amount: 10)
+ end
it 'ignores transaction with invalid reference' do
expect(bank_transaction1.assign_to_ordergroup).to be_nil
diff --git a/spec/models/delivery_spec.rb b/spec/models/delivery_spec.rb
index b48449ab..80f4c2ed 100644
--- a/spec/models/delivery_spec.rb
+++ b/spec/models/delivery_spec.rb
@@ -1,8 +1,8 @@
require_relative '../spec_helper'
describe Delivery do
- let(:delivery) { create :delivery }
- let(:stock_article) { create :stock_article, price: 3 }
+ let(:delivery) { create(:delivery) }
+ let(:stock_article) { create(:stock_article, price: 3) }
it 'creates new stock_changes' do
delivery.new_stock_changes = ([
diff --git a/spec/models/group_order_article_spec.rb b/spec/models/group_order_article_spec.rb
index 42178a6c..434f9a29 100644
--- a/spec/models/group_order_article_spec.rb
+++ b/spec/models/group_order_article_spec.rb
@@ -1,10 +1,10 @@
require_relative '../spec_helper'
describe GroupOrderArticle do
- let(:user) { create :user, groups: [create(:ordergroup)] }
+ let(:user) { create(:user, groups: [create(:ordergroup)]) }
let(:order) { create(:order) }
- let(:go) { create :group_order, order: order, ordergroup: user.ordergroup }
- let(:goa) { create :group_order_article, group_order: go, order_article: order.order_articles.first }
+ let(:go) { create(:group_order, order: order, ordergroup: user.ordergroup) }
+ let(:goa) { create(:group_order_article, group_order: go, order_article: order.order_articles.first) }
it 'has zero quantity by default' do expect(goa.quantity).to eq(0) end
it 'has zero tolerance by default' do expect(goa.tolerance).to eq(0) end
@@ -12,9 +12,9 @@ describe GroupOrderArticle do
it 'has zero total price by default' do expect(goa.total_price).to eq(0) end
describe do
- let(:article) { create :article, supplier: order.supplier, unit_quantity: 1 }
- let(:oa) { order.order_articles.create(:article => article) }
- let(:goa) { create :group_order_article, group_order: go, order_article: oa }
+ let(:article) { create(:article, supplier: order.supplier, unit_quantity: 1) }
+ let(:oa) { order.order_articles.create(article: article) }
+ let(:goa) { create(:group_order_article, group_order: go, order_article: oa) }
it 'can be ordered by piece' do
goa.update_quantities(1, 0)
@@ -23,7 +23,8 @@ describe GroupOrderArticle do
end
it 'can be ordered in larger amounts' do
- quantity, tolerance = rand(13..99), rand(0..99)
+ quantity = rand(13..99)
+ tolerance = rand(0..99)
goa.update_quantities(quantity, tolerance)
expect(goa.quantity).to eq(quantity)
expect(goa.tolerance).to eq(tolerance)
@@ -52,10 +53,10 @@ describe GroupOrderArticle do
end
describe 'distribution strategy' do
- let(:article) { create :article, supplier: order.supplier, unit_quantity: 1 }
- let(:oa) { order.order_articles.create(:article => article) }
- let(:goa) { create :group_order_article, group_order: go, order_article: oa }
- let!(:goaq) { create :group_order_article_quantity, group_order_article: goa, quantity: 4, tolerance: 6 }
+ let(:article) { create(:article, supplier: order.supplier, unit_quantity: 1) }
+ let(:oa) { order.order_articles.create(article: article) }
+ let(:goa) { create(:group_order_article, group_order: go, order_article: oa) }
+ let!(:goaq) { create(:group_order_article_quantity, group_order_article: goa, quantity: 4, tolerance: 6) }
it 'can calculate the result for the distribution strategy "first order first serve"' do
res = goa.calculate_result(2)
diff --git a/spec/models/group_order_spec.rb b/spec/models/group_order_spec.rb
index a2b8a2c5..648fa100 100644
--- a/spec/models/group_order_spec.rb
+++ b/spec/models/group_order_spec.rb
@@ -1,8 +1,8 @@
require_relative '../spec_helper'
describe GroupOrder do
- let(:user) { create :user, groups: [create(:ordergroup)] }
- let(:order) { create :order }
+ let(:user) { create(:user, groups: [create(:ordergroup)]) }
+ let(:order) { create(:order) }
# the following two tests are currently disabled - https://github.com/foodcoops/foodsoft/issues/158
@@ -15,7 +15,7 @@ describe GroupOrder do
# end
describe do
- let(:go) { create :group_order, order: order, ordergroup: user.ordergroup }
+ let(:go) { create(:group_order, order: order, ordergroup: user.ordergroup) }
it 'has zero price initially' do
expect(go.price).to eq(0)
diff --git a/spec/models/order_article_spec.rb b/spec/models/order_article_spec.rb
index 829678a9..cef0e09c 100644
--- a/spec/models/order_article_spec.rb
+++ b/spec/models/order_article_spec.rb
@@ -1,14 +1,14 @@
require 'spec_helper'
describe OrderArticle do
- let(:order) { create :order, article_count: 1 }
+ let(:order) { create(:order, article_count: 1) }
let(:oa) { order.order_articles.first }
it 'is not ordered by default' do
expect(OrderArticle.ordered.count).to eq 0
end
- [:units_to_order, :units_billed, :units_received].each do |units|
+ %i[units_to_order units_billed units_received].each do |units|
it "is ordered when there are #{units.to_s.gsub '_', ' '}" do
oa.update_attribute units, rand(1..99)
expect(OrderArticle.ordered.count).to eq 1
@@ -46,15 +46,15 @@ describe OrderArticle do
end
describe 'redistribution' do
- let(:admin) { create :user, groups: [create(:workgroup, role_finance: true)] }
- let(:article) { create :article, unit_quantity: 3 }
- let(:order) { create :order, article_ids: [article.id] }
- let(:go1) { create :group_order, order: order }
- let(:go2) { create :group_order, order: order }
- let(:go3) { create :group_order, order: order }
- let(:goa1) { create :group_order_article, group_order: go1, order_article: oa }
- let(:goa2) { create :group_order_article, group_order: go2, order_article: oa }
- let(:goa3) { create :group_order_article, group_order: go3, order_article: oa }
+ let(:admin) { create(:user, groups: [create(:workgroup, role_finance: true)]) }
+ let(:article) { create(:article, unit_quantity: 3) }
+ let(:order) { create(:order, article_ids: [article.id]) }
+ let(:go1) { create(:group_order, order: order) }
+ let(:go2) { create(:group_order, order: order) }
+ let(:go3) { create(:group_order, order: order) }
+ let(:goa1) { create(:group_order_article, group_order: go1, order_article: oa) }
+ let(:goa2) { create(:group_order_article, group_order: go2, order_article: oa) }
+ let(:goa3) { create(:group_order_article, group_order: go3, order_article: oa) }
# set quantities of group_order_articles
def set_quantities(q1, q2, q3)
@@ -79,21 +79,21 @@ describe OrderArticle do
it 'does nothing when nothing has changed' do
set_quantities [3, 2], [1, 3], [1, 0]
- expect(oa.redistribute 6, [:tolerance, nil]).to eq [1, 0]
+ expect(oa.redistribute(6, [:tolerance, nil])).to eq [1, 0]
goa_reload
expect([goa1, goa2, goa3].map(&:result).map(&:to_i)).to eq [4, 1, 1]
end
it 'works when there is nothing to distribute' do
set_quantities [3, 2], [1, 3], [1, 0]
- expect(oa.redistribute 0, [:tolerance, nil]).to eq [0, 0]
+ expect(oa.redistribute(0, [:tolerance, nil])).to eq [0, 0]
goa_reload
expect([goa1, goa2, goa3].map(&:result)).to eq [0, 0, 0]
end
it 'works when quantity needs to be reduced' do
set_quantities [3, 2], [1, 3], [1, 0]
- expect(oa.redistribute 4, [:tolerance, nil]).to eq [0, 0]
+ expect(oa.redistribute(4, [:tolerance, nil])).to eq [0, 0]
goa_reload
expect([goa1, goa2, goa3].map(&:result)).to eq [3, 1, 0]
end
@@ -101,28 +101,28 @@ describe OrderArticle do
it 'works when quantity is increased within quantity' do
set_quantities [3, 0], [2, 0], [2, 0]
expect([goa1, goa2, goa3].map(&:result)).to eq [3, 2, 1]
- expect(oa.redistribute 7, [:tolerance, nil]).to eq [0, 0]
+ expect(oa.redistribute(7, [:tolerance, nil])).to eq [0, 0]
goa_reload
expect([goa1, goa2, goa3].map(&:result).map(&:to_i)).to eq [3, 2, 2]
end
it 'works when there is just one for the first' do
set_quantities [3, 2], [1, 3], [1, 0]
- expect(oa.redistribute 1, [:tolerance, nil]).to eq [0, 0]
+ expect(oa.redistribute(1, [:tolerance, nil])).to eq [0, 0]
goa_reload
expect([goa1, goa2, goa3].map(&:result)).to eq [1, 0, 0]
end
it 'works when there is tolerance and left-over' do
set_quantities [3, 2], [1, 1], [1, 0]
- expect(oa.redistribute 10, [:tolerance, nil]).to eq [3, 2]
+ expect(oa.redistribute(10, [:tolerance, nil])).to eq [3, 2]
goa_reload
expect([goa1, goa2, goa3].map(&:result)).to eq [5, 2, 1]
end
it 'works when redistributing without tolerance' do
set_quantities [3, 2], [1, 3], [1, 0]
- expect(oa.redistribute 8, [nil]).to eq [3]
+ expect(oa.redistribute(8, [nil])).to eq [3]
goa_reload
expect([goa1, goa2, goa3].map(&:result)).to eq [3, 1, 1]
end
@@ -131,17 +131,18 @@ describe OrderArticle do
describe 'boxfill' do
before { FoodsoftConfig[:use_boxfill] = true }
- let(:article) { create :article, unit_quantity: 6 }
- let(:order) { create :order, article_ids: [article.id], starts: 1.week.ago }
+ let(:article) { create(:article, unit_quantity: 6) }
+ let(:order) { create(:order, article_ids: [article.id], starts: 1.week.ago) }
let(:oa) { order.order_articles.first }
- let(:go) { create :group_order, order: order }
- let(:goa) { create :group_order_article, group_order: go, order_article: oa }
+ let(:go) { create(:group_order, order: order) }
+ let(:goa) { create(:group_order_article, group_order: go, order_article: oa) }
- shared_examples "boxfill" do |success, q|
+ shared_examples 'boxfill' do |success, q|
# initial situation
before do
goa.update_quantities(*q.keys[0])
- oa.update_results!; oa.reload
+ oa.update_results!
+ oa.reload
end
# check starting condition
@@ -172,11 +173,11 @@ describe OrderArticle do
let(:boxfill_from) { 1.hour.from_now }
context 'decreasing the missing units' do
- include_examples "boxfill", true, [6, 0] => [5, 0], [6, 0, 0] => [5, 0, 1]
+ include_examples 'boxfill', true, [6, 0] => [5, 0], [6, 0, 0] => [5, 0, 1]
end
context 'decreasing the tolerance' do
- include_examples "boxfill", true, [1, 2] => [1, 1], [1, 2, 3] => [1, 1, 4]
+ include_examples 'boxfill', true, [1, 2] => [1, 1], [1, 2, 3] => [1, 1, 4]
end
end
@@ -184,27 +185,27 @@ describe OrderArticle do
let(:boxfill_from) { 1.second.ago }
context 'changing nothing in particular' do
- include_examples "boxfill", true, [4, 1] => [4, 1], [4, 1, 1] => [4, 1, 1]
+ include_examples 'boxfill', true, [4, 1] => [4, 1], [4, 1, 1] => [4, 1, 1]
end
context 'increasing missing units' do
- include_examples "boxfill", false, [3, 0] => [2, 0], [3, 0, 3] => [3, 0, 3]
+ include_examples 'boxfill', false, [3, 0] => [2, 0], [3, 0, 3] => [3, 0, 3]
end
context 'increasing tolerance' do
- include_examples "boxfill", true, [2, 1] => [2, 2], [2, 1, 3] => [2, 2, 2]
+ include_examples 'boxfill', true, [2, 1] => [2, 2], [2, 1, 3] => [2, 2, 2]
end
context 'decreasing quantity to fix missing units' do
- include_examples "boxfill", true, [7, 0] => [6, 0], [7, 0, 5] => [6, 0, 0]
+ include_examples 'boxfill', true, [7, 0] => [6, 0], [7, 0, 5] => [6, 0, 0]
end
context 'decreasing quantity keeping missing units equal' do
- include_examples "boxfill", false, [7, 0] => [1, 0], [7, 0, 5] => [7, 0, 5]
+ include_examples 'boxfill', false, [7, 0] => [1, 0], [7, 0, 5] => [7, 0, 5]
end
context 'moving tolerance to quantity' do
- include_examples "boxfill", true, [4, 2] => [6, 0], [4, 2, 0] => [6, 0, 0]
+ include_examples 'boxfill', true, [4, 2] => [6, 0], [4, 2, 0] => [6, 0, 0]
end
# @todo enable test when tolerance doesn't count in missing_units
# context 'decreasing tolerance' do
diff --git a/spec/models/order_spec.rb b/spec/models/order_spec.rb
index aee48f33..71c46a84 100644
--- a/spec/models/order_spec.rb
+++ b/spec/models/order_spec.rb
@@ -1,14 +1,14 @@
require_relative '../spec_helper'
describe Order do
- let!(:ftt) { create :financial_transaction_type }
- let(:user) { create :user, groups: [create(:ordergroup)] }
+ let!(:ftt) { create(:financial_transaction_type) }
+ let(:user) { create(:user, groups: [create(:ordergroup)]) }
it 'automaticly finishes ended' do
- create :order, created_by: user, starts: Date.yesterday, ends: 1.hour.from_now
- create :order, created_by: user, starts: Date.yesterday, ends: 1.hour.ago
- create :order, created_by: user, starts: Date.yesterday, ends: 1.hour.from_now, end_action: :auto_close
- order = create :order, created_by: user, starts: Date.yesterday, ends: 1.hour.ago, end_action: :auto_close
+ create(:order, created_by: user, starts: Date.yesterday, ends: 1.hour.from_now)
+ create(:order, created_by: user, starts: Date.yesterday, ends: 1.hour.ago)
+ create(:order, created_by: user, starts: Date.yesterday, ends: 1.hour.from_now, end_action: :auto_close)
+ order = create(:order, created_by: user, starts: Date.yesterday, ends: 1.hour.ago, end_action: :auto_close)
Order.finish_ended!
order.reload
@@ -19,10 +19,10 @@ describe Order do
end
describe 'state scopes and boolean getters' do
- let!(:open_order) { create :order, state: 'open' }
- let!(:finished_order) { create :order, state: 'finished' }
- let!(:received_order) { create :order, state: 'received' }
- let!(:closed_order) { create :order, state: 'closed' }
+ let!(:open_order) { create(:order, state: 'open') }
+ let!(:finished_order) { create(:order, state: 'finished') }
+ let!(:received_order) { create(:order, state: 'received') }
+ let!(:closed_order) { create(:order, state: 'closed') }
it 'retrieves open orders in the "open" scope' do
expect(Order.open.count).to eq(1)
@@ -72,8 +72,9 @@ describe Order do
end
it 'sends mail if min_order_quantity has been reached' do
- create :user, groups: [create(:ordergroup)]
- create :order, created_by: user, starts: Date.yesterday, ends: 1.hour.ago, end_action: :auto_close_and_send_min_quantity
+ create(:user, groups: [create(:ordergroup)])
+ create(:order, created_by: user, starts: Date.yesterday, ends: 1.hour.ago,
+ end_action: :auto_close_and_send_min_quantity)
Order.finish_ended!
expect(ActionMailer::Base.deliveries.count).to eq 1
@@ -84,7 +85,7 @@ describe Order do
end
it 'needs order articles' do
- supplier = create :supplier, article_count: 0
+ supplier = create(:supplier, article_count: 0)
expect(build(:order, supplier: supplier)).to be_invalid
end
@@ -93,35 +94,35 @@ describe Order do
end
describe 'with articles' do
- let(:order) { create :order }
+ let(:order) { create(:order) }
it 'is open by default' do expect(order).to be_open end
- it 'is not finished by default' do expect(order).to_not be_finished end
- it 'is not closed by default' do expect(order).to_not be_closed end
+ it 'is not finished by default' do expect(order).not_to be_finished end
+ it 'is not closed by default' do expect(order).not_to be_closed end
it 'has valid order articles' do
order.order_articles.each { |oa| expect(oa).to be_valid }
end
it 'can be finished' do
- # TODO randomise user
+ # TODO: randomise user
order.finish!(user)
- expect(order).to_not be_open
+ expect(order).not_to be_open
expect(order).to be_finished
- expect(order).to_not be_closed
+ expect(order).not_to be_closed
end
it 'can be closed' do
- # TODO randomise user
+ # TODO: randomise user
order.finish!(user)
order.close!(user)
- expect(order).to_not be_open
+ expect(order).not_to be_open
expect(order).to be_closed
end
end
describe 'with a default end date' do
- let(:order) { create :order }
+ let(:order) { create(:order) }
before do
FoodsoftConfig[:order_schedule] = { ends: { recurr: 'FREQ=WEEKLY;BYDAY=MO', time: '9:00' } }
@@ -138,10 +139,10 @@ describe Order do
end
describe 'mapped to GroupOrders' do
- let!(:user) { create :user, groups: [create(:ordergroup)] }
- let!(:order) { create :order }
- let!(:order2) { create :order }
- let!(:go) { create :group_order, order: order, ordergroup: user.ordergroup }
+ let!(:user) { create(:user, groups: [create(:ordergroup)]) }
+ let!(:order) { create(:order) }
+ let!(:order2) { create(:order) }
+ let!(:go) { create(:group_order, order: order, ordergroup: user.ordergroup) }
it 'to map a user\'s GroupOrders to a list of Orders' do
orders = Order.ordergroup_group_orders_map(user.ordergroup)
@@ -156,10 +157,10 @@ describe Order do
describe 'balancing charges correct amounts' do
let!(:transport) { rand(0.1..26.0).round(2) }
- let!(:order) { create :order, article_count: 1 }
+ let!(:order) { create(:order, article_count: 1) }
let!(:oa) { order.order_articles.first }
- let!(:go) { create :group_order, order: order, transport: transport }
- let!(:goa) { create :group_order_article, group_order: go, order_article: oa, quantity: 1 }
+ let!(:go) { create(:group_order, order: order, transport: transport) }
+ let!(:goa) { create(:group_order_article, group_order: go, order_article: oa, quantity: 1) }
before do
goa.update_quantities(1, 0)
diff --git a/spec/models/ordergroup_spec.rb b/spec/models/ordergroup_spec.rb
index a7f0c94a..cdac353d 100644
--- a/spec/models/ordergroup_spec.rb
+++ b/spec/models/ordergroup_spec.rb
@@ -1,22 +1,22 @@
require_relative '../spec_helper'
describe Ordergroup do
- let(:ftc1) { create :financial_transaction_class }
- let(:ftc2) { create :financial_transaction_class }
- let(:ftt1) { create :financial_transaction_type, financial_transaction_class: ftc1 }
- let(:ftt2) { create :financial_transaction_type, financial_transaction_class: ftc2 }
- let(:ftt3) { create :financial_transaction_type, financial_transaction_class: ftc2 }
- let(:user) { create :user, groups: [create(:ordergroup)] }
+ let(:ftc1) { create(:financial_transaction_class) }
+ let(:ftc2) { create(:financial_transaction_class) }
+ let(:ftt1) { create(:financial_transaction_type, financial_transaction_class: ftc1) }
+ let(:ftt2) { create(:financial_transaction_type, financial_transaction_class: ftc2) }
+ let(:ftt3) { create(:financial_transaction_type, financial_transaction_class: ftc2) }
+ let(:user) { create(:user, groups: [create(:ordergroup)]) }
it 'shows no active ordergroups when all orders are older than 3 months' do
- order = create :order, starts: 4.months.ago
+ order = create(:order, starts: 4.months.ago)
user.ordergroup.group_orders.create!(order: order)
expect(Ordergroup.active).to be_empty
end
it 'shows active ordergroups when there are recent orders' do
- order = create :order, starts: 2.days.ago
+ order = create(:order, starts: 2.days.ago)
user.ordergroup.group_orders.create!(order: order)
expect(Ordergroup.active).not_to be_empty
@@ -24,17 +24,17 @@ describe Ordergroup do
describe 'sort correctly' do
it 'by name' do
- group_b = create :ordergroup, name: 'bbb'
- group_a = create :ordergroup, name: 'aaa'
- group_c = create :ordergroup, name: 'ccc'
+ group_b = create(:ordergroup, name: 'bbb')
+ group_a = create(:ordergroup, name: 'aaa')
+ group_c = create(:ordergroup, name: 'ccc')
expect(Ordergroup.sort_by_param('name')).to eq([group_a, group_b, group_c])
end
it 'reverse by name' do
- group_b = create :ordergroup, name: 'bbb'
- group_a = create :ordergroup, name: 'aaa'
- group_c = create :ordergroup, name: 'ccc'
+ group_b = create(:ordergroup, name: 'bbb')
+ group_a = create(:ordergroup, name: 'aaa')
+ group_c = create(:ordergroup, name: 'ccc')
expect(Ordergroup.sort_by_param('name_reverse')).to eq([group_c, group_b, group_a])
end
@@ -43,9 +43,9 @@ describe Ordergroup do
users_b = [create(:user)]
users_a = []
users_c = [create(:user), create(:user), create(:user)]
- group_b = create :ordergroup, name: 'bbb', user_ids: users_b.map(&:id)
- group_a = create :ordergroup, name: 'aaa', user_ids: users_a.map(&:id)
- group_c = create :ordergroup, name: 'ccc', user_ids: users_c.map(&:id)
+ group_b = create(:ordergroup, name: 'bbb', user_ids: users_b.map(&:id))
+ group_a = create(:ordergroup, name: 'aaa', user_ids: users_a.map(&:id))
+ group_c = create(:ordergroup, name: 'ccc', user_ids: users_c.map(&:id))
expect(Ordergroup.sort_by_param('members_count')).to eq([group_a, group_b, group_c])
end
@@ -54,39 +54,39 @@ describe Ordergroup do
users_b = [create(:user)]
users_a = []
users_c = [create(:user), create(:user), create(:user)]
- group_b = create :ordergroup, name: 'bbb', user_ids: users_b.map(&:id)
- group_a = create :ordergroup, name: 'aaa', user_ids: users_a.map(&:id)
- group_c = create :ordergroup, name: 'ccc', user_ids: users_c.map(&:id)
+ group_b = create(:ordergroup, name: 'bbb', user_ids: users_b.map(&:id))
+ group_a = create(:ordergroup, name: 'aaa', user_ids: users_a.map(&:id))
+ group_c = create(:ordergroup, name: 'ccc', user_ids: users_c.map(&:id))
expect(Ordergroup.sort_by_param('members_count_reverse')).to eq([group_c, group_b, group_a])
end
it 'by last_user_activity' do
- user_b = create :user, last_activity: 3.days.ago
- user_a = create :user, last_activity: 5.days.ago
- user_c = create :user, last_activity: Time.now
- group_b = create :ordergroup, name: 'bbb', user_ids: [user_b.id]
- group_a = create :ordergroup, name: 'aaa', user_ids: [user_a.id]
- group_c = create :ordergroup, name: 'ccc', user_ids: [user_c.id]
+ user_b = create(:user, last_activity: 3.days.ago)
+ user_a = create(:user, last_activity: 5.days.ago)
+ user_c = create(:user, last_activity: Time.now)
+ group_b = create(:ordergroup, name: 'bbb', user_ids: [user_b.id])
+ group_a = create(:ordergroup, name: 'aaa', user_ids: [user_a.id])
+ group_c = create(:ordergroup, name: 'ccc', user_ids: [user_c.id])
expect(Ordergroup.sort_by_param('last_user_activity')).to eq([group_a, group_b, group_c])
end
it 'reverse by last_user_activity' do
- user_b = create :user, last_activity: 3.days.ago
- user_a = create :user, last_activity: 5.days.ago
- user_c = create :user, last_activity: Time.now
- group_b = create :ordergroup, name: 'bbb', user_ids: [user_b.id]
- group_a = create :ordergroup, name: 'aaa', user_ids: [user_a.id]
- group_c = create :ordergroup, name: 'ccc', user_ids: [user_c.id]
+ user_b = create(:user, last_activity: 3.days.ago)
+ user_a = create(:user, last_activity: 5.days.ago)
+ user_c = create(:user, last_activity: Time.now)
+ group_b = create(:ordergroup, name: 'bbb', user_ids: [user_b.id])
+ group_a = create(:ordergroup, name: 'aaa', user_ids: [user_a.id])
+ group_c = create(:ordergroup, name: 'ccc', user_ids: [user_c.id])
expect(Ordergroup.sort_by_param('last_user_activity_reverse')).to eq([group_c, group_b, group_a])
end
it 'by last_order' do
- group_b = create :ordergroup, name: 'bbb'
- group_a = create :ordergroup, name: 'aaa'
- group_c = create :ordergroup, name: 'ccc'
+ group_b = create(:ordergroup, name: 'bbb')
+ group_a = create(:ordergroup, name: 'aaa')
+ group_c = create(:ordergroup, name: 'ccc')
group_b.group_orders.create! order: create(:order, starts: 6.days.ago)
group_a.group_orders.create! order: create(:order, starts: 4.months.ago)
group_c.group_orders.create! order: create(:order, starts: Time.now)
@@ -95,9 +95,9 @@ describe Ordergroup do
end
it 'reverse by last_order' do
- group_b = create :ordergroup, name: 'bbb'
- group_a = create :ordergroup, name: 'aaa'
- group_c = create :ordergroup, name: 'ccc'
+ group_b = create(:ordergroup, name: 'bbb')
+ group_a = create(:ordergroup, name: 'aaa')
+ group_c = create(:ordergroup, name: 'ccc')
group_b.group_orders.create! order: create(:order, starts: 6.days.ago)
group_a.group_orders.create! order: create(:order, starts: 4.months.ago)
group_c.group_orders.create! order: create(:order, starts: Time.now)
diff --git a/spec/models/supplier_spec.rb b/spec/models/supplier_spec.rb
index 70ba6def..5216b8e9 100644
--- a/spec/models/supplier_spec.rb
+++ b/spec/models/supplier_spec.rb
@@ -1,17 +1,19 @@
require_relative '../spec_helper'
describe Supplier do
- let(:supplier) { create :supplier }
+ let(:supplier) { create(:supplier) }
context 'syncs from file' do
it 'imports and updates articles' do
- article1 = create(:article, supplier: supplier, order_number: 177813, unit: '250 g', price: 0.1)
- article2 = create(:article, supplier: supplier, order_number: 12345)
+ article1 = create(:article, supplier: supplier, order_number: 177_813, unit: '250 g', price: 0.1)
+ article2 = create(:article, supplier: supplier, order_number: 12_345)
supplier.articles = [article1, article2]
options = { filename: 'foodsoft_file_01.csv' }
options[:outlist_absent] = true
options[:convert_units] = true
- updated_article_pairs, outlisted_articles, new_articles = supplier.sync_from_file(Rails.root.join('spec/fixtures/foodsoft_file_01.csv'), options)
+ updated_article_pairs, outlisted_articles, new_articles = supplier.sync_from_file(
+ Rails.root.join('spec/fixtures/foodsoft_file_01.csv'), options
+ )
expect(new_articles.length).to be > 0
expect(updated_article_pairs.first[1][:name]).to eq 'Tomaten'
expect(outlisted_articles.first).to eq article2
@@ -19,14 +21,16 @@ describe Supplier do
end
it 'return correct tolerance' do
- supplier = create :supplier, articles: create_list(:article, 1, unit_quantity: 1)
+ supplier = create(:supplier)
+ supplier.articles = create_list(:article, 1, unit_quantity: 1)
expect(supplier.has_tolerance?).to be false
- supplier2 = create :supplier, articles: create_list(:article, 1, unit_quantity: 2)
+ supplier2 = create(:supplier)
+ supplier2.articles = create_list(:article, 1, unit_quantity: 2)
expect(supplier2.has_tolerance?).to be true
end
it 'deletes the supplier and its articles' do
- supplier = create :supplier, article_count: 3
+ supplier = create(:supplier, article_count: 3)
supplier.articles.each { |a| allow(a).to receive(:mark_as_deleted) }
supplier.mark_as_deleted
supplier.articles.each { |a| expect(a).to have_received(:mark_as_deleted) }
@@ -34,29 +38,29 @@ describe Supplier do
end
it 'has a unique name' do
- supplier2 = build :supplier, name: supplier.name
+ supplier2 = build(:supplier, name: supplier.name)
expect(supplier2).to be_invalid
end
it 'has valid articles' do
- supplier = create :supplier, article_count: true
+ supplier = create(:supplier, article_count: true)
supplier.articles.each { |a| expect(a).to be_valid }
end
context 'connected to a shared supplier' do
let(:shared_sync_method) { nil }
- let(:shared_supplier) { create :shared_supplier }
- let(:supplier) { create :supplier, shared_supplier: shared_supplier, shared_sync_method: shared_sync_method }
+ let(:shared_supplier) { create(:shared_supplier) }
+ let(:supplier) { create(:supplier, shared_supplier: shared_supplier, shared_sync_method: shared_sync_method) }
- let!(:synced_shared_article) { create :shared_article, shared_supplier: shared_supplier }
- let!(:updated_shared_article) { create :shared_article, shared_supplier: shared_supplier }
- let!(:new_shared_article) { create :shared_article, shared_supplier: shared_supplier }
+ let!(:synced_shared_article) { create(:shared_article, shared_supplier: shared_supplier) }
+ let!(:updated_shared_article) { create(:shared_article, shared_supplier: shared_supplier) }
+ let!(:new_shared_article) { create(:shared_article, shared_supplier: shared_supplier) }
- let!(:removed_article) { create :article, supplier: supplier, order_number: '10001-ABC' }
+ let!(:removed_article) { create(:article, supplier: supplier, order_number: '10001-ABC') }
let!(:updated_article) do
updated_shared_article.build_new_article(supplier).tap do |article|
article.article_category = create :article_category
- article.origin = "FubarX1"
+ article.origin = 'FubarX1'
article.shared_updated_on = 1.day.ago
article.save!
end
@@ -75,7 +79,7 @@ describe Supplier do
it 'returns the expected articles' do
updated_article_pairs, outlisted_articles, new_articles = supplier.sync_all
- expect(updated_article_pairs).to_not be_empty
+ expect(updated_article_pairs).not_to be_empty
expect(updated_article_pairs[0][0].id).to eq updated_article.id
expect(updated_article_pairs[0][1].keys).to include :origin
@@ -91,13 +95,13 @@ describe Supplier do
it 'returns the expected articles' do
updated_article_pairs, outlisted_articles, new_articles = supplier.sync_all
- expect(updated_article_pairs).to_not be_empty
+ expect(updated_article_pairs).not_to be_empty
expect(updated_article_pairs[0][0].id).to eq updated_article.id
expect(updated_article_pairs[0][1].keys).to include :origin
expect(outlisted_articles).to eq [removed_article]
- expect(new_articles).to_not be_empty
+ expect(new_articles).not_to be_empty
expect(new_articles[0].order_number).to eq new_shared_article.number
expect(new_articles[0].availability?).to be true
end
@@ -109,13 +113,13 @@ describe Supplier do
it 'returns the expected articles' do
updated_article_pairs, outlisted_articles, new_articles = supplier.sync_all
- expect(updated_article_pairs).to_not be_empty
+ expect(updated_article_pairs).not_to be_empty
expect(updated_article_pairs[0][0].id).to eq updated_article.id
expect(updated_article_pairs[0][1].keys).to include :origin
expect(outlisted_articles).to eq [removed_article]
- expect(new_articles).to_not be_empty
+ expect(new_articles).not_to be_empty
expect(new_articles[0].order_number).to eq new_shared_article.number
expect(new_articles[0].availability?).to be false
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 59a797de..def2d1f8 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -2,9 +2,9 @@ require_relative '../spec_helper'
describe User do
it 'is correctly created' do
- user = create :user,
+ user = create(:user,
nick: 'johnnydoe', first_name: 'Johnny', last_name: 'DoeBar',
- email: 'johnnydoe@foodcoop.test', phone: '+1234567890'
+ email: 'johnnydoe@foodcoop.test', phone: '+1234567890')
expect(user.nick).to eq('johnnydoe')
expect(user.first_name).to eq('Johnny')
expect(user.last_name).to eq('DoeBar')
@@ -14,7 +14,7 @@ describe User do
end
describe 'does not have the role' do
- let(:user) { create :user }
+ let(:user) { create(:user) }
it 'admin' do expect(user.role_admin?).to be_falsey end
it 'finance' do expect(user.role_finance?).to be_falsey end
@@ -24,7 +24,7 @@ describe User do
end
describe do
- let(:user) { create :user, password: 'blahblahblah' }
+ let(:user) { create(:user, password: 'blahblahblah') }
it 'can authenticate with correct password' do
expect(User.authenticate(user.nick, 'blahblahblah')).to be_truthy
@@ -74,124 +74,124 @@ describe User do
end
describe 'admin' do
- let(:user) { create :admin }
+ let(:user) { create(:admin) }
it 'default admin role' do expect(user.role_admin?).to be_truthy end
end
describe 'sort correctly' do
it 'by nick' do
- user_b = create :user, nick: 'bbb'
- user_a = create :user, nick: 'aaa'
- user_c = create :user, nick: 'ccc'
+ user_b = create(:user, nick: 'bbb')
+ user_a = create(:user, nick: 'aaa')
+ user_c = create(:user, nick: 'ccc')
expect(User.sort_by_param('nick')).to eq([user_a, user_b, user_c])
end
it 'reverse by nick' do
- user_b = create :user, nick: 'bbb'
- user_a = create :user, nick: 'aaa'
- user_c = create :user, nick: 'ccc'
+ user_b = create(:user, nick: 'bbb')
+ user_a = create(:user, nick: 'aaa')
+ user_c = create(:user, nick: 'ccc')
expect(User.sort_by_param('nick_reverse')).to eq([user_c, user_b, user_a])
end
it 'by name' do
- user_b = create :user, first_name: 'aaa', last_name: 'bbb'
- user_a = create :user, first_name: 'aaa', last_name: 'aaa'
- user_c = create :user, first_name: 'ccc', last_name: 'aaa'
+ user_b = create(:user, first_name: 'aaa', last_name: 'bbb')
+ user_a = create(:user, first_name: 'aaa', last_name: 'aaa')
+ user_c = create(:user, first_name: 'ccc', last_name: 'aaa')
expect(User.sort_by_param('name')).to eq([user_a, user_b, user_c])
end
it 'reverse by name' do
- user_b = create :user, first_name: 'aaa', last_name: 'bbb'
- user_a = create :user, first_name: 'aaa', last_name: 'aaa'
- user_c = create :user, first_name: 'ccc', last_name: 'aaa'
+ user_b = create(:user, first_name: 'aaa', last_name: 'bbb')
+ user_a = create(:user, first_name: 'aaa', last_name: 'aaa')
+ user_c = create(:user, first_name: 'ccc', last_name: 'aaa')
expect(User.sort_by_param('name_reverse')).to eq([user_c, user_b, user_a])
end
it 'by email' do
- user_b = create :user, email: 'bbb@dummy.com'
- user_a = create :user, email: 'aaa@dummy.com'
- user_c = create :user, email: 'ccc@dummy.com'
+ user_b = create(:user, email: 'bbb@dummy.com')
+ user_a = create(:user, email: 'aaa@dummy.com')
+ user_c = create(:user, email: 'ccc@dummy.com')
expect(User.sort_by_param('email')).to eq([user_a, user_b, user_c])
end
it 'reverse by email' do
- user_b = create :user, email: 'bbb@dummy.com'
- user_a = create :user, email: 'aaa@dummy.com'
- user_c = create :user, email: 'ccc@dummy.com'
+ user_b = create(:user, email: 'bbb@dummy.com')
+ user_a = create(:user, email: 'aaa@dummy.com')
+ user_c = create(:user, email: 'ccc@dummy.com')
expect(User.sort_by_param('email_reverse')).to eq([user_c, user_b, user_a])
end
it 'by phone' do
- user_b = create :user, phone: 'bbb'
- user_a = create :user, phone: 'aaa'
- user_c = create :user, phone: 'ccc'
+ user_b = create(:user, phone: 'bbb')
+ user_a = create(:user, phone: 'aaa')
+ user_c = create(:user, phone: 'ccc')
expect(User.sort_by_param('phone')).to eq([user_a, user_b, user_c])
end
it 'reverse by phone' do
- user_b = create :user, phone: 'bbb'
- user_a = create :user, phone: 'aaa'
- user_c = create :user, phone: 'ccc'
+ user_b = create(:user, phone: 'bbb')
+ user_a = create(:user, phone: 'aaa')
+ user_c = create(:user, phone: 'ccc')
expect(User.sort_by_param('phone_reverse')).to eq([user_c, user_b, user_a])
end
it 'by last_activity' do
- user_b = create :user, last_activity: 3.days.ago
- user_a = create :user, last_activity: 5.days.ago
- user_c = create :user, last_activity: Time.now
+ user_b = create(:user, last_activity: 3.days.ago)
+ user_a = create(:user, last_activity: 5.days.ago)
+ user_c = create(:user, last_activity: Time.now)
expect(User.sort_by_param('last_activity')).to eq([user_a, user_b, user_c])
end
it 'reverse by last_activity' do
- user_b = create :user, last_activity: 3.days.ago
- user_a = create :user, last_activity: 5.days.ago
- user_c = create :user, last_activity: Time.now
+ user_b = create(:user, last_activity: 3.days.ago)
+ user_a = create(:user, last_activity: 5.days.ago)
+ user_c = create(:user, last_activity: Time.now)
expect(User.sort_by_param('last_activity_reverse')).to eq([user_c, user_b, user_a])
end
it 'by ordergroup' do
- user_b = create :user, groups: [create(:workgroup, name: 'a'), create(:ordergroup, name: 'bb')]
- user_a = create :user, groups: [create(:workgroup, name: 'b'), create(:ordergroup, name: 'aa')]
- user_c = create :user, groups: [create(:workgroup, name: 'c'), create(:ordergroup, name: 'cc')]
+ user_b = create(:user, groups: [create(:workgroup, name: 'a'), create(:ordergroup, name: 'bb')])
+ user_a = create(:user, groups: [create(:workgroup, name: 'b'), create(:ordergroup, name: 'aa')])
+ user_c = create(:user, groups: [create(:workgroup, name: 'c'), create(:ordergroup, name: 'cc')])
expect(User.sort_by_param('ordergroup')).to eq([user_a, user_b, user_c])
end
it 'reverse by ordergroup' do
- user_b = create :user, groups: [create(:workgroup, name: 'a'), create(:ordergroup, name: 'bb')]
- user_a = create :user, groups: [create(:workgroup, name: 'b'), create(:ordergroup, name: 'aa')]
- user_c = create :user, groups: [create(:workgroup, name: 'c'), create(:ordergroup, name: 'cc')]
+ user_b = create(:user, groups: [create(:workgroup, name: 'a'), create(:ordergroup, name: 'bb')])
+ user_a = create(:user, groups: [create(:workgroup, name: 'b'), create(:ordergroup, name: 'aa')])
+ user_c = create(:user, groups: [create(:workgroup, name: 'c'), create(:ordergroup, name: 'cc')])
expect(User.sort_by_param('ordergroup_reverse')).to eq([user_c, user_b, user_a])
end
it 'and users are only listed once' do
- create :user
+ create(:user)
expect(User.sort_by_param('ordergroup').size).to eq(1)
end
it 'and users belonging to a workgroup are only listed once' do
- create :admin
+ create(:admin)
expect(User.sort_by_param('ordergroup').size).to eq(1)
end
it 'and users belonging to 2 ordergroups are only listed once' do
- user = create :user
- create :ordergroup, user_ids: [user.id]
- create :ordergroup, user_ids: [user.id]
+ user = create(:user)
+ create(:ordergroup, user_ids: [user.id])
+ create(:ordergroup, user_ids: [user.id])
expect(User.sort_by_param('ordergroup').size).to eq(1)
end
diff --git a/spec/requests/api/article_categories_spec.rb b/spec/requests/api/v1/article_categories_controller_spec.rb
similarity index 96%
rename from spec/requests/api/article_categories_spec.rb
rename to spec/requests/api/v1/article_categories_controller_spec.rb
index 4c079ff2..209349a2 100644
--- a/spec/requests/api/article_categories_spec.rb
+++ b/spec/requests/api/v1/article_categories_controller_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'Article Categories', type: :request do
+describe Api::V1::ArticleCategoriesController do
include ApiHelper
path '/article_categories' do
diff --git a/spec/requests/api/configs_spec.rb b/spec/requests/api/v1/configs_controller_spec.rb
similarity index 90%
rename from spec/requests/api/configs_spec.rb
rename to spec/requests/api/v1/configs_controller_spec.rb
index 75f48ceb..1809065a 100644
--- a/spec/requests/api/configs_spec.rb
+++ b/spec/requests/api/v1/configs_controller_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'Config', type: :request do
+describe Api::V1::ConfigsController do
include ApiHelper
path '/config' do
diff --git a/spec/requests/api/financial_transaction_classes_spec.rb b/spec/requests/api/v1/financial_transaction_classes_controller_spec.rb
similarity index 95%
rename from spec/requests/api/financial_transaction_classes_spec.rb
rename to spec/requests/api/v1/financial_transaction_classes_controller_spec.rb
index 1eaf046f..4db7f2b7 100644
--- a/spec/requests/api/financial_transaction_classes_spec.rb
+++ b/spec/requests/api/v1/financial_transaction_classes_controller_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'Financial Transaction Classes', type: :request do
+describe Api::V1::FinancialTransactionClassesController do
include ApiHelper
path '/financial_transaction_classes' do
diff --git a/spec/requests/api/financial_transaction_types_spec.rb b/spec/requests/api/v1/financial_transaction_types_controller_spec.rb
similarity index 95%
rename from spec/requests/api/financial_transaction_types_spec.rb
rename to spec/requests/api/v1/financial_transaction_types_controller_spec.rb
index 82a30f83..d061214e 100644
--- a/spec/requests/api/financial_transaction_types_spec.rb
+++ b/spec/requests/api/v1/financial_transaction_types_controller_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'Financial Transaction types', type: :request do
+describe Api::V1::FinancialTransactionTypesController do
include ApiHelper
path '/financial_transaction_types' do
diff --git a/spec/requests/api/financial_transactions_spec.rb b/spec/requests/api/v1/financial_transactions_controller_spec.rb
similarity index 88%
rename from spec/requests/api/financial_transactions_spec.rb
rename to spec/requests/api/v1/financial_transactions_controller_spec.rb
index 1d3ef2b9..915f3891 100644
--- a/spec/requests/api/financial_transactions_spec.rb
+++ b/spec/requests/api/v1/financial_transactions_controller_spec.rb
@@ -1,10 +1,12 @@
require 'swagger_helper'
-describe 'Financial Transaction', type: :request do
+describe Api::V1::FinancialTransactionsController do
include ApiHelper
let!(:finance_user) { create(:user, groups: [create(:workgroup, role_finance: true)]) }
let!(:api_scopes) { ['finance:read', 'finance:write'] }
- let(:api_access_token) { create(:oauth2_access_token, resource_owner_id: finance_user.id, scopes: api_scopes&.join(' ')).token }
+ let(:api_access_token) do
+ create(:oauth2_access_token, resource_owner_id: finance_user.id, scopes: api_scopes&.join(' ')).token
+ end
let(:financial_transaction) { create(:financial_transaction, user: user) }
path '/financial_transactions' do
diff --git a/spec/requests/api/navigations_spec.rb b/spec/requests/api/v1/navigations_controller_spec.rb
similarity index 90%
rename from spec/requests/api/navigations_spec.rb
rename to spec/requests/api/v1/navigations_controller_spec.rb
index c2312437..13c0a449 100644
--- a/spec/requests/api/navigations_spec.rb
+++ b/spec/requests/api/v1/navigations_controller_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'Navigation', type: :request do
+describe Api::V1::NavigationsController do
include ApiHelper
path '/navigation' do
diff --git a/spec/requests/api/order_articles_spec.rb b/spec/requests/api/v1/order_articles_controller_spec.rb
similarity index 98%
rename from spec/requests/api/order_articles_spec.rb
rename to spec/requests/api/v1/order_articles_controller_spec.rb
index 17feefa6..97fea3bb 100644
--- a/spec/requests/api/order_articles_spec.rb
+++ b/spec/requests/api/v1/order_articles_controller_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'Order Articles', type: :request do
+describe Api::V1::OrderArticlesController do
include ApiHelper
path '/order_articles' do
diff --git a/spec/requests/api/orders_spec.rb b/spec/requests/api/v1/orders_controller_spec.rb
similarity index 96%
rename from spec/requests/api/orders_spec.rb
rename to spec/requests/api/v1/orders_controller_spec.rb
index c0505d7f..0ad4131e 100644
--- a/spec/requests/api/orders_spec.rb
+++ b/spec/requests/api/v1/orders_controller_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'Orders', type: :request do
+describe Api::V1::OrdersController do
include ApiHelper
let(:api_scopes) { ['orders:read'] }
diff --git a/spec/requests/api/user/financial_transactions_spec.rb b/spec/requests/api/v1/user/financial_transactions_spec.rb
similarity index 92%
rename from spec/requests/api/user/financial_transactions_spec.rb
rename to spec/requests/api/v1/user/financial_transactions_spec.rb
index aca9d7cd..63603d66 100644
--- a/spec/requests/api/user/financial_transactions_spec.rb
+++ b/spec/requests/api/v1/user/financial_transactions_spec.rb
@@ -1,11 +1,11 @@
require 'swagger_helper'
-describe 'User', type: :request do
+describe 'User' do
include ApiHelper
let(:api_scopes) { ['finance:user'] }
- let(:user) { create :user, groups: [create(:ordergroup)] }
- let(:other_user2) { create :user }
+ let(:user) { create(:user, groups: [create(:ordergroup)]) }
+ let(:other_user2) { create(:user) }
let(:ft) { create(:financial_transaction, user: user, ordergroup: user.ordergroup) }
before do
@@ -27,7 +27,9 @@ describe 'User', type: :request do
}
}
- let(:financial_transaction) { { amount: 3, financial_transaction_type_id: create(:financial_transaction_type).id, note: 'lirum larum' } }
+ let(:financial_transaction) do
+ { amount: 3, financial_transaction_type_id: create(:financial_transaction_type).id, note: 'lirum larum' }
+ end
response '200', 'success' do
schema type: :object, properties: {
diff --git a/spec/requests/api/user/group_order_articles_spec.rb b/spec/requests/api/v1/user/group_order_articles_spec.rb
similarity index 88%
rename from spec/requests/api/user/group_order_articles_spec.rb
rename to spec/requests/api/v1/user/group_order_articles_spec.rb
index 205a4070..e93c7ecf 100644
--- a/spec/requests/api/user/group_order_articles_spec.rb
+++ b/spec/requests/api/v1/user/group_order_articles_spec.rb
@@ -1,15 +1,15 @@
require 'swagger_helper'
-describe 'User', type: :request do
+describe 'User' do
include ApiHelper
let(:api_scopes) { ['group_orders:user'] }
- let(:user) { create :user, groups: [create(:ordergroup)] }
- let(:other_user2) { create :user }
+ let(:user) { create(:user, groups: [create(:ordergroup)]) }
+ let(:other_user2) { create(:user) }
let(:order) { create(:order, article_count: 4) }
let(:order_articles) { order.order_articles }
- let(:group_order) { create :group_order, ordergroup: user.ordergroup, order_id: order.id }
- let(:goa) { create :group_order_article, group_order: group_order, order_article: order_articles.first }
+ let(:group_order) { create(:group_order, ordergroup: user.ordergroup, order_id: order.id) }
+ let(:goa) { create(:group_order_article, group_order: group_order, order_article: order_articles.first) }
before do
goa
@@ -134,11 +134,12 @@ describe 'User', type: :request do
response 401, 'not logged-in' do
schema '$ref' => '#/components/schemas/Error401'
- let(:Authorization) { 'abc' }
+ let(:Authorization) { 'abc' } # rubocop:disable RSpec/VariableName
run_test!
end
- response 403, 'user has no ordergroup, order not open, is below minimum balance, has not enough apple points, or missing scope' do
+ response 403,
+ 'user has no ordergroup, order not open, is below minimum balance, has not enough apple points, or missing scope' do
let(:api_scopes) { ['none'] }
schema '$ref' => '#/components/schemas/Error403'
run_test!
@@ -180,7 +181,8 @@ describe 'User', type: :request do
it_handles_invalid_token_with_id
- response 403, 'user has no ordergroup, order not open, is below minimum balance, has not enough apple points, or missing scope' do
+ response 403,
+ 'user has no ordergroup, order not open, is below minimum balance, has not enough apple points, or missing scope' do
let(:api_scopes) { ['none'] }
schema '$ref' => '#/components/schemas/Error403'
run_test!
diff --git a/spec/requests/api/user/users_spec.rb b/spec/requests/api/v1/user/users_spec.rb
similarity index 94%
rename from spec/requests/api/user/users_spec.rb
rename to spec/requests/api/v1/user/users_spec.rb
index 0d3196bc..90e343fa 100644
--- a/spec/requests/api/user/users_spec.rb
+++ b/spec/requests/api/v1/user/users_spec.rb
@@ -1,6 +1,6 @@
require 'swagger_helper'
-describe 'User', type: :request do
+describe 'User' do
include ApiHelper
path '/user' do
@@ -8,9 +8,9 @@ describe 'User', type: :request do
tags 'User'
produces 'application/json'
let(:api_scopes) { ['user:read'] }
- let(:other_user1) { create :user }
- let(:user) { create :user }
- let(:other_user2) { create :user }
+ let(:other_user1) { create(:user) }
+ let(:user) { create(:user) }
+ let(:other_user2) { create(:user) }
response '200', 'success' do
schema type: :object,
@@ -52,7 +52,7 @@ describe 'User', type: :request do
get 'financial summary about the currently logged-in user' do
tags 'User', 'Financial Transaction'
produces 'application/json'
- let(:user) { create :user, :ordergroup }
+ let(:user) { create(:user, :ordergroup) }
let(:api_scopes) { ['finance:user'] }
FinancialTransactionClass.create(name: 'TestTransaction')
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 8b1c6ace..3bbf03ea 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,8 +1,8 @@
# This file is copied to spec/ when you run 'rails generate rspec:install'
-ENV["RAILS_ENV"] ||= 'test'
-ENV["FOODSOFT_APP_CONFIG"] ||= 'spec/app_config.yml' # load special foodsoft config
+ENV['RAILS_ENV'] ||= 'test'
+ENV['FOODSOFT_APP_CONFIG'] ||= 'spec/app_config.yml' # load special foodsoft config
require_relative 'support/coverage' # needs to be first
-require File.expand_path("../../config/environment", __FILE__)
+require File.expand_path('../config/environment', __dir__)
require 'rspec/rails'
require 'capybara/rails'
require 'capybara/apparition'
@@ -17,17 +17,17 @@ end
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
-Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
+Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
RSpec.configure do |config|
# We use capybara with webkit, and need database_cleaner
- config.before(:each) do
+ config.before do
DatabaseCleaner.strategy = (RSpec.current_example.metadata[:js] ? :truncation : :transaction)
DatabaseCleaner.start
# clean slate mail queues, not sure why needed - https://github.com/rspec/rspec-rails/issues/661
ActionMailer::Base.deliveries.clear
end
- config.after(:each) do
+ config.after do
DatabaseCleaner.clean
# Need to clear cache for RailsSettings::CachedSettings
Rails.cache.clear
@@ -35,7 +35,7 @@ RSpec.configure do |config|
# reload foodsoft configuration, so that tests can use FoodsoftConfig.config[:foo]=x
# without messing up tests run after that
- config.before(:each) do
+ config.before do
FoodsoftConfig.init
FoodsoftConfig.init_mailing
end
@@ -49,7 +49,7 @@ RSpec.configure do |config|
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
- config.order = "random"
+ config.order = 'random'
config.include SpecTestHelper, type: :controller
config.include SessionHelper, type: :feature
diff --git a/spec/support/api_helper.rb b/spec/support/api_helper.rb
index 86e2ca07..3a6e7894 100644
--- a/spec/support/api_helper.rb
+++ b/spec/support/api_helper.rb
@@ -4,12 +4,14 @@ module ApiHelper
included do
let(:user) { create(:user) }
let(:api_scopes) { [] } # empty scopes for stricter testing (in reality this would be default_scopes)
- let(:api_access_token) { create(:oauth2_access_token, resource_owner_id: user.id, scopes: api_scopes&.join(' ')).token }
- let(:Authorization) { "Bearer #{api_access_token}" }
+ let(:api_access_token) do
+ create(:oauth2_access_token, resource_owner_id: user.id, scopes: api_scopes&.join(' ')).token
+ end
+ let(:Authorization) { "Bearer #{api_access_token}" } # rubocop:disable RSpec/VariableName
def self.it_handles_invalid_token
context 'with invalid access token' do
- let(:Authorization) { 'abc' }
+ let(:Authorization) { 'abc' } # rubocop:disable RSpec/VariableName
response 401, 'not logged-in' do
schema '$ref' => '#/components/schemas/Error401'
@@ -20,7 +22,7 @@ module ApiHelper
def self.it_handles_invalid_token_with_id
context 'with invalid access token' do
- let(:Authorization) { 'abc' }
+ let(:Authorization) { 'abc' } # rubocop:disable RSpec/VariableName
let(:id) { 42 } # id doesn't matter here
response 401, 'not logged-in' do
diff --git a/spec/support/api_oauth.rb b/spec/support/api_oauth.rb
index 00d5318d..da8a56c1 100644
--- a/spec/support/api_oauth.rb
+++ b/spec/support/api_oauth.rb
@@ -5,7 +5,7 @@ module ApiOAuth
included do
let(:user) { build(:user) }
let(:api_scopes) { [] } # empty scopes for stricter testing (in reality this would be default_scopes)
- let(:api_access_token) { double(:acceptable? => true, :accessible? => true, scopes: api_scopes) }
+ let(:api_access_token) { double(acceptable?: true, accessible?: true, scopes: api_scopes) }
before { allow(controller).to receive(:doorkeeper_token) { api_access_token } }
before { allow(controller).to receive(:current_user) { user } }
diff --git a/spec/support/coverage.rb b/spec/support/coverage.rb
index 20bbdcf3..b4142c3d 100644
--- a/spec/support/coverage.rb
+++ b/spec/support/coverage.rb
@@ -11,7 +11,7 @@ if ENV['COVERAGE'] or ENV['COVERALLS']
# slightly tweaked coverage reporting
def cov_no_plugins(source_file, path)
- source_file.filename =~ /#{path}/ and not source_file.filename =~ /\/lib\/foodsoft_.*\//
+ source_file.filename =~ /#{path}/ and !(source_file.filename =~ %r{/lib/foodsoft_.*/})
end
SimpleCov.start do
add_filter '/spec/'
@@ -21,6 +21,6 @@ if ENV['COVERAGE'] or ENV['COVERALLS']
add_group 'Helpers' do |s| cov_no_plugins s, '/app/helpers/' end
add_group 'Documents' do |s| cov_no_plugins s, '/app/documents/' end
add_group 'Libraries' do |s| cov_no_plugins s, '/lib/' end
- add_group 'Plugins' do |s| s.filename =~ /\/lib\/foodsoft_.*\// end
+ add_group 'Plugins' do |s| s.filename =~ %r{/lib/foodsoft_.*/} end
end
end
diff --git a/spec/support/faker.rb b/spec/support/faker.rb
index 47441ca8..6516fa92 100644
--- a/spec/support/faker.rb
+++ b/spec/support/faker.rb
@@ -2,7 +2,7 @@ module Faker
class Unit
class << self
def unit
- ['kg', '1L', '100ml', 'piece', 'bunch', '500g'].sample
+ %w[kg 1L 100ml piece bunch 500g].sample
end
end
end
diff --git a/spec/support/integration.rb b/spec/support/integration.rb
index 26add35a..6882ac5a 100644
--- a/spec/support/integration.rb
+++ b/spec/support/integration.rb
@@ -1,4 +1,4 @@
# @see http://stackoverflow.com/a/11048669/2866660
def scrolldown
- page.execute_script "window.scrollBy(0,10000)"
+ page.execute_script 'window.scrollBy(0,10000)'
end
diff --git a/spec/support/session_helper.rb b/spec/support/session_helper.rb
index 31fb0946..1075695e 100644
--- a/spec/support/session_helper.rb
+++ b/spec/support/session_helper.rb
@@ -1,14 +1,15 @@
module SessionHelper
def login(user = nil, password = nil)
visit login_path
- user = FactoryBot.create :user if user.nil?
+ user = FactoryBot.create(:user) if user.nil?
if user.instance_of? ::User
- nick, password = user.nick, user.password
+ nick = user.nick
+ password = user.password
else
nick = user
end
- fill_in 'nick', :with => nick
- fill_in 'password', :with => password
+ fill_in 'nick', with: nick
+ fill_in 'password', with: password
find('input[type=submit]').click
end
end
diff --git a/spec/support/shared_database.rb b/spec/support/shared_database.rb
index f6c0ff0a..180877ec 100644
--- a/spec/support/shared_database.rb
+++ b/spec/support/shared_database.rb
@@ -4,7 +4,7 @@ ActiveSupport.on_load(:after_initialize) do
# But take care when designing tests using the shared database.
SharedSupplier.establish_connection Rails.env.to_sym
SharedArticle.establish_connection Rails.env.to_sym
- # hack for different structure of shared database
+ # HACK: for different structure of shared database
SharedArticle.class_eval do
belongs_to :supplier, class_name: 'SharedSupplier'
alias_attribute :number, :order_number
diff --git a/spec/swagger_helper.rb b/spec/swagger_helper.rb
index 912504b8..dbe5a912 100644
--- a/spec/swagger_helper.rb
+++ b/spec/swagger_helper.rb
@@ -32,7 +32,7 @@ RSpec.configure do |config|
currentPage: { type: :integer },
pageSize: { type: :integer }
},
- required: %w(recordCount pageCount currentPage pageSize)
+ required: %w[recordCount pageCount currentPage pageSize]
},
Order: {
type: :object,
@@ -127,7 +127,8 @@ RSpec.configure do |config|
description: 'number of units available (only present on stock articles)'
}
},
- required: %w[id name supplier_id supplier_name unit unit_quantity note manufacturer origin article_category_id]
+ required: %w[id name supplier_id supplier_name unit unit_quantity note manufacturer origin
+ article_category_id]
},
OrderArticle: {
type: :object,
@@ -396,7 +397,7 @@ RSpec.configure do |config|
description: 'link'
},
items: {
- '$ref': "#/components/schemas/Navigation"
+ '$ref': '#/components/schemas/Navigation'
}
},
required: ['name'],