active_scaffold_san 3.0.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.
- data/.autotest +27 -0
- data/.document +5 -0
- data/CHANGELOG +179 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +20 -0
- data/MIT-LICENSE +20 -0
- data/README +69 -0
- data/Rakefile +53 -0
- data/active_scaffold_vho.gemspec +388 -0
- data/frontends/default/images/add.gif +0 -0
- data/frontends/default/images/arrow_down.gif +0 -0
- data/frontends/default/images/arrow_up.gif +0 -0
- data/frontends/default/images/close.gif +0 -0
- data/frontends/default/images/config.png +0 -0
- data/frontends/default/images/cross.png +0 -0
- data/frontends/default/images/gears.png +0 -0
- data/frontends/default/images/indicator-small.gif +0 -0
- data/frontends/default/images/indicator.gif +0 -0
- data/frontends/default/images/magnifier.png +0 -0
- data/frontends/default/javascripts/jquery/active_scaffold.js +1004 -0
- data/frontends/default/javascripts/jquery/jquery.editinplace.js +743 -0
- data/frontends/default/javascripts/prototype/active_scaffold.js +1003 -0
- data/frontends/default/javascripts/prototype/dhtml_history.js +867 -0
- data/frontends/default/javascripts/prototype/form_enhancements.js +117 -0
- data/frontends/default/javascripts/prototype/rico_corner.js +370 -0
- data/frontends/default/stylesheets/stylesheet-ie.css +35 -0
- data/frontends/default/stylesheets/stylesheet.css +973 -0
- data/frontends/default/views/_action_group.html.erb +20 -0
- data/frontends/default/views/_add_existing_form.html.erb +30 -0
- data/frontends/default/views/_base_form.html.erb +51 -0
- data/frontends/default/views/_create_form.html.erb +8 -0
- data/frontends/default/views/_create_form_on_list.html.erb +6 -0
- data/frontends/default/views/_field_search.html.erb +32 -0
- data/frontends/default/views/_form.html.erb +24 -0
- data/frontends/default/views/_form_association.html.erb +19 -0
- data/frontends/default/views/_form_association_footer.html.erb +40 -0
- data/frontends/default/views/_form_attribute.html.erb +15 -0
- data/frontends/default/views/_form_hidden_attribute.html.erb +2 -0
- data/frontends/default/views/_form_messages.html.erb +5 -0
- data/frontends/default/views/_horizontal_subform.html.erb +29 -0
- data/frontends/default/views/_horizontal_subform_header.html.erb +10 -0
- data/frontends/default/views/_horizontal_subform_record.html.erb +37 -0
- data/frontends/default/views/_human_conditions.html.erb +1 -0
- data/frontends/default/views/_list.html.erb +18 -0
- data/frontends/default/views/_list_actions.html.erb +15 -0
- data/frontends/default/views/_list_calculations.html.erb +16 -0
- data/frontends/default/views/_list_column_headings.html.erb +12 -0
- data/frontends/default/views/_list_header.html.erb +10 -0
- data/frontends/default/views/_list_inline_adapter.html.erb +10 -0
- data/frontends/default/views/_list_messages.html.erb +32 -0
- data/frontends/default/views/_list_pagination.html.erb +11 -0
- data/frontends/default/views/_list_pagination_links.html.erb +9 -0
- data/frontends/default/views/_list_record.html.erb +14 -0
- data/frontends/default/views/_list_record_columns.html.erb +8 -0
- data/frontends/default/views/_list_with_header.html.erb +32 -0
- data/frontends/default/views/_messages.html.erb +10 -0
- data/frontends/default/views/_render_field.js.rjs +10 -0
- data/frontends/default/views/_row.html.erb +12 -0
- data/frontends/default/views/_search.html.erb +34 -0
- data/frontends/default/views/_search_attribute.html.erb +10 -0
- data/frontends/default/views/_show.html.erb +8 -0
- data/frontends/default/views/_show_columns.html.erb +15 -0
- data/frontends/default/views/_update_actions.html.erb +9 -0
- data/frontends/default/views/_update_form.html.erb +6 -0
- data/frontends/default/views/_vertical_subform.html.erb +12 -0
- data/frontends/default/views/_vertical_subform_record.html.erb +38 -0
- data/frontends/default/views/action_confirmation.html.erb +13 -0
- data/frontends/default/views/add_existing.js.rjs +17 -0
- data/frontends/default/views/add_existing_form.html.erb +5 -0
- data/frontends/default/views/create.html.erb +5 -0
- data/frontends/default/views/delete.html.erb +13 -0
- data/frontends/default/views/destroy.js.rjs +23 -0
- data/frontends/default/views/edit_associated.js.rjs +11 -0
- data/frontends/default/views/field_search.html.erb +5 -0
- data/frontends/default/views/form_messages.js.rjs +1 -0
- data/frontends/default/views/list.html.erb +1 -0
- data/frontends/default/views/list.js.rjs +1 -0
- data/frontends/default/views/on_action_update.js.rjs +8 -0
- data/frontends/default/views/on_create.js.rjs +41 -0
- data/frontends/default/views/on_mark_all.js.rjs +4 -0
- data/frontends/default/views/on_update.js.rjs +28 -0
- data/frontends/default/views/search.html.erb +5 -0
- data/frontends/default/views/show.html.erb +5 -0
- data/frontends/default/views/update.html.erb +8 -0
- data/frontends/default/views/update_column.js.rjs +13 -0
- data/frontends/default/views/update_row.js.rjs +1 -0
- data/init.rb +8 -0
- data/lib/active_scaffold.rb +360 -0
- data/lib/active_scaffold/actions/common_search.rb +22 -0
- data/lib/active_scaffold/actions/core.rb +180 -0
- data/lib/active_scaffold/actions/create.rb +149 -0
- data/lib/active_scaffold/actions/delete.rb +75 -0
- data/lib/active_scaffold/actions/field_search.rb +82 -0
- data/lib/active_scaffold/actions/list.rb +184 -0
- data/lib/active_scaffold/actions/mark.rb +63 -0
- data/lib/active_scaffold/actions/nested.rb +250 -0
- data/lib/active_scaffold/actions/search.rb +47 -0
- data/lib/active_scaffold/actions/show.rb +61 -0
- data/lib/active_scaffold/actions/subform.rb +27 -0
- data/lib/active_scaffold/actions/update.rb +151 -0
- data/lib/active_scaffold/active_record_permissions.rb +134 -0
- data/lib/active_scaffold/attribute_params.rb +211 -0
- data/lib/active_scaffold/bridges/ancestry/bridge.rb +5 -0
- data/lib/active_scaffold/bridges/ancestry/lib/ancestry_bridge.rb +39 -0
- data/lib/active_scaffold/bridges/bridge.rb +59 -0
- data/lib/active_scaffold/bridges/calendar_date_select/bridge.rb +16 -0
- data/lib/active_scaffold/bridges/calendar_date_select/lib/as_cds_bridge.rb +83 -0
- data/lib/active_scaffold/bridges/cancan/bridge.rb +12 -0
- data/lib/active_scaffold/bridges/cancan/lib/cancan_bridge.rb +107 -0
- data/lib/active_scaffold/bridges/carrierwave/bridge.rb +9 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +33 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +12 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/form_ui.rb +45 -0
- data/lib/active_scaffold/bridges/carrierwave/lib/list_ui.rb +17 -0
- data/lib/active_scaffold/bridges/date_picker/bridge.rb +24 -0
- data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +225 -0
- data/lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js +22 -0
- data/lib/active_scaffold/bridges/file_column/bridge.rb +11 -0
- data/lib/active_scaffold/bridges/file_column/lib/as_file_column_bridge.rb +46 -0
- data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +59 -0
- data/lib/active_scaffold/bridges/file_column/lib/form_ui.rb +37 -0
- data/lib/active_scaffold/bridges/file_column/lib/list_ui.rb +26 -0
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +43 -0
- data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +9 -0
- data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +15 -0
- data/lib/active_scaffold/bridges/paperclip/bridge.rb +12 -0
- data/lib/active_scaffold/bridges/paperclip/lib/form_ui.rb +27 -0
- data/lib/active_scaffold/bridges/paperclip/lib/list_ui.rb +16 -0
- data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +38 -0
- data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +26 -0
- data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +5 -0
- data/lib/active_scaffold/bridges/semantic_attributes/lib/semantic_attributes_bridge.rb +20 -0
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +209 -0
- data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +5 -0
- data/lib/active_scaffold/bridges/tiny_mce/lib/tiny_mce_bridge.rb +61 -0
- data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +8 -0
- data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +21 -0
- data/lib/active_scaffold/config/base.rb +62 -0
- data/lib/active_scaffold/config/core.rb +220 -0
- data/lib/active_scaffold/config/create.rb +51 -0
- data/lib/active_scaffold/config/delete.rb +34 -0
- data/lib/active_scaffold/config/field_search.rb +75 -0
- data/lib/active_scaffold/config/form.rb +47 -0
- data/lib/active_scaffold/config/list.rb +174 -0
- data/lib/active_scaffold/config/mark.rb +22 -0
- data/lib/active_scaffold/config/nested.rb +44 -0
- data/lib/active_scaffold/config/search.rb +69 -0
- data/lib/active_scaffold/config/show.rb +35 -0
- data/lib/active_scaffold/config/subform.rb +35 -0
- data/lib/active_scaffold/config/update.rb +46 -0
- data/lib/active_scaffold/configurable.rb +29 -0
- data/lib/active_scaffold/constraints.rb +184 -0
- data/lib/active_scaffold/data_structures/action_columns.rb +137 -0
- data/lib/active_scaffold/data_structures/action_link.rb +175 -0
- data/lib/active_scaffold/data_structures/action_links.rb +185 -0
- data/lib/active_scaffold/data_structures/actions.rb +45 -0
- data/lib/active_scaffold/data_structures/column.rb +355 -0
- data/lib/active_scaffold/data_structures/columns.rb +75 -0
- data/lib/active_scaffold/data_structures/error_message.rb +24 -0
- data/lib/active_scaffold/data_structures/nested_info.rb +123 -0
- data/lib/active_scaffold/data_structures/set.rb +62 -0
- data/lib/active_scaffold/data_structures/sorting.rb +168 -0
- data/lib/active_scaffold/extensions/action_controller_rendering.rb +20 -0
- data/lib/active_scaffold/extensions/action_view_rendering.rb +123 -0
- data/lib/active_scaffold/extensions/action_view_resolver.rb +7 -0
- data/lib/active_scaffold/extensions/active_association_reflection.rb +13 -0
- data/lib/active_scaffold/extensions/active_record_offset.rb +12 -0
- data/lib/active_scaffold/extensions/array.rb +7 -0
- data/lib/active_scaffold/extensions/localize.rb +10 -0
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +12 -0
- data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +7 -0
- data/lib/active_scaffold/extensions/paginator_extensions.rb +26 -0
- data/lib/active_scaffold/extensions/reverse_associations.rb +62 -0
- data/lib/active_scaffold/extensions/routing_mapper.rb +34 -0
- data/lib/active_scaffold/extensions/to_label.rb +8 -0
- data/lib/active_scaffold/extensions/unsaved_associated.rb +61 -0
- data/lib/active_scaffold/extensions/unsaved_record.rb +20 -0
- data/lib/active_scaffold/extensions/usa_state.rb +46 -0
- data/lib/active_scaffold/finder.rb +343 -0
- data/lib/active_scaffold/helpers/association_helpers.rb +40 -0
- data/lib/active_scaffold/helpers/controller_helpers.rb +87 -0
- data/lib/active_scaffold/helpers/country_helpers.rb +352 -0
- data/lib/active_scaffold/helpers/form_column_helpers.rb +350 -0
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +59 -0
- data/lib/active_scaffold/helpers/id_helpers.rb +127 -0
- data/lib/active_scaffold/helpers/list_column_helpers.rb +361 -0
- data/lib/active_scaffold/helpers/pagination_helpers.rb +55 -0
- data/lib/active_scaffold/helpers/search_column_helpers.rb +249 -0
- data/lib/active_scaffold/helpers/show_column_helpers.rb +46 -0
- data/lib/active_scaffold/helpers/view_helpers.rb +360 -0
- data/lib/active_scaffold/locale/de.rb +120 -0
- data/lib/active_scaffold/locale/en.rb +119 -0
- data/lib/active_scaffold/locale/es.yml +115 -0
- data/lib/active_scaffold/locale/fr.rb +122 -0
- data/lib/active_scaffold/locale/hu.yml +63 -0
- data/lib/active_scaffold/locale/ja.yml +64 -0
- data/lib/active_scaffold/locale/ru.yml +119 -0
- data/lib/active_scaffold/marked_model.rb +38 -0
- data/lib/active_scaffold/paginator.rb +136 -0
- data/lib/active_scaffold/responds_to_parent.rb +70 -0
- data/lib/active_scaffold/version.rb +9 -0
- data/lib/active_scaffold_assets.rb +45 -0
- data/lib/active_scaffold_env.rb +14 -0
- data/lib/active_scaffold_vho.rb +2 -0
- data/lib/generators/active_scaffold/USAGE +29 -0
- data/lib/generators/active_scaffold/active_scaffold_generator.rb +20 -0
- data/lib/generators/active_scaffold_controller/USAGE +19 -0
- data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +29 -0
- data/lib/generators/active_scaffold_controller/templates/controller.rb +4 -0
- data/lib/generators/active_scaffold_controller/templates/helper.rb +2 -0
- data/lib/generators/active_scaffold_setup/USAGE +10 -0
- data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +61 -0
- data/public/blank.html +33 -0
- data/shoulda_macros/macros.rb +136 -0
- data/test/bridges/bridge_test.rb +47 -0
- data/test/config/base_test.rb +15 -0
- data/test/config/create_test.rb +55 -0
- data/test/config/list_test.rb +74 -0
- data/test/config/show_test.rb +43 -0
- data/test/config/update_test.rb +17 -0
- data/test/const_mocker.rb +36 -0
- data/test/data_structures/action_columns_test.rb +113 -0
- data/test/data_structures/action_link_test.rb +78 -0
- data/test/data_structures/action_links_test.rb +78 -0
- data/test/data_structures/actions_test.rb +25 -0
- data/test/data_structures/association_column_test.rb +42 -0
- data/test/data_structures/column_test.rb +185 -0
- data/test/data_structures/columns_test.rb +69 -0
- data/test/data_structures/error_message_test.rb +28 -0
- data/test/data_structures/set_test.rb +86 -0
- data/test/data_structures/sorting_test.rb +126 -0
- data/test/data_structures/standard_column_test.rb +24 -0
- data/test/data_structures/virtual_column_test.rb +23 -0
- data/test/extensions/active_record_test.rb +45 -0
- data/test/extensions/array_test.rb +12 -0
- data/test/helpers/form_column_helpers_test.rb +31 -0
- data/test/helpers/list_column_helpers_test.rb +31 -0
- data/test/helpers/pagination_helpers_test.rb +55 -0
- data/test/misc/active_record_permissions_test.rb +154 -0
- data/test/misc/attribute_params_test.rb +110 -0
- data/test/misc/configurable_test.rb +96 -0
- data/test/misc/constraints_test.rb +193 -0
- data/test/misc/finder_test.rb +93 -0
- data/test/misc/lang_test.rb +12 -0
- data/test/mock_app/.gitignore +2 -0
- data/test/mock_app/app/controllers/application_controller.rb +10 -0
- data/test/mock_app/app/helpers/application_helper.rb +3 -0
- data/test/mock_app/config/boot.rb +110 -0
- data/test/mock_app/config/database.yml +16 -0
- data/test/mock_app/config/environment.rb +43 -0
- data/test/mock_app/config/environments/development.rb +17 -0
- data/test/mock_app/config/environments/production.rb +28 -0
- data/test/mock_app/config/environments/test.rb +28 -0
- data/test/mock_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/mock_app/config/initializers/inflections.rb +10 -0
- data/test/mock_app/config/initializers/mime_types.rb +5 -0
- data/test/mock_app/config/initializers/new_rails_defaults.rb +19 -0
- data/test/mock_app/config/initializers/session_store.rb +15 -0
- data/test/mock_app/config/locales/en.yml +5 -0
- data/test/mock_app/config/routes.rb +43 -0
- data/test/mock_app/db/test.sqlite3 +1 -0
- data/test/mock_app/public/blank.html +33 -0
- data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
- data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +532 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +867 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +117 -0
- data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +370 -0
- data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +2 -0
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +35 -0
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +842 -0
- data/test/model_stub.rb +55 -0
- data/test/run_all.rb +8 -0
- data/test/test_helper.rb +39 -0
- data/uninstall.rb +13 -0
- metadata +497 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
ActiveScaffold::Config::Core.class_eval do
|
|
2
|
+
def initialize_with_ancestry(model_id)
|
|
3
|
+
initialize_without_ancestry(model_id)
|
|
4
|
+
|
|
5
|
+
return unless self.model.respond_to? :ancestry_column
|
|
6
|
+
|
|
7
|
+
self.columns << :parent_id
|
|
8
|
+
self.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
|
|
16
|
+
|
|
17
|
+
module ActiveScaffold
|
|
18
|
+
module AncestryBridge
|
|
19
|
+
module FormColumnHelpers
|
|
20
|
+
def active_scaffold_input_ancestry(column, options)
|
|
21
|
+
select_options = []
|
|
22
|
+
select_control_options = {:selected => @record.parent_id}
|
|
23
|
+
select_control_options[:include_blank] = as_(:_select_) if @record.parent_id.nil?
|
|
24
|
+
traverse_ancestry = proc do|key, value|
|
|
25
|
+
unless key == @record
|
|
26
|
+
select_options << ["#{'__' * key.depth}#{key.to_label}", key.id]
|
|
27
|
+
value.each(&traverse_ancestry) if value.is_a?(Hash) && !value.empty?
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
@record.class.arrange.each(&traverse_ancestry)
|
|
31
|
+
select(:record, :ancestry, select_options, select_control_options, options)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
ActionView::Base.class_eval do
|
|
38
|
+
include ActiveScaffold::AncestryBridge::FormColumnHelpers
|
|
39
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module ActiveScaffold
|
|
2
|
+
module Bridges
|
|
3
|
+
def self.bridge(name, &block)
|
|
4
|
+
ActiveScaffold::Bridges::Bridge.new(name, &block)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
class Bridge
|
|
8
|
+
attr_accessor :name
|
|
9
|
+
cattr_accessor :bridges
|
|
10
|
+
cattr_accessor :bridges_run
|
|
11
|
+
self.bridges = []
|
|
12
|
+
|
|
13
|
+
def initialize(name, &block)
|
|
14
|
+
self.name = name
|
|
15
|
+
@install = nil
|
|
16
|
+
# by convention and default, use the bridge name as the required constant for installation
|
|
17
|
+
@install_if = lambda { Object.const_defined?(name) }
|
|
18
|
+
self.instance_eval(&block)
|
|
19
|
+
|
|
20
|
+
ActiveScaffold::Bridges::Bridge.bridges << self
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Set the install block
|
|
24
|
+
def install(&block)
|
|
25
|
+
@install = block
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Set the install_if block (to check to see whether or not to install the block)
|
|
29
|
+
def install?(&block)
|
|
30
|
+
@install_if = block
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def run
|
|
35
|
+
raise(ArgumentError, "install and install? not defined for bridge #{name}" ) unless @install && @install_if
|
|
36
|
+
@install.call if @install_if.call
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def self.run_all
|
|
40
|
+
return false if self.bridges_run
|
|
41
|
+
ActiveScaffold::Bridges::Bridge.bridges.each{|bridge|
|
|
42
|
+
bridge.run
|
|
43
|
+
}
|
|
44
|
+
self.bridges_run=true
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
require File.join(File.dirname(__FILE__), 'shared', 'date_bridge.rb')
|
|
51
|
+
Dir[File.join(File.dirname(__FILE__), "*/bridge.rb")].each{|bridge_require|
|
|
52
|
+
load_bridge = true
|
|
53
|
+
unless ActiveScaffold.exclude_bridges.empty?
|
|
54
|
+
match = bridge_require.match('bridges\/(.*)\/bridge.rb')
|
|
55
|
+
bridge_name = match[1] ? match[1] : nil
|
|
56
|
+
load_bridge = ActiveScaffold.exclude_bridges.exclude?(bridge_name.to_sym) if bridge_name
|
|
57
|
+
end
|
|
58
|
+
require bridge_require if load_bridge == true
|
|
59
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
ActiveScaffold::Bridges.bridge "CalendarDateSelect" do
|
|
2
|
+
install do
|
|
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.instance_methods.include?("initialize_with_calendar_date_select")
|
|
7
|
+
raise RuntimeError, "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
|
+
require File.join(File.dirname(__FILE__), "lib/as_cds_bridge.rb")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
install? do
|
|
14
|
+
Object.const_defined?(name) && ActiveScaffold.js_framework == :prototype
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
module ActiveScaffold::Config
|
|
2
|
+
class Core < Base
|
|
3
|
+
|
|
4
|
+
def initialize_with_calendar_date_select(model_id)
|
|
5
|
+
initialize_without_calendar_date_select(model_id)
|
|
6
|
+
|
|
7
|
+
calendar_date_select_fields = self.model.columns.collect{|c| c.name.to_sym if [:date, :datetime].include?(c.type) }.compact
|
|
8
|
+
# check to see if file column was used on the model
|
|
9
|
+
return if calendar_date_select_fields.empty?
|
|
10
|
+
|
|
11
|
+
# 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
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
alias_method_chain :initialize, :calendar_date_select
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module ActiveScaffold
|
|
24
|
+
module Bridges
|
|
25
|
+
module CalendarDateSelectBridge
|
|
26
|
+
# Helpers that assist with the rendering of a Form Column
|
|
27
|
+
module FormColumnHelpers
|
|
28
|
+
def active_scaffold_input_calendar_date_select(column, options)
|
|
29
|
+
options[:class] = "#{options[:class]} text-input".strip
|
|
30
|
+
calendar_date_select("record", column.name, options.merge(column.options))
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
module SearchColumnHelpers
|
|
35
|
+
def active_scaffold_search_date_bridge_calendar_control(column, options, current_search, name)
|
|
36
|
+
if current_search.is_a? Hash
|
|
37
|
+
value = controller.class.condition_value_for_datetime(current_search[name], column.column.type == :date ? :to_date : :to_time)
|
|
38
|
+
else
|
|
39
|
+
value = current_search
|
|
40
|
+
end
|
|
41
|
+
calendar_date_select("record", column.name,
|
|
42
|
+
{:name => "#{options[:name]}[#{name}]",
|
|
43
|
+
:value => (value ? l(value) : nil),
|
|
44
|
+
:class => 'text-input',
|
|
45
|
+
:id => "#{options[:id]}_#{name}",
|
|
46
|
+
:time => column_datetime?(column) ? true : false,
|
|
47
|
+
:style => "display:#{(options[:show].nil? || options[:show]) ? '' : 'none'}"})
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
module ViewHelpers
|
|
52
|
+
def self.included(base)
|
|
53
|
+
base.alias_method_chain :active_scaffold_stylesheets, :calendar_date_select
|
|
54
|
+
base.alias_method_chain :active_scaffold_javascripts, :calendar_date_select
|
|
55
|
+
end
|
|
56
|
+
# Provides stylesheets to include with +stylesheet_link_tag+
|
|
57
|
+
def active_scaffold_stylesheets_with_calendar_date_select(frontend = :default)
|
|
58
|
+
active_scaffold_stylesheets_without_calendar_date_select + [calendar_date_select_stylesheets]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Provides stylesheets to include with +stylesheet_link_tag+
|
|
62
|
+
def active_scaffold_javascripts_with_calendar_date_select(frontend = :default)
|
|
63
|
+
active_scaffold_javascripts_without_calendar_date_select + [calendar_date_select_javascripts]
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
ActionView::Base.class_eval do
|
|
71
|
+
include ActiveScaffold::Bridges::CalendarDateSelectBridge::FormColumnHelpers
|
|
72
|
+
include ActiveScaffold::Bridges::Shared::DateBridge::SearchColumnHelpers
|
|
73
|
+
alias_method :active_scaffold_search_calendar_date_select, :active_scaffold_search_date_bridge
|
|
74
|
+
include ActiveScaffold::Bridges::Shared::DateBridge::HumanConditionHelpers
|
|
75
|
+
alias_method :active_scaffold_human_condition_calendar_date_select, :active_scaffold_human_condition_date_bridge
|
|
76
|
+
include ActiveScaffold::Bridges::CalendarDateSelectBridge::SearchColumnHelpers
|
|
77
|
+
include ActiveScaffold::Bridges::CalendarDateSelectBridge::ViewHelpers
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
ActiveScaffold::Finder::ClassMethods.module_eval do
|
|
81
|
+
include ActiveScaffold::Bridges::Shared::DateBridge::Finder::ClassMethods
|
|
82
|
+
alias_method :condition_for_calendar_date_select_type, :condition_for_date_bridge_type
|
|
83
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
ActiveScaffold::Bridges.bridge "CanCan" do
|
|
2
|
+
install do
|
|
3
|
+
require File.join(File.dirname(__FILE__), "lib", "cancan_bridge.rb")
|
|
4
|
+
|
|
5
|
+
ActiveScaffold::ClassMethods.send :include, ActiveScaffold::CancanBridge::ClassMethods
|
|
6
|
+
ActiveScaffold::Actions::Core.send :include, ActiveScaffold::CancanBridge::Actions::Core
|
|
7
|
+
ActiveScaffold::Actions::Nested.send :include, ActiveScaffold::CancanBridge::Actions::Core
|
|
8
|
+
ActionController::Base.send :include, ActiveScaffold::CancanBridge::ModelUserAccess::Controller
|
|
9
|
+
ActiveRecord::Base.send :include, ActiveScaffold::CancanBridge::ModelUserAccess::Model
|
|
10
|
+
ActiveRecord::Base.send :include, ActiveScaffold::CancanBridge::ActiveRecord
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module ActiveScaffold
|
|
2
|
+
module CancanBridge
|
|
3
|
+
|
|
4
|
+
# controller level authorization
|
|
5
|
+
# As already has callbacks to ensure authorization at controller method via "authorization_method"
|
|
6
|
+
# but let's include this too, just in case, no sure how performance is affected tough :TODO benchmark
|
|
7
|
+
module ClassMethods
|
|
8
|
+
extend ActiveSupport::Concern
|
|
9
|
+
included do
|
|
10
|
+
alias_method_chain :active_scaffold, :cancan
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def active_scaffold_with_cancan(model_id = nil, &block)
|
|
14
|
+
active_scaffold_without_cancan(model_id, &block)
|
|
15
|
+
authorize_resource(
|
|
16
|
+
:class => active_scaffold_config.model,
|
|
17
|
+
:instance => :record
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# beginning of chain integration
|
|
23
|
+
module Actions
|
|
24
|
+
module Core
|
|
25
|
+
extend ActiveSupport::Concern
|
|
26
|
+
included do
|
|
27
|
+
alias_method_chain :beginning_of_chain, :cancan
|
|
28
|
+
end
|
|
29
|
+
# :TODO can this be expanded more ?
|
|
30
|
+
def beginning_of_chain_with_cancan
|
|
31
|
+
beginning_of_chain_without_cancan.accessible_by(current_ability)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# This is a module aimed at making the current_ability available to ActiveRecord models for permissions.
|
|
37
|
+
module ModelUserAccess
|
|
38
|
+
module Controller
|
|
39
|
+
extend ActiveSupport::Concern
|
|
40
|
+
included do
|
|
41
|
+
prepend_before_filter :assign_current_ability_to_models
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# We need to give the ActiveRecord classes a handle to the current ability. We don't want to just pass the object,
|
|
45
|
+
# because the object may change (someone may log in or out). So we give ActiveRecord a proc that ties to the
|
|
46
|
+
# current_ability_method on this ApplicationController.
|
|
47
|
+
def assign_current_ability_to_models
|
|
48
|
+
::ActiveRecord::Base.current_ability_proc = proc {send(:current_ability)}
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
module Model
|
|
53
|
+
extend ActiveSupport::Concern
|
|
54
|
+
|
|
55
|
+
module ClassMethods
|
|
56
|
+
# The proc to call that retrieves the current_ability from the ApplicationController.
|
|
57
|
+
attr_accessor :current_ability_proc
|
|
58
|
+
|
|
59
|
+
# Class-level access to the current ability
|
|
60
|
+
def current_ability
|
|
61
|
+
::ActiveRecord::Base.current_ability_proc.call if ::ActiveRecord::Base.current_ability_proc
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Instance-level access to the current ability
|
|
66
|
+
def current_ability; self.class.current_ability end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# plug into AS#authorized_for calls
|
|
72
|
+
module ActiveRecord
|
|
73
|
+
extend ActiveSupport::Concern
|
|
74
|
+
included do
|
|
75
|
+
extend SecurityMethods
|
|
76
|
+
include SecurityMethods
|
|
77
|
+
alias_method_chain :authorized_for?, :cancan
|
|
78
|
+
class << self
|
|
79
|
+
alias_method_chain :authorized_for?, :cancan
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
module SecurityMethods
|
|
84
|
+
class InvalidArgument < StandardError; end
|
|
85
|
+
|
|
86
|
+
# is usually called with :crud_type and :column, or :action
|
|
87
|
+
# {:crud_type=>:update, :column=>"some_colum_name"}
|
|
88
|
+
# {:action=>"edit"}
|
|
89
|
+
# to allow access cancan must allow both :crud_type and :action
|
|
90
|
+
# if cancan says "no", it delegates to default AS behavior
|
|
91
|
+
def authorized_for_with_cancan?(options = {})
|
|
92
|
+
raise InvalidArgument if options[:crud_type].blank? and options[:action].blank?
|
|
93
|
+
if current_ability.present?
|
|
94
|
+
crud_type_result = options[:crud_type].nil? ? true : current_ability.can?(options[:crud_type], self)
|
|
95
|
+
action_result = options[:action].nil? ? true : current_ability.can?(options[:action].to_sym, self)
|
|
96
|
+
else
|
|
97
|
+
crud_type_result, action_result = false, false
|
|
98
|
+
end
|
|
99
|
+
default_result = authorized_for_without_cancan?(options)
|
|
100
|
+
result = (crud_type_result && action_result) || default_result
|
|
101
|
+
return result
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
ActiveScaffold::Bridges.bridge "CarrierWave" do
|
|
2
|
+
install do
|
|
3
|
+
require File.join(File.dirname(__FILE__), "lib/form_ui")
|
|
4
|
+
require File.join(File.dirname(__FILE__), "lib/list_ui")
|
|
5
|
+
require File.join(File.dirname(__FILE__), "lib/carrierwave_bridge_helpers")
|
|
6
|
+
require File.join(File.dirname(__FILE__), "lib/carrierwave_bridge")
|
|
7
|
+
ActiveScaffold::Config::Core.send :include, ActiveScaffold::Bridges::Carrierwave::Lib::CarrierwaveBridge
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module ActiveScaffold
|
|
2
|
+
module Bridges
|
|
3
|
+
module Carrierwave
|
|
4
|
+
module Lib
|
|
5
|
+
module CarrierwaveBridge
|
|
6
|
+
def initialize_with_carrierwave(model_id)
|
|
7
|
+
initialize_without_carrierwave(model_id)
|
|
8
|
+
return unless self.model.respond_to?(:uploaders) && self.model.uploaders.present?
|
|
9
|
+
|
|
10
|
+
self.update.multipart = true
|
|
11
|
+
self.create.multipart = true
|
|
12
|
+
|
|
13
|
+
self.model.uploaders.keys.each do |field|
|
|
14
|
+
configure_carrierwave_field(field.to_sym)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.included(base)
|
|
19
|
+
base.alias_method_chain :initialize, :carrierwave
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
def configure_carrierwave_field(field)
|
|
24
|
+
self.columns << field
|
|
25
|
+
self.columns[field].form_ui ||= :carrierwave # :TODO thumbnail
|
|
26
|
+
self.columns[field].params.add "#{field}_cache"
|
|
27
|
+
self.columns[field].params.add "remove_#{field}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module ActiveScaffold
|
|
2
|
+
module Helpers
|
|
3
|
+
module FormColumnHelpers
|
|
4
|
+
def active_scaffold_input_carrierwave(column, options)
|
|
5
|
+
options = active_scaffold_input_text_options(options)
|
|
6
|
+
carrierwave = @record.send("#{column.name}")
|
|
7
|
+
if !carrierwave.file.blank?
|
|
8
|
+
|
|
9
|
+
remove_field_options = {
|
|
10
|
+
:name => options[:name].gsub(/\[#{column.name}\]$/, "[remove_#{column.name}]"),
|
|
11
|
+
:id => 'remove_' + options[:id],
|
|
12
|
+
:value => false
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
cache_field_options = {
|
|
16
|
+
:name => options[:name].gsub(/\[#{column.name}\]$/, "[#{column.name}_cache]"),
|
|
17
|
+
:id => options[:id] + '_cache'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if ActiveScaffold.js_framework == :jquery
|
|
21
|
+
js_remove_file_code = "$(this).prev('input#remove_#{options[:id]}').val('true'); $(this).parent().hide().next().show(); return false;";
|
|
22
|
+
js_dont_remove_file_code = "$(this).parents('div.carrierwave_controls').find('input#remove_#{options[:id]}').val('false'); return false;";
|
|
23
|
+
else
|
|
24
|
+
js_remove_file_code = "$(this).previous('input#remove_#{options[:id]}').value='true'; $(this).up().hide().next().show(); return false;";
|
|
25
|
+
js_dont_remove_file_code = "$(this).up('div.carrierwave_controls').down('input#remove_#{options[:id]}').value='false'; return false;";
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
input = file_field(:record, column.name, options.merge(:onchange => js_dont_remove_file_code))
|
|
29
|
+
content_tag( :div,
|
|
30
|
+
content_tag(:div, (
|
|
31
|
+
get_column_value(@record, column) + " | " +
|
|
32
|
+
hidden_field(:record, "#{column.name}_cache", cache_field_options) +
|
|
33
|
+
hidden_field(:record, "remove_#{column.name}", remove_field_options) +
|
|
34
|
+
content_tag(:a, as_(:remove_file), {:href => '#', :onclick => js_remove_file_code})
|
|
35
|
+
).html_safe
|
|
36
|
+
) + content_tag(:div, input, :style => "display: none"),
|
|
37
|
+
:class => 'carrierwave_controls'
|
|
38
|
+
)
|
|
39
|
+
else
|
|
40
|
+
file_field(:record, column.name, options)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module ActiveScaffold
|
|
2
|
+
module Helpers
|
|
3
|
+
module ListColumnHelpers
|
|
4
|
+
def active_scaffold_column_carrierwave(column, record)
|
|
5
|
+
carrierwave = record.send("#{column.name}")
|
|
6
|
+
return nil unless !carrierwave.file.blank?
|
|
7
|
+
thumbnail_style = ActiveScaffold::Bridges::Carrierwave::Lib::CarrierwaveBridgeHelpers.thumbnail_style
|
|
8
|
+
content = if carrierwave.versions.keys.include?(thumbnail_style)
|
|
9
|
+
image_tag(carrierwave.url(thumbnail_style), :border => 0).html_safe
|
|
10
|
+
else
|
|
11
|
+
record.send(record.send(:_mounter, column.name).send(:serialization_column))
|
|
12
|
+
end
|
|
13
|
+
link_to(content, carrierwave.url, :target => '_blank')
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|