vigetlabs-acts_as_markup 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.
@@ -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