diff --git a/.gherkin-lintrc b/.gherkin-lintrc new file mode 100644 index 00000000000..8afd8ef7f5b --- /dev/null +++ b/.gherkin-lintrc @@ -0,0 +1,39 @@ +{ + "no-files-without-scenarios" : "off", + "no-unnamed-features": "on", + "no-unnamed-scenarios": "on", + "no-dupe-feature-names": "on", + "no-partially-commented-tag-lines": "on", + "indentation": [ + "on", { + "Feature": 0, + "Background": 2, + "Scenario": 2, + "Step": 2, + "Examples": 0, + "example": 2, + "given": 4, + "when": 4, + "then": 4, + "and": 4, + "but": 4, + "feature tag": 0, + "scenario tag": 2 + } + ], + "no-trailing-spaces": "on", + "new-line-at-eof": ["on", "yes"], + "no-multiple-empty-lines": "on", + "no-empty-file": "on", + "no-scenario-outlines-without-examples": "on", + "name-length": ["on", {"Feature": 50, "Scenario": 85, "Step": 115}], + "no-restricted-tags": ["on", {"tags": ["@watch", "@wip"]}], + "use-and": "on", + "no-duplicate-tags": "on", + "no-superfluous-tags": "on", + "no-homogenous-tags": "on", + "one-space-between-tags": "on", + "no-unused-variables": "on", + "no-background-only-scenario": "on", + "no-empty-background": "on" +} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000000..f25b1ebbd6e --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,5 @@ +--- + +liberapay: Active-Admin +open_collective: activeadmin +tidelift: rubygems/activeadmin diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 00000000000..a65fee43345 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: If you've already asked for help with a problem and confirmed something is broken with ActiveAdmin itself, create a bug report. +title: '' +labels: '' +assignees: '' +--- + + + +Describe your issue with a **clear title and description**. Make sure to include +as much relevant information as possible, including a code sample or failing +test that demonstrates the expected behavior, as well as your system +configuration. Your goal should be to make it easy for yourself - and others - +to reproduce the bug and figure out a fix. + +### Expected behavior + +What do you think should happen? + +### Actual behavior + +What actually happens? + +### How to reproduce + +Having a way to reproduce your issue will help people confirm, investigate, +and ultimately fix your issue. You can do this by providing an executable test +case. To make this process easier, please use [our bug report template script]. + +Copy the content of the appropriate template into an `.rb` file and make the +necessary changes to demonstrate the issue. You can execute it by running +`ruby the_file.rb` in your terminal. If all goes well, you should see your test +case failing. + +[our bug report template script]: https://github.com/activeadmin/activeadmin/blob/master/tasks/bug_report_template.rb diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000000..3202933f390 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +blank_issues_enabled: false +contact_links: + - name: Get Help + url: https://github.com/activeadmin/activeadmin/discussions/new?category=help + about: If you can't get something to work the way you expect, open a question in our discussion forums. + - name: Feature Request + url: https://github.com/activeadmin/activeadmin/discussions/new?category=ideas + about: Suggest any ideas you have using our discussion forums. + - name: Documentation Issue + url: https://github.com/activeadmin/activeadmin/pulls + about: For documentation improvements, feel free to create a pull request. + - name: Localization Issue + url: https://github.com/activeadmin/activeadmin/pulls + about: For any localization updates, create a pull request as we rely entirely on the community for these. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..f1294ef22ba --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,20 @@ + diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000000..80219a6c70f --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,156 @@ +# Active Admin - GitHub Copilot Instructions + +## Project Overview + +Active Admin is a Ruby on Rails framework for creating elegant backends for website administration. It provides a DSL for developers to quickly create good-looking administration interfaces. + +## Technology Stack + +- **Backend**: Ruby on Rails (currently Rails ~> 8.1.0) +- **Frontend**: JavaScript (ES6+), Tailwind CSS, Flowbite +- **Testing**: RSpec (unit tests), Cucumber (feature tests), Capybara (integration tests) +- **Build Tools**: Rollup (JavaScript bundling), cssbundling-rails +- **Key Dependencies**: Devise (authentication), Ransack (search), Formtastic (forms), Kaminari (pagination) + +## Ruby Conventions + +- Minimum Ruby version: 3.3+ (required) +- Minimum Rails version: 7.2+ (required by gemspec) +- Current development uses Rails ~> 8.1.0 +- Follow RuboCop style guide (configuration in `.rubocop.yml`) +- RuboCop plugins enabled: capybara, packaging, performance, rails, rspec +- Use frozen string literals: `# frozen_string_literal: true` at the top of Ruby files + +## JavaScript Conventions + +- Use ES6+ modern JavaScript syntax +- Follow ESLint configuration (see `eslint.config.js`) +- JavaScript source files are in `app/javascript/` +- Build JavaScript with: `npm run build` +- Lint JavaScript with: `npm run lint` + +## Testing Guidelines + +### Ruby Tests (RSpec) +- Unit tests are in `spec/unit/` +- Request specs are in `spec/requests/` +- Helper specs are in `spec/helpers/` +- Run RSpec tests: `bundle exec rspec` + +### Feature Tests (Cucumber) +- Cucumber features are in `features/` +- Uses Capybara with Cuprite (headless Chrome) +- Cucumber scenarios require Chrome to be installed +- Run Cucumber tests: `bundle exec cucumber` +- Lint Gherkin files: `npm run gherkin-lint` + +### Running All Tests +- Run the complete test suite: `bin/rake` +- Tests run against a sample Rails app generated in `tmp/test_apps/` + +## Building and Development + +### Setup +```bash +bundle install +yarn install +``` + +Note: The `bin/rake local server` command requires foreman, which it will invoke automatically. Install with `gem install foreman` if needed. + +### Testing Against Different Rails Versions +```bash +# Available versions: rails_72, rails_80 +export BUNDLE_GEMFILE=gemfiles/rails_72/Gemfile +``` + +### Local Development Server +```bash +bin/rake local server +# Visit http://localhost:3000/admin +# Login: admin@example.com / password +``` + +### Other Local Commands +```bash +bin/rake local console # Rails console +bin/rake local db:migrate # Run migrations +``` + +## Code Organization + +- `lib/active_admin/` - Core framework code +- `app/` - Rails application components (controllers, helpers, views, assets) +- `spec/` - RSpec tests +- `features/` - Cucumber feature tests +- `docs/` - VitePress documentation (run with `npm run docs:dev`) + +## Important Guidelines + +1. **Minimal Changes**: Make surgical, precise changes. Don't refactor unrelated code. +2. **Backward Compatibility**: Active Admin is a widely-used gem. Maintain backward compatibility unless explicitly breaking changes are intended. +3. **Test Coverage**: Include tests for new features. Prefer RSpec specs (especially request specs) over Cucumber features when possible, as specs are easier to work with and maintain. +4. **Documentation**: Update documentation in `docs/` if adding user-facing features. +5. **Internationalization**: Support i18n - translation files are in `config/locales/` +6. **Security**: This is an administration framework so be extra cautious with security implications. +7. **Code Quality**: Always run ALL relevant linters before submitting any PR to ensure code follows project style guidelines: + - Ruby code: `bundle exec rubocop` + - JavaScript code: `npm run lint` + - Gherkin files: `npm run gherkin-lint` + - Run these linters BEFORE requesting code review or submitting the PR. + +## Contributing Workflow + +1. Create feature request discussion before starting significant new features +2. Fork and create a descriptive branch +3. Ensure tests pass: `bin/rake` +4. **Run ALL linters BEFORE submitting PR**: + - Ruby code: `bundle exec rubocop` + - JavaScript code: `npm run lint` + - Gherkin files: `npm run gherkin-lint` +5. View changes in browser: `bin/rake local server` +6. Submit pull request with passing CI + +## Commit Message Guidelines + +Follow the project's commit message standards as outlined in [CONTRIBUTING.md](../CONTRIBUTING.md): + +### Format Requirements +- **Reference**: Follow [How to Write a Git Commit Message](https://cbea.ms/git-commit/#seven-rules) +- **Format**: Use imperative mood ("Add feature" not "Added feature") +- **Length**: Limit subject line to 50 characters, body lines to 72 characters +- **Structure**: + ``` + Short summary (50 chars max) + + Detailed explanation if needed (72 chars per line) + + - Use bullet points for multiple changes + - Reference issues with "Fixes #123" or "Closes #456" + ``` + +### Commit Message Examples +``` +Fix temporal query performance regression + +Add support for Rails 8.0 compatibility + +Update dependencies for security patches + +Fixes #123 +``` + +### Best Practices +- Keep commits atomic (one logical change per commit) +- Write clear, descriptive commit messages +- Reference related issues and pull requests +- Avoid generic messages like "Fix bug" or "Update code" + +## Additional Context + +- This is both a Ruby gem and an npm package +- Published to RubyGems as `activeadmin` +- Published to npm as `@activeadmin/activeadmin` +- The project uses both Ruby and JavaScript tooling +- CI runs tests against multiple Rails versions +- Code coverage tracked with SimpleCov and CodeCov diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..c6a315ccef0 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,63 @@ +version: 2 +multi-ecosystem-groups: + bundler: + schedule: + interval: weekly +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily + cooldown: + default-days: 5 + groups: + github_actions: + patterns: + - "*" + - package-ecosystem: bundler + directory: / + versioning-strategy: lockfile-only + cooldown: + default-days: 5 + patterns: + - "*" + multi-ecosystem-group: bundler + - package-ecosystem: npm + directory: / + schedule: + interval: monthly + versioning-strategy: lockfile-only + cooldown: + default-days: 5 + groups: + npm: + patterns: + - "*" + - package-ecosystem: bundler + directory: /gemfiles/rails_72 + versioning-strategy: lockfile-only + cooldown: + default-days: 5 + patterns: + - "*" + multi-ecosystem-group: bundler + ignore: + - dependency-name: rails + versions: ">= 8.0.0" + - dependency-name: rails-i18n + versions: ">= 8.0.0" + - dependency-name: railties + versions: ">= 8.0.0" + - package-ecosystem: bundler + directory: /gemfiles/rails_80 + versioning-strategy: lockfile-only + cooldown: + default-days: 5 + patterns: + - "*" + multi-ecosystem-group: bundler + ignore: + - dependency-name: rails + versions: ">= 8.1.0" + - dependency-name: rails-i18n + versions: ">= 8.1.0" diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000000..fd55d1984b5 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,23 @@ +changelog: + categories: + - title: Breaking Changes 🚨 + labels: + - type breaking change + - title: Template Updates 📝 + labels: + - type template update + - title: Enhancements ✨ + labels: + - type enhancement + - title: Bug Fixes 🐛 + labels: + - type bug fix + - title: Security Fixes 🔒 + labels: + - type security fix + - title: Other Changes 🛠 + labels: + - "*" + exclude: + authors: + - dependabot diff --git a/.github/workflows/bug-report-template.yml b/.github/workflows/bug-report-template.yml new file mode 100644 index 00000000000..7c17e6578c2 --- /dev/null +++ b/.github/workflows/bug-report-template.yml @@ -0,0 +1,42 @@ +name: Bug Reports + +on: + schedule: + # Run every day at noon UTC + - cron: '0 12 * * *' + pull_request: + +concurrency: + group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +env: + RUBY_VERSION: "4.0" + +jobs: + bug_report_template_test: + name: Run bug report template + # Don't run scheduled workflow on forks + if: ${{ (github.event_name == 'pull_request' || github.repository_owner == 'activeadmin') }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + app/** + config/** + lib/*.rb + lib/active_admin/** + tasks/bug_report_template.rb + Gemfile* + *.gemspec + - uses: ruby/setup-ruby@v1.321.0 + if: steps.changed-files.outputs.any_changed == 'true' + with: + ruby-version: ${{ env.RUBY_VERSION }} + bundler-cache: true + - name: Run bug report template + if: steps.changed-files.outputs.any_changed == 'true' + run: ACTIVE_ADMIN_PATH=. ruby tasks/bug_report_template.rb diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 00000000000..92bba8dd974 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,121 @@ +name: ci + +on: + pull_request: + push: + branches: + - master + +concurrency: + group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + test: + name: test (${{ matrix.ruby }}, ${{ matrix.rails }}) + runs-on: ${{ matrix.os }} + timeout-minutes: 15 + strategy: + fail-fast: false + matrix: + ruby: + - "4.0" + - "3.4" + - "3.3" + os: + - ubuntu-latest + rails: + - rails_81 + - rails_80 + - rails_72 + exclude: + - ruby: '4.0' + os: ubuntu-latest + rails: rails_72 + steps: + - uses: actions/checkout@v7.0.1 + - name: Configure bundler (default) + run: | + echo "BUNDLE_GEMFILE=Gemfile" >> "$GITHUB_ENV" + if: matrix.rails == 'rails_81' + - name: Configure bundler (alternative) + run: | + echo "BUNDLE_GEMFILE=gemfiles/${{ matrix.rails }}/Gemfile" >> "$GITHUB_ENV" + if: matrix.rails != 'rails_81' + - uses: ruby/setup-ruby@v1.321.0 + with: + ruby-version: ${{ matrix.ruby }} + bundler-cache: true + rubygems: latest + - name: Create test app + run: bin/rake setup + - name: Restore cached RSpec runtimes + uses: actions/cache@v6.1.0 + with: + path: tmp/parallel_runtime_rspec.log + key: runtimes-rspec-${{ matrix.ruby }}-${{ matrix.rails }}-${{ hashFiles('tmp/parallel_runtime_rspec.log') }} + - name: Run RSpec tests + env: + COVERAGE: true + run: | + bin/parallel_rspec + RSPEC_FILESYSTEM_CHANGES=true bin/rspec + - name: Restore cached cucumber runtimes + uses: actions/cache@v6.1.0 + with: + path: tmp/parallel_runtime_cucumber.log + key: runtimes-cucumber-${{ matrix.ruby }}-${{ matrix.rails }}-${{ hashFiles('tmp/parallel_runtime_cucumber.log') }} + - name: Run Cucumber features + env: + COVERAGE: true + run: | + bin/parallel_cucumber --fail-fast + bin/cucumber --profile filesystem-changes + bin/cucumber --profile class-reloading + - name: Rename coverage file by matrix run + run: mv coverage/coverage.xml coverage/coverage-ruby-${{ matrix.ruby }}-${{ matrix.rails }}.xml + - uses: actions/upload-artifact@v7 + with: + name: coverage-ruby-${{ matrix.ruby }}-${{ matrix.rails }} + path: coverage + if-no-files-found: error + + upload_coverage: + name: Upload Coverage + runs-on: ubuntu-latest + # Do not run on forks + if: ${{ github.repository_owner == 'activeadmin' }} + needs: [test] + steps: + - uses: actions/checkout@v7.0.1 + - uses: actions/download-artifact@v8 + with: + path: coverage + pattern: coverage-ruby-* + merge-multiple: true + - uses: codecov/codecov-action@v7.0.0 + with: + token: ${{ secrets.CODECOV_TOKEN }} + directory: coverage + fail_ci_if_error: true + + test_docs_build: + name: Build docs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + docs/** + package*.json + - uses: actions/setup-node@v7.0.0 + if: steps.changed-files.outputs.any_changed == 'true' + with: + node-version: 24 + cache: npm + - run: npm ci + if: steps.changed-files.outputs.any_changed == 'true' + - run: npm run docs:build + if: steps.changed-files.outputs.any_changed == 'true' diff --git a/.github/workflows/do-not-merge.yml b/.github/workflows/do-not-merge.yml new file mode 100644 index 00000000000..142f208a772 --- /dev/null +++ b/.github/workflows/do-not-merge.yml @@ -0,0 +1,22 @@ +name: Do Not Merge + +on: + pull_request: + types: + - opened + - reopened + - synchronize + - labeled + - unlabeled + +jobs: + do-not-merge: + if: ${{ contains(github.event.*.labels.*.name, 'do not merge') }} + name: Prevent merging + runs-on: ubuntu-latest + steps: + - name: Check for PR label + run: | + echo "Pull request has a 'do not merge' label applied." + echo "This workflow fails to prevent merging until label is removed." + exit 1 diff --git a/.github/workflows/docs-deployment.yml b/.github/workflows/docs-deployment.yml new file mode 100644 index 00000000000..2ee89154cf9 --- /dev/null +++ b/.github/workflows/docs-deployment.yml @@ -0,0 +1,47 @@ +name: Docs Deployment + +on: + release: + types: + - published + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: false + +jobs: + build_docs: + name: Build docs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: actions/setup-node@v7.0.0 + with: + node-version: 24 + cache: npm + - uses: actions/configure-pages@v6 + - run: npm install + - run: npm run docs:build + - uses: actions/upload-pages-artifact@v5 + with: + path: docs/.vitepress/dist + + deploy_docs: + name: Deploy docs site + runs-on: ubuntu-latest + needs: build_docs + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/deploy-pages@v5 + id: deployment diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml new file mode 100644 index 00000000000..a26d5608baf --- /dev/null +++ b/.github/workflows/eslint.yml @@ -0,0 +1,32 @@ +name: ESLint + +on: + pull_request: + +env: + NODE_VERSION: ${{ vars.ESLINT_NODE_VERSION || '24.x' }} + +jobs: + eslint: + name: Run eslint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: actions/setup-node@v7.0.0 + with: + node-version: ${{ env.NODE_VERSION }} + cache: npm + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + **.js + package*.json + .github/workflows/eslint.yml + - uses: reviewdog/action-eslint@v1 + if: steps.changed-files.outputs.any_changed == 'true' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + filter_mode: nofilter # added (default), diff_context, file, nofilter + fail_level: any + reporter: github-pr-check diff --git a/.github/workflows/gherkin-lint.yml b/.github/workflows/gherkin-lint.yml new file mode 100644 index 00000000000..066c2c8d690 --- /dev/null +++ b/.github/workflows/gherkin-lint.yml @@ -0,0 +1,31 @@ +name: Gherkin Lint + +on: + pull_request: + +env: + NODE_VERSION: 24.x + +jobs: + gherkin_lint: + name: Run gherkin-lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + **.feature + .gherkin-lintrc + package*.json + .github/workflows/gherkin-lint.yml + - uses: actions/setup-node@v7.0.0 + if: steps.changed-files.outputs.any_changed == 'true' + with: + node-version: ${{ env.NODE_VERSION }} + cache: npm + - run: npm ci + if: steps.changed-files.outputs.any_changed == 'true' + - run: npm run gherkin-lint + if: steps.changed-files.outputs.any_changed == 'true' diff --git a/.github/workflows/github-actions-lint.yml b/.github/workflows/github-actions-lint.yml new file mode 100644 index 00000000000..ab46e4f99e7 --- /dev/null +++ b/.github/workflows/github-actions-lint.yml @@ -0,0 +1,24 @@ +name: GitHub Actions Lint + +on: + pull_request: + +jobs: + github_actions_lint: + name: Run actionlint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + .github/workflows/*.yaml + .github/workflows/*.yml + - uses: reviewdog/action-actionlint@v1.73.2 + if: steps.changed-files.outputs.any_changed == 'true' + with: + fail_level: any + filter_mode: nofilter # added (default), diff_context, file, nofilter + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-check diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml new file mode 100644 index 00000000000..22d911f0f58 --- /dev/null +++ b/.github/workflows/markdown-lint.yml @@ -0,0 +1,29 @@ +name: Markdown Lint + +on: + pull_request: + +env: + MARKDOWNLINT_FLAGS: ${{ vars.REVIEWDOG_MARKDOWNLINT_FLAGS || '--git-recurse .' }} + +jobs: + markdownlint: + name: Run markdownlint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + **.md + .markdownlint.yml + .github/workflows/markdown-lint.yml + - uses: reviewdog/action-markdownlint@v0.28.0 + if: steps.changed-files.outputs.any_changed == 'true' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + filter_mode: nofilter # added (default), diff_context, file, nofilter + fail_level: any + markdownlint_flags: ${{ env.MARKDOWNLINT_FLAGS }} + reporter: github-pr-check diff --git a/.github/workflows/rubocop.yml b/.github/workflows/rubocop.yml new file mode 100644 index 00000000000..3a0be6ba7ce --- /dev/null +++ b/.github/workflows/rubocop.yml @@ -0,0 +1,44 @@ +name: Rubocop + +on: + pull_request: + +env: + RUBY_VERSION: ${{ vars.RUBOCOP_RUBY_VERSION || '4.0' }} + +jobs: + rubocop: + name: Run rubocop + runs-on: ubuntu-latest + env: + BUNDLE_ONLY: ${{ vars.RUBOCOP_BUNDLE_ONLY || 'rubocop' }} + steps: + - uses: actions/checkout@v7.0.1 + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + .github/workflows/rubocop.yml + .rubocop.yml + **.rb + **.rake + **.arb + bin/* + gemfiles/**/Gemfile + Gemfile* + Rakefile + *.gemspec + .simplecov + - uses: ruby/setup-ruby@v1.321.0 + if: steps.changed-files.outputs.any_changed == 'true' + with: + ruby-version: ${{ env.RUBY_VERSION }} + bundler-cache: true + - uses: reviewdog/action-rubocop@v2 + if: steps.changed-files.outputs.any_changed == 'true' + with: + fail_level: any + filter_mode: nofilter # added (default), diff_context, file, nofilter + github_token: ${{ secrets.GITHUB_TOKEN }} + skip_install: true + use_bundler: true diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml new file mode 100644 index 00000000000..234ac68ede0 --- /dev/null +++ b/.github/workflows/typos.yml @@ -0,0 +1,17 @@ +name: Typos + +on: + pull_request: + +jobs: + typos: + name: Run typos + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: reviewdog/action-typos@v1 + with: + fail_level: any + filter_mode: nofilter # added (default), diff_context, file, nofilter + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-check diff --git a/.github/workflows/yaml-lint.yml b/.github/workflows/yaml-lint.yml new file mode 100644 index 00000000000..2cd3004b571 --- /dev/null +++ b/.github/workflows/yaml-lint.yml @@ -0,0 +1,24 @@ +name: YAML Lint + +on: + pull_request: + +jobs: + yaml_lint: + name: Run yamllint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7.0.1 + - uses: tj-actions/changed-files@v47.0.6 + id: changed-files + with: + files: | + **.yaml + **.yml + - uses: reviewdog/action-yamllint@v1.23.1 + if: steps.changed-files.outputs.any_changed == 'true' + with: + fail_level: any + filter_mode: nofilter # added (default), diff_context, file, nofilter + github_token: ${{ secrets.GITHUB_TOKEN }} + reporter: github-pr-check diff --git a/.gitignore b/.gitignore index beb2a8e0d7f..e26ea760672 100644 --- a/.gitignore +++ b/.gitignore @@ -1,49 +1,15 @@ -## Mac -.DS_Store - -## Windows -.Thumbs.db - -## TextMate -*.tm_project -*.tmproj -tmtags - -## Emacs -*~ -\#* -.\#* - -## Vim -*.swp -# IDEA / RUBYMINE -.idea - -## RVM -.rvmrc -.ruby-version -.ruby-gemset - -## Project (general) -tags -coverage -rdoc -doc -.yardoc -pkg - -## Project (specific) -bin/ +/tmp +/tasks/tmp +/coverage +/.yardoc +/.ruby-version +/pkg .bundle -spec/rails -*.sqlite3-journal -Gemfile.lock -Gemfile-*.lock -capybara* -viewcumber -test-rails* -public -.rspec -.rails-version -.rbenv-version -.localeapp/* +/.rspec_failures +/node_modules +/src +/vendor/bundle +/rails_70 +/dist +docs/.vitepress/cache +docs/.vitepress/dist diff --git a/.hound.yml b/.hound.yml deleted file mode 100644 index 59e5ffe2967..00000000000 --- a/.hound.yml +++ /dev/null @@ -1,14 +0,0 @@ -ruby: - enabled: false - -coffee_script: - enabled: false - -java_script: - enabled: false - -scss: - enabled: false - -Metrics/LineLength: - Max: 110 diff --git a/.markdownlint.yml b/.markdownlint.yml new file mode 100644 index 00000000000..9fe39abc0d1 --- /dev/null +++ b/.markdownlint.yml @@ -0,0 +1,5 @@ +default: true +MD002: false +MD013: false +MD024: false +MD041: false diff --git a/.rspec b/.rspec new file mode 100644 index 00000000000..03d161c7cc7 --- /dev/null +++ b/.rspec @@ -0,0 +1,3 @@ +--format <%= ENV['CI'] ? 'documentation' : 'progress' %> +--require spec_helper +<%= "--require #{__dir__}/spec/support/simplecov_changes_env.rb --tag changes_filesystem" if ENV['RSPEC_FILESYSTEM_CHANGES'] %> diff --git a/.rspec_parallel b/.rspec_parallel new file mode 100644 index 00000000000..e86512bdfb6 --- /dev/null +++ b/.rspec_parallel @@ -0,0 +1,3 @@ +--require <%= "#{__dir__}/spec/support/simplecov_regular_env.rb" %> +--format progress +--format ParallelTests::RSpec::RuntimeLogger --out tmp/parallel_runtime_rspec.log diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 00000000000..33e2ed9114f --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,426 @@ +--- + +inherit_mode: + merge: + - Include + +plugins: + - rubocop-capybara + - rubocop-packaging + - rubocop-performance + - rubocop-rails + - rubocop-rspec + +AllCops: + DisabledByDefault: true + TargetRubyVersion: 3.3 + TargetRailsVersion: 7.2 + + Exclude: + - .git/**/* + - .github/**/* + - bin/**/* + - gemfiles/**/vendor/**/* + - node_modules/**/* + - tmp/**/* + - vendor/**/* + + Include: + - gemfiles/*/Gemfile + - .simplecov + + DisplayCopNames: true + + StyleGuideCopsOnly: false + +Capybara: + Enabled: true + +Capybara/AssertStyle: + Enabled: true + +Capybara/FindAllFirst: + Enabled: true + +Capybara/RedundantWithinFind: + Enabled: true + +Capybara/RSpec/CurrentPathExpectation: + Enabled: true + +Capybara/RSpec/HaveContent: + Enabled: true + +Capybara/RSpec/HaveSelector: + Enabled: true + +Capybara/RSpec/MatchStyle: + Enabled: true + +Capybara/RSpec/NegationMatcher: + Enabled: true + +Capybara/RSpec/NegationMatcherAfterVisit: + Enabled: true + +Capybara/RSpec/PredicateMatcher: + Enabled: true + +Capybara/RSpec/SpecificMatcher: + Enabled: true + +Capybara/RSpec/VisibilityMatcher: + Enabled: true + +Capybara/SpecificActions: + Enabled: true + +Capybara/SpecificFinders: + Enabled: true + +Layout/EndAlignment: + Enabled: true + +Layout/HashAlignment: + Enabled: true + +Layout/AccessModifierIndentation: + Enabled: true + +Layout/ArgumentAlignment: + Enabled: true + +Layout/CaseIndentation: + Enabled: true + +Layout/ClosingParenthesisIndentation: + Enabled: true + +Layout/CommentIndentation: + Enabled: true + +Layout/ElseAlignment: + Enabled: true + +Layout/EmptyLines: + Enabled: true + +Layout/EmptyLinesAroundBlockBody: + Enabled: true + +Layout/EndOfLine: + Enabled: true + +Layout/ExtraSpacing: + AllowForAlignment: false + Enabled: true + +Layout/FirstArgumentIndentation: + Enabled: true + +Layout/FirstHashElementIndentation: + Enabled: true + EnforcedStyle: consistent + +Layout/FirstMethodArgumentLineBreak: + Enabled: true + +Layout/FirstParameterIndentation: + Enabled: true + +Layout/ParameterAlignment: + Enabled: true + EnforcedStyle: with_fixed_indentation + +Layout/IndentationStyle: + Enabled: true + EnforcedStyle: spaces + +Lint/AmbiguousOperator: + Enabled: true + +Lint/AmbiguousRegexpLiteral: + Enabled: true + +Lint/ParenthesesAsGroupedExpression: + Enabled: true + +Lint/RedundantStringCoercion: + Enabled: true + +Lint/UselessAccessModifier: + Enabled: true + +Lint/UselessAssignment: + Enabled: true + +Packaging/BundlerSetupInTests: + Enabled: true + +Packaging/GemspecGit: + Enabled: true + +Packaging/RequireHardcodingLib: + Enabled: true + +Packaging/RequireRelativeHardcodingLib: + Enabled: true + +Performance: + Enabled: true + +Performance/AncestorsInclude: + Enabled: false + +Performance/ArraySemiInfiniteRangeSlice: + Enabled: false + +Performance/BigDecimalWithNumericArgument: + Enabled: true + +Performance/BindCall: + Enabled: true + +Performance/BlockGivenWithExplicitBlock: + Enabled: true + +Performance/Caller: + Enabled: true + +Performance/CaseWhenSplat: + Enabled: true + +Performance/Casecmp: + Enabled: false + +Performance/ChainArrayAllocation: + Enabled: false + +Performance/CollectionLiteralInLoop: + Enabled: true + Exclude: + - spec/**/* + +Performance/CompareWithBlock: + Enabled: true + +Performance/ConcurrentMonotonicTime: + Enabled: true + +Performance/ConstantRegexp: + Enabled: true + +Performance/Count: + Enabled: true + +Performance/DeletePrefix: + Enabled: true + +Performance/DeleteSuffix: + Enabled: true + +Performance/Detect: + Enabled: true + +Performance/DoubleStartEndWith: + Enabled: true + IncludeActiveSupportAliases: true + +Performance/EndWith: + Enabled: true + +Performance/FixedSize: + Enabled: true + +Performance/FlatMap: + Enabled: true + EnabledForFlattenWithoutParams: false + +Performance/InefficientHashSearch: + Enabled: true + +Performance/IoReadlines: + Enabled: true + +Performance/MapCompact: + Enabled: false + +Performance/MapMethodChain: + Enabled: false + +Performance/MethodObjectAsBlock: + Enabled: true + +Performance/OpenStruct: + Enabled: true + +Performance/RangeInclude: + Enabled: true + +Performance/RedundantBlockCall: + Enabled: false + +Performance/RedundantEqualityComparisonBlock: + Enabled: false + +Performance/RedundantMatch: + Enabled: true + +Performance/RedundantMerge: + Enabled: true + MaxKeyValuePairs: 2 + +Performance/RedundantSortBlock: + Enabled: true + +Performance/RedundantSplitRegexpArgument: + Enabled: true + +Performance/RedundantStringChars: + Enabled: true + +Performance/RegexpMatch: + Enabled: true + +Performance/ReverseEach: + Enabled: true + +Performance/ReverseFirst: + Enabled: true + +Performance/SelectMap: + Enabled: false + +Performance/Size: + Enabled: true + +Performance/SortReverse: + Enabled: true + +Performance/Squeeze: + Enabled: true + +Performance/StartWith: + Enabled: true + +Performance/StringIdentifierArgument: + Enabled: true + +Performance/StringInclude: + Enabled: true + +Performance/StringReplacement: + Enabled: true + +Performance/StringBytesize: + Enabled: true + +Performance/Sum: + Enabled: false + +Performance/TimesMap: + Enabled: true + +Performance/UnfreezeString: + Enabled: true + +Performance/UriDefaultParser: + Enabled: true + +Performance/ZipWithoutBlock: + Enabled: true + +Rails/FilePath: + Enabled: true + EnforcedStyle: slashes + +Rails/RootPathnameMethods: + Enabled: true + +RSpec/EmptyLineAfterExample: + Enabled: true + +RSpec/EmptyLineAfterExampleGroup: + Enabled: true + +RSpec/HookArgument: + Enabled: true + +Style/BlockDelimiters: + Enabled: true + +Style/Dir: + Enabled: true + +Style/Encoding: + Enabled: true + +Style/ExpandPathArguments: + Enabled: true + +Style/FrozenStringLiteralComment: + Enabled: true + EnforcedStyle: always + +Style/HashSyntax: + Enabled: true + EnforcedShorthandSyntax: never + +Style/ParallelAssignment: + Enabled: true + +Layout/IndentationConsistency: + Enabled: true + +Layout/IndentationWidth: + Enabled: true + +Naming/PredicatePrefix: + Enabled: true + + ForbiddenPrefixes: + - is_ + - have_ + + AllowedMethods: + - has_many + - has_many_actions + +Style/StringLiterals: + Enabled: false + +Style/TrailingCommaInArguments: + Enabled: true + +Layout/TrailingEmptyLines: + Enabled: true + +Layout/TrailingWhitespace: + Enabled: true + +Layout/SpaceAfterComma: + Enabled: true + +Layout/SpaceAroundEqualsInParameterDefault: + Enabled: true + +Layout/SpaceAroundOperators: + Enabled: true + +Layout/SpaceBeforeBlockBraces: + Enabled: true + +Layout/SpaceBeforeComma: + Enabled: true + +Layout/SpaceBeforeFirstArg: + Enabled: true + +Layout/SpaceInsideBlockBraces: + Enabled: true + +Layout/SpaceInsideHashLiteralBraces: + Enabled: true + +Layout/SpaceInsideParens: + Enabled: true diff --git a/.simplecov b/.simplecov new file mode 100644 index 00000000000..b02b8a08d9d --- /dev/null +++ b/.simplecov @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +SimpleCov.profiles.define "activeadmin" do + # Opt out of SimpleCov 1.0's default test_frameworks profile to reintroduce + # `/features` coverage and surface dead code there. + remove_filter %r{\A(test|features|spec|autotest)/} + skip %r{\Aspec/} + skip "tmp/development_apps/" + skip "tmp/test_apps/" + skip "tasks/test_application.rb" + + if ENV["COVERAGE"] == "true" + require "simplecov-cobertura" + formatter SimpleCov::Formatter::CoberturaFormatter + end +end diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d63ad735305..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,46 +0,0 @@ -language: ruby -sudo: false -install: - - ./script/travis_cache download_bundle - - gem install bundler # use the very latest Bundler - - bundle install --without development --path=./bundle - - bundle clean # delete now-outdated gems - - ./script/travis_cache download_app - - bundle exec rake setup - - ./script/travis_cache upload -script: - - bundle exec rake test_with_coveralls -rvm: - - 1.9 - - 2.3.0 - - jruby-9.0.4.0 -env: - matrix: - - RAILS=3.2.22 - - RAILS=4.2.5 - - RAILS="> 5.x" - global: - - JRUBY_OPTS="-J-Xmx1024m --debug" -matrix: - fast_finish: true - exclude: - - rvm: 1.9 - env: RAILS="> 5.x" - allow_failures: - - rvm: 2.3.0 - env: RAILS="> 5.x" - - rvm: jruby-9.0.4.0 - env: RAILS="> 5.x" -branches: - only: - - master - - /\A\d-\d-stable\z/ -notifications: - irc: - channels: - - irc.freenode.org#activeadmin - on_success: change - on_failure: always - skip_join: true - template: - - "(%{branch}/%{commit} by %{author}): %{message} (%{build_url})" diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 00000000000..b48d900243b --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,18 @@ +# https://yamllint.readthedocs.io/en/stable/configuration.html +extends: default +ignore: | + node_modules/ + tmp/ + vendor/ + cucumber.yml +rules: # https://yamllint.readthedocs.io/en/stable/rules.html + comments: + min-spaces-from-content: 1 + document-start: disable + line-length: disable + truthy: + allowed-values: + - "true" + - "false" + - "on" + - "off" diff --git a/.yardopts b/.yardopts deleted file mode 100644 index 20705ef90d1..00000000000 --- a/.yardopts +++ /dev/null @@ -1,8 +0,0 @@ -lib/**/*.rb ---protected ---no-private ---exclude (features|lib\/generators\/active_admin\/.*\/templates) -- -README.md -CHANGELOG.md -docs/**/*.md diff --git a/CHANGELOG.md b/CHANGELOG.md index e575aba7b9c..dfb583197cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,84 +1,648 @@ # Changelog -## 1.0.0 [☰](https://github.com/activeadmin/activeadmin/compare/v0.6.3...master) (unreleased) + +[Future changelogs have moved to GitHub Releases](https://github.com/activeadmin/activeadmin/releases) + +## 3.2.0 [☰](https://github.com/activeadmin/activeadmin/compare/v3.1.0..v3.2.0) + +### Security Fixes + +* Backport protect against CSV Injection. [#8167] by [@mgrunberg] + +### Enhancements + +* Backport support citext column type in string filter. [#8165] by [@mgrunberg] +* Backport provide detail in DB statement timeout error for filters. [#8163] by [@mgrunberg] + +### Bug Fixes + +* Backport make sure menu creation does not modify menu options. [#8166] by [@mgrunberg] +* Backport ransack error with filters when ActiveStorage is used. [#8164] by [@mgrunberg] + +## 3.1.0 [☰](https://github.com/activeadmin/activeadmin/compare/v3.0.0..v3.1.0) + +### Enhancements + +* Support Rails 7.1. [#8102] by [@mgrunberg] +* Remove deprecated usage of ActiveSupport::Deprecation singleton. [#8106] by [@mgrunberg] +* Replace to_formatted_s with to_s to convert date to string. [#8105] by [@mgrunberg] +* Remove upper bound dependency limits from gemspec. [#8098] by [@javierjulio] + +## 3.0.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.14.0..v3.0.0) + +### Breaking Changes + +* Remove custom Ransack predicates that were MetaSearch backports. [#8010] by [@javierjulio] +* Require Ransack v4. [#8009] by [@javierjulio] + +### Enhancements + +* Use display name fallback if blank display name result. [#6342] by [@javierjulio] + +### Translation Improvements + +* Improve Swedish translations. [#7993] by [@carlottostromstedt] + +## 2.14.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.13.1..v2.14.0) + +### Enhancements + +* Add csp_meta_tag to layout. [#7986] by [@javierjulio] +* Update config.register_javascript with options support. [#7002] by [@lanzhiheng] +* Use `csrf_meta_tags` in place of singular version. [#7985] by [@javierjulio] +* Allow different new and edit rules in authorization adapters. [#6535] by [@timwis] + +### Bug Fixes + +* Fix form layout for hints and checkboxes. [#7772] by [@JewelSam] +* Update filters disabled error to include specific action. [#6195] by [@javawizard] +* Fix Comments controller destroy declaration. [#6482] by [@bliof] +* Stop pagination elements from overflowing outside of panel container. [#7599] by [@ray-curran] + +### Translation Improvements + +* Update vi locale with more translations. [#7984] by [@rs-phunt] +* Update zh-CN locale with multiple corrections. [#7944] by [@hfl] +* Fix typo in Vietnamese locale for filter text. [#7920] by [@tvziet] +* Improve French translation. [#7653] by [@cprodhomme] + +### Documentation + +* Add more documentation about PORO decorator requirements. [#7556] by [@sanfrecce-osaka] +* Add Load Paths docs to the active_admin.rb template. [#7541] by [@gabo-cs] + +### Performance + +* Removes docs from exported gem. [#7013] by [@brunoarueira] + +## 2.13.1 [☰](https://github.com/activeadmin/activeadmin/compare/v2.13.0..v2.13.1) + +### Bug Fixes + +* Honor load paths order when loading admin files. [#7488] by [@tf] +* Fix passing expected hash payload argument. [#7487] by [@ispyropoulos] + +## 2.13.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.12.0..v2.13.0) + +### Documentation + +* Update validation errors documentation to account for deprecated `ActiveModel::Errors#keys`. [#7475] by [@amit] + +### Dependency Changes + +* Drop rails 6.0 support. [#7476] by [@deivid-rodriguez] + +### Performance + +* Fix pundit performance. [#7479] by [@deivid-rodriguez] + +## 2.12.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.11.2..v2.12.0) + +### Enhancements + +* Add Ransack 3 compatibility. [#7453] by [@tagliala] + +### Bug Fixes + +* Fix pundit namespace detection. [#7144] by [@vlad-psh] + +### Documentation + +* Don't mention webpacker as the default asset generator in Rails. [#7377] by [@jaynetics] + +### Performance + +* Avoid duplicate work when downloading CSV. [#7336] by [@deivid-rodriguez] + +## 2.11.2 [☰](https://github.com/activeadmin/activeadmin/compare/v2.11.1..v2.11.2) + +### Bug Fixes + +* Fix disappearing BOM option for `CSVBuilder`. [#7170] by [@Karoid] + +## 2.11.1 [☰](https://github.com/activeadmin/activeadmin/compare/v2.11.0..v2.11.1) + +### Enhancements + +* Add turbolinks support to has many js. [#7384] by [@amiel] + +### Documentation + +* Remove `insert_tag` from Form-Partial docs. [#7394] by [@TonyArra] + +## 2.11.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.10.1..v2.11.0) + +### Enhancements + +* Add Rails 7 Support. [#7235] by [@tagliala] + +### Bug Fixes + +* Fix form SCSS variables no longer being defined in the outermost scope, so no longer being accessible. [#7341] by [@gigorok] + +## 2.10.1 [☰](https://github.com/activeadmin/activeadmin/compare/v2.10.0..v2.10.1) + +### Enhancements + +* Apply `box-sizing: border-box` globally. [#7349] by [@deivid-rodriguez] +* Vendor normalize 8.0.1. [#7350] by [@deivid-rodriguez] +* Remove deprecation warning using controller filters inside initializer. [#7340] by [@mgrunberg] + +### Bug Fixes + +* Fix frozen string error when downloading CSV and streaming disabled. [#7332] by [@deivid-rodriguez] + +## 2.10.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.9.0..v2.10.0) + +### Enhancements + +* Load favicon from Webpacker assets when use_webpacker is set to true. [#6954] by [@Fs00] +* Don't apply sorting to collection until after scoping. [#7205] by [@agrobbin] +* Resolve dart sass deprecation warning for division. [#7095] by [@tordans] +* Use `instrument` from the Notifications API instead of low level `publish`. [#7262] by [@sprql] +* Avoid mutating string literals. [#6936] by [@tomgilligan] +* Include print styles in main stylesheet. [#6922] by [@deivid-rodriguez] +* Use `POST` for OmniAuth links. [#6916] by [@deivid-rodriguez] +* Scope new record instantiation by authorization scope. [#6884] by [@ngouy] +* Make `permit_params` and `belongs_to` order independent. [#6906] by [@deivid-rodriguez] +* Use collection length instead of running COUNTs for limited collections. [#5660] by [@MmKolodziej] + +### Bug Fixes + +* Show ransackable_scopes filters in search results. [#7127] by [@vlad-psh] + +### Translation Improvements + +* Fix Dutch translation for password reset button. [#7181] by [@mvz] +* Add few key to RO pagination.entry. [#6915] by [@lubosch] +* Change misleading Korean translation. [#6873] by [@1000ship] + +### Documentation + +* Replace deprecated update_attributes! with update!. [#6959] by [@sergey-alekseev] +* Clarify docs on user setup. [#6872] by [@javawizard] + +### Dependency Changes + +* Drop rails 5.2 support. [#7293] by [@deivid-rodriguez] +* Drop support for Ruby 2.5. [#7236] by [@alejandroperea] + +## 2.9.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.8.1..v2.9.0) + +### Enhancements + +* Support for Rails 6.1. [#6548] by [@deivid-rodriguez] +* Add ability to override "Remove" button text on has_many forms. [#6523] by [@littleforest] +* Drop git in gemspec. [#6462] by [@utkarsh2102] + +### Bug Fixes + +* Pick up upstream fixes in devise templates. [#6536] by [@munen] + +### Documentation + +* Fix `has_many` syntax in forms documentation. [#6583] by [@krzcho] +* Add example of using `default_main_content` in show pages. [#6487] by [@sjieg] + +### Dependency Changes + +* Remove sassc and sprockets runtime dependencies. [#6584] by [@deivid-rodriguez] + +## 2.8.1 [☰](https://github.com/activeadmin/activeadmin/compare/v2.8.0..v2.8.1) + +### Bug Fixes + +* Fix `permitted_param` generation for `belongs_to` when `:param` is used. [#6460] by [@deivid-rodriguez] +* Fix streaming CSV export. [#6451] by [@deivid-rodriguez] +* Fix input string filter no rendering dropdown input when its column name ends with a ransack predicate. [#6422] by [@Fivell] + +## 2.8.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.7.0..v2.8.0) + +### Enhancements + +* Allow using PORO decorators. [#6249] by [@brunvez] +* Make sure `ActiveAdmin.routes` provides routes in a consistent order. [#6124] by [@jiikko] +* Use proper closing tags for HTML in ModalDialog component. [#6221] by [@javierjulio] + +### Bug Fixes + +* Fix comment layout so regardless of size, each is aligned and spaced evenly. [#6393] by [@Ivanov-Anton] + +### Translation Improvements + +* Fix several Arabic translations. [#6368] by [@mshalaby] +* Add missing `scope/all` italian translation. [#6341] by [@fuzziness] +* Improve Japanese translation. [#6315] by [@rn0rno] +* Fix es and es-MX sign_in and sign_up translation. [#6210] by [@roramirez] + +### Documentation + +* Fix filter_columns_for_large_association and filter_method_for_large_association examples. [#6232] by [@ndbroadbent] + +### Dependency Changes + +* Allow formtastic 4. [#6318] by [@deivid-rodriguez] +* Drop Ruby 2.4 support. [#6198] by [@deivid-rodriguez] + +## 2.7.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.6.1..v2.7.0) + +### Enhancements + +* Extend menu to allow for nested submenus. [#5994] by [@taralbass] +* Add Webpacker compatibility with opt-in config switch and installation generator. [#5855] by [@sgara] + +### Bug Fixes + +* Fix scopes renderer when resource has only optional scopes and their conditions are false. [#6149] by [@Looooong] +* Fix some missing wrapper markup in "logged out" layout. [#6086] by [@irmela] +* Fix some typos in Vietnamese translation. [#6099] by [@giapnhdev] + +## 2.6.1 [☰](https://github.com/activeadmin/activeadmin/compare/v2.6.0..v2.6.1) + +### Bug Fixes + +* Fix some ruby 2.7 warnings about keyword args. [#6000] by [@vcsjones] +* Missing `create_another` translation in Vietnamese. [#6002] by [@imcvampire] +* Using "destroy" for user facing message is too robotic, prefer "delete". [#6047] by [@vfonic] +* Typo in confirmation message for comment deletion. [#6047] by [@vfonic] + +## 2.6.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.5.0..v2.6.0) + +### Enhancements + +* Display multiple flash messages in separate elements. [#5929] by [@mirelon] +* Make delete confirmation messages in French & Spanish gender-neutral. [#5946] by [@cprodhomme] + +### Bug Fixes + +* Export ModalDialog component to re-enable client side usage. [#5956] by [@sgara] +* Use default ActionView options instead of default Formtastic options for DateRangeInput [#5957] by [@mirelon] +* Fix i18n key in docs example to translate scopes. [#5943] by [@adler99] + +## 2.5.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.4.0..v2.5.0) + +### Enhancements + +* Azerbaijani translation. [#5078] by [@orkhan] + +### Bug Fixes + +* Convert namespace to sym to prevent duplicate namespaces such as :foo and 'foo'. [#5931] by [@westonganger] +* Use filter label when condition has a predicate. [#5886] by [@ko-lem] +* Fix error when routing with array containing symbol. [#5870] by [@jwesorick] +* Fix error when there is a model named `Tag` and `meta_tags` have been configured. [#5895] by [@micred], [@FabioRos] and [@deivid-rodriguez] +* Allow specifying custom `input_html` for `DateRangeInput`. [#5867] by [@mirelon] +* Adjust `#main_content` right margin to take into account possible custom values of `$sidebar-width` and `$section-padding`. [#5887] by [@guigs] +* Improved polymorphic routes generation to avoid problems when multiple `belongs_to` are defined. [#5938] by [@leio10] + +### Dependency Changes + +* Support for Rails 5.0 and Rails 5.1 has been dropped. [#5877] by [@deivid-rodriguez] + +## 2.4.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.3.1..v2.4.0) + +### Enhancements + +* Make optimization to not use expensive COUNT queries also work for decorated actions. [#5811] by [@irmela] +* Render a text filter instead of a select for large associations (opt-in). [#5548] by [@DanielHeath] +* Improve German translations. [#5874] by [@juril33t] + +## 2.3.1 [☰](https://github.com/activeadmin/activeadmin/compare/v2.3.0..v2.3.1) + +### Bug Fixes + +* Revert ransack version pinning because 2.3 has an outstanding bug that affects quite a lot of users. See [this ransack issue](https://github.com/activerecord-hackery/ransack/issues/1039) for more information. [#5854] by [@deivid-rodriguez] + +## 2.3.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.2.0..v2.3.0) + +### Enhancements + +* Bump minimum ransack requirement to make sure everyone gets a version that works ok with all supported versions of Rails. [#5831] by [@deivid-rodriguez] + +### Bug Fixes + +* Fix CSVBuilder not respecting `ActiveAdmin.application.csv_options = { humanize_name: false }` setting. [#5800] by [@HappyKadaver] +* Fix crash when displaying current filters after filtering by a nested resource. [#5816] by [@deivid-rodriguez] +* Fix pagination when `pagination_total` is false to not show a "Last" link, since it's incorrect because we don't have the total pages information. [#5822] by [@deivid-rodriguez] +* Fix optional nested resources causing incorrect routes to be generated, when renamed resources (through `:as` option) are involved. [#5826] by [@ndbroadbent], [@Kris-LIBIS] and [@deivid-rodriguez] +* Fix double modal issue in applications using turbolinks 5. [#5842] by [@sgara] + +## 2.2.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.1.0..v2.2.0) + +### Enhancements + +* The `status_tag` component now supports different labels for `false` and `nil` boolean cases through the locale. Both default to display "No" for backwards compatibility. [#5794] by [@javierjulio] +* Add Macedonian locale. [#5710] by [@violeta-p] + +### Bug Fixes + +* Fix pundit policy retrieving for static pages when the pundit namespace is `:active_admin`. [#5777] by [@kwent] +* Fix show page title not being properly escaped if title's content included HTML. [#5802] by [@deivid-rodriguez] +* Revert [21b6138f] from [#5740] since it actually caused the performance in development to regress. [#5801] by [@deivid-rodriguez] + +## 2.1.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.0.0..v2.1.0) + +### Bug Fixes + +* Ensure application gets reloaded only once. [#5740] by [@jscheid] +* Crash when rendering comments from a custom controller block. [#5758] by [@deivid-rodriguez] +* Switch `sass` dependency to `sassc-rails`, since `sass` is no longer supported and since it restores support for directly importing `css` files. [#5504] by [@deivid-rodriguez] + +### Dependency Changes + +* Support for ruby 2.3 has been removed. [#5751] by [@deivid-rodriguez] + +## 2.0.0 [☰](https://github.com/activeadmin/activeadmin/compare/v2.0.0.rc2..v2.0.0) + +_No changes_. + +## 2.0.0.rc2 [☰](https://github.com/activeadmin/activeadmin/compare/v2.0.0.rc1..v2.0.0.rc2) + +### Enhancements + +* Require arbre `~> 1.2, >= 1.2.1`. [#5726] by [@ionut998], and [#5738] by [@deivid-rodriguez] + +## 2.0.0.rc1 [☰](https://github.com/activeadmin/activeadmin/compare/v1.4.3..v2.0.0.rc1) + +### Enhancements + +* Add your own content to the site `
`, like analytics. [#5590] by [@buren] + + ```ruby + ActiveAdmin.setup do |config| + config.head = ''.html_safe + end + ``` + +* Consider authorization when displaying comments in show page. [#5555] by [@amiuhle] +* Add better support for rendering lists. [#5370] by [@dkniffin] +* Undeprecate `config.register_stylesheet` and `config.register_javascript` for lack of better solution for including external assets. It might be reevaluated in the future. [#5662] by [@deivid-rodriguez] + +### Security Fixes + +* Prevent leaking hashed passwords via user CSV export and adds a config option for sensitive attributes. [#5486] by [@chrp] + +### Bug Fixes + +* Fix for paginated collections with `per_page: Array, pagination_total: false`. [#5627] by [@bartoszkopinski] +* Restrict ransack requirement to >= 2.1.1 to play nice with Rails 5.2.2. [#5632] by [@deivid-rodriguez] +* Bad interpolation variables on pagination keys in Lithuanian translation. [#5631] by [@deivid-rodriguez] +* Tabs are not correctly created when using non-transliteratable characters as title. [#5650] by [@panasyuk] +* Sidebar title internationalization. [#5417] by [@WaKeMaTTa] +* `filter` labels not allowing a `Proc` to be passed. [#5418] by [@WaKeMaTTa] + +### Dependency Changes + +* Rails 4.2 support has been dropped. [#5104] by [@javierjulio] and [@deivid-rodriguez] +* Dependency on coffee-rails has been removed. [#5081] by [@javierjulio] + If your application uses coffescript but was relying on ActiveAdmin to provide + the dependency, you need to add the `coffee-script` gem to your `Gemfile` to + restore it. If your only usage of coffescript was the + `active_admin.js.coffee` generated by ActiveAdmin's generator, you can also + convert that file to plain JS (`//= require active_admin/base` if you + didn't add any stuff to it). +* Devise 3 support has been dropped. [#5608] by [@deivid-rodriguez] and [@javierjulio] +* `action_item` without a name has been removed. [#5099] by [@javierjulio] + +## 1.4.3 [☰](https://github.com/activeadmin/activeadmin/compare/v1.4.2..v1.4.3) + +### Bug Fixes + +* Fix `form` parameter to `batch_action` no longer accepting procs. [#5611] by [@buren] and [@deivid-rodriguez] +* Fix passing a proc to `scope_to`. [#5611] by [@deivid-rodriguez] + +## 1.4.2 [☰](https://github.com/activeadmin/activeadmin/compare/v1.4.1..v1.4.2) + +### Bug Fixes + +* Fix `input_html` filter option evaluated only once. [#5376] by [@kjeldahl] + +## 1.4.1 [☰](https://github.com/activeadmin/activeadmin/compare/v1.4.0..v1.4.1) + +### Bug Fixes + +* Fix menu item link with method delete. [#5583] by [@tiagotex] + +## 1.4.0 [☰](https://github.com/activeadmin/activeadmin/compare/v1.3.1..v1.4.0) + +### Enhancements + +* Add missing I18n for comments. [#5458], [#5461] by [@mauriciopasquier] +* Fix batch_actions.delete_confirmation translation in zh-CN.yml. [#5453] by [@ShallmentMo] +* Add some missing italian translations. [#5433] by [@stefsava] +* Enhance some chinese translations. [#5413] by [@shouya] +* Add missing filter predicate translations to nb. [#5357] by [@rogerkk] +* Add missing norwegian comment translations. [#5375] by [@rogerkk] +* Add missing dutch translations. [#5368] by [@dennisvdvliet] +* Add missing german translations. [#5341] by [@eikes] +* Add missing spanish translation. [#5336] by [@mconiglio] +* Add from and to predicates for russian language. [#5330] by [@glebtv] +* Fix typo in finnish translation. [#5320] by [@JiiHu] +* Add missing turkish translations. [#5295] by [@kobeumut] +* Add missing chinese translations. [#5266] by [@jasl] +* Allow proc label in datepicker input. [#5408] by [@tiagotex] +* Add `group` attribute to scopes in order to show them in grouped. [#5359] by [@leio10] +* Add missing polish translations and improve existing ones. [#5537] by [@Wowu] +* Add `priority` option to `action_item`. [#5334] by [@andreslemik] + +### Bug Fixes + +* Fixed the string representation of the resolved `sort_key` when no explicit `sortable` attribute is passed. [#5464] by [@chumakoff] +* Fixed docs on the column `sortable` attribute (which actually doesn't have to be explicitly specified when a block is passed to column). [#5464] by [@chumakoff] +* Fixed `if:` scope option when a lambda is passed. [#5501] by [@deivid-rodriguez] +* Comment validation adding redundant errors when resource is missing. [#5517] by [@deivid-rodriguez] +* Fixed resource filtering by association when the resource has custom primary key. [#5446] by [@wasifhossain] +* Fixed "create another" checkbox styling. [#5324] by [@faucct] + +## 1.3.1 [☰](https://github.com/activeadmin/activeadmin/compare/v1.3.0..v1.3.1) + +### Bug Fixes + +* gemspec should have more permissive ransack dependency. [#5448] by [@varyonic] + +## 1.3.0 [☰](https://github.com/activeadmin/activeadmin/compare/v1.2.1..v1.3.0) + +### Enhancements + +* Rails 5.2 support [#5343] by [@varyonic], [#5399], [#5401] by [@zorab47] + +## 1.2.1 [☰](https://github.com/activeadmin/activeadmin/compare/v1.2.0..v1.2.1) + +### Bug Fixes + +* Resolve issue with [#5275] preventing XSS in filters sidebar. [#5299] by [@faucct] + +## 1.2.0 [☰](https://github.com/activeadmin/activeadmin/compare/v1.1.0..v1.2.0) + +### Enhancements + +* Do not display pagination info when there are no comments. [#5119] by [@alex-bogomolov] +* Revert generated config files to pluralized. [#5120] by [@varyonic], [#5137] by [@deivid-rodriguez] +* Warn when action definition overwrites controller method. [#5167] by [@aarek] +* Better performance of comments show view. [#5208] by [@dhyegofernando] +* Mitigate memory bloat [#4118] with CSV exports. [#5251] by [@f1sherman] +* Fix issue applying custom decorations. [#5253] by [@faucct] +* Brazilian locale updated. [#5125] by [@renotocn] +* Japanese locale updated. [#5143] by [@5t111111], [#5157] by [@innparusu95] +* Italian locale updated. [#5180] by [@blocknotes] +* Swedish locale updated. [#5187] by [@jawa] +* Vietnamese locale updated. [#5194] by [@Nguyenanh] +* Esperanto locale added. [#5210] by [@RobinvanderVliet] + +### Bug Fixes + +* Fix a couple of issues rendering filter labels. [#5223] by [@wspurgin] +* Prevent NameError when filtering on a namespaced association. [#5240] by [@DanielHeath] +* Fix undefined method error in Ransack when building filters. [#5238] by [@wspurgin] +* Fixed [#5198] Prevent XSS on sidebar's current filter rendering. [#5275] by [@deivid-rodriguez] +* Sanitize display_name. [#5284] by [@markstory] + +## 1.1.0 [☰](https://github.com/activeadmin/activeadmin/compare/v1.0.0..v1.1.0) + +### Bug Fixes + +* Fixed [#5093] Handle table prefix & table suffix for `ActiveAdminComment` model +* Fixed [#4173] by including the default Kaminari templates. [#5069] by [@javierjulio] +* Fixed [#5043]. Do not crash in sidebar rendering when a default scope is not specified. [#5044] by [@Fivell] +* Fixed [#3894]. Make tab's component work with non-ascii titles. [#5046] by [@Fivell] + +### Dependency Changes + +* Ruby 2.1 support has been dropped. [#5003] by [@deivid-rodriguez] +* Replaced `sass-rails` with `sass` dependency. [#5037] by [@javierjulio] +* Removed `jquery-ui-rails` as a dependency. [#5052] by [@javierjulio] + The specific jQuery UI assets used are now within the vendor directory. This + will be replaced by alternatives and dropped entirely in a major release. + Please remove any direct inclusions of `//= require jquery-ui`. This allows us + to upgrade to jquery v3. + +### Deprecations + +* Deprecated `config.register_stylesheet` and `config.register_javascript`. Import your CSS and JS files in `active_admin.scss` or `active_admin.js`. [#5060] by [@javierjulio] +* Deprecated `type` param from `status_tag` and related CSS classes [#4989] by [@javierjulio] + The method signature has changed from: + + ```ruby + status_tag(status, :ok, class: 'completed', label: 'on') + ``` + + to: + + ```ruby + status_tag(status, class: 'completed ok', label: 'on') + ``` + + The following CSS classes have been deprecated and will be removed in the future: + + ```css + .status_tag { + &.ok, &.published, &.complete, &.completed, &.green { background: #8daa92; } + &.warn, &.warning, &.orange { background: #e29b20; } + &.error, &.errored, &.red { background: #d45f53; } + } + ``` + +### Enhancements + +* Support proc as an input_html option value when declaring filters. [#5029] by [@Fivell] +* Base localization support, better associations handling for active filters sidebar. [#4951] by [@Fivell] +* Allow AA scopes to return paginated collections. [#4996] by [@Fivell] +* Added `scopes_show_count` configuration to setup show_count attribute for scopes globally. [#4950] by [@Fivell] +* Allow custom panel title given with `attributes_table`. [#4940] by [@ajw725] +* Allow passing a class to `action_item` block. [#4997] by [@Fivell] +* Add pagination to the comments section. [#5088] by [@alex-bogomolov] + +## 1.0.0 [☰](https://github.com/activeadmin/activeadmin/compare/v0.6.3..v1.0.0) ### Breaking Changes -* Rename `allow_comments` to `comments` for more consistent naming [#3695][] by [@pranas][] -* JavaScript `window.AA` has been removed, use `window.ActiveAdmin` [#3606][] by [@timoschilling][] -* `f.form_buffers` has been removed [#3486][] by [@varyonic][] -* Iconic has been removed [#3553][] by [@timoschilling][] -* `config.show_comments_in_menu` has been removed [#4187][] by [@drn][] - -### Enhancements - -#### Major - -* Migration from Metasearch to Ransack [#1979][] by [@seanlinsley][] -* Rails 4 support [#2326][] by many people <3 -* Rails 4.2 support [#3731][] by [@gonzedge][] and [@timoschilling][] - -#### Minor - -* Stream CSV downloads as they're generated [#3038][] by [@craigmcnamara][] - * Disable streaming in development for easier debugging [#3535][] by [@seanlinsley][] -* Improved code reloading [#3783][] by [@chancancode][] -* Do not auto link to inaccessible actions [#3686][] by [@pranas][] -* Allow to enable comments on per-resource basis [#3695][] by [@pranas][] -* Unify DSL for index `actions` and `actions dropdown: true` [#3463][] by [@timoschilling][] -* Add DSL method `includes` for `ActiveRecord::Relation#includes` [#3464][] by [@timoschilling][] -* BOM (byte order mark) configurable for CSV download [#3519][] by [@timoschilling][] -* Column block on table index is now sortable by default [#3075][] by [@dmitry][] -* Allow Arbre to be used inside ActiveAdmin forms [#3486][] by [@varyonic][] -* Make AA ORM-agnostic [#2545][] by [@johnnyshields][] -* Add multi-record support to `attributes_table_for` [#2544][] by [@zorab47][] -* Table CSS classes are now prefixed to prevent clashes [#2532][] by [@TimPetricola][] -* Allow Inherited Resources shorthand for redirection [#2001][] by [@seanlinsley][] -```ruby - controller do - # Redirects to index page instead of rendering updated resource - def update - update!{ collection_path } - end +* Rename `allow_comments` to `comments` for more consistent naming. [#3695] by [@pranas] +* JavaScript `window.AA` has been removed, use `window.ActiveAdmin`. [#3606] by [@timoschilling] +* `f.form_buffers` has been removed. [#3486] by [@varyonic] +* Iconic has been removed. [#3553] by [@timoschilling] +* `config.show_comments_in_menu` has been removed, see `config.comments_menu`. [#4187] by [@drn] +* Rails 3.2 & Ruby 1.9.3 support has been dropped. [#4848] by [@deivid-rodriguez] +* Ruby 2.0.0 support has been dropped. [#4851] by [@deivid-rodriguez] +* Rails 4.0 & 4.1 support has been dropped. [#4870] by [@deivid-rodriguez] + +### Enhancements + +* Migration from Metasearch to Ransack. [#1979] by [@seanlinsley] +* Rails 4 support. [#2326] by many people :heart: +* Rails 4.2 support. [#3731] by [@gonzedge] and [@timoschilling] +* Rails 5 support. [#4254] by [@seanlinsley] +* Rails 5.1 support. [#4882] by [@varyonic] +* "Create another" checkbox for the new resource page. [#4477] by [@bolshakov] +* Page supports belongs_to. [#4759] by [@Fivell] and [@zorab47] +* Support for custom sorting strategies. [#4768] by [@Fivell] +* Stream CSV downloads as they're generated. [#3038] by [@craigmcnamara] +* Disable streaming in development for easier debugging. [#3535] by [@seanlinsley] +* Improved code reloading. [#3783] by [@chancancode] +* Do not auto link to inaccessible actions. [#3686] by [@pranas] +* Allow to enable comments on per-resource basis. [#3695] by [@pranas] +* Unify DSL for index `actions` and `actions dropdown: true`. [#3463] by [@timoschilling] +* Add DSL method `includes` for `ActiveRecord::Relation#includes`. [#3464] by [@timoschilling] +* BOM (byte order mark) configurable for CSV download. [#3519] by [@timoschilling] +* Column block on table index is now sortable by default. [#3075] by [@dmitry] +* Allow Arbre to be used inside ActiveAdmin forms. [#3486] by [@varyonic] +* Make AA ORM-agnostic. [#2545] by [@johnnyshields] +* Add multi-record support to `attributes_table_for`. [#2544] by [@zorab47] +* Table CSS classes are now prefixed to prevent clashes. [#2532] by [@TimPetricola] +* Allow Inherited Resources shorthand for redirection. [#2001] by [@seanlinsley] + + ```ruby + controller do + # Redirects to index page instead of rendering updated resource + def update + update!{ collection_path } end -``` + end + ``` + +* Accept block for download links. [#2040] by [@potatosalad] -* Accept block for download links [#2040][] by [@potatosalad][] -```ruby -index download_links: ->{ can?(:view_all_download_links) || [:pdf] } -``` -* Comments menu can be customized via configuration passed to `config.comments_menu` [#4187][] by [@drn][] + ```ruby + index download_links: ->{ can?(:view_all_download_links) || [:pdf] } + ``` + +* Comments menu can be customized via configuration passed to `config.comments_menu`. [#4187] by [@drn] +* Added `config.route_options` to namespace to customize routes. [#4731] by [@stereoscott] ### Security Fixes -* Prevents potential DOS attack via Ruby symbols [#1926][] by [@seanlinsley][] - * [this isn't an issue for those using Ruby >= 2.2](http://rubykaigi.org/2014/presentation/S-NarihiroNakamura) +* Prevents access to formats that the user not permitted to see. [#4867] by [@Fivell] and [@timoschilling] +* Prevents potential DOS attack via Ruby symbols. [#1926] by [@seanlinsley] + * [this isn't an issue for those using Ruby >= 2.2](https://rubykaigi.org/2014/presentation/S-NarihiroNakamura) ### Bug Fixes -* Fixes filters for `has_many :through` relationships [#2541][] by [@shekibobo][] -* "New" action item now only shows up on the index page bf659bc by [@seanlinsley][] -* Fixes comment creation bug with aliased resources 9a082486 by [@seanlinsley][] -* Fixes the deletion of `:if` and `:unless` from filters [#2523][] by [@PChambino][] +* Fixes filters for `has_many :through` relationships. [#2541] by [@shekibobo] +* "New" action item now only shows up on the index page. bf659bc by [@seanlinsley] +* Fixes comment creation bug with aliased resources. 9a082486 by [@seanlinsley] +* Fixes the deletion of `:if` and `:unless` from filters. [#2523] by [@PChambino] ### Deprecations -* `ActiveAdmin::Event` (`ActiveAdmin::EventDispatcher`) [#3435][] by [@timoschilling][] +* `ActiveAdmin::Event` (`ActiveAdmin::EventDispatcher`). [#3435] by [@timoschilling] `ActiveAdmin::Event` will be removed in a future version, ActiveAdmin switched - to use `ActiveSupport::Notifications`. + to use `ActiveSupport::Notifications` NOTE: The blog parameters has changed: -```ruby -ActiveSupport::Notifications.subscribe ActiveAdmin::Application::BeforeLoadEvent do |event, *args| - # some code -end -ActiveSupport::Notifications.publish ActiveAdmin::Application::BeforeLoadEvent, "some data" -``` + ```ruby + ActiveSupport::Notifications.subscribe ActiveAdmin::Application::BeforeLoadEvent do |event, *args| + # some code + end + + ActiveSupport::Notifications.publish ActiveAdmin::Application::BeforeLoadEvent, "some data" + ``` + +* `action_item` without a name, to introduce a solution for removing action items (`remove_action_item(name)`). [#3091] by [@amiel] ## Previous Changes -Please check [0-6-stable](https://github.com/activeadmin/activeadmin/blob/0-6-stable/CHANGELOG.md) for previous changes. +Please check [0-6-stable] for previous changes. + +[0-6-stable]: https://github.com/activeadmin/activeadmin/blob/0-6-stable/CHANGELOG.md - [#1926]: https://github.com/activeadmin/activeadmin/issues/1926 [#1979]: https://github.com/activeadmin/activeadmin/issues/1979 [#2001]: https://github.com/activeadmin/activeadmin/issues/2001 @@ -89,27 +653,381 @@ Please check [0-6-stable](https://github.com/activeadmin/activeadmin/blob/0-6-st [#2541]: https://github.com/activeadmin/activeadmin/issues/2541 [#2544]: https://github.com/activeadmin/activeadmin/issues/2544 [#2545]: https://github.com/activeadmin/activeadmin/issues/2545 +[#3038]: https://github.com/activeadmin/activeadmin/issues/3038 [#3075]: https://github.com/activeadmin/activeadmin/issues/3075 [#3463]: https://github.com/activeadmin/activeadmin/issues/3463 [#3464]: https://github.com/activeadmin/activeadmin/issues/3464 [#3486]: https://github.com/activeadmin/activeadmin/issues/3486 [#3519]: https://github.com/activeadmin/activeadmin/issues/3519 +[#3535]: https://github.com/activeadmin/activeadmin/issues/3535 [#3553]: https://github.com/activeadmin/activeadmin/issues/3553 [#3606]: https://github.com/activeadmin/activeadmin/issues/3606 [#3686]: https://github.com/activeadmin/activeadmin/issues/3686 [#3695]: https://github.com/activeadmin/activeadmin/issues/3695 [#3731]: https://github.com/activeadmin/activeadmin/issues/3731 [#3783]: https://github.com/activeadmin/activeadmin/issues/3783 -[@PChambino]: https://github.com/PChambino -[@TimPetricola]: https://github.com/TimPetricola +[#3894]: https://github.com/activeadmin/activeadmin/issues/3894 +[#4118]: https://github.com/activeadmin/activeadmin/issues/4118 +[#4173]: https://github.com/activeadmin/activeadmin/issues/4173 +[#4187]: https://github.com/activeadmin/activeadmin/issues/4187 +[#4254]: https://github.com/activeadmin/activeadmin/issues/4254 +[#5043]: https://github.com/activeadmin/activeadmin/issues/5043 +[#5198]: https://github.com/activeadmin/activeadmin/issues/5198 + +[21b6138f]: https://github.com/activeadmin/activeadmin/pull/5740/commits/21b6138fdcf58cd54c3f1d3f60cb1127b174b40f + +[#3091]: https://github.com/activeadmin/activeadmin/pull/3091 +[#3435]: https://github.com/activeadmin/activeadmin/pull/3435 +[#4477]: https://github.com/activeadmin/activeadmin/pull/4477 +[#4731]: https://github.com/activeadmin/activeadmin/pull/4731 +[#4759]: https://github.com/activeadmin/activeadmin/pull/4759 +[#4768]: https://github.com/activeadmin/activeadmin/pull/4768 +[#4848]: https://github.com/activeadmin/activeadmin/pull/4848 +[#4851]: https://github.com/activeadmin/activeadmin/pull/4851 +[#4867]: https://github.com/activeadmin/activeadmin/pull/4867 +[#4870]: https://github.com/activeadmin/activeadmin/pull/4870 +[#4882]: https://github.com/activeadmin/activeadmin/pull/4882 +[#4940]: https://github.com/activeadmin/activeadmin/pull/4940 +[#4950]: https://github.com/activeadmin/activeadmin/pull/4950 +[#4951]: https://github.com/activeadmin/activeadmin/pull/4951 +[#4989]: https://github.com/activeadmin/activeadmin/pull/4989 +[#4996]: https://github.com/activeadmin/activeadmin/pull/4996 +[#4997]: https://github.com/activeadmin/activeadmin/pull/4997 +[#5003]: https://github.com/activeadmin/activeadmin/pull/5003 +[#5029]: https://github.com/activeadmin/activeadmin/pull/5029 +[#5037]: https://github.com/activeadmin/activeadmin/pull/5037 +[#5044]: https://github.com/activeadmin/activeadmin/pull/5044 +[#5046]: https://github.com/activeadmin/activeadmin/pull/5046 +[#5052]: https://github.com/activeadmin/activeadmin/pull/5052 +[#5060]: https://github.com/activeadmin/activeadmin/pull/5060 +[#5069]: https://github.com/activeadmin/activeadmin/pull/5069 +[#5078]: https://github.com/activeadmin/activeadmin/pull/5078 +[#5081]: https://github.com/activeadmin/activeadmin/pull/5081 +[#5088]: https://github.com/activeadmin/activeadmin/pull/5088 +[#5093]: https://github.com/activeadmin/activeadmin/pull/5093 +[#5099]: https://github.com/activeadmin/activeadmin/pull/5099 +[#5104]: https://github.com/activeadmin/activeadmin/pull/5104 +[#5119]: https://github.com/activeadmin/activeadmin/pull/5119 +[#5120]: https://github.com/activeadmin/activeadmin/pull/5120 +[#5125]: https://github.com/activeadmin/activeadmin/pull/5125 +[#5137]: https://github.com/activeadmin/activeadmin/pull/5137 +[#5143]: https://github.com/activeadmin/activeadmin/pull/5143 +[#5157]: https://github.com/activeadmin/activeadmin/pull/5157 +[#5167]: https://github.com/activeadmin/activeadmin/pull/5167 +[#5180]: https://github.com/activeadmin/activeadmin/pull/5180 +[#5187]: https://github.com/activeadmin/activeadmin/pull/5187 +[#5194]: https://github.com/activeadmin/activeadmin/pull/5194 +[#5208]: https://github.com/activeadmin/activeadmin/pull/5208 +[#5210]: https://github.com/activeadmin/activeadmin/pull/5210 +[#5223]: https://github.com/activeadmin/activeadmin/pull/5223 +[#5238]: https://github.com/activeadmin/activeadmin/pull/5238 +[#5240]: https://github.com/activeadmin/activeadmin/pull/5240 +[#5251]: https://github.com/activeadmin/activeadmin/pull/5251 +[#5253]: https://github.com/activeadmin/activeadmin/pull/5253 +[#5266]: https://github.com/activeadmin/activeadmin/pull/5266 +[#5272]: https://github.com/activeadmin/activeadmin/pull/5272 +[#5275]: https://github.com/activeadmin/activeadmin/pull/5275 +[#5284]: https://github.com/activeadmin/activeadmin/pull/5284 +[#5295]: https://github.com/activeadmin/activeadmin/pull/5295 +[#5299]: https://github.com/activeadmin/activeadmin/pull/5299 +[#5320]: https://github.com/activeadmin/activeadmin/pull/5320 +[#5324]: https://github.com/activeadmin/activeadmin/pull/5324 +[#5330]: https://github.com/activeadmin/activeadmin/pull/5330 +[#5334]: https://github.com/activeadmin/activeadmin/pull/5334 +[#5336]: https://github.com/activeadmin/activeadmin/pull/5336 +[#5341]: https://github.com/activeadmin/activeadmin/pull/5341 +[#5343]: https://github.com/activeadmin/activeadmin/pull/5343 +[#5357]: https://github.com/activeadmin/activeadmin/pull/5357 +[#5359]: https://github.com/activeadmin/activeadmin/pull/5359 +[#5368]: https://github.com/activeadmin/activeadmin/pull/5368 +[#5370]: https://github.com/activeadmin/activeadmin/pull/5370 +[#5375]: https://github.com/activeadmin/activeadmin/pull/5375 +[#5376]: https://github.com/activeadmin/activeadmin/pull/5376 +[#5399]: https://github.com/activeadmin/activeadmin/pull/5399 +[#5401]: https://github.com/activeadmin/activeadmin/pull/5401 +[#5408]: https://github.com/activeadmin/activeadmin/pull/5408 +[#5413]: https://github.com/activeadmin/activeadmin/pull/5413 +[#5417]: https://github.com/activeadmin/activeadmin/pull/5417 +[#5418]: https://github.com/activeadmin/activeadmin/pull/5418 +[#5433]: https://github.com/activeadmin/activeadmin/pull/5433 +[#5446]: https://github.com/activeadmin/activeadmin/pull/5446 +[#5448]: https://github.com/activeadmin/activeadmin/pull/5448 +[#5453]: https://github.com/activeadmin/activeadmin/pull/5453 +[#5458]: https://github.com/activeadmin/activeadmin/pull/5458 +[#5461]: https://github.com/activeadmin/activeadmin/pull/5461 +[#5464]: https://github.com/activeadmin/activeadmin/pull/5464 +[#5486]: https://github.com/activeadmin/activeadmin/pull/5486 +[#5501]: https://github.com/activeadmin/activeadmin/pull/5501 +[#5504]: https://github.com/activeadmin/activeadmin/pull/5504 +[#5517]: https://github.com/activeadmin/activeadmin/pull/5517 +[#5537]: https://github.com/activeadmin/activeadmin/pull/5537 +[#5548]: https://github.com/activeadmin/activeadmin/pull/5548 +[#5555]: https://github.com/activeadmin/activeadmin/pull/5555 +[#5583]: https://github.com/activeadmin/activeadmin/pull/5583 +[#5590]: https://github.com/activeadmin/activeadmin/pull/5590 +[#5608]: https://github.com/activeadmin/activeadmin/pull/5608 +[#5611]: https://github.com/activeadmin/activeadmin/pull/5611 +[#5627]: https://github.com/activeadmin/activeadmin/pull/5627 +[#5631]: https://github.com/activeadmin/activeadmin/pull/5631 +[#5632]: https://github.com/activeadmin/activeadmin/pull/5632 +[#5650]: https://github.com/activeadmin/activeadmin/pull/5650 +[#5660]: https://github.com/activeadmin/activeadmin/pull/5660 +[#5662]: https://github.com/activeadmin/activeadmin/pull/5662 +[#5710]: https://github.com/activeadmin/activeadmin/pull/5710 +[#5726]: https://github.com/activeadmin/activeadmin/pull/5726 +[#5738]: https://github.com/activeadmin/activeadmin/pull/5738 +[#5740]: https://github.com/activeadmin/activeadmin/pull/5740 +[#5751]: https://github.com/activeadmin/activeadmin/pull/5751 +[#5758]: https://github.com/activeadmin/activeadmin/pull/5758 +[#5777]: https://github.com/activeadmin/activeadmin/pull/5777 +[#5794]: https://github.com/activeadmin/activeadmin/pull/5794 +[#5800]: https://github.com/activeadmin/activeadmin/pull/5800 +[#5801]: https://github.com/activeadmin/activeadmin/pull/5801 +[#5802]: https://github.com/activeadmin/activeadmin/pull/5802 +[#5811]: https://github.com/activeadmin/activeadmin/pull/5811 +[#5816]: https://github.com/activeadmin/activeadmin/pull/5816 +[#5822]: https://github.com/activeadmin/activeadmin/pull/5822 +[#5826]: https://github.com/activeadmin/activeadmin/pull/5826 +[#5831]: https://github.com/activeadmin/activeadmin/pull/5831 +[#5842]: https://github.com/activeadmin/activeadmin/pull/5842 +[#5854]: https://github.com/activeadmin/activeadmin/pull/5854 +[#5855]: https://github.com/activeadmin/activeadmin/pull/5855 +[#5867]: https://github.com/activeadmin/activeadmin/pull/5867 +[#5870]: https://github.com/activeadmin/activeadmin/pull/5870 +[#5874]: https://github.com/activeadmin/activeadmin/pull/5874 +[#5877]: https://github.com/activeadmin/activeadmin/pull/5877 +[#5886]: https://github.com/activeadmin/activeadmin/pull/5886 +[#5887]: https://github.com/activeadmin/activeadmin/pull/5887 +[#5894]: https://github.com/activeadmin/activeadmin/pull/5894 +[#5895]: https://github.com/activeadmin/activeadmin/pull/5895 +[#5929]: https://github.com/activeadmin/activeadmin/pull/5929 +[#5931]: https://github.com/activeadmin/activeadmin/pull/5931 +[#5938]: https://github.com/activeadmin/activeadmin/pull/5938 +[#5943]: https://github.com/activeadmin/activeadmin/pull/5943 +[#5946]: https://github.com/activeadmin/activeadmin/pull/5946 +[#5956]: https://github.com/activeadmin/activeadmin/pull/5956 +[#5957]: https://github.com/activeadmin/activeadmin/pull/5957 +[#5994]: https://github.com/activeadmin/activeadmin/pull/5994 +[#6000]: https://github.com/activeadmin/activeadmin/pull/6000 +[#6002]: https://github.com/activeadmin/activeadmin/pull/6002 +[#6047]: https://github.com/activeadmin/activeadmin/pull/6047 +[#6086]: https://github.com/activeadmin/activeadmin/pull/6086 +[#6099]: https://github.com/activeadmin/activeadmin/pull/6099 +[#6124]: https://github.com/activeadmin/activeadmin/pull/6124 +[#6149]: https://github.com/activeadmin/activeadmin/pull/6149 +[#6195]: https://github.com/activeadmin/activeadmin/pull/6195 +[#6198]: https://github.com/activeadmin/activeadmin/pull/6198 +[#6210]: https://github.com/activeadmin/activeadmin/pull/6210 +[#6221]: https://github.com/activeadmin/activeadmin/pull/6221 +[#6232]: https://github.com/activeadmin/activeadmin/pull/6232 +[#6249]: https://github.com/activeadmin/activeadmin/pull/6249 +[#6315]: https://github.com/activeadmin/activeadmin/pull/6315 +[#6318]: https://github.com/activeadmin/activeadmin/pull/6318 +[#6341]: https://github.com/activeadmin/activeadmin/pull/6341 +[#6342]: https://github.com/activeadmin/activeadmin/pull/6342 +[#6368]: https://github.com/activeadmin/activeadmin/pull/6368 +[#6393]: https://github.com/activeadmin/activeadmin/pull/6393 +[#6422]: https://github.com/activeadmin/activeadmin/pull/6422 +[#6451]: https://github.com/activeadmin/activeadmin/pull/6451 +[#6460]: https://github.com/activeadmin/activeadmin/pull/6460 +[#6462]: https://github.com/activeadmin/activeadmin/pull/6462 +[#6482]: https://github.com/activeadmin/activeadmin/pull/6482 +[#6487]: https://github.com/activeadmin/activeadmin/pull/6487 +[#6523]: https://github.com/activeadmin/activeadmin/pull/6523 +[#6535]: https://github.com/activeadmin/activeadmin/pull/6535 +[#6536]: https://github.com/activeadmin/activeadmin/pull/6536 +[#6548]: https://github.com/activeadmin/activeadmin/pull/6548 +[#6583]: https://github.com/activeadmin/activeadmin/pull/6583 +[#6584]: https://github.com/activeadmin/activeadmin/pull/6584 +[#6872]: https://github.com/activeadmin/activeadmin/pull/6872 +[#6873]: https://github.com/activeadmin/activeadmin/pull/6873 +[#6884]: https://github.com/activeadmin/activeadmin/pull/6884 +[#6906]: https://github.com/activeadmin/activeadmin/pull/6906 +[#6915]: https://github.com/activeadmin/activeadmin/pull/6915 +[#6916]: https://github.com/activeadmin/activeadmin/pull/6916 +[#6922]: https://github.com/activeadmin/activeadmin/pull/6922 +[#6936]: https://github.com/activeadmin/activeadmin/pull/6936 +[#6954]: https://github.com/activeadmin/activeadmin/pull/6954 +[#6959]: https://github.com/activeadmin/activeadmin/pull/6959 +[#7002]: https://github.com/activeadmin/activeadmin/pull/7002 +[#7013]: https://github.com/activeadmin/activeadmin/pull/7013 +[#7095]: https://github.com/activeadmin/activeadmin/pull/7095 +[#7127]: https://github.com/activeadmin/activeadmin/pull/7127 +[#7144]: https://github.com/activeadmin/activeadmin/pull/7144 +[#7170]: https://github.com/activeadmin/activeadmin/pull/7170 +[#7181]: https://github.com/activeadmin/activeadmin/pull/7181 +[#7205]: https://github.com/activeadmin/activeadmin/pull/7205 +[#7235]: https://github.com/activeadmin/activeadmin/pull/7235 +[#7236]: https://github.com/activeadmin/activeadmin/pull/7236 +[#7262]: https://github.com/activeadmin/activeadmin/pull/7262 +[#7293]: https://github.com/activeadmin/activeadmin/pull/7293 +[#7332]: https://github.com/activeadmin/activeadmin/pull/7332 +[#7336]: https://github.com/activeadmin/activeadmin/pull/7336 +[#7340]: https://github.com/activeadmin/activeadmin/pull/7340 +[#7341]: https://github.com/activeadmin/activeadmin/pull/7341 +[#7349]: https://github.com/activeadmin/activeadmin/pull/7349 +[#7350]: https://github.com/activeadmin/activeadmin/pull/7350 +[#7377]: https://github.com/activeadmin/activeadmin/pull/7377 +[#7384]: https://github.com/activeadmin/activeadmin/pull/7384 +[#7394]: https://github.com/activeadmin/activeadmin/pull/7394 +[#7453]: https://github.com/activeadmin/activeadmin/pull/7453 +[#7475]: https://github.com/activeadmin/activeadmin/pull/7475 +[#7476]: https://github.com/activeadmin/activeadmin/pull/7476 +[#7479]: https://github.com/activeadmin/activeadmin/pull/7479 +[#7487]: https://github.com/activeadmin/activeadmin/pull/7487 +[#7488]: https://github.com/activeadmin/activeadmin/pull/7488 +[#7541]: https://github.com/activeadmin/activeadmin/pull/7541 +[#7556]: https://github.com/activeadmin/activeadmin/pull/7556 +[#7599]: https://github.com/activeadmin/activeadmin/pull/7599 +[#7653]: https://github.com/activeadmin/activeadmin/pull/7653 +[#7772]: https://github.com/activeadmin/activeadmin/pull/7772 +[#7920]: https://github.com/activeadmin/activeadmin/pull/7920 +[#7944]: https://github.com/activeadmin/activeadmin/pull/7944 +[#7984]: https://github.com/activeadmin/activeadmin/pull/7984 +[#7985]: https://github.com/activeadmin/activeadmin/pull/7985 +[#7986]: https://github.com/activeadmin/activeadmin/pull/7986 +[#7993]: https://github.com/activeadmin/activeadmin/pull/7993 +[#8009]: https://github.com/activeadmin/activeadmin/pull/8009 +[#8010]: https://github.com/activeadmin/activeadmin/pull/8010 +[#8098]: https://github.com/activeadmin/activeadmin/pull/8098 +[#8102]: https://github.com/activeadmin/activeadmin/pull/8102 +[#8105]: https://github.com/activeadmin/activeadmin/pull/8105 +[#8106]: https://github.com/activeadmin/activeadmin/pull/8106 + + +[@1000ship]: https://github.com/1000ship +[@5t111111]: https://github.com/5t111111 +[@aarek]: https://github.com/aarek +[@adler99]: https://github.com/adler99 +[@agrobbin]: https://github.com/agrobbin +[@ajw725]: https://github.com/ajw725 +[@alejandroperea]: https://github.com/alejandroperea +[@alex-bogomolov]: https://github.com/alex-bogomolov +[@amiel]: https://github.com/amiel +[@amit]: https://github.com/amit +[@amiuhle]: https://github.com/amiuhle +[@andreslemik]: https://github.com/andreslemik +[@bartoszkopinski]: https://github.com/bartoszkopinski +[@bliof]: https://github.com/bliof +[@blocknotes]: https://github.com/blocknotes +[@bolshakov]: https://github.com/bolshakov +[@brunoarueira]: https://github.com/brunoarueira +[@brunvez]: https://github.com/brunvez +[@buren]: https://github.com/buren +[@carlottostromstedt]: https://github.com/carlottostromstedt [@chancancode]: https://github.com/chancancode +[@chrp]: https://github.com/chrp +[@chumakoff]: https://github.com/chumakoff +[@cprodhomme]: https://github.com/cprodhomme +[@craigmcnamara]: https://github.com/craigmcnamara +[@DanielHeath]: https://github.com/DanielHeath +[@deivid-rodriguez]: https://github.com/deivid-rodriguez +[@dennisvdvliet]: https://github.com/dennisvdvliet +[@dhyegofernando]: https://github.com/dhyegofernando +[@dkniffin]: https://github.com/dkniffin [@dmitry]: https://github.com/dmitry +[@drn]: https://github.com/drn +[@eikes]: https://github.com/eikes +[@f1sherman]: https://github.com/f1sherman +[@FabioRos]: https://github.com/FabioRos +[@faucct]: https://github.com/faucct +[@Fivell]: https://github.com/Fivell +[@Fs00]: https://github.com/Fs00 +[@fuzziness]: https://github.com/fuzziness +[@gabo-cs]: https://github.com/gabo-cs +[@giapnhdev]: https://github.com/giapnhdev +[@gigorok]: https://github.com/gigorok +[@glebtv]: https://github.com/glebtv [@gonzedge]: https://github.com/gonzedge +[@guigs]: https://github.com/guigs +[@HappyKadaver]: https://github.com/HappyKadaver +[@hfl]: https://github.com/hfl +[@imcvampire]: https://github.com/imcvampire +[@innparusu95]: https://github.com/innparusu95 +[@ionut998]: https://github.com/ionut998 +[@irmela]: https://github.com/irmela +[@ispyropoulos]: https://github.com/ispyropoulos +[@Ivanov-Anton]: https://github.com/Ivanov-Anton +[@jasl]: https://github.com/jasl +[@javawizard]: https://github.com/javawizard +[@javierjulio]: https://github.com/javierjulio +[@jawa]: https://github.com/jawa +[@jaynetics]: https://github.com/jaynetics +[@JewelSam]: https://github.com/JewelSam +[@JiiHu]: https://github.com/JiiHu +[@jiikko]: https://github.com/jiikko [@johnnyshields]: https://github.com/johnnyshields +[@jscheid]: https://github.com/jscheid +[@juril33t]: https://github.com/juril33t +[@jwesorick]: https://github.com/jwesorick +[@Karoid]: https://github.com/Karoid +[@kjeldahl]: https://github.com/kjeldahl +[@ko-lem]: https://github.com/ko-lem +[@kobeumut]: https://github.com/kobeumut +[@Kris-LIBIS]: https://github.com/Kris-LIBIS +[@krzcho]: https://github.com/krzcho +[@kwent]: https://github.com/kwent +[@lanzhiheng]: https://github.com/lanzhiheng +[@leio10]: https://github.com/leio10 +[@littleforest]: https://github.com/littleforest +[@Looooong]: https://github.com/Looooong +[@lubosch]: https://github.com/lubosch +[@markstory]: https://github.com/markstory +[@mauriciopasquier]: https://github.com/mauriciopasquier +[@mconiglio]: https://github.com/mconiglio +[@mgrunberg]: https://github.com/mgrunberg +[@micred]: https://github.com/micred +[@mirelon]: https://github.com/mirelon +[@MmKolodziej]: https://github.com/MmKolodziej +[@mshalaby]: https://github.com/mshalaby +[@munen]: https://github.com/munen +[@mvz]: https://github.com/mvz +[@ndbroadbent]: https://github.com/ndbroadbent +[@ngouy]: https://github.com/ngouy +[@Nguyenanh]: https://github.com/Nguyenanh +[@orkhan]: https://github.com/orkhan +[@panasyuk]: https://github.com/panasyuk +[@PChambino]: https://github.com/PChambino [@potatosalad]: https://github.com/potatosalad [@pranas]: https://github.com/pranas +[@ray-curran]: https://github.com/ray-curran +[@renotocn]: https://github.com/renotocn +[@rn0rno]: https://github.com/rn0rno +[@RobinvanderVliet]: https://github.com/RobinvanderVliet +[@rogerkk]: https://github.com/rogerkk +[@roramirez]: https://github.com/roramirez +[@rs-phunt]: https://github.com/rs-phunt +[@sanfrecce-osaka]: https://github.com/sanfrecce-osaka [@seanlinsley]: https://github.com/seanlinsley +[@sergey-alekseev]: https://github.com/sergey-alekseev +[@sgara]: https://github.com/sgara +[@ShallmentMo]: https://github.com/ShallmentMo [@shekibobo]: https://github.com/shekibobo +[@shouya]: https://github.com/shouya +[@sjieg]: https://github.com/sjieg +[@sprql]: https://github.com/sprql +[@stefsava]: https://github.com/stefsava +[@stereoscott]: https://github.com/stereoscott +[@tagliala]: https://github.com/tagliala +[@taralbass]: https://github.com/taralbass +[@tf]: https://github.com/tf +[@tiagotex]: https://github.com/tiagotex [@timoschilling]: https://github.com/timoschilling +[@TimPetricola]: https://github.com/TimPetricola +[@timwis]: https://github.com/timwis +[@tomgilligan]: https://github.com/tomgilligan +[@TonyArra]: https://github.com/TonyArra +[@tordans]: https://github.com/tordans +[@tvziet]: https://github.com/tvziet +[@utkarsh2102]: https://github.com/utkarsh2102 [@varyonic]: https://github.com/varyonic +[@vcsjones]: https://github.com/vcsjones +[@vfonic]: https://github.com/vfonic +[@violeta-p]: https://github.com/violeta-p +[@vlad-psh]: https://github.com/vlad-psh +[@WaKeMaTTa]: https://github.com/WaKeMaTTa +[@wasifhossain]: https://github.com/wasifhossain +[@westonganger]: https://github.com/westonganger +[@Wowu]: https://github.com/Wowu +[@wspurgin]: https://github.com/wspurgin [@zorab47]: https://github.com/zorab47 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 01b8644f13a..a016f4e9c9f 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,22 +1,74 @@ -# Contributor Code of Conduct +# Contributor Covenant Code of Conduct -As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. +## Our Pledge -We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery -* Personal attacks -* Trolling or insulting/derogatory comments +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment -* Publishing other's private information, such as physical or electronic addresses, without explicit permission -* Other unethical or unprofessional conduct. +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting one or more of the project maintainers. All complaints +will be reviewed and investigated and will result in a response that is deemed +necessary and appropriate to the circumstances. The project team is obligated to +maintain confidentiality with regard to the reporter of an incident. Further +details of specific enforcement policies may be posted separately. -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. -This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. +## Attribution -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available [here][source]. -This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) +[homepage]: https://www.contributor-covenant.org +[source]: https://www.contributor-covenant.org/version/1/4/code-of-conduct.html diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aec68e849f3..74536f6d925 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,144 +1,106 @@ -## Contributing +# Contributing -First off, thank you for considering contributing to Active Admin. It's people -like you that make Active Admin such a great tool. +Thanks for your interest in contributing to ActiveAdmin! Please take a moment to review this document **before submitting a pull request**. -### 1. Where do I go from here? +## Pull requests -If you've noticed a bug or have a question that doesn't belong on the -[mailing list](http://groups.google.com/group/activeadmin) or -[Stack Overflow](http://stackoverflow.com/questions/tagged/activeadmin), -[search the issue tracker](https://github.com/activeadmin/activeadmin/issues?q=something) -to see if someone else in the community has already created a ticket. -If not, go ahead and [make one](https://github.com/activeadmin/activeadmin/issues/new)! +**Please ask first before starting work on any significant new features.** -### 2. Fork & create a branch +It's never a fun experience to have your pull request declined after investing a lot of time and effort into a new feature. To avoid this from happening, we request that contributors create [a feature request](https://github.com/activeadmin/activeadmin/discussions/new?category=ideas) to first discuss any new ideas. Your ideas and suggestions are welcome! -If this is something you think you can fix, then -[fork Active Admin](https://help.github.com/articles/fork-a-repo) -and create a branch with a descriptive name. +Please ensure that the tests are passing when submitting a pull request. If you're adding new features to ActiveAdmin, please include tests. -A good branch name would be (where issue #325 is the ticket you're working on): +## Where do I go from here? -```sh -git checkout -b 325-add-japanese-translations -``` - -### 3. Get the test suite running +For any questions, support, or ideas, etc. [please create a GitHub discussion](https://github.com/activeadmin/activeadmin/discussions/new). If you've noticed a bug, [please submit an issue][new issue]. -Install the development dependencies: - -```sh -bundle install -``` +### Fork and create a branch -Now you should be able to run the entire suite using: +If this is something you think you can fix, then [fork Active Admin] and create +a branch with a descriptive name. -```sh -rake test -``` +### Get the test suite running -Which will generate a rails application in `spec/rails` to run the tests against. +Make sure you're using a recent Ruby and Node version. You'll also need Chrome installed in order to run Cucumber scenarios. -If your tests are passing locally but they're failing on Travis, reset your test environment: +Now install the development dependencies: ```sh -rm -rf spec/rails && bundle update +gem install foreman +bundle install --all +npm install ``` -### 4. Implement your fix or feature - -At this point, you're ready to make your changes! Feel free to ask for help; -everyone is a beginner at first :smile_cat: - -### 5. View your changes in a Rails application - -Active Admin is meant to be used by humans, not cucumbers. So make sure to take -a look at your changes in a browser. - -To boot up a test Rails app: +Now you should be able to run the entire suite using: ```sh -script/local server +bin/rake ``` -This will automatically create a Rails app if none already exists, and store it in the -`.test-rails-apps` folder. The currently active app is symlinked to `test-rails-app`. +The task will generate a sample Rails application in `tmp/test_apps` to run the +test suite against. -If you have any Bundler issues, call the `use_rails` script then prepend -the version of rails you would like to use in an environment variable: +If you want to test against a Rails version different from the latest, make sure +you use the correct Gemfile, for example: ```sh -script/use_rails 4.0.0 -RAILS=4.0.0 script/local server +export BUNDLE_GEMFILE=gemfiles/rails_61/Gemfile ``` -You should now be able to open