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..1588a326238 --- /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.2+ (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..04e9a4c81e6 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,98 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: daily + groups: + github_actions: + patterns: + - "*" + - package-ecosystem: bundler + directory: / + schedule: + interval: monthly + versioning-strategy: lockfile-only + groups: + rails_default: + patterns: + - "*" + - package-ecosystem: npm + directory: / + schedule: + interval: monthly + versioning-strategy: lockfile-only + groups: + npm: + patterns: + - "*" + - package-ecosystem: bundler + directory: /gemfiles/rails_70 + schedule: + interval: monthly + versioning-strategy: lockfile-only + groups: + rails_70: + patterns: + - "*" + ignore: + - dependency-name: rails + versions: ">= 7.1.0" + - dependency-name: rails-i18n + versions: ">= 8.0.0" + - dependency-name: railties + versions: ">= 7.1.0" + - dependency-name: rspec-rails + versions: ">= 8.0.0" + - dependency-name: sqlite3 + versions: ">= 2" + - package-ecosystem: bundler + directory: /gemfiles/rails_71 + schedule: + interval: monthly + versioning-strategy: lockfile-only + groups: + rails_71: + patterns: + - "*" + ignore: + - dependency-name: rails + versions: ">= 7.2.0" + - dependency-name: rails-i18n + versions: ">= 8.0.0" + - dependency-name: railties + versions: ">= 7.2.0" + - dependency-name: ransack + versions: ">= 4.4.1" + - dependency-name: rspec-rails + versions: ">= 8.0.0" + - package-ecosystem: bundler + directory: /gemfiles/rails_72 + schedule: + interval: monthly + versioning-strategy: lockfile-only + groups: + rails_72: + patterns: + - "*" + 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 + schedule: + interval: monthly + versioning-strategy: lockfile-only + groups: + rails_80: + patterns: + - "*" + 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..f9769b1fd28 --- /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: ${{ false && (github.event_name == 'pull_request' || github.repository_owner == 'activeadmin') }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: tj-actions/changed-files@v47 + id: changed-files + with: + files: | + app/** + config/** + lib/*.rb + lib/active_admin/** + tasks/bug_report_template.rb + Gemfile* + *.gemspec + - uses: ruby/setup-ruby@v1 + 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..bc843fdc7c3 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,123 @@ +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" + - "3.2" + os: + - ubuntu-latest + rails: + - rails_81 + - rails_80 + - rails_72 + exclude: + - ruby: '4.0' + os: ubuntu-latest + rails: rails_72 + steps: + - uses: actions/checkout@v6 + - 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 + 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@v5 + 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@v5 + 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@v6 + 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@v6 + - uses: actions/download-artifact@v7 + with: + path: coverage + pattern: coverage-ruby-* + merge-multiple: true + - uses: codecov/codecov-action@v5 + 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@v6 + - uses: tj-actions/changed-files@v47 + id: changed-files + with: + files: | + docs/** + package*.json + yarn.lock + - uses: actions/setup-node@v6 + if: steps.changed-files.outputs.any_changed == 'true' + with: + node-version: 24 + cache: yarn + - run: yarn install + if: steps.changed-files.outputs.any_changed == 'true' + - run: yarn 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..6ff34de3ec3 --- /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@v6 + - uses: actions/setup-node@v6 + with: + node-version: 24 + cache: yarn + - uses: actions/configure-pages@v5 + - run: yarn install + - run: yarn docs:build + - uses: actions/upload-pages-artifact@v4 + 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@v4 + id: deployment diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml new file mode 100644 index 00000000000..2ca53fa0981 --- /dev/null +++ b/.github/workflows/eslint.yml @@ -0,0 +1,33 @@ +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@v6 + - uses: actions/setup-node@v6 + with: + node-version: ${{ env.NODE_VERSION }} + cache: yarn + - uses: tj-actions/changed-files@v47 + id: changed-files + with: + files: | + **.js + package*.json + yarn.lock + .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..074bbce9a68 --- /dev/null +++ b/.github/workflows/gherkin-lint.yml @@ -0,0 +1,32 @@ +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@v6 + - uses: tj-actions/changed-files@v47 + id: changed-files + with: + files: | + **.feature + .gherkin-lintrc + package*.json + yarn.lock + .github/workflows/gherkin-lint.yml + - uses: actions/setup-node@v6 + if: steps.changed-files.outputs.any_changed == 'true' + with: + node-version: ${{ env.NODE_VERSION }} + cache: yarn + - run: yarn install --frozen-lockfile --immutable + if: steps.changed-files.outputs.any_changed == 'true' + - run: yarn 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..0366407f5f4 --- /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@v6 + - uses: tj-actions/changed-files@v47 + id: changed-files + with: + files: | + .github/workflows/*.yaml + .github/workflows/*.yml + - uses: reviewdog/action-actionlint@v1 + 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..225f8815c93 --- /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@v6 + - uses: tj-actions/changed-files@v47 + id: changed-files + with: + files: | + **.md + .markdownlint.yml + .github/workflows/markdown-lint.yml + - uses: reviewdog/action-markdownlint@v0 + 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..972785ac697 --- /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@v6 + - uses: tj-actions/changed-files@v47 + 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 + 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..9b90ee5e715 --- /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@v6 + - 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..8428283177c --- /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@v6 + - uses: tj-actions/changed-files@v47 + id: changed-files + with: + files: | + **.yaml + **.yml + - uses: reviewdog/action-yamllint@v1 + 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..52b4296f1b3 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,423 @@ +--- + +inherit_mode: + merge: + - Include + +plugins: + - rubocop-capybara + - rubocop-packaging + - rubocop-performance + - rubocop-rails + - rubocop-rspec + +AllCops: + DisabledByDefault: true + TargetRubyVersion: 3.2 + 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/ClickLinkOrButtonStyle: + Enabled: true + +Capybara/CurrentPathExpectation: + Enabled: true + +Capybara/FindAllFirst: + Enabled: true + +Capybara/MatchStyle: + Enabled: true + +Capybara/NegationMatcher: + Enabled: true + +Capybara/NegationMatcherAfterVisit: + Enabled: true + +Capybara/RedundantWithinFind: + Enabled: true + +Capybara/RSpec/HaveSelector: + Enabled: true + +Capybara/RSpec/PredicateMatcher: + Enabled: true + +Capybara/SpecificActions: + Enabled: true + +Capybara/SpecificFinders: + Enabled: true + +Capybara/SpecificMatcher: + Enabled: true + +Capybara/VisibilityMatcher: + 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..154ddf432d9 --- /dev/null +++ b/.simplecov @@ -0,0 +1,12 @@ +# frozen_string_literal: true +SimpleCov.start do + add_filter %r{^/spec/} + add_filter "tmp/development_apps/" + add_filter "tmp/test_apps/" + add_filter "tasks/test_application.rb" +end + +if ENV["COVERAGE"] == "true" + require "simplecov-cobertura" + SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter +end diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4e7a7bcc028..00000000000 --- a/.travis.yml +++ /dev/null @@ -1,44 +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.2.3 - - jruby-9.0.0.0 -env: - matrix: - - RAILS=3.2.22 - - RAILS=4.1.13 - - RAILS=4.2.4 - - RAILS=master - global: - - JRUBY_OPTS="-J-Xmx1024m --debug" -matrix: - fast_finish: true - exclude: - - rvm: 2.2.3 - env: RAILS=3.2.22 - - rvm: jruby-9.0.0.0 - env: RAILS=3.2.22 - - rvm: 1.9 - env: RAILS=master - allow_failures: - - env: RAILS=master -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 2681ffd0b75..dfb583197cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,80 +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][] - -### 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 - -* 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] } -``` + ```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 @@ -85,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 new file mode 100644 index 00000000000..a016f4e9c9f --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +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 and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* 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 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. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available [here][source]. + +[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..f781d4bc14d 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 -``` +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]. + +### Fork and create a branch -### 3. Get the test suite running +If this is something you think you can fix, then [fork Active Admin] and create +a branch with a descriptive name. -Install the development dependencies: +### Get the test suite running + +Make sure you're using a recent Ruby and Node version. You'll also need Chrome installed in order to run Cucumber scenarios. + +Now install the development dependencies: ```sh +gem install foreman bundle install +yarn install ``` Now you should be able to run the entire suite using: ```sh -rake test +bin/rake ``` -Which will generate a rails application in `spec/rails` to run the tests against. +The task will generate a sample Rails application in `tmp/test_apps` to run the +test suite against. -If your tests are passing locally but they're failing on Travis, reset your test environment: +If you want to test against a Rails version different from the latest, make sure +you use the correct Gemfile, for example: ```sh -rm -rf spec/rails && bundle update +export BUNDLE_GEMFILE=gemfiles/rails_61/Gemfile ``` -### 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: +### Implement your fix or feature -### 5. View your changes in a Rails application +At this point, you're ready to make your changes. Feel free to ask for help. -Active Admin is meant to be used by humans, not cucumbers. So make sure to take -a look at your changes in a browser. +### View your changes in a Rails application -To boot up a test Rails app: +Make sure to take a look at your changes in a browser. To boot up a test Rails app: ```sh -script/local server +bin/rake local server ``` -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`. - -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: - -```sh -script/use_rails 4.0.0 -RAILS=4.0.0 script/local server -``` - -You should now be able to open