Duplicate methods are moved of a module, and very similar methods are generated programatically, which is a lot fewer lines, but slightly less readable.
Reviewed-by: Nick Lewis <n...@puppetlabs.com> Signed-off-by: Matt Robinson <m...@puppetlabs.com> --- Local-branch: ticket/master/8878_add_nodes_from_group_page app/models/node.rb | 9 +----- app/models/node_class.rb | 9 +----- app/models/node_group.rb | 75 +++++++++++++-------------------------------- lib/find_from_form.rb | 9 +++++ 4 files changed, 33 insertions(+), 69 deletions(-) create mode 100644 lib/find_from_form.rb diff --git a/app/models/node.rb b/app/models/node.rb index 045c40e..43c351c 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -4,6 +4,7 @@ class Node < ActiveRecord::Base def self.per_page; 20 end # Pagination include NodeGroupGraph + extend FindFromForm validates_presence_of :name validates_uniqueness_of :name @@ -248,12 +249,4 @@ class Node < ActiveRecord::Base options = {:conditions => "metrics.category = 'resources' AND metrics.name = '#{resource_status}'", :joins => 'left join metrics on metrics.report_id = nodes.last_apply_report_id'} ['all', 'index'].include?(scope) ? Node.sum(:value, options).to_i : Node.send(scope).sum(:value, options).to_i end - - def self.find_from_form_names(*names) - names.reject(&:blank?).map{|name| self.find_by_name(name)}.uniq - end - - def self.find_from_form_ids(*ids) - ids.map{|entry| entry.to_s.split(/[ ,]/)}.flatten.reject(&:blank?).uniq.map{|id| self.find(id)} - end end diff --git a/app/models/node_class.rb b/app/models/node_class.rb index bf55370..f2b6710 100644 --- a/app/models/node_class.rb +++ b/app/models/node_class.rb @@ -2,6 +2,7 @@ class NodeClass < ActiveRecord::Base def self.per_page; 50 end # Pagination include NodeGroupGraph + extend FindFromForm has_many :node_group_class_memberships, :dependent => :destroy has_many :node_class_memberships, :dependent => :destroy @@ -27,14 +28,6 @@ class NodeClass < ActiveRecord::Base super({:methods => :description, :only => [:name, :id]}.merge(options)) end - def self.find_from_form_names(*names) - names.reject(&:blank?).map{|name| self.find_by_name(name)}.uniq - end - - def self.find_from_form_ids(*ids) - ids.map{|entry| entry.to_s.split(/[ ,]/)}.flatten.reject(&:blank?).uniq.map{|id| self.find(id)} - end - def <=>(rhs) self.name <=> rhs.name end diff --git a/app/models/node_group.rb b/app/models/node_group.rb index 01f0f62..d7bdc6d 100644 --- a/app/models/node_group.rb +++ b/app/models/node_group.rb @@ -2,6 +2,7 @@ class NodeGroup < ActiveRecord::Base def self.per_page; 50 end # Pagination include NodeGroupGraph + extend FindFromForm has_many :node_group_class_memberships, :dependent => :destroy has_many :node_classes, :through => :node_group_class_memberships @@ -39,59 +40,27 @@ class NodeGroup < ActiveRecord::Base super({:methods => :description, :only => [:name, :id]}.merge(options)) end - attr_accessor :node_names - attr_accessor :node_ids - before_validation :assign_nodes - def assign_nodes - return true unless @node_ids || @node_names - raise NodeClassificationDisabledError.new unless SETTINGS.use_external_node_classification - nodes = [] - nodes << Node.find_from_form_names(*@node_names) if @node_names - nodes << Node.find_from_form_ids(*@node_ids) if @node_ids - - self.nodes = nodes.flatten.uniq - rescue ActiveRecord::RecordInvalid => e - self.errors.add_to_base(e.message) - return false - end - - attr_accessor :node_class_names - attr_accessor :node_class_ids - before_validation :assign_node_classes - def assign_node_classes - return true unless @node_class_ids || @node_class_names - raise NodeClassificationDisabledError.new unless SETTINGS.use_external_node_classification - node_classes = [] - node_classes << NodeClass.find_from_form_names(*@node_class_names) if @node_class_names - node_classes << NodeClass.find_from_form_ids(*@node_class_ids) if @node_class_ids - - self.node_classes = node_classes.flatten.uniq - rescue ActiveRecord::RecordInvalid => e - self.errors.add_to_base(e.message) - return false - end - - attr_accessor :node_group_names - attr_accessor :node_group_ids - before_validation :assign_node_groups - def assign_node_groups - return true unless @node_group_ids || @node_group_names - node_groups = [] - node_groups << NodeGroup.find_from_form_names(*@node_group_names) if @node_group_names - node_groups << NodeGroup.find_from_form_ids(*@node_group_ids) if @node_group_ids - - self.node_groups = node_groups.flatten.uniq - rescue ActiveRecord::RecordInvalid => e - self.errors.add_to_base(e.message) - return false - end - - def self.find_from_form_names(*names) - names.reject(&:blank?).map{|name| self.find_by_name(name)}.uniq - end - - def self.find_from_form_ids(*ids) - ids.map{|entry| entry.to_s.split(/[ ,]/)}.flatten.reject(&:blank?).uniq.map{|id| self.find(id)} + ['node', 'node_class', 'node_group'].each do |model| + attr_accessor "#{model}_names" + attr_accessor "#{model}_ids" + before_validation "assign_#{model.pluralize}" + + define_method("assign_#{model.pluralize}") do + names = instance_variable_get("@#{model}_names") + ids = instance_variable_get("@#{model}_ids") + begin + return true unless ids || names + raise NodeClassificationDisabledError.new unless SETTINGS.use_external_node_classification + nodes = [] + nodes << model.camelize.constantize.find_from_form_names(*names) if names + nodes << model.camelize.constantize.find_from_form_ids(*ids) if ids + + send("#{model.pluralize}=", nodes.flatten.uniq) + rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotFound => e + self.errors.add_to_base(e.message) + return false + end + end end def <=>(rhs) diff --git a/lib/find_from_form.rb b/lib/find_from_form.rb new file mode 100644 index 0000000..875b9bb --- /dev/null +++ b/lib/find_from_form.rb @@ -0,0 +1,9 @@ +module FindFromForm + def find_from_form_names(*names) + names.reject(&:blank?).map{|name| self.find_by_name(name)}.uniq + end + + def find_from_form_ids(*ids) + ids.map{|entry| entry.to_s.split(/[ ,]/)}.flatten.reject(&:blank?).uniq.map{|id| self.find(id)} + end +end -- 1.7.3.1 -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to puppet-dev@googlegroups.com. To unsubscribe from this group, send email to puppet-dev+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.