From 6b727bcdd7cd2f9bdbdce31aa3dab003510c9084 Mon Sep 17 00:00:00 2001 From: Kazuaki Takemoto Date: Wed, 1 Oct 2014 19:32:01 +0900 Subject: [PATCH 01/87] Use String#encode instead of Iconv Modify to use String#encode instead of Iconv when ASCII Encodings. There are two reasons: 1. @iconv was defined only encoding_to is NON_ASCII_ENCODINGS 2. Iconv is replaced from ruby-2.0 But when NON_ASCII_ENCODINGS, String#encoding cannot convert then use Iconv as in the past. --- lib/rails_admin/support/csv_converter.rb | 12 +++++- .../rails_admin/support/csv_converter_spec.rb | 39 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/lib/rails_admin/support/csv_converter.rb b/lib/rails_admin/support/csv_converter.rb index 306d34016d..416e4cad13 100644 --- a/lib/rails_admin/support/csv_converter.rb +++ b/lib/rails_admin/support/csv_converter.rb @@ -113,10 +113,18 @@ def generate_csv_row(object) def output(str) # Can't use the CSV generator with encodings that are not supersets of ASCII-7 - return str.to_s if @encoding_to =~ NON_ASCII_ENCODINGS || !@iconv + return str.to_s if @encoding_to =~ NON_ASCII_ENCODINGS # Convert piece by piece - @iconv.iconv(str.to_s) rescue str.to_s + if @iconv + @iconv.iconv(str.to_s) rescue str.to_s + else + if @encoding_from != @encoding_to + str.to_s.encode(@encoding_to, @encoding_from, invalid: :replace, undef: :replace, replace: '?') + else + str.to_s + end + end end end end diff --git a/spec/rails_admin/support/csv_converter_spec.rb b/spec/rails_admin/support/csv_converter_spec.rb index b6a990e599..9cf2083e05 100644 --- a/spec/rails_admin/support/csv_converter_spec.rb +++ b/spec/rails_admin/support/csv_converter_spec.rb @@ -14,4 +14,43 @@ schema = {only: [:number, :name]} expect(RailsAdmin::CSVConverter.new(objects, schema).to_csv({})[2]).to match(/Number,Name/) end + + + describe '#to_csv' do + before do + RailsAdmin.config(Player) do + export do + field :number + field :name + end + end + + FactoryGirl.create :player, name: 'なまえ' + end + + let(:objects) { Player.all } + let(:schema) { {only: [:number, :name]} } + + subject { RailsAdmin::CSVConverter.new(objects, schema).to_csv({encoding_to: encoding}) } + + context 'encoding to UTF-8' do + let(:encoding) { 'UTF-8' } + + it 'should export to UTR-8 with BOM' do + expect(subject[1]).to eq 'UTF-8' + expect(subject[2].encoding).to eq Encoding::UTF_8 + expect(subject[2]).to match(/\A\xEF\xBB\xBF/) # have BOM + end + end + + context 'encoding to Shift_JIS' do + let(:encoding) { 'Shift_JIS' } + + it 'should export to Shift_JIS' do + expect(subject[1]).to eq 'Shift_JIS' + expect(subject[2].encoding).to eq Encoding::Shift_JIS + end + end + + end end From 7987ca7d038cb073fdc82699494a65cc2a717d30 Mon Sep 17 00:00:00 2001 From: Siarhei Hanchuk Date: Tue, 21 Oct 2014 18:47:49 +0300 Subject: [PATCH 02/87] Fixed number translation in filter --- app/assets/javascripts/rails_admin/ra.filter-box.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/rails_admin/ra.filter-box.js b/app/assets/javascripts/rails_admin/ra.filter-box.js index a0ae82c1ec..8f1fcdf703 100644 --- a/app/assets/javascripts/rails_admin/ra.filter-box.js +++ b/app/assets/javascripts/rails_admin/ra.filter-box.js @@ -76,7 +76,7 @@ case 'decimal': case 'float': var control = '` background color +$input-bg: #fff !default; +//** `` background color +$input-bg-disabled: $gray-lighter !default; + +//** Text color for ``s +$input-color: $gray !default; +//** `` border color +$input-border: #ccc !default; +//** `` border radius +$input-border-radius: $border-radius-base !default; +//** Border color for inputs on focus +$input-border-focus: #66afe9 !default; + +//** Placeholder text color +$input-color-placeholder: $gray-light !default; + +//** Default `.form-control` height +$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default; +//** Large `.form-control` height +$input-height-large: (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default; +//** Small `.form-control` height +$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default; + +$legend-color: $gray-dark !default; +$legend-border-color: #e5e5e5 !default; + +//** Background color for textual input addons +$input-group-addon-bg: $gray-lighter !default; +//** Border color for textual input addons +$input-group-addon-border-color: $input-border !default; + + +//== Dropdowns +// +//## Dropdown menu container and contents. -// Z-index master list -// ------------------------- -// Used for a bird's eye view of components dependent on the z-axis -// Try to avoid customizing these :) -$zindexDropdown: 1000 !default; -$zindexPopover: 1010 !default; -$zindexTooltip: 1030 !default; -$zindexFixedNavbar: 1030 !default; -$zindexModalBackdrop: 1040 !default; -$zindexModal: 1050 !default; +//** Background for the dropdown menu. +$dropdown-bg: #fff !default; +//** Dropdown menu `border-color`. +$dropdown-border: rgba(0,0,0,.15) !default; +//** Dropdown menu `border-color` **for IE8**. +$dropdown-fallback-border: #ccc !default; +//** Divider color for between dropdown items. +$dropdown-divider-bg: #e5e5e5 !default; +//** Dropdown link text color. +$dropdown-link-color: $gray-dark !default; +//** Hover color for dropdown links. +$dropdown-link-hover-color: darken($gray-dark, 5%) !default; +//** Hover background for dropdown links. +$dropdown-link-hover-bg: #f5f5f5 !default; -// Sprite icons path -// ------------------------- -$iconSpritePath: image-path("rails_admin/bootstrap/glyphicons-halflings.png") !default; -$iconWhiteSpritePath: image-path("rails_admin/bootstrap/glyphicons-halflings-white.png") !default; +//** Active dropdown menu item text color. +$dropdown-link-active-color: $component-active-color !default; +//** Active dropdown menu item background color. +$dropdown-link-active-bg: $component-active-bg !default; +//** Disabled dropdown menu item background color. +$dropdown-link-disabled-color: $gray-light !default; -// Input placeholder text color -// ------------------------- -$placeholderText: $grayLight !default; +//** Text color for headers within dropdown menus. +$dropdown-header-color: $gray-light !default; +//** Deprecated `$dropdown-caret-color` as of v3.1.0 +$dropdown-caret-color: #000 !default; -// Hr border color -// ------------------------- -$hrBorder: $grayLighter !default; +//-- Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. +// +// Note: These variables are not generated into the Customizer. -// Horizontal forms & lists -// ------------------------- -$horizontalComponentOffset: 180px !default; +$zindex-navbar: 1000 !default; +$zindex-dropdown: 1000 !default; +$zindex-popover: 1060 !default; +$zindex-tooltip: 1070 !default; +$zindex-navbar-fixed: 1030 !default; +$zindex-modal-background: 1040 !default; +$zindex-modal: 1050 !default; -// Wells -// ------------------------- -$wellBackground: #f5f5f5 !default; +//== Media queries breakpoints +// +//## Define the breakpoints at which your layout will change, adapting to different screen sizes. + +// Extra small screen / phone +//** Deprecated `$screen-xs` as of v3.0.1 +$screen-xs: 480px !default; +//** Deprecated `$screen-xs-min` as of v3.2.0 +$screen-xs-min: $screen-xs !default; +//** Deprecated `$screen-phone` as of v3.0.1 +$screen-phone: $screen-xs-min !default; + +// Small screen / tablet +//** Deprecated `$screen-sm` as of v3.0.1 +$screen-sm: 768px !default; +$screen-sm-min: $screen-sm !default; +//** Deprecated `$screen-tablet` as of v3.0.1 +$screen-tablet: $screen-sm-min !default; + +// Medium screen / desktop +//** Deprecated `$screen-md` as of v3.0.1 +$screen-md: 992px !default; +$screen-md-min: $screen-md !default; +//** Deprecated `$screen-desktop` as of v3.0.1 +$screen-desktop: $screen-md-min !default; + +// Large screen / wide desktop +//** Deprecated `$screen-lg` as of v3.0.1 +$screen-lg: 1200px !default; +$screen-lg-min: $screen-lg !default; +//** Deprecated `$screen-lg-desktop` as of v3.0.1 +$screen-lg-desktop: $screen-lg-min !default; + +// So media queries don't overlap when required, provide a maximum +$screen-xs-max: ($screen-sm-min - 1) !default; +$screen-sm-max: ($screen-md-min - 1) !default; +$screen-md-max: ($screen-lg-min - 1) !default; + + +//== Grid system +// +//## Define your custom responsive grid. + +//** Number of columns in the grid. +$grid-columns: 12 !default; +//** Padding between columns. Gets divided in half for the left and right. +$grid-gutter-width: 30px !default; +// Navbar collapse +//** Point at which the navbar becomes uncollapsed. +$grid-float-breakpoint: $screen-sm-min !default; +//** Point at which the navbar begins collapsing. +$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; + + +//== Container sizes +// +//## Define the maximum width of `.container` for different screen sizes. +// Small screen / tablet +$container-tablet: ((720px + $grid-gutter-width)) !default; +//** For `$screen-sm-min` and up. +$container-sm: $container-tablet !default; -// Navbar -// ------------------------- -$navbarCollapseWidth: 979px !default; -$navbarCollapseDesktopWidth: $navbarCollapseWidth + 1; +// Medium screen / desktop +$container-desktop: ((940px + $grid-gutter-width)) !default; +//** For `$screen-md-min` and up. +$container-md: $container-desktop !default; -$navbarHeight: 40px !default; -$navbarBackgroundHighlight: #ffffff !default; -$navbarBackground: darken($navbarBackgroundHighlight, 5%) !default; -$navbarBorder: darken($navbarBackground, 12%) !default; +// Large screen / wide desktop +$container-large-desktop: ((1140px + $grid-gutter-width)) !default; +//** For `$screen-lg-min` and up. +$container-lg: $container-large-desktop !default; -$navbarText: #777 !default; -$navbarLinkColor: #777 !default; -$navbarLinkColorHover: $grayDark !default; -$navbarLinkColorActive: $gray !default; -$navbarLinkBackgroundHover: transparent !default; -$navbarLinkBackgroundActive: darken($navbarBackground, 5%) !default; -$navbarBrandColor: $navbarLinkColor !default; +//== Navbar +// +//## + +// Basics of a navbar +$navbar-height: 50px !default; +$navbar-margin-bottom: $line-height-computed !default; +$navbar-border-radius: $border-radius-base !default; +$navbar-padding-horizontal: floor(($grid-gutter-width / 2)) !default; +$navbar-padding-vertical: (($navbar-height - $line-height-computed) / 2) !default; +$navbar-collapse-max-height: 340px !default; + +$navbar-default-color: #777 !default; +$navbar-default-bg: #f8f8f8 !default; +$navbar-default-border: darken($navbar-default-bg, 6.5%) !default; + +// Navbar links +$navbar-default-link-color: #777 !default; +$navbar-default-link-hover-color: #333 !default; +$navbar-default-link-hover-bg: transparent !default; +$navbar-default-link-active-color: #555 !default; +$navbar-default-link-active-bg: darken($navbar-default-bg, 6.5%) !default; +$navbar-default-link-disabled-color: #ccc !default; +$navbar-default-link-disabled-bg: transparent !default; + +// Navbar brand label +$navbar-default-brand-color: $navbar-default-link-color !default; +$navbar-default-brand-hover-color: darken($navbar-default-brand-color, 10%) !default; +$navbar-default-brand-hover-bg: transparent !default; + +// Navbar toggle +$navbar-default-toggle-hover-bg: #ddd !default; +$navbar-default-toggle-icon-bar-bg: #888 !default; +$navbar-default-toggle-border-color: #ddd !default; + // Inverted navbar -$navbarInverseBackground: #111111 !default; -$navbarInverseBackgroundHighlight: #222222 !default; -$navbarInverseBorder: #252525 !default; +// Reset inverted navbar basics +$navbar-inverse-color: $gray-light !default; +$navbar-inverse-bg: #222 !default; +$navbar-inverse-border: darken($navbar-inverse-bg, 10%) !default; + +// Inverted navbar links +$navbar-inverse-link-color: $gray-light !default; +$navbar-inverse-link-hover-color: #fff !default; +$navbar-inverse-link-hover-bg: transparent !default; +$navbar-inverse-link-active-color: $navbar-inverse-link-hover-color !default; +$navbar-inverse-link-active-bg: darken($navbar-inverse-bg, 10%) !default; +$navbar-inverse-link-disabled-color: #444 !default; +$navbar-inverse-link-disabled-bg: transparent !default; + +// Inverted navbar brand label +$navbar-inverse-brand-color: $navbar-inverse-link-color !default; +$navbar-inverse-brand-hover-color: #fff !default; +$navbar-inverse-brand-hover-bg: transparent !default; + +// Inverted navbar toggle +$navbar-inverse-toggle-hover-bg: #333 !default; +$navbar-inverse-toggle-icon-bar-bg: #fff !default; +$navbar-inverse-toggle-border-color: #333 !default; + + +//== Navs +// +//## -$navbarInverseText: $grayLight !default; -$navbarInverseLinkColor: $grayLight !default; -$navbarInverseLinkColorHover: $white !default; -$navbarInverseLinkColorActive: $navbarInverseLinkColorHover !default; -$navbarInverseLinkBackgroundHover: transparent !default; -$navbarInverseLinkBackgroundActive: $navbarInverseBackground !default; +//=== Shared nav styles +$nav-link-padding: 10px 15px !default; +$nav-link-hover-bg: $gray-lighter !default; -$navbarInverseSearchBackground: lighten($navbarInverseBackground, 25%) !default; -$navbarInverseSearchBackgroundFocus: $white !default; -$navbarInverseSearchBorder: $navbarInverseBackground !default; -$navbarInverseSearchPlaceholderColor: #ccc !default; +$nav-disabled-link-color: $gray-light !default; +$nav-disabled-link-hover-color: $gray-light !default; -$navbarInverseBrandColor: $navbarInverseLinkColor !default; +$nav-open-link-hover-color: #fff !default; +//== Tabs +$nav-tabs-border-color: #ddd !default; -// Pagination -// ------------------------- -$paginationBackground: #fff !default; -$paginationBorder: #ddd !default; -$paginationActiveBackground: #f5f5f5 !default; +$nav-tabs-link-hover-border-color: $gray-lighter !default; +$nav-tabs-active-link-hover-bg: $body-bg !default; +$nav-tabs-active-link-hover-color: $gray !default; +$nav-tabs-active-link-hover-border-color: #ddd !default; -// Hero unit -// ------------------------- -$heroUnitBackground: $grayLighter !default; -$heroUnitHeadingColor: inherit !default; -$heroUnitLeadColor: inherit !default; +$nav-tabs-justified-link-border-color: #ddd !default; +$nav-tabs-justified-active-link-border-color: $body-bg !default; +//== Pills +$nav-pills-border-radius: $border-radius-base !default; +$nav-pills-active-link-hover-bg: $component-active-bg !default; +$nav-pills-active-link-hover-color: $component-active-color !default; -// Form states and alerts -// ------------------------- -$warningText: #c09853 !default; -$warningBackground: #fcf8e3 !default; -$warningBorder: darken(adjust-hue($warningBackground, -10), 3%) !default; -$errorText: #b94a48 !default; -$errorBackground: #f2dede !default; -$errorBorder: darken(adjust-hue($errorBackground, -10), 3%) !default; +//== Pagination +// +//## -$successText: #468847 !default; -$successBackground: #dff0d8 !default; -$successBorder: darken(adjust-hue($successBackground, -10), 5%) !default; +$pagination-color: $link-color !default; +$pagination-bg: #fff !default; +$pagination-border: #ddd !default; -$infoText: #3a87ad !default; -$infoBackground: #d9edf7 !default; -$infoBorder: darken(adjust-hue($infoBackground, -10), 7%) !default; +$pagination-hover-color: $link-hover-color !default; +$pagination-hover-bg: $gray-lighter !default; +$pagination-hover-border: #ddd !default; +$pagination-active-color: #fff !default; +$pagination-active-bg: $brand-primary !default; +$pagination-active-border: $brand-primary !default; -// Tooltips and popovers -// ------------------------- -$tooltipColor: #fff !default; -$tooltipBackground: #000 !default; -$tooltipArrowWidth: 5px !default; -$tooltipArrowColor: $tooltipBackground !default; +$pagination-disabled-color: $gray-light !default; +$pagination-disabled-bg: #fff !default; +$pagination-disabled-border: #ddd !default; -$popoverBackground: #fff !default; -$popoverArrowWidth: 10px !default; -$popoverArrowColor: #fff !default; -$popoverTitleBackground: darken($popoverBackground, 3%) !default; -// Special enhancement for popovers -$popoverArrowOuterWidth: $popoverArrowWidth + 1 !default; -$popoverArrowOuterColor: rgba(0,0,0,.25) !default; +//== Pager +// +//## +$pager-bg: $pagination-bg !default; +$pager-border: $pagination-border !default; +$pager-border-radius: 15px !default; +$pager-hover-bg: $pagination-hover-bg !default; -// GRID -// -------------------------------------------------- +$pager-active-bg: $pagination-active-bg !default; +$pager-active-color: $pagination-active-color !default; +$pager-disabled-color: $pagination-disabled-color !default; -// Default 940px grid -// ------------------------- -$gridColumns: 12 !default; -$gridColumnWidth: 60px !default; -$gridGutterWidth: 20px !default; -$gridRowWidth: ($gridColumns * $gridColumnWidth) + ($gridGutterWidth * ($gridColumns - 1)) !default; -// 1200px min -$gridColumnWidth1200: 70px !default; -$gridGutterWidth1200: 30px !default; -$gridRowWidth1200: ($gridColumns * $gridColumnWidth1200) + ($gridGutterWidth1200 * ($gridColumns - 1)) !default; +//== Jumbotron +// +//## + +$jumbotron-padding: 30px !default; +$jumbotron-color: inherit !default; +$jumbotron-bg: $gray-lighter !default; +$jumbotron-heading-color: inherit !default; +$jumbotron-font-size: ceil(($font-size-base * 1.5)) !default; + + +//== Form states and alerts +// +//## Define colors for form feedback states and, by default, alerts. + +$state-success-text: #3c763d !default; +$state-success-bg: #dff0d8 !default; +$state-success-border: darken(adjust-hue($state-success-bg, -10), 5%) !default; + +$state-info-text: #31708f !default; +$state-info-bg: #d9edf7 !default; +$state-info-border: darken(adjust-hue($state-info-bg, -10), 7%) !default; + +$state-warning-text: #8a6d3b !default; +$state-warning-bg: #fcf8e3 !default; +$state-warning-border: darken(adjust-hue($state-warning-bg, -10), 5%) !default; + +$state-danger-text: #a94442 !default; +$state-danger-bg: #f2dede !default; +$state-danger-border: darken(adjust-hue($state-danger-bg, -10), 5%) !default; + + +//== Tooltips +// +//## + +//** Tooltip max width +$tooltip-max-width: 200px !default; +//** Tooltip text color +$tooltip-color: #fff !default; +//** Tooltip background color +$tooltip-bg: #000 !default; +$tooltip-opacity: .9 !default; -// 768px-979px -$gridColumnWidth768: 42px !default; -$gridGutterWidth768: 20px !default; -$gridRowWidth768: ($gridColumns * $gridColumnWidth768) + ($gridGutterWidth768 * ($gridColumns - 1)) !default; +//** Tooltip arrow width +$tooltip-arrow-width: 5px !default; +//** Tooltip arrow color +$tooltip-arrow-color: $tooltip-bg !default; -// Fluid grid -// ------------------------- -$fluidGridColumnWidth: percentage($gridColumnWidth/$gridRowWidth) !default; -$fluidGridGutterWidth: percentage($gridGutterWidth/$gridRowWidth) !default; +//== Popovers +// +//## + +//** Popover body background color +$popover-bg: #fff !default; +//** Popover maximum width +$popover-max-width: 276px !default; +//** Popover border color +$popover-border-color: rgba(0,0,0,.2) !default; +//** Popover fallback border color +$popover-fallback-border-color: #ccc !default; + +//** Popover title background color +$popover-title-bg: darken($popover-bg, 3%) !default; + +//** Popover arrow width +$popover-arrow-width: 10px !default; +//** Popover arrow color +$popover-arrow-color: #fff !default; + +//** Popover outer arrow width +$popover-arrow-outer-width: ($popover-arrow-width + 1) !default; +//** Popover outer arrow color +$popover-arrow-outer-color: fade_in($popover-border-color, 0.05) !default; +//** Popover outer arrow fallback color +$popover-arrow-outer-fallback-color: darken($popover-fallback-border-color, 20%) !default; + + +//== Labels +// +//## + +//** Default label background color +$label-default-bg: $gray-light !default; +//** Primary label background color +$label-primary-bg: $brand-primary !default; +//** Success label background color +$label-success-bg: $brand-success !default; +//** Info label background color +$label-info-bg: $brand-info !default; +//** Warning label background color +$label-warning-bg: $brand-warning !default; +//** Danger label background color +$label-danger-bg: $brand-danger !default; + +//** Default label text color +$label-color: #fff !default; +//** Default text color of a linked label +$label-link-hover-color: #fff !default; + + +//== Modals +// +//## + +//** Padding applied to the modal body +$modal-inner-padding: 15px !default; + +//** Padding applied to the modal title +$modal-title-padding: 15px !default; +//** Modal title line-height +$modal-title-line-height: $line-height-base !default; + +//** Background color of modal content area +$modal-content-bg: #fff !default; +//** Modal content border color +$modal-content-border-color: rgba(0,0,0,.2) !default; +//** Modal content border color **for IE8** +$modal-content-fallback-border-color: #999 !default; + +//** Modal backdrop background color +$modal-backdrop-bg: #000 !default; +//** Modal backdrop opacity +$modal-backdrop-opacity: .5 !default; +//** Modal header border color +$modal-header-border-color: #e5e5e5 !default; +//** Modal footer border color +$modal-footer-border-color: $modal-header-border-color !default; + +$modal-lg: 900px !default; +$modal-md: 600px !default; +$modal-sm: 300px !default; + + +//== Alerts +// +//## Define alert colors, border radius, and padding. + +$alert-padding: 15px !default; +$alert-border-radius: $border-radius-base !default; +$alert-link-font-weight: bold !default; + +$alert-success-bg: $state-success-bg !default; +$alert-success-text: $state-success-text !default; +$alert-success-border: $state-success-border !default; + +$alert-info-bg: $state-info-bg !default; +$alert-info-text: $state-info-text !default; +$alert-info-border: $state-info-border !default; + +$alert-warning-bg: $state-warning-bg !default; +$alert-warning-text: $state-warning-text !default; +$alert-warning-border: $state-warning-border !default; + +$alert-danger-bg: $state-danger-bg !default; +$alert-danger-text: $state-danger-text !default; +$alert-danger-border: $state-danger-border !default; + + +//== Progress bars +// +//## + +//** Background color of the whole progress component +$progress-bg: #f5f5f5 !default; +//** Progress bar text color +$progress-bar-color: #fff !default; + +//** Default progress bar color +$progress-bar-bg: $brand-primary !default; +//** Success progress bar color +$progress-bar-success-bg: $brand-success !default; +//** Warning progress bar color +$progress-bar-warning-bg: $brand-warning !default; +//** Danger progress bar color +$progress-bar-danger-bg: $brand-danger !default; +//** Info progress bar color +$progress-bar-info-bg: $brand-info !default; + + +//== List group +// +//## + +//** Background color on `.list-group-item` +$list-group-bg: #fff !default; +//** `.list-group-item` border color +$list-group-border: #ddd !default; +//** List group border radius +$list-group-border-radius: $border-radius-base !default; + +//** Background color of single list items on hover +$list-group-hover-bg: #f5f5f5 !default; +//** Text color of active list items +$list-group-active-color: $component-active-color !default; +//** Background color of active list items +$list-group-active-bg: $component-active-bg !default; +//** Border color of active list elements +$list-group-active-border: $list-group-active-bg !default; +//** Text color for content within active list items +$list-group-active-text-color: lighten($list-group-active-bg, 40%) !default; + +//** Text color of disabled list items +$list-group-disabled-color: $gray-light !default; +//** Background color of disabled list items +$list-group-disabled-bg: $gray-lighter !default; +//** Text color for content within disabled list items +$list-group-disabled-text-color: $list-group-disabled-color !default; + +$list-group-link-color: #555 !default; +$list-group-link-hover-color: $list-group-link-color !default; +$list-group-link-heading-color: #333 !default; + + +//== Panels +// +//## + +$panel-bg: #fff !default; +$panel-body-padding: 15px !default; +$panel-heading-padding: 10px 15px !default; +$panel-footer-padding: $panel-heading-padding !default; +$panel-border-radius: $border-radius-base !default; + +//** Border color for elements within panels +$panel-inner-border: #ddd !default; +$panel-footer-bg: #f5f5f5 !default; + +$panel-default-text: $gray-dark !default; +$panel-default-border: #ddd !default; +$panel-default-heading-bg: #f5f5f5 !default; + +$panel-primary-text: #fff !default; +$panel-primary-border: $brand-primary !default; +$panel-primary-heading-bg: $brand-primary !default; + +$panel-success-text: $state-success-text !default; +$panel-success-border: $state-success-border !default; +$panel-success-heading-bg: $state-success-bg !default; + +$panel-info-text: $state-info-text !default; +$panel-info-border: $state-info-border !default; +$panel-info-heading-bg: $state-info-bg !default; + +$panel-warning-text: $state-warning-text !default; +$panel-warning-border: $state-warning-border !default; +$panel-warning-heading-bg: $state-warning-bg !default; + +$panel-danger-text: $state-danger-text !default; +$panel-danger-border: $state-danger-border !default; +$panel-danger-heading-bg: $state-danger-bg !default; + + +//== Thumbnails +// +//## + +//** Padding around the thumbnail image +$thumbnail-padding: 4px !default; +//** Thumbnail background color +$thumbnail-bg: $body-bg !default; +//** Thumbnail border color +$thumbnail-border: #ddd !default; +//** Thumbnail border radius +$thumbnail-border-radius: $border-radius-base !default; + +//** Custom text color for thumbnail captions +$thumbnail-caption-color: $text-color !default; +//** Padding around the thumbnail caption +$thumbnail-caption-padding: 9px !default; + + +//== Wells +// +//## + +$well-bg: #f5f5f5 !default; +$well-border: darken($well-bg, 7%) !default; + + +//== Badges +// +//## + +$badge-color: #fff !default; +//** Linked badge text color on hover +$badge-link-hover-color: #fff !default; +$badge-bg: $gray-light !default; + +//** Badge text color in active nav link +$badge-active-color: $link-color !default; +//** Badge background color in active nav link +$badge-active-bg: #fff !default; + +$badge-font-weight: bold !default; +$badge-line-height: 1 !default; +$badge-border-radius: 10px !default; + + +//== Breadcrumbs +// +//## + +$breadcrumb-padding-vertical: 8px !default; +$breadcrumb-padding-horizontal: 15px !default; +//** Breadcrumb background color +$breadcrumb-bg: #f5f5f5 !default; +//** Breadcrumb text color +$breadcrumb-color: #ccc !default; +//** Text color of current page in the breadcrumb +$breadcrumb-active-color: $gray-light !default; +//** Textual separator for between breadcrumb elements +$breadcrumb-separator: "/" !default; + + +//== Carousel +// +//## + +$carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6) !default; + +$carousel-control-color: #fff !default; +$carousel-control-width: 15% !default; +$carousel-control-opacity: .5 !default; +$carousel-control-font-size: 20px !default; + +$carousel-indicator-active-bg: #fff !default; +$carousel-indicator-border-color: #fff !default; + +$carousel-caption-color: #fff !default; + + +//== Close +// +//## + +$close-font-weight: bold !default; +$close-color: #000 !default; +$close-text-shadow: 0 1px 0 #fff !default; + + +//== Code +// +//## + +$code-color: #c7254e !default; +$code-bg: #f9f2f4 !default; + +$kbd-color: #fff !default; +$kbd-bg: #333 !default; + +$pre-bg: #f5f5f5 !default; +$pre-color: $gray-dark !default; +$pre-border-color: #ccc !default; +$pre-scrollable-max-height: 340px !default; + + +//== Type +// +//## + +//** Horizontal offset for forms and lists. +$component-offset-horizontal: 180px !default; +//** Text muted color +$text-muted: $gray-light !default; +//** Abbreviations and acronyms border color +$abbr-border-color: $gray-light !default; +//** Headings small color +$headings-small-color: $gray-light !default; +//** Blockquote small color +$blockquote-small-color: $gray-light !default; +//** Blockquote font size +$blockquote-font-size: ($font-size-base * 1.25) !default; +//** Blockquote border color +$blockquote-border-color: $gray-lighter !default; +//** Page header border color +$page-header-border-color: $gray-lighter !default; +//** Width of horizontal description list titles +$dl-horizontal-offset: $component-offset-horizontal !default; +//** Horizontal line color. +$hr-border: $gray-lighter !default; -// 1200px min -$fluidGridColumnWidth1200: percentage($gridColumnWidth1200/$gridRowWidth1200) !default; -$fluidGridGutterWidth1200: percentage($gridGutterWidth1200/$gridRowWidth1200) !default; -// 768px-979px -$fluidGridColumnWidth768: percentage($gridColumnWidth768/$gridRowWidth768) !default; -$fluidGridGutterWidth768: percentage($gridGutterWidth768/$gridRowWidth768) !default; diff --git a/app/assets/stylesheets/rails_admin/bootstrap/_wells.scss b/app/assets/stylesheets/rails_admin/bootstrap/_wells.scss old mode 100755 new mode 100644 index 551e5207a7..b8657118a6 --- a/app/assets/stylesheets/rails_admin/bootstrap/_wells.scss +++ b/app/assets/stylesheets/rails_admin/bootstrap/_wells.scss @@ -8,9 +8,9 @@ min-height: 20px; padding: 19px; margin-bottom: 20px; - background-color: $wellBackground; - border: 1px solid darken($wellBackground, 7%); - @include border-radius($baseBorderRadius); + background-color: $well-bg; + border: 1px solid $well-border; + border-radius: $border-radius-base; @include box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); blockquote { border-color: #ddd; @@ -19,11 +19,11 @@ } // Sizes -.well-large { +.well-lg { padding: 24px; - @include border-radius($borderRadiusLarge); + border-radius: $border-radius-large; } -.well-small { +.well-sm { padding: 9px; - @include border-radius($borderRadiusSmall); + border-radius: $border-radius-small; } diff --git a/app/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss b/app/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss old mode 100755 new mode 100644 index 0af339c240..4d6f8aacfd --- a/app/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss +++ b/app/assets/stylesheets/rails_admin/bootstrap/bootstrap.scss @@ -1,63 +1,50 @@ -/*! - * Bootstrap v2.3.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - // Core variables and mixins -@import "rails_admin/bootstrap/variables"; // Modify this for custom colors, font-sizes, etc -@import "rails_admin/bootstrap/mixins"; - -// CSS Reset -@import "rails_admin/bootstrap/reset"; - -// Grid system and page structure -@import "rails_admin/bootstrap/scaffolding"; -@import "rails_admin/bootstrap/grid"; -@import "rails_admin/bootstrap/layouts"; - -// Base CSS -@import "rails_admin/bootstrap/type"; -@import "rails_admin/bootstrap/code"; -@import "rails_admin/bootstrap/forms"; -@import "rails_admin/bootstrap/tables"; - -// Components: common -@import "rails_admin/bootstrap/sprites"; -@import "rails_admin/bootstrap/dropdowns"; -@import "rails_admin/bootstrap/wells"; -@import "rails_admin/bootstrap/component-animations"; -@import "rails_admin/bootstrap/close"; - -// Components: Buttons & Alerts -@import "rails_admin/bootstrap/buttons"; -@import "rails_admin/bootstrap/button-groups"; -@import "rails_admin/bootstrap/alerts"; // Note: alerts share common CSS with buttons and thus have styles in buttons - -// Components: Nav -@import "rails_admin/bootstrap/navs"; -@import "rails_admin/bootstrap/navbar"; -@import "rails_admin/bootstrap/breadcrumbs"; -@import "rails_admin/bootstrap/pagination"; -@import "rails_admin/bootstrap/pager"; - -// Components: Popovers -@import "rails_admin/bootstrap/modals"; -@import "rails_admin/bootstrap/tooltip"; -@import "rails_admin/bootstrap/popovers"; - -// Components: Misc -@import "rails_admin/bootstrap/thumbnails"; -@import "rails_admin/bootstrap/media"; -@import "rails_admin/bootstrap/labels-badges"; -@import "rails_admin/bootstrap/progress-bars"; -@import "rails_admin/bootstrap/accordion"; -@import "rails_admin/bootstrap/carousel"; -@import "rails_admin/bootstrap/hero-unit"; +@import "variables"; +@import "mixins"; + +// Reset and dependencies +@import "normalize"; +@import "print"; +@import "glyphicons"; + +// Core CSS +@import "scaffolding"; +@import "type"; +@import "code"; +@import "grid"; +@import "tables"; +@import "forms"; +@import "buttons"; + +// Components +@import "component-animations"; +@import "dropdowns"; +@import "button-groups"; +@import "input-groups"; +@import "navs"; +@import "navbar"; +@import "breadcrumbs"; +@import "pagination"; +@import "pager"; +@import "labels"; +@import "badges"; +@import "jumbotron"; +@import "thumbnails"; +@import "alerts"; +@import "progress-bars"; +@import "media"; +@import "list-group"; +@import "panels"; +@import "responsive-embed"; +@import "wells"; +@import "close"; + +// Components w/ JavaScript +@import "modals"; +@import "tooltip"; +@import "popovers"; +@import "carousel"; // Utility classes -@import "rails_admin/bootstrap/utilities"; // Has to be last to override when necessary +@import "utilities"; +@import "responsive-utilities"; diff --git a/app/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss new file mode 100644 index 0000000000..3faf0b5a50 --- /dev/null +++ b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_alerts.scss @@ -0,0 +1,14 @@ +// Alerts + +@mixin alert-variant($background, $border, $text-color) { + background-color: $background; + border-color: $border; + color: $text-color; + + hr { + border-top-color: darken($border, 5%); + } + .alert-link { + color: darken($text-color, 10%); + } +} diff --git a/app/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss new file mode 100644 index 0000000000..4993bd2b80 --- /dev/null +++ b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_background-variant.scss @@ -0,0 +1,11 @@ +// Contextual backgrounds + +// [converter] $parent hack +@mixin bg-variant($parent, $color) { + #{$parent} { + background-color: $color; + } + a#{$parent}:hover { + background-color: darken($color, 10%); + } +} diff --git a/app/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss new file mode 100644 index 0000000000..ce19499875 --- /dev/null +++ b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_border-radius.scss @@ -0,0 +1,18 @@ +// Single side border-radius + +@mixin border-top-radius($radius) { + border-top-right-radius: $radius; + border-top-left-radius: $radius; +} +@mixin border-right-radius($radius) { + border-bottom-right-radius: $radius; + border-top-right-radius: $radius; +} +@mixin border-bottom-radius($radius) { + border-bottom-right-radius: $radius; + border-bottom-left-radius: $radius; +} +@mixin border-left-radius($radius) { + border-bottom-left-radius: $radius; + border-top-left-radius: $radius; +} diff --git a/app/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss new file mode 100644 index 0000000000..58ad13e502 --- /dev/null +++ b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_buttons.scss @@ -0,0 +1,50 @@ +// Button variants +// +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons + +@mixin button-variant($color, $background, $border) { + color: $color; + background-color: $background; + border-color: $border; + + &:hover, + &:focus, + &:active, + &.active, + .open > &.dropdown-toggle { + color: $color; + background-color: darken($background, 10%); + border-color: darken($border, 12%); + } + &:active, + &.active, + .open > &.dropdown-toggle { + background-image: none; + } + &.disabled, + &[disabled], + fieldset[disabled] & { + &, + &:hover, + &:focus, + &:active, + &.active { + background-color: $background; + border-color: $border; + } + } + + .badge { + color: $background; + background-color: $color; + } +} + +// Button sizes +@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $line-height, $border-radius) { + padding: $padding-vertical $padding-horizontal; + font-size: $font-size; + line-height: $line-height; + border-radius: $border-radius; +} diff --git a/app/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss new file mode 100644 index 0000000000..e06fb5e276 --- /dev/null +++ b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_center-block.scss @@ -0,0 +1,7 @@ +// Center-align a block level element + +@mixin center-block() { + display: block; + margin-left: auto; + margin-right: auto; +} diff --git a/app/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss new file mode 100644 index 0000000000..dc3e2ab426 --- /dev/null +++ b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_clearfix.scss @@ -0,0 +1,22 @@ +// Clearfix +// +// For modern browsers +// 1. The space content is one way to avoid an Opera bug when the +// contenteditable attribute is included anywhere else in the document. +// Otherwise it causes space to appear at the top and bottom of elements +// that are clearfixed. +// 2. The use of `table` rather than `block` is only necessary if using +// `:before` to contain the top-margins of child elements. +// +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ + +@mixin clearfix() { + &:before, + &:after { + content: " "; // 1 + display: table; // 2 + } + &:after { + clear: both; + } +} diff --git a/app/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss new file mode 100644 index 0000000000..ff72f0efc5 --- /dev/null +++ b/app/assets/stylesheets/rails_admin/bootstrap/mixins/_forms.scss @@ -0,0 +1,84 @@ +// Form validation states +// +// Used in forms.less to generate the form validation CSS for warnings, errors, +// and successes. + +@mixin form-control-validation($text-color: #555, $border-color: #ccc, $background-color: #f5f5f5) { + // Color the label and help text + .help-block, + .control-label, + .radio, + .checkbox, + .radio-inline, + .checkbox-inline { + color: $text-color; + } + // Set the border and box shadow on specific inputs to match + .form-control { + border-color: $border-color; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work + &:focus { + border-color: darken($border-color, 10%); + $shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($border-color, 20%); + @include box-shadow($shadow); + } + } + // Set validation states also for addons + .input-group-addon { + color: $text-color; + border-color: $border-color; + background-color: $background-color; + } + // Optional feedback icon + .form-control-feedback { + color: $text-color; + } +} + + +// Form control focus state +// +// Generate a customized focus state and for any input with the specified color, +// which defaults to the `$input-border-focus` variable. +// +// We highly encourage you to not customize the default value, but instead use +// this to tweak colors on an as-needed basis. This aesthetic change is based on +// WebKit's default styles, but applicable to a wider range of browsers. Its +// usability and accessibility should be taken into account with any change. +// +// Example usage: change the default blue border and shadow to white for better +// contrast against a dark gray background. +@mixin form-control-focus($color: $input-border-focus) { + $color-rgba: rgba(red($color), green($color), blue($color), .6); + &:focus { + border-color: $color; + outline: 0; + @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px $color-rgba); + } +} + +// Form control sizing +// +// Relative text size, padding, and border-radii changes for form controls. For +// horizontal sizing, wrap controls in the predefined grid classes. `'); + this.filter = $(''); this.header.append(this.filter); @@ -68,7 +68,7 @@ this.collection = $(''); - this.collection.addClass("ra-multiselect-collection"); + this.collection.addClass("form-control ra-multiselect-collection"); this.addAll = $('' + this.options.regional.chooseAll + ''); @@ -89,7 +89,7 @@ this.columns.center.append(this.up).append(this.down); } - this.selection = $(''); + this.selection = $(''); diff --git a/app/assets/javascripts/rails_admin/ra.filtering-select.js b/app/assets/javascripts/rails_admin/ra.filtering-select.js index 670fda9f21..463c32cf7e 100644 --- a/app/assets/javascripts/rails_admin/ra.filtering-select.js +++ b/app/assets/javascripts/rails_admin/ra.filtering-select.js @@ -42,7 +42,7 @@ var filtering_select = $('
') var input = this.input = $('') .val(value) - .addClass("ra-filtering-select-input") + .addClass("form-control ra-filtering-select-input") .attr('style', select.attr('style')) .show() .autocomplete({ diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index 9030bb5c55..e9ae25e8d7 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -60,7 +60,7 @@ body.rails_admin { line-height: 16px; } .help-block { - margin-top: 0px; + // margin-top: 0px; } .input-prepend, .input-append { margin-bottom: 0px; @@ -73,7 +73,7 @@ body.rails_admin { padding-top:15px; } .control-label { - width:145px; + // width:145px; } legend { margin-bottom:0px; diff --git a/app/helpers/rails_admin/form_builder.rb b/app/helpers/rails_admin/form_builder.rb index 1b42195dc5..8d195552d0 100644 --- a/app/helpers/rails_admin/form_builder.rb +++ b/app/helpers/rails_admin/form_builder.rb @@ -35,7 +35,8 @@ def field_wrapper_for(field, nested_in) # do not show nested field if the target is the origin unless nested_field_association?(field, nested_in) @template.content_tag(:div, class: "control-group #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", id: "#{dom_id(field)}_field") do - label(field.method_name, capitalize_first_letter(field.label), class: 'control-label') + (field.nested_form ? field_for(field) : input_for(field)) + label(field.method_name, capitalize_first_letter(field.label), class: 'col-sm-2 control-label') + + (field.nested_form ? field_for(field) : input_for(field)) end end else @@ -44,7 +45,7 @@ def field_wrapper_for(field, nested_in) end def input_for(field) - @template.content_tag(:div, class: 'controls') do + @template.content_tag(:div, class: 'col-sm-10 controls') do field_for(field) + errors_for(field) + help_for(field) @@ -56,7 +57,7 @@ def errors_for(field) end def help_for(field) - field.help.present? ? @template.content_tag(:p, field.help, class: 'help-block') : ''.html_safe + field.help.present? ? @template.content_tag(:span, field.help, class: 'help-block') : ''.html_safe end def field_for(field) diff --git a/app/views/rails_admin/main/_form_field.html.haml b/app/views/rails_admin/main/_form_field.html.haml index e3b5249b13..3118b5e42f 100644 --- a/app/views/rails_admin/main/_form_field.html.haml +++ b/app/views/rails_admin/main/_form_field.html.haml @@ -1 +1 @@ -= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, checked: field.form_value.in?([true, '1'])}) += form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, checked: field.form_value.in?([true, '1']), class: 'form-control'}) diff --git a/app/views/rails_admin/main/_form_text.html.haml b/app/views/rails_admin/main/_form_text.html.haml index ec636733ef..87ad034532 100644 --- a/app/views/rails_admin/main/_form_text.html.haml +++ b/app/views/rails_admin/main/_form_text.html.haml @@ -1 +1 @@ -= form.text_area field.method_name, field.html_attributes.reverse_merge(data: { richtext: false, options: {}.to_json }).reverse_merge({ value: field.form_value }) += form.text_area field.method_name, field.html_attributes.reverse_merge(data: { richtext: false, options: {}.to_json }).reverse_merge({ value: field.form_value, class: 'form-control' }) diff --git a/app/views/rails_admin/main/export.html.haml b/app/views/rails_admin/main/export.html.haml index 03495d837d..b675898945 100644 --- a/app/views/rails_admin/main/export.html.haml +++ b/app/views/rails_admin/main/export.html.haml @@ -7,15 +7,16 @@ %fieldset{id: 'fields_to_export'} %div.control-group %div.controls - %label.checkbox{for: 'check_all'} - = t('admin.export.select_all_fields') + .col-sm-2 + %label.col-sm-10.checkbox{for: 'check_all'} = check_box_tag 'all', 'all', true, { id: 'check_all' } + = t('admin.export.select_all_fields') %legend %i.icon-chevron-down = t('admin.export.select') .control-group - %label.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', name: @model_config.label_plural.downcase) - .controls + %label.col-sm-2.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', name: @model_config.label_plural.downcase) + .col-sm-10.controls - visible_fields.select{ |f| !f.association? || f.association.polymorphic? }.each do |field| - list = field.virtual? ? 'methods' : 'only' - if field.association? && field.association.polymorphic? @@ -34,8 +35,8 @@ - visible_fields.select{ |f| f.association? && !f.association.polymorphic? }.each do |field| - fields = field.associated_model_config.export.with(controller: self.controller, view: self, object: (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? } .control-group - %label.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', name: field.label.downcase) - .controls + %label.col-sm-2.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', name: field.label.downcase) + .col-sm-10.controls - fields.each do |associated_model_field| - list = associated_model_field.virtual? ? 'methods' : 'only' %label.checkbox{for: "schema_include_#{field.name}_#{list}_#{associated_model_field.name}"} @@ -48,21 +49,21 @@ = t('admin.export.options_for', name: 'csv') .control-group - guessed_encoding = @abstract_model.encoding - %label.control-label{for: "csv_options_encoding_to"}= t('admin.export.csv.encoding_to') - .controls + %label.col-sm-2.control-label{for: "csv_options_encoding_to"}= t('admin.export.csv.encoding_to') + .col-sm-10.controls -# from http://books.google.com/support/partner/bin/answer.py?answer=30990 : = select_tag 'csv_options[encoding_to]', options_for_select(RailsAdmin::CSVConverter::TARGET_ENCODINGS), include_blank: true %p.help-block= t('admin.export.csv.encoding_to_help', name: guessed_encoding) .control-group - %label.control-label{for: "csv_options_skip_header"}= t('admin.export.csv.skip_header') - .controls + %label.col-sm-2.control-label{for: "csv_options_skip_header"}= t('admin.export.csv.skip_header') + .col-sm-10.controls = check_box_tag 'csv_options[skip_header]', 'true' %p.help-block= t('admin.export.csv.skip_header_help') .control-group - %label.control-label{for: "csv_options_generator_col_sep"}= t('admin.export.csv.col_sep') - .controls + %label.col-sm-2.control-label{for: "csv_options_generator_col_sep"}= t('admin.export.csv.col_sep') + .col-sm-10.controls = select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), " ','" => ',', " ';'" => ';', '' => "'\t'" }) %p.help-block= t('admin.export.csv.col_sep_help', value: t('admin.export.csv.default_col_sep')) From 03653ce66965d5dbb488f7898182059127bd936d Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Mon, 1 Sep 2014 15:15:12 +0700 Subject: [PATCH 13/87] Fixed dshboard and left navigation padding --- app/assets/stylesheets/rails_admin/base/theming.scss | 10 ++++++++-- app/views/layouts/rails_admin/application.html.haml | 2 +- app/views/rails_admin/main/dashboard.html.haml | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index e9ae25e8d7..c99bc7e32b 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -10,7 +10,11 @@ body.rails_admin { } /* room for upper navbar */ - padding-top: 60px; + padding-top: 43px; + + .reset-left { + padding-left: 0px; + } /* Application name */ .navbar .brand { @@ -22,8 +26,10 @@ body.rails_admin { } .sidebar-nav { - padding: 9px 60px 9px 10px; + padding: 9px 9px 9px 9px; position: fixed; + width: 14%; + height: 100%; background: #eaf0f1; } diff --git a/app/views/layouts/rails_admin/application.html.haml b/app/views/layouts/rails_admin/application.html.haml index d0f71f9f51..a0b4881eb5 100644 --- a/app/views/layouts/rails_admin/application.html.haml +++ b/app/views/layouts/rails_admin/application.html.haml @@ -15,7 +15,7 @@ = render "layouts/rails_admin/navigation" .container-fluid .row - .col-sm-3.col-md-2 + .col-sm-3.col-md-2.reset-left .sidebar-nav %ul.nav.nav-pills.nav-stacked= main_navigation -# %ul.nav.nav-list= static_navigation diff --git a/app/views/rails_admin/main/dashboard.html.haml b/app/views/rails_admin/main/dashboard.html.haml index c156a4b0e6..46f88f41f7 100644 --- a/app/views/rails_admin/main/dashboard.html.haml +++ b/app/views/rails_admin/main/dashboard.html.haml @@ -24,7 +24,7 @@ - count = @count[abstract_model.pretty_name] - percent = count > 0 ? (@max <= 1 ? count : ((Math.log(count+1) * 100.0) / Math.log(@max+1)).to_i) : -1 .progress{style: "margin-bottom:0px", class: "progress-#{get_indicator(percent)} #{active && 'active progress-striped'}" } - .bar.animate-width-to{:'data-animate-length' => ([1.0, percent].max.to_i * 20), :'data-animate-width-to' => "#{[2.0, percent].max.to_i}%", style: "width:2%"} + .progress-bar.animate-width-to{:class => "progress-bar-#{get_indicator(percent)}", :'data-animate-length' => ([1.0, percent].max.to_i * 20), :'data-animate-width-to' => "#{[2.0, percent].max.to_i}%", style: "width:2%"} = @count[abstract_model.pretty_name] %td.links %ul.inline= menu_for :collection, abstract_model, nil, true From a99205b3f05c70df756bf021b8e78c99144a5752 Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Tue, 2 Sep 2014 15:56:18 +0700 Subject: [PATCH 14/87] Added count to each model as badge --- app/helpers/rails_admin/application_helper.rb | 4 +++- app/views/layouts/rails_admin/application.html.haml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index 75cf47ff4c..e05d952070 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -96,8 +96,10 @@ def navigation(nodes_stack, nodes, level = 0) url = url_for(action: :index, controller: 'rails_admin/main', model_name: model_param) level_class = " nav-level-#{level}" if level > 0 nav_icon = node.navigation_icon ? %().html_safe : '' + count = node.abstract_model.count + badge = %( #{count}).html_safe li = content_tag :li, 'data-model' => model_param do - link_to nav_icon + capitalize_first_letter(node.label_plural), url, class: "pjax#{level_class}" + link_to badge + nav_icon + capitalize_first_letter(node.label_plural), url, class: "pjax#{level_class}" end li + navigation(nodes_stack, nodes_stack.select { |n| n.parent.to_s == node.abstract_model.model_name }, level + 1) end.join.html_safe diff --git a/app/views/layouts/rails_admin/application.html.haml b/app/views/layouts/rails_admin/application.html.haml index a0b4881eb5..8df379e668 100644 --- a/app/views/layouts/rails_admin/application.html.haml +++ b/app/views/layouts/rails_admin/application.html.haml @@ -18,7 +18,7 @@ .col-sm-3.col-md-2.reset-left .sidebar-nav %ul.nav.nav-pills.nav-stacked= main_navigation - -# %ul.nav.nav-list= static_navigation + %ul.nav.nav-pills.nav-stacked= static_navigation .col-sm-9.col-sm-offset-3.col-md-10.col-md-offset-2 .row .content{:'data-pjax-container' => true}= render template: 'layouts/rails_admin/pjax' From 3204ad5058963c5fa82ab9dd51907ba00f8f731b Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Tue, 2 Sep 2014 16:29:47 +0700 Subject: [PATCH 15/87] Fixed view of paginator --- app/helpers/rails_admin/application_helper.rb | 2 +- .../twitter-bootstrap/_paginator.html.haml | 17 ++++++++--------- app/views/rails_admin/main/index.html.haml | 6 ++++-- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index e05d952070..8f93242f49 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -97,7 +97,7 @@ def navigation(nodes_stack, nodes, level = 0) level_class = " nav-level-#{level}" if level > 0 nav_icon = node.navigation_icon ? %().html_safe : '' count = node.abstract_model.count - badge = %( #{count}).html_safe + badge = %( #{count}).html_safe li = content_tag :li, 'data-model' => model_param do link_to badge + nav_icon + capitalize_first_letter(node.label_plural), url, class: "pjax#{level_class}" end diff --git a/app/views/kaminari/twitter-bootstrap/_paginator.html.haml b/app/views/kaminari/twitter-bootstrap/_paginator.html.haml index bdd9b4b8da..47f2b27e95 100644 --- a/app/views/kaminari/twitter-bootstrap/_paginator.html.haml +++ b/app/views/kaminari/twitter-bootstrap/_paginator.html.haml @@ -1,10 +1,9 @@ = paginator.render do - .pagination - %ul - = prev_page_tag - - each_page do |page| - - if page.left_outer? or page.right_outer? or page.inside_window? - = page_tag page - - elsif !page.was_truncated? - = gap_tag - = next_page_tag + %ul.pagination + = prev_page_tag + - each_page do |page| + - if page.left_outer? or page.right_outer? or page.inside_window? + = page_tag page + - elsif !page.was_truncated? + = gap_tag + = next_page_tag diff --git a/app/views/rails_admin/main/index.html.haml b/app/views/rails_admin/main/index.html.haml index 155bfd7325..5e544cdb42 100644 --- a/app/views/rails_admin/main/index.html.haml +++ b/app/views/rails_admin/main/index.html.haml @@ -146,8 +146,10 @@ %ul.inline= menu_for :member, @abstract_model, object, true - if @objects.respond_to?(:total_count) - total_count = @objects.total_count.to_i - = paginate(@objects, theme: 'twitter-bootstrap', remote: true) - = link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size + .row + .col-md-6= paginate(@objects, theme: 'twitter-bootstrap', remote: true) + .row + .col-md-6= link_to(t("admin.misc.show_all"), index_path(params.merge(all: true)), class: "show-all btn btn-default clearfix pjax") unless total_count > 100 || total_count <= @objects.to_a.size .clearfix.total-count= "#{total_count} #{@model_config.pluralize(total_count).downcase}" - else .clearfix.total-count= "#{@objects.size} #{@model_config.pluralize(@objects.size).downcase}" From fe9a1ee8185f02c321cd5a1c4bf8cacb1473a132 Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Sun, 7 Sep 2014 20:36:27 +0700 Subject: [PATCH 16/87] Fixed css class for filter field --- app/views/rails_admin/main/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/index.html.haml b/app/views/rails_admin/main/index.html.haml index 5e544cdb42..a7eed17ded 100644 --- a/app/views/rails_admin/main/index.html.haml +++ b/app/views/rails_admin/main/index.html.haml @@ -96,7 +96,7 @@ .well %span#filters_box %hr.filters_box{style: "display:#{@ordered_filters.empty? ? 'none' : 'block'}"} - %input.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")} + %input.form-control.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")} %button.btn.btn-primary{type: "submit", :'data-disable-with' => " ".html_safe + t("admin.misc.refresh")} %i.icon-white.icon-refresh = t("admin.misc.refresh") From 5c15b79c5d11b9aba757714857132803e8bb1478 Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Sun, 7 Sep 2014 20:53:32 +0700 Subject: [PATCH 17/87] Fixed double line for table heading --- app/assets/stylesheets/rails_admin/base/theming.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index c99bc7e32b..ea2f87ade7 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -198,6 +198,16 @@ body.rails_admin { /* Table cells behaviour */ .table { + // Cells + > thead, + > tbody, + > tfoot { + > tr { + > th { + border-bottom: 0px; + } + } + } .thumbnail { float:left; & + * { From 462c7fdc80339ef7e40cad823f8b96de4301459f Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Mon, 8 Sep 2014 23:19:10 +0700 Subject: [PATCH 18/87] Fixed bootstrap modal popups --- app/assets/javascripts/rails_admin/ra.remote-form.js | 6 +++++- app/assets/stylesheets/rails_admin/base/theming.scss | 8 ++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/assets/javascripts/rails_admin/ra.remote-form.js b/app/assets/javascripts/rails_admin/ra.remote-form.js index 7d8c33909d..6f2b1bcd59 100644 --- a/app/assets/javascripts/rails_admin/ra.remote-form.js +++ b/app/assets/javascripts/rails_admin/ra.remote-form.js @@ -123,6 +123,8 @@ var widget = this; if (!widget.dialog) { widget.dialog = $('') .modal({ keyboard: true, backdrop: true, show: true }) - .on('hidden', function(){ + .on('hidden.bs.modal', function(){ widget.dialog.remove(); // We don't want to reuse closed modals widget.dialog = null; }); diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index ea2f87ade7..b50d4324fe 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -173,10 +173,10 @@ body.rails_admin { } } - .modal { - width: 750px; - margin-left: -375px; - } + // .modal { + // width: 750px; + // margin-left: -375px; + // } /* nested nav */ .nav.nav-list { From 09d2010de0d1f1783cb6f799b611b1f50baa94fe Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Tue, 9 Sep 2014 00:22:59 +0700 Subject: [PATCH 19/87] Fixed bootstrap paddings for action buttons and filter action was improved --- .../stylesheets/rails_admin/rails_admin.scss.erb | 3 +++ app/views/rails_admin/main/_submit_buttons.html.haml | 1 + app/views/rails_admin/main/export.html.haml | 1 + app/views/rails_admin/main/index.html.haml | 10 ++++++---- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/assets/stylesheets/rails_admin/rails_admin.scss.erb b/app/assets/stylesheets/rails_admin/rails_admin.scss.erb index a26b3dc4ba..4169be2f08 100644 --- a/app/assets/stylesheets/rails_admin/rails_admin.scss.erb +++ b/app/assets/stylesheets/rails_admin/rails_admin.scss.erb @@ -65,6 +65,7 @@ /*** Bootstrap Theming ***/ +@import "rails_admin/bootstrap/normalize"; @import "rails_admin/bootstrap/scaffolding"; @import "rails_admin/bootstrap/grid"; <%# @import "rails_admin/bootstrap/layouts"; %> @@ -77,6 +78,7 @@ @import "rails_admin/bootstrap/close"; @import "rails_admin/bootstrap/buttons"; @import "rails_admin/bootstrap/button-groups"; +@import "rails_admin/bootstrap/input-groups"; @import "rails_admin/bootstrap/alerts"; @import "rails_admin/bootstrap/navs"; @import "rails_admin/bootstrap/navbar"; @@ -94,6 +96,7 @@ @import "rails_admin/bootstrap/carousel"; <%# @import "rails_admin/bootstrap/hero-unit"; %> @import "rails_admin/bootstrap/utilities"; +@import "rails_admin/bootstrap/responsive-utilities"; /*** RailsAdmin Theming ***/ diff --git a/app/views/rails_admin/main/_submit_buttons.html.haml b/app/views/rails_admin/main/_submit_buttons.html.haml index 59f44d10a2..c9ed3eff09 100644 --- a/app/views/rails_admin/main/_submit_buttons.html.haml +++ b/app/views/rails_admin/main/_submit_buttons.html.haml @@ -1,4 +1,5 @@ %input{type: :hidden, name: 'return_to', value: (params[:return_to].presence || request.referer)} +%br .form-actions %button.btn.btn-primary{type: "submit", name: "_save", :'data-disable-with' => t("admin.form.save")} %i.icon-white.icon-ok diff --git a/app/views/rails_admin/main/export.html.haml b/app/views/rails_admin/main/export.html.haml index b675898945..358e9378d3 100644 --- a/app/views/rails_admin/main/export.html.haml +++ b/app/views/rails_admin/main/export.html.haml @@ -67,6 +67,7 @@ = select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), " ','" => ',', " ';'" => ';', '' => "'\t'" }) %p.help-block= t('admin.export.csv.col_sep_help', value: t('admin.export.csv.default_col_sep')) + %br .form-actions %input{type: :hidden, name: 'return_to', value: (params[:return_to].presence || request.referer)} %button.btn.btn-primary{type: "submit", name: 'csv'} diff --git a/app/views/rails_admin/main/index.html.haml b/app/views/rails_admin/main/index.html.haml index a7eed17ded..61780881d3 100644 --- a/app/views/rails_admin/main/index.html.haml +++ b/app/views/rails_admin/main/index.html.haml @@ -96,10 +96,12 @@ .well %span#filters_box %hr.filters_box{style: "display:#{@ordered_filters.empty? ? 'none' : 'block'}"} - %input.form-control.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")} - %button.btn.btn-primary{type: "submit", :'data-disable-with' => " ".html_safe + t("admin.misc.refresh")} - %i.icon-white.icon-refresh - = t("admin.misc.refresh") + .input-group + %input.form-control.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")} + %span.input-group-btn + %button.btn.btn-primary{type: "submit", :'data-disable-with' => " ".html_safe + t("admin.misc.refresh")} + %i.icon-white.icon-refresh + = t("admin.misc.refresh") - if export_action %span{style: 'float:right'}= link_to wording_for(:link, export_action), export_path(params.except('set').except('page')), class: 'btn btn-info' From 328ff6d37e558bf6ec09336ad5544206bab9954f Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Mon, 29 Sep 2014 21:55:40 +0700 Subject: [PATCH 20/87] Changed prepend to append for multi-selectors --- app/assets/javascripts/rails_admin/ra.remote-form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/rails_admin/ra.remote-form.js b/app/assets/javascripts/rails_admin/ra.remote-form.js index 6f2b1bcd59..bce814c3cf 100644 --- a/app/assets/javascripts/rails_admin/ra.remote-form.js +++ b/app/assets/javascripts/rails_admin/ra.remote-form.js @@ -110,7 +110,7 @@ multiselect.find('option[value= ' + json.id + ']').text(json.label); } else { // add select.prepend(option); - multiselect.find('select.ra-multiselect-selection').prepend(option); + multiselect.find('select.ra-multiselect-selection').append(option); } } widget._trigger("success"); From bf8b84fdd577e8e1ca42c7bc280cead055f63887 Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Mon, 29 Sep 2014 23:57:03 +0700 Subject: [PATCH 21/87] Fixed error message for bootstrap 3 --- app/helpers/rails_admin/form_builder.rb | 6 ++++-- app/views/layouts/rails_admin/pjax.html.haml | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/helpers/rails_admin/form_builder.rb b/app/helpers/rails_admin/form_builder.rb index 8d195552d0..84456dae2e 100644 --- a/app/helpers/rails_admin/form_builder.rb +++ b/app/helpers/rails_admin/form_builder.rb @@ -45,7 +45,9 @@ def field_wrapper_for(field, nested_in) end def input_for(field) - @template.content_tag(:div, class: 'col-sm-10 controls') do + css = 'col-sm-10 controls' + css += ' has-error' if field.errors.present? + @template.content_tag(:div, class: css) do field_for(field) + errors_for(field) + help_for(field) @@ -53,7 +55,7 @@ def input_for(field) end def errors_for(field) - field.errors.present? ? @template.content_tag(:span, field.errors.to_sentence, class: 'help-inline') : ''.html_safe + field.errors.present? ? @template.content_tag(:span, field.errors.to_sentence, class: 'help-inline text-danger') : ''.html_safe end def help_for(field) diff --git a/app/views/layouts/rails_admin/pjax.html.haml b/app/views/layouts/rails_admin/pjax.html.haml index 318161fdaf..51310a2ee5 100644 --- a/app/views/layouts/rails_admin/pjax.html.haml +++ b/app/views/layouts/rails_admin/pjax.html.haml @@ -6,6 +6,7 @@ .page-header %h1= @page_name - flash && flash.each do |key, value| + - key = 'danger' if key == 'error' .alert{class: "alert-#{key}"} %a.close{href: '#', :'data-dismiss' => "alert"} × = value From 042cb661121d4207768659b54c98ac58f66457e4 Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Fri, 3 Oct 2014 14:35:58 +0700 Subject: [PATCH 22/87] Fixed form layouts --- app/helpers/rails_admin/form_builder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/rails_admin/form_builder.rb b/app/helpers/rails_admin/form_builder.rb index 84456dae2e..48fa840d8a 100644 --- a/app/helpers/rails_admin/form_builder.rb +++ b/app/helpers/rails_admin/form_builder.rb @@ -34,7 +34,7 @@ def field_wrapper_for(field, nested_in) if field.label # do not show nested field if the target is the origin unless nested_field_association?(field, nested_in) - @template.content_tag(:div, class: "control-group #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", id: "#{dom_id(field)}_field") do + @template.content_tag(:div, class: "form-group control-group #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", id: "#{dom_id(field)}_field") do label(field.method_name, capitalize_first_letter(field.label), class: 'col-sm-2 control-label') + (field.nested_form ? field_for(field) : input_for(field)) end From ff5708ef56980e8a7817cdf87e5e91cf4994d07a Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Tue, 7 Oct 2014 11:36:29 +0700 Subject: [PATCH 23/87] Fixed style and z-index for datetimepicker --- .../rails_admin/ra.calendar-additions.scss | 17 +++++++++++++++++ .../rails_admin/main/_form_datetime.html.haml | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss b/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss index f4f30168f4..7cd71b3f95 100644 --- a/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss +++ b/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss @@ -25,3 +25,20 @@ } } } +/* span for disabled cells */ +.ui-timepicker-table td span { + width: auto; +} +/* anchors for clickable cells */ +.ui-timepicker-table td a { + width: auto; +} +.input-group { + .hasTimepicker { + @extend .form-control; + width: 65px !important; + } + .hasDatepicker { + @extend .form-control + } +} diff --git a/app/views/rails_admin/main/_form_datetime.html.haml b/app/views/rails_admin/main/_form_datetime.html.haml index 272ca7afd3..ae3baee032 100644 --- a/app/views/rails_admin/main/_form_datetime.html.haml +++ b/app/views/rails_admin/main/_form_datetime.html.haml @@ -1 +1,2 @@ -= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value }).reverse_merge({ data: { datetimepicker: true, options: field.js_plugin_options.to_json } }) +.input-group + = form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value }).reverse_merge({ data: { datetimepicker: true, options: field.js_plugin_options.to_json } }) From 0fc5434ae3cfc32168ba1840a16225d6dc29c178 Mon Sep 17 00:00:00 2001 From: Nikolay Moskvin Date: Thu, 23 Oct 2014 22:36:42 +0700 Subject: [PATCH 24/87] Fixed navigation partial for bootstrap 3 --- app/views/layouts/rails_admin/_navigation.html.haml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/views/layouts/rails_admin/_navigation.html.haml b/app/views/layouts/rails_admin/_navigation.html.haml index 409e639a2b..74c3accd5e 100644 --- a/app/views/layouts/rails_admin/_navigation.html.haml +++ b/app/views/layouts/rails_admin/_navigation.html.haml @@ -1,7 +1,7 @@ -.navbar-inner - .container-fluid - %a.brand.pjax{href: dashboard_path} +.container-fluid + .navbar-header + %a.navbar-brand.pjax{href: dashboard_path} = _get_plugin_name[0] || 'Rails' %small= _get_plugin_name[1] || 'Admin' - .nav-collapse - = render partial: 'layouts/rails_admin/secondary_navigation' \ No newline at end of file + .collapse.navbar-collapse + = render partial: 'layouts/rails_admin/secondary_navigation' From 312e53dfd86d7f381ca56b58999faa6be9789eb5 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 24 Oct 2014 17:43:35 +0900 Subject: [PATCH 25/87] Virtual fields caused #show to crash. Closes #1767 --- app/views/rails_admin/main/show.html.haml | 2 +- lib/rails_admin/config/fields/base.rb | 9 +++ .../fields/types/polymorphic_association.rb | 4 ++ .../show/rails_admin_config_show_spec.rb | 68 ++++++++++++++++--- 4 files changed, 71 insertions(+), 12 deletions(-) diff --git a/app/views/rails_admin/main/show.html.haml b/app/views/rails_admin/main/show.html.haml index 8eac12492f..73e55f0a42 100644 --- a/app/views/rails_admin/main/show.html.haml +++ b/app/views/rails_admin/main/show.html.haml @@ -1,6 +1,6 @@ - @model_config.show.with(object: @object, view: self, controller: self.controller).visible_groups.each do |fieldset| - unless (fields = fieldset.with(object: @object, view: self, controller: self.controller).visible_fields).empty? - - if !(values = fields.map{ |f| f.value.presence }).compact.empty? || !RailsAdmin::config.compact_show_view + - if !(values = fields.map{ |f| f.formatted_value.presence }).compact.empty? || !RailsAdmin::config.compact_show_view .fieldset %h4 = fieldset.label diff --git a/lib/rails_admin/config/fields/base.rb b/lib/rails_admin/config/fields/base.rb index 91c5484e9a..6cb352fa82 100644 --- a/lib/rails_admin/config/fields/base.rb +++ b/lib/rails_admin/config/fields/base.rb @@ -266,6 +266,15 @@ def type # Reader for field's value def value bindings[:object].safe_send(name) + rescue NoMethodError => e + raise e.exception <<-EOM.gsub(/^\s{10}/, '') + #{e.message} + If you want to use a RailsAdmin virtual field(= a field without corresponding instance method), + you should declare 'formatted_value' in the field definition. + field :#{name} do + formatted_value{ bindings[:object].call_some_method } + end + EOM end # Reader for nested attributes diff --git a/lib/rails_admin/config/fields/types/polymorphic_association.rb b/lib/rails_admin/config/fields/types/polymorphic_association.rb index be68b7e347..9e68004ae3 100644 --- a/lib/rails_admin/config/fields/types/polymorphic_association.rb +++ b/lib/rails_admin/config/fields/types/polymorphic_association.rb @@ -19,6 +19,10 @@ class PolymorphicAssociation < RailsAdmin::Config::Fields::Types::BelongsToAssoc associated_model_config.length > 0 end + register_instance_option :formatted_value do + (o = value) && o.send(RailsAdmin.config(o).object_label_method) + end + register_instance_option :sortable do false end diff --git a/spec/integration/config/show/rails_admin_config_show_spec.rb b/spec/integration/config/show/rails_admin_config_show_spec.rb index 0b1c9f8852..f51162bb98 100644 --- a/spec/integration/config/show/rails_admin_config_show_spec.rb +++ b/spec/integration/config/show/rails_admin_config_show_spec.rb @@ -5,11 +5,6 @@ let(:team) { FactoryGirl.create :team } def do_request - # tests were done with compact_show_view being false - RailsAdmin.config do |c| - c.compact_show_view = false - end - visit show_path(model_name: 'team', id: team.id) end @@ -34,9 +29,8 @@ def do_request describe 'compact_show_view' do it 'hides empty fields in show view by default' do - @player = FactoryGirl.create :player - visit show_path(model_name: 'league', id: @player.id) - is_expected.not_to have_css('.born_on_field') + do_request + is_expected.not_to have_css('.logo_url_field') end it 'is disactivable' do @@ -44,9 +38,8 @@ def do_request c.compact_show_view = false end - @player = FactoryGirl.create :player - visit show_path(model_name: 'player', id: @player.id) - is_expected.to have_css('.born_on_field') + do_request + is_expected.to have_css('.logo_url_field') end end @@ -77,6 +70,12 @@ def do_request end describe 'field groupings' do + before do + RailsAdmin.config do |c| + c.compact_show_view = false + end + end + it 'is hideable' do RailsAdmin.config Team do show do @@ -179,6 +178,11 @@ def do_request end describe "items' fields" do + before do + RailsAdmin.config do |c| + c.compact_show_view = false + end + end it 'shows all by default' do do_request @@ -344,4 +348,46 @@ def do_request is_expected.not_to have_link('embed 1') end end + + describe 'virtual field' do + let(:team) { FactoryGirl.create :team, name: 'foobar' } + context 'with formatted_value defined' do + before do + RailsAdmin.config Team do + show do + field :truncated_name do + formatted_value do + bindings[:object].name.truncate(5) + end + end + end + end + end + + it 'shows up correctly' do + do_request + + is_expected.to have_selector('.truncated_name_field') + is_expected.to have_selector('dd', text: 'fo...') + end + end + + context 'without formatted_value' do + before do + RailsAdmin.config Team do + show do + field :truncated_name do + pretty_value do + bindings[:object].name.truncate(5) + end + end + end + end + end + + it 'raises error along with suggestion' do + expect { do_request }.to raise_error(/you should declare 'formatted_value'/) + end + end + end end From f2ea475cee055fa186a063e2fc0b8254123f229a Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 31 Oct 2014 11:23:48 +0900 Subject: [PATCH 26/87] Fix spec failures brought by #2059 --- .../rails_admin/application_helper_spec.rb | 14 +++++++------- .../basic/list/rails_admin_basic_list_spec.rb | 16 ++++++++-------- spec/integration/rails_admin_spec.rb | 2 +- spec/orm/active_record.rb | 8 ++++++++ 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/spec/helpers/rails_admin/application_helper_spec.rb b/spec/helpers/rails_admin/application_helper_spec.rb index 0142086554..f09e152270 100644 --- a/spec/helpers/rails_admin/application_helper_spec.rb +++ b/spec/helpers/rails_admin/application_helper_spec.rb @@ -208,7 +208,7 @@ def initialize(_user) RailsAdmin.config do |config| config.included_models = [Ball, Comment] end - expect(helper.main_navigation).to match(/(nav\-header).*(Navigation).*(Balls).*(Comments)/m) + expect(helper.main_navigation).to match(/(dropdown-header).*(Navigation).*(Balls).*(Comments)/m) end it 'does not draw empty navigation labels' do @@ -221,8 +221,8 @@ def initialize(_user) label_plural 'Confirmed' end end - expect(helper.main_navigation).to match(/(nav\-header).*(Navigation).*(Balls).*(Commentz).*(Confirmed)/m) - expect(helper.main_navigation).not_to match(/(nav\-header).*(Navigation).*(Balls).*(Commentz).*(Confirmed).*(Comment)/m) + expect(helper.main_navigation).to match(/(dropdown-header).*(Navigation).*(Balls).*(Commentz).*(Confirmed)/m) + expect(helper.main_navigation).not_to match(/(dropdown-header).*(Navigation).*(Balls).*(Commentz).*(Confirmed).*(Comment)/m) end it 'does not show unvisible models' do @@ -233,7 +233,7 @@ def initialize(_user) end end result = helper.main_navigation - expect(result).to match(/(nav\-header).*(Navigation).*(Balls)/m) + expect(result).to match(/(dropdown-header).*(Navigation).*(Balls)/m) expect(result).not_to match('Comments') end @@ -244,14 +244,14 @@ def initialize(_user) hide end end - expect(helper.main_navigation).to match(/(nav\-header).*(Navigation).*(Hardballs)/m) + expect(helper.main_navigation).to match(/(dropdown\-header).*(Navigation).*(Hardballs)/m) end it 'shows children of excluded models' do RailsAdmin.config do |config| config.included_models = [Hardball] end - expect(helper.main_navigation).to match(/(nav\-header).*(Navigation).*(Hardballs)/m) + expect(helper.main_navigation).to match(/(dropdown-header).*(Navigation).*(Hardballs)/m) end it 'nests in navigation label' do @@ -261,7 +261,7 @@ def initialize(_user) navigation_label 'commentable' end end - expect(helper.main_navigation).to match(/(nav\-header).*(Commentable).*(Comments)/m) + expect(helper.main_navigation).to match(/(dropdown\-header).*(Commentable).*(Comments)/m) end it 'nests in parent model' do diff --git a/spec/integration/basic/list/rails_admin_basic_list_spec.rb b/spec/integration/basic/list/rails_admin_basic_list_spec.rb index 8272fb2ffd..87185d342e 100644 --- a/spec/integration/basic/list/rails_admin_basic_list_spec.rb +++ b/spec/integration/basic/list/rails_admin_basic_list_spec.rb @@ -16,7 +16,7 @@ it "redirects to dashboard and inform the user the model wasn't found" do visit '/admin/whatever' expect(page.driver.status_code).to eq(404) - expect(find('.alert-error')).to have_content("Model 'Whatever' could not be found") + expect(find('.alert-danger')).to have_content("Model 'Whatever' could not be found") end end @@ -24,7 +24,7 @@ it "redirects to balls index and inform the user the id wasn't found" do visit '/admin/ball/545-typo' expect(page.driver.status_code).to eq(404) - expect(find('.alert-error')).to have_content("Ball with id '545-typo' could not be found") + expect(find('.alert-danger')).to have_content("Ball with id '545-typo' could not be found") end end @@ -315,9 +315,9 @@ end it 'paginates correctly' do - expect(find('.pagination ul li:first')).to have_content('« Prev') - expect(find('.pagination ul li:last')).to have_content('Next »') - expect(find('.pagination ul li.active')).to have_content('2') + expect(find('ul.pagination li:first')).to have_content('« Prev') + expect(find('ul.pagination li:last')).to have_content('Next »') + expect(find('ul.pagination li.active')).to have_content('2') end end @@ -329,9 +329,9 @@ end it 'paginates correctly and contain the right item' do - expect(find('.pagination ul li:first')).to have_content('« Prev') - expect(find('.pagination ul li:last')).to have_content('Next »') - expect(find('.pagination ul li.active')).to have_content('3') + expect(find('ul.pagination li:first')).to have_content('« Prev') + expect(find('ul.pagination li:last')).to have_content('Next »') + expect(find('ul.pagination li.active')).to have_content('3') end end diff --git a/spec/integration/rails_admin_spec.rb b/spec/integration/rails_admin_spec.rb index b27739837b..f71d7ab148 100644 --- a/spec/integration/rails_admin_spec.rb +++ b/spec/integration/rails_admin_spec.rb @@ -125,7 +125,7 @@ describe 'secondary navigation' do it 'has Gravatar image' do visit dashboard_path - is_expected.to have_selector('ul.nav.pull-right li img') + is_expected.to have_selector('ul.navbar-right img[src*="gravatar.com"]') end it "does not show Gravatar when user doesn't have email method" do diff --git a/spec/orm/active_record.rb b/spec/orm/active_record.rb index d99167f1fc..ed1005a4b6 100644 --- a/spec/orm/active_record.rb +++ b/spec/orm/active_record.rb @@ -38,6 +38,14 @@ def column_defaults a end end + + def all + self + end + + def count + 0 + end end # Override the save method to prevent exceptions. From 644e41b43f6515da6d53dcdce572eef879297cdd Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 31 Oct 2014 11:34:42 +0900 Subject: [PATCH 27/87] Fix rubocop offenses --- .rubocop.yml | 3 +++ app/helpers/rails_admin/application_helper.rb | 20 +++++++++---------- app/helpers/rails_admin/form_builder.rb | 14 ++++++------- lib/rails_admin/adapters/active_record.rb | 4 ++-- lib/rails_admin/adapters/mongoid/property.rb | 2 +- lib/rails_admin/config/configurable.rb | 2 +- .../config/fields/factories/enum.rb | 4 ++-- .../paper_trail/auditing_adapter.rb | 4 ++-- lib/rails_admin/support/csv_converter.rb | 18 ++++++++--------- .../rails_admin/application_helper_spec.rb | 8 ++++---- .../export/rails_admin_basic_export_spec.rb | 2 +- .../adapters/active_record_spec.rb | 4 ++-- spec/rails_admin/adapters/mongoid_spec.rb | 4 ++-- 13 files changed, 46 insertions(+), 43 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 8b1691381b..2dbdcfeabf 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -5,6 +5,9 @@ AllCops: - 'spec/dummy_app/db/schema.rb' - 'vendor/bundle/**/*' +Metrics/AbcSize: + Max: 69.98 # TODO: Lower to 15 + Metrics/BlockNesting: Max: 3 diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index 8f93242f49..51a150601f 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -19,8 +19,8 @@ def authorized?(action, abstract_model = nil, object = nil) def current_action?(action, abstract_model = @abstract_model, object = @object) @action.custom_key == action.custom_key && - abstract_model.try(:to_param) == @abstract_model.try(:to_param) && - (@object.try(:persisted?) ? @object.id == object.try(:id) : !object.try(:persisted?)) + abstract_model.try(:to_param) == @abstract_model.try(:to_param) && + (@object.try(:persisted?) ? @object.id == object.try(:id) : !object.try(:persisted?)) end def action(key, abstract_model = nil, object = nil) @@ -116,7 +116,7 @@ def breadcrumb(action = @action, _acc = []) o = a.send(:eval, 'bindings[:object]') content_tag(:li, class: current_action?(a, am, o) && 'active') do crumb = begin - if not current_action?(a, am, o) + if !current_action?(a, am, o) if a.http_methods.include?(:get) link_to url_for(action: a.action_name, controller: 'rails_admin/main', model_name: am.try(:to_param), id: (o.try(:persisted?) && o.try(:id) || nil)), class: 'pjax' do wording_for(:breadcrumb, a, am, o) @@ -155,13 +155,13 @@ def bulk_menu(abstract_model = @abstract_model) return '' if actions.empty? content_tag :li, class: 'dropdown', style: 'float:right' do content_tag(:a, class: 'dropdown-toggle', :'data-toggle' => 'dropdown', href: '#') { t('admin.misc.bulk_menu_title').html_safe + ''.html_safe } + - content_tag(:ul, class: 'dropdown-menu', style: 'left:auto; right:0;') do - actions.collect do |action| - content_tag :li do - link_to wording_for(:bulk_link, action), '#', onclick: "jQuery('#bulk_action').val('#{action.action_name}'); jQuery('#bulk_form').submit(); return false;" - end - end.join.html_safe - end + content_tag(:ul, class: 'dropdown-menu', style: 'left:auto; right:0;') do + actions.collect do |action| + content_tag :li do + link_to wording_for(:bulk_link, action), '#', onclick: "jQuery('#bulk_action').val('#{action.action_name}'); jQuery('#bulk_form').submit(); return false;" + end + end.join.html_safe + end end.html_safe end end diff --git a/app/helpers/rails_admin/form_builder.rb b/app/helpers/rails_admin/form_builder.rb index 48fa840d8a..15813241d3 100644 --- a/app/helpers/rails_admin/form_builder.rb +++ b/app/helpers/rails_admin/form_builder.rb @@ -12,10 +12,10 @@ def generate(options = {}) ) object_infos + - visible_groups(options[:model_config], generator_action(options[:action], options[:nested_in])).collect do |fieldset| - fieldset_for fieldset, options[:nested_in] - end.join.html_safe + - (options[:nested_in] ? '' : @template.render(partial: 'rails_admin/main/submit_buttons')) + visible_groups(options[:model_config], generator_action(options[:action], options[:nested_in])).collect do |fieldset| + fieldset_for fieldset, options[:nested_in] + end.join.html_safe + + (options[:nested_in] ? '' : @template.render(partial: 'rails_admin/main/submit_buttons')) end end @@ -36,7 +36,7 @@ def field_wrapper_for(field, nested_in) unless nested_field_association?(field, nested_in) @template.content_tag(:div, class: "form-group control-group #{field.type_css_class} #{field.css_class} #{'error' if field.errors.present?}", id: "#{dom_id(field)}_field") do label(field.method_name, capitalize_first_letter(field.label), class: 'col-sm-2 control-label') + - (field.nested_form ? field_for(field) : input_for(field)) + (field.nested_form ? field_for(field) : input_for(field)) end end else @@ -49,8 +49,8 @@ def input_for(field) css += ' has-error' if field.errors.present? @template.content_tag(:div, class: css) do field_for(field) + - errors_for(field) + - help_for(field) + errors_for(field) + + help_for(field) end end diff --git a/lib/rails_admin/adapters/active_record.rb b/lib/rails_admin/adapters/active_record.rb index fb4cc9437c..9d627096ca 100644 --- a/lib/rails_admin/adapters/active_record.rb +++ b/lib/rails_admin/adapters/active_record.rb @@ -56,8 +56,8 @@ def associations def properties columns = model.columns.reject do |c| c.type.blank? || - DISABLED_COLUMN_TYPES.include?(c.type.to_sym) || - c.try(:array) + DISABLED_COLUMN_TYPES.include?(c.type.to_sym) || + c.try(:array) end columns.collect do |property| Property.new(property, model) diff --git a/lib/rails_admin/adapters/mongoid/property.rb b/lib/rails_admin/adapters/mongoid/property.rb index 026695c731..ffe0bb4130 100644 --- a/lib/rails_admin/adapters/mongoid/property.rb +++ b/lib/rails_admin/adapters/mongoid/property.rb @@ -71,7 +71,7 @@ def read_only? def object_field_type if [:belongs_to, :referenced_in, :embedded_in]. - include?(model.relations.values.detect { |r| r.foreign_key.try(:to_sym) == name }.try(:macro).try(:to_sym)) + include?(model.relations.values.detect { |r| r.foreign_key.try(:to_sym) == name }.try(:macro).try(:to_sym)) :bson_object_id else :string diff --git a/lib/rails_admin/config/configurable.rb b/lib/rails_admin/config/configurable.rb index 7a266c1684..2d5f06ac11 100644 --- a/lib/rails_admin/config/configurable.rb +++ b/lib/rails_admin/config/configurable.rb @@ -29,7 +29,7 @@ module ClassMethods # accessed by an instance method. Both go by the name of the option. def register_instance_option(option_name, scope = self, &default) options = scope.instance_variable_get('@config_options') || - scope.instance_variable_set('@config_options', {}) + scope.instance_variable_set('@config_options', {}) option_name = option_name.to_s options[option_name] = nil diff --git a/lib/rails_admin/config/fields/factories/enum.rb b/lib/rails_admin/config/fields/factories/enum.rb index edaad64245..2c6d1db375 100644 --- a/lib/rails_admin/config/fields/factories/enum.rb +++ b/lib/rails_admin/config/fields/factories/enum.rb @@ -8,8 +8,8 @@ # NOTICE: _method_name could be `to_enum` and this method defined in Object. if !Object.respond_to?(method_name) && \ - (model.respond_to?(method_name) || \ - model.method_defined?(method_name)) + (model.respond_to?(method_name) || \ + model.method_defined?(method_name)) fields << RailsAdmin::Config::Fields::Types::Enum.new(parent, properties.name, properties) true else diff --git a/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb b/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb index 2a75d30d4d..61a31917b9 100644 --- a/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +++ b/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb @@ -107,8 +107,8 @@ def listing_for_model_or_object(model, object, query, sort, sort_reverse, all, p def version_class_for(model_name) klass = model_name.constantize. - try(:version_class_name). - try(:constantize) + try(:version_class_name). + try(:constantize) klass || @version_class end diff --git a/lib/rails_admin/support/csv_converter.rb b/lib/rails_admin/support/csv_converter.rb index 08a6aff0e3..90ce7614a1 100644 --- a/lib/rails_admin/support/csv_converter.rb +++ b/lib/rails_admin/support/csv_converter.rb @@ -80,23 +80,23 @@ def generate_csv_header @fields.collect do |field| ::I18n.t('admin.export.csv.header_for_root_methods', name: field.label, model: @abstract_model.pretty_name) end + - @associations.flat_map do |_association_name, option_hash| - option_hash[:fields].collect do |field| - ::I18n.t('admin.export.csv.header_for_association_methods', name: field.label, association: option_hash[:association].label) + @associations.flat_map do |_association_name, option_hash| + option_hash[:fields].collect do |field| + ::I18n.t('admin.export.csv.header_for_association_methods', name: field.label, association: option_hash[:association].label) + end end - end end def generate_csv_row(object) @fields.collect do |field| field.with(object: object).export_value end + - @associations.flat_map do |association_name, option_hash| - associated_objects = [object.send(association_name)].flatten.compact - option_hash[:fields].collect do |field| - associated_objects.collect { |ao| field.with(object: ao).export_value.presence || @empty }.join(',') + @associations.flat_map do |association_name, option_hash| + associated_objects = [object.send(association_name)].flatten.compact + option_hash[:fields].collect do |field| + associated_objects.collect { |ao| field.with(object: ao).export_value.presence || @empty }.join(',') + end end - end end end end diff --git a/spec/helpers/rails_admin/application_helper_spec.rb b/spec/helpers/rails_admin/application_helper_spec.rb index f09e152270..5160d80f69 100644 --- a/spec/helpers/rails_admin/application_helper_spec.rb +++ b/spec/helpers/rails_admin/application_helper_spec.rb @@ -69,8 +69,8 @@ def initialize(_user) member :test_bindings do visible do bindings[:controller].is_a?(ActionView::TestCase::TestController) && - bindings[:abstract_model].model == Team && - bindings[:object].is_a?(Team) + bindings[:abstract_model].model == Team && + bindings[:object].is_a?(Team) end end end @@ -97,8 +97,8 @@ def initialize(_user) member :test_bindings do visible do bindings[:controller].is_a?(ActionView::TestCase::TestController) && - bindings[:abstract_model].model == Team && - bindings[:object].is_a?(Team) + bindings[:abstract_model].model == Team && + bindings[:object].is_a?(Team) end end end diff --git a/spec/integration/basic/export/rails_admin_basic_export_spec.rb b/spec/integration/basic/export/rails_admin_basic_export_spec.rb index 6e1455747c..028fa9f81c 100644 --- a/spec/integration/basic/export/rails_admin_basic_export_spec.rb +++ b/spec/integration/basic/export/rails_admin_basic_export_spec.rb @@ -78,7 +78,7 @@ # and Mongoid with ActiveModel 3.1 does not support to_xml's :include options # (due change of implementation in ActiveModel::Serializers between 3.1 and 3.2) if RUBY_VERSION =~ /1\.9/ && - (CI_ORM != :mongoid || (CI_ORM == :mongoid && ActiveModel::VERSION::STRING >= '3.2')) + (CI_ORM != :mongoid || (CI_ORM == :mongoid && ActiveModel::VERSION::STRING >= '3.2')) is_expected.to have_content @player.team.name end end diff --git a/spec/rails_admin/adapters/active_record_spec.rb b/spec/rails_admin/adapters/active_record_spec.rb index ed649ba3ae..58251b7723 100644 --- a/spec/rails_admin/adapters/active_record_spec.rb +++ b/spec/rails_admin/adapters/active_record_spec.rb @@ -95,7 +95,7 @@ before do @abstract_model = RailsAdmin::AbstractModel.new('Team') @teams = [{}, {name: 'somewhere foos'}, {manager: 'foo junior'}]. - collect { |h| FactoryGirl.create :team, h } + collect { |h| FactoryGirl.create :team, h } end it 'makes correct query' do @@ -122,7 +122,7 @@ @abstract_model = RailsAdmin::AbstractModel.new('Team') @division = FactoryGirl.create :division, name: 'bar division' @teams = [{}, {division: @division}, {name: 'somewhere foos', division: @division}, {name: 'nowhere foos'}]. - collect { |h| FactoryGirl.create :team, h } + collect { |h| FactoryGirl.create :team, h } end context 'without configuration' do diff --git a/spec/rails_admin/adapters/mongoid_spec.rb b/spec/rails_admin/adapters/mongoid_spec.rb index 6c54fafa35..908261f17f 100644 --- a/spec/rails_admin/adapters/mongoid_spec.rb +++ b/spec/rails_admin/adapters/mongoid_spec.rb @@ -192,7 +192,7 @@ before do @abstract_model = RailsAdmin::AbstractModel.new('Player') @players = [{}, {name: 'Many foos'}, {position: 'foo shortage'}]. - collect { |h| FactoryGirl.create :player, h } + collect { |h| FactoryGirl.create :player, h } end it 'makes correct query' do @@ -205,7 +205,7 @@ @abstract_model = RailsAdmin::AbstractModel.new('Player') @team = FactoryGirl.create :team, name: 'king of bar' @players = [{}, {team: @team}, {name: 'Many foos', team: @team}, {name: 'Great foo'}]. - collect { |h| FactoryGirl.create :player, h } + collect { |h| FactoryGirl.create :player, h } end it 'makes correct query' do From c71e2d25bf17d5130ee822812d595ef97a1b02e2 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 31 Oct 2014 12:15:37 +0900 Subject: [PATCH 28/87] Get rid of navbar record count badges Because counting records on every tables upon each request might affect performance massively. Refs #1104 --- app/helpers/rails_admin/application_helper.rb | 4 +--- spec/orm/active_record.rb | 8 -------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index 51a150601f..9c80796e0b 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -96,10 +96,8 @@ def navigation(nodes_stack, nodes, level = 0) url = url_for(action: :index, controller: 'rails_admin/main', model_name: model_param) level_class = " nav-level-#{level}" if level > 0 nav_icon = node.navigation_icon ? %().html_safe : '' - count = node.abstract_model.count - badge = %( #{count}).html_safe li = content_tag :li, 'data-model' => model_param do - link_to badge + nav_icon + capitalize_first_letter(node.label_plural), url, class: "pjax#{level_class}" + link_to nav_icon + capitalize_first_letter(node.label_plural), url, class: "pjax#{level_class}" end li + navigation(nodes_stack, nodes_stack.select { |n| n.parent.to_s == node.abstract_model.model_name }, level + 1) end.join.html_safe diff --git a/spec/orm/active_record.rb b/spec/orm/active_record.rb index ed1005a4b6..d99167f1fc 100644 --- a/spec/orm/active_record.rb +++ b/spec/orm/active_record.rb @@ -38,14 +38,6 @@ def column_defaults a end end - - def all - self - end - - def count - 0 - end end # Override the save method to prevent exceptions. From dfa708d6ec97663f56657e5d6538782a55f88c2c Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Sat, 1 Nov 2014 22:47:36 +0900 Subject: [PATCH 29/87] Flash keys are Symbol in Rails 4.0 --- app/views/layouts/rails_admin/pjax.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/rails_admin/pjax.html.haml b/app/views/layouts/rails_admin/pjax.html.haml index 51310a2ee5..0acf2e861a 100644 --- a/app/views/layouts/rails_admin/pjax.html.haml +++ b/app/views/layouts/rails_admin/pjax.html.haml @@ -6,7 +6,7 @@ .page-header %h1= @page_name - flash && flash.each do |key, value| - - key = 'danger' if key == 'error' + - key = 'danger' if key.to_s == 'error' .alert{class: "alert-#{key}"} %a.close{href: '#', :'data-dismiss' => "alert"} × = value From 2d08f7c0bf412641c8f4d6fd928170a6df27434f Mon Sep 17 00:00:00 2001 From: William Charlton Date: Wed, 5 Nov 2014 15:35:40 -0500 Subject: [PATCH 30/87] Fix admin in IE Ensure Internet Explorer uses the latest engine to prevent missing icons and layout issues. --- app/views/layouts/rails_admin/application.html.haml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/layouts/rails_admin/application.html.haml b/app/views/layouts/rails_admin/application.html.haml index 8df379e668..ea0ebb16ba 100644 --- a/app/views/layouts/rails_admin/application.html.haml +++ b/app/views/layouts/rails_admin/application.html.haml @@ -1,6 +1,7 @@ !!! 5 %html %head + %meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"} %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"} %meta{content: "NONE,NOARCHIVE", name: "robots"} = csrf_meta_tag From 4a2a13b4af82bdcdb7d8bf57d3eea998820dab0b Mon Sep 17 00:00:00 2001 From: Jake Quain Date: Thu, 13 Nov 2014 16:57:01 -0700 Subject: [PATCH 31/87] Use default label if object label would be blank --- lib/rails_admin/config/model.rb | 3 ++- spec/rails_admin/config/model_spec.rb | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/rails_admin/config/model.rb b/lib/rails_admin/config/model.rb index 32bb922d3a..d1b39bad57 100644 --- a/lib/rails_admin/config/model.rb +++ b/lib/rails_admin/config/model.rb @@ -44,7 +44,8 @@ def excluded? end def object_label - bindings[:object].send object_label_method + bindings[:object].send(object_label_method).presence || + bindings[:object].send(:rails_admin_default_object_label_method) end # The display for a model instance (i.e. a single database record). diff --git a/spec/rails_admin/config/model_spec.rb b/spec/rails_admin/config/model_spec.rb index b8a9d8cd1d..3bb109bc54 100644 --- a/spec/rails_admin/config/model_spec.rb +++ b/spec/rails_admin/config/model_spec.rb @@ -26,6 +26,13 @@ c = Comment.new(content: 'test') expect(RailsAdmin.config(Comment).with(object: c).object_label).to eq('test') end + + context 'when the object_label_method is blank' do + it 'uses the rails admin default' do + c = Comment.create(content: '', id: '1') + expect(RailsAdmin.config(Comment).with(object: c).object_label).to eq('Comment #1') + end + end end describe '#object_label_method' do From bfaefdd1299b1be982cae18e9ac4ec62407dd3d4 Mon Sep 17 00:00:00 2001 From: Penn Su Date: Sat, 15 Nov 2014 02:59:21 -0800 Subject: [PATCH 32/87] Fix sidebar not scrollable when models exceeds the height of the window Signed-off-by: Penn Su --- app/assets/stylesheets/rails_admin/base/theming.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index b50d4324fe..71d61cac8f 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -29,7 +29,9 @@ body.rails_admin { padding: 9px 9px 9px 9px; position: fixed; width: 14%; - height: 100%; + overflow-y: scroll; + top: 50px; + bottom: 0; background: #eaf0f1; } From 44df8588eadb561442b88d1b0d23479f10e79f03 Mon Sep 17 00:00:00 2001 From: Rafael Carvalho Date: Mon, 17 Nov 2014 11:23:35 -0200 Subject: [PATCH 33/87] Added pjax class for scope selectors --- app/views/rails_admin/main/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/index.html.haml b/app/views/rails_admin/main/index.html.haml index 61780881d3..e8bbb5bc7a 100644 --- a/app/views/rails_admin/main/index.html.haml +++ b/app/views/rails_admin/main/index.html.haml @@ -110,7 +110,7 @@ - @model_config.list.scopes.each_with_index do |scope, index| - scope = '_all' if scope.nil? %li{class: "#{'active' if scope.to_s == params[:scope] || (params[:scope].blank? && index == 0)}"} - %a{href: index_path(params.merge(scope: scope, page: nil))}= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize)) + %a{href: index_path(params.merge(scope: scope, page: nil)) class: 'pjax'}= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize)) = form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: "form" do = hidden_field_tag :bulk_action From 4d086c14e3ac74a5d046439fece58957ebbc7186 Mon Sep 17 00:00:00 2001 From: johanneskrtek Date: Sun, 23 Nov 2014 15:28:39 +0100 Subject: [PATCH 34/87] Update export.html.haml Remove redundant %div from markup. %legend as first element in %fieldsets (more flexibility for CSS styling). Wrap checkbox in label with class 'checkbox' for proper alignment. --- app/views/rails_admin/main/export.html.haml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/app/views/rails_admin/main/export.html.haml b/app/views/rails_admin/main/export.html.haml index 358e9378d3..48e9782ca4 100644 --- a/app/views/rails_admin/main/export.html.haml +++ b/app/views/rails_admin/main/export.html.haml @@ -5,15 +5,15 @@ %input{name: "send_data", type: "hidden", value: "true"}/ %fieldset{id: 'fields_to_export'} - %div.control-group - %div.controls + %legend + %i.icon-chevron-down + = t('admin.export.select') + .control-group + .controls .col-sm-2 %label.col-sm-10.checkbox{for: 'check_all'} = check_box_tag 'all', 'all', true, { id: 'check_all' } = t('admin.export.select_all_fields') - %legend - %i.icon-chevron-down - = t('admin.export.select') .control-group %label.col-sm-2.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', name: @model_config.label_plural.downcase) .col-sm-10.controls @@ -58,7 +58,8 @@ .control-group %label.col-sm-2.control-label{for: "csv_options_skip_header"}= t('admin.export.csv.skip_header') .col-sm-10.controls - = check_box_tag 'csv_options[skip_header]', 'true' + %label.checkbox + = check_box_tag 'csv_options[skip_header]', 'true' %p.help-block= t('admin.export.csv.skip_header_help') .control-group From a6d58829af556f8ca515d32891d8278620fb2b63 Mon Sep 17 00:00:00 2001 From: Rafael Carvalho Date: Mon, 24 Nov 2014 10:46:55 -0200 Subject: [PATCH 35/87] Added a missing comma at index template --- app/views/rails_admin/main/index.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/index.html.haml b/app/views/rails_admin/main/index.html.haml index e8bbb5bc7a..76bc908ac7 100644 --- a/app/views/rails_admin/main/index.html.haml +++ b/app/views/rails_admin/main/index.html.haml @@ -110,7 +110,7 @@ - @model_config.list.scopes.each_with_index do |scope, index| - scope = '_all' if scope.nil? %li{class: "#{'active' if scope.to_s == params[:scope] || (params[:scope].blank? && index == 0)}"} - %a{href: index_path(params.merge(scope: scope, page: nil)) class: 'pjax'}= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize)) + %a{href: index_path(params.merge(scope: scope, page: nil)), class: 'pjax'}= I18n.t("admin.scopes.#{@abstract_model.to_param}.#{scope}", default: I18n.t("admin.scopes.#{scope}", default: scope.to_s.titleize)) = form_tag bulk_action_path(model_name: @abstract_model.to_param), method: :post, id: "bulk_form", class: "form" do = hidden_field_tag :bulk_action From ea424e16ac83b58e0bf0ca07689c02f69ed140d7 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Thu, 4 Dec 2014 13:19:13 +0900 Subject: [PATCH 36/87] Fix Rails 4.2 build --- spec/integration/config/show/rails_admin_config_show_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/integration/config/show/rails_admin_config_show_spec.rb b/spec/integration/config/show/rails_admin_config_show_spec.rb index f51162bb98..77a4a036ba 100644 --- a/spec/integration/config/show/rails_admin_config_show_spec.rb +++ b/spec/integration/config/show/rails_admin_config_show_spec.rb @@ -22,7 +22,7 @@ def do_request end it 'contains the JSONified object' do - expect(body).to include(@player.reload.to_json) + expect(JSON.parse(body)).to eq JSON.parse @player.to_json end end From d5491c934b40d6e91268b731c0b2d063156073a1 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 5 Dec 2014 10:54:52 +0900 Subject: [PATCH 37/87] Force reload to truncate subseconds --- spec/integration/config/show/rails_admin_config_show_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/integration/config/show/rails_admin_config_show_spec.rb b/spec/integration/config/show/rails_admin_config_show_spec.rb index 77a4a036ba..d889cd2ce5 100644 --- a/spec/integration/config/show/rails_admin_config_show_spec.rb +++ b/spec/integration/config/show/rails_admin_config_show_spec.rb @@ -22,7 +22,7 @@ def do_request end it 'contains the JSONified object' do - expect(JSON.parse(body)).to eq JSON.parse @player.to_json + expect(JSON.parse(body)).to eq JSON.parse @player.reload.to_json end end From 09de8d7705f74fdd5e1bf0116edd000c8b8bebe2 Mon Sep 17 00:00:00 2001 From: Joao Vortmann Date: Fri, 5 Dec 2014 23:02:01 -0200 Subject: [PATCH 38/87] Improve logout method configuration by using first sign_out_via option on Devise. Thanks @carlesso --- app/helpers/rails_admin/application_helper.rb | 2 +- .../rails_admin/application_helper_spec.rb | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index 9c80796e0b..9119ee2c3a 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -48,7 +48,7 @@ def logout_path end def logout_method - return Devise.sign_out_via if defined?(Devise) + return [Devise.sign_out_via].flatten.first if defined?(Devise) :delete end diff --git a/spec/helpers/rails_admin/application_helper_spec.rb b/spec/helpers/rails_admin/application_helper_spec.rb index 5160d80f69..41a5aa987d 100644 --- a/spec/helpers/rails_admin/application_helper_spec.rb +++ b/spec/helpers/rails_admin/application_helper_spec.rb @@ -110,6 +110,21 @@ def initialize(_user) end end + describe '#logout_method' do + it 'defaults to :delete when Devise is not defined' do + allow(Object).to receive(:defined?).with(Devise).and_return(false) + + expect(helper.logout_method).to eq(:delete) + end + + it 'uses first sign out method from Devise when it is defined' do + allow(Object).to receive(:defined?).with(Devise).and_return(true) + + expect(Devise).to receive(:sign_out_via).and_return([:whatever_defined_on_devise, :something_ignored]) + expect(helper.logout_method).to eq(:whatever_defined_on_devise) + end + end + describe '#wording_for' do it 'gives correct wording even if action is not visible' do RailsAdmin.config do |config| From 4c9708a3a9dbbb85ba17efe266ebde6d42cd9951 Mon Sep 17 00:00:00 2001 From: Enrico Carlesso Date: Tue, 9 Dec 2014 00:32:55 +0100 Subject: [PATCH 39/87] Use label instead of badge for boolean elements as per sferik/rails_admin#2131 --- lib/rails_admin/config/fields/types/boolean.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/rails_admin/config/fields/types/boolean.rb b/lib/rails_admin/config/fields/types/boolean.rb index 6d5c3204ad..f704a5af23 100644 --- a/lib/rails_admin/config/fields/types/boolean.rb +++ b/lib/rails_admin/config/fields/types/boolean.rb @@ -13,11 +13,11 @@ class Boolean < RailsAdmin::Config::Fields::Base register_instance_option :pretty_value do case value when nil - %(-) + %(-) when false - %() + %() when true - %() + %() end.html_safe end From 6d2f6c6d1eee31086c1b35021c675fb31d5294ee Mon Sep 17 00:00:00 2001 From: Enrico Carlesso Date: Tue, 9 Dec 2014 00:39:44 +0100 Subject: [PATCH 40/87] =?UTF-8?q?Using=20=E2=80=92=20(dash)=20instead=20-?= =?UTF-8?q?=20result=20in=20equal=20sized=20boolean=20indicators?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/rails_admin/config/fields/types/boolean.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_admin/config/fields/types/boolean.rb b/lib/rails_admin/config/fields/types/boolean.rb index f704a5af23..3a8ebbd6c8 100644 --- a/lib/rails_admin/config/fields/types/boolean.rb +++ b/lib/rails_admin/config/fields/types/boolean.rb @@ -13,7 +13,7 @@ class Boolean < RailsAdmin::Config::Fields::Base register_instance_option :pretty_value do case value when nil - %(-) + %() when false %() when true From 02d90f3e85f87fbbbcefd57da56e0110993c3417 Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Thu, 11 Dec 2014 14:35:15 +0100 Subject: [PATCH 41/87] Remove emtpy lines from beginning and end of blocks --- app/helpers/rails_admin/application_helper.rb | 1 - lib/rails_admin/config/actions/bulk_delete.rb | 1 - lib/rails_admin/config/actions/edit.rb | 2 -- lib/rails_admin/config/actions/export.rb | 2 -- lib/rails_admin/config/actions/index.rb | 3 --- lib/rails_admin/config/actions/new.rb | 2 -- lib/rails_admin/config/fields/factories/enum.rb | 1 - spec/controllers/rails_admin/main_controller_spec.rb | 3 --- spec/helpers/rails_admin/application_helper_spec.rb | 1 - spec/integration/authorization/cancan_spec.rb | 5 ----- spec/integration/authorization/cancancan_spec.rb | 5 ----- .../bulk_action/rails_admin_basic_bulk_action_spec.rb | 1 - .../rails_admin_namespaced_model_create_spec.rb | 1 - .../basic/delete/rails_admin_basic_delete_spec.rb | 1 - .../basic/destroy/rails_admin_basic_destroy_spec.rb | 1 - .../basic/edit/rails_admin_basic_edit_spec.rb | 4 ---- .../basic/export/rails_admin_basic_export_spec.rb | 2 -- .../basic/list/rails_admin_basic_list_spec.rb | 2 -- .../basic/new/rails_admin_basic_new_spec.rb | 1 - .../new/rails_admin_namespaced_model_new_spec.rb | 1 - .../basic/update/rails_admin_basic_update_spec.rb | 2 -- .../config/edit/rails_admin_config_edit_spec.rb | 11 ----------- .../config/list/rails_admin_config_list_spec.rb | 3 --- .../config/show/rails_admin_config_show_spec.rb | 1 - spec/integration/history/rails_admin_history_spec.rb | 1 - spec/integration/rails_admin_spec.rb | 4 ---- spec/integration/relation_spec.rb | 1 - spec/rails_admin/abstract_model_spec.rb | 2 -- spec/rails_admin/config/actions/base_spec.rb | 1 - spec/rails_admin/config/actions_spec.rb | 1 - spec/rails_admin/config/fields/base_spec.rb | 2 -- spec/rails_admin/config/fields/types/json_spec.rb | 1 - spec/rails_admin/config/has_fields_spec.rb | 1 - spec/rails_admin/config/model_spec.rb | 2 -- spec/rails_admin/config/sections_spec.rb | 2 -- spec/rails_admin/config_spec.rb | 3 --- 36 files changed, 78 deletions(-) diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index 9119ee2c3a..b664f5ff57 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -70,7 +70,6 @@ def main_navigation node_model_names = nodes_stack.collect { |c| c.abstract_model.model_name } nodes_stack.group_by(&:navigation_label).collect do |navigation_label, nodes| - nodes = nodes.select { |n| n.parent.nil? || !n.parent.to_s.in?(node_model_names) } li_stack = navigation nodes_stack, nodes diff --git a/lib/rails_admin/config/actions/bulk_delete.rb b/lib/rails_admin/config/actions/bulk_delete.rb index 940b42c5b0..c0a5edd094 100644 --- a/lib/rails_admin/config/actions/bulk_delete.rb +++ b/lib/rails_admin/config/actions/bulk_delete.rb @@ -14,7 +14,6 @@ class BulkDelete < RailsAdmin::Config::Actions::Base register_instance_option :controller do proc do - if request.post? # BULK DELETE @objects = list_entries(@model_config, :destroy) diff --git a/lib/rails_admin/config/actions/edit.rb b/lib/rails_admin/config/actions/edit.rb index a96032d1e7..8513e09c88 100644 --- a/lib/rails_admin/config/actions/edit.rb +++ b/lib/rails_admin/config/actions/edit.rb @@ -14,7 +14,6 @@ class Edit < RailsAdmin::Config::Actions::Base register_instance_option :controller do proc do - if request.get? # EDIT respond_to do |format| @@ -41,7 +40,6 @@ class Edit < RailsAdmin::Config::Actions::Base end end - end end diff --git a/lib/rails_admin/config/actions/export.rb b/lib/rails_admin/config/actions/export.rb index 6d319c7382..9930f1ab4d 100644 --- a/lib/rails_admin/config/actions/export.rb +++ b/lib/rails_admin/config/actions/export.rb @@ -14,7 +14,6 @@ class Export < RailsAdmin::Config::Actions::Base register_instance_option :controller do proc do - if format = params[:json] && :json || params[:csv] && :csv || params[:xml] && :xml request.format = format @schema = params[:schema].symbolize if params[:schema] # to_json and to_xml expect symbols for keys AND values. @@ -23,7 +22,6 @@ class Export < RailsAdmin::Config::Actions::Base else render @action.template_name end - end end diff --git a/lib/rails_admin/config/actions/index.rb b/lib/rails_admin/config/actions/index.rb index bee2149513..9ee2dae199 100644 --- a/lib/rails_admin/config/actions/index.rb +++ b/lib/rails_admin/config/actions/index.rb @@ -40,7 +40,6 @@ class Index < RailsAdmin::Config::Actions::Base end respond_to do |format| - format.html do render @action.template_name, status: (flash[:error].present? ? :not_found : 200) end @@ -81,9 +80,7 @@ class Index < RailsAdmin::Config::Actions::Base render text: output end end - end - end end diff --git a/lib/rails_admin/config/actions/new.rb b/lib/rails_admin/config/actions/new.rb index e89d1f4ab0..513f74fb72 100644 --- a/lib/rails_admin/config/actions/new.rb +++ b/lib/rails_admin/config/actions/new.rb @@ -13,9 +13,7 @@ class New < RailsAdmin::Config::Actions::Base end register_instance_option :controller do - proc do - if request.get? # NEW @object = @abstract_model.new diff --git a/lib/rails_admin/config/fields/factories/enum.rb b/lib/rails_admin/config/fields/factories/enum.rb index 2c6d1db375..87f45b6ea9 100644 --- a/lib/rails_admin/config/fields/factories/enum.rb +++ b/lib/rails_admin/config/fields/factories/enum.rb @@ -2,7 +2,6 @@ require 'rails_admin/config/fields/types/enum' RailsAdmin::Config::Fields.register_factory do |parent, properties, fields| - model = parent.abstract_model.model method_name = "#{properties.name}_enum" diff --git a/spec/controllers/rails_admin/main_controller_spec.rb b/spec/controllers/rails_admin/main_controller_spec.rb index 6691617cc3..1d33c5f452 100644 --- a/spec/controllers/rails_admin/main_controller_spec.rb +++ b/spec/controllers/rails_admin/main_controller_spec.rb @@ -28,7 +28,6 @@ end describe '#check_for_cancel' do - it 'redirects to back if params[:bulk_ids] is nil when params[:bulk_action] is present' do allow(controller).to receive(:back_or_index) { fail(StandardError.new('redirected back')) } expect { get :bulk_delete, model_name: 'player', bulk_action: 'bulk_delete' }.to raise_error('redirected back') @@ -300,7 +299,6 @@ class TeamWithNumberedPlayers < Team end it 'allows for delete method with Carrierwave' do - RailsAdmin.config FieldTest do field :carrierwave_asset field :dragonfly_asset @@ -355,5 +353,4 @@ class TeamWithNumberedPlayers < Team }) end end - end diff --git a/spec/helpers/rails_admin/application_helper_spec.rb b/spec/helpers/rails_admin/application_helper_spec.rb index 41a5aa987d..1f0827d703 100644 --- a/spec/helpers/rails_admin/application_helper_spec.rb +++ b/spec/helpers/rails_admin/application_helper_spec.rb @@ -155,7 +155,6 @@ def initialize(_user) expect(helper.wording_for(:link, :new, RailsAdmin::AbstractModel.new(Team))).to eq('Add a new Team') end - end describe '#breadcrumb' do diff --git a/spec/integration/authorization/cancan_spec.rb b/spec/integration/authorization/cancan_spec.rb index 5127a67c0f..a599f705a6 100644 --- a/spec/integration/authorization/cancan_spec.rb +++ b/spec/integration/authorization/cancan_spec.rb @@ -40,7 +40,6 @@ def initialize(user) end describe 'RailsAdmin CanCan Authorization', type: :request do - subject { page } before do @@ -111,7 +110,6 @@ def initialize(user) it 'GET /admin/player/new should raise CanCan::AccessDenied' do expect { visit new_path(model_name: 'player') }.to raise_error(CanCan::AccessDenied) end - end describe 'with create and read player role' do @@ -143,7 +141,6 @@ def initialize(user) @player = FactoryGirl.create :player expect { visit edit_path(model_name: 'player', id: @player.id) }.to raise_error(CanCan::AccessDenied) end - end describe 'with update and read player role' do @@ -175,12 +172,10 @@ def initialize(user) @player = FactoryGirl.create :player expect { visit delete_path(model_name: 'player', id: @player.id) }.to raise_error(CanCan::AccessDenied) end - end describe 'with history role' do it 'shows links to history action' do - @user.update_attributes(roles: [:admin, :read_player, :history_player]) @player = FactoryGirl.create :player diff --git a/spec/integration/authorization/cancancan_spec.rb b/spec/integration/authorization/cancancan_spec.rb index 603c4d586b..4ee99ed26b 100644 --- a/spec/integration/authorization/cancancan_spec.rb +++ b/spec/integration/authorization/cancancan_spec.rb @@ -40,7 +40,6 @@ def initialize(user) end describe 'RailsAdmin CanCanCan Authorization', type: :request do - subject { page } before do @@ -111,7 +110,6 @@ def initialize(user) it 'GET /admin/player/new should raise CanCan::AccessDenied' do expect { visit new_path(model_name: 'player') }.to raise_error(CanCan::AccessDenied) end - end describe 'with create and read player role' do @@ -143,7 +141,6 @@ def initialize(user) @player = FactoryGirl.create :player expect { visit edit_path(model_name: 'player', id: @player.id) }.to raise_error(CanCan::AccessDenied) end - end describe 'with update and read player role' do @@ -175,12 +172,10 @@ def initialize(user) @player = FactoryGirl.create :player expect { visit delete_path(model_name: 'player', id: @player.id) }.to raise_error(CanCan::AccessDenied) end - end describe 'with history role' do it 'shows links to history action' do - @user.update_attributes(roles: [:admin, :read_player, :history_player]) @player = FactoryGirl.create :player diff --git a/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb b/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb index 032dde513c..2466a8aee1 100644 --- a/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb +++ b/spec/integration/basic/bulk_action/rails_admin_basic_bulk_action_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Basic Bulk Action', type: :request do - subject { page } before do diff --git a/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb b/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb index 670fd2495b..e0a0460633 100644 --- a/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb +++ b/spec/integration/basic/create/rails_admin_namespaced_model_create_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Namespaced Model Create', type: :request do - subject { page } it 'creates object with correct attributes' do diff --git a/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb b/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb index 08ff154b98..cc43cd17df 100644 --- a/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb +++ b/spec/integration/basic/delete/rails_admin_basic_delete_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Basic Delete', type: :request do - subject { page } describe 'delete' do diff --git a/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb b/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb index 79f02d0fbf..e4c48abed9 100644 --- a/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb +++ b/spec/integration/basic/destroy/rails_admin_basic_destroy_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Basic Destroy', type: :request do - subject { page } describe 'destroy' do diff --git a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb index 32db45008c..0ba0b01266 100644 --- a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +++ b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Basic Edit', type: :request do - subject { page } describe 'edit' do @@ -41,7 +40,6 @@ end describe 'readonly associations' do - it 'is not editable' do @league = FactoryGirl.create :league visit edit_path(model_name: 'league', id: @league.id) @@ -102,11 +100,9 @@ it 'displays a link to the delete page' do is_expected.to have_selector "a[href='/admin/ball/#{@ball.id}/delete']" end - end describe 'clicking cancel when editing an object' do - it 'sends back to previous URL' do @ball = FactoryGirl.create :ball visit '/admin/ball?sort=color' diff --git a/spec/integration/basic/export/rails_admin_basic_export_spec.rb b/spec/integration/basic/export/rails_admin_basic_export_spec.rb index 028fa9f81c..8ce7f06f75 100644 --- a/spec/integration/basic/export/rails_admin_basic_export_spec.rb +++ b/spec/integration/basic/export/rails_admin_basic_export_spec.rb @@ -2,7 +2,6 @@ require 'csv' describe 'RailsAdmin Export', type: :request do - subject { page } before do @@ -29,7 +28,6 @@ end describe 'POST /admin/players/export (prompt)' do - it 'allows to export to CSV with associations and default schema, containing properly translated header and follow configuration' do RailsAdmin.config do |c| c.model Player do diff --git a/spec/integration/basic/list/rails_admin_basic_list_spec.rb b/spec/integration/basic/list/rails_admin_basic_list_spec.rb index 87185d342e..3aa5dbed16 100644 --- a/spec/integration/basic/list/rails_admin_basic_list_spec.rb +++ b/spec/integration/basic/list/rails_admin_basic_list_spec.rb @@ -3,7 +3,6 @@ require 'spec_helper' describe 'RailsAdmin Basic List', type: :request do - subject { page } describe 'GET /admin' do @@ -437,7 +436,6 @@ is_expected.to have_selector("td a[href='/admin/ball/#{@ball.id}/edit']") is_expected.to have_selector("td a[href='/admin/ball/#{@ball.id}/delete']") end - end describe 'Scopes' do diff --git a/spec/integration/basic/new/rails_admin_basic_new_spec.rb b/spec/integration/basic/new/rails_admin_basic_new_spec.rb index 5cc39b9ec1..94dc9d0a4f 100644 --- a/spec/integration/basic/new/rails_admin_basic_new_spec.rb +++ b/spec/integration/basic/new/rails_admin_basic_new_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Basic New', type: :request do - subject { page } describe 'GET /admin/player/new' do diff --git a/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb b/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb index 7a0ad8e893..5f71e51c87 100644 --- a/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb +++ b/spec/integration/basic/new/rails_admin_namespaced_model_new_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Namespaced Model New', type: :request do - subject { page } describe 'AbstractModel#to_param' do diff --git a/spec/integration/basic/update/rails_admin_basic_update_spec.rb b/spec/integration/basic/update/rails_admin_basic_update_spec.rb index 7be4f5073a..ae200ea5b3 100644 --- a/spec/integration/basic/update/rails_admin_basic_update_spec.rb +++ b/spec/integration/basic/update/rails_admin_basic_update_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Basic Update', type: :request do - subject { page } describe 'update with errors' do @@ -225,5 +224,4 @@ expect(@hardball.color).to eq('cyan') end end - end diff --git a/spec/integration/config/edit/rails_admin_config_edit_spec.rb b/spec/integration/config/edit/rails_admin_config_edit_spec.rb index c73127939d..2bf471dea1 100644 --- a/spec/integration/config/edit/rails_admin_config_edit_spec.rb +++ b/spec/integration/config/edit/rails_admin_config_edit_spec.rb @@ -3,11 +3,9 @@ require 'spec_helper' describe 'RailsAdmin Config DSL Edit Section', type: :request do - subject { page } describe " a field with 'format' as a name (Kernel function)" do - it 'is updatable without any error' do RailsAdmin.config FieldTest do edit do @@ -23,12 +21,10 @@ end describe 'default_value' do - it 'is set for all types of input fields' do RailsAdmin.config do |config| config.excluded_models = [] config.model(FieldTest) do - field :string_field do default_value 'string_field default_value' end @@ -77,7 +73,6 @@ end describe 'field groupings' do - it 'is hideable' do RailsAdmin.config Team do edit do @@ -326,7 +321,6 @@ class HelpTest < Tableless end describe "items' fields" do - it 'shows all by default' do visit new_path(model_name: 'team') is_expected.to have_selector('select#team_division_id') @@ -643,7 +637,6 @@ class HelpTest < Tableless is_expected.to have_selector('a', text: 'Edit this Team') is_expected.to have_selector('a', text: 'Edit this Draft') end - end describe 'bindings' do @@ -766,7 +759,6 @@ class HelpTest < Tableless expect(page.body).to_not include('field_test_nested_field_tests_attributes_new_nested_field_tests_deeply_nested_field_tests_attributes_new_deeply_nested_field_tests_nested_field_test_id_field') expect(page.body).to include('field_test_nested_field_tests_attributes_new_nested_field_tests_deeply_nested_field_tests_attributes_new_deeply_nested_field_tests_title') end - end end @@ -785,7 +777,6 @@ class HelpTest < Tableless end describe 'fields which are nullable and have AR validations', active_record: true do - it 'is required' do # draft.notes is nullable and has no validation field = RailsAdmin.config('Draft').edit.fields.detect { |f| f.name == :notes } @@ -864,7 +855,6 @@ class HelpTest < Tableless end describe 'Paperclip Support' do - it 'shows a file upload field' do RailsAdmin.config User do edit do @@ -1071,5 +1061,4 @@ def color_enum is_expected.to have_selector('.color_type input') end end - end diff --git a/spec/integration/config/list/rails_admin_config_list_spec.rb b/spec/integration/config/list/rails_admin_config_list_spec.rb index 0fd776c97a..67082e01bc 100644 --- a/spec/integration/config/list/rails_admin_config_list_spec.rb +++ b/spec/integration/config/list/rails_admin_config_list_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'RailsAdmin Config DSL List Section', type: :request do - subject { page } describe 'css hooks' do @@ -19,7 +18,6 @@ end describe 'number of items per page' do - before do 2.times.each do FactoryGirl.create :league @@ -41,7 +39,6 @@ end describe "items' fields" do - it 'shows all by default' do visit index_path(model_name: 'fan') expect(all('th').collect(&:text).delete_if { |t| /^\n*$/ =~ t }). diff --git a/spec/integration/config/show/rails_admin_config_show_spec.rb b/spec/integration/config/show/rails_admin_config_show_spec.rb index d889cd2ce5..9b9ca54ed5 100644 --- a/spec/integration/config/show/rails_admin_config_show_spec.rb +++ b/spec/integration/config/show/rails_admin_config_show_spec.rb @@ -27,7 +27,6 @@ def do_request end describe 'compact_show_view' do - it 'hides empty fields in show view by default' do do_request is_expected.not_to have_css('.logo_url_field') diff --git a/spec/integration/history/rails_admin_history_spec.rb b/spec/integration/history/rails_admin_history_spec.rb index 83ab43bd1c..de8d3fa35e 100644 --- a/spec/integration/history/rails_admin_history_spec.rb +++ b/spec/integration/history/rails_admin_history_spec.rb @@ -84,5 +84,4 @@ end end end - end diff --git a/spec/integration/rails_admin_spec.rb b/spec/integration/rails_admin_spec.rb index f71d7ab148..5d8ebd0f96 100644 --- a/spec/integration/rails_admin_spec.rb +++ b/spec/integration/rails_admin_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin, type: :request do - subject { page } before do @@ -41,7 +40,6 @@ end describe 'hidden fields with default values' do - before do RailsAdmin.config Player do include_all_fields @@ -71,9 +69,7 @@ end describe '_current_user' do # https://github.com/sferik/rails_admin/issues/549 - it 'is accessible from the list view' do - RailsAdmin.config Player do list do field :name do diff --git a/spec/integration/relation_spec.rb b/spec/integration/relation_spec.rb index bafefc4aed..0d360996b6 100644 --- a/spec/integration/relation_spec.rb +++ b/spec/integration/relation_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe 'table relations', type: :request do - before do class RelTest < Tableless column :league_id, :integer diff --git a/spec/rails_admin/abstract_model_spec.rb b/spec/rails_admin/abstract_model_spec.rb index d5f772fb88..7de5eff523 100644 --- a/spec/rails_admin/abstract_model_spec.rb +++ b/spec/rails_admin/abstract_model_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin::AbstractModel do - describe '#to_s' do it 'returns model\'s name' do expect(RailsAdmin::AbstractModel.new(Cms::BasicPage).to_s).to eq Cms::BasicPage.to_s @@ -31,7 +30,6 @@ expect(@abstract_model.all(filters: {'date_field' => {'1' => {v: ['', '01/03/2012', ''], o: 'between'}}}).count).to eq(2) expect(@abstract_model.all(filters: {'date_field' => {'1' => {v: ['', '', '01/02/2012'], o: 'between'}}}).count).to eq(2) expect(@abstract_model.all(filters: {'date_field' => {'1' => {v: ['01/02/2012'], o: 'default'}}}).count).to eq(1) - end end diff --git a/spec/rails_admin/config/actions/base_spec.rb b/spec/rails_admin/config/actions/base_spec.rb index 4fbad9beeb..c9ca49fecc 100644 --- a/spec/rails_admin/config/actions/base_spec.rb +++ b/spec/rails_admin/config/actions/base_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin::Config::Actions::Base do - describe '#visible?' do it 'excludes models not referenced in the only array' do RailsAdmin.config do |config| diff --git a/spec/rails_admin/config/actions_spec.rb b/spec/rails_admin/config/actions_spec.rb index 2b520c1529..65f8731162 100644 --- a/spec/rails_admin/config/actions_spec.rb +++ b/spec/rails_admin/config/actions_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin::Config::Actions do - describe 'default' do it 'is as before' do expect(RailsAdmin::Config::Actions.all.collect(&:key)).to eq([:dashboard, :index, :show, :new, :edit, :export, :delete, :bulk_delete, :history_show, :history_index, :show_in_app]) diff --git a/spec/rails_admin/config/fields/base_spec.rb b/spec/rails_admin/config/fields/base_spec.rb index 02a42f2bf1..1c12cadd4e 100644 --- a/spec/rails_admin/config/fields/base_spec.rb +++ b/spec/rails_admin/config/fields/base_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin::Config::Fields::Base do - describe '#required' do it 'reads the on: :create/:update validate option' do RailsAdmin.config Ball do @@ -197,7 +196,6 @@ class CommentReversed < Tableless end describe 'for basic type fields' do - it 'uses base table and find correct column type' do expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :text_field }.searchable_columns).to eq([{column: 'field_tests.text_field', type: :text}]) expect(RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :integer_field }.searchable_columns).to eq([{column: 'field_tests.integer_field', type: :integer}]) diff --git a/spec/rails_admin/config/fields/types/json_spec.rb b/spec/rails_admin/config/fields/types/json_spec.rb index e9a763a375..bb8eadf534 100644 --- a/spec/rails_admin/config/fields/types/json_spec.rb +++ b/spec/rails_admin/config/fields/types/json_spec.rb @@ -19,6 +19,5 @@ it 'raise JSON::ParserError with invalid json string' do expect { field.parse_input(json_field: '{{') }.to raise_error(JSON::ParserError) end - end end diff --git a/spec/rails_admin/config/has_fields_spec.rb b/spec/rails_admin/config/has_fields_spec.rb index a1bf2225c5..f303aed5a2 100644 --- a/spec/rails_admin/config/has_fields_spec.rb +++ b/spec/rails_admin/config/has_fields_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin::Config::HasFields do - it 'shows hidden fields when added through the DSL' do expect(RailsAdmin.config(Team).fields.detect { |f| f.name == :division_id }).not_to be_visible diff --git a/spec/rails_admin/config/model_spec.rb b/spec/rails_admin/config/model_spec.rb index 3bb109bc54..ddec6837d9 100644 --- a/spec/rails_admin/config/model_spec.rb +++ b/spec/rails_admin/config/model_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin::Config::Model do - describe '#excluded?' do before do RailsAdmin.config do |config| @@ -92,7 +91,6 @@ end, }, } - end it 'always uses :other as pluralization key' do diff --git a/spec/rails_admin/config/sections_spec.rb b/spec/rails_admin/config/sections_spec.rb index 9c25aa0b5f..39079dc7ac 100644 --- a/spec/rails_admin/config/sections_spec.rb +++ b/spec/rails_admin/config/sections_spec.rb @@ -1,7 +1,6 @@ require 'spec_helper' describe RailsAdmin::Config::Sections do - describe 'configure' do it 'configures without changing the section default list' do RailsAdmin.config Team do @@ -62,7 +61,6 @@ end end end - end expect(RailsAdmin.config(Fan).visible_fields.count).to eq(1) expect(RailsAdmin.config(Fan).visible_fields.first.label).to eq('modified base Their Name') diff --git a/spec/rails_admin/config_spec.rb b/spec/rails_admin/config_spec.rb index 2eddf16004..d261fdb492 100644 --- a/spec/rails_admin/config_spec.rb +++ b/spec/rails_admin/config_spec.rb @@ -1,9 +1,7 @@ require 'spec_helper' describe RailsAdmin::Config do - describe '.included_models' do - it 'only uses included models' do RailsAdmin.config.included_models = [Team, League] expect(RailsAdmin::AbstractModel.all.collect(&:model)).to eq([League, Team]) # it gets sorted @@ -76,7 +74,6 @@ end describe '.main_app_name' do - it 'as a default meaningful dynamic value' do expect(RailsAdmin.config.main_app_name.call).to eq(['Dummy App', 'Admin']) end From fc2d883e5e62fc590eb9ec015820700f4d488298 Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Sun, 14 Dec 2014 23:51:52 +0100 Subject: [PATCH 42/87] Bump version to 0.6.6 --- lib/rails_admin/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_admin/version.rb b/lib/rails_admin/version.rb index 5440d2cbce..d855ffe4df 100644 --- a/lib/rails_admin/version.rb +++ b/lib/rails_admin/version.rb @@ -2,7 +2,7 @@ module RailsAdmin class Version MAJOR = 0 MINOR = 6 - PATCH = 5 + PATCH = 6 PRE = nil class << self From f8f3e026960272d00cae50b2d7293e25d849cc02 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Tue, 16 Dec 2014 11:55:48 +0900 Subject: [PATCH 43/87] Exclude dummy_app/tmp from Rubocop target --- .rubocop.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.rubocop.yml b/.rubocop.yml index 2dbdcfeabf..73234088a5 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -3,6 +3,7 @@ inherit_from: .rubocop_todo.yml AllCops: Exclude: - 'spec/dummy_app/db/schema.rb' + - 'spec/dummy_app/tmp/**/*' - 'vendor/bundle/**/*' Metrics/AbcSize: From 698f06a8f45c7c56038e9f6d442c9cbfb4065dfe Mon Sep 17 00:00:00 2001 From: Ian Zabel Date: Wed, 24 Dec 2014 13:43:51 -0500 Subject: [PATCH 44/87] Rails 4.2 has deprecated `serialized_attributes` * Use the new `type_for_attribute` method instead --- lib/rails_admin/adapters/active_record/property.rb | 12 +++++++++++- .../config/edit/rails_admin_config_edit_spec.rb | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/rails_admin/adapters/active_record/property.rb b/lib/rails_admin/adapters/active_record/property.rb index 1d526a1893..4c4dfa230b 100644 --- a/lib/rails_admin/adapters/active_record/property.rb +++ b/lib/rails_admin/adapters/active_record/property.rb @@ -18,7 +18,7 @@ def pretty_name end def type - if model.serialized_attributes[property.name.to_s] + if serialized? :serialized else property.type @@ -44,6 +44,16 @@ def association? def read_only? false end + + private + + def serialized? + if Rails.version < '4.2' + model.serialized_attributes[property.name.to_s] + else + model.type_for_attribute(property.name).class == ::ActiveRecord::Type::Serialized + end + end end end end diff --git a/spec/integration/config/edit/rails_admin_config_edit_spec.rb b/spec/integration/config/edit/rails_admin_config_edit_spec.rb index 2bf471dea1..c30d050fc6 100644 --- a/spec/integration/config/edit/rails_admin_config_edit_spec.rb +++ b/spec/integration/config/edit/rails_admin_config_edit_spec.rb @@ -1017,7 +1017,7 @@ def color_enum end after do - Team.serialized_attributes.clear + Team.serialized_attributes.clear if Rails.version < '4.2' Team.instance_eval { undef :color_enum } end From 1366d0f322e353efeb2f3e88fe4a278066caf7ff Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 26 Dec 2014 16:58:43 +0900 Subject: [PATCH 45/87] Remove order dependency --- .../config/edit/rails_admin_config_edit_spec.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spec/integration/config/edit/rails_admin_config_edit_spec.rb b/spec/integration/config/edit/rails_admin_config_edit_spec.rb index c30d050fc6..42885d7f92 100644 --- a/spec/integration/config/edit/rails_admin_config_edit_spec.rb +++ b/spec/integration/config/edit/rails_admin_config_edit_spec.rb @@ -1017,7 +1017,12 @@ def color_enum end after do - Team.serialized_attributes.clear if Rails.version < '4.2' + if Rails.version >= '4.2' + Team.reset_column_information + Team.attribute_type_decorations.clear + else + Team.serialized_attributes.clear + end Team.instance_eval { undef :color_enum } end From 18ae72faff09127a592ab1a8d828c14abea3c5bd Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 26 Dec 2014 17:39:41 +0900 Subject: [PATCH 46/87] Fix deprecations in DummyApp --- spec/dummy_app/bin/rails | 2 +- spec/dummy_app/bin/setup | 29 ++++++++++++++ spec/dummy_app/config/application.rb | 5 ++- spec/dummy_app/config/boot.rb | 5 +-- .../config/environments/development.rb | 14 ++++++- .../config/environments/production.rb | 39 +++++++++---------- spec/dummy_app/config/environments/test.rb | 10 ++++- spec/dummy_app/config/initializers/assets.rb | 11 ++++++ .../config/initializers/cookies_serializer.rb | 3 ++ .../config/initializers/inflections.rb | 2 +- .../config/initializers/mime_types.rb | 1 - spec/dummy_app/config/secrets.yml | 22 +++++++++++ ...000000000001_create_divisions_migration.rb | 2 +- .../00000000000002_create_drafts_migration.rb | 2 +- ...00000000000003_create_leagues_migration.rb | 2 +- ...00000000000004_create_players_migration.rb | 2 +- .../00000000000005_create_teams_migration.rb | 2 +- .../00000000000006_devise_create_users.rb | 2 +- .../00000000000007_create_histories_table.rb | 2 +- .../00000000000008_create_fans_migration.rb | 2 +- .../20101223222233_create_rel_tests.rb | 2 +- .../migrate/20110103205808_create_comments.rb | 2 +- .../20110224184303_create_field_tests.rb | 2 +- .../20110328193014_create_cms_basic_pages.rb | 2 +- .../db/migrate/20110714095433_create_balls.rb | 2 +- ...10901131551_change_division_primary_key.rb | 4 +- ..._set_primary_key_not_null_for_divisions.rb | 4 +- ...0111123092549_create_nested_field_tests.rb | 2 +- .../migrate/20111215083258_create_foo_bars.rb | 2 +- .../migrate/20120319041705_drop_rel_tests.rb | 2 +- ...120720075608_create_another_field_tests.rb | 2 +- .../migrate/20120928075608_create_images.rb | 2 +- ...075608_create_deeply_nested_field_tests.rb | 2 +- ...20140826093220_create_paper_trail_tests.rb | 2 +- 34 files changed, 135 insertions(+), 56 deletions(-) create mode 100755 spec/dummy_app/bin/setup create mode 100644 spec/dummy_app/config/initializers/assets.rb create mode 100644 spec/dummy_app/config/initializers/cookies_serializer.rb create mode 100644 spec/dummy_app/config/secrets.yml diff --git a/spec/dummy_app/bin/rails b/spec/dummy_app/bin/rails index 728cd85aa5..5191e6927a 100755 --- a/spec/dummy_app/bin/rails +++ b/spec/dummy_app/bin/rails @@ -1,4 +1,4 @@ #!/usr/bin/env ruby -APP_PATH = File.expand_path('../../config/application', __FILE__) +APP_PATH = File.expand_path('../../config/application', __FILE__) require_relative '../config/boot' require 'rails/commands' diff --git a/spec/dummy_app/bin/setup b/spec/dummy_app/bin/setup new file mode 100755 index 0000000000..acdb2c1389 --- /dev/null +++ b/spec/dummy_app/bin/setup @@ -0,0 +1,29 @@ +#!/usr/bin/env ruby +require 'pathname' + +# path to your application root. +APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) + +Dir.chdir APP_ROOT do + # This script is a starting point to setup your application. + # Add necessary setup steps to this file: + + puts "== Installing dependencies ==" + system "gem install bundler --conservative" + system "bundle check || bundle install" + + # puts "\n== Copying sample files ==" + # unless File.exist?("config/database.yml") + # system "cp config/database.yml.sample config/database.yml" + # end + + puts "\n== Preparing database ==" + system "bin/rake db:setup" + + puts "\n== Removing old logs and tempfiles ==" + system "rm -f log/*" + system "rm -rf tmp/cache" + + puts "\n== Restarting application server ==" + system "touch tmp/restart.txt" +end diff --git a/spec/dummy_app/config/application.rb b/spec/dummy_app/config/application.rb index 0759206956..24c0a9adc8 100644 --- a/spec/dummy_app/config/application.rb +++ b/spec/dummy_app/config/application.rb @@ -11,7 +11,7 @@ # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. -Bundler.require(:default, Rails.env) +Bundler.require(*Rails.groups) module DummyApp class Application < Rails::Application @@ -28,5 +28,8 @@ class Application < Rails::Application # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. config.i18n.load_path += Dir[Rails.root.join('app', 'locales', '*.{rb,yml}').to_s] # config.i18n.default_locale = :de + + # Do not swallow errors in after_commit/after_rollback callbacks. + config.active_record.raise_in_transactional_callbacks = true if Rails.version >= '4.2' end end diff --git a/spec/dummy_app/config/boot.rb b/spec/dummy_app/config/boot.rb index e7f8ee3953..8e888c88d4 100644 --- a/spec/dummy_app/config/boot.rb +++ b/spec/dummy_app/config/boot.rb @@ -1,7 +1,4 @@ CI_ORM = (ENV['CI_ORM'] || :active_record).to_sym unless defined?(CI_ORM) -require 'rubygems' - -# Set up gems listed in the Gemfile. ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) -require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) && !ENV['TRAVIS'] +require 'bundler/setup' # Set up gems listed in the Gemfile. diff --git a/spec/dummy_app/config/environments/development.rb b/spec/dummy_app/config/environments/development.rb index f3795da922..289935bfba 100644 --- a/spec/dummy_app/config/environments/development.rb +++ b/spec/dummy_app/config/environments/development.rb @@ -19,11 +19,23 @@ # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log - # Raise an error on page load if there are pending migrations + # Raise an error on page load if there are pending migrations. config.active_record.migration_error = :page_load # Debug mode disables concatenation and preprocessing of assets. # This option may cause significant delays in view rendering with a large # number of complex assets. config.assets.debug = true + + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. + config.assets.digest = true + + # Adds additional error checking when serving assets at runtime. + # Checks for improperly declared sprockets dependencies. + # Raises helpful error messages. + config.assets.raise_runtime_errors = true + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true end diff --git a/spec/dummy_app/config/environments/production.rb b/spec/dummy_app/config/environments/production.rb index 97d72fc474..048a61f11d 100644 --- a/spec/dummy_app/config/environments/production.rb +++ b/spec/dummy_app/config/environments/production.rb @@ -5,7 +5,7 @@ config.cache_classes = true # Eager load code on boot. This eager loads most of Rails and - # your application in memory, allowing both thread web servers + # your application in memory, allowing both threaded web servers # and those relying on copy on write to perform better. # Rake tasks automatically ignore this option for performance. config.eager_load = true @@ -16,11 +16,13 @@ # Enable Rack::Cache to put a simple HTTP cache in front of your application # Add `rack-cache` to your Gemfile before enabling this. - # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid. + # For large-scale production use, consider using a caching reverse proxy like + # NGINX, varnish or squid. # config.action_dispatch.rack_cache = true - # Disable Rails's static asset server (Apache or nginx will already do this). - config.serve_static_assets = false + # Disable serving static files from the `/public` folder by default since + # Apache or NGINX already handles this. + config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? # Compress JavaScripts and CSS. config.assets.js_compressor = :uglifier @@ -29,21 +31,22 @@ # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false - # Generate digests for assets URLs. + # Asset digests allow you to set far-future HTTP expiration dates on all assets, + # yet still be able to expire them through the digest params. config.assets.digest = true - # Version of your assets, change this if you want to expire all your assets. - config.assets.version = '1.0' + # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb # Specifies the header that your server uses for sending files. - # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache - # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # config.force_ssl = true - # Set to :debug to see everything in the log. - config.log_level = :info + # Use the lowest log level to ensure availability of diagnostic information + # when problems arise. + config.log_level = :debug # Prepend all log lines with the following tags. # config.log_tags = [ :subdomain, :uuid ] @@ -55,28 +58,22 @@ # config.cache_store = :mem_cache_store # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = "http://assets.example.com" - - # Precompile additional assets. - # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. - # config.assets.precompile += %w(search.js) + # config.action_controller.asset_host = 'http://assets.example.com' # Ignore bad email addresses and do not raise email delivery errors. # Set this to true and configure the email server for immediate delivery to raise delivery errors. # config.action_mailer.raise_delivery_errors = false # Enable locale fallbacks for I18n (makes lookups for any locale fall back to - # the I18n.default_locale when a translation can not be found). + # the I18n.default_locale when a translation cannot be found). config.i18n.fallbacks = true # Send deprecation notices to registered listeners. config.active_support.deprecation = :notify - # Disable automatic flushing of the log to improve performance. - # config.autoflush_log = false - # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new - config.logger = Logger.new(STDOUT) + # Do not dump schema after migrations. + config.active_record.dump_schema_after_migration = false end diff --git a/spec/dummy_app/config/environments/test.rb b/spec/dummy_app/config/environments/test.rb index bea20703ba..334c215c20 100644 --- a/spec/dummy_app/config/environments/test.rb +++ b/spec/dummy_app/config/environments/test.rb @@ -12,8 +12,8 @@ # preloads Rails for running tests, you may have to set it to true. config.eager_load = false - # Configure static asset server for tests with Cache-Control for performance. - config.serve_static_assets = true + # Configure static file server for tests with Cache-Control for performance. + config.serve_static_files = true config.static_cache_control = 'public, max-age=3600' # Show full error reports and disable caching. @@ -31,6 +31,12 @@ # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test + # Randomize the order test cases are executed. + config.active_support.test_order = :random + # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr + + # Raises error for missing translations + # config.action_view.raise_on_missing_translations = true end diff --git a/spec/dummy_app/config/initializers/assets.rb b/spec/dummy_app/config/initializers/assets.rb new file mode 100644 index 0000000000..01ef3e6630 --- /dev/null +++ b/spec/dummy_app/config/initializers/assets.rb @@ -0,0 +1,11 @@ +# Be sure to restart your server when you modify this file. + +# Version of your assets, change this if you want to expire all your assets. +Rails.application.config.assets.version = '1.0' + +# Add additional assets to the asset load path +# Rails.application.config.assets.paths << Emoji.images_path + +# Precompile additional assets. +# application.js, application.css, and all non-JS/CSS in app/assets folder are already added. +# Rails.application.config.assets.precompile += %w( search.js ) diff --git a/spec/dummy_app/config/initializers/cookies_serializer.rb b/spec/dummy_app/config/initializers/cookies_serializer.rb new file mode 100644 index 0000000000..ac5f8b663d --- /dev/null +++ b/spec/dummy_app/config/initializers/cookies_serializer.rb @@ -0,0 +1,3 @@ +# Be sure to restart your server when you modify this file. + +Rails.application.config.action_dispatch.cookies_serializer = :marshal diff --git a/spec/dummy_app/config/initializers/inflections.rb b/spec/dummy_app/config/initializers/inflections.rb index 66413b6f11..ac033bf9dc 100644 --- a/spec/dummy_app/config/initializers/inflections.rb +++ b/spec/dummy_app/config/initializers/inflections.rb @@ -7,7 +7,7 @@ # inflect.plural /^(ox)$/i, '\1en' # inflect.singular /^(ox)en/i, '\1' # inflect.irregular 'person', 'people' -# inflect.uncountable %w(fish sheep) +# inflect.uncountable %w( fish sheep ) # end # These inflection rules are supported but not enabled by default: diff --git a/spec/dummy_app/config/initializers/mime_types.rb b/spec/dummy_app/config/initializers/mime_types.rb index 72aca7e441..dc1899682b 100644 --- a/spec/dummy_app/config/initializers/mime_types.rb +++ b/spec/dummy_app/config/initializers/mime_types.rb @@ -2,4 +2,3 @@ # Add new mime types for use in respond_to blocks: # Mime::Type.register "text/richtext", :rtf -# Mime::Type.register_alias "text/html", :iphone diff --git a/spec/dummy_app/config/secrets.yml b/spec/dummy_app/config/secrets.yml new file mode 100644 index 0000000000..3b056c1f6d --- /dev/null +++ b/spec/dummy_app/config/secrets.yml @@ -0,0 +1,22 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key is used for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! + +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +# You can use `rake secret` to generate a secure secret key. + +# Make sure the secrets in this file are kept private +# if you're sharing your code publicly. + +development: + secret_key_base: fe661de3f58b9d446d992466c6e623394828bb6a0af4853bdef9de6ac17b847f418c2aa5778afa4af7b34906df5075e4d5dc6f4b61def924b7ae58f886608770 + +test: + secret_key_base: 3bc2c7ebeb21e93fd8cb1166ae0cdb560c2fa8417e5dd016f691765b5e5a455f53841c01906dfd3b779beed3ad5062be664426001cf9e54ec0874c273a8e64eb + +# Do not keep production secrets in the repository, +# instead read values from the environment. +production: + secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb b/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb index f5124529b9..52cdc7a279 100644 --- a/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb +++ b/spec/dummy_app/db/migrate/00000000000001_create_divisions_migration.rb @@ -1,7 +1,7 @@ class CreateDivisionsMigration < ActiveRecord::Migration def self.up create_table :divisions do |t| - t.timestamps + t.timestamps null: false t.integer :league_id t.string :name, limit: 50, null: false end diff --git a/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb b/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb index f19a1ecb8a..efe34f9a14 100644 --- a/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb +++ b/spec/dummy_app/db/migrate/00000000000002_create_drafts_migration.rb @@ -1,7 +1,7 @@ class CreateDraftsMigration < ActiveRecord::Migration def self.up create_table :drafts do |t| - t.timestamps + t.timestamps null: false t.integer :player_id t.integer :team_id t.date :date diff --git a/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb b/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb index fa88e7c24d..230f7be866 100644 --- a/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb +++ b/spec/dummy_app/db/migrate/00000000000003_create_leagues_migration.rb @@ -1,7 +1,7 @@ class CreateLeaguesMigration < ActiveRecord::Migration def self.up create_table :leagues do |t| - t.timestamps + t.timestamps null: false t.string :name, limit: 50, null: false end end diff --git a/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb b/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb index b702470d79..ac4f047911 100644 --- a/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb +++ b/spec/dummy_app/db/migrate/00000000000004_create_players_migration.rb @@ -1,7 +1,7 @@ class CreatePlayersMigration < ActiveRecord::Migration def self.up create_table :players do |t| - t.timestamps + t.timestamps null: false t.datetime :deleted_at t.integer :team_id t.string :name, limit: 100, null: false diff --git a/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb b/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb index 08e359dd1e..6bdfd38aa0 100644 --- a/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb +++ b/spec/dummy_app/db/migrate/00000000000005_create_teams_migration.rb @@ -1,7 +1,7 @@ class CreateTeamsMigration < ActiveRecord::Migration def self.up create_table :teams do |t| - t.timestamps + t.timestamps null: false t.integer :league_id t.integer :division_id t.string :name, limit: 50 diff --git a/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb b/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb index 48523623a3..f993bb5312 100644 --- a/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb +++ b/spec/dummy_app/db/migrate/00000000000006_devise_create_users.rb @@ -36,7 +36,7 @@ def self.up # Token authenticatable # t.string :authentication_token - t.timestamps + t.timestamps null: false end add_index :users, :email, unique: true diff --git a/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb b/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb index 19b6c2ac95..cae3d442e7 100644 --- a/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb +++ b/spec/dummy_app/db/migrate/00000000000007_create_histories_table.rb @@ -5,7 +5,7 @@ def self.up t.string :username t.integer :item t.string :table - t.timestamps + t.timestamps null: false end add_index(:histories, [:item, :table]) end diff --git a/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb b/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb index f2ff01e036..d16f953740 100644 --- a/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb +++ b/spec/dummy_app/db/migrate/00000000000008_create_fans_migration.rb @@ -1,7 +1,7 @@ class CreateFansMigration < ActiveRecord::Migration def self.up create_table :fans do |t| - t.timestamps + t.timestamps null: false t.string :name, limit: 100, null: false end end diff --git a/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb b/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb index dac6b92fab..4ff7c85b2b 100644 --- a/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb +++ b/spec/dummy_app/db/migrate/20101223222233_create_rel_tests.rb @@ -5,7 +5,7 @@ def self.up t.integer :division_id, null: false t.integer :player_id - t.timestamps + t.timestamps null: false end end diff --git a/spec/dummy_app/db/migrate/20110103205808_create_comments.rb b/spec/dummy_app/db/migrate/20110103205808_create_comments.rb index 7f7c2019c2..8a9f424ea6 100644 --- a/spec/dummy_app/db/migrate/20110103205808_create_comments.rb +++ b/spec/dummy_app/db/migrate/20110103205808_create_comments.rb @@ -5,7 +5,7 @@ def self.up t.string :commentable_type t.text :content - t.timestamps + t.timestamps null: false end end diff --git a/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb b/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb index bd1480ace5..034acf1c1a 100644 --- a/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb +++ b/spec/dummy_app/db/migrate/20110224184303_create_field_tests.rb @@ -12,7 +12,7 @@ def self.up t.date :date_field t.boolean :boolean_field - t.timestamps + t.timestamps null: false end end diff --git a/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb b/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb index aeec5c41ab..1133909a9e 100644 --- a/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb +++ b/spec/dummy_app/db/migrate/20110328193014_create_cms_basic_pages.rb @@ -4,7 +4,7 @@ def self.up t.string :title t.text :content - t.timestamps + t.timestamps null: false end end diff --git a/spec/dummy_app/db/migrate/20110714095433_create_balls.rb b/spec/dummy_app/db/migrate/20110714095433_create_balls.rb index 7cf0f6332b..b75d593d6a 100644 --- a/spec/dummy_app/db/migrate/20110714095433_create_balls.rb +++ b/spec/dummy_app/db/migrate/20110714095433_create_balls.rb @@ -2,7 +2,7 @@ class CreateBalls < ActiveRecord::Migration def self.up create_table :balls, force: true do |t| t.string :color - t.timestamps + t.timestamps null: false end end diff --git a/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb b/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb index f3bf64a5b3..9fbed769ae 100644 --- a/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb +++ b/spec/dummy_app/db/migrate/20110901131551_change_division_primary_key.rb @@ -2,7 +2,7 @@ class ChangeDivisionPrimaryKey < ActiveRecord::Migration def up drop_table :divisions create_table :divisions, primary_key: 'custom_id' do |t| - t.timestamps + t.timestamps null: false t.integer :league_id t.string :name, limit: 50, null: false end @@ -11,7 +11,7 @@ def up def down drop_table :divisions create_table :divisions do |t| - t.timestamps + t.timestamps null: false t.integer :league_id t.string :name, limit: 50, null: false end diff --git a/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb b/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb index 3776ec8154..a836c60490 100644 --- a/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb +++ b/spec/dummy_app/db/migrate/20110901150912_set_primary_key_not_null_for_divisions.rb @@ -2,7 +2,7 @@ class SetPrimaryKeyNotNullForDivisions < ActiveRecord::Migration def up drop_table :divisions create_table :divisions, id: false do |t| - t.timestamps + t.timestamps null: false t.primary_key :custom_id t.integer :custom_league_id t.string :name, limit: 50, null: false @@ -12,7 +12,7 @@ def up def down drop_table :divisions create_table :divisions, primary_key: :custom_id do |t| - t.timestamps + t.timestamps null: false t.integer :custom_league_id t.string :name, limit: 50, null: false end diff --git a/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb b/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb index 4da1e86dcb..fb0f71d225 100644 --- a/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb +++ b/spec/dummy_app/db/migrate/20111123092549_create_nested_field_tests.rb @@ -4,7 +4,7 @@ def change t.string :title t.integer :field_test_id - t.timestamps + t.timestamps null: false end end end diff --git a/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb b/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb index 9ecafb7e75..5134ce134d 100644 --- a/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb +++ b/spec/dummy_app/db/migrate/20111215083258_create_foo_bars.rb @@ -2,7 +2,7 @@ class CreateFooBars < ActiveRecord::Migration def change create_table :foo_bars do |t| t.string :title - t.timestamps + t.timestamps null: false end end end diff --git a/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb b/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb index 8d24444487..5e64619da0 100644 --- a/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb +++ b/spec/dummy_app/db/migrate/20120319041705_drop_rel_tests.rb @@ -9,7 +9,7 @@ def self.down t.integer :division_id, null: false t.integer :player_id - t.timestamps + t.timestamps null: false end end end diff --git a/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb b/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb index 4fd3353c55..6c9db6dc3c 100644 --- a/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb +++ b/spec/dummy_app/db/migrate/20120720075608_create_another_field_tests.rb @@ -1,7 +1,7 @@ class CreateAnotherFieldTests < ActiveRecord::Migration def change create_table :another_field_tests do |t| - t.timestamps + t.timestamps null: false end add_column :nested_field_tests, :another_field_test_id, :integer end diff --git a/spec/dummy_app/db/migrate/20120928075608_create_images.rb b/spec/dummy_app/db/migrate/20120928075608_create_images.rb index ab13918e5b..ef50e2e276 100644 --- a/spec/dummy_app/db/migrate/20120928075608_create_images.rb +++ b/spec/dummy_app/db/migrate/20120928075608_create_images.rb @@ -2,7 +2,7 @@ class CreateImages < ActiveRecord::Migration def change create_table :images do |t| t.attachment :file - t.timestamps + t.timestamps null: false end end end diff --git a/spec/dummy_app/db/migrate/20140412075608_create_deeply_nested_field_tests.rb b/spec/dummy_app/db/migrate/20140412075608_create_deeply_nested_field_tests.rb index 0832e6b1f5..d850cb76c1 100644 --- a/spec/dummy_app/db/migrate/20140412075608_create_deeply_nested_field_tests.rb +++ b/spec/dummy_app/db/migrate/20140412075608_create_deeply_nested_field_tests.rb @@ -3,7 +3,7 @@ def change create_table :deeply_nested_field_tests do |t| t.belongs_to :nested_field_test t.string :title - t.timestamps + t.timestamps null: false end end end diff --git a/spec/dummy_app/db/migrate/20140826093220_create_paper_trail_tests.rb b/spec/dummy_app/db/migrate/20140826093220_create_paper_trail_tests.rb index 0edf137b1b..4095808bd2 100644 --- a/spec/dummy_app/db/migrate/20140826093220_create_paper_trail_tests.rb +++ b/spec/dummy_app/db/migrate/20140826093220_create_paper_trail_tests.rb @@ -3,7 +3,7 @@ def change create_table :paper_trail_tests do |t| t.string :name - t.timestamps + t.timestamps null: false end end end From b24ca20de38004f2c7e6f38e0683e7353e620332 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 26 Dec 2014 17:52:48 +0900 Subject: [PATCH 47/87] Exclude bin/ from Rubocop target --- .rubocop.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.rubocop.yml b/.rubocop.yml index 73234088a5..d0effcefa8 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,6 +2,7 @@ inherit_from: .rubocop_todo.yml AllCops: Exclude: + - 'spec/dummy_app/bin/**/*' - 'spec/dummy_app/db/schema.rb' - 'spec/dummy_app/tmp/**/*' - 'vendor/bundle/**/*' From 444362e504734156318264aeabb17068f8902fa3 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 26 Dec 2014 17:59:56 +0900 Subject: [PATCH 48/87] Fix mongoid build error --- spec/dummy_app/config/application.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/dummy_app/config/application.rb b/spec/dummy_app/config/application.rb index 24c0a9adc8..01a7efc2cb 100644 --- a/spec/dummy_app/config/application.rb +++ b/spec/dummy_app/config/application.rb @@ -30,6 +30,6 @@ class Application < Rails::Application # config.i18n.default_locale = :de # Do not swallow errors in after_commit/after_rollback callbacks. - config.active_record.raise_in_transactional_callbacks = true if Rails.version >= '4.2' + config.active_record.raise_in_transactional_callbacks = true if Rails.version >= '4.2' && CI_ORM == :active_record end end From 78d71104675436150dd74312a6b273078a25d805 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Mon, 29 Dec 2014 11:52:22 +0900 Subject: [PATCH 49/87] Replace dash to entity reference Pre-2.0 Rubies do not use UTF-8 source encoding by default --- lib/rails_admin/config/fields/types/boolean.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_admin/config/fields/types/boolean.rb b/lib/rails_admin/config/fields/types/boolean.rb index 3a8ebbd6c8..c7d8dee77e 100644 --- a/lib/rails_admin/config/fields/types/boolean.rb +++ b/lib/rails_admin/config/fields/types/boolean.rb @@ -13,7 +13,7 @@ class Boolean < RailsAdmin::Config::Fields::Base register_instance_option :pretty_value do case value when nil - %() + %() when false %() when true From 447b6ba7c57ca6e0784c0a918f72e65d32a8751b Mon Sep 17 00:00:00 2001 From: Chris O'Sullivan Date: Fri, 2 Jan 2015 11:04:22 +0000 Subject: [PATCH 50/87] The datepicker zindex needs to be higher for modals Currently if you click on a datepicker in a modal it is hidden behind the modal overlay. This commit brings it to the front. --- app/assets/stylesheets/rails_admin/ra.calendar-additions.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss b/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss index 7cd71b3f95..d4c2ec68d4 100644 --- a/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss +++ b/app/assets/stylesheets/rails_admin/ra.calendar-additions.scss @@ -6,7 +6,7 @@ .ui-datepicker { /* fix glitches */ border-width:0px; - z-index: 3!important; + z-index: 1051!important; table{ margin:0px; } From ba4ea1546fdf8eac1d034048251517424cc16a62 Mon Sep 17 00:00:00 2001 From: Kevin Zych Date: Tue, 6 Jan 2015 15:34:48 -0500 Subject: [PATCH 51/87] Fix z-index for sidebar-nav z-index bug. --- app/assets/stylesheets/rails_admin/base/theming.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index 71d61cac8f..ea6e875082 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -33,6 +33,7 @@ body.rails_admin { top: 50px; bottom: 0; background: #eaf0f1; + z-index: 100; } /* fat labels in forms */ From cec0421f1198f0a62854dbabd970eb44059f598f Mon Sep 17 00:00:00 2001 From: Mathew Hartley Date: Thu, 8 Jan 2015 09:44:21 +1300 Subject: [PATCH 52/87] Allow the font-awesome 4 shim to fail (on FA3). --- .../base/font-awesome-4-compability.scss | 284 +++++++++--------- 1 file changed, 142 insertions(+), 142 deletions(-) diff --git a/app/assets/stylesheets/rails_admin/base/font-awesome-4-compability.scss b/app/assets/stylesheets/rails_admin/base/font-awesome-4-compability.scss index 9364f336b8..063e1c7ecb 100644 --- a/app/assets/stylesheets/rails_admin/base/font-awesome-4-compability.scss +++ b/app/assets/stylesheets/rails_admin/base/font-awesome-4-compability.scss @@ -1,153 +1,153 @@ [class^="icon-"], [class*=" icon-"] { - @extend .fa + @extend .fa !optional; } -.icon-glass { @extend .fa-glass; } -.icon-music { @extend .fa-music; } -.icon-search { @extend .fa-search; } -.icon-envelope { @extend .fa-envelope; } -.icon-heart { @extend .fa-heart; } -.icon-star { @extend .fa-star; } -.icon-star-empty { @extend .fa-star-o; } -.icon-user { @extend .fa-user; } -.icon-film { @extend .fa-film; } -.icon-th-large { @extend .fa-th-large; } -.icon-th { @extend .fa-th; } -.icon-th-list { @extend .fa-th-list; } -.icon-ok { @extend .fa-check; } -.icon-remove { @extend .fa-times; } -.icon-zoom-in { @extend .fa-search-plus; } -.icon-zoom-out { @extend .fa-search-minus; } -.icon-off { @extend .fa-power-off; } -.icon-signal { @extend .fa-signal; } -.icon-cog { @extend .fa-cog; } -.icon-trash { @extend .fa-trash-o; } +.icon-glass { @extend .fa-glass !optional; } +.icon-music { @extend .fa-music !optional; } +.icon-search { @extend .fa-search !optional; } +.icon-envelope { @extend .fa-envelope !optional; } +.icon-heart { @extend .fa-heart !optional; } +.icon-star { @extend .fa-star !optional; } +.icon-star-empty { @extend .fa-star-o !optional; } +.icon-user { @extend .fa-user !optional; } +.icon-film { @extend .fa-film !optional; } +.icon-th-large { @extend .fa-th-large !optional; } +.icon-th { @extend .fa-th !optional; } +.icon-th-list { @extend .fa-th-list !optional; } +.icon-ok { @extend .fa-check !optional; } +.icon-remove { @extend .fa-times !optional; } +.icon-zoom-in { @extend .fa-search-plus !optional; } +.icon-zoom-out { @extend .fa-search-minus !optional; } +.icon-off { @extend .fa-power-off !optional; } +.icon-signal { @extend .fa-signal !optional; } +.icon-cog { @extend .fa-cog !optional; } +.icon-trash { @extend .fa-trash-o !optional; } -.icon-home { @extend .fa-home; } -.icon-file { @extend .fa-file; } -.icon-time { @extend .fa-clock-o; } -.icon-road { @extend .fa-road; } -.icon-download-alt { @extend .fa-download; } -.icon-download { @extend .fa-download; } -.icon-upload { @extend .fa-upload; } -.icon-inbox { @extend .fa-inbox; } -.icon-play-circle { @extend .fa-play-circle; } -.icon-repeat { @extend .fa-repeat; } -.icon-refresh { @extend .fa-refresh; } -.icon-list-alt { @extend .fa-list-alt; } -.icon-lock { @extend .fa-lock; } -.icon-flag { @extend .fa-flag; } -.icon-headphones { @extend .fa-headphones; } -.icon-volume-off { @extend .fa-volume-off; } -.icon-volume-down { @extend .fa-volume-down; } -.icon-volume-up { @extend .fa-volume-up; } -.icon-qrcode { @extend .fa-qrcode; } -.icon-barcode { @extend .fa-barcode; } +.icon-home { @extend .fa-home !optional; } +.icon-file { @extend .fa-file !optional; } +.icon-time { @extend .fa-clock-o !optional; } +.icon-road { @extend .fa-road !optional; } +.icon-download-alt { @extend .fa-download !optional; } +.icon-download { @extend .fa-download !optional; } +.icon-upload { @extend .fa-upload !optional; } +.icon-inbox { @extend .fa-inbox !optional; } +.icon-play-circle { @extend .fa-play-circle !optional; } +.icon-repeat { @extend .fa-repeat !optional; } +.icon-refresh { @extend .fa-refresh !optional; } +.icon-list-alt { @extend .fa-list-alt !optional; } +.icon-lock { @extend .fa-lock !optional; } +.icon-flag { @extend .fa-flag !optional; } +.icon-headphones { @extend .fa-headphones !optional; } +.icon-volume-off { @extend .fa-volume-off !optional; } +.icon-volume-down { @extend .fa-volume-down !optional; } +.icon-volume-up { @extend .fa-volume-up !optional; } +.icon-qrcode { @extend .fa-qrcode !optional; } +.icon-barcode { @extend .fa-barcode !optional; } -.icon-tag { @extend .fa-tag; } -.icon-tags { @extend .fa-tags; } -.icon-book { @extend .fa-book; } -.icon-bookmark { @extend .fa-bookmark; } -.icon-print { @extend .fa-print; } -.icon-camera { @extend .fa-camera; } -.icon-font { @extend .fa-font; } -.icon-bold { @extend .fa-bold; } -.icon-italic { @extend .fa-italic; } -.icon-text-height { @extend .fa-text-height; } -.icon-text-width { @extend .fa-text-width; } -.icon-align-left { @extend .fa-align-left; } -.icon-align-center { @extend .fa-align-center; } -.icon-align-right { @extend .fa-align-right; } -.icon-align-justify { @extend .fa-align-justify; } -.icon-list { @extend .fa-list; } -.icon-indent-left { @extend .fa-indent; } -.icon-indent-right { @extend .fa-dedent; } -.icon-facetime-video { @extend .fa-video-camera; } -.icon-picture { @extend .fa-picture-o; } +.icon-tag { @extend .fa-tag !optional; } +.icon-tags { @extend .fa-tags !optional; } +.icon-book { @extend .fa-book !optional; } +.icon-bookmark { @extend .fa-bookmark !optional; } +.icon-print { @extend .fa-print !optional; } +.icon-camera { @extend .fa-camera !optional; } +.icon-font { @extend .fa-font !optional; } +.icon-bold { @extend .fa-bold !optional; } +.icon-italic { @extend .fa-italic !optional; } +.icon-text-height { @extend .fa-text-height !optional; } +.icon-text-width { @extend .fa-text-width !optional; } +.icon-align-left { @extend .fa-align-left !optional; } +.icon-align-center { @extend .fa-align-center !optional; } +.icon-align-right { @extend .fa-align-right !optional; } +.icon-align-justify { @extend .fa-align-justify !optional; } +.icon-list { @extend .fa-list !optional; } +.icon-indent-left { @extend .fa-indent !optional; } +.icon-indent-right { @extend .fa-dedent !optional; } +.icon-facetime-video { @extend .fa-video-camera !optional; } +.icon-picture { @extend .fa-picture-o !optional; } -.icon-pencil { @extend .fa-pencil; } -.icon-map-marker { @extend .fa-map-marker; } -.icon-adjust { @extend .fa-adjust; } -.icon-tint { @extend .fa-tint; } -.icon-edit { @extend .fa-edit; } -.icon-share { @extend .fa-share-square-o; } -.icon-check { @extend .fa-check; } -.icon-move { @extend .fa-arrows; } -.icon-step-backward { @extend .fa-step-backward; } -.icon-fast-backward { @extend .fa-fast-backward; } -.icon-backward { @extend .fa-backward; } -.icon-play { @extend .fa-play; } -.icon-pause { @extend .fa-pause; } -.icon-stop { @extend .fa-stop; } -.icon-forward { @extend .fa-forward; } -.icon-fast-forward { @extend .fa-fast-forward; } -.icon-step-forward { @extend .fa-step-forward; } -.icon-eject { @extend .fa-eject; } -.icon-chevron-left { @extend .fa-chevron-left; } -.icon-chevron-right { @extend .fa-chevron-right; } +.icon-pencil { @extend .fa-pencil !optional; } +.icon-map-marker { @extend .fa-map-marker !optional; } +.icon-adjust { @extend .fa-adjust !optional; } +.icon-tint { @extend .fa-tint !optional; } +.icon-edit { @extend .fa-edit !optional; } +.icon-share { @extend .fa-share-square-o !optional; } +.icon-check { @extend .fa-check !optional; } +.icon-move { @extend .fa-arrows !optional; } +.icon-step-backward { @extend .fa-step-backward !optional; } +.icon-fast-backward { @extend .fa-fast-backward !optional; } +.icon-backward { @extend .fa-backward !optional; } +.icon-play { @extend .fa-play !optional; } +.icon-pause { @extend .fa-pause !optional; } +.icon-stop { @extend .fa-stop !optional; } +.icon-forward { @extend .fa-forward !optional; } +.icon-fast-forward { @extend .fa-fast-forward !optional; } +.icon-step-forward { @extend .fa-step-forward !optional; } +.icon-eject { @extend .fa-eject !optional; } +.icon-chevron-left { @extend .fa-chevron-left !optional; } +.icon-chevron-right { @extend .fa-chevron-right !optional; } -.icon-plus-sign { @extend .fa-plus-circle; } -.icon-minus-sign { @extend .fa-minus-circle; } -.icon-remove-sign { @extend .fa-times-circle; } -.icon-ok-sign { @extend .fa-check-circle; } -.icon-question-sign { @extend .fa-question-circle; } -.icon-info-sign { @extend .fa-info-circle; } -.icon-screenshot { @extend .fa-crosshairs; } -.icon-remove-circle { @extend .fa-times-circle-o; } -.icon-ok-circle { @extend .fa-check-circle-o; } -.icon-ban-circle { @extend .fa-ban; } -.icon-arrow-left { @extend .fa-arrow-left; } -.icon-arrow-right { @extend .fa-arrow-right; } -.icon-arrow-up { @extend .fa-arrow-up; } -.icon-arrow-down { @extend .fa-arrow-down; } -.icon-share-alt { @extend .fa-share; } -.icon-resize-full { @extend .fa-expand; } -.icon-resize-small { @extend .fa-compress; } -.icon-plus { @extend .fa-plus; } -.icon-minus { @extend .fa-minus; } -.icon-asterisk { @extend .fa-asterisk; } +.icon-plus-sign { @extend .fa-plus-circle !optional; } +.icon-minus-sign { @extend .fa-minus-circle !optional; } +.icon-remove-sign { @extend .fa-times-circle !optional; } +.icon-ok-sign { @extend .fa-check-circle !optional; } +.icon-question-sign { @extend .fa-question-circle !optional; } +.icon-info-sign { @extend .fa-info-circle !optional; } +.icon-screenshot { @extend .fa-crosshairs !optional; } +.icon-remove-circle { @extend .fa-times-circle-o !optional; } +.icon-ok-circle { @extend .fa-check-circle-o !optional; } +.icon-ban-circle { @extend .fa-ban !optional; } +.icon-arrow-left { @extend .fa-arrow-left !optional; } +.icon-arrow-right { @extend .fa-arrow-right !optional; } +.icon-arrow-up { @extend .fa-arrow-up !optional; } +.icon-arrow-down { @extend .fa-arrow-down !optional; } +.icon-share-alt { @extend .fa-share !optional; } +.icon-resize-full { @extend .fa-expand !optional; } +.icon-resize-small { @extend .fa-compress !optional; } +.icon-plus { @extend .fa-plus !optional; } +.icon-minus { @extend .fa-minus !optional; } +.icon-asterisk { @extend .fa-asterisk !optional; } -.icon-exclamation-sign { @extend .fa-exclamation-circle; } -.icon-gift { @extend .fa-gift; } -.icon-leaf { @extend .fa-leaf; } -.icon-fire { @extend .fa-fire; } -.icon-eye-open { @extend .fa-eye; } -.icon-eye-close { @extend .fa-eye-slash; } -.icon-warning-sign { @extend .fa-warning; } -.icon-plane { @extend .fa-plane; } -.icon-calendar { @extend .fa-calendar; } -.icon-random { @extend .fa-random; } -.icon-comment { @extend .fa-comment; } -.icon-magnet { @extend .fa-magnet; } -.icon-chevron-up { @extend .fa-chevron-up; } -.icon-chevron-down { @extend .fa-chevron-down; } -.icon-retweet { @extend .fa-retweet; } -.icon-shopping-cart { @extend .fa-shopping-cart; } -.icon-folder-close { @extend .fa-folder; } -.icon-folder-open { @extend .fa-folder-open; } -.icon-resize-vertical { @extend .fa-arrows-v; } -.icon-resize-horizontal { @extend .fa-arrows-h; } +.icon-exclamation-sign { @extend .fa-exclamation-circle !optional; } +.icon-gift { @extend .fa-gift !optional; } +.icon-leaf { @extend .fa-leaf !optional; } +.icon-fire { @extend .fa-fire !optional; } +.icon-eye-open { @extend .fa-eye !optional; } +.icon-eye-close { @extend .fa-eye-slash !optional; } +.icon-warning-sign { @extend .fa-warning !optional; } +.icon-plane { @extend .fa-plane !optional; } +.icon-calendar { @extend .fa-calendar !optional; } +.icon-random { @extend .fa-random !optional; } +.icon-comment { @extend .fa-comment !optional; } +.icon-magnet { @extend .fa-magnet !optional; } +.icon-chevron-up { @extend .fa-chevron-up !optional; } +.icon-chevron-down { @extend .fa-chevron-down !optional; } +.icon-retweet { @extend .fa-retweet !optional; } +.icon-shopping-cart { @extend .fa-shopping-cart !optional; } +.icon-folder-close { @extend .fa-folder !optional; } +.icon-folder-open { @extend .fa-folder-open !optional; } +.icon-resize-vertical { @extend .fa-arrows-v !optional; } +.icon-resize-horizontal { @extend .fa-arrows-h !optional; } -.icon-hdd { @extend .fa-hdd-o; } -.icon-bullhorn { @extend .fa-bullhorn; } -.icon-bell { @extend .fa-bell; } -.icon-certificate { @extend .fa-certificate; } -.icon-thumbs-up { @extend .fa-thumbs-up; } -.icon-thumbs-down { @extend .fa-thumbs-down; } -.icon-hand-right { @extend .fa-hand-o-right; } -.icon-hand-left { @extend .fa-hand-o-left; } -.icon-hand-up { @extend .fa-hand-o-up; } -.icon-hand-down { @extend .fa-hand-o-down; } -.icon-circle-arrow-right { @extend .fa-arrow-circle-right; } -.icon-circle-arrow-left { @extend .fa-arrow-circle-left; } -.icon-circle-arrow-up { @extend .fa-arrow-circle-up; } -.icon-circle-arrow-down { @extend .fa-arrow-circle-down; } -.icon-globe { @extend .fa-globe; } -.icon-wrench { @extend .fa-wrench; } -.icon-tasks { @extend .fa-tasks; } -.icon-filter { @extend .fa-filter; } -.icon-briefcase { @extend .fa-briefcase; } -.icon-fullscreen { @extend .fa-arrows-alt; } +.icon-hdd { @extend .fa-hdd-o !optional; } +.icon-bullhorn { @extend .fa-bullhorn !optional; } +.icon-bell { @extend .fa-bell !optional; } +.icon-certificate { @extend .fa-certificate !optional; } +.icon-thumbs-up { @extend .fa-thumbs-up !optional; } +.icon-thumbs-down { @extend .fa-thumbs-down !optional; } +.icon-hand-right { @extend .fa-hand-o-right !optional; } +.icon-hand-left { @extend .fa-hand-o-left !optional; } +.icon-hand-up { @extend .fa-hand-o-up !optional; } +.icon-hand-down { @extend .fa-hand-o-down !optional; } +.icon-circle-arrow-right { @extend .fa-arrow-circle-right !optional; } +.icon-circle-arrow-left { @extend .fa-arrow-circle-left !optional; } +.icon-circle-arrow-up { @extend .fa-arrow-circle-up !optional; } +.icon-circle-arrow-down { @extend .fa-arrow-circle-down !optional; } +.icon-globe { @extend .fa-globe !optional; } +.icon-wrench { @extend .fa-wrench !optional; } +.icon-tasks { @extend .fa-tasks !optional; } +.icon-filter { @extend .fa-filter !optional; } +.icon-briefcase { @extend .fa-briefcase !optional; } +.icon-fullscreen { @extend .fa-arrows-alt !optional; } -.icon-white { color:white; } \ No newline at end of file +.icon-white { color:white; } From 0b7eb9261935035b4e5d653cd860344aab9b4651 Mon Sep 17 00:00:00 2001 From: Bret Davidson Date: Thu, 8 Jan 2015 16:52:02 -0500 Subject: [PATCH 53/87] Change label-important class to label-danger for Bootstrap 3 --- .../layouts/rails_admin/_secondary_navigation.html.haml | 2 +- spec/integration/rails_admin_spec.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/views/layouts/rails_admin/_secondary_navigation.html.haml b/app/views/layouts/rails_admin/_secondary_navigation.html.haml index 6f70299076..d33817b0ce 100644 --- a/app/views/layouts/rails_admin/_secondary_navigation.html.haml +++ b/app/views/layouts/rails_admin/_secondary_navigation.html.haml @@ -7,6 +7,6 @@ - if user_link = edit_user_link %li= user_link - if logout_path.present? - %li= link_to content_tag('span', t('admin.misc.log_out'), class: 'label label-important'), logout_path, method: logout_method + %li= link_to content_tag('span', t('admin.misc.log_out'), class: 'label label-danger'), logout_path, method: logout_method - if _current_user.respond_to?(:email) && _current_user.email.present? %li= image_tag "#{(request.ssl? ? 'https://secure' : 'http://www')}.gravatar.com/avatar/#{Digest::MD5.hexdigest _current_user.email}?s=30", style: 'padding-top:5px' diff --git a/spec/integration/rails_admin_spec.rb b/spec/integration/rails_admin_spec.rb index 5d8ebd0f96..dcc8f522fb 100644 --- a/spec/integration/rails_admin_spec.rb +++ b/spec/integration/rails_admin_spec.rb @@ -142,5 +142,10 @@ visit dashboard_path is_expected.to have_content 'Log out' end + + it 'has label-danger class on log out link' do + visit dashboard_path + is_expected.to have_selector('.label-danger') + end end end From 50a54029c919a16a2175c6fb5d84767f49ada834 Mon Sep 17 00:00:00 2001 From: Chris O'Sullivan Date: Tue, 30 Dec 2014 11:12:23 +0000 Subject: [PATCH 54/87] Bootstrap 3 uses list-inline for inline lists This affects the action icon lists on the dashboard and index pages. --- app/assets/stylesheets/rails_admin/base/theming.scss | 2 +- app/views/rails_admin/main/dashboard.html.haml | 2 +- app/views/rails_admin/main/index.html.haml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index 71d61cac8f..fa789e801e 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -269,7 +269,7 @@ body.rails_admin { /* icons */ td.links { max-width: none; - .inline { + .list-inline { margin:0px; li { display:inline-block; } } diff --git a/app/views/rails_admin/main/dashboard.html.haml b/app/views/rails_admin/main/dashboard.html.haml index 46f88f41f7..844c1f1e70 100644 --- a/app/views/rails_admin/main/dashboard.html.haml +++ b/app/views/rails_admin/main/dashboard.html.haml @@ -27,7 +27,7 @@ .progress-bar.animate-width-to{:class => "progress-bar-#{get_indicator(percent)}", :'data-animate-length' => ([1.0, percent].max.to_i * 20), :'data-animate-width-to' => "#{[2.0, percent].max.to_i}%", style: "width:2%"} = @count[abstract_model.pretty_name] %td.links - %ul.inline= menu_for :collection, abstract_model, nil, true + %ul.inline.list-inline= menu_for :collection, abstract_model, nil, true - if @auditing_adapter && authorized?(:history) #block-tables.block .content diff --git a/app/views/rails_admin/main/index.html.haml b/app/views/rails_admin/main/index.html.haml index 76bc908ac7..ab7c2bda4b 100644 --- a/app/views/rails_admin/main/index.html.haml +++ b/app/views/rails_admin/main/index.html.haml @@ -145,7 +145,7 @@ - if @other_right_link ||= other_right && index_path(params.merge(set: (params[:set].to_i + 1))) %td.other.right= link_to "...", @other_right_link, class: 'pjax' %td.last.links - %ul.inline= menu_for :member, @abstract_model, object, true + %ul.inline.list-inline= menu_for :member, @abstract_model, object, true - if @objects.respond_to?(:total_count) - total_count = @objects.total_count.to_i .row From 3404dff3d7f4d7f202e6293e70cdf48ffc8abf31 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Tue, 13 Jan 2015 17:07:57 +0900 Subject: [PATCH 55/87] Fix build --- Gemfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 5edd3d0002..25d6e5828e 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ when '4.2' gem 'sass-rails', '~> 5.0.0.beta1' gem 'devise', github: 'plataformatec/devise', branch: 'lm-rails-4-2' when '4.0' - gem 'rails', '~> 4.0.0' + gem 'rails', '~> 4.0.1' gem 'devise', '>= 3.2' else gem 'rails', '~> 4.1.0' @@ -57,7 +57,7 @@ group :test do gem 'capybara', '>= 2.1' gem 'carrierwave', '>= 0.8' gem 'coveralls' - gem 'database_cleaner', '>= 1.2' + gem 'database_cleaner', ['>= 1.2', '!= 1.4.0'] gem 'dragonfly', '~> 1.0' gem 'factory_girl', '>= 4.2' gem 'generator_spec', '>= 0.8' From bb9d52ae3aef9c6f434c692e593efedbbcb9ce2c Mon Sep 17 00:00:00 2001 From: Rikki Pitt Date: Wed, 14 Jan 2015 16:54:46 +0000 Subject: [PATCH 56/87] Fixed history filter input for new Boostrap markup --- app/views/rails_admin/main/history.html.haml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/views/rails_admin/main/history.html.haml b/app/views/rails_admin/main/history.html.haml index 8ebeb2b9e8..dafc5407c6 100644 --- a/app/views/rails_admin/main/history.html.haml +++ b/app/views/rails_admin/main/history.html.haml @@ -7,10 +7,12 @@ = form_tag("", method: "get", class: "search pjax-form form-inline") do .well - %input{name: "query", type: "search", value: query, placeholder: "#{t("admin.misc.filter")}", class: 'input-small'} - %button.btn.btn-primary{type: "submit", :'data-disable-with' => " ".html_safe + t("admin.misc.refresh")} - %i.icon-white.icon-refresh - = t("admin.misc.refresh") + .input-group + %input.form-control.input-small{name: "query", type: "search", value: query, placeholder: "#{t("admin.misc.filter")}", class: 'input-small'} + %span.input-group-btn + %button.btn.btn-primary{type: "submit", :'data-disable-with' => " ".html_safe + t("admin.misc.refresh")} + %i.icon-white.icon-refresh + = t("admin.misc.refresh") %table#history.table.table-striped.table-condensed %thead %tr From f6d660fae06e97852e61422520e18fb9064f51bd Mon Sep 17 00:00:00 2001 From: Rikki Pitt Date: Wed, 14 Jan 2015 17:00:07 +0000 Subject: [PATCH 57/87] Update for the deprecated form-actions class to fix submit buttons partial --- .../main/_submit_buttons.html.haml | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/app/views/rails_admin/main/_submit_buttons.html.haml b/app/views/rails_admin/main/_submit_buttons.html.haml index c9ed3eff09..4de4eb6ee0 100644 --- a/app/views/rails_admin/main/_submit_buttons.html.haml +++ b/app/views/rails_admin/main/_submit_buttons.html.haml @@ -1,16 +1,18 @@ %input{type: :hidden, name: 'return_to', value: (params[:return_to].presence || request.referer)} %br -.form-actions - %button.btn.btn-primary{type: "submit", name: "_save", :'data-disable-with' => t("admin.form.save")} - %i.icon-white.icon-ok - = t("admin.form.save") - %span.extra_buttons - - if authorized? :new, @abstract_model - %button.btn.btn-info{type: "submit", name: "_add_another", :'data-disable-with' => t("admin.form.save_and_add_another")} - = t("admin.form.save_and_add_another") - - if authorized? :edit, @abstract_model - %button.btn.btn-info{type: "submit", name: "_add_edit", :'data-disable-with' => t("admin.form.save_and_edit")} - = t("admin.form.save_and_edit") - %button.btn{type: "submit", name: "_continue", :'data-disable-with' => t("admin.form.cancel")} - %i.icon-remove - = t("admin.form.cancel") + +.form-group + .col-sm-offset-2.col-sm-10 + %button.btn.btn-primary{type: "submit", name: "_save", :'data-disable-with' => t("admin.form.save")} + %i.icon-white.icon-ok + = t("admin.form.save") + %span.extra_buttons + - if authorized? :new, @abstract_model + %button.btn.btn-info{type: "submit", name: "_add_another", :'data-disable-with' => t("admin.form.save_and_add_another")} + = t("admin.form.save_and_add_another") + - if authorized? :edit, @abstract_model + %button.btn.btn-info{type: "submit", name: "_add_edit", :'data-disable-with' => t("admin.form.save_and_edit")} + = t("admin.form.save_and_edit") + %button.btn{type: "submit", name: "_continue", :'data-disable-with' => t("admin.form.cancel")} + %i.icon-remove + = t("admin.form.cancel") From 22c77fac5f7dd1900e556a8edbd359133276a56a Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Thu, 15 Jan 2015 11:24:30 +0900 Subject: [PATCH 58/87] Re-enable navigation Treeview styling Refs #2059, Fixes #2162 --- app/assets/stylesheets/rails_admin/base/theming.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index 71d61cac8f..daed26f0d8 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -181,7 +181,7 @@ body.rails_admin { // } /* nested nav */ - .nav.nav-list { + .nav { .nav-level-1 { padding-left:30px; } From 8c7b33b958f82facf92543786da505181e276972 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 16 Jan 2015 11:10:15 +0900 Subject: [PATCH 59/87] Support Postgres jsonb fieldtype. Closes #2165 --- lib/rails_admin/config/fields/types/json.rb | 1 + .../config/fields/types/json_spec.rb | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/rails_admin/config/fields/types/json.rb b/lib/rails_admin/config/fields/types/json.rb index 2415536c52..158adca53b 100644 --- a/lib/rails_admin/config/fields/types/json.rb +++ b/lib/rails_admin/config/fields/types/json.rb @@ -7,6 +7,7 @@ module Types class Json < RailsAdmin::Config::Fields::Types::Text # Register field type for the type loader RailsAdmin::Config::Fields::Types.register(self) + RailsAdmin::Config::Fields::Types.register(:jsonb, self) register_instance_option :formatted_value do value.present? ? JSON.pretty_generate(value) : nil diff --git a/spec/rails_admin/config/fields/types/json_spec.rb b/spec/rails_admin/config/fields/types/json_spec.rb index bb8eadf534..5479dfccda 100644 --- a/spec/rails_admin/config/fields/types/json_spec.rb +++ b/spec/rails_admin/config/fields/types/json_spec.rb @@ -1,8 +1,9 @@ require 'spec_helper' describe RailsAdmin::Config::Fields::Types::Json do + let(:field) { RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :json_field } } + describe '#parse_input' do - let(:field) { RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :json_field } } before :each do RailsAdmin.config do |config| config.model FieldTest do @@ -20,4 +21,20 @@ expect { field.parse_input(json_field: '{{') }.to raise_error(JSON::ParserError) end end + + describe 'aliasing' do + let(:field) { RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :json_field } } + + before :each do + RailsAdmin.config do |config| + config.model FieldTest do + field :json_field, :jsonb + end + end + end + + it 'allows use of :jsonb fieldtype' do + expect(field.class).to eq RailsAdmin::Config::Fields::Types::Json + end + end end From 414fcd5fefb685c8e52b5e962c276ce8d5cf1c40 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 16 Jan 2015 11:20:22 +0900 Subject: [PATCH 60/87] Workaround for bundler dependency resolution failure https://travis-ci.org/sferik/rails_admin/jobs/47168487 --- Gemfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 25d6e5828e..89ee808829 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,7 @@ when '4.2' gem 'sass-rails', '~> 5.0.0.beta1' gem 'devise', github: 'plataformatec/devise', branch: 'lm-rails-4-2' when '4.0' - gem 'rails', '~> 4.0.1' + gem 'rails', '< 4.1' gem 'devise', '>= 3.2' else gem 'rails', '~> 4.1.0' From c5c53ba7d31ca99b205ddc4645af5ea3ae2c04b6 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 16 Jan 2015 11:24:02 +0900 Subject: [PATCH 61/87] Remove redundant let --- spec/rails_admin/config/fields/types/json_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/rails_admin/config/fields/types/json_spec.rb b/spec/rails_admin/config/fields/types/json_spec.rb index 5479dfccda..68fd6e9ded 100644 --- a/spec/rails_admin/config/fields/types/json_spec.rb +++ b/spec/rails_admin/config/fields/types/json_spec.rb @@ -23,8 +23,6 @@ end describe 'aliasing' do - let(:field) { RailsAdmin.config(FieldTest).fields.detect { |f| f.name == :json_field } } - before :each do RailsAdmin.config do |config| config.model FieldTest do From 11d90896c2716679b61f66f343e5a2445dc4f7af Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 16 Jan 2015 12:25:24 +0900 Subject: [PATCH 62/87] Test with Ruby 2.2 --- .travis.yml | 13 +++++++------ Gemfile | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 95e65e5607..ef63b6b424 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ rvm: - 1.9.3 - 2.0.0 - 2.1 + - 2.2 - rbx-2 - ruby-head @@ -32,17 +33,17 @@ sudo: false matrix: include: - - rvm: 2.1 + - rvm: 2.2 env: RAILS_VERSION=4.2 CI_ORM=active_record CI_DB_ADAPTER=sqlite3 - - rvm: 2.1 + - rvm: 2.2 env: RAILS_VERSION=4.2 CI_ORM=mongoid - - rvm: 2.1 + - rvm: 2.2 env: CI_ORM=active_record CI_DB_ADAPTER=mysql2 - - rvm: 2.1 + - rvm: 2.2 env: CI_ORM=active_record CI_DB_ADAPTER=postgresql CI_DB_USERNAME=postgres - - rvm: 2.1 + - rvm: 2.2 env: RAILS_VERSION=4.0 CI_ORM=active_record CI_DB_ADAPTER=sqlite3 - - rvm: 2.1 + - rvm: 2.2 env: RAILS_VERSION=4.0 CI_ORM=mongoid - rvm: jruby-19mode env: CI_ORM=mongoid diff --git a/Gemfile b/Gemfile index 89ee808829..a7b5156612 100644 --- a/Gemfile +++ b/Gemfile @@ -8,6 +8,7 @@ when '4.2' when '4.0' gem 'rails', '< 4.1' gem 'devise', '>= 3.2' + gem 'test-unit' else gem 'rails', '~> 4.1.0' gem 'devise', '>= 3.2' From c0d9d932ef15895de427ec236a51febc4a2f0d1f Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 16 Jan 2015 17:15:28 +0900 Subject: [PATCH 63/87] Safeguard for occasional spec failure https://travis-ci.org/sferik/rails_admin/jobs/47203699 --- spec/integration/config/edit/rails_admin_config_edit_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/integration/config/edit/rails_admin_config_edit_spec.rb b/spec/integration/config/edit/rails_admin_config_edit_spec.rb index 42885d7f92..88fe18f6d8 100644 --- a/spec/integration/config/edit/rails_admin_config_edit_spec.rb +++ b/spec/integration/config/edit/rails_admin_config_edit_spec.rb @@ -674,10 +674,10 @@ class HelpTest < Tableless fill_in 'field_test_nested_field_tests_attributes_0_title', with: 'nested field test title 1 edited', visible: false find('#field_test_nested_field_tests_attributes_1__destroy', visible: false).set('true') - click_button 'Save' # first(:button, "Save").click + click_button 'Save' + is_expected.to have_content('Field test successfully updated') @record.reload - expect(@record.comment.content.strip).to eq('nested comment content') expect(@record.nested_field_tests.length).to eq(1) expect(@record.nested_field_tests[0].title).to eq('nested field test title 1 edited') From 1240bfa68fb924a79b0afcb4f4dc03b2df3cb672 Mon Sep 17 00:00:00 2001 From: krishan1390 Date: Tue, 20 Jan 2015 12:09:24 +0530 Subject: [PATCH 64/87] Set required attribute in the html element Set required attribute in the html element based on the required flag on the field --- app/views/rails_admin/main/_form_field.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/_form_field.html.haml b/app/views/rails_admin/main/_form_field.html.haml index 3118b5e42f..df9714826a 100644 --- a/app/views/rails_admin/main/_form_field.html.haml +++ b/app/views/rails_admin/main/_form_field.html.haml @@ -1 +1 @@ -= form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, checked: field.form_value.in?([true, '1']), class: 'form-control'}) += form.send field.view_helper, field.method_name, field.html_attributes.reverse_merge({ value: field.form_value, checked: field.form_value.in?([true, '1']), class: 'form-control', required: field.required}) From e3ef9ea680088c26ec650638ba2e12330a91ed84 Mon Sep 17 00:00:00 2001 From: krishan1390 Date: Tue, 20 Jan 2015 12:12:08 +0530 Subject: [PATCH 65/87] Set required attribute in the html text element Set required attribute in the html text element based on the required flag on the field --- app/views/rails_admin/main/_form_text.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/_form_text.html.haml b/app/views/rails_admin/main/_form_text.html.haml index 87ad034532..fafc9b9b50 100644 --- a/app/views/rails_admin/main/_form_text.html.haml +++ b/app/views/rails_admin/main/_form_text.html.haml @@ -1 +1 @@ -= form.text_area field.method_name, field.html_attributes.reverse_merge(data: { richtext: false, options: {}.to_json }).reverse_merge({ value: field.form_value, class: 'form-control' }) += form.text_area field.method_name, field.html_attributes.reverse_merge(data: { richtext: false, options: {}.to_json }).reverse_merge({ value: field.form_value, class: 'form-control', required: field.required }) From dbfcee3e82ecc16f8fd6287dc705e38ad3f5ab87 Mon Sep 17 00:00:00 2001 From: danmatlin Date: Wed, 21 Jan 2015 19:46:28 +0530 Subject: [PATCH 66/87] Rspecs for checking required attribute for required fields --- .../basic/edit/rails_admin_basic_edit_spec.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb index 0ba0b01266..91eeb06c95 100644 --- a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +++ b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb @@ -23,6 +23,15 @@ expect(find('#player_born_on_field .help-block')).to have_content('Optional') expect(find('#player_notes_field .help-block')).to have_content('Optional') end + + it "checks required fields to have required attribute set" do + expect(find_field("player_name")[:required].nil?).to eq(false) + expect(find_field("player_number")[:required].nil?).to eq(false) + end + + it "checks optional fields to not have required attribute set" do + expect(find_field("player_position")[:required].nil?).to eq(true) + end end describe 'association with inverse_of option' do From e3a143e5055d4f5f06b4a3a298612da50dae5b0b Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Thu, 22 Jan 2015 11:31:39 +0900 Subject: [PATCH 67/87] Fix quoting --- .../basic/edit/rails_admin_basic_edit_spec.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb index 91eeb06c95..fe842ef186 100644 --- a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +++ b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb @@ -23,14 +23,14 @@ expect(find('#player_born_on_field .help-block')).to have_content('Optional') expect(find('#player_notes_field .help-block')).to have_content('Optional') end - - it "checks required fields to have required attribute set" do - expect(find_field("player_name")[:required].nil?).to eq(false) - expect(find_field("player_number")[:required].nil?).to eq(false) + + it 'checks required fields to have required attribute set' do + expect(find_field('player_name')[:required].nil?).to eq(false) + expect(find_field('player_number')[:required].nil?).to eq(false) end - it "checks optional fields to not have required attribute set" do - expect(find_field("player_position")[:required].nil?).to eq(true) + it 'checks optional fields to not have required attribute set' do + expect(find_field('player_position')[:required].nil?).to eq(true) end end From 10655cbfe972a2972b6580175f8be7fe2e20572c Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 6 Feb 2015 17:45:01 +0900 Subject: [PATCH 68/87] Disallow access and hide modal links for excluded actions. Fixes #2023, Closes #2182 --- .../rails_admin/application_controller.rb | 13 ++--- .../rails_admin/main_controller.rb | 5 +- app/helpers/rails_admin/application_helper.rb | 7 ++- lib/rails_admin/config.rb | 2 +- lib/rails_admin/config/actions/base.rb | 19 ++++--- lib/rails_admin/engine.rb | 3 ++ .../rails_admin/application_helper_spec.rb | 2 +- spec/integration/config/actions_spec.rb | 50 +++++++++++++++++++ spec/rails_admin/config_spec.rb | 4 +- 9 files changed, 78 insertions(+), 27 deletions(-) create mode 100644 spec/integration/config/actions_spec.rb diff --git a/app/controllers/rails_admin/application_controller.rb b/app/controllers/rails_admin/application_controller.rb index 8aed437db3..2022f466ac 100644 --- a/app/controllers/rails_admin/application_controller.rb +++ b/app/controllers/rails_admin/application_controller.rb @@ -7,6 +7,9 @@ class ModelNotFound < ::StandardError class ObjectNotFound < ::StandardError end + class ActionNotAllowed < ::StandardError + end + class ApplicationController < ::ApplicationController newrelic_ignore if defined?(NewRelic) @@ -16,7 +19,7 @@ class ApplicationController < ::ApplicationController helper_method :_current_user, :_get_plugin_name - attr_reader :object, :model_config, :abstract_model + attr_reader :object, :model_config, :abstract_model, :authorization_adapter def get_model @model_name = to_model_name(params[:model_name]) @@ -68,13 +71,5 @@ def _audit! params[:action] = 'dashboard' dashboard end - - def not_found - render file: Rails.root.join('public', '404.html'), layout: false, status: :not_found - end - - def rails_admin_controller? - true - end end end diff --git a/app/controllers/rails_admin/main_controller.rb b/app/controllers/rails_admin/main_controller.rb index 2fc33d848e..16c056429d 100644 --- a/app/controllers/rails_admin/main_controller.rb +++ b/app/controllers/rails_admin/main_controller.rb @@ -11,16 +11,17 @@ class MainController < RailsAdmin::ApplicationController before_filter :check_for_cancel RailsAdmin::Config::Actions.all.each do |action| - class_eval %{ + class_eval <<-EOS, __FILE__, __LINE__ + 1 def #{action.action_name} action = RailsAdmin::Config::Actions.find('#{action.action_name}'.to_sym) @authorization_adapter.try(:authorize, action.authorization_key, @abstract_model, @object) @action = action.with({controller: self, abstract_model: @abstract_model, object: @object}) + fail(ActionNotAllowed) unless @action.enabled? @page_name = wording_for(:title) instance_eval &@action.controller end - } + EOS end def bulk_action diff --git a/app/helpers/rails_admin/application_helper.rb b/app/helpers/rails_admin/application_helper.rb index b664f5ff57..3f12a8e6c6 100644 --- a/app/helpers/rails_admin/application_helper.rb +++ b/app/helpers/rails_admin/application_helper.rb @@ -12,9 +12,9 @@ def capitalize_first_letter(wording) wording end - def authorized?(action, abstract_model = nil, object = nil) + def authorized?(action_name, abstract_model = nil, object = nil) object = nil if object.try :new_record? - @authorization_adapter.nil? || @authorization_adapter.authorized?(action, abstract_model, object) + action(action_name, abstract_model, object).try(:authorized?) end def current_action?(action, abstract_model = @abstract_model, object = @object) @@ -32,9 +32,8 @@ def actions(scope = :all, abstract_model = nil, object = nil) end def edit_user_link - return nil unless authorized?(:edit, _current_user.class, _current_user) && _current_user.respond_to?(:email) return nil unless abstract_model = RailsAdmin.config(_current_user.class).abstract_model - return nil unless edit_action = RailsAdmin::Config::Actions.find(:edit, controller: controller, abstract_model: abstract_model, object: _current_user) + return nil unless (edit_action = RailsAdmin::Config::Actions.find(:edit, controller: controller, abstract_model: abstract_model, object: _current_user)).try(:authorized?) link_to _current_user.email, url_for(action: edit_action.action_name, model_name: abstract_model.to_param, id: _current_user.id, controller: 'rails_admin/main') end diff --git a/lib/rails_admin/config.rb b/lib/rails_admin/config.rb index 68ec7c05e7..8cae8dfd70 100644 --- a/lib/rails_admin/config.rb +++ b/lib/rails_admin/config.rb @@ -320,7 +320,7 @@ def viable_models def visible_models_with_bindings(bindings) models.collect { |m| m.with(bindings) }.select do |m| m.visible? && - bindings[:controller].authorized?(:index, m.abstract_model) && + RailsAdmin::Config::Actions.find(:index, bindings.merge(abstract_model: m.abstract_model)).try(:authorized?) && (!m.abstract_model.embedded? || m.abstract_model.cyclic?) end end diff --git a/lib/rails_admin/config/actions/base.rb b/lib/rails_admin/config/actions/base.rb index db136d1727..d760425f8f 100644 --- a/lib/rails_admin/config/actions/base.rb +++ b/lib/rails_admin/config/actions/base.rb @@ -28,15 +28,18 @@ class Base authorized? end + register_instance_option :enabled? do + bindings[:abstract_model].nil? || ( + (only.nil? || [only].flatten.collect(&:to_s).include?(bindings[:abstract_model].to_s)) && + ![except].flatten.collect(&:to_s).include?(bindings[:abstract_model].to_s) && + bindings[:abstract_model].config.with(bindings).visible? + ) + end + register_instance_option :authorized? do - ( - bindings[:controller].nil? || bindings[:controller].authorized?(authorization_key, bindings[:abstract_model], bindings[:object]) - ) && ( - bindings[:abstract_model].nil? || ( - (only.nil? || [only].flatten.collect(&:to_s).include?(bindings[:abstract_model].to_s)) && - ![except].flatten.collect(&:to_s).include?(bindings[:abstract_model].to_s) && - bindings[:abstract_model].config.with(bindings).visible? - )) + enabled? && ( + bindings[:controller].try(:authorization_adapter).nil? || bindings[:controller].authorization_adapter.authorized?(authorization_key, bindings[:abstract_model], bindings[:object]) + ) end # Is the action acting on the root level (Example: /admin/contact) diff --git a/lib/rails_admin/engine.rb b/lib/rails_admin/engine.rb index 38654ce685..28f9803320 100644 --- a/lib/rails_admin/engine.rb +++ b/lib/rails_admin/engine.rb @@ -15,6 +15,9 @@ module RailsAdmin class Engine < Rails::Engine isolate_namespace RailsAdmin + + config.action_dispatch.rescue_responses.merge!('RailsAdmin::ActionNotAllowed' => :forbidden) + initializer 'RailsAdmin precompile hook', group: :all do |app| app.config.assets.precompile += %w( rails_admin/rails_admin.js diff --git a/spec/helpers/rails_admin/application_helper_spec.rb b/spec/helpers/rails_admin/application_helper_spec.rb index 1f0827d703..7cd1cc977c 100644 --- a/spec/helpers/rails_admin/application_helper_spec.rb +++ b/spec/helpers/rails_admin/application_helper_spec.rb @@ -14,7 +14,7 @@ def initialize(_user) describe '#authorized?' do before do allow(RailsAdmin.config).to receive(:_current_user).and_return(FactoryGirl.create(:user)) - helper.instance_variable_set('@authorization_adapter', RailsAdmin::AUTHORIZATION_ADAPTERS[:cancan].new(RailsAdmin.config, TestAbility)) + helper.controller.stub(:authorization_adapter).and_return(RailsAdmin::AUTHORIZATION_ADAPTERS[:cancan].new(RailsAdmin.config, TestAbility)) end it 'doesn\'t test unpersisted objects' do diff --git a/spec/integration/config/actions_spec.rb b/spec/integration/config/actions_spec.rb new file mode 100644 index 0000000000..4635c1895f --- /dev/null +++ b/spec/integration/config/actions_spec.rb @@ -0,0 +1,50 @@ +# coding: utf-8 + +require 'spec_helper' + +describe 'RailsAdmin Config Action DSL', type: :request do + subject { page } + + describe '#enabled?' do + it 'prevents the access to unauthorized actions' do + RailsAdmin.config do |config| + config.actions do + index do + except %w(FieldTest) + end + end + end + expect { visit index_path(model_name: 'field_test') }.to raise_error 'RailsAdmin::ActionNotAllowed' + end + + describe 'in form action' do + before do + RailsAdmin.config do |config| + config.actions do + index + new + edit do + except %w(Player Team) + end + end + end + end + + describe 'for filterling-select widget' do + it 'hides modal links to disabled actions' do + visit new_path(model_name: 'player') + expect(page).to have_link 'Add a new Team' + expect(page).not_to have_link 'Edit this Team' + end + end + + describe 'for filterling-multiselect widget' do + it 'hides edit link to another model' do + visit new_path(model_name: 'team') + expect(page).to have_link 'Add a new Player' + expect(page).not_to have_link 'Edit this Player' + end + end + end + end +end diff --git a/spec/rails_admin/config_spec.rb b/spec/rails_admin/config_spec.rb index d261fdb492..e04f39148d 100644 --- a/spec/rails_admin/config_spec.rb +++ b/spec/rails_admin/config_spec.rb @@ -238,8 +238,8 @@ class Version; end RailsAdmin.config do |config| config.included_models = [Comment] end - expect(RailsAdmin.config.visible_models(controller: double(authorized?: true)).collect(&:abstract_model).collect(&:model)).to eq([Comment]) - expect(RailsAdmin.config.visible_models(controller: double(authorized?: false)).collect(&:abstract_model).collect(&:model)).to eq([]) + expect(RailsAdmin.config.visible_models(controller: double(authorization_adapter: double(authorized?: true))).collect(&:abstract_model).collect(&:model)).to eq([Comment]) + expect(RailsAdmin.config.visible_models(controller: double(authorization_adapter: double(authorized?: false))).collect(&:abstract_model).collect(&:model)).to eq([]) end it 'does not contain embedded model', mongoid: true do From 2f4fc32a879ffba19f0bb9e1cbb8b0a078e20c46 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 6 Feb 2015 17:50:27 +0900 Subject: [PATCH 69/87] Fix rubocop offenses --- lib/rails_admin/config/fields/group.rb | 2 +- lib/rails_admin/config/fields/types/enum.rb | 2 +- lib/rails_admin/extensions/history/history.rb | 10 ++++------ .../adapters/active_record/association_spec.rb | 2 +- spec/rails_admin/config/fields/base_spec.rb | 2 +- 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/rails_admin/config/fields/group.rb b/lib/rails_admin/config/fields/group.rb index 87c42424e7..9f2be05570 100644 --- a/lib/rails_admin/config/fields/group.rb +++ b/lib/rails_admin/config/fields/group.rb @@ -63,7 +63,7 @@ def visible_fields # Configurable group label which by default is group's name humanized. register_instance_option :label do - (@label ||= {})[::I18n.locale] ||= (parent.fields.detect { |f|f.name == name }.try(:label) || name.to_s.humanize) + (@label ||= {})[::I18n.locale] ||= (parent.fields.detect { |f| f.name == name }.try(:label) || name.to_s.humanize) end # Configurable help text diff --git a/lib/rails_admin/config/fields/types/enum.rb b/lib/rails_admin/config/fields/types/enum.rb index 982285e8bc..b60cf99128 100644 --- a/lib/rails_admin/config/fields/types/enum.rb +++ b/lib/rails_admin/config/fields/types/enum.rb @@ -23,7 +23,7 @@ class Enum < RailsAdmin::Config::Fields::Base if enum.is_a?(::Hash) enum.reject { |_k, v| v.to_s != value.to_s }.keys.first.to_s.presence || value.presence || ' - ' elsif enum.is_a?(::Array) && enum.first.is_a?(::Array) - enum.detect { |e|e[1].to_s == value.to_s }.try(:first).to_s.presence || value.presence || ' - ' + enum.detect { |e| e[1].to_s == value.to_s }.try(:first).to_s.presence || value.presence || ' - ' else value.presence || ' - ' end diff --git a/lib/rails_admin/extensions/history/history.rb b/lib/rails_admin/extensions/history/history.rb index 39c90dc828..1e96c3b4a3 100644 --- a/lib/rails_admin/extensions/history/history.rb +++ b/lib/rails_admin/extensions/history/history.rb @@ -16,12 +16,10 @@ def latest end def create_history_item(message, object, abstract_model, user) - create( - message: [message].flatten.join(', '), - item: object.id, - table: abstract_model.to_s, - username: user.try(:email), - ) + create(message: [message].flatten.join(', '), + item: object.id, + table: abstract_model.to_s, + username: user.try(:email)) end def history_for_model(abstract_model, query, sort, sort_reverse, all, page, per_page = (RailsAdmin::Config.default_items_per_page || 20)) diff --git a/spec/rails_admin/adapters/active_record/association_spec.rb b/spec/rails_admin/adapters/active_record/association_spec.rb index 60e378e674..c152aaec5d 100644 --- a/spec/rails_admin/adapters/active_record/association_spec.rb +++ b/spec/rails_admin/adapters/active_record/association_spec.rb @@ -49,7 +49,7 @@ class ARComment < ActiveRecord::Base end it 'lists associations' do - expect(@post.associations.collect { |a|a.name.to_s }).to include(*%w(a_r_blog a_r_categories a_r_comments)) + expect(@post.associations.collect { |a| a.name.to_s }).to include(*%w(a_r_blog a_r_categories a_r_comments)) end it 'list associations types in supported [:belongs_to, :has_and_belongs_to_many, :has_many, :has_one]' do diff --git a/spec/rails_admin/config/fields/base_spec.rb b/spec/rails_admin/config/fields/base_spec.rb index 1c12cadd4e..cd501f20fd 100644 --- a/spec/rails_admin/config/fields/base_spec.rb +++ b/spec/rails_admin/config/fields/base_spec.rb @@ -359,7 +359,7 @@ class CommentReversed < Tableless describe '#associated_collection' do it 'returns [] when type is blank?' do - expect(RailsAdmin.config(Comment).fields.detect { |f|f.name == :commentable }.associated_collection('')).to be_empty + expect(RailsAdmin.config(Comment).fields.detect { |f| f.name == :commentable }.associated_collection('')).to be_empty end end From 558697bf9ec107c9bc2eadf628ceb249962fef0b Mon Sep 17 00:00:00 2001 From: Rikki Pitt Date: Tue, 17 Feb 2015 13:12:59 +0000 Subject: [PATCH 70/87] Updated _submit_buttons.html.haml. Fixes #2181. --- app/views/rails_admin/main/_submit_buttons.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/_submit_buttons.html.haml b/app/views/rails_admin/main/_submit_buttons.html.haml index 4de4eb6ee0..c8e4cceaf9 100644 --- a/app/views/rails_admin/main/_submit_buttons.html.haml +++ b/app/views/rails_admin/main/_submit_buttons.html.haml @@ -1,7 +1,7 @@ %input{type: :hidden, name: 'return_to', value: (params[:return_to].presence || request.referer)} %br -.form-group +.form-group.form-actions .col-sm-offset-2.col-sm-10 %button.btn.btn-primary{type: "submit", name: "_save", :'data-disable-with' => t("admin.form.save")} %i.icon-white.icon-ok From 87fe22a9b8995954c3e219e93f696cc4ee3bc49b Mon Sep 17 00:00:00 2001 From: Serge Paquet Date: Tue, 17 Feb 2015 16:06:41 -0500 Subject: [PATCH 71/87] Fix form layout on export page --- app/views/rails_admin/main/export.html.haml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/views/rails_admin/main/export.html.haml b/app/views/rails_admin/main/export.html.haml index 48e9782ca4..a3ac151df2 100644 --- a/app/views/rails_admin/main/export.html.haml +++ b/app/views/rails_admin/main/export.html.haml @@ -8,13 +8,13 @@ %legend %i.icon-chevron-down = t('admin.export.select') - .control-group + .form-group.control-group .controls .col-sm-2 %label.col-sm-10.checkbox{for: 'check_all'} = check_box_tag 'all', 'all', true, { id: 'check_all' } = t('admin.export.select_all_fields') - .control-group + .form-group.control-group %label.col-sm-2.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from', name: @model_config.label_plural.downcase) .col-sm-10.controls - visible_fields.select{ |f| !f.association? || f.association.polymorphic? }.each do |field| @@ -34,7 +34,7 @@ - visible_fields.select{ |f| f.association? && !f.association.polymorphic? }.each do |field| - fields = field.associated_model_config.export.with(controller: self.controller, view: self, object: (associated_model = field.associated_model_config.abstract_model.model).new).visible_fields.select{ |f| !f.association? } - .control-group + .form-group.control-group %label.col-sm-2.control-label{rel: 'tooltip', :'data-original-title' => t('admin.export.click_to_reverse_selection'), onclick: 'jQuery(this).siblings(".controls").find("input").click()'}= t('admin.export.fields_from_associated', name: field.label.downcase) .col-sm-10.controls - fields.each do |associated_model_field| @@ -47,7 +47,7 @@ %legend %i.icon-chevron-down = t('admin.export.options_for', name: 'csv') - .control-group + .form-group.control-group - guessed_encoding = @abstract_model.encoding %label.col-sm-2.control-label{for: "csv_options_encoding_to"}= t('admin.export.csv.encoding_to') .col-sm-10.controls @@ -55,14 +55,14 @@ = select_tag 'csv_options[encoding_to]', options_for_select(RailsAdmin::CSVConverter::TARGET_ENCODINGS), include_blank: true %p.help-block= t('admin.export.csv.encoding_to_help', name: guessed_encoding) - .control-group + .form-group.control-group %label.col-sm-2.control-label{for: "csv_options_skip_header"}= t('admin.export.csv.skip_header') .col-sm-10.controls %label.checkbox = check_box_tag 'csv_options[skip_header]', 'true' %p.help-block= t('admin.export.csv.skip_header_help') - .control-group + .form-group.control-group %label.col-sm-2.control-label{for: "csv_options_generator_col_sep"}= t('admin.export.csv.col_sep') .col-sm-10.controls = select_tag 'csv_options[generator][col_sep]', options_for_select({ '' => t('admin.export.csv.default_col_sep'), " ','" => ',', " ';'" => ';', '' => "'\t'" }) From 830787fe727fb75b2bbc616132f5be561ebc1f9d Mon Sep 17 00:00:00 2001 From: Matt Campbell Date: Wed, 25 Feb 2015 17:32:02 -0600 Subject: [PATCH 72/87] Don't .capitalize the Home link name, as it removes capitalization Before this commit admin.home.name = 'My Cool App' would be rendered 'My cool app' After this commit admin.home.name = 'My Cool App' would be rendered 'My Cool App' --- app/views/layouts/rails_admin/_secondary_navigation.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/rails_admin/_secondary_navigation.html.haml b/app/views/layouts/rails_admin/_secondary_navigation.html.haml index d33817b0ce..b67df85d0a 100644 --- a/app/views/layouts/rails_admin/_secondary_navigation.html.haml +++ b/app/views/layouts/rails_admin/_secondary_navigation.html.haml @@ -2,7 +2,7 @@ - actions(:root).each do |action| %li{class: "#{action.action_name}_root_link"}= link_to wording_for(:menu, action), { action: action.action_name, controller: 'rails_admin/main' }, class: "pjax" - if main_app_root_path = (main_app.root_path rescue false) - %li= link_to t('admin.home.name').capitalize, main_app_root_path + %li= link_to t('admin.home.name'), main_app_root_path - if _current_user - if user_link = edit_user_link %li= user_link From fcfd821d7dc26f70a8e7025119b3a45baece186b Mon Sep 17 00:00:00 2001 From: Rikki Pitt Date: Fri, 27 Feb 2015 12:12:53 +0000 Subject: [PATCH 73/87] Fixed label in _delete_notice partial for Bootstrap 3 --- app/views/rails_admin/main/_delete_notice.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/_delete_notice.html.haml b/app/views/rails_admin/main/_delete_notice.html.haml index c0e573188d..bdd843f836 100644 --- a/app/views/rails_admin/main/_delete_notice.html.haml +++ b/app/views/rails_admin/main/_delete_notice.html.haml @@ -1,7 +1,7 @@ - object = delete_notice %li{style: 'display:block; margin-top:10px'} - %span.label= @abstract_model.pretty_name + %span.label.label-default= @abstract_model.pretty_name - wording = object.send(@model_config.object_label_method) - if show_action = action(:show, @abstract_model, object) = link_to(wording, url_for(action: show_action.action_name, model_name: @abstract_model.to_param, id: object.id), class: 'pjax') From 3020d5249da7fd01b59f3db0134db31fa93d6f3f Mon Sep 17 00:00:00 2001 From: Francesco Rigotti Date: Fri, 6 Mar 2015 16:53:22 +0100 Subject: [PATCH 74/87] Fix indentation issue for nested forms --- app/assets/stylesheets/rails_admin/base/theming.scss | 4 ---- app/views/rails_admin/main/_form_nested_many.html.haml | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/app/assets/stylesheets/rails_admin/base/theming.scss b/app/assets/stylesheets/rails_admin/base/theming.scss index 53be7329e1..650c959d83 100644 --- a/app/assets/stylesheets/rails_admin/base/theming.scss +++ b/app/assets/stylesheets/rails_admin/base/theming.scss @@ -117,8 +117,6 @@ body.rails_admin { fieldset { margin-left:-10px; .control-group > label { - padding-left:10px; - width:135px; } legend { float:left; @@ -134,8 +132,6 @@ body.rails_admin { fieldset { margin-left:-20px; .control-group > label { - padding-left:20px; - width:125px; } legend { margin-left:20px; diff --git a/app/views/rails_admin/main/_form_nested_many.html.haml b/app/views/rails_admin/main/_form_nested_many.html.haml index af0ec5d01b..55ee0c5149 100644 --- a/app/views/rails_admin/main/_form_nested_many.html.haml +++ b/app/views/rails_admin/main/_form_nested_many.html.haml @@ -1,4 +1,4 @@ -.controls{data: { nestedmany: true }} +.controls.col-md-offset-2{data: { nestedmany: true }} .btn-group %a.btn.btn-info.toggler{:'data-toggle' => "button", :'data-target' => "#{form.jquery_namespace(field)} > .tab-content, #{form.jquery_namespace(field)} > .controls > .nav", class: (field.active? ? 'active' : '')} %i.icon-white From 6a401eefc848a90c4757baa3178f2bae0cb0a4c3 Mon Sep 17 00:00:00 2001 From: Ohkubo KOHEI Date: Sun, 8 Mar 2015 05:31:45 +0900 Subject: [PATCH 75/87] fix target typo 'blank' to '_blank' --- lib/rails_admin/config/fields/types/file_upload.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_admin/config/fields/types/file_upload.rb b/lib/rails_admin/config/fields/types/file_upload.rb index e2197e4001..ebc114ffd5 100644 --- a/lib/rails_admin/config/fields/types/file_upload.rb +++ b/lib/rails_admin/config/fields/types/file_upload.rb @@ -35,7 +35,7 @@ class FileUpload < RailsAdmin::Config::Fields::Base thumb_url = resource_url(thumb_method) url != thumb_url ? v.link_to(v.image_tag(thumb_url, class: 'img-polaroid'), url, target: 'blank') : v.image_tag(thumb_url) else - v.link_to(nil, url, target: 'blank') + v.link_to(nil, url, target: '_blank') end end end From 7811d55a6f6eb17b937f639b1e546039463d86e1 Mon Sep 17 00:00:00 2001 From: Ohkubo KOHEI Date: Mon, 9 Mar 2015 14:25:40 +0900 Subject: [PATCH 76/87] fixed another 'blank' --- lib/rails_admin/config/fields/types/file_upload.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_admin/config/fields/types/file_upload.rb b/lib/rails_admin/config/fields/types/file_upload.rb index ebc114ffd5..5eff910117 100644 --- a/lib/rails_admin/config/fields/types/file_upload.rb +++ b/lib/rails_admin/config/fields/types/file_upload.rb @@ -33,7 +33,7 @@ class FileUpload < RailsAdmin::Config::Fields::Base url = resource_url if image thumb_url = resource_url(thumb_method) - url != thumb_url ? v.link_to(v.image_tag(thumb_url, class: 'img-polaroid'), url, target: 'blank') : v.image_tag(thumb_url) + url != thumb_url ? v.link_to(v.image_tag(thumb_url, class: 'img-polaroid'), url, target: '_blank') : v.image_tag(thumb_url) else v.link_to(nil, url, target: '_blank') end From ef910409b58a33f81dc3a89043f135eb93d5ad40 Mon Sep 17 00:00:00 2001 From: Rikki Pitt Date: Mon, 9 Mar 2015 12:16:30 +0000 Subject: [PATCH 77/87] Fix dashboard history authorized check --- app/views/rails_admin/main/dashboard.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/rails_admin/main/dashboard.html.haml b/app/views/rails_admin/main/dashboard.html.haml index 844c1f1e70..7f36a1263b 100644 --- a/app/views/rails_admin/main/dashboard.html.haml +++ b/app/views/rails_admin/main/dashboard.html.haml @@ -28,7 +28,7 @@ = @count[abstract_model.pretty_name] %td.links %ul.inline.list-inline= menu_for :collection, abstract_model, nil, true -- if @auditing_adapter && authorized?(:history) +- if @auditing_adapter && authorized?(:history_index) #block-tables.block .content %h2= t("admin.actions.history_index.menu") From 1ba96fe6b7e2eb934eac729060f1b8cd1739e3b5 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Tue, 10 Mar 2015 11:57:12 +0900 Subject: [PATCH 78/87] See also allow_blank on checking required?. Fixes #2180 --- lib/rails_admin/config/fields/base.rb | 2 +- spec/dummy_app/app/active_record/team.rb | 2 +- .../integration/config/edit/rails_admin_config_edit_spec.rb | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/rails_admin/config/fields/base.rb b/lib/rails_admin/config/fields/base.rb index 6cb352fa82..f6baedc742 100644 --- a/lib/rails_admin/config/fields/base.rb +++ b/lib/rails_admin/config/fields/base.rb @@ -172,7 +172,7 @@ def virtual? end (@required ||= {})[context] ||= !!([name] + children_fields).uniq.detect do |column_name| # rubocop:disable DoubleNegation abstract_model.model.validators_on(column_name).detect do |v| - !v.options[:allow_nil] && + !(v.options[:allow_nil] || v.options[:allow_blank]) && [:presence, :numericality, :attachment_presence].include?(v.kind) && (v.options[:on] == context || v.options[:on].blank?) end diff --git a/spec/dummy_app/app/active_record/team.rb b/spec/dummy_app/app/active_record/team.rb index f5e31c4437..a5508331ed 100644 --- a/spec/dummy_app/app/active_record/team.rb +++ b/spec/dummy_app/app/active_record/team.rb @@ -7,7 +7,7 @@ class Team < ActiveRecord::Base validates_numericality_of :division_id, only_integer: true validates_presence_of :manager - validates_numericality_of :founded, only_integer: true + validates_numericality_of :founded, only_integer: true, allow_blank: true validates_numericality_of :wins, only_integer: true validates_numericality_of :losses, only_integer: true validates_numericality_of :win_percentage diff --git a/spec/integration/config/edit/rails_admin_config_edit_spec.rb b/spec/integration/config/edit/rails_admin_config_edit_spec.rb index 88fe18f6d8..8b0b72650c 100644 --- a/spec/integration/config/edit/rails_admin_config_edit_spec.rb +++ b/spec/integration/config/edit/rails_admin_config_edit_spec.rb @@ -800,6 +800,12 @@ class HelpTest < Tableless field = RailsAdmin.config('Team').edit.fields.detect { |f| f.name == :revenue } expect(field.properties.nullable?).to be_truthy expect(field.required?).to be_falsey + + # team.founded is nullable in the schema but has an AR + # validates_numericality_of validation that allows blank + field = RailsAdmin.config('Team').edit.fields.detect { |f| f.name == :founded } + expect(field.properties.nullable?).to be_truthy + expect(field.required?).to be_falsey end end From d071c2c687f35a86b11d71a826ae972a1e149358 Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Wed, 11 Mar 2015 16:06:39 +0100 Subject: [PATCH 79/87] Add Ruby 2.2 support to the README [ci skip] --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d5385a8237..28e7e4ffca 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,8 @@ This library aims to support and is [tested against][travis] the following Ruby * Ruby 1.9.3 * Ruby 2.0.0 -* Ruby 2.1.1 +* Ruby 2.1 +* Ruby 2.2 * [Rubinius][] * [JRuby][] From f2bc1becb69def928c39f962577c2b24e4c6c031 Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Wed, 11 Mar 2015 16:07:21 +0100 Subject: [PATCH 80/87] Add Mitsuhiro Shibuya as a gem author [ci skip] --- rails_admin.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rails_admin.gemspec b/rails_admin.gemspec index 6cdb598350..ab2ba79353 100644 --- a/rails_admin.gemspec +++ b/rails_admin.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'safe_yaml', '~> 1.0' spec.add_dependency 'sass-rails', ['>= 4.0', '< 6'] spec.add_development_dependency 'bundler', '~> 1.0' - spec.authors = ['Erik Michaels-Ober', 'Bogdan Gaza', 'Petteri Kaapa', 'Benoit Benezech'] + spec.authors = ['Erik Michaels-Ober', 'Bogdan Gaza', 'Petteri Kaapa', 'Benoit Benezech', 'Mitsuhiro Shibuya'] spec.description = 'RailsAdmin is a Rails engine that provides an easy-to-use interface for managing your data.' spec.email = ['sferik@gmail.com', 'bogdan@cadmio.org', 'petteri.kaapa@gmail.com'] spec.files = Dir['Gemfile', 'LICENSE.md', 'README.md', 'Rakefile', 'app/**/*', 'config/**/*', 'lib/**/*', 'public/**/*'] From 550a059d58a3b2a39265c47a2f6b4633692bc59a Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Wed, 11 Mar 2015 16:17:02 +0100 Subject: [PATCH 81/87] Change default rails test and development version to 4.2 --- .travis.yml | 12 ++++++------ Gemfile | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.travis.yml b/.travis.yml index ef63b6b424..564be810b0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -34,17 +34,17 @@ sudo: false matrix: include: - rvm: 2.2 - env: RAILS_VERSION=4.2 CI_ORM=active_record CI_DB_ADAPTER=sqlite3 + env: RAILS_VERSION=4.0 CI_ORM=active_record CI_DB_ADAPTER=sqlite3 - rvm: 2.2 - env: RAILS_VERSION=4.2 CI_ORM=mongoid + env: RAILS_VERSION=4.0 CI_ORM=mongoid - rvm: 2.2 - env: CI_ORM=active_record CI_DB_ADAPTER=mysql2 + env: RAILS_VERSION=4.1 CI_ORM=active_record CI_DB_ADAPTER=sqlite3 - rvm: 2.2 - env: CI_ORM=active_record CI_DB_ADAPTER=postgresql CI_DB_USERNAME=postgres + env: RAILS_VERSION=4.1 CI_ORM=mongoid - rvm: 2.2 - env: RAILS_VERSION=4.0 CI_ORM=active_record CI_DB_ADAPTER=sqlite3 + env: CI_ORM=active_record CI_DB_ADAPTER=mysql2 - rvm: 2.2 - env: RAILS_VERSION=4.0 CI_ORM=mongoid + env: CI_ORM=active_record CI_DB_ADAPTER=postgresql CI_DB_USERNAME=postgres - rvm: jruby-19mode env: CI_ORM=mongoid - rvm: jruby-19mode diff --git a/Gemfile b/Gemfile index a7b5156612..aaff1002e9 100644 --- a/Gemfile +++ b/Gemfile @@ -1,17 +1,17 @@ source 'https://rubygems.org' case ENV['RAILS_VERSION'] -when '4.2' - gem 'rails', '~> 4.2.0.beta1' - gem 'sass-rails', '~> 5.0.0.beta1' - gem 'devise', github: 'plataformatec/devise', branch: 'lm-rails-4-2' when '4.0' - gem 'rails', '< 4.1' + gem 'rails', '~> 4.0.0' gem 'devise', '>= 3.2' gem 'test-unit' -else +when '4.1' gem 'rails', '~> 4.1.0' gem 'devise', '>= 3.2' +else + gem 'rails', '~> 4.2.0' + gem 'sass-rails', '~> 5.0' + gem 'devise', github: 'plataformatec/devise', branch: 'lm-rails-4-2' end case ENV['CI_ORM'] From e4db31e7bae8b422cc9fe9b247a7c29483b2c384 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Fri, 13 Mar 2015 19:40:10 +0900 Subject: [PATCH 82/87] Fix PostgreSQL build --- Gemfile | 2 +- spec/orm/active_record.rb | 24 +++++++++++++++++---- spec/rails_admin/config/fields/base_spec.rb | 12 +++++------ 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/Gemfile b/Gemfile index aaff1002e9..aac7dfd300 100644 --- a/Gemfile +++ b/Gemfile @@ -11,7 +11,7 @@ when '4.1' else gem 'rails', '~> 4.2.0' gem 'sass-rails', '~> 5.0' - gem 'devise', github: 'plataformatec/devise', branch: 'lm-rails-4-2' + gem 'devise', '>= 3.4' end case ENV['CI_ORM'] diff --git a/spec/orm/active_record.rb b/spec/orm/active_record.rb index d99167f1fc..35b392d4de 100644 --- a/spec/orm/active_record.rb +++ b/spec/orm/active_record.rb @@ -18,10 +18,12 @@ def columns end def column(name, sql_type = nil, default = nil, null = true) - columns << ActiveRecord::ConnectionAdapters::Column.new( - name.to_s, default, - connection.respond_to?(:lookup_cast_type) ? connection.lookup_cast_type(sql_type.to_s) : sql_type.to_s, - null) + columns << + if connection.respond_to?(:lookup_cast_type) + ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, connection.lookup_cast_type(sql_type.to_s), sql_type.to_s, null) + else + ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null) + end end def columns_hash @@ -45,3 +47,17 @@ def save(validate = true) validate ? valid? : true end end + +## +# Column length detection seems to be broken for PostgreSQL. +# This is a workaround.. +# Refs. https://github.com/rails/rails/commit/b404613c977a5cc31c6748723e903fa5a0709c3b +# +if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) + ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do + def lookup_cast_type(sql_type) + oid = execute("SELECT #{quote(sql_type)}::regtype::oid", 'SCHEMA').first['oid'].to_i + type_map.lookup(oid, sql_type) + end + end +end diff --git a/spec/rails_admin/config/fields/base_spec.rb b/spec/rails_admin/config/fields/base_spec.rb index cd501f20fd..1f836d59ff 100644 --- a/spec/rails_admin/config/fields/base_spec.rb +++ b/spec/rails_admin/config/fields/base_spec.rb @@ -370,12 +370,12 @@ class FieldVisibilityTest < Tableless column :_id, :integer column :_type, :varchar column :name, :varchar - column :created_at, :datetime - column :updated_at, :datetime - column :deleted_at, :datetime - column :created_on, :datetime - column :updated_on, :datetime - column :deleted_on, :datetime + column :created_at, :timestamp + column :updated_at, :timestamp + column :deleted_at, :timestamp + column :created_on, :timestamp + column :updated_on, :timestamp + column :deleted_on, :timestamp end expect(RailsAdmin.config(FieldVisibilityTest).base.fields.select(&:visible?).collect(&:name)).to match_array [:_id, :created_at, :created_on, :deleted_at, :deleted_on, :id, :name, :updated_at, :updated_on] expect(RailsAdmin.config(FieldVisibilityTest).list.fields.select(&:visible?).collect(&:name)).to match_array [:_id, :created_at, :created_on, :deleted_at, :deleted_on, :id, :name, :updated_at, :updated_on] From 44a564d1f2678a5fb3f49e5b21a37f45f9d09eae Mon Sep 17 00:00:00 2001 From: Daniel254 Date: Fri, 13 Mar 2015 23:27:03 +0200 Subject: [PATCH 83/87] Change view of focused item in select dropdown Change view of focused item in select dropdown from http://prntscr.com/6gehla to http://prntscr.com/6geg2z Prevents mooving text when focus in or focus out --- .../stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss b/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss index 3dce16de5f..1bee68ee22 100644 --- a/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss +++ b/app/assets/stylesheets/rails_admin/aristo/jquery-ui-1.8.7.custom.scss @@ -89,7 +89,7 @@ box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #4F4F4F; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #9D9D9D; font-weight: normal; color: #313131; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { background-color: #b3e2f0; font-weight: normal; color: #313131; } .ui-state-hover a, .ui-state-hover a:hover { color: #313131; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { outline: none; From 280b7cb760d63cf4668ce4d1b2f272aa8f2406ed Mon Sep 17 00:00:00 2001 From: Erik Michaels-Ober Date: Mon, 16 Mar 2015 08:13:25 -0500 Subject: [PATCH 84/87] Bump version to 0.6.7 --- lib/rails_admin/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rails_admin/version.rb b/lib/rails_admin/version.rb index d855ffe4df..ee0fd159f9 100644 --- a/lib/rails_admin/version.rb +++ b/lib/rails_admin/version.rb @@ -2,7 +2,7 @@ module RailsAdmin class Version MAJOR = 0 MINOR = 6 - PATCH = 6 + PATCH = 7 PRE = nil class << self From 03ec916f447d029c8de59c015f386d63d43ceae1 Mon Sep 17 00:00:00 2001 From: MJ Date: Sat, 14 Mar 2015 15:20:00 +0800 Subject: [PATCH 85/87] added parent_controller Conflicts: app/controllers/rails_admin/application_controller.rb rails_admin.gemspec --- .../rails_admin/application_controller.rb | 2 +- lib/rails_admin/config.rb | 4 ++++ spec/rails_admin/config_spec.rb | 13 +++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/controllers/rails_admin/application_controller.rb b/app/controllers/rails_admin/application_controller.rb index 2022f466ac..612b53df50 100644 --- a/app/controllers/rails_admin/application_controller.rb +++ b/app/controllers/rails_admin/application_controller.rb @@ -10,7 +10,7 @@ class ObjectNotFound < ::StandardError class ActionNotAllowed < ::StandardError end - class ApplicationController < ::ApplicationController + class ApplicationController < Config.parent_controller.constantize newrelic_ignore if defined?(NewRelic) before_filter :_authenticate! diff --git a/lib/rails_admin/config.rb b/lib/rails_admin/config.rb index 8cae8dfd70..c6145f6040 100644 --- a/lib/rails_admin/config.rb +++ b/lib/rails_admin/config.rb @@ -53,6 +53,9 @@ class << self # Set the max width of columns in list view before a new set is created attr_accessor :total_columns_width + # set parent controller + attr_accessor :parent_controller + # Stores model configuration objects in a hash identified by model's class # name. # @@ -270,6 +273,7 @@ def reset @registry = {} @navigation_static_links = {} @navigation_static_label = nil + @parent_controller = '::ApplicationController' RailsAdmin::Config::Actions.reset end diff --git a/spec/rails_admin/config_spec.rb b/spec/rails_admin/config_spec.rb index e04f39148d..a8bee37094 100644 --- a/spec/rails_admin/config_spec.rb +++ b/spec/rails_admin/config_spec.rb @@ -271,6 +271,19 @@ class RecursivelyEmbedsMany expect(RailsAdmin::Config.models_pool.select { |m| m.match(/^Concerns::/) }).to be_empty end end + + describe '.parent_controller' do + it 'uses default class' do + expect(RailsAdmin.config.parent_controller).to eq '::ApplicationController' + end + + it 'uses other class' do + RailsAdmin.config do |config| + config.parent_controller = 'TestController' + end + expect(RailsAdmin.config.parent_controller).to eq 'TestController' + end + end end module ExampleModule From 3b27b4081926a4a7e200ede45728b92a3f096cf1 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Wed, 18 Mar 2015 19:29:19 +0900 Subject: [PATCH 86/87] Allow cancel of form with required fields. Fixes #2190 --- app/assets/javascripts/rails_admin/ui.coffee | 5 +++++ app/views/rails_admin/main/_submit_buttons.html.haml | 2 +- .../basic/edit/rails_admin_basic_edit_spec.rb | 9 ++++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/rails_admin/ui.coffee b/app/assets/javascripts/rails_admin/ui.coffee index 5eb2eb35d2..306d3139d8 100644 --- a/app/assets/javascripts/rails_admin/ui.coffee +++ b/app/assets/javascripts/rails_admin/ui.coffee @@ -69,6 +69,11 @@ $(document).on 'rails_admin.dom_ready', -> $(".table").tooltip selector: "th[rel=tooltip]" + # Workaround for jquery-ujs formnovalidate issue: + # https://github.com/rails/jquery-ujs/issues/316 + $('[formnovalidate]').on 'click', -> + $(this).closest('form').attr('novalidate', true) + $(document).on 'click', '#fields_to_export label input#check_all', () -> elems = $('#fields_to_export label input') if $('#fields_to_export label input#check_all').is ':checked' diff --git a/app/views/rails_admin/main/_submit_buttons.html.haml b/app/views/rails_admin/main/_submit_buttons.html.haml index c8e4cceaf9..555608fab9 100644 --- a/app/views/rails_admin/main/_submit_buttons.html.haml +++ b/app/views/rails_admin/main/_submit_buttons.html.haml @@ -13,6 +13,6 @@ - if authorized? :edit, @abstract_model %button.btn.btn-info{type: "submit", name: "_add_edit", :'data-disable-with' => t("admin.form.save_and_edit")} = t("admin.form.save_and_edit") - %button.btn{type: "submit", name: "_continue", :'data-disable-with' => t("admin.form.cancel")} + %button.btn{type: "submit", name: "_continue", :'data-disable-with' => t("admin.form.cancel"), :formnovalidate => true} %i.icon-remove = t("admin.form.cancel") diff --git a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb index fe842ef186..7395f5b18b 100644 --- a/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb +++ b/spec/integration/basic/edit/rails_admin_basic_edit_spec.rb @@ -112,10 +112,17 @@ end describe 'clicking cancel when editing an object' do - it 'sends back to previous URL' do + before do @ball = FactoryGirl.create :ball visit '/admin/ball?sort=color' click_link 'Edit' + end + + it "shows cancel button with 'novalidate' attribute" do + expect(page).to have_css '[type="submit"][name="_continue"][formnovalidate]' + end + + it 'sends back to previous URL' do click_button 'Cancel' expect(page.current_url).to eq('http://www.example.com/admin/ball?sort=color') end From 83beb5a87c2cac47fbd8b8980e88c7132a103698 Mon Sep 17 00:00:00 2001 From: Ohkubo KOHEI Date: Sat, 28 Mar 2015 10:56:53 +0900 Subject: [PATCH 87/87] fit for bootstrap3 style --- .../rails_admin/main/_form_polymorphic_association.html.haml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/rails_admin/main/_form_polymorphic_association.html.haml b/app/views/rails_admin/main/_form_polymorphic_association.html.haml index 0a880d94d7..65c89694d5 100644 --- a/app/views/rails_admin/main/_form_polymorphic_association.html.haml +++ b/app/views/rails_admin/main/_form_polymorphic_association.html.haml @@ -6,5 +6,6 @@ selected = field.bindings[:object].send(field.association.name) column_type_dom_id = form.dom_id(field).sub(field.method_name.to_s, type_column) -= form.select type_column, type_collection, {include_blank: true, selected: selected_type}, id: column_type_dom_id, data: { polymorphic: true, urls: field.polymorphic_type_urls.to_json } -= form.select field.method_name, collection, {include_blank: true, selected: selected.try(:id)}, style: "margin-left:10px;" +.form-inline += form.select type_column, type_collection, {include_blank: true, selected: selected_type}, class: "form-control", id: column_type_dom_id, data: { polymorphic: true, urls: field.polymorphic_type_urls.to_json } += form.select field.method_name, collection, {include_blank: true, selected: selected.try(:id)}, class: "form-control"