active_scaffold 3.4.43 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +39 -0
- data/{LICENSE → LICENSE.md} +1 -1
- data/README.md +27 -19
- data/app/assets/javascripts/active_scaffold.js.erb +1 -1
- data/app/assets/javascripts/jquery/active_scaffold.js +95 -43
- data/app/assets/javascripts/jquery/tiny_mce_bridge.js +30 -6
- data/app/assets/javascripts/prototype/tiny_mce_bridge.js +11 -1
- data/app/assets/stylesheets/active_scaffold_colors.scss +2 -2
- data/app/assets/stylesheets/active_scaffold_layout.css +36 -28
- data/app/views/active_scaffold_overrides/_base_form.html.erb +2 -3
- data/app/views/active_scaffold_overrides/_field_search.html.erb +8 -7
- data/app/views/active_scaffold_overrides/_form_association.html.erb +9 -9
- data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +6 -6
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +52 -50
- data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_human_conditions.html.erb +3 -1
- data/app/views/active_scaffold_overrides/_list_calculations.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_list_column_headings.html.erb +2 -0
- data/app/views/active_scaffold_overrides/_list_messages.html.erb +5 -3
- data/app/views/active_scaffold_overrides/_list_record.html.erb +3 -1
- data/app/views/active_scaffold_overrides/_list_with_header.html.erb +9 -9
- data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +18 -10
- data/app/views/active_scaffold_overrides/_render_field.js.erb +3 -3
- data/app/views/active_scaffold_overrides/_search.html.erb +7 -6
- data/app/views/active_scaffold_overrides/_show_actions.html.erb +14 -0
- data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_actions.html.erb +6 -2
- data/app/views/active_scaffold_overrides/_update_column.js.erb +1 -1
- data/app/views/active_scaffold_overrides/_update_form.html.erb +1 -1
- data/app/views/active_scaffold_overrides/destroy.js.erb +2 -3
- data/app/views/active_scaffold_overrides/edit_associated.js.erb +4 -3
- data/app/views/active_scaffold_overrides/on_action_update.js.erb +5 -3
- data/app/views/active_scaffold_overrides/on_create.js.erb +4 -4
- data/app/views/active_scaffold_overrides/on_update.js.erb +6 -6
- data/app/views/active_scaffold_overrides/show.html.erb +6 -0
- data/app/views/active_scaffold_overrides/update.html.erb +1 -1
- data/app/views/active_scaffold_overrides/update_column.js.erb +1 -1
- data/config/brakeman.ignore +26 -0
- data/config/brakeman.yml +3 -0
- data/config/i18n-tasks.yml +121 -0
- data/config/locales/de.yml +81 -70
- data/config/locales/en.yml +83 -74
- data/config/locales/es.yml +82 -73
- data/config/locales/fr.yml +86 -75
- data/config/locales/hu.yml +81 -70
- data/config/locales/ja.yml +71 -60
- data/config/locales/ru.yml +85 -74
- data/lib/active_scaffold.rb +3 -0
- data/lib/active_scaffold/actions/common_search.rb +11 -7
- data/lib/active_scaffold/actions/core.rb +119 -47
- data/lib/active_scaffold/actions/create.rb +1 -1
- data/lib/active_scaffold/actions/delete.rb +11 -8
- data/lib/active_scaffold/actions/field_search.rb +104 -6
- data/lib/active_scaffold/actions/list.rb +25 -21
- data/lib/active_scaffold/actions/mark.rb +12 -4
- data/lib/active_scaffold/actions/nested.rb +26 -26
- data/lib/active_scaffold/actions/search.rb +2 -2
- data/lib/active_scaffold/actions/show.rb +4 -5
- data/lib/active_scaffold/actions/subform.rb +9 -7
- data/lib/active_scaffold/actions/update.rb +20 -13
- data/lib/active_scaffold/active_record_permissions.rb +24 -5
- data/lib/active_scaffold/attribute_params.rb +68 -49
- data/lib/active_scaffold/bridges.rb +1 -1
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +15 -19
- data/lib/active_scaffold/bridges/bitfields.rb +1 -1
- data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +10 -14
- data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -7
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +19 -22
- data/lib/active_scaffold/bridges/cancan.rb +4 -3
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +11 -21
- data/lib/active_scaffold/bridges/carrierwave.rb +2 -1
- data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +2 -6
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +6 -39
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/chosen.rb +4 -1
- data/lib/active_scaffold/bridges/chosen/helpers.rb +3 -2
- data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +2 -2
- data/lib/active_scaffold/bridges/date_picker.rb +3 -0
- data/lib/active_scaffold/bridges/date_picker/ext.rb +43 -38
- data/lib/active_scaffold/bridges/date_picker/helper.rb +24 -23
- data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
- data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +3 -7
- data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +3 -25
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +2 -2
- data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +6 -8
- data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +1 -1
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +0 -2
- data/lib/active_scaffold/bridges/file_column/list_ui.rb +2 -1
- data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/actions.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -2
- data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +3 -7
- data/lib/active_scaffold/bridges/paperclip.rb +1 -1
- data/lib/active_scaffold/bridges/paperclip/form_ui.rb +3 -28
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +3 -7
- data/lib/active_scaffold/bridges/record_select.rb +2 -0
- data/lib/active_scaffold/bridges/record_select/helpers.rb +14 -18
- data/lib/active_scaffold/bridges/semantic_attributes/column.rb +4 -8
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +20 -20
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +7 -22
- data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +14 -14
- data/lib/active_scaffold/config/base.rb +9 -6
- data/lib/active_scaffold/config/core.rb +30 -21
- data/lib/active_scaffold/config/create.rb +2 -1
- data/lib/active_scaffold/config/delete.rb +2 -2
- data/lib/active_scaffold/config/field_search.rb +9 -3
- data/lib/active_scaffold/config/form.rb +4 -4
- data/lib/active_scaffold/config/list.rb +27 -23
- data/lib/active_scaffold/config/nested.rb +4 -4
- data/lib/active_scaffold/config/search.rb +6 -6
- data/lib/active_scaffold/config/show.rb +11 -1
- data/lib/active_scaffold/config/subform.rb +1 -1
- data/lib/active_scaffold/config/update.rb +4 -2
- data/lib/active_scaffold/constraints.rb +39 -36
- data/lib/active_scaffold/core.rb +36 -15
- data/lib/active_scaffold/data_structures/action_columns.rb +14 -9
- data/lib/active_scaffold/data_structures/action_link.rb +4 -5
- data/lib/active_scaffold/data_structures/action_links.rb +5 -4
- data/lib/active_scaffold/data_structures/actions.rb +2 -2
- data/lib/active_scaffold/data_structures/association.rb +8 -0
- data/lib/active_scaffold/data_structures/association/abstract.rb +147 -0
- data/lib/active_scaffold/data_structures/association/active_mongoid.rb +42 -0
- data/lib/active_scaffold/data_structures/association/active_record.rb +94 -0
- data/lib/active_scaffold/data_structures/association/mongoid.rb +45 -0
- data/lib/active_scaffold/data_structures/bridge.rb +3 -6
- data/lib/active_scaffold/data_structures/column.rb +100 -82
- data/lib/active_scaffold/data_structures/columns.rb +21 -3
- data/lib/active_scaffold/data_structures/nested_info.rb +22 -37
- data/lib/active_scaffold/data_structures/set.rb +4 -4
- data/lib/active_scaffold/data_structures/sorting.rb +29 -15
- data/lib/active_scaffold/engine.rb +3 -1
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +10 -5
- data/lib/active_scaffold/extensions/action_view_rendering.rb +65 -59
- data/lib/active_scaffold/extensions/left_outer_joins.rb +48 -53
- data/lib/active_scaffold/extensions/localize.rb +3 -4
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +7 -11
- data/lib/active_scaffold/extensions/paginator_extensions.rb +20 -18
- data/lib/active_scaffold/extensions/routing_mapper.rb +104 -40
- data/lib/active_scaffold/extensions/to_label.rb +1 -1
- data/lib/active_scaffold/extensions/unsaved_associated.rb +4 -13
- data/lib/active_scaffold/extensions/unsaved_record.rb +12 -1
- data/lib/active_scaffold/finder.rb +200 -134
- data/lib/active_scaffold/helpers/action_link_helpers.rb +398 -0
- data/lib/active_scaffold/helpers/association_helpers.rb +12 -30
- data/lib/active_scaffold/helpers/controller_helpers.rb +74 -24
- data/lib/active_scaffold/helpers/form_column_helpers.rb +205 -112
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +21 -11
- data/lib/active_scaffold/helpers/id_helpers.rb +1 -1
- data/lib/active_scaffold/helpers/list_column_helpers.rb +117 -39
- data/lib/active_scaffold/helpers/pagination_helpers.rb +11 -14
- data/lib/active_scaffold/helpers/search_column_helpers.rb +69 -32
- data/lib/active_scaffold/helpers/show_column_helpers.rb +9 -3
- data/lib/active_scaffold/helpers/view_helpers.rb +41 -426
- data/lib/active_scaffold/orm_checks.rb +109 -0
- data/lib/active_scaffold/paginator.rb +1 -1
- data/lib/active_scaffold/responds_to_parent.rb +12 -10
- data/lib/active_scaffold/tableless.rb +81 -43
- data/lib/active_scaffold/version.rb +2 -2
- data/lib/generators/active_scaffold/controller_generator.rb +49 -0
- data/lib/generators/active_scaffold/install_generator.rb +45 -0
- data/lib/generators/active_scaffold/resource_generator.rb +56 -0
- data/lib/generators/{active_scaffold_controller/templates → templates}/controller.rb +0 -0
- data/lib/generators/{active_scaffold_controller/templates → templates}/helper.rb +0 -0
- data/shoulda_macros/macros.rb +3 -3
- data/test/active_scaffold_config_mock.rb +33 -0
- data/test/bridges/bridge_test.rb +9 -9
- data/test/bridges/date_picker_test.rb +3 -1
- data/test/bridges/paper_trail_test.rb +2 -3
- data/test/bridges/paperclip_test.rb +21 -10
- data/test/bridges/tiny_mce_test.rb +20 -21
- data/test/class_with_finder.rb +42 -0
- data/test/company.rb +6 -4
- data/test/config/core_test.rb +1 -1
- data/test/config/create_test.rb +1 -1
- data/test/config/list_test.rb +3 -3
- data/test/config/update_test.rb +3 -3
- data/test/data_structures/action_columns_test.rb +3 -3
- data/test/data_structures/association_column_test.rb +5 -5
- data/test/data_structures/column_test.rb +14 -14
- data/test/data_structures/columns_test.rb +2 -2
- data/test/data_structures/set_test.rb +2 -2
- data/test/data_structures/sorting_test.rb +6 -4
- data/test/extensions/active_record_test.rb +1 -1
- data/test/extensions/routing_mapper_test.rb +64 -13
- data/test/helpers/form_column_helpers_test.rb +6 -6
- data/test/helpers/list_column_helpers_test.rb +9 -5
- data/test/helpers/pagination_helpers_test.rb +1 -0
- data/test/misc/active_record_permissions_test.rb +18 -1
- data/test/misc/attribute_params_test.rb +26 -17
- data/test/misc/calculation_test.rb +8 -31
- data/test/misc/configurable_test.rb +3 -2
- data/test/misc/constraints_test.rb +33 -22
- data/test/misc/convert_numbers_format_test.rb +28 -10
- data/test/misc/finder_test.rb +6 -29
- data/test/misc/parse_datetime_test.rb +160 -0
- data/test/misc/render_test.rb +1 -1
- data/test/misc/tableless_test.rb +24 -0
- data/test/mock_app/app/models/building.rb +2 -1
- data/test/mock_app/config.ru +1 -1
- data/test/mock_app/config/environments/test.rb +1 -1
- data/test/mock_app/config/routes.rb +11 -3
- data/test/model_stub.rb +11 -6
- data/test/run_all.rb +1 -1
- data/test/test_helper.rb +19 -4
- metadata +42 -23
- data/lib/active_scaffold/data_structures/error_message.rb +0 -22
- data/lib/active_scaffold/extensions/reverse_associations.rb +0 -119
- data/lib/generators/active_scaffold/USAGE +0 -29
- data/lib/generators/active_scaffold/active_scaffold_generator.rb +0 -21
- data/lib/generators/active_scaffold_controller/USAGE +0 -19
- data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +0 -29
- data/test/data_structures/error_message_test.rb +0 -25
| @@ -1,32 +1,27 @@ | |
| 1 | 
            -
            ActiveScaffold:: | 
