acts_as_versionable 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
    
        data/CHANGELOG.rdoc
    ADDED
    
    
    
        data/README.rdoc
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            = Acts As Versionable
         | 
| 2 2 |  | 
| 3 | 
            -
             Minimalist versionable engine
         | 
| 3 | 
            +
             Minimalist versionable engine for rails > 3
         | 
| 4 4 |  | 
| 5 5 | 
             
            === Installation
         | 
| 6 6 |  | 
| @@ -13,14 +13,14 @@ | |
| 13 13 | 
             
              rails g model Document title:string body:text
         | 
| 14 14 | 
             
              rake db:migrate
         | 
| 15 15 |  | 
| 16 | 
            -
             | 
| 16 | 
            +
             _generate versionable table_
         | 
| 17 17 |  | 
| 18 18 | 
             
              rails g versionable Document	
         | 
| 19 | 
            -
              create  db/migrate/ | 
| 19 | 
            +
              create  db/migrate/20120119150513_create_document_versions.rb
         | 
| 20 20 |  | 
| 21 | 
            -
              class  | 
| 21 | 
            +
              class CreateDocumentVersions < ActiveRecord::Migration
         | 
| 22 22 | 
             
                def self.up
         | 
| 23 | 
            -
                  create_table : | 
| 23 | 
            +
                  create_table :document_versions do |t| 
         | 
| 24 24 | 
             
                    t.column :title, :string
         | 
| 25 25 | 
             
                    t.column :body, :text
         | 
| 26 26 | 
             
                    t.column :current_version, :integer
         | 
| @@ -28,12 +28,12 @@ | |
| 28 28 | 
             
                    t.integer :versioned_as
         | 
| 29 29 | 
             
                    t.timestamps
         | 
| 30 30 | 
             
                  end
         | 
| 31 | 
            -
                  add_index : | 
| 31 | 
            +
                  add_index :document_versions, :versioned_as
         | 
| 32 32 | 
             
                  add_column :documents, :current_version, :integer
         | 
| 33 33 | 
             
                end
         | 
| 34 34 |  | 
| 35 35 | 
             
                def self.down
         | 
| 36 | 
            -
                  drop_table : | 
| 36 | 
            +
                  drop_table :document_versions
         | 
| 37 37 | 
             
                  remove_column :documents, :current_version
         | 
| 38 38 | 
             
                end
         | 
| 39 39 | 
             
              end
         | 
| @@ -53,3 +53,4 @@ | |
| 53 53 | 
             
              document.versions => Array(2)
         | 
| 54 54 | 
             
              document.revert_to(1) => #<Document ...>
         | 
| 55 55 |  | 
| 56 | 
            +
              document.new_from_version(2) => #<Document ...> 
         | 
    
        data/lib/acts_as_versionable.rb
    CHANGED
    
    | @@ -30,8 +30,9 @@ module ActsAsVersionable | |
| 30 30 | 
             
                      self.max_versions = options[:limit].to_i  
         | 
| 31 31 |  | 
| 32 32 | 
             
                      class << create_class("#{self.name}Versions", ActiveRecord::Base)
         | 
| 33 | 
            +
                        REJECT_COLUMNS = %w(id created_at updated_at versioned_as)
         | 
| 33 34 | 
             
                        def actual_columns
         | 
| 34 | 
            -
                           | 
| 35 | 
            +
                          columns.reject { |c| REJECT_COLUMNS.include?(c.name) }
         | 
| 35 36 | 
             
                        end
         | 
| 36 37 | 
             
                      end
         | 
| 37 38 |  | 
| @@ -47,29 +48,38 @@ module ActsAsVersionable | |
| 47 48 | 
             
                  end
         | 
| 48 49 |  | 
| 49 50 | 
             
                  def revert_to(version)
         | 
| 50 | 
            -
                    revision =  | 
| 51 | 
            -
             | 
| 52 | 
            -
                    raise NoSuchVersionError, "Couldn't find #{version} version" if revision.blank?
         | 
| 53 | 
            -
             | 
| 54 | 
            -
                    versions.actual_columns.each do |column|
         | 
| 55 | 
            -
                      self[column.name] = revision[column.name]  
         | 
| 56 | 
            -
                    end
         | 
| 51 | 
            +
                    revision = get_version(version)
         | 
| 57 52 |  | 
| 53 | 
            +
                    move_columns revision, self
         | 
| 54 | 
            +
                          
         | 
| 58 55 | 
             
                    self.current_version = version
         | 
| 59 56 | 
             
                    self.local_changes = true
         | 
| 60 57 | 
             
                    self.save
         | 
| 61 58 | 
             
                  end
         | 
| 62 59 |  | 
| 60 | 
            +
                  def new_from_version(version)
         | 
| 61 | 
            +
                    revision = get_version(version)
         | 
| 62 | 
            +
                    dummy = self.class.new         
         | 
