sniff 0.11.12 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,56 +1,116 @@
1
- require 'data_miner'
2
1
  require 'active_record_inline_schema'
3
- require 'sniff/leap_ext'
2
+ require 'data_miner'
3
+ require 'earth'
4
4
  require 'logger'
5
5
 
6
- module Sniff
7
- extend self
6
+ require 'sniff/fixture'
7
+ require 'sniff/leap_ext'
8
8
 
9
+ class Sniff
9
10
  # Sniff's root directory (the gem's location on the filesystem)
10
- def root
11
+ def Sniff.root
11
12
  File.join(File.dirname(__FILE__), '..')
12
13
  end
13
14
 
14
15
  # Get a path relative to sniff's root
15
- def path(*rest)
16
+ def Sniff.path(*rest)
16
17
  File.join(root, *rest)
17
18
  end
18
19
 
19
- def logger
20
+ def Sniff.logger
20
21
  @logger ||= Logger.new nil
21
22
  end
22
- def logger=(val)
23
+ def Sniff.logger=(val)
23
24
  @logger = val
24
25
  end
25
26
 
27
+ def Sniff.init(local_root, options = {})
28
+ sniff = new local_root, options
29
+ sniff.connect
30
+ sniff
31
+ end
32
+
33
+ attr_accessor :root, :options, :test_support_path, :fixtures_path,
34
+ :logger, :project
35
+
26
36
  # Prepares the environment for running tests against Earth data and emitter
27
37
  # gems.
28
38
  #
29
39
  # local_root: Root directory of the emitter gem to be tested (path to the repo)
30
40
  #
31
41
  # options:
32
- # * :earth is the list of domains Earth.init should load (default: none)
33
- # * :load_data determines whether fixture data is loaded (default: true)
34
42
  # * :logger is a Logger log device used by Sniff and ActiveRecord (default: nil)
35
43
  # logger: nil = no log, string = file path, STDOUT for terminal
36
44
  # * :fixtures_path is the path to your gem's fixtures (default: local_root/lib/db/fixtures)
37
- def init(local_root, options = {})
38
- options[:earth] ||= :none
45
+ # * :reset_schemas tells earth to recreate tables for each model (default: false)
46
+ # * :cucumber tells Sniff to load cucumber test support files provided by the emitter in <emitter_root>/test_support/cucumber (default: false)
47
+ # * :project is the current project (e.g. 'flight'). Default is guessed from CWD
48
+ def initialize(local_root, options = {})
49
+ self.root = local_root
50
+ self.project = options[:project] || File.basename(File.expand_path(local_root))
51
+ self.options = options.symbolize_keys
52
+ self.test_support_path = File.join(root, 'features', 'support')
53
+ self.fixtures_path = options[:fixtures_path]
54
+
55
+ ENV['DATABASE_URL'] ||= "mysql2://root:password@localhost/test_#{project}"
39
56
 
40
- logger = options.delete(:logger) || ENV['LOGGER']
41
- Sniff.logger = Logger.new logger
57
+ load_supporting_libs
58
+
59
+ logger = self.options[:logger] || ENV['LOGGER']
60
+ Sniff.logger ||= Logger.new logger
42
61
  DataMiner.logger = Sniff.logger
62
+ DataMiner.unit_converter = :conversions
63
+
64
+ init_cucumber if self.options[:cucumber]
65
+ end
66
+
67
+ def init_cucumber
68
+ require 'cucumber'
69
+ require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support
70
+ cukes = Dir.glob File.join(File.dirname(__FILE__), 'test_support', 'cucumber', '**', '*.rb')
71
+ cukes.each { |support_file| require support_file }
72
+ end
43
73
 
44
- Sniff::Database.init local_root, options
74
+ def log(str)
75
+ Sniff.logger.info str
76
+ end
77
+
78
+ def fixtures_path
79
+ @fixtures_path ||= File.join(test_support_path, 'db', 'fixtures')
80
+ end
45
81
 
