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.
Files changed (216) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +39 -0
  3. data/{LICENSE → LICENSE.md} +1 -1
  4. data/README.md +27 -19
  5. data/app/assets/javascripts/active_scaffold.js.erb +1 -1
  6. data/app/assets/javascripts/jquery/active_scaffold.js +95 -43
  7. data/app/assets/javascripts/jquery/tiny_mce_bridge.js +30 -6
  8. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +11 -1
  9. data/app/assets/stylesheets/active_scaffold_colors.scss +2 -2
  10. data/app/assets/stylesheets/active_scaffold_layout.css +36 -28
  11. data/app/views/active_scaffold_overrides/_base_form.html.erb +2 -3
  12. data/app/views/active_scaffold_overrides/_field_search.html.erb +8 -7
  13. data/app/views/active_scaffold_overrides/_form_association.html.erb +9 -9
  14. data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +6 -6
  15. data/app/views/active_scaffold_overrides/_form_association_record.html.erb +52 -50
  16. data/app/views/active_scaffold_overrides/_horizontal_subform.html.erb +1 -1
  17. data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +1 -1
  18. data/app/views/active_scaffold_overrides/_human_conditions.html.erb +3 -1
  19. data/app/views/active_scaffold_overrides/_list_calculations.html.erb +1 -1
  20. data/app/views/active_scaffold_overrides/_list_column_headings.html.erb +2 -0
  21. data/app/views/active_scaffold_overrides/_list_messages.html.erb +5 -3
  22. data/app/views/active_scaffold_overrides/_list_record.html.erb +3 -1
  23. data/app/views/active_scaffold_overrides/_list_with_header.html.erb +9 -9
  24. data/app/views/active_scaffold_overrides/_messages.html.erb +1 -1
  25. data/app/views/active_scaffold_overrides/_refresh_list.js.erb +18 -10
  26. data/app/views/active_scaffold_overrides/_render_field.js.erb +3 -3
  27. data/app/views/active_scaffold_overrides/_search.html.erb +7 -6
  28. data/app/views/active_scaffold_overrides/_show_actions.html.erb +14 -0
  29. data/app/views/active_scaffold_overrides/_show_association.html.erb +1 -1
  30. data/app/views/active_scaffold_overrides/_update_actions.html.erb +6 -2
  31. data/app/views/active_scaffold_overrides/_update_column.js.erb +1 -1
  32. data/app/views/active_scaffold_overrides/_update_form.html.erb +1 -1
  33. data/app/views/active_scaffold_overrides/destroy.js.erb +2 -3
  34. data/app/views/active_scaffold_overrides/edit_associated.js.erb +4 -3
  35. data/app/views/active_scaffold_overrides/on_action_update.js.erb +5 -3
  36. data/app/views/active_scaffold_overrides/on_create.js.erb +4 -4
  37. data/app/views/active_scaffold_overrides/on_update.js.erb +6 -6
  38. data/app/views/active_scaffold_overrides/show.html.erb +6 -0
  39. data/app/views/active_scaffold_overrides/update.html.erb +1 -1
  40. data/app/views/active_scaffold_overrides/update_column.js.erb +1 -1
  41. data/config/brakeman.ignore +26 -0
  42. data/config/brakeman.yml +3 -0
  43. data/config/i18n-tasks.yml +121 -0
  44. data/config/locales/de.yml +81 -70
  45. data/config/locales/en.yml +83 -74
  46. data/config/locales/es.yml +82 -73
  47. data/config/locales/fr.yml +86 -75
  48. data/config/locales/hu.yml +81 -70
  49. data/config/locales/ja.yml +71 -60
  50. data/config/locales/ru.yml +85 -74
  51. data/lib/active_scaffold.rb +3 -0
  52. data/lib/active_scaffold/actions/common_search.rb +11 -7
  53. data/lib/active_scaffold/actions/core.rb +119 -47
  54. data/lib/active_scaffold/actions/create.rb +1 -1
  55. data/lib/active_scaffold/actions/delete.rb +11 -8
  56. data/lib/active_scaffold/actions/field_search.rb +104 -6
  57. data/lib/active_scaffold/actions/list.rb +25 -21
  58. data/lib/active_scaffold/actions/mark.rb +12 -4
  59. data/lib/active_scaffold/actions/nested.rb +26 -26
  60. data/lib/active_scaffold/actions/search.rb +2 -2
  61. data/lib/active_scaffold/actions/show.rb +4 -5
  62. data/lib/active_scaffold/actions/subform.rb +9 -7
  63. data/lib/active_scaffold/actions/update.rb +20 -13
  64. data/lib/active_scaffold/active_record_permissions.rb +24 -5
  65. data/lib/active_scaffold/attribute_params.rb +68 -49
  66. data/lib/active_scaffold/bridges.rb +1 -1
  67. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +15 -19
  68. data/lib/active_scaffold/bridges/bitfields.rb +1 -1
  69. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +10 -14
  70. data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -7
  71. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +19 -22
  72. data/lib/active_scaffold/bridges/cancan.rb +4 -3
  73. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +11 -21
  74. data/lib/active_scaffold/bridges/carrierwave.rb +2 -1
  75. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +2 -6
  76. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +6 -39
  77. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +1 -1
  78. data/lib/active_scaffold/bridges/chosen.rb +4 -1
  79. data/lib/active_scaffold/bridges/chosen/helpers.rb +3 -2
  80. data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +2 -2
  81. data/lib/active_scaffold/bridges/date_picker.rb +3 -0
  82. data/lib/active_scaffold/bridges/date_picker/ext.rb +43 -38
  83. data/lib/active_scaffold/bridges/date_picker/helper.rb +24 -23
  84. data/lib/active_scaffold/bridges/dragonfly.rb +1 -1
  85. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +3 -7
  86. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +3 -25
  87. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +2 -2
  88. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +6 -8
  89. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +1 -1
  90. data/lib/active_scaffold/bridges/file_column/form_ui.rb +0 -2
  91. data/lib/active_scaffold/bridges/file_column/list_ui.rb +2 -1
  92. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +1 -1
  93. data/lib/active_scaffold/bridges/paper_trail/actions.rb +1 -1
  94. data/lib/active_scaffold/bridges/paper_trail/helper.rb +1 -2
  95. data/lib/active_scaffold/bridges/paper_trail/paper_trail_bridge.rb +3 -7
  96. data/lib/active_scaffold/bridges/paperclip.rb +1 -1
  97. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +3 -28
  98. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
  99. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +3 -7
  100. data/lib/active_scaffold/bridges/record_select.rb +2 -0
  101. data/lib/active_scaffold/bridges/record_select/helpers.rb +14 -18
  102. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +4 -8
  103. data/lib/active_scaffold/bridges/shared/date_bridge.rb +20 -20
  104. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +7 -22
  105. data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +14 -14
  106. data/lib/active_scaffold/config/base.rb +9 -6
  107. data/lib/active_scaffold/config/core.rb +30 -21
  108. data/lib/active_scaffold/config/create.rb +2 -1
  109. data/lib/active_scaffold/config/delete.rb +2 -2
  110. data/lib/active_scaffold/config/field_search.rb +9 -3
  111. data/lib/active_scaffold/config/form.rb +4 -4
  112. data/lib/active_scaffold/config/list.rb +27 -23
  113. data/lib/active_scaffold/config/nested.rb +4 -4
  114. data/lib/active_scaffold/config/search.rb +6 -6
  115. data/lib/active_scaffold/config/show.rb +11 -1
  116. data/lib/active_scaffold/config/subform.rb +1 -1
  117. data/lib/active_scaffold/config/update.rb +4 -2
  118. data/lib/active_scaffold/constraints.rb +39 -36
  119. data/lib/active_scaffold/core.rb +36 -15
  120. data/lib/active_scaffold/data_structures/action_columns.rb +14 -9
  121. data/lib/active_scaffold/data_structures/action_link.rb +4 -5
  122. data/lib/active_scaffold/data_structures/action_links.rb +5 -4
  123. data/lib/active_scaffold/data_structures/actions.rb +2 -2
  124. data/lib/active_scaffold/data_structures/association.rb +8 -0
  125. data/lib/active_scaffold/data_structures/association/abstract.rb +147 -0
  126. data/lib/active_scaffold/data_structures/association/active_mongoid.rb +42 -0
  127. data/lib/active_scaffold/data_structures/association/active_record.rb +94 -0
  128. data/lib/active_scaffold/data_structures/association/mongoid.rb +45 -0
  129. data/lib/active_scaffold/data_structures/bridge.rb +3 -6
  130. data/lib/active_scaffold/data_structures/column.rb +100 -82
  131. data/lib/active_scaffold/data_structures/columns.rb +21 -3
  132. data/lib/active_scaffold/data_structures/nested_info.rb +22 -37
  133. data/lib/active_scaffold/data_structures/set.rb +4 -4
  134. data/lib/active_scaffold/data_structures/sorting.rb +29 -15
  135. data/lib/active_scaffold/engine.rb +3 -1
  136. data/lib/active_scaffold/extensions/action_controller_rendering.rb +10 -5
  137. data/lib/active_scaffold/extensions/action_view_rendering.rb +65 -59
  138. data/lib/active_scaffold/extensions/left_outer_joins.rb +48 -53
  139. data/lib/active_scaffold/extensions/localize.rb +3 -4
  140. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +7 -11
  141. data/lib/active_scaffold/extensions/paginator_extensions.rb +20 -18
  142. data/lib/active_scaffold/extensions/routing_mapper.rb +104 -40
  143. data/lib/active_scaffold/extensions/to_label.rb +1 -1
  144. data/lib/active_scaffold/extensions/unsaved_associated.rb +4 -13
  145. data/lib/active_scaffold/extensions/unsaved_record.rb +12 -1
  146. data/lib/active_scaffold/finder.rb +200 -134
  147. data/lib/active_scaffold/helpers/action_link_helpers.rb +398 -0
  148. data/lib/active_scaffold/helpers/association_helpers.rb +12 -30
  149. data/lib/active_scaffold/helpers/controller_helpers.rb +74 -24
  150. data/lib/active_scaffold/helpers/form_column_helpers.rb +205 -112
  151. data/lib/active_scaffold/helpers/human_condition_helpers.rb +21 -11
  152. data/lib/active_scaffold/helpers/id_helpers.rb +1 -1
  153. data/lib/active_scaffold/helpers/list_column_helpers.rb +117 -39
  154. data/lib/active_scaffold/helpers/pagination_helpers.rb +11 -14
  155. data/lib/active_scaffold/helpers/search_column_helpers.rb +69 -32
  156. data/lib/active_scaffold/helpers/show_column_helpers.rb +9 -3
  157. data/lib/active_scaffold/helpers/view_helpers.rb +41 -426
  158. data/lib/active_scaffold/orm_checks.rb +109 -0
  159. data/lib/active_scaffold/paginator.rb +1 -1
  160. data/lib/active_scaffold/responds_to_parent.rb +12 -10
  161. data/lib/active_scaffold/tableless.rb +81 -43
  162. data/lib/active_scaffold/version.rb +2 -2
  163. data/lib/generators/active_scaffold/controller_generator.rb +49 -0
  164. data/lib/generators/active_scaffold/install_generator.rb +45 -0
  165. data/lib/generators/active_scaffold/resource_generator.rb +56 -0
  166. data/lib/generators/{active_scaffold_controller/templates → templates}/controller.rb +0 -0
  167. data/lib/generators/{active_scaffold_controller/templates → templates}/helper.rb +0 -0
  168. data/shoulda_macros/macros.rb +3 -3
  169. data/test/active_scaffold_config_mock.rb +33 -0
  170. data/test/bridges/bridge_test.rb +9 -9
  171. data/test/bridges/date_picker_test.rb +3 -1
  172. data/test/bridges/paper_trail_test.rb +2 -3
  173. data/test/bridges/paperclip_test.rb +21 -10
  174. data/test/bridges/tiny_mce_test.rb +20 -21
  175. data/test/class_with_finder.rb +42 -0
  176. data/test/company.rb +6 -4
  177. data/test/config/core_test.rb +1 -1
  178. data/test/config/create_test.rb +1 -1
  179. data/test/config/list_test.rb +3 -3
  180. data/test/config/update_test.rb +3 -3
  181. data/test/data_structures/action_columns_test.rb +3 -3
  182. data/test/data_structures/association_column_test.rb +5 -5
  183. data/test/data_structures/column_test.rb +14 -14
  184. data/test/data_structures/columns_test.rb +2 -2
  185. data/test/data_structures/set_test.rb +2 -2
  186. data/test/data_structures/sorting_test.rb +6 -4
  187. data/test/extensions/active_record_test.rb +1 -1
  188. data/test/extensions/routing_mapper_test.rb +64 -13
  189. data/test/helpers/form_column_helpers_test.rb +6 -6
  190. data/test/helpers/list_column_helpers_test.rb +9 -5
  191. data/test/helpers/pagination_helpers_test.rb +1 -0
  192. data/test/misc/active_record_permissions_test.rb +18 -1
  193. data/test/misc/attribute_params_test.rb +26 -17
  194. data/test/misc/calculation_test.rb +8 -31
  195. data/test/misc/configurable_test.rb +3 -2
  196. data/test/misc/constraints_test.rb +33 -22
  197. data/test/misc/convert_numbers_format_test.rb +28 -10
  198. data/test/misc/finder_test.rb +6 -29
  199. data/test/misc/parse_datetime_test.rb +160 -0
  200. data/test/misc/render_test.rb +1 -1
  201. data/test/misc/tableless_test.rb +24 -0
  202. data/test/mock_app/app/models/building.rb +2 -1
  203. data/test/mock_app/config.ru +1 -1
  204. data/test/mock_app/config/environments/test.rb +1 -1
  205. data/test/mock_app/config/routes.rb +11 -3
  206. data/test/model_stub.rb +11 -6
  207. data/test/run_all.rb +1 -1
  208. data/test/test_helper.rb +19 -4
  209. metadata +42 -23
  210. data/lib/active_scaffold/data_structures/error_message.rb +0 -22
  211. data/lib/active_scaffold/extensions/reverse_associations.rb +0 -119
  212. data/lib/generators/active_scaffold/USAGE +0 -29
  213. data/lib/generators/active_scaffold/active_scaffold_generator.rb +0 -21
  214. data/lib/generators/active_scaffold_controller/USAGE +0 -19
  215. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +0 -29
  216. data/test/data_structures/error_message_test.rb +0 -25
