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') {
|