| 2 | 
            -
               | 
| 3 | 
            -
                 | 
| 1 | 
            +
            module ActiveScaffold::Bridges
         | 
| 2 | 
            +
              class Ancestry
         | 
| 3 | 
            +
                module AncestryBridge
         | 
| 4 | 
            +
                  def initialize(model_id)
         | 
| 5 | 
            +
                    super(model_id)
         | 
| 4 6 |  | 
| 5 | 
            -
             | 
| 7 | 
            +
                    return unless model.respond_to? :ancestry_column
         | 
| 6 8 |  | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
              alias_method_chain :initialize, :ancestry
         | 
| 15 | 
            -
            end
         | 
| 9 | 
            +
                    columns << :parent_id
         | 
| 10 | 
            +
                    columns[:parent_id].form_ui = :ancestry
         | 
| 11 | 
            +
                    update.columns.exclude :ancestry
         | 
| 12 | 
            +
                    create.columns.exclude :ancestry, :parent_id
         | 
| 13 | 
            +
                    list.columns.exclude :ancestry, :parent_id
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 16 |  | 
| 17 | 
            -
            module ActiveScaffold::Bridges
         | 
| 18 | 
            -
              class Ancestry
         | 
| 19 17 | 
             
                module FormColumnHelpers
         | 
| 20 18 | 
             
                  def active_scaffold_input_ancestry(column, options)
         | 
