Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update code for Rails 3 and Bundler #1

Merged
merged 4 commits into from Dec 23, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
15 changes: 7 additions & 8 deletions lib/revision_san.rb
@@ -1,12 +1,11 @@
require File.expand_path('../revision_san/diff', __FILE__)

module RevisionSan
def self.included(klass)
klass.class_eval do
before_update :create_new_revision
named_scope :current_revisions, { :conditions => { :revision_parent_id => nil } }
klass.extend ClassMethods
end
extend ActiveSupport::Concern

included do
before_update :create_new_revision
scope :current_revisions, { :conditions => { :revision_parent_id => nil } }
end

module ClassMethods
Expand Down Expand Up @@ -41,9 +40,9 @@ def create_new_revision
if changed?
record = self.class.new(:revision_parent_id => id)
attributes.except('id', 'revision_parent_id').each do |key, value|
record.write_attribute(key, changes.has_key?(key) ? changes[key].first : value)
record.send(:write_attribute, key, changes.has_key?(key) ? changes[key].first : value)
end
record.save(false)
record.save(:validate => false)
self.revision += 1
end
end
Expand Down
5 changes: 5 additions & 0 deletions revision-san.gemspec
Expand Up @@ -27,4 +27,9 @@ Gem::Specification.new do |s|
end
else
end

s.add_dependency 'activerecord', '~> 3.2'
s.add_dependency 'diff-lcs'
s.add_development_dependency 'bacon'
s.add_development_dependency 'sqlite3'
end
42 changes: 20 additions & 22 deletions test/diff_test.rb
Expand Up @@ -12,6 +12,26 @@ def initialize(text)
end
end

def long_text
{
:before => %{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce gravida. Ut orci orci, molestie et, scelerisque ut, faucibus pharetra, enim. Morbi vehicula consequat nunc. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque ac orci. Proin adipiscing tempor erat. Phasellus gravida tincidunt sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In venenatis libero sit amet quam. Nam sapien diam, tempor placerat, feugiat quis, congue in, elit. Vivamus nec enim eget elit posuere tincidunt. Quisque scelerisque lobortis risus. Quisque cursus dolor sit amet arcu.

Suspendisse auctor. Quisque sodales dapibus pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras blandit tellus id libero. Morbi sed purus sed sapien ornare facilisis. Vestibulum rutrum egestas mauris. Vestibulum luctus velit vitae ante. In dictum, metus sed lacinia sagittis, leo diam elementum tortor, rutrum elementum justo tellus eget risus. Curabitur faucibus mauris eget nisi. Nam mattis nunc eget turpis. In porta. Aliquam risus ante, sodales quis, consequat vitae, fermentum ut, nisi. Etiam congue ipsum id ante aliquet dictum.},

:after => %{Landscape architecture involves the investigation and designed response to the landscape. The scope of the profession includes architectural design, site planning, environmental restoration, town or urban planning, urban design, parks and recreation planning. A practitioner in the field of landscape architecture is called a landscape architect.

Suspendisse auctor. Quisque sodales dapibus pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras blandit tellus id libero. Morbi sed purus sed sapien ornare facilisis. Vestibulum rutrum egestas mauris. Vestibulum luctus velit vitae ante. In dictum, metus sed lacinia sagittis, leo diam elementum tortor, rutrum elementum justo tellus eget risus. Curabitur faucibus mauris eget nisi. Nam mattis nunc eget turpis. In porta. Aliquam risus ante, sodales quis, consequat vitae, fermentum ut, nisi. Etiam congue ipsum id ante aliquet dictum.},

:diff => %{<del>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce gravida. Ut orci orci, molestie et, scelerisque ut, faucibus pharetra, enim. Morbi vehicula consequat nunc. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque ac orci. Proin adipiscing tempor erat. Phasellus gravida tincidunt sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In venenatis libero sit amet quam. Nam sapien diam, tempor placerat, feugiat quis, congue in, elit. Vivamus nec enim eget elit posuere tincidunt. Quisque scelerisque lobortis risus. Quisque cursus dolor sit amet arcu.</del><ins>Landscape architecture involves the investigation and designed response to the landscape. The scope of the profession includes architectural design, site planning, environmental restoration, town or urban planning, urban design, parks and recreation planning. A practitioner in the field of landscape architecture is called a landscape architect.</ins>

Suspendisse auctor. Quisque sodales dapibus pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras blandit tellus id libero. Morbi sed purus sed sapien ornare facilisis. Vestibulum rutrum egestas mauris. Vestibulum luctus velit vitae ante. In dictum, metus sed lacinia sagittis, leo diam elementum tortor, rutrum elementum justo tellus eget risus. Curabitur faucibus mauris eget nisi. Nam mattis nunc eget turpis. In porta. Aliquam risus ante, sodales quis, consequat vitae, fermentum ut, nisi. Etiam congue ipsum id ante aliquet dictum.}
}
end