46
- if options[:cucumber]
47
- cukes = Dir.glob File.join(File.dirname(__FILE__), 'test_support', 'cucumber', '**', '*.rb')
48
- cukes.each { |support_file| require support_file }
82
+ # Connect to the database and set up an ActiveRecord logger
83
+ def connect
84
+ ActiveRecord::Base.logger = Sniff.logger
85
+ Earth.connect
86
+ end
87
+
88
+ def emitter_class
89
+ return @emitter_class unless @emitter_class.nil?
90
+ record_class_path = Dir.glob(File.join(test_support_path, '*_record.rb')).first
91
+ if record_class_path
92
+ require record_class_path
93
+ record_class = File.read(record_class_path)
94
+ klass = record_class.scan(/class ([^\s]*Record)/).flatten.first
95
+ @emitter_class = klass.constantize
49
96
  end
50
97
  end
51
- end
52
98
 
53
- require 'earth'
99
+ def migrate!
100
+ emitter_class.auto_upgrade! if emitter_class
101
+ end
102
+
103
+ def seed!
104
+ Fixture.load_fixtures fixtures_path
105
+ end
106
+
107
+ def load_supporting_libs
108
+ require project
54
109
 
55
- $:.unshift File.dirname(__FILE__)
56
- require 'sniff/database'
110
+ $:.unshift File.join(root, 'lib')
111
+ Dir[File.join(root, 'lib', 'test_support', '*.rb')].each do |lib|
112
+ log "Loading #{lib}"
113
+ require lib
114
+ end
115
+ end
116
+ end
@@ -1,6 +1,6 @@
1
1
  require 'csv'
2
2
 
3
- module Sniff
3
+ class Sniff
4
4
  module Fixture
5
5
  extend self
6
6
 
@@ -11,9 +11,7 @@ module Sniff
11
11
  next unless Object.const_defined?(model_name)
12
12
 
13
13
  model = model_name.constantize
14
- model.auto_upgrade!
15
- model.delete_all # always import from scratch
16
- ActiveRecord::Base.logger.info "Loading fixture #{fixture_file}"
14
+ model.delete_all
17
15
  CSV.foreach(fixture_file, :headers => true) do |row|
18
16
  ActiveRecord::Base.connection.insert_fixture(row, model.table_name) rescue ActiveRecord::RecordNotUnique
19
17
  end
@@ -2,8 +2,9 @@ require 'rake'
2
2
  require 'rake/clean'
3
3
  require 'rdoc/task'
4
4
  require 'rake/tasklib'
5
+ require 'earth'
5
6
 
6
- module Sniff
7
+ class Sniff
7
8
  class RakeTasks
8
9
  include Rake::DSL
9
10
 
@@ -11,10 +12,9 @@ module Sniff
11
12
  new(&blk).define_tasks
12
13
  end
13
14
 
14
- attr_accessor :earth_domains, :cucumber, :rspec, :coverage, :rocco, :bueller, :watchr
15
+ attr_accessor :cucumber, :rspec, :coverage, :rocco, :bueller, :watchr
15
16
 
16
17
  def initialize
17
- self.earth_domains = :all
18
18
  self.cucumber = true
19
19
  self.rspec = false
20
20
  self.coverage = true
@@ -58,8 +58,8 @@ module Sniff
58
58
 
59
59
  task :console do
60
60
  require 'sniff'
61
- cwd = Dir.pwd
62
- Sniff.init cwd, :earth => earth_domains
61
+ sniff = Sniff.new Dir.pwd
62
+ sniff.connect
63
63
 
64
64
  require 'irb'
65
65
  ARGV.clear
@@ -225,6 +225,25 @@ module Sniff
225
225
  end
226
226
  end
227
227
  end
