active_scaffold 3.4.17 → 3.4.18
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 +12 -1
- data/README.md +8 -4
- data/app/assets/javascripts/jquery/active_scaffold.js +82 -67
- data/app/assets/stylesheets/active_scaffold.scss +1 -1
- data/app/assets/stylesheets/active_scaffold_colors.scss +1 -1
- data/app/assets/stylesheets/blue-theme.css +1 -1
- data/app/views/active_scaffold_overrides/_form_association.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
- data/lib/active_scaffold.rb +16 -16
- data/lib/active_scaffold/actions/common_search.rb +13 -11
- data/lib/active_scaffold/actions/core.rb +85 -78
- data/lib/active_scaffold/actions/create.rb +29 -28
- data/lib/active_scaffold/actions/delete.rb +17 -17
- data/lib/active_scaffold/actions/field_search.rb +18 -19
- data/lib/active_scaffold/actions/list.rb +30 -22
- data/lib/active_scaffold/actions/mark.rb +1 -1
- data/lib/active_scaffold/actions/nested.rb +78 -65
- data/lib/active_scaffold/actions/search.rb +13 -10
- data/lib/active_scaffold/actions/show.rb +10 -6
- data/lib/active_scaffold/actions/subform.rb +1 -2
- data/lib/active_scaffold/actions/update.rb +39 -31
- data/lib/active_scaffold/active_record_permissions.rb +14 -15
- data/lib/active_scaffold/attribute_params.rb +42 -43
- data/lib/active_scaffold/bridges.rb +22 -12
- data/lib/active_scaffold/bridges/ancestry.rb +1 -1
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +6 -6
- data/lib/active_scaffold/bridges/bitfields.rb +1 -1
- data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +12 -13
- data/lib/active_scaffold/bridges/calendar_date_select.rb +5 -5
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +17 -20
- data/lib/active_scaffold/bridges/cancan.rb +1 -1
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +8 -9
- data/lib/active_scaffold/bridges/carrierwave.rb +4 -4
- data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +9 -8
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +11 -10
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +7 -6
- data/lib/active_scaffold/bridges/chosen.rb +1 -1
- data/lib/active_scaffold/bridges/chosen/helpers.rb +4 -4
- data/lib/active_scaffold/bridges/country_helper.rb +1 -1
- data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +259 -260
- data/lib/active_scaffold/bridges/date_picker.rb +2 -2
- data/lib/active_scaffold/bridges/date_picker/ext.rb +9 -11
- data/lib/active_scaffold/bridges/date_picker/helper.rb +61 -67
- data/lib/active_scaffold/bridges/dragonfly.rb +4 -4
- data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +9 -8
- data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +11 -10
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +6 -5
- data/lib/active_scaffold/bridges/file_column.rb +5 -5
- data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +20 -23
- data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +20 -23
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +13 -14
- data/lib/active_scaffold/bridges/file_column/list_ui.rb +7 -8
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +18 -22
- data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +5 -4
- data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +2 -10
- data/lib/active_scaffold/bridges/paper_trail.rb +7 -5
- data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +4 -3
- data/lib/active_scaffold/bridges/paperclip.rb +5 -5
- data/lib/active_scaffold/bridges/paperclip/form_ui.rb +11 -10
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +6 -5
- data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +10 -9
- data/lib/active_scaffold/bridges/record_select.rb +1 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +28 -28
- data/lib/active_scaffold/bridges/semantic_attributes.rb +1 -1
- data/lib/active_scaffold/bridges/semantic_attributes/column.rb +1 -1
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +58 -52
- data/lib/active_scaffold/bridges/tiny_mce.rb +2 -2
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +3 -3
- data/lib/active_scaffold/config/base.rb +9 -10
- data/lib/active_scaffold/config/core.rb +24 -29
- data/lib/active_scaffold/config/create.rb +0 -1
- data/lib/active_scaffold/config/field_search.rb +8 -10
- data/lib/active_scaffold/config/form.rb +5 -5
- data/lib/active_scaffold/config/list.rb +21 -20
- data/lib/active_scaffold/config/mark.rb +3 -3
- data/lib/active_scaffold/config/nested.rb +11 -10
- data/lib/active_scaffold/config/search.rb +2 -3
- data/lib/active_scaffold/config/show.rb +1 -1
- data/lib/active_scaffold/config/update.rb +1 -2
- data/lib/active_scaffold/configurable.rb +9 -11
- data/lib/active_scaffold/constraints.rb +9 -8
- data/lib/active_scaffold/core.rb +72 -84
- data/lib/active_scaffold/data_structures/action_columns.rb +26 -25
- data/lib/active_scaffold/data_structures/action_link.rb +43 -43
- data/lib/active_scaffold/data_structures/action_links.rb +17 -15
- data/lib/active_scaffold/data_structures/actions.rb +5 -5
- data/lib/active_scaffold/data_structures/bridge.rb +6 -3
- data/lib/active_scaffold/data_structures/column.rb +110 -89
- data/lib/active_scaffold/data_structures/columns.rb +3 -3
- data/lib/active_scaffold/data_structures/error_message.rb +4 -6
- data/lib/active_scaffold/data_structures/nested_info.rb +43 -48
- data/lib/active_scaffold/data_structures/set.rb +7 -8
- data/lib/active_scaffold/data_structures/sorting.rb +38 -33
- data/lib/active_scaffold/delayed_setup.rb +5 -6
- data/lib/active_scaffold/engine.rb +4 -4
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +3 -4
- data/lib/active_scaffold/extensions/action_controller_rescueing.rb +1 -1
- data/lib/active_scaffold/extensions/action_view_rendering.rb +5 -6
- data/lib/active_scaffold/extensions/left_outer_joins.rb +11 -11
- data/lib/active_scaffold/extensions/localize.rb +1 -1
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +1 -1
- data/lib/active_scaffold/extensions/paginator_extensions.rb +2 -5
- data/lib/active_scaffold/extensions/reverse_associations.rb +13 -13
- data/lib/active_scaffold/extensions/routing_mapper.rb +9 -9
- data/lib/active_scaffold/extensions/unsaved_associated.rb +9 -9
- data/lib/active_scaffold/finder.rb +90 -93
- data/lib/active_scaffold/helpers/association_helpers.rb +5 -5
- data/lib/active_scaffold/helpers/controller_helpers.rb +22 -19
- data/lib/active_scaffold/helpers/form_column_helpers.rb +115 -105
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +62 -35
- data/lib/active_scaffold/helpers/id_helpers.rb +6 -6
- data/lib/active_scaffold/helpers/list_column_helpers.rb +89 -94
- data/lib/active_scaffold/helpers/pagination_helpers.rb +9 -9
- data/lib/active_scaffold/helpers/search_column_helpers.rb +47 -44
- data/lib/active_scaffold/helpers/show_column_helpers.rb +2 -2
- data/lib/active_scaffold/helpers/view_helpers.rb +86 -91
- data/lib/active_scaffold/marked_model.rb +10 -10
- data/lib/active_scaffold/paginator.rb +30 -34
- data/lib/active_scaffold/responds_to_parent.rb +27 -28
- data/lib/active_scaffold/tableless.rb +20 -15
- data/lib/active_scaffold/version.rb +1 -1
- data/lib/generators/active_scaffold/active_scaffold_generator.rb +8 -8
- data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +9 -9
- data/shoulda_macros/macros.rb +27 -22
- data/test/bridges/bridge_test.rb +38 -29
- data/test/bridges/date_picker_test.rb +1 -1
- data/test/bridges/paper_trail_test.rb +17 -0
- data/test/bridges/paperclip_test.rb +3 -2
- data/test/bridges/tiny_mce_test.rb +5 -2
- data/test/company.rb +25 -30
- data/test/config/base_test.rb +1 -1
- data/test/config/core_test.rb +9 -9
- data/test/config/create_test.rb +14 -8
- data/test/config/delete_test.rb +4 -4
- data/test/config/field_search_test.rb +6 -6
- data/test/config/list_test.rb +16 -16
- data/test/config/nested_test.rb +4 -4
- data/test/config/search_test.rb +8 -8
- data/test/config/show_test.rb +6 -6
- data/test/config/subform_test.rb +1 -1
- data/test/config/update_test.rb +5 -5
- data/test/const_mocker.rb +4 -4
- data/test/data_structures/action_columns_test.rb +4 -5
- data/test/data_structures/action_link_test.rb +1 -0
- data/test/data_structures/action_links_test.rb +5 -5
- data/test/data_structures/column_test.rb +9 -9
- data/test/data_structures/columns_test.rb +2 -2
- data/test/data_structures/error_message_test.rb +4 -5
- data/test/data_structures/set_test.rb +1 -2
- data/test/data_structures/sorting_test.rb +10 -10
- data/test/data_structures/validation_reflection_test.rb +8 -0
- data/test/extensions/routing_mapper_test.rb +2 -2
- data/test/helpers/list_column_helpers_test.rb +3 -2
- data/test/helpers/pagination_helpers_test.rb +5 -4
- data/test/helpers/search_column_helpers_test.rb +1 -1
- data/test/misc/active_record_permissions_test.rb +63 -50
- data/test/misc/attribute_params_test.rb +28 -26
- data/test/misc/calculation_test.rb +10 -3
- data/test/misc/configurable_test.rb +12 -13
- data/test/misc/constraints_test.rb +6 -6
- data/test/misc/convert_numbers_format_test.rb +7 -6
- data/test/misc/finder_test.rb +17 -12
- data/test/misc/lang_test.rb +3 -4
- data/test/misc/tableless_test.rb +2 -3
- data/test/mock_app/app/controllers/addresses_controller.rb +1 -1
- data/test/mock_app/app/controllers/buildings_controller.rb +1 -1
- data/test/mock_app/app/controllers/cars_controller.rb +1 -1
- data/test/mock_app/app/controllers/contacts_controller.rb +1 -1
- data/test/mock_app/app/controllers/people_controller.rb +1 -1
- data/test/mock_app/app/models/file_model.rb +2 -2
- data/test/mock_app/app/models/person.rb +1 -1
- data/test/mock_app/config/application.rb +3 -3
- data/test/mock_app/config/boot.rb +1 -1
- data/test/mock_app/config/environment.rb +1 -0
- data/test/mock_app/config/environments/development.rb +0 -1
- data/test/mock_app/config/environments/production.rb +1 -1
- data/test/mock_app/db/schema.rb +14 -15
- data/test/model_stub.rb +13 -16
- data/test/run_all.rb +5 -7
- data/test/test_helper.rb +12 -9
- metadata +19 -3
|
@@ -7,21 +7,22 @@ module ActiveScaffold
|
|
|
7
7
|
|
|
8
8
|
mattr_accessor :bridges
|
|
9
9
|
mattr_accessor :bridges_run
|
|
10
|
+
mattr_accessor :bridges_prepared
|
|
10
11
|
self.bridges = {}
|
|
11
12
|
|
|
12
13
|
def self.register(file)
|
|
13
14
|
match = file.match(/(active_scaffold\/bridges\/(.*))\.rb\Z/)
|
|
14
|
-
|
|
15
|
+
bridges[match[2].to_sym] = match[1] if match
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def self.load(bridge_name)
|
|
18
|
-
bridge =
|
|
19
|
+
bridge = bridges[bridge_name.to_sym]
|
|
19
20
|
if bridge.is_a? String
|
|
20
21
|
if ActiveScaffold.exclude_bridges.exclude? bridge_name.to_sym
|
|
21
22
|
bridge = bridge.camelize.constantize
|
|
22
|
-
|
|
23
|
+
bridges[bridge_name.to_sym] = bridge
|
|
23
24
|
else
|
|
24
|
-
|
|
25
|
+
bridges.delete bridge_name
|
|
25
26
|
bridge = nil
|
|
26
27
|
end
|
|
27
28
|
end
|
|
@@ -30,32 +31,41 @@ module ActiveScaffold
|
|
|
30
31
|
class << self
|
|
31
32
|
alias_method :[], :load
|
|
32
33
|
end
|
|
33
|
-
|
|
34
|
+
|
|
34
35
|
def self.run_all
|
|
35
|
-
return false if
|
|
36
|
-
|
|
36
|
+
return false if bridges_run
|
|
37
|
+
bridges.keys.each do |bridge_name|
|
|
37
38
|
bridge = self[bridge_name]
|
|
38
39
|
bridge.run if bridge
|
|
39
40
|
end
|
|
40
41
|
self.bridges_run = true
|
|
41
42
|
end
|
|
42
43
|
|
|
44
|
+
def self.prepare_all
|
|
45
|
+
return false if bridges_prepared
|
|
46
|
+
bridges.keys.each do |bridge_name|
|
|
47
|
+
bridge = self[bridge_name]
|
|
48
|
+
bridge.prepare if bridge.install?
|
|
49
|
+
end
|
|
50
|
+
self.bridges_prepared = true
|
|
51
|
+
end
|
|
52
|
+
|
|
43
53
|
def self.all_stylesheets
|
|
44
|
-
|
|
54
|
+
bridges.keys.collect do |bridge_name|
|
|
45
55
|
bridge = self[bridge_name]
|
|
46
|
-
bridge.stylesheets if bridge
|
|
56
|
+
bridge.stylesheets if bridge && bridge.install?
|
|
47
57
|
end.compact.flatten
|
|
48
58
|
end
|
|
49
59
|
|
|
50
60
|
def self.all_javascripts
|
|
51
|
-
|
|
61
|
+
bridges.keys.collect do |bridge_name|
|
|
52
62
|
bridge = self[bridge_name]
|
|
53
|
-
bridge.javascripts if bridge
|
|
63
|
+
bridge.javascripts if bridge && bridge.install?
|
|
54
64
|
end.compact.flatten
|
|
55
65
|
end
|
|
56
66
|
end
|
|
57
67
|
end
|
|
58
68
|
|
|
59
|
-
Dir[File.join(File.dirname(__FILE__),
|
|
69
|
+
Dir[File.join(File.dirname(__FILE__), 'bridges/*.rb')].each do |bridge|
|
|
60
70
|
ActiveScaffold::Bridges.register bridge unless bridge == __FILE__
|
|
61
71
|
end
|
|
@@ -2,10 +2,10 @@ ActiveScaffold::Config::Core.class_eval do
|
|
|
2
2
|
def initialize_with_ancestry(model_id)
|
|
3
3
|
initialize_without_ancestry(model_id)
|
|
4
4
|
|
|
5
|
-
return unless
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
return unless model.respond_to? :ancestry_column
|
|
6
|
+
|
|
7
|
+
columns << :parent_id
|
|
8
|
+
columns[:parent_id].form_ui = :ancestry
|
|
9
9
|
update.columns.exclude :ancestry
|
|
10
10
|
create.columns.exclude :ancestry, :parent_id
|
|
11
11
|
list.columns.exclude :ancestry, :parent_id
|
|
@@ -19,8 +19,8 @@ module ActiveScaffold::Bridges
|
|
|
19
19
|
module FormColumnHelpers
|
|
20
20
|
def active_scaffold_input_ancestry(column, options)
|
|
21
21
|
record = options[:object]
|
|
22
|
-
ActiveSupport::Deprecation.warn
|
|
23
|
-
record ||= @record # TODO Remove when relying on @record is removed
|
|
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
24
|
|
|
25
25
|
select_options = []
|
|
26
26
|
select_control_options = {:selected => record.parent_id}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class ActiveScaffold::Bridges::Bitfields < ActiveScaffold::DataStructures::Bridge
|
|
2
2
|
def self.install
|
|
3
|
-
require File.join(File.dirname(__FILE__),
|
|
3
|
+
require File.join(File.dirname(__FILE__), 'bitfields/bitfields_bridge')
|
|
4
4
|
ActiveScaffold::Config::Core.send :include, ActiveScaffold::Bridges::Bitfields::BitfieldsBridge
|
|
5
5
|
end
|
|
6
6
|
end
|
|
@@ -4,31 +4,30 @@ module ActiveScaffold
|
|
|
4
4
|
module BitfieldsBridge
|
|
5
5
|
def initialize_with_bitfields(model_id)
|
|
6
6
|
initialize_without_bitfields(model_id)
|
|
7
|
-
return unless
|
|
7
|
+
return unless model.respond_to?(:bitfields) && model.bitfields.present?
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
model.bitfields.each do |_, options|
|
|
10
|
+
columns << options.keys
|
|
11
11
|
options.each do |column, value|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
columns[column].form_ui = :checkbox
|
|
13
|
+
columns[column].weight = 1000 + value.to_s(2).size
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
def _load_action_columns_with_bitfields
|
|
19
|
-
|
|
19
|
+
model.bitfields.each do |column_name, options|
|
|
20
20
|
columns = options.keys.sort_by { |column| self.columns[column].weight }
|
|
21
21
|
[:create, :update, :show, :subform].each do |action|
|
|
22
|
-
if
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
if actions.include? action
|
|
23
|
+
send(action).columns.exclude column_name
|
|
24
|
+
send(action).columns.add_subgroup(column_name) { |group| group.add *columns }
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
|
-
end if
|
|
28
|
-
|
|
27
|
+
end if model.respond_to?(:bitfields) && model.bitfields.present?
|
|
28
|
+
|
|
29
29
|
_load_action_columns_without_bitfields
|
|
30
30
|
end
|
|
31
|
-
|
|
32
31
|
|
|
33
32
|
def self.included(base)
|
|
34
33
|
base.alias_method_chain :initialize, :bitfields
|
|
@@ -2,14 +2,14 @@ class ActiveScaffold::Bridges::CalendarDateSelect < ActiveScaffold::DataStructur
|
|
|
2
2
|
def self.install
|
|
3
3
|
# check to see if the old bridge was installed. If so, warn them
|
|
4
4
|
# we can detect this by checking to see if the bridge was installed before calling this code
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
if ActiveScaffold::Config::Core.method_defined?(:initialize_with_calendar_date_select)
|
|
7
|
-
raise
|
|
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
8
|
end
|
|
9
|
-
|
|
10
|
-
require File.join(File.dirname(__FILE__),
|
|
9
|
+
|
|
10
|
+
require File.join(File.dirname(__FILE__), 'calendar_date_select/as_cds_bridge.rb')
|
|
11
11
|
end
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
def self.install?
|
|
14
14
|
super && ActiveScaffold.js_framework == :prototype
|
|
15
15
|
end
|
|
@@ -1,25 +1,20 @@
|
|
|
1
1
|
module ActiveScaffold::Config
|
|
2
2
|
class Core < Base
|
|
3
|
-
|
|
4
3
|
def initialize_with_calendar_date_select(model_id)
|
|
5
4
|
initialize_without_calendar_date_select(model_id)
|
|
6
|
-
|
|
7
|
-
calendar_date_select_fields =
|
|
5
|
+
|
|
6
|
+
calendar_date_select_fields = model.columns.collect { |c| c.name.to_sym if [:date, :datetime].include?(c.type) }.compact
|
|
8
7
|
# check to see if file column was used on the model
|
|
9
8
|
return if calendar_date_select_fields.empty?
|
|
10
|
-
|
|
9
|
+
|
|
11
10
|
# automatically set the forum_ui to a file column
|
|
12
|
-
calendar_date_select_fields.each{|field|
|
|
13
|
-
self.columns[field].form_ui = :calendar_date_select
|
|
14
|
-
}
|
|
11
|
+
calendar_date_select_fields.each { |field| columns[field].form_ui = :calendar_date_select }
|
|
15
12
|
end
|
|
16
|
-
|
|
13
|
+
|
|
17
14
|
alias_method_chain :initialize, :calendar_date_select
|
|
18
|
-
|
|
19
15
|
end
|
|
20
16
|
end
|
|
21
17
|
|
|
22
|
-
|
|
23
18
|
module ActiveScaffold
|
|
24
19
|
module Bridges
|
|
25
20
|
class CalendarDateSelect
|
|
@@ -27,10 +22,10 @@ module ActiveScaffold
|
|
|
27
22
|
module FormColumnHelpers
|
|
28
23
|
def active_scaffold_input_calendar_date_select(column, options)
|
|
29
24
|
options[:class] = "#{options[:class]} text-input".strip
|
|
30
|
-
calendar_date_select(
|
|
31
|
-
end
|
|
25
|
+
calendar_date_select('record', column.name, options.merge(column.options))
|
|
26
|
+
end
|
|
32
27
|
end
|
|
33
|
-
|
|
28
|
+
|
|
34
29
|
module SearchColumnHelpers
|
|
35
30
|
def active_scaffold_search_date_bridge_calendar_control(column, options, current_search, name)
|
|
36
31
|
if current_search.is_a? Hash
|
|
@@ -38,13 +33,15 @@ module ActiveScaffold
|
|
|
38
33
|
else
|
|
39
34
|
value = current_search
|
|
40
35
|
end
|
|
41
|
-
calendar_date_select(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
36
|
+
calendar_date_select(
|
|
37
|
+
'record', column.name,
|
|
38
|
+
:name => "#{options[:name]}[#{name}]",
|
|
39
|
+
:value => (value ? l(value) : nil),
|
|
40
|
+
:class => 'text-input',
|
|
41
|
+
:id => "#{options[:id]}_#{name}",
|
|
42
|
+
:time => column_datetime?(column) ? true : false,
|
|
43
|
+
:style => (options[:show].nil? || options[:show]) ? nil : 'display: none'
|
|
44
|
+
)
|
|
48
45
|
end
|
|
49
46
|
end
|
|
50
47
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class ActiveScaffold::Bridges::Cancan < ActiveScaffold::DataStructures::Bridge
|
|
2
2
|
def self.install
|
|
3
|
-
require File.join(File.dirname(__FILE__),
|
|
3
|
+
require File.join(File.dirname(__FILE__), 'cancan', 'cancan_bridge.rb')
|
|
4
4
|
|
|
5
5
|
ActiveScaffold::Core::ClassMethods.send :include, ActiveScaffold::Bridges::Cancan::ClassMethods
|
|
6
6
|
ActiveScaffold::Actions::Core.send :include, ActiveScaffold::Bridges::Cancan::Actions::Core
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Allow users to easily define aliases for AS actions.
|
|
2
2
|
# Ability#as_action_aliases should be called by the user in his ability class
|
|
3
|
-
#
|
|
3
|
+
#
|
|
4
4
|
# class Ability < CanCan::Ability
|
|
5
5
|
# def initialize(user)
|
|
6
6
|
# as_action_aliases
|
|
@@ -19,7 +19,6 @@ end
|
|
|
19
19
|
|
|
20
20
|
module ActiveScaffold::Bridges
|
|
21
21
|
class Cancan
|
|
22
|
-
|
|
23
22
|
# controller level authorization
|
|
24
23
|
# As already has callbacks to ensure authorization at controller method via "authorization_method"
|
|
25
24
|
# but let's include this too, just in case, no sure how performance is affected tough :TODO benchmark
|
|
@@ -70,7 +69,7 @@ module ActiveScaffold::Bridges
|
|
|
70
69
|
# because the object may change (someone may log in or out). So we give ActiveRecord a proc that ties to the
|
|
71
70
|
# current_ability_method on this ApplicationController.
|
|
72
71
|
def assign_current_ability_to_models
|
|
73
|
-
::ActiveRecord::Base.current_ability_proc = proc {send(:current_ability)}
|
|
72
|
+
::ActiveRecord::Base.current_ability_proc = proc { send(:current_ability) }
|
|
74
73
|
end
|
|
75
74
|
end
|
|
76
75
|
|
|
@@ -82,6 +81,7 @@ module ActiveScaffold::Bridges
|
|
|
82
81
|
def current_ability_proc
|
|
83
82
|
Thread.current[:current_ability_proc]
|
|
84
83
|
end
|
|
84
|
+
|
|
85
85
|
def current_ability_proc=(value)
|
|
86
86
|
Thread.current[:current_ability_proc] = value
|
|
87
87
|
end
|
|
@@ -93,11 +93,12 @@ module ActiveScaffold::Bridges
|
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
# Instance-level access to the current ability
|
|
96
|
-
def current_ability
|
|
96
|
+
def current_ability
|
|
97
|
+
self.class.current_ability
|
|
98
|
+
end
|
|
97
99
|
end
|
|
98
100
|
end
|
|
99
101
|
|
|
100
|
-
|
|
101
102
|
# plug into AS#authorized_for calls
|
|
102
103
|
module ActiveRecord
|
|
103
104
|
extend ActiveSupport::Concern
|
|
@@ -119,7 +120,7 @@ module ActiveScaffold::Bridges
|
|
|
119
120
|
# to allow access cancan must allow both :crud_type and :action
|
|
120
121
|
# if cancan says "no", it delegates to default AS behavior
|
|
121
122
|
def authorized_for_with_cancan?(options = {})
|
|
122
|
-
raise InvalidArgument if options[:crud_type].blank?
|
|
123
|
+
raise InvalidArgument if options[:crud_type].blank? && options[:action].blank?
|
|
123
124
|
if current_ability.present?
|
|
124
125
|
crud_type_result = options[:crud_type].nil? ? true : current_ability.can?(options[:crud_type], self)
|
|
125
126
|
action_result = options[:action].nil? ? true : current_ability.can?(options[:action].to_sym, self)
|
|
@@ -127,11 +128,9 @@ module ActiveScaffold::Bridges
|
|
|
127
128
|
crud_type_result, action_result = false, false
|
|
128
129
|
end
|
|
129
130
|
default_result = authorized_for_without_cancan?(options)
|
|
130
|
-
|
|
131
|
-
return result
|
|
131
|
+
(crud_type_result && action_result) || default_result
|
|
132
132
|
end
|
|
133
133
|
end
|
|
134
134
|
end
|
|
135
|
-
|
|
136
135
|
end
|
|
137
136
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
class ActiveScaffold::Bridges::Carrierwave < ActiveScaffold::DataStructures::Bridge
|
|
2
2
|
def self.install
|
|
3
|
-
require File.join(File.dirname(__FILE__),
|
|
4
|
-
require File.join(File.dirname(__FILE__),
|
|
5
|
-
require File.join(File.dirname(__FILE__),
|
|
6
|
-
require File.join(File.dirname(__FILE__),
|
|
3
|
+
require File.join(File.dirname(__FILE__), 'carrierwave/form_ui')
|
|
4
|
+
require File.join(File.dirname(__FILE__), 'carrierwave/list_ui')
|
|
5
|
+
require File.join(File.dirname(__FILE__), 'carrierwave/carrierwave_bridge_helpers')
|
|
6
|
+
require File.join(File.dirname(__FILE__), 'carrierwave/carrierwave_bridge')
|
|
7
7
|
ActiveScaffold::Config::Core.send :include, ActiveScaffold::Bridges::Carrierwave::CarrierwaveBridge
|
|
8
8
|
end
|
|
9
9
|
def self.install?
|
|
@@ -4,12 +4,12 @@ module ActiveScaffold
|
|
|
4
4
|
module CarrierwaveBridge
|
|
5
5
|
def initialize_with_carrierwave(model_id)
|
|
6
6
|
initialize_without_carrierwave(model_id)
|
|
7
|
-
return unless
|
|
7
|
+
return unless model.respond_to?(:uploaders) && model.uploaders.present?
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
update.multipart = true
|
|
10
|
+
create.multipart = true
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
model.uploaders.keys.each do |field|
|
|
13
13
|
configure_carrierwave_field(field.to_sym)
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -19,11 +19,12 @@ module ActiveScaffold
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
private
|
|
22
|
+
|
|
22
23
|
def configure_carrierwave_field(field)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
columns << field
|
|
25
|
+
columns[field].form_ui ||= :carrierwave # :TODO thumbnail
|
|
26
|
+
columns[field].params.add "#{field}_cache"
|
|
27
|
+
columns[field].params.add "remove_#{field}"
|
|
27
28
|
end
|
|
28
29
|
end
|
|
29
30
|
end
|
|
@@ -3,8 +3,8 @@ module ActiveScaffold
|
|
|
3
3
|
module FormColumnHelpers
|
|
4
4
|
def active_scaffold_input_carrierwave(column, options)
|
|
5
5
|
record = options[:object]
|
|
6
|
-
ActiveSupport::Deprecation.warn
|
|
7
|
-
record ||= @record # TODO Remove when relying on @record is removed
|
|
6
|
+
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
|
|
7
|
+
record ||= @record # TODO: Remove when relying on @record is removed
|
|
8
8
|
options = active_scaffold_input_text_options(options.merge(column.options))
|
|
9
9
|
|
|
10
10
|
carrierwave = record.send("#{column.name}")
|
|
@@ -23,22 +23,23 @@ module ActiveScaffold
|
|
|
23
23
|
|
|
24
24
|
case ActiveScaffold.js_framework
|
|
25
25
|
when :jquery
|
|
26
|
-
js_remove_file_code = "jQuery(this).prev('input#remove_#{options[:id]}').val('true'); jQuery(this).parent().hide().next().show(); return false;"
|
|
27
|
-
js_dont_remove_file_code = "jQuery(this).parents('div.carrierwave_controls').find('input#remove_#{options[:id]}').val('false'); return false;"
|
|
26
|
+
js_remove_file_code = "jQuery(this).prev('input#remove_#{options[:id]}').val('true'); jQuery(this).parent().hide().next().show(); return false;"
|
|
27
|
+
js_dont_remove_file_code = "jQuery(this).parents('div.carrierwave_controls').find('input#remove_#{options[:id]}').val('false'); return false;"
|
|
28
28
|
when :prototype
|
|
29
|
-
js_remove_file_code = "$(this).previous('input#remove_#{options[:id]}').value='true'; $(this).up().hide().next().show(); return false;"
|
|
30
|
-
js_dont_remove_file_code = "$(this).up('div.carrierwave_controls').down('input#remove_#{options[:id]}').value='false'; return false;"
|
|
29
|
+
js_remove_file_code = "$(this).previous('input#remove_#{options[:id]}').value='true'; $(this).up().hide().next().show(); return false;"
|
|
30
|
+
js_dont_remove_file_code = "$(this).up('div.carrierwave_controls').down('input#remove_#{options[:id]}').value='false'; return false;"
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
input = file_field(:record, column.name, options.merge(:onchange => js_dont_remove_file_code))
|
|
34
|
-
content_tag(
|
|
34
|
+
content_tag(
|
|
35
|
+
:div,
|
|
35
36
|
content_tag(:div, (
|
|
36
|
-
get_column_value(record, column) +
|
|
37
|
+
get_column_value(record, column) + ' | ' +
|
|
37
38
|
hidden_field(:record, "#{column.name}_cache", cache_field_options) +
|
|
38
39
|
hidden_field(:record, "remove_#{column.name}", remove_field_options) +
|
|
39
|
-
content_tag(:a, as_(:remove_file),
|
|
40
|
+
content_tag(:a, as_(:remove_file), :href => '#', :onclick => js_remove_file_code)
|
|
40
41
|
).html_safe
|
|
41
|
-
) + content_tag(:div, input, :style =>
|
|
42
|
+
) + content_tag(:div, input, :style => 'display: none'),
|
|
42
43
|
:class => 'carrierwave_controls'
|
|
43
44
|
)
|
|
44
45
|
else
|
|
@@ -3,13 +3,14 @@ module ActiveScaffold
|
|
|
3
3
|
module ListColumnHelpers
|
|
4
4
|
def active_scaffold_column_carrierwave(record, column)
|
|
5
5
|
carrierwave = record.send("#{column.name}")
|
|
6
|
-
return nil
|
|
6
|
+
return nil if carrierwave.file.blank?
|
|
7
7
|
thumbnail_style = ActiveScaffold::Bridges::Carrierwave::CarrierwaveBridgeHelpers.thumbnail_style
|
|
8
|
-
content =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
content =
|
|
9
|
+
if carrierwave.versions.keys.include?(thumbnail_style)
|
|
10
|
+
image_tag(carrierwave.url(thumbnail_style), :border => 0).html_safe
|
|
11
|
+
else
|
|
12
|
+
record.send(record.send(:_mounter, column.name).send(:serialization_column))
|
|
13
|
+
end
|
|
13
14
|
link_to(content, carrierwave.url, :target => '_blank')
|
|
14
15
|
end
|
|
15
16
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
class ActiveScaffold::Bridges::Chosen < ActiveScaffold::DataStructures::Bridge
|
|
2
2
|
def self.install
|
|
3
|
-
require File.join(File.dirname(__FILE__),
|
|
3
|
+
require File.join(File.dirname(__FILE__), 'chosen/helpers.rb')
|
|
4
4
|
end
|
|
5
5
|
def self.install?
|
|
6
6
|
super && [:jquery, :prototype].include?(ActiveScaffold.js_framework)
|