Commit Graph

56549 Commits

Author SHA1 Message Date
David Taylor 1706e87e9d
DEV: clear asset cache when plugins add/remove client.*.yml files (#29468)
Our sprockets-based locale pipeline correctly `depends_on` client.*.yml files which already exist. But sprockets does not provide a way to watch for the creation of new files matching a certain path. This commit works around that limitation by adding the set of client.*.yml files to our global cache-clearing logic
2024-10-29 15:17:59 +00:00
Loïc Guitaut 2f334964f2 DEV: Remove hash-like access from service contracts
We decided to keep only one way to access values from a contract. This
patch thus removes the hash-like access from contracts.
2024-10-29 16:02:51 +01:00
Discourse Translator Bot 4d0ed2e146
Update translations (#29467) 2024-10-29 15:31:41 +01:00
David Battersby 35f441739c
UX: fix emoji alignment in chat members user status (#29466)
Improves layout of channel members list with user status emojis.
2024-10-29 17:18:09 +04:00
Loïc Guitaut c78211cf8d DEV: Make service contracts immutable
We decided to make contracts immutable once their validations have run.
Indeed, it doesn’t make a lot of sense to modify a contract value
outside the contract itself.

If processing is needed, then it should happen inside the contract
itself.
2024-10-29 12:23:35 +01:00
Jarek Radosz 6d918c6307
UX: Remove the admin menu button from expanded mobile timeline (#29464) 2024-10-29 12:12:00 +01:00
David Taylor b364a13ad3
DEV: Update dynamic component hbs syntax (#29445)
The block form of `{{#component` is not supported by Glint tooling. They recommend using this `{{#let`-based syntax to achieve the same result
2024-10-29 11:11:10 +00:00
David Taylor 336d98732d
DEV: Correct test following 7af72804 (#29463)
Looks like the test was previously asserting the broken behaviour 🤦‍♂️
2024-10-29 10:47:57 +00:00
Akshay Birajdar a1c9486e3f
FIX: Missing glimmer topic list focus actions on mobile (#29421) 2024-10-29 11:26:05 +01:00
Jarek Radosz a236e368e4
DEV: Use `helperFn` in d-presence (#29461) 2024-10-29 11:21:33 +01:00
Natalie Tay 7af728048c
FIX: Copy upon getting logged out (#29462) 2024-10-29 18:19:54 +08:00
Jarek Radosz ecdf199585
DEV: Refactor composer-/topic-presence-display (#29455)
Re-land #29262 as the d-shared-edits incompatibility has now been resolved. This reverts commit a59c07fc45.
2024-10-29 10:44:05 +01:00
Jarek Radosz ffd3500f0b
DEV: Remove unused component args (#29454) 2024-10-29 10:43:55 +01:00
chapoi 04aed79028
UX: lower copy link z-index (#29458) 2024-10-29 10:35:14 +01:00
David Battersby 7bcd46b87d
DEV: use service worker for chat sound (#29388)
This change makes use of service workers to determine if we should play chat sounds in the current browser tab. Since users can have multiple tabs open, we currently attempt to play sound across all active tabs.

With this change we iterate over all clients and check if client.focused is true (ie. the current tab/window we have open), if so we allow playing the audio in the current tab and for all other hidden tabs/windows we return false.

---------

Co-authored-by: Bianca Nenciu <nbianca@users.noreply.github.com>
2024-10-29 13:15:53 +04:00
Jordan Vidrine f902e0fdd7
UX: Look and feel changes (#29245)
This PR:

- Removes components from being displayed in the card
- Adds a DMenu to house previous footer actions
- Allows themes to be updated from this grid, with an animation and different border to show the update is happening
- Stops position of cards changing when default changes
- Fixes outline colour not changing when default changes
- Show a global notice on the page when previewing a theme
- Allows updating a theme from the grid, and showing an indicator of what theme needs to be updated
- Moves "Set as default" to the dropdown for the theme
- Show screenshot for theme if it is available
- Prevent page reloading when updating the theme
- Fixes theme install modal on grid page
- Temporarily remove sorting of default theme to the top
2024-10-29 12:25:17 +10:00
Sam 4d7f70b923
FEATURE: do not insert smart list if SHIFT+Enter is pressed (#29452)
A common pattern in the industry for bypassing smart lists is detection of
the shift key.

This information is not available in the "beforeinput" event but it always
fires afer keydown, so we track if shift is pressed on keydown.
2024-10-29 09:18:52 +10:00
Krzysztof Kotlarek 0839bce7b6
DEV: allow the plugin to register valid site setting areas (#29432)
In this PR, we defined the ability to group site settings by area - https://github.com/discourse/discourse/pull/28570

Plugins should be able to register in their own areas.
2024-10-29 09:40:31 +11:00
dependabot[bot] 4529b0614c
Build(deps-dev): Bump puppeteer-core from 23.6.0 to 23.6.1 (#29449)
Bumps [puppeteer-core](https://github.com/puppeteer/puppeteer) from 23.6.0 to 23.6.1.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/release-please-config.json)
- [Commits](https://github.com/puppeteer/puppeteer/compare/puppeteer-core-v23.6.0...puppeteer-core-v23.6.1)

---
updated-dependencies:
- dependency-name: puppeteer-core
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 23:23:30 +01:00
dependabot[bot] 0f669df43a
Build(deps): Bump nio4r from 2.7.3 to 2.7.4 (#29450)
Bumps [nio4r](https://github.com/socketry/nio4r) from 2.7.3 to 2.7.4.
- [Release notes](https://github.com/socketry/nio4r/releases)
- [Changelog](https://github.com/socketry/nio4r/blob/main/changes.md)
- [Commits](https://github.com/socketry/nio4r/compare/v2.7.3...v2.7.4)

---
updated-dependencies:
- dependency-name: nio4r
  dependency-type: indirect
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 23:22:32 +01:00
David Taylor 9230d4e7f2
DEV: Update remaining mixins to remove object-literal decorators (#29444)
These are unsupported by modern tooling (including ts/glint parsers), so we are working to remove them. The easiest path for mixins is to switch back to the mega-legacy EmberObject syntax for computed/on)
2024-10-28 19:38:52 +00:00
David Taylor 2aed7606a7
DEV: Remove final object-literal decorator from plugin-api-test (#29446) 2024-10-28 19:38:17 +00:00
Ella E. 311c042700
UX: Add description config area card (#29418)
* DEV: add a description to the config area card component

* UX: update strings and placeholders for your org config area card
2024-10-28 09:39:51 -06:00
David Taylor de16947b9b
DEV: Update emoji-picker.js to native class syntax (#29438) 2024-10-28 15:27:49 +00:00
Kris f371258b42
UX: Give ranked choice polls distinctive bullets in preview (#29439) 2024-10-28 11:10:37 -04:00
David Taylor 8ee00dcbd0
DEV: Update tests to remove/ignore classic-class uses (#29440)
In preparation for https://github.com/discourse/discourse/pull/28610
2024-10-28 15:04:29 +00:00
David Taylor 92a4b17ad8
DEV: Tweak uppy dependency config (#29436)
- Remove pnpm peerdep exception. We're now up-to-date, and the issue is resolved

- Configure Dependabot to group future updates
2024-10-28 14:18:33 +00:00
Kris ca693b53eb
UX: limit user-card focus ring to desktop (#29435) 2024-10-28 10:10:03 -04:00
David Taylor aa89acbda6
DEV: Upgrade Uppy to v4 (#29397)
Key changes include:

- `@uppy/aws-s3-multipart` is now part of `@uppy/aws-s3`, and controlled with a boolean

- Some minor changes/renames to Uppy APIs

- Uppy has removed batch signing from their S3 multipart implementation. This commit implements a batching system outside of Uppy to avoid needing one-signing-request-per-part

- Reduces concurrent part uploads to 6, because S3 uses HTTP/1.1 and browsers limit concurrent connections to 6-per-host.

- Upstream drop-target implementation has changed slightly, so we now need `pointer-events: none` on the hover element
2024-10-28 14:01:44 +00:00
dependabot[bot] 27c20eeacd
Build(deps): Bump the rails group with 6 updates (#29402)
Bumps the rails group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [actionmailer](https://github.com/rails/rails) | `7.1.4.1` | `7.1.4.2` |
| [actionpack](https://github.com/rails/rails) | `7.1.4.1` | `7.1.4.2` |
| [actionview](https://github.com/rails/rails) | `7.1.4.1` | `7.1.4.2` |
| [activerecord](https://github.com/rails/rails) | `7.1.4.1` | `7.1.4.2` |
| [activesupport](https://github.com/rails/rails) | `7.1.4.1` | `7.1.4.2` |
| [railties](https://github.com/rails/rails) | `7.1.4.1` | `7.1.4.2` |


Updates `actionmailer` from 7.1.4.1 to 7.1.4.2
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v7.2.1.2/actionmailer/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.1.4.1...v7.1.4.2)

Updates `actionpack` from 7.1.4.1 to 7.1.4.2
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v7.2.1.2/actionpack/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.1.4.1...v7.1.4.2)

Updates `actionview` from 7.1.4.1 to 7.1.4.2
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v7.2.1.2/actionview/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.1.4.1...v7.1.4.2)

Updates `activerecord` from 7.1.4.1 to 7.1.4.2
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v7.2.1.2/activerecord/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.1.4.1...v7.1.4.2)

Updates `activesupport` from 7.1.4.1 to 7.1.4.2
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v7.2.1.2/activesupport/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.1.4.1...v7.1.4.2)

Updates `railties` from 7.1.4.1 to 7.1.4.2
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v7.2.1.2/railties/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.1.4.1...v7.1.4.2)

---
updated-dependencies:
- dependency-name: actionmailer
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rails
- dependency-name: actionpack
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rails
- dependency-name: actionview
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rails
- dependency-name: activerecord
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rails
- dependency-name: activesupport
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rails
- dependency-name: railties
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: rails
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 11:07:29 +00:00
Gary Pendergast fc51233a83
DEV: Update Gemfile.lock for MacOS 15 on x86 (#29433) 2024-10-28 11:06:41 +00:00
Martin Brennan 27bdfb6437
FEATURE: Add user preference to disable smart lists (#29434)
Followup 30fdd7738e

Adds a new site setting and corresponding user preference
to disable smart lists. By default they are enabled, because
this is a better experience for most users. A small number of
users would prefer to not have this enabled.

Smart lists automatically append new items to each
list started in the composer when enter is pressed. If
enter is pressed on an empty list item, it is cleared.

This setting will be removed when the new composer is complete.
2024-10-28 14:18:15 +10:00
Martin Brennan 456fbb1dbf
FEATURE: Allow themes to define screenshots (#29079)
This commit allows themes to define up to 2 screenshots
in about.json. These should be paths within the theme's
git repository, images with a 1MB max file size and max width 3840x2160.

These screenshots will be downloaded and stored against a theme
field, and we will use these in the redesigned theme grid UI.

These screenshots will be updated when the theme is updated
in the same way the additional theme files are.

For now this is gated behind a hidden `theme_download_screenshots`
site setting, to allow us to test this on a small number of sites without
making other sites make unnecessary uploads.

**Future considerations:**

* We may want to have a specialized naming system for screenshots. E.g. having light.png/dark.png/some_palette.png
* We may want to show more than one screenshot for the theme, maybe in a carousel or reacting to dark mode or color palette changes
* We may want to allow clicking on the theme screenshot to show a lightbox
* We may want to make an optimized thumbnail image for the theme grid

---------

Co-authored-by: Ted Johansson <ted@discourse.org>
2024-10-28 10:10:20 +10:00
Martin Brennan 77f63a45d3
FIX: Use site contact user + group for Revise... review action (#29271)
Followup 9762e65758

When we added the Revise... option for posts/new topics
in the review queue, which sends a PM to the user, we used
`SystemMessage.create_from_system_user`, which always sends
the PM from the system user. However, this makes it so if the
user replies to the PM, which they are encouraged to do,
no one will see it unless they actively monitor the system inbox.

This commit changes it so `SystemMessage.create` is used,
which uses the `site_contact_username` and `site_contact_group`
site settings as participants in the sent PM. Then, when the
user replies, it will send to that inbox instead.

If `site_contact_username` is blank, the system user is used.
2024-10-28 09:40:10 +10:00
dependabot[bot] 2db23fd871
Build(deps): Bump json from 2.7.3 to 2.7.4 (#29431)
Bumps [json](https://github.com/ruby/json) from 2.7.3 to 2.7.4.
- [Release notes](https://github.com/ruby/json/releases)
- [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md)
- [Commits](https://github.com/ruby/json/compare/v2.7.3...v2.7.4)

---
updated-dependencies:
- dependency-name: json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 00:09:17 +01:00
dependabot[bot] 3ff453fdf1
Build(deps-dev): Bump @swc/core from 1.7.39 to 1.7.40 (#29424)
Bumps [@swc/core](https://github.com/swc-project/swc) from 1.7.39 to 1.7.40.
- [Release notes](https://github.com/swc-project/swc/releases)
- [Changelog](https://github.com/swc-project/swc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/swc-project/swc/compare/v1.7.39...v1.7.40)

---
updated-dependencies:
- dependency-name: "@swc/core"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 00:09:10 +01:00
dependabot[bot] 49180d514f
Build(deps-dev): Bump jsuites from 5.6.5 to 5.6.6 (#29429)
Bumps [jsuites](https://github.com/jsuites/jsuites) from 5.6.5 to 5.6.6.
- [Release notes](https://github.com/jsuites/jsuites/releases)
- [Changelog](https://github.com/jsuites/jsuites/blob/master/changelog.md)
- [Commits](https://github.com/jsuites/jsuites/commits)

---
updated-dependencies:
- dependency-name: jsuites
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 00:09:03 +01:00
dependabot[bot] f06e850c24
Build(deps): Bump loofah from 2.23.0 to 2.23.1 (#29428)
Bumps [loofah](https://github.com/flavorjones/loofah) from 2.23.0 to 2.23.1.
- [Release notes](https://github.com/flavorjones/loofah/releases)
- [Changelog](https://github.com/flavorjones/loofah/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flavorjones/loofah/compare/v2.23.0...v2.23.1)

---
updated-dependencies:
- dependency-name: loofah
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 00:08:51 +01:00
dependabot[bot] aa80d1f4e8
Build(deps-dev): Bump rubocop-discourse from 3.8.2 to 3.8.3 (#29422)
Bumps [rubocop-discourse](https://github.com/discourse/rubocop-discourse) from 3.8.2 to 3.8.3.
- [Commits](https://github.com/discourse/rubocop-discourse/compare/v3.8.2...v3.8.3)

---
updated-dependencies:
- dependency-name: rubocop-discourse
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 23:23:41 +01:00
dependabot[bot] 5e2cdcef64
Build(deps-dev): Bump rubocop-rails from 2.26.2 to 2.27.0 (#29430)
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.26.2 to 2.27.0.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.26.2...v2.27.0)

---
updated-dependencies:
- dependency-name: rubocop-rails
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 23:23:33 +01:00
dependabot[bot] 2809cf1c4d
Build(deps-dev): Bump @ember/optional-features from 2.1.0 to 2.2.0 (#29427)
Bumps [@ember/optional-features](https://github.com/emberjs/ember-optional-features) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/emberjs/ember-optional-features/releases)
- [Changelog](https://github.com/emberjs/ember-optional-features/blob/master/CHANGELOG.md)
- [Commits](https://github.com/emberjs/ember-optional-features/commits)

---
updated-dependencies:
- dependency-name: "@ember/optional-features"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 23:20:31 +01:00
dependabot[bot] bbf5cf3371
Build(deps-dev): Bump rubocop-rspec from 3.1.0 to 3.2.0 (#29426)
Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/rubocop/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rspec/compare/v3.1.0...v3.2.0)

---
updated-dependencies:
- dependency-name: rubocop-rspec
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 23:20:04 +01:00
dependabot[bot] 7c56117207
Build(deps): Bump @faker-js/faker from 9.0.3 to 9.1.0 (#29425)
Bumps [@faker-js/faker](https://github.com/faker-js/faker) from 9.0.3 to 9.1.0.
- [Release notes](https://github.com/faker-js/faker/releases)
- [Changelog](https://github.com/faker-js/faker/blob/next/CHANGELOG.md)
- [Commits](https://github.com/faker-js/faker/compare/v9.0.3...v9.1.0)

---
updated-dependencies:
- dependency-name: "@faker-js/faker"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 23:19:51 +01:00
dependabot[bot] 0108e7048a
Build(deps): Bump the babel group with 2 updates (#29423)
Bumps the babel group with 2 updates: [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) and [@babel/standalone](https://github.com/babel/babel/tree/HEAD/packages/babel-standalone).


Updates `@babel/core` from 7.25.9 to 7.26.0
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.0/packages/babel-core)

Updates `@babel/standalone` from 7.25.9 to 7.26.1
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.1/packages/babel-standalone)

---
updated-dependencies:
- dependency-name: "@babel/core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: babel
- dependency-name: "@babel/standalone"
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: babel
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 23:06:49 +01:00
Isaac Janzen 1d2b6dbb01
DEV: Add `disableDefaultKeyboardShortcuts` plugin API to disable default keyboard shortcuts (#29401)
# Context

Add `disableDefaultKeyboardShortcuts` function to the plugin API to allow for disabling [default bindings](e4941278b2/app/assets/javascripts/discourse/app/lib/keyboard-shortcuts.js (L49)). 

# Details
This function is used to disable a "default" keyboard shortcut. You can pass an array of shortcut bindings as strings to disable them.

**Please note that this function must be called from a pre-initializer.**

Example:
```js
api.disableDefaultKeyboardShortcuts(['command+f', 'shift+c']);
```

- Added system spec, displaying intended behavior
2024-10-25 14:14:04 -05:00
Kris 74bb520877
A11Y: fix and improve user card accessibility (#29399) 2024-10-25 12:43:43 -04:00
Ella E. 92cd2818ad
UX: Update /about config page copy (#29387)
* UX: Update formkit description copy

* UX: Remove unused string
2024-10-25 09:54:28 -06:00
David Taylor 3076b6e8d2
PERF: Update `maybeContinueList` to avoid replacing the entire post (#29416)
Using execCommand to replace the entire contents of the textarea is very slow for larger posts (it seems the browser does a reflow after every 'virtual keypress').

This commit updates the `maybeContinueList()` function to be more surgical when removing the bullet. Now it only selects & removes the characters which actually need to be deleted

Similar to a7cd220704
2024-10-25 16:37:09 +01:00
Jan Cernik 5b7df76248
DEV: Fix flaky signup spec with invite codes (#29415) 2024-10-25 10:15:18 -03:00
Loïc Guitaut 584424594e DEV: Replace `params` by the contract object in services
This patch replaces the parameters provided to a service through
`params` by the contract object.

That way, it allows better consistency when accessing input params. For
example, if you have a service without a contract, to access a
parameter, you need to use `params[:my_parameter]`. But with a contract,
you do this through `contract.my_parameter`. Now, with this patch,
you’ll be able to access it through `params.my_parameter` or
`params[:my_parameter]`.

Some methods have been added to the contract object to better mimic a
Hash. That way, when accessing/using `params`, you don’t have to think
too much about it:
- `params.my_key` is also accessible through `params[:my_key]`.
- `params.my_key = value` can also be done through `params[:my_key] =
  value`.
- `#slice` and `#merge` are available.
- `#to_hash` has been implemented, so the contract object will be
  automatically cast as a hash by Ruby depending on the context. For
  example, with an AR model, you can do this: `user.update(**params)`.
2024-10-25 14:48:34 +02:00