Class: Basepack::Import::Actions

Inherits:
Object
  • Object
show all
Defined in:
lib/basepack/import/actions.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller, form) ⇒ Actions

Returns a new instance of Actions.



9
10
11
12
13
14
# File 'lib/basepack/import/actions.rb', line 9

def initialize(controller, form)
  @params = controller.params
  @controller = controller
  @current_ability = controller.current_ability
  @form = form
end

Instance Attribute Details

#controllerObject (readonly)

Returns the value of attribute controller.



5
6
7
# File 'lib/basepack/import/actions.rb', line 5

def controller
  @controller
end

#current_abilityObject (readonly)

Returns the value of attribute current_ability.



6
7
8
# File 'lib/basepack/import/actions.rb', line 6

def current_ability
  @current_ability
end

#formObject (readonly)

Returns the value of attribute form.



7
8
9
# File 'lib/basepack/import/actions.rb', line 7

def form
  @form
end

#paramsObject (readonly)

Returns the value of attribute params.



4
5
6
# File 'lib/basepack/import/actions.rb', line 4

def params
  @params
end

Instance Method Details

#deleteObject



59
60
61
62
63
# File 'lib/basepack/import/actions.rb', line 59

def delete
  import = @form.show_form.resource_class.find(params[:delete_id])
  current_ability.authorize!(:destroy, import) # CanCan
  yield if import.destroy
end

#get(patch = false) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/basepack/import/actions.rb', line 20

def get(patch = false)
  import_params = params[:import]

  if params[:import_id].present?
    # import selected
    form = @form.show_form
    import_resource = form.resource_class.find(params[:import_id])
    current_ability.authorize!(:show, import_resource) # CanCan
    form.resource = import_resource

    if patch and import_params.present?
      # update import
      current_ability.authorize!(:update, import_resource) # CanCan
      send("import_sanitize_params_#{import_resource.file_type}!", import_params, import_resource)
      if import_resource.update_attributes(controller.edit_form_for(import_resource).permit_params(import_params))
        yield(import_resource)
      end
    end
  end
end

#import_configuration_csv(import) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/basepack/import/actions.rb', line 72

def import_configuration_csv(import)
  # separator
  unless import.configuration[:col_sep]
    col_sep = ','
    import.open_file do |f|
      col_sep = ';' if l = f.gets and l.count(';') > l.count(',')
    end
    import.configuration[:col_sep] = col_sep
  end

  # columns
  row = []
  import.open_file do |f|
    CSV.new(f, col_sep: import.configuration[:col_sep]).each do |r|
      if r.present?
        row = r
        break
      end
    end
  end
  [
    "forms/import_configuration_csv",
    {
      form:           form,
      csv_cols:       row,
      select_options: form.fields_for_import_as_select_options,
      configuration:  import.configuration,
    },
  ]
end

#import_configuration_xml(import) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/basepack/import/actions.rb', line 106

def import_configuration_xml(import)
  import.configuration[:root] = ''
  import.configuration[:mapping] = {}
  res = [ 'forms/import_configuration_xml',
    {
      form: form,
      configuration: import.configuration
    }
  ]
  import.klass.constantize.send(:import_configuration_xml!, res) if import.klass.constantize.respond_to?(:import_configuration_xml!)
  res
end

#import_sanitize_params_csv!(import_params, import) ⇒ Object



65
66
67
68
69
70
# File 'lib/basepack/import/actions.rb', line 65

def import_sanitize_params_csv!(import_params, import)
  if mapping = import_params[:configuration].try(:[], :mapping)
    options = Hash[form.fields_for_import_as_select_options.map {|o| [o[1], o[1].presence] }]
    import_params[:configuration][:mapping] = Array.wrap(mapping).map {|n| options[n]}
  end
end

#import_sanitize_params_xml!(import_params, import) ⇒ Object



103
104
# File 'lib/basepack/import/actions.rb', line 103

def import_sanitize_params_xml!(import_params, import)
end

#patch(&block) ⇒ Object



41
42
43
# File 'lib/basepack/import/actions.rb', line 41

def patch(&block)
  get(true, &block)
end

#postObject



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/basepack/import/actions.rb', line 45

def post
  import_params = params[:import]
  if import_params.present?
    # create import
    form = @form.edit_form
    form.resource.assign_attributes(current_ability.attributes_for(:new, form.resource_class))
    form.resource.assign_attributes(form.permit_params(import_params))
    form.resource.klass = resource_class.to_s
    form.resource.action_name = @form.action_name
    current_ability.authorize!(:create, form.resource) # CanCan
    yield if form.resource.save
  end
end

#resource_classObject



16
17
18
# File 'lib/basepack/import/actions.rb', line 16

def resource_class
  @form.resource_class
end