@@ -29,7 +29,7 @@ module ActiveScaffold
29
29
  bridge
30
30
  end
31
31
  class << self
32
- alias_method :[], :load
32
+ alias [] load
33
33
  end
34
34
 
35
35
  def self.run_all
@@ -1,32 +1,27 @@
1
- ActiveScaffold::Config::Core.class_eval do
2
- def initialize_with_ancestry(model_id)
3
- initialize_without_ancestry(model_id)
1
+ module ActiveScaffold::Bridges
2
+ class Ancestry
3
+ module AncestryBridge
4
+ def initialize(model_id)
5
+ super(model_id)
4
6
 
5
- return unless model.respond_to? :ancestry_column
7
+ return unless model.respond_to? :ancestry_column
6
8
 
7
- columns << :parent_id
8
- columns[:parent_id].form_ui = :ancestry
9
- update.columns.exclude :ancestry
10
- create.columns.exclude :ancestry, :parent_id
11
- list.columns.exclude :ancestry, :parent_id
12
- end
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 :include, ActiveScaffold::Bridges::Bitfields::BitfieldsBridge
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 initialize_with_bitfields(model_id)
6
- initialize_without_bitfields(model_id)
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 _load_action_columns_with_bitfields
19
- model.bitfields.each do |column_name, options|
20
- columns = options.keys.sort_by { |column| self.columns[column].weight }
21
- [:create, :update, :show, :subform].each do |action|
22
- if actions.include? action
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 if model.respond_to?(:bitfields) && model.bitfields.present?
32
-
33
- _load_action_columns_without_bitfields
34
- end
32
+ end
35
33
 