228
+
229
+ require 'sniff'
230
+ sniff = Sniff.new Dir.pwd
231
+ namespace :sniff do
232
+ task :init do
233
+ sniff.connect
234
+ end
235
+ task :migrate => :init do
236
+ sniff.migrate!
237
+ end
238
+ task :seed => :init do
239
+ sniff.seed!
240
+ end
241
+ end
242
+
243
+ require 'earth/tasks'
244
+ Earth::Tasks.new
245
+ task 'db:migrate' => 'sniff:migrate'
246
+ task 'db:seed' => 'sniff:seed'
228
247
  end
229
248
  end
230
249
  end
@@ -1,3 +1,3 @@
1
- module Sniff
2
- VERSION = "0.11.12"
1
+ class Sniff
2
+ VERSION = "1.0.0"
3
3
  end
@@ -9,18 +9,20 @@ def bless_characteristics(characteristics)
9
9
  end
10
10
 
11
11
  When /^the "(.*)" committee reports$/ do |committee_name|
12
- @expectations.map(&:call)
13
- @decision ||= @activity.decisions.values.first
14
- @committee = @decision.committees.find { |c| c.name.to_s == committee_name }
15
- args = [bless_characteristics(@characteristics)]
16
- if @timeframe
17
- args << [@timeframe]
18
- else
19
- args << []
12
+ if @characteristics[committee_name.to_sym].nil?
13
+ @expectations.map(&:call)
14
+ @decision ||= @activity.decisions.values.first
15
+ @committee = @decision.committees.find { |c| c.name.to_s == committee_name }
16
+ args = [bless_characteristics(@characteristics)]
17
+ if @timeframe
18
+ args << [@timeframe]
19
+ else
20
+ args << []
21
+ end
22
+ @report = @committee.report *args
23
+ result = @report.try(:conclusion)
24
+ @characteristics[committee_name.to_sym] = result unless result.nil?
20
25
  end
21
- @report = @committee.report *args
22
- result = @report.try(:conclusion)
23
- @characteristics[committee_name.to_sym] = result unless result.nil?
24
26
  end
25
27
 
26
28
  Then /^then a report should exist for the committee$/ do
@@ -11,7 +11,7 @@ describe Sniff::RakeTasks do
11
11
  end
12
12
 
13
13
  let(:tasks) { Sniff::RakeTask.new }
14
- let(:emitter_path) { File.expand_path '../../../', File.dirname(__FILE__) }
14
+ let(:emitter_path) { File.expand_path '../../../', __FILE__ }
15
15
  let(:rakefile) do
16
16
  rakefile = <<-RAKEFILE
17
17
  Encoding.default_external = Encoding.find 'UTF-8'
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ require 'earth'
4
+ require 'earth/locality/petroleum_administration_for_defense_district'
5
+
6
+ describe Sniff do
7
+ let(:dirigible_path) { File.expand_path '../fixtures/dirigible', __FILE__ }
8
+ let(:sniff) do
9
+ sniff = Sniff.new(dirigible_path, :fixtures_path => dirigible_path + '/lib/test_support/db/fixtures', :project => 'sniff')
10
+ sniff.connect
11
+ sniff
12
+ end
13
+
14
+ before :all do
15
+ $:.unshift File.join(dirigible_path, 'lib')
16
+ require File.join('dirigible')
17
+ DataMiner.logger = Logger.new $stdout
18
+ end
19
+
20
+ describe '.path' do
21
+ it 'returns a path relative to sniff root' do
22
+ Sniff.stub!(:root).and_return File.join('/path','to','my','gems','sniff')
23
+ Sniff.path('lib','sniff','stuff.rb').split(/[\/\\]/).
24
+ should == ['', 'path','to','my','gems','sniff','lib','sniff','stuff.rb']
25
+ end
26
+ end
27
+
28
+ describe '#migrate!' do
29
+ it 'loads a schema for the emitter record' do
30
+ sniff.migrate!
31
+ require File.join(dirigible_path, 'features', 'support', 'dirigible_record')
32
+ DirigibleRecord.table_exists?.should be_true
33
+ end
34
+ end
35
+ describe '#seed!' do
36
+ it 'loads fixtures' do
37
+ sniff.seed!
38
+ PetroleumAdministrationForDefenseDistrict.count.should == 7
39
+ end
40
+ end
41
+ end
42
+
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- Bundler.setup
1
+ require 'bundler/setup'
4
2
 
