diff --git a/approval2.gemspec b/approval2.gemspec index 5cc5d04..ffe54d4 100644 --- a/approval2.gemspec +++ b/approval2.gemspec @@ -24,4 +24,5 @@ Gem::Specification.new do |spec| spec.add_development_dependency "rake", "~> 10.0" spec.add_dependency "audited" spec.add_dependency "will_paginate" + spec.add_dependency "unscoped_associations" end diff --git a/lib/approval2/controller_additions.rb b/lib/approval2/controller_additions.rb index 19aab35..2564303 100644 --- a/lib/approval2/controller_additions.rb +++ b/lib/approval2/controller_additions.rb @@ -3,28 +3,31 @@ module ControllerAdditions extend ActiveSupport::Concern included do - before_filter :before_edit, only: :edit - before_filter :before_approve, only: :approve - before_filter :before_index, only: :index + before_action :before_edit, only: :edit + before_action :before_approve, only: :approve + before_action :before_index, only: :index end private + + def modelName + self.class.name.sub("Controller", "").underscore.split('/').last.singularize + end + + def modelKlass + moduleName = self.class.name.include?("::") ? self.class.name.split("::").first : "" + "#{moduleName}::#{modelName.classify}".constantize + end def before_index - if (params[:approval_status].present? and params[:approval_status] == 'U') - modelName = self.class.name.sub("Controller", "").underscore.split('/').last.singularize - modelKlass = modelName.classify.constantize - + if (params[:approval_status].present? and params[:approval_status] == 'U') x = modelKlass.unscoped.where("approval_status =?",'U').order("id desc") - instance_variable_set("@#{modelName}s", x.paginate(:per_page => 10, :page => params[:page])) + instance_variable_set("@#{modelName}s", x) end end def before_edit - modelName = self.class.name.sub("Controller", "").underscore.split('/').last.singularize - modelKlass = modelName.classify.constantize - x = modelKlass.unscoped.find_by_id(params[:id]) if x.approval_status == 'A' && x.unapproved_record.nil? params = (x.attributes).merge({:approved_id => x.id,:approved_version => x.lock_version}) @@ -35,17 +38,16 @@ def before_edit end def before_approve - modelName = self.class.name.sub("Controller", "").underscore.split('/').last.singularize - modelKlass = modelName.classify.constantize - x = modelKlass.unscoped.find(params[:id]) modelKlass.transaction do approved_record = x.approve if approved_record.save + instance_variable_set("@#{modelName}", approved_record) flash[:alert] = "#{modelName.humanize.titleize} record was approved successfully" else msg = approved_record.errors.full_messages flash[:alert] = msg + instance_variable_set("@#{modelName}", x) raise ActiveRecord::Rollback end end diff --git a/lib/approval2/model_additions.rb b/lib/approval2/model_additions.rb index 4169ab0..67adf99 100644 --- a/lib/approval2/model_additions.rb +++ b/lib/approval2/model_additions.rb @@ -5,20 +5,20 @@ module ModelAdditions included do audited except: [:approval_status, :last_action] + default_scope { where(approval_status: 'A') } + + after_initialize { self.approval_status = 'U' if new_record? } + # refers to the unapproved record in the common unapproved_record model, this is true only for U records has_one :unapproved_record_entry, :as => :approvable, :class_name => '::UnapprovedRecord' # refers to the approved/unapproved record in the model - belongs_to :unapproved_record, :primary_key => 'approved_id', :foreign_key => 'id', :class_name => self.name, :unscoped => true - belongs_to :approved_record, :foreign_key => 'approved_id', :primary_key => 'id', :class_name => self.name, :unscoped => true + belongs_to :unapproved_record, -> { unscope(where: :approval_status) }, :primary_key => 'approved_id', :foreign_key => 'id', :class_name => self.name + belongs_to :approved_record, -> { unscope(where: :approval_status) }, :foreign_key => 'approved_id', :primary_key => 'id', :class_name => self.name validates_uniqueness_of :approved_id, :allow_blank => true validate :validate_unapproved_record - def self.default_scope - where approval_status: 'A' - end - after_create :on_create_create_unapproved_record_entry after_destroy :on_destory_remove_unapproved_record_entries @@ -67,7 +67,7 @@ def enable_approve_button? self.approval_status == 'U' ? true : false end - def on_create_create_unapproved_record_entry + def on_create_create_unapproved_record_entry if approval_status == 'U' UnapprovedRecord.create!(:approvable => self) end diff --git a/lib/approval2/version.rb b/lib/approval2/version.rb index 89ba8bb..7aa42b4 100644 --- a/lib/approval2/version.rb +++ b/lib/approval2/version.rb @@ -1,3 +1,3 @@ module Approval2 - VERSION = "0.1.7" + VERSION = "0.2.0" end diff --git a/lib/generators/approval2/install/templates/create_unapproved_records.rb b/lib/generators/approval2/install/templates/create_unapproved_records.rb index 75ad06c..237ddd7 100644 --- a/lib/generators/approval2/install/templates/create_unapproved_records.rb +++ b/lib/generators/approval2/install/templates/create_unapproved_records.rb @@ -1,4 +1,4 @@ -class CreateUnapprovedRecords < ActiveRecord::Migration +class CreateUnapprovedRecords < ActiveRecord::Migration[5.1] def change create_table :unapproved_records, {:sequence_start_value => '1 cache 20 order increment by 1'} do |t| t.integer :approvable_id