jakewendt-simply_documents 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +70 -0
- data/app/controllers/documents_controller.rb +99 -0
- data/app/models/document.rb +28 -0
- data/app/views/documents/_document.html.erb +15 -0
- data/app/views/documents/_form.html.erb +13 -0
- data/app/views/documents/edit.html.erb +14 -0
- data/app/views/documents/index.html.erb +15 -0
- data/app/views/documents/new.html.erb +11 -0
- data/app/views/documents/preview.html.erb +17 -0
- data/config/document.yml +54 -0
- data/config/routes.rb +5 -0
- data/generators/simply_documents/USAGE +0 -0
- data/generators/simply_documents/simply_documents_generator.rb +87 -0
- data/generators/simply_documents/templates/autotest_simply_documents.rb +2 -0
- data/generators/simply_documents/templates/functional/documents_controller_test.rb +220 -0
- data/generators/simply_documents/templates/javascripts/documents.js +0 -0
- data/generators/simply_documents/templates/migrations/add_attachments_document_to_document.rb +19 -0
- data/generators/simply_documents/templates/migrations/create_documents.rb +19 -0
- data/generators/simply_documents/templates/migrations/polymorphicize_document_owner.rb +13 -0
- data/generators/simply_documents/templates/simply_documents.rake +6 -0
- data/generators/simply_documents/templates/stylesheets/documents.css +4 -0
- data/generators/simply_documents/templates/unit/document_test.rb +18 -0
- data/lib/jakewendt-simply_documents.rb +1 -0
- data/lib/simply_documents.rb +54 -0
- data/lib/simply_documents/autotest.rb +26 -0
- data/lib/simply_documents/factories.rb +4 -0
- data/lib/simply_documents/file_utils_extension.rb +18 -0
- data/lib/simply_documents/owner.rb +12 -0
- data/lib/simply_documents/tasks.rb +1 -0
- data/lib/simply_documents/test_tasks.rb +56 -0
- data/lib/tasks/application.rake +40 -0
- data/lib/tasks/database.rake +52 -0
- data/lib/tasks/documentation.rake +68 -0
- data/lib/tasks/rcov.rake +44 -0
- data/lib/tasks/simply_authorized.rake +2 -0
- data/lib/tasks/simply_helpful.rake +2 -0
- data/lib/tasks/simply_sessions.rake +5 -0
- data/lib/tasks/ucb_ccls_engine_tasks.rake +50 -0
- data/rails/init.rb +1 -0
- data/test/app/controllers/application_controller.rb +41 -0
- data/test/app/controllers/home_controller.rb +10 -0
- data/test/app/models/user.rb +3 -0
- data/test/assets/edit_save_wireframe.pdf +0 -0
- data/test/config/routes.rb +9 -0
- data/test/functional/documents/documents_controller_test.rb +222 -0
- data/test/unit/documents/document_test.rb +18 -0
- metadata +271 -0
@@ -0,0 +1,220 @@
|
|
1
|
+
#require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class SimplyDocuments::DocumentsControllerTest < ActionController::TestCase
|
5
|
+
tests DocumentsController
|
6
|
+
|
7
|
+
ASSERT_ACCESS_OPTIONS = {
|
8
|
+
:model => 'Document',
|
9
|
+
:actions => [:new,:create,:edit,:update,:destroy,:index],
|
10
|
+
:method_for_create => :factory_create,
|
11
|
+
:attributes_for_create => :factory_attributes
|
12
|
+
}
|
13
|
+
|
14
|
+
def factory_create
|
15
|
+
Factory(:document)
|
16
|
+
end
|
17
|
+
def factory_attributes
|
18
|
+
Factory.attributes_for(:document)
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_access_with_https
|
22
|
+
assert_access_with_login({
|
23
|
+
:logins => [:super_user,:admin,:editor]})
|
24
|
+
|
25
|
+
assert_no_access_with_http
|
26
|
+
assert_no_access_with_login({
|
27
|
+
:logins => [:interviewer,:reader,:active_user] })
|
28
|
+
assert_no_access_without_login
|
29
|
+
|
30
|
+
assert_no_access_with_login(
|
31
|
+
:attributes_for_create => nil,
|
32
|
+
:method_for_create => nil,
|
33
|
+
:actions => nil,
|
34
|
+
:suffix => " and invalid id",
|
35
|
+
:login => :superuser,
|
36
|
+
:redirect => :documents_path,
|
37
|
+
:edit => { :id => 0 },
|
38
|
+
:update => { :id => 0 },
|
39
|
+
:destroy => { :id => 0 }
|
40
|
+
)
|
41
|
+
|
42
|
+
%w( super_user admin editor ).each do |cu|
|
43
|
+
|
44
|
+
|
45
|
+
## still only privacy filter is based on "may_maintain_pages"
|
46
|
+
## which isn't really gonna work
|
47
|
+
# test "should get redirect to public s3 document with #{cu} login" do
|
48
|
+
# Document.any_instance.stubs(:s3_public?).returns(true)
|
49
|
+
# document = Factory(:document, :document_file_name => 'bogus_file_name')
|
50
|
+
# assert !File.exists?(document.document.path)
|
51
|
+
# login_as send(cu)
|
52
|
+
# get :show, :id => document.id
|
53
|
+
# assert_redirected_to document.document.url
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# test "should get redirect to private s3 document with #{cu} login" do
|
57
|
+
# Document.any_instance.stubs(:s3_private?).returns(true)
|
58
|
+
# document = Factory(:document, :document_file_name => 'bogus_file_name')
|
59
|
+
# assert !File.exists?(document.document.path)
|
60
|
+
# login_as send(cu)
|
61
|
+
# get :show, :id => document.id
|
62
|
+
# assert_redirected_to document.s3_url
|
63
|
+
# end
|
64
|
+
|
65
|
+
# Add may_download_document
|
66
|
+
|
67
|
+
# test "should get redirect to public s3 document with #{cu} login" do
|
68
|
+
# Document.any_instance.stubs(:s3_public?).returns(true)
|
69
|
+
# document = Factory(:document, :document_file_name => 'bogus_file_name')
|
70
|
+
# assert !File.exists?(document.document.path)
|
71
|
+
# login_as send(cu)
|
72
|
+
# get :show, :id => document.id
|
73
|
+
# assert_redirected_to document.document.url
|
74
|
+
# end
|
75
|
+
|
76
|
+
test "should get redirect to private s3 document with #{cu} login" do
|
77
|
+
Document.has_attached_file :document, {
|
78
|
+
:s3_headers => {
|
79
|
+
'x-amz-storage-class' => 'REDUCED_REDUNDANCY' },
|
80
|
+
:s3_permissions => :private,
|
81
|
+
:storage => :s3,
|
82
|
+
:s3_protocol => 'https',
|
83
|
+
:s3_credentials => "#{Rails.root}/config/s3.yml",
|
84
|
+
:bucket => 'ccls',
|
85
|
+
:path => "documents/:id/:filename"
|
86
|
+
}
|
87
|
+
|
88
|
+
# Since the REAL S3 credentials are only in production
|
89
|
+
# Bad credentials make exists? return true????
|
90
|
+
Rails.stubs(:env).returns('production')
|
91
|
+
document = Factory(:document, :document_file_name => 'bogus_file_name')
|
92
|
+
assert !document.document.exists?
|
93
|
+
assert !File.exists?(document.document.path)
|
94
|
+
|
95
|
+
AWS::S3::S3Object.stubs(:exists?).returns(true)
|
96
|
+
|
97
|
+
login_as send(cu)
|
98
|
+
get :show, :id => document.id
|
99
|
+
assert_response :redirect
|
100
|
+
assert_match %r{\Ahttp(s)?://s3.amazonaws.com/ccls/documents/\d+/bogus_file_name\.\?AWSAccessKeyId=\w+&Expires=\d+&Signature=.+\z}, @response.redirected_to
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
test "should NOT download document with nil document and #{cu} login" do
|
109
|
+
document = Factory(:document)
|
110
|
+
assert document.document.path.blank?
|
111
|
+
login_as send(cu)
|
112
|
+
get :show, :id => document.id
|
113
|
+
assert_redirected_to preview_document_path(document)
|
114
|
+
assert_not_nil flash[:error]
|
115
|
+
end
|
116
|
+
|
117
|
+
test "should NOT download document with no document and #{cu} login" do
|
118
|
+
document = Factory(:document, :document_file_name => 'bogus_file_name')
|
119
|
+
assert !File.exists?(document.document.path)
|
120
|
+
login_as send(cu)
|
121
|
+
get :show, :id => document.id
|
122
|
+
assert_redirected_to preview_document_path(document)
|
123
|
+
assert_not_nil flash[:error]
|
124
|
+
end
|
125
|
+
|
126
|
+
test "should NOT download nonexistant document with #{cu} login" do
|
127
|
+
assert !File.exists?('some_fake_file_name.doc')
|
128
|
+
login_as send(cu)
|
129
|
+
get :show, :id => 'some_fake_file_name',:format => 'doc'
|
130
|
+
assert_redirected_to documents_path
|
131
|
+
assert_not_nil flash[:error]
|
132
|
+
end
|
133
|
+
|
134
|
+
test "should preview document with document and #{cu} login" do
|
135
|
+
document = Factory(:document)
|
136
|
+
login_as send(cu)
|
137
|
+
get :preview, :id => document.id
|
138
|
+
assert_response :success
|
139
|
+
assert_nil flash[:error]
|
140
|
+
end
|
141
|
+
|
142
|
+
test "should download document by id with document and #{cu} login" do
|
143
|
+
document = Document.create!(Factory.attributes_for(:document,
|
144
|
+
:document => File.open(File.dirname(__FILE__) +
|
145
|
+
'/../../assets/edit_save_wireframe.pdf')))
|
146
|
+
login_as send(cu)
|
147
|
+
get :show, :id => document.reload.id
|
148
|
+
assert_nil flash[:error]
|
149
|
+
assert_not_nil @response.headers['Content-disposition'].match(
|
150
|
+
/attachment;.*pdf/)
|
151
|
+
document.destroy
|
152
|
+
end
|
153
|
+
|
154
|
+
test "should download document by name with document and #{cu} login" do
|
155
|
+
document = Document.create!(Factory.attributes_for(:document,
|
156
|
+
:document => File.open(File.dirname(__FILE__) +
|
157
|
+
'/../../assets/edit_save_wireframe.pdf')))
|
158
|
+
login_as send(cu)
|
159
|
+
get :show, :id => 'edit_save_wireframe',
|
160
|
+
:format => 'pdf'
|
161
|
+
assert_nil flash[:error]
|
162
|
+
assert_not_nil @response.headers['Content-disposition'].match(
|
163
|
+
/attachment;.*pdf/)
|
164
|
+
document.destroy
|
165
|
+
end
|
166
|
+
|
167
|
+
test "should NOT create invalid document with #{cu} login" do
|
168
|
+
login_as send(cu)
|
169
|
+
assert_no_difference('Document.count') do
|
170
|
+
post :create, :document => {}
|
171
|
+
end
|
172
|
+
assert_not_nil flash[:error]
|
173
|
+
assert_template 'new'
|
174
|
+
assert_response :success
|
175
|
+
end
|
176
|
+
|
177
|
+
test "should NOT update invalid document with #{cu} login" do
|
178
|
+
login_as send(cu)
|
179
|
+
put :update, :id => Factory(:document).id,
|
180
|
+
:document => { :title => "a" }
|
181
|
+
assert_not_nil flash[:error]
|
182
|
+
assert_template 'edit'
|
183
|
+
assert_response :success
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
%w( interviewer reader active_user ).each do |cu|
|
189
|
+
|
190
|
+
test "should NOT preview document with #{cu} login" do
|
191
|
+
document = Factory(:document)
|
192
|
+
login_as send(cu)
|
193
|
+
get :preview, :id => document.id
|
194
|
+
assert_redirected_to root_path
|
195
|
+
assert_not_nil flash[:error]
|
196
|
+
end
|
197
|
+
|
198
|
+
test "should NOT download document with #{cu} login" do
|
199
|
+
document = Factory(:document)
|
200
|
+
login_as send(cu)
|
201
|
+
get :show, :id => document.id
|
202
|
+
assert_redirected_to root_path
|
203
|
+
assert_not_nil flash[:error]
|
204
|
+
end
|
205
|
+
|
206
|
+
end
|
207
|
+
|
208
|
+
test "should NOT preview document without login" do
|
209
|
+
document = Factory(:document)
|
210
|
+
get :preview, :id => document.id
|
211
|
+
assert_redirected_to_login
|
212
|
+
end
|
213
|
+
|
214
|
+
test "should NOT download document without login" do
|
215
|
+
document = Factory(:document)
|
216
|
+
get :show, :id => document.id
|
217
|
+
assert_redirected_to_login
|
218
|
+
end
|
219
|
+
|
220
|
+
end
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class AddAttachmentsDocumentToDocument < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :documents, :document_file_name, :string
|
4
|
+
add_column :documents, :document_content_type, :string
|
5
|
+
add_column :documents, :document_file_size, :integer
|
6
|
+
add_column :documents, :document_updated_at, :datetime
|
7
|
+
|
8
|
+
add_index :documents, :document_file_name, :unique => true
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
remove_index :documents, :document_file_name
|
13
|
+
|
14
|
+
remove_column :documents, :document_file_name
|
15
|
+
remove_column :documents, :document_content_type
|
16
|
+
remove_column :documents, :document_file_size
|
17
|
+
remove_column :documents, :document_updated_at
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateDocuments < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :documents do |t|
|
4
|
+
t.references :owner
|
5
|
+
t.string :title, :null => false
|
6
|
+
t.text :abstract
|
7
|
+
t.boolean :shared_with_all,
|
8
|
+
:default => false, :null => false
|
9
|
+
t.boolean :shared_with_select,
|
10
|
+
:default => false, :null => false
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_index :documents, :owner_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.down
|
17
|
+
drop_table :documents
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class PolymorphicizeDocumentOwner < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :documents, :owner_type, :string
|
4
|
+
remove_index :documents, :owner_id
|
5
|
+
add_index :documents, [:owner_id,:owner_type]
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.down
|
9
|
+
remove_index :documents, [:owner_id,:owner_type]
|
10
|
+
add_index :documents, :owner_id
|
11
|
+
remove_column :documents, :owner_type_string
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class SimplyDocuments::DocumentTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
assert_should_require(:title)
|
7
|
+
assert_should_require_attribute_length(:title, :minimum => 4)
|
8
|
+
assert_should_belong_to(:owner,:class_name => 'User')
|
9
|
+
|
10
|
+
test "should create document" do
|
11
|
+
assert_difference 'Document.count' do
|
12
|
+
object = create_object
|
13
|
+
assert !object.new_record?,
|
14
|
+
"#{object.errors.full_messages.to_sentence}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'simply_documents'
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'active_support'
|
3
|
+
require 'ruby_extension'
|
4
|
+
require 'simply_helpful'
|
5
|
+
require 'gravatar'
|
6
|
+
#require 'calnet_authenticated'
|
7
|
+
require 'simply_authorized'
|
8
|
+
require 'acts_as_list'
|
9
|
+
module SimplyDocuments
|
10
|
+
# predefine namespace
|
11
|
+
end
|
12
|
+
require 'simply_documents/owner'
|
13
|
+
|
14
|
+
# This doesn't seem necessary
|
15
|
+
%w{models controllers}.each do |dir|
|
16
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), '../app', dir))
|
17
|
+
ActiveSupport::Dependencies.autoload_paths << path
|
18
|
+
ActiveSupport::Dependencies.autoload_once_paths << path
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'action_controller' # loads HTML
|
22
|
+
HTML::WhiteListSanitizer.allowed_attributes.merge(%w(
|
23
|
+
id class style
|
24
|
+
))
|
25
|
+
|
26
|
+
if defined?(Rails) && Rails.env == 'test' && Rails.class_variable_defined?("@@configuration")
|
27
|
+
require 'active_support/test_case'
|
28
|
+
require 'factory_girl'
|
29
|
+
require 'simply_documents/factories'
|
30
|
+
# else
|
31
|
+
# running a rake task
|
32
|
+
end
|
33
|
+
|
34
|
+
if RUBY_PLATFORM =~ /java/i
|
35
|
+
require 'simply_documents/file_utils_extension'
|
36
|
+
end
|
37
|
+
|
38
|
+
require 'paperclip'
|
39
|
+
if defined? ::Paperclip::Glue
|
40
|
+
ActiveRecord::Base.send(:include, ::Paperclip::Glue)
|
41
|
+
else
|
42
|
+
ActiveRecord::Base.send(:include, ::Paperclip)
|
43
|
+
end
|
44
|
+
|
45
|
+
ActionController::Routing::Routes.add_configuration_file(
|
46
|
+
File.expand_path(
|
47
|
+
File.join(
|
48
|
+
File.dirname(__FILE__), '../config/routes.rb')))
|
49
|
+
|
50
|
+
ActionController::Base.view_paths <<
|
51
|
+
File.expand_path(
|
52
|
+
File.join(
|
53
|
+
File.dirname(__FILE__), '../app/views'))
|
54
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Autotest::Rails
|
2
|
+
|
3
|
+
#
|
4
|
+
# Need both the mapping and the extra files
|
5
|
+
#
|
6
|
+
def run_with_simply_documents
|
7
|
+
add_exception %r%config/%
|
8
|
+
add_exception %r%versions/%
|
9
|
+
add_exception %r%\.git/%
|
10
|
+
self.extra_files << File.expand_path(File.join(
|
11
|
+
File.dirname(__FILE__),'/../../test/unit/documents/'))
|
12
|
+
|
13
|
+
self.extra_files << File.expand_path(File.join(
|
14
|
+
File.dirname(__FILE__),'/../../test/functional/documents/'))
|
15
|
+
|
16
|
+
add_mapping(
|
17
|
+
%r{^#{File.expand_path(File.join(File.dirname(__FILE__),'/../../test/'))}/(unit|functional)/documents/.*_test\.rb$}
|
18
|
+
) do |filename, _|
|
19
|
+
filename
|
20
|
+
end
|
21
|
+
run_without_simply_documents
|
22
|
+
end
|
23
|
+
alias_method_chain :run, :simply_documents
|
24
|
+
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Needed for Paperclip gem 2.3.3
|
2
|
+
# http://jira.codehaus.org/browse/JRUBY-3381
|
3
|
+
# http://github.com/thoughtbot/paperclip/issues/issue/193
|
4
|
+
# Errno::EACCES: Permission denied - /var/folders/kV/kV5XVPtqE9uZBCjn3z6vmk+++TM/-Tmp-/stream,19661,34729.pdf or /Users/jakewendt/github_repo/jakewendt/ucb_ccls_buffler/development/documents/2/edit_save_wireframe.pdf
|
5
|
+
FileUtils.module_eval do
|
6
|
+
class << self
|
7
|
+
alias_method :built_in_mv, :mv
|
8
|
+
|
9
|
+
def mv(src, dest, options = {})
|
10
|
+
begin
|
11
|
+
built_in_mv(src, dest, options)
|
12
|
+
rescue Errno::EACCES
|
13
|
+
cp(src, dest)
|
14
|
+
rm(src)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end unless FileUtils.methods.include?('built_in_mv')
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module SimplyDocuments::Owner
|
2
|
+
def self.included(base)
|
3
|
+
base.extend(PrepMethod)
|
4
|
+
end
|
5
|
+
module PrepMethod
|
6
|
+
def document_owner(*args)
|
7
|
+
options = args.extract_options!
|
8
|
+
has_many :documents, :as => :owner
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
ActiveRecord::Base.send(:include,SimplyDocuments::Owner)
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir["#{File.dirname(__FILE__)}/../tasks/**/*.rake"].sort.each { |ext| load ext }
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module SimplyDocuments;end
|
2
|
+
namespace :test do
|
3
|
+
namespace :units do
|
4
|
+
Rake::TestTask.new(:simply_documents => "db:test:prepare") do |t|
|
5
|
+
t.pattern = File.expand_path(File.join(
|
6
|
+
File.dirname(__FILE__),'/../../test/unit/documents/*_test.rb'))
|
7
|
+
t.libs << "test"
|
8
|
+
t.verbose = true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
namespace :functionals do
|
12
|
+
Rake::TestTask.new(:simply_documents => "db:test:prepare") do |t|
|
13
|
+
# t.pattern = File.expand_path(File.join(
|
14
|
+
# File.dirname(__FILE__),'/../../test/functional/documents/*_test.rb'))
|
15
|
+
t.libs << "test"
|
16
|
+
t.verbose = true
|
17
|
+
# this enables user override
|
18
|
+
# used to work without this, but now it doesn't???!?!?
|
19
|
+
t.test_files = [
|
20
|
+
File.expand_path(File.join(File.dirname(__FILE__),
|
21
|
+
'/../../test/functional/documents/*_test.rb')),
|
22
|
+
File.expand_path(File.join(Rails.root,
|
23
|
+
'/test/functional/documents/*_test.rb'))
|
24
|
+
]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
Rake::Task['test:functionals'].prerequisites.unshift(
|
29
|
+
"test:functionals:simply_documents" )
|
30
|
+
Rake::Task['test:units'].prerequisites.unshift(
|
31
|
+
"test:units:simply_documents" )
|
32
|
+
|
33
|
+
# I thought of possibly just including this file
|
34
|
+
# but that would make __FILE__ different.
|
35
|
+
# Hmmm
|
36
|
+
|
37
|
+
#
|
38
|
+
# used in simply_helpful's rake test:coverage to run gem's
|
39
|
+
# tests in the context of the application
|
40
|
+
#
|
41
|
+
@gem_test_dirs ||= []
|
42
|
+
#@gem_test_dirs << File.expand_path(File.join(File.dirname(__FILE__),
|
43
|
+
# '/../../test/unit/documents/'))
|
44
|
+
#@gem_test_dirs << File.expand_path(File.join(File.dirname(__FILE__),
|
45
|
+
# '/../../test/functional/documents/'))
|
46
|
+
|
47
|
+
#
|
48
|
+
# More flexible. Find all test files, pick out their dir, uniq 'em and add.
|
49
|
+
#
|
50
|
+
Dir.glob( File.expand_path(File.join(File.dirname(__FILE__),
|
51
|
+
'/../../test/*/documents/*_test.rb'))
|
52
|
+
).collect{|f|
|
53
|
+
File.dirname(f)
|
54
|
+
}.uniq.each{ |dir|
|
55
|
+
@gem_test_dirs << dir
|
56
|
+
}
|