5
3
  require 'sniff' # loaded using path in Gemfile
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sniff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.12
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000Z
12
+ date: 2012-08-03 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &2158094060 !ruby/object:Gem::Requirement
16
+ requirement: &2173464040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2158094060
24
+ version_requirements: *2173464040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: aaronh-chronic
27
- requirement: &2158093600 !ruby/object:Gem::Requirement
27
+ requirement: &2173463580 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.3.9
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2158093600
35
+ version_requirements: *2173463580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bueller
38
- requirement: &2158093140 !ruby/object:Gem::Requirement
38
+ requirement: &2173463120 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.0.5
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2158093140
46
+ version_requirements: *2173463120
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: active_record_inline_schema
49
- requirement: &2158092760 !ruby/object:Gem::Requirement
49
+ requirement: &2173462740 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,21 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2158092760
57
+ version_requirements: *2173462740
58
+ - !ruby/object:Gem::Dependency
59
+ name: conversions
60
+ requirement: &2173462120 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *2173462120
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: cucumber
60
- requirement: &2158092300 !ruby/object:Gem::Requirement
71
+ requirement: &2173461700 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,21 +76,32 @@ dependencies:
65
76
  version: '0'
66
77
  type: :runtime
67
78
  prerelease: false
68
- version_requirements: *2158092300
79
+ version_requirements: *2173461700
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: earth
71
- requirement: &2158091780 !ruby/object:Gem::Requirement
82
+ requirement: &2173461200 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.0.0
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *2173461200
91
+ - !ruby/object:Gem::Dependency
92
+ name: mysql2
93
+ requirement: &2173460780 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
75
97
  - !ruby/object:Gem::Version
76
- version: 0.4.5
98
+ version: '0'
77
99
  type: :runtime
78
100
  prerelease: false
79
- version_requirements: *2158091780
101
+ version_requirements: *2173460780
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: rake
82
- requirement: &2158091280 !ruby/object:Gem::Requirement
104
+ requirement: &2173460240 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ! '>='
@@ -87,10 +109,10 @@ dependencies:
87
109
  version: 0.9.0
88
110
  type: :runtime
89
111
  prerelease: false
90
- version_requirements: *2158091280
112
+ version_requirements: *2173460240
91
113
  - !ruby/object:Gem::Dependency
92
114
  name: simplecov
93
- requirement: &2158090900 !ruby/object:Gem::Requirement
115
+ requirement: &2173459660 !ruby/object:Gem::Requirement
94
116
  none: false
95
117
  requirements:
96
118
  - - ! '>='
@@ -98,10 +120,10 @@ dependencies:
98
120
  version: '0'
99
121
  type: :runtime
100
122
  prerelease: false
101
- version_requirements: *2158090900
123
+ version_requirements: *2173459660
102
124
  - !ruby/object:Gem::Dependency
103
125
  name: rdoc
104
- requirement: &2158090440 !ruby/object:Gem::Requirement
126
+ requirement: &2173459200 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ! '>='
@@ -109,10 +131,10 @@ dependencies:
109
131
  version: '0'
110
132
  type: :runtime
111
133
  prerelease: false
112
- version_requirements: *2158090440
134
+ version_requirements: *2173459200
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: dkastner-rocco
115
- requirement: &2158090000 !ruby/object:Gem::Requirement
137
+ requirement: &2173458780 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ! '>='
@@ -120,10 +142,10 @@ dependencies:
120
142
  version: '0'
121
143
  type: :runtime
122
144
  prerelease: false
123
- version_requirements: *2158090000
145
+ version_requirements: *2173458780
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: rspec
126
- requirement: &2158089500 !ruby/object:Gem::Requirement
148
+ requirement: &2173458200 !ruby/object:Gem::Requirement
127
149
  none: false
128
150
  requirements:
129
151
  - - ~>
