No release in over a year
immosquare Cookies Consent Banner allows Rails developers to effortlessly integrate a GDPR-compliant cookie consent prompt into their web applications. With built-in internationalization support and options to customize the banner's appearance and text, it offers a flexible and user-friendly solution for obtaining user consent.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies
 Project Readme

🍪 immosquare-cookies

A modern, GDPR-compliant cookie consent banner for Rails applications

Easily integrate a customizable, fully-featured cookie consent banner in your Ruby on Rails application. Built with modern web standards, responsive design, and complete GDPR compliance in mind.

Demo

✨ Features

  • 🌍 Multi-language support - 8 languages built-in (FR, EN, ES, NL, PL, IT, ZH, ZH-TW)
  • 🎨 Modern responsive design - Clean, accessible UI that works on all devices
  • 🍪 Smart cookie management - Automatically remove specific cookies when consent is refused
  • ⚙️ Highly customizable - Customize text, links, duration, and appearance
  • 🚀 Zero dependencies - Pure JavaScript, no external libraries required
  • Turbo Drive compatible - Works seamlessly with Hotwire/Turbo navigation
  • 📱 Mobile optimized - Touch-friendly interface with responsive breakpoints

Quick Start

gem "immosquare-cookies"

Add to your layout or view:

<%= render("immosquare-cookies/consent_banner") %>

📦 Installation

Rails 6+ with modern bundling

For modern Rails applications using cssbundling-rails or similar:

  1. Add the following to your package.json scripts:
{
  "scripts": {
    "build:css": "ruby scripts/compile_sass.rb",
    "build:css-dev": "ruby scripts/compile_sass.rb development"
  }
}
  1. Create scripts/compile_sass.rb:
#!/usr/bin/env ruby

require_relative "../config/environment"

cmd = "sass ./app/assets/stylesheets/application.sass.scss ./app/assets/builds/application.css #{Rails.application.config.assets.paths.map {|path| "--load-path=#{path}" }.join(" ")}"
cmd += ARGV[0] == "development" ? " --source-map --source-map-urls=absolute --watch" : " --style compressed"

system(cmd)
  1. Update your Procfile.dev:
web: bin/rails server -p 3000
css: bun run build:css-dev
js: bun run build-dev --watch

🎯 Usage

Basic usage

<%= render("immosquare-cookies/consent_banner") %>

With privacy and cookie policy links

<%= render("immosquare-cookies/consent_banner",
    privacy_policy_link: "https://example.com/privacy",
    cookie_policy_link: "https://example.com/cookies") %>

Advanced usage with cookie management

<%= render("immosquare-cookies/consent_banner",
    site_name: "MyApp",
    duration_months: 12,
    privacy_policy_link: "https://example.com/privacy",
    cookie_policy_link: "https://example.com/cookies",
    cookies_to_remove: ["_ga", "_gid", "_fbp", "_gat"],
    target: "_blank") %>

🍪 Smart Cookie Management

New in v2.0! The cookies_to_remove parameter automatically removes unwanted cookies when users refuse consent.

<%= render("immosquare-cookies/consent_banner",
    cookies_to_remove: ["_ga", "_gid", "_fbp", "_gat_UA-*"]) %>

This prevents tracking cookies from being recreated and ensures true GDPR compliance.

Conditional script loading

Check consent before loading tracking scripts:

<% if cookies["_immosquare_consented"] != "false" %>
  <!-- Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'GA_MEASUREMENT_ID');
  </script>
<% end %>

⚙️ Configuration Options

Parameter Type Default Description
key String "_immosquare_consented" Cookie name storing consent decision
duration_months Integer 6 Cookie duration (1-12 months)
site_name String request.host Site name in banner title
text String Localized Custom banner text
privacy_policy_link String nil URL to privacy policy
cookie_policy_link String nil URL to cookie policy
cookies_to_remove Array [] Cookies to remove on refusal
refuse String Localized "Refuse" button text
accept String Localized "Accept" button text
link_text String Localized Text before policy links
privacy_policy String Localized Privacy policy link text
cookie_policy String Localized Cookie policy link text
target String "_blank" Link target attribute

🌍 Internationalization

Built-in translations for 8 languages:

  • 🇫🇷 French (fr)
  • 🇬🇧 English (en)
  • 🇪🇸 Spanish (es)
  • 🇳🇱 Dutch (nl)
  • 🇵🇱 Polish (pl)
  • 🇮🇹 Italian (it)
  • 🇨🇳 Simplified Chinese (zh)
  • 🇹🇼 Traditional Chinese (zh-TW)

Translation keys

Customize translations in your app's locale files:

en:
  immosquare-cookies:
    document_title: "Cookie Settings for %{site_name}"
    text: "We use cookies to enhance your experience. By continuing to visit this site, you agree to our use of cookies for %{duration_months} months."
    refuse: "Refuse"
    accept: "Accept"
    link_text: "Learn more:"
    privacy_policy: "Privacy Policy"
    cookie_policy: "Cookie Policy"

🎨 Styling & Design

The banner features a modern, accessible design with:

  • Clean card-based layout with subtle shadows
  • Responsive breakpoints for mobile and desktop
  • CSS custom properties for easy theming
  • Smooth animations and hover effects
  • Fixed bottom-left positioning (non-intrusive)

Custom styling

Override CSS custom properties:

#immosquare-cookies-container {
  --immosquare-cookies-color: #your-brand-color;
  --immosquare-cookies-bg: #your-background;
  --immosquare-cookies-border: #your-border-color;

}

🚀 Upgrading to v2.0

immosquare-cookies v2.0 includes breaking changes and major improvements.

📖 View complete migration guide →

Quick migration checklist:

  • Update gem version: gem "immosquare-cookies", "~> 2.0"
  • Replace link: parameter with privacy_policy_link: and cookie_policy_link:
  • Test banner display and functionality
  • Add cookies_to_remove: for automatic GDPR compliance

💡 Examples

E-commerce site with Google Analytics

<%= render("immosquare-cookies/consent_banner",
    site_name: "MyShop",
    duration_months: 6,
    privacy_policy_link: "https://myshop.com/privacy",
    cookie_policy_link: "https://myshop.com/cookies",
    cookies_to_remove: ["_ga", "_gid", "_gat", "_fbp"]) %>

SaaS application

<%= render("immosquare-cookies/consent_banner",
    site_name: "MySaaS Pro",
    duration_months: 12,
    text: "We use essential and analytics cookies to improve your experience.",
    privacy_policy_link: "https://mysaas.com/legal/privacy",
    cookies_to_remove: ["_ga", "_gid", "intercom-session"]) %>

🔧 Development

# Clone the repository
git clone https://github.com/immosquare/immosquare-cookies.git

# Build the gem
gem build immosquare-cookies.gemspec

# Install locally
gem install immosquare-cookies-2.0.0.gem

📄 License

This project is licensed under the MIT License - see the LICENSE for details.

🤝 Contributing

Bug reports and pull requests are welcome on GitHub.


Made with ❤️ by the immosquare team