| 63 | 
            +
                    
         | 
| 64 | 
            +
                    move_columns revision, dummy
         | 
| 65 | 
            +
                    
         | 
| 66 | 
            +
                    dummy
         | 
| 67 | 
            +
                  end  
         | 
| 68 | 
            +
             | 
| 63 69 | 
             
                  private
         | 
| 64 70 |  | 
| 71 | 
            +
                  def get_version(version)
         | 
| 72 | 
            +
                    revision = versions.find_by_versioned_as(version) 
         | 
| 73 | 
            +
                    raise NoSuchVersionError, "Couldn't find #{version} version" if revision.blank?
         | 
| 74 | 
            +
                    revision
         | 
| 75 | 
            +
                  end  
         | 
| 76 | 
            +
             | 
| 65 77 | 
             
                  def apply_versioning
         | 
| 66 78 | 
             
                    unless self.local_changes
         | 
| 67 79 | 
             
                      version_content = {}
         | 
| 68 80 | 
             
                      last_version = version + 1
         | 
| 69 81 |  | 
| 70 | 
            -
                       | 
| 71 | 
            -
                        version_content[column.name] = self[column.name]
         | 
| 72 | 
            -
                      end
         | 
| 82 | 
            +
                      move_columns self, version_content
         | 
| 73 83 |  | 
| 74 84 | 
             
                      version_content.merge!(:versioned_as => last_version)
         | 
| 75 85 |  | 
| @@ -89,6 +99,12 @@ module ActsAsVersionable | |
| 89 99 | 
             
                      versions.where("versioned_as <= ?",excess_baggage).destroy_all
         | 
| 90 100 | 
             
                    end    
         | 
| 91 101 | 
             
                  end  
         | 
| 102 | 
            +
                  
         | 
| 103 | 
            +
                  def move_columns from, to
         | 
| 104 | 
            +
                    versions.actual_columns.each do |column|
         | 
| 105 | 
            +
                      to[column.name] = from[column.name]  
         | 
| 106 | 
            +
                    end
         | 
| 107 | 
            +
                  end  
         | 
| 92 108 |  | 
| 93 109 | 
             
                end
         | 
| 94 110 | 
             
            end
         | 
| @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            <% 
         | 
| 2 | 
            -
              versions_table = "#{@model_name}_versions".downcase | 
| 3 | 
            -
               | 
| 2 | 
            +
              versions_table = "#{@model_name}_versions".downcase
         | 
| 3 | 
            +
              rejects_columns = ["id", "created_at", "updated_at"]
         | 
| 4 | 
            +
              columns = @model.classify.constantize.columns - rejects_columns
         | 
| 5 | 
            +
              #columns = @model.classify.constantize.content_columns.reject { |c| c.type == :datetime }
         | 
| 4 6 | 
             
            %>
         | 
| 5 7 | 
             
            class <%= migration_name %> < ActiveRecord::Migration
         | 
| 6 8 | 
             
              def self.up
         | 
| @@ -102,6 +102,17 @@ class VersionableTest < Test::Unit::TestCase | |
| 102 102 | 
             
                end
         | 
| 103 103 | 
             
              end
         | 
| 104 104 |  | 
| 105 | 
            +
              def test_new_from_version
         | 
| 106 | 
            +
                 article = Article.first
         | 
| 107 | 
            +
                 assert_not_nil article
         | 
| 108 | 
            +
                 
         | 
| 109 | 
            +
                 dummy = article.new_from_version 1
         | 
| 110 | 
            +
                
         | 
| 111 | 
            +
                 article.revert_to(1)
         | 
| 112 | 
            +
                 assert_equal dummy.title, article.title 
         | 
| 113 | 
            +
                 assert_equal dummy.body, article.body      
         | 
| 114 | 
            +
              end  
         | 
| 115 | 
            +
             | 
| 105 116 | 
             
              def test_dependent_destroy
         | 
| 106 117 | 
             
                Article.destroy_all
         | 
| 107 118 | 
             
                assert_equal [], ArticleVersions.all
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: acts_as_versionable
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.3
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012-01- | 
| 12 | 
            +
            date: 2012-01-20 00:00:00.000000000Z
         | 
| 13 13 | 
             
            dependencies: []
         | 
| 14 14 | 
             
            description: ''
         | 
| 15 15 | 
             
            email:
         | 
| @@ -19,6 +19,7 @@ extensions: [] | |
| 19 19 | 
             
            extra_rdoc_files: []
         | 
| 20 20 | 
             
            files:
         | 
| 21 21 | 
             
            - .gitignore
         | 
| 22 | 
            +
            - CHANGELOG.rdoc
         | 
| 22 23 | 
             
            - Gemfile
         | 
| 23 24 | 
             
            - README.rdoc
         | 
| 24 25 | 
             
            - Rakefile
         |