@@ -131,10 +153,10 @@ dependencies:
131
153
  version: '2'
132
154
  type: :runtime
133
155
  prerelease: false
134
- version_requirements: *2158089500
156
+ version_requirements: *2173458200
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: simplecov
137
- requirement: &2158089060 !ruby/object:Gem::Requirement
159
+ requirement: &2173457700 !ruby/object:Gem::Requirement
138
160
  none: false
139
161
  requirements:
140
162
  - - ! '>='
@@ -142,10 +164,10 @@ dependencies:
142
164
  version: '0'
143
165
  type: :runtime
144
166
  prerelease: false
145
- version_requirements: *2158089060
167
+ version_requirements: *2173457700
146
168
  - !ruby/object:Gem::Dependency
147
169
  name: timecop
148
- requirement: &2158088600 !ruby/object:Gem::Requirement
170
+ requirement: &2173457240 !ruby/object:Gem::Requirement
149
171
  none: false
150
172
  requirements:
151
173
  - - ! '>='
@@ -153,10 +175,10 @@ dependencies:
153
175
  version: '0'
154
176
  type: :runtime
155
177
  prerelease: false
156
- version_requirements: *2158088600
178
+ version_requirements: *2173457240
157
179
  - !ruby/object:Gem::Dependency
158
180
  name: timeframe
159
- requirement: &2158088100 !ruby/object:Gem::Requirement
181
+ requirement: &2173456580 !ruby/object:Gem::Requirement
160
182
  none: false
161
183
  requirements:
162
184
  - - ! '>='
@@ -164,10 +186,10 @@ dependencies:
164
186
  version: 0.0.8
165
187
  type: :runtime
166
188
  prerelease: false
167
- version_requirements: *2158088100
189
+ version_requirements: *2173456580
168
190
  - !ruby/object:Gem::Dependency
169
191
  name: watchr
170
- requirement: &2158087680 !ruby/object:Gem::Requirement
192
+ requirement: &2173456080 !ruby/object:Gem::Requirement
171
193
  none: false
172
194
  requirements:
173
195
  - - ! '>='
@@ -175,10 +197,10 @@ dependencies:
175
197
  version: '0'
176
198
  type: :runtime
177
199
  prerelease: false
178
- version_requirements: *2158087680
200
+ version_requirements: *2173456080
179
201
  - !ruby/object:Gem::Dependency
180
202
  name: sandbox
181
- requirement: &2158087220 !ruby/object:Gem::Requirement
203
+ requirement: &2173455620 !ruby/object:Gem::Requirement
182
204
  none: false
183
205
  requirements:
184
206
  - - ! '>='
@@ -186,29 +208,18 @@ dependencies:
186
208
  version: '0'
187
209
  type: :development
188
210
  prerelease: false
189
- version_requirements: *2158087220
211
+ version_requirements: *2173455620
190
212
  - !ruby/object:Gem::Dependency
191
213
  name: emitter
192
- requirement: &2158086700 !ruby/object:Gem::Requirement
214
+ requirement: &2173454980 !ruby/object:Gem::Requirement
193
215
  none: false
194
216
  requirements:
195
- - - ! '>='
196
- - !ruby/object:Gem::Version
197
- version: 0.5.0
198
- type: :development
199
- prerelease: false
200
- version_requirements: *2158086700
201
- - !ruby/object:Gem::Dependency
202
- name: sqlite3-ruby
203
- requirement: &2158086280 !ruby/object:Gem::Requirement
204
- none: false
205
- requirements:
206
- - - ! '>='
217
+ - - ~>
207
218
  - !ruby/object:Gem::Version
208
- version: '0'
219
+ version: 0.12.0
209
220
  type: :development
210
221
  prerelease: false
211
- version_requirements: *2158086280
222
+ version_requirements: *2173454980
212
223
  description: Provides development and test environment for Brighter Planet's impact
213
224
  model libraries.
214
225
  email: derek.kastner@brighterplanet.com
