* Introduce domain model for campaigns
* Move main_tag method to decorator
* Add options argument to decorator method
* Change more code to use Campaign domain model
* active? -> show_in_sidebar? and fix spec
* Switch back to leading dots after merge
* Add polymorphism to Broadcasts table
- Adds a broadcastable_id column to Broadcasts
- Adds a broadcastable_type column to Broadcasts
* Create Announcements and Welcome Notifications tables
- Adds an Announcements table
- Adds a Welcome Notifications table
- Adds timestamps to both tables
- Adds banner_style column to Announcements table
* Adds Announcement and Welcome Notification models
- Adds an Announcement model in prep for polymorphism
- Adds a WelcomeNotification model in prep for polymorphism
* Add data_update script to backfill type_of column for Broadcasts
* Add unique index on broadcastable_type and broadcastable_id on the Broadcasts table
* Add update! to the data_update script to backfill broadcastable_type
* chore: make the icons dynamic from site config
* feat: update the navbar icons
* feat: update the descriptions
* chore: update the icons
* chore: update the names to be more reflective
* chore: freeze mutable objects assigned to constants
* chore: update Line is too long.
* icons
* update lightning icon
* chore: read from file
* path here is relative, so use Rails root
* revert to original icons and run svgo on it
* no newline
* feat: update height, width
* Create new restriced_liquid_tag role
* Update role spec
* Use new role over admin
* Add documentation for user_subscription_liquid_tag
* Stub roles to help avoid flaky specs
* Add user approved liquid tags to edit view
* Remove "simply". Coding is hard, yo!
* Update liquid_help
* Update liquid help
* Update and refactor dashboard specs
* Refactor role check for liquid tag docs
* Improve docs wording
* Refactor controller validations to model
* Update specs and move current email validation back
* Refactor #subscribed
* Cleanup UserSubscriptions::Create service
* Refactor service
* Move source inside of call for clarity
* Specs for UserSubscription::Create
* Cleanup spec
* Fix Article spec
* Updated for subscriber_email
* Add comment for explicitness of subscriber_email
* Fix reference in comment...oops!
* I know what I'm doing...sometimes...maybe
* Rename CachChecker - Subscription to IsSubscribed
* Use include vs eq in specs for error messages
* attr_accessor --> attr_reader
* Don't explicitly set nil
* Rename Create service to CreateFromService
* Use errors_as_sentence
* Rename service to CreateFromControllerParams
* Assign Struct to a new constant
* Stop allowing accented characters in tags
This commit will add strict frontend and backend validation for tags
disallowing accented characters.
* Update tags validation error message
* Add more character sets to tag validation spec
* Make liquid tags adhere to context and permission
* Undo updates to all liquid tags and update error
* ACTUALLY update errors this time
* Typo
* Refactor error handling and add support for Comment
* Fix specs
* Code cleanup
* Prettify error message
* Add comment clarifying error
* parsed --> parse
* Use a policy for validating roles
* Fix pretty error message
* Return early if valid source
* Get rid of duplicate current_user
* Add comment to Pundit.authorize
* LiquidTagPolicy specs
* Update liquid tag docs
* Update docs
* Use parse_context argument for clarity
* Remove duplicate guard clause for VALID_ROLES
* Update docs
* Create "blank" EmailSubscriptionTag
* Refactor liquid_tags_used with spec
* Create /user_subscriptions#create
- Update liquid tag name to UserSubscriptionTag
* Add rate limiting and specs
* Add counter_culture for user_subscriptions
* Update /async_info/base_data
- Alphabetize user_data
- Add email
- Add subscription_source_article_ids
- Cache subscription_source_article_ids on User model
* Add stale email check and specs
* Change user_email to subscriber_email for clarity
* Restrict UserSubscriptionTag
* Rename RESTRICTED_TAGS to RESTRICTED_LIQUID_TAGS
* Make TODO comment more clear
* Refactor error responses and update specs
* Update type to source_type in error message
* Use constantize over safe_constantize
* Add check for active source
* Refactor checking of current_user's subscriptions
- Remove data from async_info
- Create a new service to fetch/cache a user's existing subscriptions
* Restrict email in base_data to admin roles
* Oops! Rename liquid tag file
* Change error back to result...oops!
* It's not goodbye, it's see you later. RIP email :/
* Add current_email to /user_subscriptions/base_data
* Revert adding current_email
* Undo async_info_controller changes/fix conflict
* Move params to constant
* Refactor SubscriptionCacheChecker
* Remove duplicate status code in JSON response
* Remove duplicate status code for #subscribed
* Use response.parsed_body
* Remove user guard in SubscriptionCacheChecker
* Set up ahoy gem, add ahoy-js
* Import ahoy.js into base.js.erb
* Add trackNotification function to notifications/index.html.erb
* Add sanitized_broadcast_id helper
* Use sanitized_broadcast_id in broadcast partial
* Add specs around tracking welcome notifications
* Remove optional fields from Ahoy::Visit migration + table
* Fiddle with trait to see if it helps with CI failures
* Disable geocode tracking in ahoy
* Stub out SiteConfig in notifications page spec
* Add migrations for subscriber_email column
* Add new schema
* Update relationships, specs, and factory
* Use unless index_exists? over if !index_exists?
* Fix typo in last fix for migration
* Rename authored_user_subscriptions
- to source_authored_user_subcriptions
* Add factory methods and specs
- UserSubscription.make
- UserSubscription.make_new
- Article.new_user_subscription
- Article.create_user_subscription
* Remove self and &
* Change make_new to build
* new_user_subscription --> build_user_subscription
* Come on, Travis
* Add last_active_at datetime to Broadcasts table
* Add last_active_at to Broadcast index view
* Add callback to Broadcast.rb to update last_active_at
* Add a data_update script to backfill the last_active_at column on the Broadcasts table
* Add a spec for updating the last_active_at timestamp in models/broadcast_spec.rb
* Format last_active_at timestamp via strftime in index.html.erb
* Remove data_update_script: backfill_last_active_at_for_broadcasts
* Remove ActiveRecord::Dirty method from broadcast.rb
* Adjust callback in broadcast.rb and last_active_at timestamp format in index.html.erb
* Adjust time in #update_last_active_at and add the safe navigation operator to index.html.erb
* Accounts for nil last_active_at values in the view
* Uses Time.current in place of Time.zone.now
* Remove last_active_at param from Broadcasts::Controller
* Add spec to broadcasts_spec.rb to test the updated attribute via a request
* Adjust current_time in broadcasts_spec.rb
* Adjust Timecop.freeze in broadcasts_spec.rb to resolve Travis faliure (fingers crossed)
* Adjust expectation to compare against last_active_at timestamp rather than current time
* Adds Timecop back and stores last_active_at timestamp to test against
* Rename last_active_at to active_status_updated_at on Broadcasts table
- Renames last_active_at to active_status_updated_at in specs
- Renames last_active_at to active_status_updated_at in model
- Renames last_active_at to active_status_updated_at in view
- Adjusts spelling in spec descriptions
- Rewords active_status_updated_at in view to Last Active On