module RedminePublications
  # Patches Redmine's Issues dynamically. Adds a +after_save+ filter.

  module ChangePatch
    def self.included(base) # :nodoc:
      base.extend(ClassMethods)

      base.send(:include, InstanceMethods)

      # Same as typing in the class
      base.class_eval do
        unloadable # Send unloadable so it will not be unloaded in development
        after_save :update_publication
      end

    end

    module ClassMethods
    end

    module InstanceMethods

      def update_publication
        if (self.action == 'A') and (self.changeset.repository.project_id == Setting.plugin_redmine_publications[:project].to_i)
          regexp = Regexp.new(Setting.plugin_redmine_publications[:pattern])
          match = self.path.match(regexp)
          if match
            Rails.logger.info('[INFO] Adding publication: "' << match[1])
            Publication.find_or_create_by_name(:name => match[1],
              :source_file => self.path, :repository_id => self.changeset.repository.id )
          end
        end      
      end
      
    end
    
  end


end