@@ -217,7 +228,6 @@ extensions: []
217
228
  extra_rdoc_files:
218
229
  - README.markdown
219
230
  files:
220
- - lib/sniff/database.rb
221
231
  - lib/sniff/fixture.rb
222
232
  - lib/sniff/leap_ext.rb
223
233
  - lib/sniff/rake_tasks.rb
@@ -247,11 +257,10 @@ files:
247
257
  - spec/fixtures/dirigible/lib/dirigible/summarization.rb
248
258
  - spec/fixtures/dirigible/lib/dirigible.rb
249
259
  - spec/fixtures/dirigible/lib/test_support/db/fixtures/petroleum_administration_for_defense_districts.csv
250
- - spec/lib/sniff/database_spec.rb
251
- - spec/lib/sniff/rake_tasks_spec.rb
252
- - spec/lib/sniff_spec.rb
253
- - spec/lib/test_support/cucumber/support/values_spec.rb
260
+ - spec/sniff/rake_tasks_spec.rb
261
+ - spec/sniff_spec.rb
254
262
  - spec/spec_helper.rb
263
+ - spec/test_support/cucumber/support/values_spec.rb
255
264
  homepage: https://github.com/brighterplanet/sniff
256
265
  licenses: []
257
266
  post_install_message:
@@ -267,7 +276,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
267
276
  version: '0'
268
277
  segments:
269
278
  - 0
270
- hash: 1916176534967358290
279
+ hash: 407112005439033128
271
280
  required_rubygems_version: !ruby/object:Gem::Requirement
272
281
  none: false
273
282
  requirements:
@@ -299,8 +308,7 @@ test_files:
299
308
  - spec/fixtures/dirigible/lib/dirigible/summarization.rb
300
309
  - spec/fixtures/dirigible/lib/dirigible.rb
301
310
  - spec/fixtures/dirigible/lib/test_support/db/fixtures/petroleum_administration_for_defense_districts.csv
302
- - spec/lib/sniff/database_spec.rb
303
- - spec/lib/sniff/rake_tasks_spec.rb
304
- - spec/lib/sniff_spec.rb
305
- - spec/lib/test_support/cucumber/support/values_spec.rb
311
+ - spec/sniff/rake_tasks_spec.rb
312
+ - spec/sniff_spec.rb
306
313
  - spec/spec_helper.rb
