vigetlabs-acts_as_markup 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,57 @@
1
+
2
+ if PROJ.rubyforge.name.valid? && HAVE_RUBYFORGE
3
+
4
+ require 'rubyforge'
5
+ require 'rake/contrib/sshpublisher'
6
+
7
+ namespace :gem do
8
+ desc 'Package and upload to RubyForge'
9
+ task :release => [:clobber, 'gem:package'] do |t|
10
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
11
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
12
+ pkg = "pkg/#{PROJ.gem._spec.full_name}"
13
+
14
+ if $DEBUG then
15
+ puts "release_id = rf.add_release #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, #{PROJ.version.inspect}, \"#{pkg}.tgz\""
16
+ puts "rf.add_file #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, release_id, \"#{pkg}.gem\""
17
+ end
18
+
19
+ rf = RubyForge.new
20
+ rf.configure rescue nil
21
+ puts 'Logging in'
22
+ rf.login
23
+
24
+ c = rf.userconfig
25
+ c['release_notes'] = PROJ.description if PROJ.description
26
+ c['release_changes'] = PROJ.changes if PROJ.changes
27
+ c['preformatted'] = true
28
+
29
+ files = [(PROJ.gem.need_tar ? "#{pkg}.tgz" : nil),
30
+ (PROJ.gem.need_zip ? "#{pkg}.zip" : nil),
31
+ "#{pkg}.gem"].compact
32
+
33
+ puts "Releasing #{PROJ.name} v. #{PROJ.version}"
34
+ rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files
35
+ end
36
+ end # namespace :gem
37
+
38
+
39
+ namespace :doc do
40
+ desc "Publish RDoc to RubyForge"
41
+ task :release => %w(doc:clobber_rdoc doc:rdoc) do
42
+ config = YAML.load(
43
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
44
+ )
45
+
46
+ host = "#{config['username']}@rubyforge.org"
47
+ remote_dir = "/var/www/gforge-projects/#{PROJ.rubyforge.name}/"
48
+ remote_dir << PROJ.rdoc.remote_dir if PROJ.rdoc.remote_dir
49
+ local_dir = PROJ.rdoc.dir
50
+
51
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
52
+ end
53
+ end # namespace :doc
54
+
55
+ end # if HAVE_RUBYFORGE
56
+
57
+ # EOF
data/tasks/setup.rb ADDED
@@ -0,0 +1,268 @@
1
+ # $Id$
2
+
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'rake/clean'
6
+ require 'fileutils'
7
+ require 'ostruct'
8
+
9
+ class OpenStruct; undef :gem; end
10
+
11
+ PROJ = OpenStruct.new(
12
+ # Project Defaults
13
+ :name => nil,
14
+ :summary => nil,
15
+ :description => nil,
16
+ :changes => nil,
17
+ :authors => nil,
18
+ :email => nil,
19
+ :url => "\000",
20
+ :version => ENV['VERSION'] || '0.0.0',
21
+ :exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git ^pkg/),
22
+ :release_name => ENV['RELEASE'],
23
+
24
+ # System Defaults
25
+ :ruby_opts => %w(-w),
26
+ :libs => [],
27
+ :history_file => 'History.txt',
28
+ :manifest_file => 'Manifest.txt',
29
+ :readme_file => 'README.rdoc',
30
+
31
+ # Announce
32
+ :ann => OpenStruct.new(
33
+ :file => 'announcement.txt',
34
+ :text => nil,
35
+ :paragraphs => [],
36
+ :email => {
37
+ :from => nil,
38
+ :to => %w(ruby-talk@ruby-lang.org),
39
+ :server => 'localhost',
40
+ :port => 25,
41
+ :domain => ENV['HOSTNAME'],
42
+ :acct => nil,
43
+ :passwd => nil,
44
+ :authtype => :plain
45
+ }
46
+ ),
47
+
48
+ # Gem Packaging
49
+ :gem => OpenStruct.new(
50
+ :dependencies => [],
51
+ :executables => nil,
52
+ :extensions => FileList['ext/**/extconf.rb'],
53
+ :files => nil,
54
+ :need_tar => true,
55
+ :need_zip => false,
56
+ :extras => {}
57
+ ),
58
+
59
+ # File Annotations
60
+ :notes => OpenStruct.new(
61
+ :exclude => %w(^tasks/setup\.rb$),
62
+ :extensions => %w(.txt .rb .erb) << '',
63
+ :tags => %w(FIXME OPTIMIZE TODO)
64
+ ),
65
+
66
+ # Rcov
67
+ :rcov => OpenStruct.new(
68
+ :dir => 'coverage',
69
+ :opts => %w[--sort coverage -T],
70
+ :threshold => 90.0,
71
+ :threshold_exact => false
72
+ ),
73
+
74
+ # Rdoc
75
+ :rdoc => OpenStruct.new(
76
+ :opts => [],
77
+ :include => %w(^lib/ ^bin/ ^ext/ \.txt$),
78
+ :exclude => %w(extconf\.rb$),
79
+ :main => nil,
80
+ :dir => 'doc',
81
+ :remote_dir => nil
82
+ ),
83
+
84
+ # Rubyforge
85
+ :rubyforge => OpenStruct.new(
86
+ :name => "\000"
87
+ ),
88
+
89
+ # Rspec
90
+ :spec => OpenStruct.new(
91
+ :files => FileList['spec/**/*_spec.rb'],
92
+ :opts => []
93
+ ),
94
+
95
+ # Subversion Repository
96
+ :svn => OpenStruct.new(
97
+ :root => nil,
98
+ :path => '',
99
+ :trunk => 'trunk',
100
+ :tags => 'tags',
101
+ :branches => 'branches'
102
+ ),
103
+
104
+ # Test::Unit
105
+ :test => OpenStruct.new(
106
+ :files => FileList['test/**/test_*.rb'],
107
+ :file => 'test/all.rb',
108
+ :opts => []
109
+ )
110
+ )
111
+
112
+ # Load the other rake files in the tasks folder
113
+ rakefiles = Dir.glob('tasks/*.rake').sort
114
+ rakefiles.unshift(rakefiles.delete('tasks/post_load.rake')).compact!
115
+ import(*rakefiles)
116
+
117
+ # Setup the project libraries
118
+ %w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
119
+
120
+ # Setup some constants
121
+ WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM unless defined? WIN32
122
+
123
+ DEV_NULL = WIN32 ? 'NUL:' : '/dev/null'
124
+
125
+ def quiet( &block )
126
+ io = [STDOUT.dup, STDERR.dup]
127
+ STDOUT.reopen DEV_NULL
128
+ STDERR.reopen DEV_NULL
129
+ block.call
130
+ ensure
131
+ STDOUT.reopen io.first
132
+ STDERR.reopen io.last
133
+ $stdout, $stderr = STDOUT, STDERR
134
+ end
135
+
136
+ DIFF = if WIN32 then 'diff.exe'
137
+ else
138
+ if quiet {system "gdiff", __FILE__, __FILE__} then 'gdiff'
139
+ else 'diff' end
140
+ end unless defined? DIFF
141
+
142
+ SUDO = if WIN32 then ''
143
+ else
144
+ if quiet {system 'which sudo'} then 'sudo'
145
+ else '' end
146
+ end
147
+
148
+ RCOV = WIN32 ? 'rcov.bat' : 'rcov'
149
+ RDOC = WIN32 ? 'rdoc.bat' : 'rdoc'
150
+ GEM = WIN32 ? 'gem.bat' : 'gem'
151
+
152
+ %w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
153
+ begin
154
+ require lib
155
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", true}
156
+ rescue LoadError
157
+ Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", false}
158
+ end
159
+ end
160
+ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
161
+ system("svn --version 2>&1 > #{DEV_NULL}"))
162
+ HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
163
+ system("git --version 2>&1 > #{DEV_NULL}"))
164
+
165
+ # Reads a file at +path+ and spits out an array of the +paragraphs+
166
+ # specified.
167
+ #
168
+ # changes = paragraphs_of('History.txt', 0..1).join("\n\n")
169
+ # summary, *description = paragraphs_of('README.txt', 3, 3..8)
170
+ #
171
+ def paragraphs_of( path, *paragraphs )
172
+ title = String === paragraphs.first ? paragraphs.shift : nil
173
+ ary = File.read(path).delete("\r").split(/\n\n+/)
174
+
175
+ result = if title
176
+ tmp, matching = [], false
177
+ rgxp = %r/^=+\s*#{Regexp.escape(title)}/i
178
+ paragraphs << (0..-1) if paragraphs.empty?
179
+
180
+ ary.each do |val|
181
+ if val =~ rgxp
182
+ break if matching
183
+ matching = true
184
+ rgxp = %r/^=+/i
185
+ elsif matching
186
+ tmp << val
187
+ end
188
+ end
189
+ tmp
190
+ else ary end
191
+
192
+ result.values_at(*paragraphs)
193
+ end
194
+
195
+ # Adds the given gem _name_ to the current project's dependency list. An
196
+ # optional gem _version_ can be given. If omitted, the newest gem version
197
+ # will be used.
198
+ #
199
+ def depend_on( name, version = nil )
200
+ spec = Gem.source_index.find_name(name).last
201
+ version = spec.version.to_s if version.nil? and !spec.nil?
202
+
203
+ PROJ.gem.dependencies << case version
204
+ when nil; [name]
205
+ when %r/^\d/; [name, ">= #{version}"]
206
+ else [name, version] end
207
+ end
208
+
209
+ # Adds the given arguments to the include path if they are not already there
210
+ #
211
+ def ensure_in_path( *args )
212
+ args.each do |path|
213
+ path = File.expand_path(path)
214
+ $:.unshift(path) if test(?d, path) and not $:.include?(path)
215
+ end
216
+ end
217
+
218
+ # Find a rake task using the task name and remove any description text. This
219
+ # will prevent the task from being displayed in the list of available tasks.
220
+ #
221
+ def remove_desc_for_task( names )
222
+ Array(names).each do |task_name|
223
+ task = Rake.application.tasks.find {|t| t.name == task_name}
224
+ next if task.nil?
225
+ task.instance_variable_set :@comment, nil
226
+ end
227
+ end
228
+
229
+ # Change working directories to _dir_, call the _block_ of code, and then
230
+ # change back to the original working directory (the current directory when
231
+ # this method was called).
232
+ #
233
+ def in_directory( dir, &block )
234
+ curdir = pwd
235
+ begin
236
+ cd dir
237
+ return block.call
238
+ ensure
239
+ cd curdir
240
+ end
241
+ end
242
+
243
+ # Scans the current working directory and creates a list of files that are
244
+ # candidates to be in the manifest.
245
+ #
246
+ def manifest_files
247
+ files = []
248
+ exclude = Regexp.new(PROJ.exclude.join('|'))
249
+ Find.find '.' do |path|
250
+ path.sub! %r/^(\.\/|\/)/o, ''
251
+ next unless test ?f, path
252
+ next if path =~ exclude
253
+ files << path
254
+ end
255
+ files.sort!
256
+ end
257
+
258
+ # We need a "valid" method thtat determines if a string is suitable for use
259
+ # in the gem specification.
260
+ #
261
+ class Object
262
+ def valid?
263
+ return !(self.empty? or self == "\000") if self.respond_to?(:to_str)
264
+ return false
265
+ end
266
+ end
267
+
268
+ # EOF
data/tasks/test.rake ADDED
@@ -0,0 +1,34 @@
1
+ require 'rake/testtask'
2
+
3
+ namespace :test do
4
+
5
+ Rake::TestTask.new(:run) do |t|
6
+ t.libs = PROJ.libs
7
+ t.test_files = if test(?f, PROJ.test.file) then [PROJ.test.file]
8
+ else PROJ.test.files end
9
+ t.ruby_opts += PROJ.ruby_opts
10
+ t.ruby_opts += PROJ.test.opts
11
+ end
12
+
13
+ if HAVE_RCOV
14
+ desc 'Run rcov on the unit tests'
15
+ task :rcov => :clobber_rcov do
16
+ opts = PROJ.rcov.opts.dup << '-o' << PROJ.rcov.dir
17
+ opts = opts.join(' ')
18
+ files = if test(?f, PROJ.test.file) then [PROJ.test.file]
19
+ else PROJ.test.files end
20
+ files = files.join(' ')
21
+ sh "#{RCOV} #{files} #{opts}"
22
+ end
23
+
24
+ task :clobber_rcov do
25
+ rm_r 'coverage' rescue nil
26
+ end
27
+ end
28
+
29
+ end # namespace :test
30
+
31
+ desc 'Alias to test:run'
32
+ task :test => 'test:run'
33
+
34
+ task :clobber => 'test:clobber_rcov' if HAVE_RCOV
@@ -0,0 +1,305 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class ActsAsMarkupTest < Test::Unit::TestCase
4
+ def setup
5
+ setup_db
6
+ end
7
+
8
+ context 'acts_as_markdown' do
9
+ setup do
10
+ @markdown_text = '## Markdown Test Text'
11
+ end
12
+
13
+ context 'using RDiscount' do
14
+ setup do
15
+ ActsAsMarkup.markdown_library = :rdiscount
16
+ class ::Post < ActiveRecord::Base
17
+ acts_as_markdown :body
18
+ end
19
+ @post = Post.create!(:title => 'Blah', :body => @markdown_text)
20
+ end
21
+
22
+ should "have a RDiscount object returned for the column value" do
23
+ assert_kind_of RDiscount, @post.body
24
+ end
25
+
26
+ should "return original markdown text for a `to_s` method call on the column value" do
27
+ assert_equal @markdown_text, @post.body.to_s
28
+ end
29
+
30
+ should "return formated html for a `to_html` method call on the column value" do
31
+ assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
32
+ end
33
+
34
+ context "changing value of markdown field should return new markdown object" do
35
+ setup do
36
+ @old_body = @post.body
37
+ @post.body = "`@count = 20`"
38
+ end
39
+
40
+ should "still have an RDiscount object but not the same object" do
41
+ assert_kind_of RDiscount, @post.body
42
+ assert_not_same @post.body, @old_body
43
+ end
44
+
45
+ should "return correct text for `to_s`" do
46
+ assert_equal "`@count = 20`", @post.body.to_s
47
+ end
48
+
49
+ should "return correct HTML for the `to_html` method" do
50
+ assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
51
+ end
52
+
53
+ teardown do
54
+ @old_body = nil
55
+ end
56
+ end
57
+
58
+ teardown do
59
+ @post = nil
60
+ Post.delete_all
61
+ end
62
+ end
63
+
64
+ context 'using Ruby PEG Markdown' do
65
+ setup do
66
+ ActsAsMarkup.markdown_library = :rpeg
67
+ class ::Post < ActiveRecord::Base
68
+ acts_as_markdown :body
69
+ end
70
+ @post = Post.create!(:title => 'Blah', :body => @markdown_text)
71
+ end
72
+
73
+ should "have a Ruby PEG Markdown object returned for the column value" do
74
+ assert_kind_of PEGMarkdown, @post.body
75
+ end
76
+
77
+ should "return original markdown text for a `to_s` method call on the column value" do
78
+ assert_equal @markdown_text, @post.body.to_s
79
+ end
80
+
81
+ should "return formated html for a `to_html` method call on the column value" do
82
+ assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
83
+ end
84
+
85
+ context "changing value of markdown field should return new markdown object" do
86
+ setup do
87
+ @old_body = @post.body
88
+ @post.body = "`@count = 20`"
89
+ end
90
+
91
+ should "still have an PEGMarkdown object but not the same object" do
92
+ assert_kind_of PEGMarkdown, @post.body
93
+ assert_not_same @post.body, @old_body
94
+ end
95
+
96
+ should "return correct text for `to_s`" do
97
+ assert_equal "`@count = 20`", @post.body.to_s
98
+ end
99
+
100
+ should "return correct HTML for the `to_html` method" do
101
+ assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
102
+ end
103
+
104
+ teardown do
105
+ @old_body = nil
106
+ end
107
+ end
108
+
109
+ teardown do
110
+ @post = nil
111
+ Post.delete_all
112
+ end
113
+ end
114
+
115
+ context 'using BlueCloth' do
116
+ setup do
117
+ ActsAsMarkup.markdown_library = :bluecloth
118
+ class ::Post < ActiveRecord::Base
119
+ acts_as_markdown :body
120
+ end
121
+ @post = Post.create!(:title => 'Blah', :body => @markdown_text)
122
+ end
123
+
124
+ should "have a BlueCloth object returned for the column value" do
125
+ assert_kind_of BlueCloth, @post.body
126
+ end
127
+
128
+ should "return original markdown text for a `to_s` method call on the column value" do
129
+ assert_equal @markdown_text, @post.body.to_s
130
+ end
131
+
132
+ should "return formated html for a `to_html` method call on the column value" do
133
+ assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @post.body.to_html)
134
+ end
135
+
136
+ context "changing value of markdown field should return new markdown object" do
137
+ setup do
138
+ @old_body = @post.body
139
+ @post.body = "`@count = 20`"
140
+ end
141
+
142
+ should "still have an BlueCloth object but not the same object" do
143
+ assert_kind_of BlueCloth, @post.body
144
+ assert_not_same @post.body, @old_body
145
+ end
146
+
147
+ should "return correct text for `to_s`" do
148
+ assert_equal "`@count = 20`", @post.body.to_s
149
+ end
150
+
151
+ should "return correct HTML for the `to_html` method" do
152
+ assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @post.body.to_html)
153
+ end
154
+
155
+ teardown do
156
+ @old_body = nil
157
+ end
158
+ end
159
+
160
+ teardown do
161
+ @post = nil
162
+ Post.delete_all
163
+ end
164
+ end
165
+
166
+ teardown do
167
+ @markdown_text = nil
168
+ end
169
+ end
170
+
171
+ context 'acts_as_textile' do
172
+ setup do
173
+ @textile_text = "h2. Textile Test Text"
174
+ class ::Post < ActiveRecord::Base
175
+ acts_as_textile :body
176
+ end
177
+ @post = Post.create!(:title => 'Blah', :body => @textile_text)
178
+ end
179
+
180
+ should "have a RedCloth object returned for the column value" do
181
+ assert_kind_of RedCloth::TextileDoc, @post.body
182
+ end
183
+
184
+ should "return original textile text for a `to_s` method call on the column value" do
185
+ assert_equal @textile_text, @post.body.to_s
186
+ end
187
+
188
+ should "return formated html for a `to_html` method call on the column value" do
189
+ assert_match(/<h2>Textile Test Text<\/h2>/, @post.body.to_html)
190
+ end
191
+
192
+ context "changing value of textile field should return new textile object" do
193
+ setup do
194
+ @old_body = @post.body
195
+ @post.body = "@@count = 20@"
196
+ end
197
+
198
+ should "still have an RedCloth object but not the same object" do
199
+ assert_kind_of RedCloth::TextileDoc, @post.body
200
+ assert_not_same @post.body, @old_body
201
+ end
202
+
203
+ should "return correct text for `to_s`" do
204
+ assert_equal "@@count = 20@", @post.body.to_s
205
+ end
206
+
207
+ should "return correct HTML for the `to_html` method" do
208
+ assert_match(/<code>\@count\s\=\s20<\/code>/, @post.body.to_html)
209
+ end
210
+
211
+ teardown do
212
+ @old_body = nil
213
+ end
214
+ end
215
+
216
+ teardown do
217
+ @textile_text, @post = nil
218
+ Post.delete_all
219
+ end
220
+ end
221
+
222
+ context 'acts_as_markup' do
223
+ setup do
224
+ ActsAsMarkup.markdown_library = ActsAsMarkup::DEFAULT_MAKRDOWN_LIB
225
+
226
+ @textile_text = "h2. Textile Test Text"
227
+ class ::TextilePost < ActiveRecord::Base
228
+ acts_as_markup :language => :textile, :columns => [:body]
229
+ end
230
+ @textile_post = TextilePost.create!(:title => 'Blah', :body => @textile_text)
231
+
232
+ @markdown_text = '## Markdown Test Text'
233
+ class ::MarkdownPost < ActiveRecord::Base
234
+ acts_as_markup :language => :markdown, :columns => [:body]
235
+ end
236
+ @markdown_post = MarkdownPost.create!(:title => 'Blah', :body => @markdown_text)
237
+ end
238
+
239
+ should "have a markup object returned for the column value" do
240
+ assert_kind_of RedCloth::TextileDoc, @textile_post.body
241
+ assert_kind_of RDiscount, @markdown_post.body
242
+ end
243
+
244
+ should "return original markup text for a `to_s` method call on the column value" do
245
+ assert_equal @markdown_text, @markdown_post.body.to_s
246
+ assert_equal @textile_text, @textile_post.body.to_s
247
+ end
248
+
249
+ should "return formated html for a `to_html` method call on the column value" do
250
+ assert_match(/<h2>\s*Markdown Test Text\s*<\/h2>/, @markdown_post.body.to_html)
251
+ assert_match(/<h2>Textile Test Text<\/h2>/, @textile_post.body.to_html)
252
+ end
253
+
254
+ context "changing value of markup field should return new markup object" do
255
+ setup do
256
+ @markdown_old_body = @markdown_post.body
257
+ @markdown_post.body = "`@count = 20`"
258
+ @textile_old_body = @textile_post.body
259
+ @textile_post.body = "@@count = 20@"
260
+ end
261
+
262
+ should "still have an markup object but not the same object" do
263
+ assert_kind_of RedCloth::TextileDoc, @textile_post.body
264
+ assert_not_same @markdown_post.body, @markdown_old_body
265
+ assert_kind_of RDiscount, @markdown_post.body
266
+ assert_not_same @textile_post.body, @textile_old_body
267
+ end
268
+
269
+ should "return correct text for `to_s`" do
270
+ assert_equal "`@count = 20`", @markdown_post.body.to_s
271
+ assert_equal "@@count = 20@", @textile_post.body.to_s
272
+ end
273
+
274
+ should "return correct HTML for the `to_html` method" do
275
+ assert_match(/<code>\s*\@count\s\=\s20\s*<\/code>/, @markdown_post.body.to_html)
276
+ assert_match(/<code>\@count\s\=\s20<\/code>/, @textile_post.body.to_html)
277
+ end
278
+
279
+ teardown do
280
+ @markdown_old_body, @textile_old_body = nil
281
+ end
282
+ end
283
+
284
+ teardown do
285
+ @textile_text, @textile_post, @markdown_text, @markdown_post = nil
286
+ TextilePost.delete_all
287
+ MarkdownPost.delete_all
288
+ end
289
+ end
290
+
291
+ context 'acts_as_markup with bad language name' do
292
+ should 'raise exception when a non-supported language is passed to acts_as_markup' do
293
+ assert_raise ActsAsMarkup::UnsportedMarkupLanguage do
294
+ class ::Post < ActiveRecord::Base
295
+ acts_as_markup :language => :wiki, :columns => [:body]
296
+ end
297
+ end
298
+ end
299
+ end
300
+
301
+ def teardown
302
+ teardown_db
303
+ end
304
+ end
305
+
@@ -0,0 +1,33 @@
1
+ require 'test/unit'
2
+ require 'shoulda'
3
+ require File.expand_path( File.join(File.dirname(__FILE__), %w[.. lib acts_as_markup]) )
4
+
5
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
6
+
7
+ def setup_db
8
+ ActiveRecord::Schema.define(:version => 1) do
9
+ create_table :posts do |t|
10
+ t.column :title, :string
11
+ t.column :body, :text
12
+ t.timestamps
13
+ end
14
+
15
+ create_table :markdown_posts do |t|
16
+ t.column :title, :string
17
+ t.column :body, :text
18
+ t.timestamps
19
+ end
20
+
21
+ create_table :textile_posts do |t|
22
+ t.column :title, :string
23
+ t.column :body, :text
24
+ t.timestamps
25
+ end
26
+ end
27
+ end
28
+
29
+ def teardown_db
30
+ ActiveRecord::Base.connection.tables.each do |table|
31
+ ActiveRecord::Base.connection.drop_table(table)
32
+ end
33
+ end