Class: RedmineExtensions::EasySettingPresenter

Inherits:
BasePresenter show all
Defined in:
app/presenters/redmine_extensions/easy_setting_presenter.rb

Instance Attribute Summary collapse

Attributes inherited from BasePresenter

#model, #options

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BasePresenter

#h, present, presenter_for, register, registered_presenters, #update_options

Constructor Details

#initialize(settings_params = {}, project = nil) ⇒ EasySettingPresenter

Returns a new instance of EasySettingPresenter.



10
11
12
13
14
15
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 10

def initialize(settings_params={}, project = nil)
  @settings = settings_params || {}
  @settings = @settings.dup.symbolize_keys
  self.project = project
  super(EasySetting.new, nil)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *attrs) ⇒ Object



119
120
121
122
123
124
125
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 119

def method_missing(meth, *attrs)
  if @plugin && @plugin.settings[:easy_settings] && @plugin.settings[:easy_settings].keys.include?(meth.to_sym)
    EasySetting.value(prefix+meth.to_s, project_id)
  else
    super
  end
end

Instance Attribute Details

#pluginObject

Returns the value of attribute plugin.



4
5
6
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 4

def plugin
  @plugin
end

#project_idObject

Returns the value of attribute project_id.



4
5
6
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 4

def project_id
  @project_id
end

Class Method Details

.boolean_keysObject



6
7
8
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 6

def self.boolean_keys
  @boolean_keys ||= []
end

Instance Method Details

#boolean_keysObject

TODO - more dynamic solution?



78
79
80
81
82
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 78

def boolean_keys
  from_easy_setting = EasySetting.boolean_keys
  ActiveSupport::Deprecation.warn("EasySetting.boolean_keys has been deprecated, use EasySettingPresenter#boolean_keys instead") if from_easy_setting.any?
  from_easy_setting.concat(self.class.boolean_keys)
end

#easy_settingsObject



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 37

def easy_settings
  @easy_settings ||= @settings.collect do |name, value|
    # remove blank values in array settings
    value.delete_if{|v| v.blank? } if value.is_a?(Array)
    name = prefix+name.to_s

    set = EasySetting.where(name: name.to_s, project_id: project_id).first || EasySetting.new(name: name.to_s, project_id: project_id)

    set.value = format_value(name, value)

    set
  end
end

#format_value(name, value) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 93

def format_value(name, value)
  case name.to_sym
  when *boolean_keys
    value.to_boolean
  when :attachment_description
    esa = EasySetting.where(:name => 'attachment_description_required', :project_id => nil).first
    case value
    when 'required'
      esa.update_attribute(:value, true)
      true
    when '1'
      esa.update_attribute(:value, false)
      true
    else
      esa.update_attribute(:value, false)
      false
    end
  when :agile_board_statuses
    value[:progress] = value.delete('progress') if value["progress"]
    value[:done] = value.delete('done') if value["done"]
    value
  else
    value
  end
end

#idObject



55
56
57
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 55

def id
  @plugin && @plugin.id
end

#model_nameObject



67
68
69
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 67

def model_name
  EasySetting.model_name
end

#param_keyObject



70
71
72
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 70

def param_key
  EasySetting.param_key
end

#persisted?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 51

def persisted?
  !!@plugin
end

#prefixObject



59
60
61
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 59

def prefix
  @plugin && (@plugin.id.to_s + '_') || ''
end

#project=(project_or_project_id) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 17

def project=(project_or_project_id)
  if project_or_project_id.is_a?(Project)
    @project_id = project_or_project_id.id
  elsif !project_or_project_id.nil?
    @project_id = project_or_project_id.to_i
  else
    @project_id = nil
  end
  @easy_settings = nil
end

#saveObject



84
85
86
87
88
89
90
91
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 84

def save
  unsaved_settings.clear
  easy_settings.each do |setting|
    setting.save
    unsaved_settings << setting unless setting.persisted?
  end
  unsaved_settings.empty?
end

#to_keyObject



73
74
75
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 73

def to_key
  @plugin && [@plugin.id]
end

#to_modelObject

TODO: form rendering methods. Maybe push them to the parent?



64
65
66
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 64

def to_model
  self
end

#unsaved_settingsObject



33
34
35
# File 'app/presenters/redmine_extensions/easy_setting_presenter.rb', line 33

def unsaved_settings
  @unsaved_settings ||= []
end