| 21 19 | 
             
                    record = options[:object]
         | 
| 22 | 
            -
                    ActiveSupport::Deprecation.warn 'Relying on @record is deprecated, include :object in html_options with record.', caller if record.nil? # TODO: Remove when relying on @record is removed
         | 
| 23 | 
            -
                    record ||= @record # TODO: Remove when relying on @record is removed
         | 
| 24 | 
            -
             | 
| 25 20 | 
             
                    select_options = []
         | 
| 26 21 | 
             
                    select_control_options = {:selected => record.parent_id}
         | 
| 27 22 | 
             
                    select_control_options[:include_blank] = as_(:_select_) if record.parent_id.nil?
         | 
| 28 23 | 
             
                    method = column.options[:label_method] || :to_label
         | 
| 29 | 
            -
                    traverse_ancestry = proc do|key, value|
         | 
| 24 | 
            +
                    traverse_ancestry = proc do |key, value|
         | 
| 30 25 | 
             
                      unless key == record
         | 
| 31 26 | 
             
                        select_options << ["#{'__' * key.depth}#{key.send(method)}", key.id]
         | 
| 32 27 | 
             
                        value.each(&traverse_ancestry) if value.is_a?(Hash) && !value.empty?
         | 
| @@ -42,3 +37,4 @@ end | |
| 42 37 | 
             
            ActionView::Base.class_eval do
         | 
| 43 38 | 
             
              include ActiveScaffold::Bridges::Ancestry::FormColumnHelpers
         | 
| 44 39 | 
             
            end
         | 
| 40 | 
            +
            ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::Ancestry::AncestryBridge
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            class ActiveScaffold::Bridges::Bitfields < ActiveScaffold::DataStructures::Bridge
         | 
| 2 2 | 
             
              def self.install
         | 
| 3 3 | 
             
                require File.join(File.dirname(__FILE__), 'bitfields/bitfields_bridge')
         | 
| 4 | 
            -
                ActiveScaffold::Config::Core.send : | 
| 4 | 
            +
                ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::Bitfields::BitfieldsBridge
         | 
| 5 5 | 
             
              end
         | 
| 6 6 | 
             
            end
         | 
