Commit graph

10562 commits

Author SHA1 Message Date
Jeremy Friesen
5b10addbb4
Tidying up and documenting Tag model (#15949)
* Tidying up and documenting Tag model

Prior to this commit we had a custom `where(alias_for: [nil, ""])`
call.  That call highlighted that we lacked a term for a Tag that was
not an alias.  As part of this commit, I named that a "concrete" tag.

Further, I added scopes to assist in helping "name" those concepts.

This commit also adds a data migration and utilization of
StringAttributeCleaner to hopefully get away from `alias_for == ""`
situations.

As of writing this commit <2022-01-04 Tue 17:22 UTC>, in DEV.to we had 5
tags with `alias_for == ""`:

- actionshackathon21
- regex
- atlashackathon
- hotwire
- foremfest

In https://dev.to/admin/blazer I ran the following:

```sql
SELECT name FROM tags WHERE alias_for = ''
```

* Renaming concrete to direct
2022-01-07 09:14:31 -05:00
Zoey Zheng
775bdb7810
Add individual forem name to flag user modal (#15505)
Co-authored-by: Suzanne Aitchison <suzanne@forem.com>
2022-01-07 09:59:53 +07:00
Ben Halpern
723f9f22c0
Fix goal conversion field test typo (#15985)
* Fix goal conversion field test typo

* Fix typo in test too

* Undo testing word change
2022-01-06 16:34:36 -05:00
Arit Amana
a2155464e7
complete implementation and tests (#15977) 2022-01-06 15:49:35 -05:00
Julianna Tetreault
f296b1db00
Add Logo Size Requirements to the Creator Settings Form (#15965)
* Adds logo size requirements to the Creator Settings form

* Update app/views/admin/shared/_logo_upload.html.erb
2022-01-06 12:30:06 -07:00
dependabot[bot]
daa2978cc5
Bump oj from 3.13.10 to 3.13.11 (#15981)
Bumps [oj](https://github.com/ohler55/oj) from 3.13.10 to 3.13.11.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.13.10...v3.13.11)

---
updated-dependencies:
- dependency-name: oj
  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>
2022-01-06 12:31:21 -06:00
Daniel Uber
e7aaa57586
Remove extra faraday install from travis config (#15979)
* We no longer need to manually install faraday 1.8.0 as a work-around

Faraday 2.0.1 re-introduces the default adapter (net_http), which
makes the prior work around (installing faraday 1.8 prior to
installing dpl, preventing it from bringing in 2.0.0 as the current
release).

There's currently a related dependency issue where a circular
dependency between dpl, faraday, and faraday-patron was causing deploy
failures (faraday-patron requiring faraday 2.0.x but we had
specified otherwise).

Remove the temporary shim to enable travis heroku deploys, and let
their team manage that.

* No longer require faraday before install

This was a first attempt to address the deploy issue, but failed. It
installed faraday in the target ruby version 3, while travis was
installing the conflicting package dpl in their travis internal ruby
version.

Safe to remove.
2022-01-06 12:30:20 -06:00
Jeremy Friesen
bde5064c9c
Skip google analytics when ga_tracking_id is nil (#15967)
* Skip google analytics when ga_tracking_id is nil

This commit involves short-circuiting Google Analytics calls when the
Forem has not configured a `Settings::General.ga_tracking_id`.  Note,
depending on your local `.env` file (or configured ENV variables) you
may have a `GA_TRACKING_ID` value set; I did, it was set to "Optional"
which overrode the database setting.

We set the HTML data properites in two places: [admin.html.erb][1] and
[application.html.erb][2].

In addition, I'm short-circuiting the local fallback analytics call (via
[Stacato][https://github.com/tpitale/staccato]).  My understanding of
Stacato, based on a cursory read, requires a Google Analytics Tracking
ID to work.

And last, we have a one off of javascript for Google Analytics tracking.

This closes #15962.

[1]:528bd2baa6/app/views/layouts/admin.html.erb (L31)
[2]:528bd2baa6/app/views/layouts/application.html.erb (L55)

How to test?

- Check your .env file to see if you have set GA_TRACKING_ID.  If so,
  unset it.
- Start with a fresh Forem instance.

- Open your browser and open the developer tools to inspect the Network
  activity.
- Open the homepage of your local Forem instance (http://localhost:3000)
- Filter your Network results for analytics.  You shouldn't see any.

Also, make sure you're disabling any blockers you might have as that
influences things.

* Commenting out GA_TRACKING_ID

Related to https://github.com/forem/forem/pull/15967

* Favor empty GA_TRACKING_ID env variable
2022-01-06 12:21:07 -05:00
Daniel Uber
7139bfd824
We no longer need to manually install faraday 1.8.0 as a work-around (#15976)
Faraday 2.0.1 re-introduces the default adapter (net_http), which
makes the prior work around (installing faraday 1.8 prior to
installing dpl, preventing it from bringing in 2.0.0 as the current
release).

There's currently a related dependency issue where a circular
dependency between dpl, faraday, and faraday-patron was causing deploy
failures (faraday-patron requiring faraday 2.0.x but we had
specified otherwise).

Remove the temporary shim to enable travis heroku deploys, and let
their team manage that.
2022-01-06 10:52:36 -06:00
Daniel Uber
acbdfe5df3
Change contact page to open feature requests as discussions (#15975)
fixes #15973
2022-01-06 10:03:34 -06:00
dependabot[bot]
b991c31478
Bump acts-as-taggable-on from 8.1.0 to 9.0.0 (#15963)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-06 09:51:44 -06:00
Michael Kohl
1c80304fd5
Remove htmlentities gem (#15958) 2022-01-06 21:14:32 +07:00
Arit Amana
46e6e44076
Implement TwitchTV Unified Embed (#15968)
* still building

* complete twitch unifiedembed implementation

* quick youtube regexp fix

* add some documentation
2022-01-05 18:27:46 -05:00
dependabot[bot]
9fb1899e7e
Bump blazer from 2.4.8 to 2.5.0 (#15964)
Bumps [blazer](https://github.com/ankane/blazer) from 2.4.8 to 2.5.0.
- [Release notes](https://github.com/ankane/blazer/releases)
- [Changelog](https://github.com/ankane/blazer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ankane/blazer/compare/v2.4.8...v2.5.0)

---
updated-dependencies:
- dependency-name: blazer
  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>
2022-01-05 14:22:13 -05:00
dependabot[bot]
8bf2b56e42
Bump eslint from 7.32.0 to 8.6.0 (#15926) 2022-01-05 13:47:40 -05:00
Fernando Valverde
a26c86ec9e
Update deliver worker conflict strategy (#15961) 2022-01-05 11:48:22 -06:00
Suzanne Aitchison
528bd2baa6
Tag autocomplete: storybook multi-select autocomplete component (#15796)
* core functionality in place

* fix dark theme background issues

* separate list for aria-live, add delete and blur functionality

* fix issue with input resize on edit

* handle input blur, prevent special characters, tweak keyup to keydown to ensure runs before change event

* group buttons and add default styles

* style tweaks

* fix logic error with insert index

* refactors

* clear suggestions on blur, even if no input value

* tweaks
2022-01-05 15:01:07 +00:00
Jeremy Friesen
b56ae3acbb
Extracting constants and tidying tests (#15946)
Prior to this commit, we had a couple of references to magic strings
regarding DisplayAdEvent objects.  This commit seeks to consolidate that
behavior.

In a handful of cases we had javascript variables, but as these JS files
are `erb` templates, we can inject the constant as well.  This reduces
repetition of knowledge.
2022-01-05 09:19:39 -05:00
zeotuan
59eea24244
add missing unique key to fragment created with map (#14395)
* add missing unique key to fragment created with map

* add appropriate key for fragment

* Remove files removed from main

* After merge cleanup

Co-authored-by: Michael Kohl <me@citizen428.net>
2022-01-05 11:07:33 +00:00
Suzanne Aitchison
228834596a
Add Storybook entry for tag suggestion item (#15811)
* Add UI template for tag suggestion

handle long tag names on small screens

* update hover background
2022-01-05 07:51:44 +00:00
Suzanne Aitchison
54eaee899e
Update tag search and suggest (#15810)
* add needed fields to tag search

* specs

* add badge to tags suggest response (#15840)

* Add badge to tags suggest response

* Update tags_spec.rb

Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com>

* limit tag search badge to only badge_image

* only unpack badge image if badge exists

Co-authored-by: Dwight Scott <dwight@forem.com>
Co-authored-by: Jeremy Friesen <jeremy.n.friesen@gmail.com>
2022-01-05 07:51:17 +00:00
Michael Kohl
f67fbb1a7e
Remove redis-rails gem (#15944) 2022-01-05 10:54:07 +07:00
Arit Amana
4e8cd50952
require tag (#15955) 2022-01-04 20:51:21 -05:00
Daniel Uber
3238fd40e6
Stop removing canvas files from cache (#15953)
This was part of the node 16 upgrade and is no longer helpful
2022-01-04 16:12:59 -06:00
Daniel Uber
6b85197f5f
Work around travis deploy (take two) (#15952)
* Add faraday 1.8.0 before deploying

Does before_install run (we only skip install) successfully?

* Install faraday 1.8 in travis's ruby, not ours
2022-01-04 14:56:42 -06:00
Daniel Uber
6e957ec4ec
Add faraday 1.8.0 before deploying (#15951)
Does before_install run (we only skip install) successfully?
2022-01-04 14:05:41 -06:00
Ben Halpern
c5e57f71b3
Update precision config on field test dashboard (#15947) 2022-01-04 14:06:13 -05:00
dependabot[bot]
72bb284ba7
Bump lint-staged from 12.1.4 to 12.1.5 (#15943)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 12.1.4 to 12.1.5.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v12.1.4...v12.1.5)

---
updated-dependencies:
- dependency-name: lint-staged
  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>
2022-01-04 06:58:56 -07:00
dependabot[bot]
66add0262f
Bump @babel/plugin-transform-react-jsx from 7.16.5 to 7.16.7 (#15931)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-04 11:56:41 +07:00
Michael Kohl
ec9a5adcb5
Remove store_attribute gem (#15923) 2022-01-04 11:15:57 +07:00
Daniel Uber
349ba97a5e
Send custom user agent string when fetching feeds (#15942)
* Send custom user agent string when fetching feeds

dev.to blocks access to the feeds for user agent "Ruby"

Use "Forem Feeds Import" as alternate user agent when fetching feeds.

fixes https://github.com/forem/forem/issues/15939

* Update app/services/feeds/import.rb

Co-authored-by: Michael Kohl <citizen428@forem.com>

Co-authored-by: Michael Kohl <citizen428@forem.com>
2022-01-03 22:09:24 -06:00
dependabot[bot]
d737d9371d
Bump prop-types from 15.7.2 to 15.8.0 (#15934)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-04 10:54:50 +07:00
dependabot[bot]
a168701bb3
Bump eslint-plugin-import from 2.25.3 to 2.25.4 (#15941)
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.25.3 to 2.25.4.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.25.3...v2.25.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  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>
2022-01-03 16:56:54 -05:00
Andy George
e3d872621a
use newly-built Fedora-35-based quay.io/forem/ruby:3.0.2 container (#15938) 2022-01-03 15:31:42 -06:00
dependabot[bot]
954a9fc870
Bump autoprefixer from 10.4.0 to 10.4.1 (#15936)
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.0 to 10.4.1.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.0...10.4.1)

---
updated-dependencies:
- dependency-name: autoprefixer
  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>
2022-01-03 16:16:55 -05:00
dependabot[bot]
419f585d5e
Bump core-js from 3.20.1 to 3.20.2 (#15937)
Bumps [core-js](https://github.com/zloirock/core-js) from 3.20.1 to 3.20.2.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.20.1...v3.20.2)

---
updated-dependencies:
- dependency-name: core-js
  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>
2022-01-03 16:14:08 -05:00
dependabot[bot]
c24067395e
Bump sass from 1.45.1 to 1.45.2 (#15927)
Bumps [sass](https://github.com/sass/dart-sass) from 1.45.1 to 1.45.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.45.1...1.45.2)

---
updated-dependencies:
- dependency-name: sass
  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>
2022-01-03 15:27:55 -05:00
dependabot[bot]
04a8865938
Bump rubocop-performance from 1.13.0 to 1.13.1 (#15932)
Bumps [rubocop-performance](https://github.com/rubocop/rubocop-performance) from 1.13.0 to 1.13.1.
- [Release notes](https://github.com/rubocop/rubocop-performance/releases)
- [Changelog](https://github.com/rubocop/rubocop-performance/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-performance/compare/v1.13.0...v1.13.1)

---
updated-dependencies:
- dependency-name: rubocop-performance
  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>
2022-01-03 15:27:30 -05:00
dependabot[bot]
62c528e2c3
Bump @babel/core from 7.16.5 to 7.16.7 (#15935)
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.16.5 to 7.16.7.
- [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.16.7/packages/babel-core)

---
updated-dependencies:
- dependency-name: "@babel/core"
  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>
2022-01-03 15:26:40 -05:00
dependabot[bot]
381cdf0e18
Bump feedjira from 3.2.0 to 3.2.1 (#15930)
Bumps [feedjira](https://github.com/feedjira/feedjira) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/feedjira/feedjira/releases)
- [Changelog](https://github.com/feedjira/feedjira/blob/main/CHANGELOG.md)
- [Commits](https://github.com/feedjira/feedjira/compare/v3.2.0...v3.2.1)

---
updated-dependencies:
- dependency-name: feedjira
  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>
2022-01-03 15:25:53 -05:00
Jeremy Friesen
6269aa4108
Proposing a new feed experiment (#15789)
* Proposing a new feed experiment

This commit involves tweaking a few subtle aspects of the challenger:

1) Remove the sort by published date on the relevance score.  The
   articles will now be listed in the order of perceived relevance.
2) Disable a few levers that did little.  There really aren't any
   `articles.featured = true` articles in the database.
3) Gently increase the weight of each comment in a linear manner.
4) Give a little more weight to posts that don't have followed tags.

In addition, it involves renaming the conversions to better convey their
implementation.  This renaming helps create more descriptive labels for
the test results at `/admin/abtests`.

This commit also adds logic to repurpose the AbExperiment feed_strategy
logic; I envision adjusting the weighted feed strategy levers with some
frequency.

Per discussions, I'm also disabling the "not logged in" feed testing.
We'll use the LargeForemExperimental for this.

* Flipping attribute name to positive

Mentally "not disabled" is harder to parse than "enabled".  This change
helps with setting an optimistic attribute.

* Bump for travis

* Bump for travis

* Removing file committed by mistake

* Extracting method
2022-01-03 14:38:14 -05:00
Jeremy Friesen
72b89aa57c
Updating documentation for LiquidTagBase (#15933)
In addition adding a Rubocop auto-update.
2022-01-03 14:34:37 -05:00
dependabot[bot]
bb17094e6b
Bump @babel/preset-env from 7.16.5 to 7.16.7 (#15928)
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.16.5 to 7.16.7.
- [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.16.7/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  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>
2022-01-03 11:29:15 -07:00
dependabot[bot]
0d252a09fb
Bump core-js from 3.20.0 to 3.20.1 (#15899)
Bumps [core-js](https://github.com/zloirock/core-js) from 3.20.0 to 3.20.1.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.20.0...v3.20.1)

---
updated-dependencies:
- dependency-name: core-js
  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>
2022-01-03 10:35:59 -07:00
Daniel Uber
d03da33ac3
Update to node version 16 (#15522)
* update to node version 16

* Remove canvas compiled node objects

* use f35 testing image as builder/base

* Update production builder base image to use Fedora 35

I missed this (it's not immediately obvious that there are 2 base
images declared in this file, one called builder, one called
production, this seems like it could be refactored to lift that
out (give it a name, a cmd, and do nothing else) `as base` perhaps,
while keeping separate install processes for testing- and pr-/production images.

* Add libpq dependency in production

We need this (if not the -devel header file, at least the library) to
start pg_ext.so

I think this might have been working because of the --cache-from
options when building in the build container script?

* Update .gitpod.dockerfile

* Add temporary cleanup for upgrade to bin/setup

This has the undesirable effect of requiring a yarn reinstall.

It would be better if there were a smart check to confirm the version
of the canvas.node file matched the node version or did not (so we
only do this as needed, rather than on every setup invocation until
this is removed from the code).

* Use check-files rather than force when rebuilding canvas

Optimal situation would be a `rebuild` command in yarn (I believe npm
has this option) to recompile canvas (all that's needed) rather than
fetch, install, and build.

Co-authored-by: Michael Kohl <me@citizen428.net>
2022-01-03 10:23:07 -06:00
Michael Kohl
7326744313
Remove Storext gem (#15907) 2022-01-03 22:21:04 +07:00
Michael Kohl
466f111712
Remove sign in/up link from navlinks (#15922)
* Remove sign in/up link from navlinks

* Remove translations

* Update spec
2022-01-03 22:20:29 +07:00
dependabot[bot]
fbd733d8e0
Bump rubocop from 1.24.0 to 1.24.1 (#15915)
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.24.0 to 1.24.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.24.0...v1.24.1)

---
updated-dependencies:
- dependency-name: rubocop
  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>
2022-01-03 09:38:49 -05:00
Derek Crosson
ae27d15be7
Prevent whitespace unicode characters from being used in article title and tag (#14909)
* test: whitespace unicode characters cannot be used as titles or tags

* feat: add localized error message

* refactor: use localized error message

* fix: whitespace unicode characters cannot be used as titles or tags

* chore: fix locale after merge

* refactor: fix indentation

* Fix spelling of prohibited in method names

Additionally, rubocop removed a redundant user_id validation since
Article belongs to user.

* Fix spelling

Missed one method call on the same line (fixed the first of two
instances needing changes)

* add failing test cases

The reorganization to remove let was due to a limit on nesting rspec
contexts (it inside context inside describe inside describe when
trying to use different titles in let blocks in contexts)

The first test was clarified (the "U+202D" string that looks like the
code for a unicode point is valid, but the character \u202d is
expected to be invalid

The remaining two tests are based on the feedback I'd given in the PR,
failing because we don't assert title is present after removing
unicode whitespace, and we don't actually set the title (gsub is
non-destructive, returning a value).

* Set title to sanitized title

contains_prohibitied_unicode_characters? was using == (which is not a
good match for strings to regexes), use =~ instead

Change invalid example characters in titles from \u202d (bidi override) to
\u200a (hair space)

Assert that the empty title is blank and can't be blank (even though
it contains no prohibitd characters after replacement)

* change the definition of prohibited characters

From the description, it looks like "unicode space characters" was the
desired rejection set. It was unclear what the existing regex was
matching on (I couldn't get the expected examples to match correctly).

Given the intent, I select "unicode space property, except the ascii
space character", which may _also_ be incorrect but passed the tests.

* Remove now-invalid expectation for presence of user id

Since this was redundant (belongs_to user), we no longer will validate
presence of user id, and we should not test for it.

* Only reject bidirectional text controls

The original issue pointed to the BIDI controls as problematic.

While they called out other "whitespace" characters, as we accept a
wider range of input languages, the need to handle non-printing
punctuation (for example a group separating space for some asian
languages).

It's possible a wider list of characters should be added - if that's
the case I suggest this regex and the sanitization be moved to a
standalone class, and each of the recommendations in
https://www.w3.org/TR/unicode-xml/#Charlist be checked for
applicability.

* Check for blank title after sanitizing disallowed characters

Since validate_title modifies the title, and doesn't set error
messages on the model itself, check for non-empty title _after_
potentially removing any disallowed characters.

* Remove invalid characters before validation

Remove the validate_title and contains_prohibited_characters methods,
and center all logic on the remove prohibitied unicode characters
method.

Remove unneeded and unused arguments (input string is always title,
replacement is always removal/empty string).

* handle case when validating null title

If the title's nil, we don't want to call match? since it will fail.

Title will sometimes be nil when validating.

Co-authored-by: Ben Halpern <bendhalpern@gmail.com>
Co-authored-by: Dan Uber <dan@forem.com>
2022-01-03 09:37:03 -05:00
Jeremy Friesen
5430c2e203
Refactoring and documenting class (#15849)
* Refactoring and documenting class

I came to this commit by looking for raw `where` method calls to the
Article object.  Originally, I was looking at `where.not(user_id: :id)`
but found this service class.

In this class, I saw some significant duplication and went with a bit of
refactoring and some documentation.

This refactoring removed some unnecessary guards and calculations (as
documented inline).

* Naming a constant and adding more documentation
2022-01-03 09:30:41 -05:00