Module: ErpTechSvcs::Extensions::ActiveRecord::HasUserDefinedData::SingletonMethods

Defined in:
lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb

Instance Method Summary collapse

Instance Method Details

#add_user_defined_field(field_name, label, data_type, scope = nil) ⇒ Object Also known as: add_user_field



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb', line 74

def add_user_defined_field(field_name, label, data_type, scope=nil)
  current_user_field = self.user_field(field_name, scope)

  if current_user_field
    raise Error::UserDefinedFieldAlreadyExists
  else
    user_defined_field = UserDefinedField.new(field_name: field_name, label: label, data_type: data_type)

    user_defined_data = if scope
                          # return array and remove nil if none with specified scope
                          UserDefinedData.where('scope = ? and model_name = ?', scope, self.name).first
                        else
                          UserDefinedData.where('scope = ? and model_name = ?', nil, self.name)
                        end

    user_defined_data = UserDefinedData.new(scope: scope, model_name: self.name) unless user_defined_data

    user_defined_data.user_defined_fields << user_defined_field
    user_defined_data.save

    user_defined_field
  end

end

#remove_all_user_defined_dataObject Also known as: remove_user_fields



41
42
43
# File 'lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb', line 41

def remove_all_user_defined_data
  UserDefinedData.destroy_all("model_name = #{self.name}")
end

#remove_user_defined_field(field_name, scope = nil) ⇒ Object Also known as: remove_user_field



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb', line 114

def remove_user_defined_field(field_name, scope=nil)
  user_defined_data = if scope
                        # return array and remove nil if none with specified scope
                        UserDefinedData.where('scope = ? and model_name = ?', scope, self.name).first
                      else
                        UserDefinedData.where('scope = ? and model_name = ?', nil, self.name)
                      end

  if user_defined_data
    user_defined_field = user_defined_data.user_defined_fields.where('field_name = ?', field_name)

    if user_defined_field
      user_defined_field.destroy
    else
      raise Errors::UserDefinedFieldDoesNotExist
    end
  else
    raise Errors::UserDefinedDataDoesNotExist
  end
end

#update_user_defined_field(field_name, label, scope = nil) ⇒ Object Also known as: update_user_field



101
102
103
104
105
106
107
108
109
110
# File 'lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb', line 101

def update_user_defined_field(field_name, label, scope=nil)
  current_user_field = self.user_field(field_name, scope)

  if current_user_field
    current_user_field.label = label
    current_user_field.save
  else
    raise Errors::UserDefinedFieldDoesNotExist
  end
end

#user_defined_field(field_name, scope = nil) ⇒ Object Also known as: user_field



65
66
67
68
69
70
# File 'lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb', line 65

def user_defined_field(field_name, scope=nil)
  UserDefinedField.joins(:user_defined_data)
  .where('model_name = ?', self.name)
  .where('scope = ?', scope)
  .where('field_name = ?', field_name).first
end

#user_defined_fields(scope = nil) ⇒ Object Also known as: user_fields



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/erp_tech_svcs/extensions/active_record/has_user_defined_data.rb', line 47

def user_defined_fields(scope=nil)
  user_defined_data = if scope
                        # return array and remove nil if none with specified scope
                        [UserDefinedData.where('scope = ? and model_name = ?', scope, self.name).first].compact
                      else
                        UserDefinedData.where('model_name = ?', self.name).all
                      end

  if user_defined_data.empty?
    []
  else
    user_defined_data.collect(&:user_defined_fields).flatten
  end

end