| @@ -2,8 +2,8 @@ module ActiveScaffold | |
| 2 2 | 
             
              module Bridges
         | 
| 3 3 | 
             
                class Bitfields
         | 
| 4 4 | 
             
                  module BitfieldsBridge
         | 
| 5 | 
            -
                    def  | 
| 6 | 
            -
                       | 
| 5 | 
            +
                    def initialize(model_id)
         | 
| 6 | 
            +
                      super
         | 
| 7 7 | 
             
                      return unless model.respond_to?(:bitfields) && model.bitfields.present?
         | 
| 8 8 |  | 
| 9 9 | 
             
                      model.bitfields.each do |_, options|
         | 
| @@ -15,11 +15,12 @@ module ActiveScaffold | |
| 15 15 | 
             
                      end
         | 
| 16 16 | 
             
                    end
         | 
| 17 17 |  | 
| 18 | 
            -
                    def  | 
| 19 | 
            -
                      model.bitfields | 
| 20 | 
            -
                         | 
| 21 | 
            -
             | 
| 22 | 
            -
                           | 
| 18 | 
            +
                    def _load_action_columns
         | 
| 19 | 
            +
                      if model.respond_to?(:bitfields) && model.bitfields.present?
         | 
| 20 | 
            +
                        model.bitfields.each do |column_name, options|
         | 
| 21 | 
            +
                          columns = options.keys.sort_by { |column| self.columns[column].weight }
         | 
| 22 | 
            +
                          %i[create update show subform].each do |action|
         | 
| 23 | 
            +
                            next unless actions.include? action
         | 
| 23 24 | 
             
                            if send(action).columns.include? column_name
         | 
| 24 25 | 
             
                              send(action).columns.exclude column_name
         | 
| 25 26 | 
             
                              send(action).columns.add_subgroup(column_name) { |group| group.add *columns }
         | 
| @@ -28,14 +29,9 @@ module ActiveScaffold | |
| 28 29 | 
             
                            end
         | 
| 29 30 | 
             
                          end
         | 
| 30 31 | 
             
                        end
         | 
| 31 | 
            -
                      end | 
| 32 | 
            -
             | 
| 33 | 
            -
                      _load_action_columns_without_bitfields
         | 
| 34 | 
            -
                    end
         | 
| 32 | 
            +
                      end
         | 
| 35 33 |  | 
| 36 | 
            -
             | 
| 37 | 
            -
                      base.alias_method_chain :initialize, :bitfields
         | 
| 38 | 
            -
                      base.alias_method_chain :_load_action_columns, :bitfields
         | 
| 34 | 
            +
                      super
         | 
| 39 35 | 
             
                    end
         | 
| 40 36 | 
             
                  end
         | 
| 41 37 | 
             
                end
         | 
| @@ -1,12 +1,5 @@ | |
| 1 1 | 
             
            class ActiveScaffold::Bridges::CalendarDateSelect < ActiveScaffold::DataStructures::Bridge
         | 
| 2 2 | 
             
              def self.install
         | 
| 3 | 
            -
                # check to see if the old bridge was installed.  If so, warn them
         | 
| 4 | 
            -
                # we can detect this by checking to see if the bridge was installed before calling this code
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                if ActiveScaffold::Config::Core.method_defined?(:initialize_with_calendar_date_select)
         | 
| 7 | 
            -
                  raise "We've detected that you have active_scaffold_calendar_date_select_bridge installed.  This plugin has been moved to core.  Please remove active_scaffold_calendar_date_select_bridge to prevent any conflicts"
         | 
| 8 | 
            -
                end
         | 
| 9 | 
            -
             | 
| 10 3 | 
             
                require File.join(File.dirname(__FILE__), 'calendar_date_select/as_cds_bridge.rb')
         | 
| 11 4 | 
             
              end
         | 
| 12 5 |  | 
| @@ -1,23 +1,19 @@ | |
| 1 | 
            -
            module ActiveScaffold::Config
         | 
| 2 | 
            -
              class Core < Base
         | 
| 3 | 
            -
                def initialize_with_calendar_date_select(model_id)
         | 
| 4 | 
            -
                  initialize_without_calendar_date_select(model_id)
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                  calendar_date_select_fields = model.columns.collect { |c| c.name.to_sym if [:date, :datetime].include?(c.type) }.compact
         | 
| 7 | 
            -
                  # check to see if file column was used on the model
         | 
| 8 | 
            -
                  return if calendar_date_select_fields.empty?
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                  # automatically set the forum_ui to a file column
         | 
| 11 | 
            -
                  calendar_date_select_fields.each { |field| columns[field].form_ui = :calendar_date_select }
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                alias_method_chain :initialize, :calendar_date_select
         | 
| 15 | 
            -
              end
         | 
| 16 | 
            -
            end
         | 
| 17 | 
            -
             | 
| 18 1 | 
             
            module ActiveScaffold
         | 
| 19 2 | 
             
              module Bridges
         | 
| 20 3 | 
             
                class CalendarDateSelect
         | 
| 4 | 
            +
                  module CalendarDateSelectBridge
         | 
| 5 | 
            +
                    def initialize(model_id)
         | 
| 6 | 
            +
                      initialize_without_calendar_date_select(model_id)
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                      calendar_date_select_fields = _columns.collect { |c| c.name.to_sym if %i[date datetime].include?(c.type) }.compact
         | 
| 9 | 
            +
                      # check to see if file column was used on the model
         | 
| 10 | 
            +
                      return if calendar_date_select_fields.empty?
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                      # automatically set the forum_ui to a file column
         | 