36
- def self.included(base)
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
- value = controller.class.condition_value_for_datetime(column, current_search[name], column.column.type == :date ? :to_date : :to_time)
33
- else
34
- value = current_search
35
- end
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 :include, ActiveScaffold::Bridges::Cancan::ClassMethods
6
- ActiveScaffold::Actions::Core.send :include, ActiveScaffold::Bridges::Cancan::Actions::Core
7
- ActiveScaffold::Actions::Nested.send :include, ActiveScaffold::Bridges::Cancan::Actions::Core
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
- extend ActiveSupport::Concern
27
- included do
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 beginning_of_chain_with_cancan
55
- beginning_of_chain_without_cancan.accessible_by(current_ability)
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
- prepend_before_filter :assign_current_ability_to_models
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
- extend SecurityMethods
107
- include SecurityMethods
108
- alias_method_chain :authorized_for?, :cancan
97
+ prepend SecurityMethods
109
98
  class << self
110
- alias_method_chain :authorized_for?, :cancan
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 authorized_for_with_cancan?(options = {})
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
- default_result = authorized_for_without_cancan?(options)
131
- (crud_type_result && action_result) || default_result
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 :include, ActiveScaffold::Bridges::Carrierwave::CarrierwaveBridge
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 initialize_with_carrierwave(model_id)
6
- initialize_without_carrierwave(model_id)
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
- 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
- options = active_scaffold_input_text_options(options.merge(column.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
- :name => options[:name].gsub(/\[#{column.name}\]$/, "[#{column.name}_cache]"),
21
- :id => options[:id] + '_cache'
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("#{column.name}")
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 && [:jquery, :prototype].include?(ActiveScaffold.js_framework)
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.plural_association?
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
- html_options[:name] = "#{html_options[:name]}[]" if html_options[:multiple] == true && !html_options[:name].to_s.ends_with?('[]')
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
- options[:name] += '[]' if options[:multiple]
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] = lambda { |country| [country.translations[I18n.locale.to_s] || country.name, country.name] }
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') {