314
+ - spec/test_support/cucumber/support/values_spec.rb
@@ -1,112 +0,0 @@
1
- require 'active_support'
2
-
3
- require 'sniff/fixture'
4
-
5
- module Sniff
6
- class Database
7
- class << self
8
- # Initialize a database used for testing emitter gems
9
- #
10
- # local_root: Root directory of the emitter gem to be tested (path to the repo)
11
- # options:
12
- # * :earth is the list of domains Earth.init should load (default: none)
13
- # * :load_data determines whether fixture data is loaded (default: true)
14
- # * :fixtures_path is the path to your gem's fixtures (default: local_root/features/support/db/fixtures)
15
- def init(local_root, options = {})
16
- db_init options
17
- earth_init(options[:earth])
18
-
19
- environments = []
20
- environments << init_environment(local_root, options)
21
-
22
- unless local_root == Sniff.root
23
- fixtures_path = File.join(Sniff.root, 'lib', 'test_support', 'db', 'fixtures')
24
- environments << init_environment(Sniff.root, :fixtures_path => fixtures_path)
25
- end
26
- end
27
-
28
- def init_environment(root, options = {})
29
- db = new root, options
30
- db.init
31
- db
32
- end
33
-
34
- # Connect to the database and set up an ActiveRecord logger
35
- def db_init(options)
36
- options = options.symbolize_keys
37
- options[:adapter] ||= options.delete(:db_adapter) || 'sqlite3'
38
- options[:database] ||= options.delete(:db_name) || ':memory:'
39
- ActiveRecord::Base.logger = Sniff.logger
40
- ActiveRecord::Base.establish_connection options
41
- end
42
-
43
- # Initialize Earth, but don't load schemas - otherwise get blank tables
44
- # for any resources in a loaded domain that don't have a fixture
45
- def earth_init(domains)
46
- domains ||= :none
47
- domains = [domains] unless domains.is_a? Array
48
- args = domains
49
- args << {:apply_schemas => false}
50
-
51
- Earth.init *args
52
- end
53
- end
54
-
55
- attr_accessor :root, :test_support_path, :fixtures_path,
56
- :load_data, :logger
57
-
58
- def initialize(root, options)
59
- self.root = root
60
- self.test_support_path = File.join(root, 'features', 'support')
61
- self.load_data = options[:load_data]
62
- self.fixtures_path = options[:fixtures_path]
63
- self.logger = Sniff.logger
64
- end
65
-
66
- def log(str)
67
- logger.info str
68
- end
69
-
70
- def load_data?
71
- @load_data = true if @load_data.nil?
72
- @load_data
73
- end
74
-
75
- def fixtures_path
76
- @fixtures_path ||= File.join(test_support_path, 'db', 'fixtures')
77
- end
78
-
79
- def init
80
- load_supporting_libs
81
- create_emitter_table
82
- Fixture.load_fixtures fixtures_path
83
- end
84
-
85
- def emitter_class
86
- return @emitter_class unless @emitter_class.nil?
87
- record_class_path = Dir.glob(File.join(test_support_path, '*_record.rb')).first
88
- if record_class_path
89
- require record_class_path
90
- record_class = File.read(record_class_path)
91
- klass = record_class.scan(/class ([^\s]*Record)/).flatten.first
92
- @emitter_class = klass.constantize
93
- end
94
- end
95
-
96
- def create_emitter_table
97
- emitter_class.auto_upgrade! if emitter_class
98
- end
99
-
100
- def populate_fixtures
101
- Fixture.load_fixtures fixtures_path
102
- end
103
-
104
- def load_supporting_libs
105
- $:.unshift File.join(root, 'lib')
106
- Dir[File.join(root, 'lib', 'test_support', '*.rb')].each do |lib|
107
- log "Loading #{lib}"
108
- require lib
109
- end
110
- end
111
- end
112
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sniff::Database do
4
- describe '#connect' do
5
- let(:dirigible_path) { File.expand_path '../../fixtures/dirigible', File.dirname(__FILE__) }
6
-
7
- before :all do
8
- $:.unshift File.join(dirigible_path, 'lib')
9
- require File.join('dirigible')
10
- DataMiner.logger = Logger.new $stdout
11
- end
12
-
13
- it 'should load the air domain' do
14
- Sniff.init(dirigible_path, :earth => :air, :apply_schemas => true)
15
- Airport.count.should == 0 # we don't have fixtures for this here
16
- expect { ZipCode.count }.should raise_error
17
- expect { AutomobileFuelType.count }.should raise_error
18
- end
19
- it 'should load data for all domains' do
20
- puts dirigible_path + '/lib/test_support/db/fixtures'
21
- Sniff.init(dirigible_path, :earth => :all, :apply_schemas => true,
22
- :fixtures_path => dirigible_path + '/lib/test_support/db/fixtures')
23
- PetroleumAdministrationForDefenseDistrict.count.should == 7
24
- end
25
- it 'should load a schema for the emitter record' do
26
- Sniff.init(dirigible_path, :apply_schemas => true)
27
- require File.join(dirigible_path, 'features', 'support', 'dirigible_record')
28
- DirigibleRecord.table_exists?.should be_true
29
- end
30
- end
31
- end
32
-
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Sniff do
4
- describe '.path' do
5
- it 'returns a path relative to sniff root' do
6
- Sniff.stub!(:root).and_return File.join('/path','to','my','gems','sniff')
7
- Sniff.path('lib','sniff','stuff.rb').split(/[\/\\]/).
8
- should == ['', 'path','to','my','gems','sniff','lib','sniff','stuff.rb']
9
- end
10
- end
11
- end
12
-