Module: DynamicScaffold::Controller
- Extended by:
- ActiveSupport::Concern
- Includes:
- ControllerUtilities
- Defined in:
- lib/dynamic_scaffold/controller.rb
Instance Method Summary collapse
- #create ⇒ Object
-
#destroy ⇒ Object
rubocop:disable Metrics/AbcSize.
- #edit ⇒ Object
-
#index ⇒ Object
Actions.
-
#new ⇒ Object
rubocop:disable Metrics/AbcSize.
- #sort ⇒ Object
-
#update ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength.
Instance Method Details
#create ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/dynamic_scaffold/controller.rb', line 65 def create @record = dynamic_scaffold.model.new @record.attributes = update_values bind_sorter_value(@record) if dynamic_scaffold.list.sorter dynamic_scaffold.model.transaction do check_max_count! yield(@record) if block_given? if @record.save redirect_to dynamic_scaffold_path(:index, request_queries) else render "#{params[:controller]}/new" end end end |
#destroy ⇒ Object
rubocop:disable Metrics/AbcSize
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/dynamic_scaffold/controller.rb', line 110 def destroy # rubocop:disable Metrics/AbcSize # `Destroy` also does not support multiple primary keys too. record = find_record(dynamic_scaffold.model.primary_key => params['id']) begin dynamic_scaffold.model.transaction do yield(record) if block_given? record.destroy end rescue ::ActiveRecord::InvalidForeignKey => e flash[:dynamic_scaffold_danger] = I18n.t('dynamic_scaffold.alert.destroy.invalid_foreign_key') logger.error(e) rescue StandardError => e flash[:dynamic_scaffold_danger] = I18n.t('dynamic_scaffold.alert.destroy.failed') logger.error(e) end flash[:dynamic_scaffold_danger] = record.errors[:base].join('<br>') if record.errors[:base].any? redirect_to dynamic_scaffold_path(:index, request_queries) end |
#edit ⇒ Object
61 62 63 |
# File 'lib/dynamic_scaffold/controller.rb', line 61 def edit @record = find_record(edit_params) end |
#index ⇒ Object
Actions
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/dynamic_scaffold/controller.rb', line 27 def index # rubocop:disable Metrics/AbcSize @records = dynamic_scaffold.list.build_sql(scope_params) @count = @records.count unless dynamic_scaffold.max_count.nil? @records = handle_pagination(@records) @records = @records.order dynamic_scaffold.list.sorter if dynamic_scaffold.list.sorter @records = @records.order(*dynamic_scaffold.list.order) unless dynamic_scaffold.list.order.empty? ret = yield(@records) if block_given? @records = ret unless ret.nil? unless @records.is_a? ::ActiveRecord::Relation raise( Error::InvalidOperation, 'You must return ActiveRecord::Relation from super block' ) end @records end |
#new ⇒ Object
rubocop:disable Metrics/AbcSize
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/dynamic_scaffold/controller.rb', line 46 def new # rubocop:disable Metrics/AbcSize unless dynamic_scaffold.max_count.nil? count = dynamic_scaffold.list.build_sql(scope_params).count raise Error::InvalidOperation, 'You can not add any more.' if dynamic_scaffold.max_count?(count) end @record = dynamic_scaffold.model.new defaults = dynamic_scaffold.form.items.each_with_object({}) do |item, memo| memo[item.name] = item.default_value(view_context) if dynamic_scaffold.model.column_names.include?(item.name.to_s) end @record.attributes = defaults.merge(scope_params) end |
#sort ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/dynamic_scaffold/controller.rb', line 131 def sort pkeys_list = sort_params reset_sequence(pkeys_list.size) dynamic_scaffold.model.transaction do pkeys_list.each do |pkeys| rec = find_record(pkeys.to_hash) next_sec = next_sequence! rec[dynamic_scaffold.list.sorter_attribute] = next_sec yield(rec) if block_given? rec.save! end end redirect_to dynamic_scaffold_path(:index, request_queries) end |
#update ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/dynamic_scaffold/controller.rb', line 80 def update # rubocop:disable Metrics/AbcSize, Metrics/MethodLength values = update_values @record = find_record(dynamic_scaffold.model.primary_key => params['id']) datetime_select_keys = [] prev_values = values.keys.map do |k| # handle paramters like `start_time(1i)` match = k.match(/(.*?)\(\d+i\)/) if match next if datetime_select_keys.include?(match[1]) datetime_select_keys << k = match[1] end # globalize next [:translations_attributes, @record.translations] if k == 'translations_attributes' [k, @record.public_send(k)] end.compact.to_h.with_indifferent_access @record.attributes = values dynamic_scaffold.model.transaction do yield(@record, prev_values) if block_given? if @record.save redirect_to dynamic_scaffold_path(:index, request_queries) else render "#{params[:controller]}/edit" end end end |