def diff_html(from, to)
RevisionSan::Diff.new(DiffTestEntity.new(from), DiffTestEntity.new(to)).text
end

describe "RevisionSan::Diff" do
it "should return correctly formatted html" do
[
Expand All @@ -28,28 +48,6 @@ def initialize(text)
diff_html(from, to).should == html
end
end

def long_text
{
:before => %{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce gravida. Ut orci orci, molestie et, scelerisque ut, faucibus pharetra, enim. Morbi vehicula consequat nunc. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque ac orci. Proin adipiscing tempor erat. Phasellus gravida tincidunt sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In venenatis libero sit amet quam. Nam sapien diam, tempor placerat, feugiat quis, congue in, elit. Vivamus nec enim eget elit posuere tincidunt. Quisque scelerisque lobortis risus. Quisque cursus dolor sit amet arcu.

Suspendisse auctor. Quisque sodales dapibus pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras blandit tellus id libero. Morbi sed purus sed sapien ornare facilisis. Vestibulum rutrum egestas mauris. Vestibulum luctus velit vitae ante. In dictum, metus sed lacinia sagittis, leo diam elementum tortor, rutrum elementum justo tellus eget risus. Curabitur faucibus mauris eget nisi. Nam mattis nunc eget turpis. In porta. Aliquam risus ante, sodales quis, consequat vitae, fermentum ut, nisi. Etiam congue ipsum id ante aliquet dictum.},

:after => %{Landscape architecture involves the investigation and designed response to the landscape. The scope of the profession includes architectural design, site planning, environmental restoration, town or urban planning, urban design, parks and recreation planning. A practitioner in the field of landscape architecture is called a landscape architect.

Suspendisse auctor. Quisque sodales dapibus pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras blandit tellus id libero. Morbi sed purus sed sapien ornare facilisis. Vestibulum rutrum egestas mauris. Vestibulum luctus velit vitae ante. In dictum, metus sed lacinia sagittis, leo diam elementum tortor, rutrum elementum justo tellus eget risus. Curabitur faucibus mauris eget nisi. Nam mattis nunc eget turpis. In porta. Aliquam risus ante, sodales quis, consequat vitae, fermentum ut, nisi. Etiam congue ipsum id ante aliquet dictum.},

:diff => %{<del>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce gravida. Ut orci orci, molestie et, scelerisque ut, faucibus pharetra, enim. Morbi vehicula consequat nunc. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque ac orci. Proin adipiscing tempor erat. Phasellus gravida tincidunt sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In venenatis libero sit amet quam. Nam sapien diam, tempor placerat, feugiat quis, congue in, elit. Vivamus nec enim eget elit posuere tincidunt. Quisque scelerisque lobortis risus. Quisque cursus dolor sit amet arcu.</del><ins>Landscape architecture involves the investigation and designed response to the landscape. The scope of the profession includes architectural design, site planning, environmental restoration, town or urban planning, urban design, parks and recreation planning. A practitioner in the field of landscape architecture is called a landscape architect.</ins>

Suspendisse auctor. Quisque sodales dapibus pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras blandit tellus id libero. Morbi sed purus sed sapien ornare facilisis. Vestibulum rutrum egestas mauris. Vestibulum luctus velit vitae ante. In dictum, metus sed lacinia sagittis, leo diam elementum tortor, rutrum elementum justo tellus eget risus. Curabitur faucibus mauris eget nisi. Nam mattis nunc eget turpis. In porta. Aliquam risus ante, sodales quis, consequat vitae, fermentum ut, nisi. Etiam congue ipsum id ante aliquet dictum.}
}
end

private

def diff_html(from, to)
RevisionSan::Diff.new(DiffTestEntity.new(from), DiffTestEntity.new(to)).text
end
end

class Artist
Expand Down
24 changes: 11 additions & 13 deletions test/revision_san_test.rb
@@ -1,6 +1,4 @@
require File.expand_path('../test_helper', __FILE__)

require 'active_support/testing/core_ext/test/unit/assertions'
require_relative 'test_helper'

describe "RevisionSan, looking at model methods" do
before do
Expand Down Expand Up @@ -42,7 +40,7 @@
end

it "should convert a requested revision to an integer before using in the conditions" do
@artist.fetch_revision('some evil sql that will be coerced to 0').should.be nil
@artist.fetch_revision('some evil sql that will be coerced to 0').should.be.nil
end
end

Expand All @@ -59,9 +57,9 @@
end

it "should insert a new revision of a record" do
assert_difference('Artist.count_without_current_revisions', +1) do
lambda {
@artist.update_attributes(:name => 'Vincent van Gogh JR', :bio => 'Was never born.')
end
}.should.change { Artist.count_without_current_revisions }
end

it "should add the original attributes to the new revision record" do
Expand All @@ -74,21 +72,21 @@
sleep 1
@artist.update_attribute(:name, 'Gogh')

@artist.revisions.first.created_at.should.not == created_at_before
@artist.revisions.first.created_at.should.not.be.same_as created_at_before
end

it "should not create a new revision record if no attributes were changed" do
assert_no_difference('Artist.count') do
lambda {
@artist.update_attributes({})
end
}.should.not.change { Artist.count }
end

it "should not create a new revision if validation fails on the original record" do
assert_no_difference('@artist.revision') do
assert_no_difference('Artist.count') do
lambda {
lambda {
@artist.update_attributes({ :name => '', :bio => 'Lost his name...' })
end
end
}.should.not.change { Artist.count }
}.should.not.change { @artist.revision }
end
end

Expand Down
34 changes: 7 additions & 27 deletions test/test_helper.rb
@@ -1,36 +1,16 @@
module RevisionSanTest
module Initializer
VENDOR_RAILS = File.expand_path('../../../../rails', __FILE__)
OTHER_RAILS = File.expand_path('../../../rails', __FILE__)
PLUGIN_ROOT = File.expand_path('../../', __FILE__)

def self.rails_directory
if File.exist?(VENDOR_RAILS)
VENDOR_RAILS
elsif File.exist?(OTHER_RAILS)
OTHER_RAILS
end
end

def self.load_dependencies
if rails_directory
$:.unshift(File.join(rails_directory, 'activesupport', 'lib'))
$:.unshift(File.join(rails_directory, 'activerecord', 'lib'))
else
require 'rubygems' rescue LoadError
end

require 'activesupport'
require 'activerecord'

require 'rubygems' rescue LoadError

require 'test/spec'
require File.join(PLUGIN_ROOT, 'lib', 'revision_san')
require 'active_record'
require 'sqlite3'

require 'bacon'

require 'revision_san'
end

def self.configure_database
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
ActiveRecord::Migration.verbose = false
end

Expand Down