simple_versioning 0.0.1.1

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/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ nbproject
5
+ .redcar
6
+ .project
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in simple_versioning.gemspec
4
+ gemspec
data/README.markdown ADDED
@@ -0,0 +1,86 @@
1
+ # simple_versioning for ActiveRecord
2
+
3
+ Simple versioning is a plain vanilla versioning support. It simply tracks all your attributes in a polymorphically associated model.
4
+
5
+ ## Installation
6
+
7
+ In the Gemfile:
8
+
9
+ gem 'simple_versioning'
10
+
11
+ Next, generate a simple migration, call it anything you like, the content needs to be (I'll add a generator in a couple of days):
12
+
13
+ def self.up
14
+ create_table :versions do |t|
15
+ t.belongs_to :versioned, :polymorphic => true
16
+ t.text :yaml
17
+ t.integer :number
18
+ t.timestamps
19
+ end
20
+
21
+ change_table :versions do |t|
22
+ t.index [:versioned_id, :versioned_type]
23
+ t.index :number
24
+ t.index :created_at
25
+ end
26
+ end
27
+
28
+ def self.down
29
+ drop_table :versions
30
+ end
31
+
32
+
33
+ ## Example
34
+
35
+ To version an ActiveRecord model, simply add `track` to your class like so:
36
+
37
+ class User < ActiveRecord::Base
38
+ track
39
+
40
+ validates_presence_of :first_name, :last_name
41
+
42
+ def name
43
+ "#{first_name} #{last_name}"
44
+ end
45
+ end
46
+
47
+ Thats it!
48
+
49
+ >> u = User.create(:first_name => "Yukihiro", :last_name => "Matsumoto")
50
+ => #<User first_name: "Yukihiro", last_name: "Matsumoto">
51
+ >> u.version_number
52
+ => 1
53
+ >> u.update_attribute(:last_name, "Matz")
54
+ => true
55
+ >> u.name
56
+ => "Yukihiro Matz"
57
+ >> u.version_number
58
+ => 2
59
+ >> u.revert_to(1)
60
+ => 1
61
+ >> u.name
62
+ => "Yukihiro Matsumoto"
63
+ >> u.version_number
64
+ => 1
65
+ >> u.save
66
+ => true
67
+ >> u.version_number
68
+ => 3
69
+ >> u.update_attribute(:last_name, "Matsumoto II")
70
+ => true
71
+ >> u.name
72
+ => "Yukihiro Matsumoto II"
73
+ >> u.version_number
74
+ => 4
75
+
76
+
77
+ ### What is coming in 0.0.2
78
+
79
+ - Save without versioning
80
+ - Mutator methods
81
+
82
+
83
+ ### Thanks!
84
+
85
+ Thanks to [laserlemon](http://github.com/laserlemon "") and his [`vestal_versions`](https://github.com/laserlemon/vestal_versions "") gem!
86
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,10 @@
1
+ require 'active_record'
2
+
3
+ module SimpleVersioning
4
+ VERSION = "0.0.1.1"
5
+
6
+ class Version < ActiveRecord::Base
7
+ validates_numericality_of :number, :only_integer => true, :greater_than => 0
8
+ serialize :yaml, Hash
9
+ end
10
+ end
@@ -0,0 +1,41 @@
1
+ require 'simple_versioning/version'
2
+
3
+ module SimpleVersioning
4
+ module ClassMethods
5
+ def track(options = {}, &block)
6
+ options.merge!(
7
+ :as => :versioned,
8
+ :class_name => 'SimpleVersioning::Version'
9
+ )
10
+ has_many :versions, options, &block
11
+ before_save :prepare_version
12
+ end
13
+ end
14
+
15
+ module InstanceMethods
16
+ def self.included(base)
17
+ base.extend(ClassMethods)
18
+ end
19
+
20
+ def prepare_version
21
+ return false unless changed?
22
+ self.versions.build :yaml => attributes, :number => version_number
23
+ end
24
+
25
+ def version_number
26
+ self.versions.maximum(:number).to_i + 1
27
+ end
28
+
29
+ def revert_to(revision)
30
+ @revert_to = self.versions.find_by_number revision
31
+ return false unless @revert_to.present?
32
+ @revert_to.yaml.each do |attribute_name, value|
33
+ write_attribute(attribute_name, value)
34
+ end
35
+ @revert_to.number
36
+ end
37
+ end
38
+ end
39
+
40
+ # "test on file"
41
+ ActiveRecord::Base.send :include, SimpleVersioning::InstanceMethods
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "simple_versioning/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "simple_versioning"
7
+ s.version = SimpleVersioning::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Swanand Pagnis"]
10
+ s.email = ["swanand@kaverisoft.com"]
11
+ s.homepage = "http://github.com/spp/simple_versioning"
12
+ s.summary = %q{Provide a vanilla versioning support}
13
+ s.description = %q{Keeps track of your models attributes}
14
+
15
+ s.rubyforge_project = "simple_versioning"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'activerecord', '>= 2.2.2'
23
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_versioning
3
+ version: !ruby/object:Gem::Version
4
+ hash: 73
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ - 1
11
+ version: 0.0.1.1
12
+ platform: ruby
13
+ authors:
14
+ - Swanand Pagnis
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-03-28 00:00:00 +05:30
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: activerecord
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 2
33
+ - 2
34
+ - 2
35
+ version: 2.2.2
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ description: Keeps track of your models attributes
39
+ email:
40
+ - swanand@kaverisoft.com
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ extra_rdoc_files: []
46
+
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - README.markdown
51
+ - Rakefile
52
+ - lib/simple_versioning.rb
53
+ - lib/simple_versioning/version.rb
54
+ - simple_versioning.gemspec
55
+ has_rdoc: true
56
+ homepage: http://github.com/spp/simple_versioning
57
+ licenses: []
58
+
59
+ post_install_message:
60
+ rdoc_options: []
61
+
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ requirements: []
83
+
84
+ rubyforge_project: simple_versioning
85
+ rubygems_version: 1.3.7
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: Provide a vanilla versioning support
89
+ test_files: []
90
+