| 13 | 
            +
                      calendar_date_select_fields.each { |field| columns[field].form_ui = :calendar_date_select }
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 21 17 | 
             
                  # Helpers that assist with the rendering of a Form Column
         | 
| 22 18 | 
             
                  module FormColumnHelpers
         | 
| 23 19 | 
             
                    def active_scaffold_input_calendar_date_select(column, options)
         | 
| @@ -28,11 +24,11 @@ module ActiveScaffold | |
| 28 24 |  | 
| 29 25 | 
             
                  module SearchColumnHelpers
         | 
| 30 26 | 
             
                    def active_scaffold_search_date_bridge_calendar_control(column, options, current_search, name)
         | 
| 31 | 
            -
                      if current_search.is_a? Hash
         | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 27 | 
            +
                      value = if current_search.is_a? Hash
         | 
| 28 | 
            +
                                controller.class.condition_value_for_datetime(column, current_search[name], column.column.type == :date ? :to_date : :to_time)
         | 
| 29 | 
            +
                              else
         | 
| 30 | 
            +
                                current_search
         | 
| 31 | 
            +
                              end
         | 
| 36 32 | 
             
                      calendar_date_select(
         | 
| 37 33 | 
             
                        'record', column.name,
         | 
| 38 34 | 
             
                        :name => "#{options[:name]}[#{name}]",
         | 
| @@ -61,3 +57,4 @@ ActiveScaffold::Finder::ClassMethods.module_eval do | |
| 61 57 | 
             
              include ActiveScaffold::Bridges::Shared::DateBridge::Finder::ClassMethods
         | 
| 62 58 | 
             
              alias_method :condition_for_calendar_date_select_type, :condition_for_date_bridge_type
         | 
| 63 59 | 
             
            end
         | 
| 60 | 
            +
            ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::CalendarDateSelect::CalendarDateSelectBridge
         | 
| @@ -2,14 +2,15 @@ class ActiveScaffold::Bridges::Cancan < ActiveScaffold::DataStructures::Bridge | |
| 2 2 | 
             
              def self.install
         | 
| 3 3 | 
             
                require File.join(File.dirname(__FILE__), 'cancan', 'cancan_bridge.rb')
         | 
| 4 4 |  | 
| 5 | 
            -
                ActiveScaffold::Core::ClassMethods.send : | 
| 6 | 
            -
                ActiveScaffold::Actions::Core.send : | 
| 7 | 
            -
                ActiveScaffold::Actions::Nested.send : | 
| 5 | 
            +
                ActiveScaffold::Core::ClassMethods.send :prepend, ActiveScaffold::Bridges::Cancan::ClassMethods
         | 
| 6 | 
            +
                ActiveScaffold::Actions::Core.send :prepend, ActiveScaffold::Bridges::Cancan::Actions::Core
         | 
| 7 | 
            +
                ActiveScaffold::Actions::Nested.send :prepend, ActiveScaffold::Bridges::Cancan::Actions::Core
         | 
| 8 8 | 
             
                ActionController::Base.send :include, ActiveScaffold::Bridges::Cancan::ModelUserAccess::Controller
         | 
| 9 9 | 
             
                ActionView::Base.send :include, ActiveScaffold::Bridges::Cancan::AssociationHelpers
         | 
| 10 10 | 
             
                ::ActiveRecord::Base.send :include, ActiveScaffold::Bridges::Cancan::ModelUserAccess::Model
         | 
| 11 11 | 
             
                ::ActiveRecord::Base.send :include, ActiveScaffold::Bridges::Cancan::ActiveRecord
         | 
| 12 12 | 
             
              end
         | 
| 13 | 
            +
             | 
| 13 14 | 
             
              def self.install?
         | 
| 14 15 | 
             
                Object.const_defined? 'CanCan'
         | 
| 15 16 | 
             
              end
         | 
| @@ -23,13 +23,8 @@ module ActiveScaffold::Bridges | |
| 23 23 | 
             
                # As already has callbacks to ensure authorization at controller method via "authorization_method"
         | 
| 24 24 | 
             
                # but let's include this too, just in case, no sure how performance is affected tough :TODO benchmark
         | 
| 25 25 | 
             
                module ClassMethods
         | 
| 26 | 
            -
                   | 
| 27 | 
            -
             | 
| 28 | 
            -
                    alias_method_chain :active_scaffold, :cancan
         | 
| 29 | 
            -
                  end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  def active_scaffold_with_cancan(model_id = nil, &block)
         | 
| 32 | 
            -
                    active_scaffold_without_cancan(model_id, &block)
         | 
| 26 | 
            +
                  def active_scaffold(model_id = nil, &block)
         | 
| 27 | 
            +
                    super
         | 
| 33 28 | 
             
                    authorize_resource(
         | 
| 34 29 | 
             
                      :class => active_scaffold_config.model,
         | 
| 35 30 | 
             
                      :instance => :record
         | 
| @@ -46,13 +41,9 @@ module ActiveScaffold::Bridges | |
| 46 41 | 
             
                # beginning of chain integration
         | 
| 47 42 | 
             
                module Actions
         | 
| 48 43 | 
             
                  module Core
         | 
| 49 | 
            -
                    extend ActiveSupport::Concern
         | 
| 50 | 
            -
                    included do
         | 
| 51 | 
            -
                      alias_method_chain :beginning_of_chain, :cancan
         | 
| 52 | 
            -
                    end
         | 
| 53 44 | 
             
                    # :TODO can this be expanded more ?
         | 
| 54 | 
            -
                    def  | 
| 55 | 
            -
                       | 
| 45 | 
            +
                    def beginning_of_chain
         | 
| 46 | 
            +
                      super.accessible_by(current_ability)
         | 
| 56 47 | 
             
                    end
         | 
| 57 48 | 
             
                  end
         | 
| 58 49 | 
             
                end
         | 
| @@ -62,7 +53,7 @@ module ActiveScaffold::Bridges | |
| 62 53 | 
             
                  module Controller
         | 
| 63 54 | 
             
                    extend ActiveSupport::Concern
         | 
| 64 55 | 
             
                    included do
         | 
| 65 | 
            -
                       | 
| 56 | 
            +
                      prepend_before_action :assign_current_ability_to_models
         | 
| 66 57 | 
             
                    end
         | 
| 67 58 |  | 
| 68 59 | 
             
                    # We need to give the ActiveRecord classes a handle to the current ability. We don't want to just pass the object,
         | 
| @@ -103,11 +94,9 @@ module ActiveScaffold::Bridges | |
| 103 94 | 
             
                module ActiveRecord
         | 
| 104 95 | 
             
                  extend ActiveSupport::Concern
         | 
| 105 96 | 
             
                  included do
         | 
| 106 | 
            -
                     | 
| 107 | 
            -
                    include SecurityMethods
         | 
| 108 | 
            -
                    alias_method_chain :authorized_for?, :cancan
         | 
| 97 | 
            +
                    prepend SecurityMethods
         | 
| 109 98 | 
             
                    class << self
         | 
| 110 | 
            -
                       | 
| 99 | 
            +
                      prepend SecurityMethods
         | 
| 111 100 | 
             
                    end
         | 
| 112 101 | 
             
                  end
         | 
| 113 102 |  | 
| @@ -119,7 +108,7 @@ module ActiveScaffold::Bridges | |
| 119 108 | 
             
                    #     {:action=>"edit"}
         | 
| 120 109 | 
             
                    # to allow access cancan must allow both :crud_type and :action
         | 
| 121 110 | 
             
                    # if cancan says "no", it delegates to default AS behavior
         | 
| 122 | 
            -
                    def  | 
| 111 | 
            +
                    def authorized_for?(options = {})
         | 
| 123 112 | 
             
                      raise InvalidArgument if options[:crud_type].blank? && options[:action].blank?
         | 
| 124 113 | 
             
                      if current_ability.present?
         | 
| 125 114 | 
             
                        crud_type_result = options[:crud_type].nil? ? true : current_ability.can?(options[:crud_type], self)
         | 
| @@ -127,8 +116,9 @@ module ActiveScaffold::Bridges | |
| 127 116 | 
             
                      else
         | 
| 128 117 | 
             
                        crud_type_result, action_result = false, false
         | 
| 129 118 | 
             
                      end
         | 
| 130 | 
            -
                       | 
| 131 | 
            -
                       | 
| 119 | 
            +
                      result = (crud_type_result && action_result) || super(options.merge(:reason => nil))
         | 
| 120 | 
            +
                      # return array with nil reason if requested with options[:reason], we don't have reason but caller expects array
         | 
| 121 | 
            +
                      options[:reason] ? [result, nil] : result
         | 
| 132 122 | 
             
                    end
         | 
| 133 123 | 
             
                  end
         | 
| 134 124 | 
             
                end
         | 
| @@ -4,8 +4,9 @@ class ActiveScaffold::Bridges::Carrierwave < ActiveScaffold::DataStructures::Bri | |
| 4 4 | 
             
                require File.join(File.dirname(__FILE__), 'carrierwave/list_ui')
         | 
| 5 5 | 
             
                require File.join(File.dirname(__FILE__), 'carrierwave/carrierwave_bridge_helpers')
         | 
| 6 6 | 
             
                require File.join(File.dirname(__FILE__), 'carrierwave/carrierwave_bridge')
         | 
| 7 | 
            -
                ActiveScaffold::Config::Core.send : | 
| 7 | 
            +
                ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::Carrierwave::CarrierwaveBridge
         | 
| 8 8 | 
             
              end
         | 
| 9 | 
            +
             | 
| 9 10 | 
             
              def self.install?
         | 
| 10 11 | 
             
                Object.const_defined? 'CarrierWave'
         | 
| 11 12 | 
             
              end
         | 
| @@ -2,8 +2,8 @@ module ActiveScaffold | |
| 2 2 | 
             
              module Bridges
         | 
| 3 3 | 
             
                class Carrierwave
         | 
| 4 4 | 
             
                  module CarrierwaveBridge
         | 
| 5 | 
            -
                    def  | 
| 6 | 
            -
                       | 
| 5 | 
            +
                    def initialize(model_id)
         | 
| 6 | 
            +
                      super
         | 
| 7 7 | 
             
                      return unless model.respond_to?(:uploaders) && model.uploaders.present?
         | 
| 8 8 |  | 
| 9 9 | 
             
                      update.multipart = true
         | 
| @@ -14,10 +14,6 @@ module ActiveScaffold | |
| 14 14 | 
             
                      end
         | 
| 15 15 | 
             
                    end
         | 
| 16 16 |  | 
| 17 | 
            -
                    def self.included(base)
         | 
| 18 | 
            -
                      base.alias_method_chain :initialize, :carrierwave
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
             | 
| 21 17 | 
             
                    private
         | 
| 22 18 |  | 
| 23 19 | 
             
                    def configure_carrierwave_field(field)
         | 
| @@ -3,47 +3,14 @@ module ActiveScaffold | |
| 3 3 | 
             
                module FormColumnHelpers
         | 
| 4 4 | 
             
                  def active_scaffold_input_carrierwave(column, options)
         | 
| 5 5 | 
             
                    record = options[:object]
         | 
| 6 | 
            -
                     | 
| 7 | 
            -
                     | 
| 8 | 
            -
                    options  | 
| 9 | 
            -
             | 
| 10 | 
            -
                    carrierwave = record.send("#{column.name}")
         | 
| 11 | 
            -
                    if !carrierwave.file.blank?
         | 
| 12 | 
            -
                      required = options.delete(:required)
         | 
| 13 | 
            -
                      remove_field_options = {
         | 
| 14 | 
            -
                        :name => options[:name].gsub(/\[#{column.name}\]$/, "[remove_#{column.name}]"),
         | 
| 15 | 
            -
                        :id => 'remove_' + options[:id],
         | 
| 16 | 
            -
                        :value => false
         | 
| 17 | 
            -
                      }
         | 
| 18 | 
            -
             | 
| 6 | 
            +
                    carrierwave = record.send(column.name.to_s)
         | 
| 7 | 
            +
                    content = get_column_value(record, column) if carrierwave.file.present?
         | 
| 8 | 
            +
                    active_scaffold_file_with_remove_link(column, options, content, 'remove_', 'carrierwave_controls') do
         | 
| 19 9 | 
             
                      cache_field_options = {
         | 
| 20 | 
            -
                        : | 
| 21 | 
            -
                        : | 
| 10 | 
            +
                        name: options[:name].gsub(/\[#{column.name}\]$/, "[#{column.name}_cache]"),
         | 
| 11 | 
            +
                        id: options[:id] + '_cache'
         | 
| 22 12 | 
             
                      }
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                      case ActiveScaffold.js_framework
         | 
| 25 | 
            -
                      when :jquery
         | 
| 26 | 
            -
                        js_remove_file_code = "jQuery(this).prev('input#remove_#{options[:id]}').val('true'); jQuery(this).parent().hide().next().show()#{".find('input').attr('required', 'required')" if required}; return false;"
         | 
| 27 | 
            -
                        js_dont_remove_file_code = "jQuery(this).parents('div.carrierwave_controls').find('input#remove_#{options[:id]}').val('false'); return false;"
         | 
| 28 | 
            -
                      when :prototype
         | 
| 29 | 
            -
                        js_remove_file_code = "$(this).previous('input#remove_#{options[:id]}').value='true'; $(this).up().hide().next().show()#{".down().writeAttribute('required', 'required')" if required}; return false;"
         | 
| 30 | 
            -
                        js_dont_remove_file_code = "$(this).up('div.carrierwave_controls').down('input#remove_#{options[:id]}').value='false'; return false;"
         | 
| 31 | 
            -
                      end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                      input = file_field(:record, column.name, options.merge(:onchange => js_dont_remove_file_code))
         | 
| 34 | 
            -
                      content_tag(
         | 
| 35 | 
            -
                        :div,
         | 
| 36 | 
            -
                        content_tag(:div, (
         | 
| 37 | 
            -
                            get_column_value(record, column) + ' | ' +
         | 
| 38 | 
            -
                              hidden_field(:record, "#{column.name}_cache", cache_field_options) +
         | 
| 39 | 
            -
                              hidden_field(:record, "remove_#{column.name}", remove_field_options) +
         | 
| 40 | 
            -
                              content_tag(:a, as_(:remove_file), :href => '#', :onclick => js_remove_file_code)
         | 
| 41 | 
            -
                          ).html_safe
         | 
| 42 | 
            -
                        ) + content_tag(:div, input, :style => 'display: none'),
         | 
| 43 | 
            -
                        :class => 'carrierwave_controls'
         | 
| 44 | 
            -
                      )
         | 
| 45 | 
            -
                    else
         | 
| 46 | 
            -
                      file_field(:record, column.name, options)
         | 
| 13 | 
            +
                      hidden_field(:record, "#{column.name}_cache", cache_field_options)
         | 
| 47 14 | 
             
                    end
         | 
| 48 15 | 
             
                  end
         | 
| 49 16 | 
             
                end
         | 
| @@ -2,7 +2,7 @@ module ActiveScaffold | |
| 2 2 | 
             
              module Helpers
         | 
| 3 3 | 
             
                module ListColumnHelpers
         | 
| 4 4 | 
             
                  def active_scaffold_column_carrierwave(record, column)
         | 
| 5 | 
            -
                    carrierwave = record.send( | 
| 5 | 
            +
                    carrierwave = record.send(column.name.to_s)
         | 
| 6 6 | 
             
                    return nil if carrierwave.file.blank?
         | 
| 7 7 | 
             
                    thumbnail_style = ActiveScaffold::Bridges::Carrierwave::CarrierwaveBridgeHelpers.thumbnail_style
         | 
| 8 8 | 
             
                    content =
         | 
| @@ -2,12 +2,15 @@ class ActiveScaffold::Bridges::Chosen < ActiveScaffold::DataStructures::Bridge | |
| 2 2 | 
             
              def self.install
         | 
| 3 3 | 
             
                require File.join(File.dirname(__FILE__), 'chosen/helpers.rb')
         | 
| 4 4 | 
             
              end
         | 
| 5 | 
            +
             | 
| 5 6 | 
             
              def self.install?
         | 
| 6 | 
            -
                super && [ | 
| 7 | 
            +
                super && %i[jquery prototype].include?(ActiveScaffold.js_framework)
         | 
| 7 8 | 
             
              end
         | 
| 9 | 
            +
             | 
| 8 10 | 
             
              def self.stylesheets
         | 
| 9 11 | 
             
                'chosen'
         | 
| 10 12 | 
             
              end
         | 
| 13 | 
            +
             | 
| 11 14 | 
             
              def self.javascripts
         | 
| 12 15 | 
             
                ["chosen-#{ActiveScaffold.js_framework}", "#{ActiveScaffold.js_framework}/active_scaffold_chosen"]
         | 
| 13 16 | 
             
              end
         | 
| @@ -11,13 +11,13 @@ class ActiveScaffold::Bridges::Chosen | |
| 11 11 | 
             
                  # requires RecordSelect plugin to be installed and configured.
         | 
| 12 12 | 
             
                  def active_scaffold_input_chosen(column, html_options)
         | 
| 13 13 | 
             
                    html_options[:class] << ' chosen'
         | 
| 14 | 
            -
                    if column. | 
| 14 | 
            +
                    if column.association.try(:collection?)
         | 
| 15 15 | 
             
                      associated_options, select_options = active_scaffold_plural_association_options(column)
         | 
| 16 16 | 
             
                      options = {:selected => associated_options.collect(&:id), :include_blank => as_(:_select_)}
         | 
| 17 17 |  | 
| 18 18 | 
             
                      html_options.update(:multiple => true).update(column.options[:html_options] || {})
         | 
| 19 19 | 
             
                      options.update(column.options)
         | 
| 20 | 
            -
                       | 
| 20 | 
            +
                      active_scaffold_select_name_with_multiple html_options
         | 
| 21 21 |  | 
| 22 22 | 
             
                      if (optgroup = options.delete(:optgroup))
         | 
| 23 23 | 
             
                        select(:record, column.name, active_scaffold_grouped_options(column, select_options, optgroup), options, html_options)
         | 
| @@ -39,6 +39,7 @@ class ActiveScaffold::Bridges::Chosen | |
| 39 39 | 
             
                  def active_scaffold_search_multi_chosen(column, options)
         | 
| 40 40 | 
             
                    options[:class] << ' chosen'
         | 
| 41 41 | 
             
                    options[:multiple] = true
         | 
| 42 | 
            +
                    options[:'data-placeholder'] = column.options[:placeholder] || as_(:_select_)
         | 
| 42 43 | 
             
                    active_scaffold_search_select(column, options)
         | 
| 43 44 | 
             
                  end
         | 
| 44 45 | 
             
                end
         | 
| @@ -5,7 +5,7 @@ module ActiveScaffold::Bridges | |
| 5 5 | 
             
                    select_options = {:prompt => as_(:_select_), :priority_countries => column.options[:priority] || [:us], :format => column.options[:format]}
         | 
| 6 6 | 
             
                    select_options.merge!(options)
         | 
| 7 7 | 
             
                    options.reverse_merge!(column.options).except!(:prompt, :priority, :format)
         | 
| 8 | 
            -
                     | 
| 8 | 
            +
                    active_scaffold_select_name_with_multiple options
         | 
| 9 9 | 
             
                    country_select(:record, column.name, select_options, options.except(:object))
         | 
| 10 10 | 
             
                  end
         | 
| 11 11 | 
             
                end
         | 
| @@ -29,7 +29,7 @@ module ActiveScaffold::Bridges | |
| 29 29 | 
             
            end
         | 
| 30 30 |  | 
| 31 31 | 
             
            # To use old way, saving country name instead of CountrySelect default of country code
         | 
| 32 | 
            -
            CountrySelect::FORMATS[:old] =  | 
| 32 | 
            +
            CountrySelect::FORMATS[:old] = ->(country) { [country.translations[I18n.locale.to_s] || country.name, country.name] }
         | 
| 33 33 |  | 
| 34 34 | 
             
            ActionView::Base.class_eval do
         | 
| 35 35 | 
             
              include ActiveScaffold::Bridges::CountrySelect::FormColumnHelpers
         | 
| @@ -4,12 +4,15 @@ module ActiveScaffold::Bridges | |
| 4 4 | 
             
                def self.install
         | 
| 5 5 | 
             
                  require File.join(File.dirname(__FILE__), 'date_picker/ext.rb')
         | 
| 6 6 | 
             
                end
         | 
| 7 | 
            +
             | 
| 7 8 | 
             
                def self.install?
         | 
| 8 9 | 
             
                  ActiveScaffold.js_framework == :jquery && jquery_ui_included?
         | 
| 9 10 | 
             
                end
         | 
| 11 | 
            +
             | 
| 10 12 | 
             
                def self.jquery_ui_included?
         | 
| 11 13 | 
             
                  Jquery::Rails.const_defined?('JQUERY_UI_VERSION') || Jquery.const_defined?('Ui') if Object.const_defined?('Jquery')
         | 
| 12 14 | 
             
                end
         | 
| 15 | 
            +
             | 
| 13 16 | 
             
                def self.localization
         | 
| 14 17 | 
             
                  "jQuery(function($){
         | 
| 15 18 | 
             
              if (typeof($.datepicker) === 'object') {
         |