stockboy 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/stockboy/providers/soap.rb +2 -0
  4. data/lib/stockboy/version.rb +1 -1
  5. data/spec/stockboy/attribute_map_spec.rb +10 -10
  6. data/spec/stockboy/attribute_spec.rb +7 -7
  7. data/spec/stockboy/candidate_record_spec.rb +18 -18
  8. data/spec/stockboy/configuration_spec.rb +4 -4
  9. data/spec/stockboy/configurator_spec.rb +24 -24
  10. data/spec/stockboy/filter_chain_spec.rb +4 -4
  11. data/spec/stockboy/filter_spec.rb +4 -4
  12. data/spec/stockboy/filters/missing_email_spec.rb +4 -4
  13. data/spec/stockboy/filters_spec.rb +4 -4
  14. data/spec/stockboy/job_spec.rb +24 -24
  15. data/spec/stockboy/mapped_record_spec.rb +5 -4
  16. data/spec/stockboy/provider_repeater_spec.rb +2 -2
  17. data/spec/stockboy/provider_spec.rb +3 -3
  18. data/spec/stockboy/providers/file_spec.rb +20 -20
  19. data/spec/stockboy/providers/ftp_spec.rb +20 -20
  20. data/spec/stockboy/providers/http_spec.rb +28 -28
  21. data/spec/stockboy/providers/imap/search_options_spec.rb +11 -11
  22. data/spec/stockboy/providers/imap_spec.rb +23 -23
  23. data/spec/stockboy/providers/soap_spec.rb +17 -17
  24. data/spec/stockboy/providers_spec.rb +4 -4
  25. data/spec/stockboy/readers/csv_spec.rb +13 -9
  26. data/spec/stockboy/readers/fixed_width_spec.rb +6 -6
  27. data/spec/stockboy/readers/json_spec.rb +1 -1
  28. data/spec/stockboy/readers/spreadsheet_spec.rb +15 -15
  29. data/spec/stockboy/readers/xml_spec.rb +12 -12
  30. data/spec/stockboy/readers_spec.rb +3 -3
  31. data/spec/stockboy/source_record_spec.rb +2 -2
  32. data/spec/stockboy/template_file_spec.rb +3 -3
  33. data/spec/stockboy/translations/boolean_spec.rb +1 -1
  34. data/spec/stockboy/translations/date_spec.rb +5 -5
  35. data/spec/stockboy/translations/decimal_spec.rb +3 -3
  36. data/spec/stockboy/translations/default_empty_string_spec.rb +4 -4
  37. data/spec/stockboy/translations/default_false_spec.rb +1 -1
  38. data/spec/stockboy/translations/default_nil_spec.rb +4 -4
  39. data/spec/stockboy/translations/default_true_spec.rb +1 -1
  40. data/spec/stockboy/translations/default_zero_spec.rb +4 -4
  41. data/spec/stockboy/translations/integer_spec.rb +2 -2
  42. data/spec/stockboy/translations/string_spec.rb +2 -2
  43. data/spec/stockboy/translations/time_spec.rb +3 -3
  44. data/spec/stockboy/translations/uk_date_spec.rb +5 -5
  45. data/spec/stockboy/translations/us_date_spec.rb +5 -5
  46. data/spec/stockboy/translations_spec.rb +9 -9
  47. data/spec/stockboy/translator_spec.rb +2 -2
  48. data/stockboy.gemspec +1 -1
  49. metadata +4 -4
@@ -9,8 +9,8 @@ module Stockboy
9
9
 
10
10
  it "initializes keys and values from a hash" do
11
11
  chain = FilterChain.new(no_angels: filter1, no_daleks: filter2)
12
- chain.keys.should == [:no_angels, :no_daleks]
13
- chain.values.should == [filter1, filter2]
12
+ expect(chain.keys).to eq [:no_angels, :no_daleks]
13
+ expect(chain.values).to eq [filter1, filter2]
14
14
  end
15
15
 
16
16
  describe "#reset" do
@@ -23,7 +23,7 @@ module Stockboy
23
23
 
24
24
  it "returns a hash of filter keys to empty arrays" do
25
25
  empty_records = chain.reset
26
- empty_records.should == {no_angels: [], no_daleks: []}
26
+ expect(empty_records).to eq({no_angels: [], no_daleks: []})
27
27
  end
28
28
  end
29
29
 
@@ -31,7 +31,7 @@ module Stockboy
31
31
  it "adds filters to the front of the chain" do
32
32
  chain = FilterChain.new(filter1: double)
33
33
  chain.prepend(filter0: double)
34
- chain.keys.should == [:filter0, :filter1]
34
+ expect(chain.keys).to eq [:filter0, :filter1]
35
35
  end
36
36
  end
37
37
 
@@ -21,21 +21,21 @@ module Stockboy
21
21
 
22
22
  context "matching raw value" do
23
23
  it "returns true for match" do
24
- filter.call(double(species:"babylichtus"), empty_values).should be true
24
+ expect(filter.call(double(species:"babylichtus"), empty_values)).to be true
25
25
  end
26
26
 
27
27
  it "returns false for no match" do
28
- filter.call(double(species:"triceratops"), empty_values).should be false
28
+ expect(filter.call(double(species:"triceratops"), empty_values)).to be false
29
29
  end
30
30
  end
31
31
 
32
32
  context "matching translated value" do
33
33
  it "returns true for match" do
34
- filter.call(empty_values, double(species:"babelfish")).should be true
34
+ expect(filter.call(empty_values, double(species:"babelfish"))).to be true
35
35
  end
36
36
 
37
37
  it "returns false for no match" do
38
- filter.call(empty_values, double(species:"rhinoceros")).should be false
38
+ expect(filter.call(empty_values, double(species:"rhinoceros"))).to be false
39
39
  end
40
40
  end
41
41
  end
@@ -5,22 +5,22 @@ describe Stockboy::Filters::MissingEmail do
5
5
  subject(:filter) { described_class.new(:e) }
6
6
  it 'allows email addresses' do
7
7
  record = OpenStruct.new(e: 'me@example.com')
8
- filter.call(record, record).should be false
8
+ expect(filter.call(record, record)).to be false
9
9
  end
10
10
 
11
11
  it 'catches empty strings' do
12
12
  record = OpenStruct.new(e: '')
13
- filter.call(record, record).should be true
13
+ expect(filter.call(record, record)).to be true
14
14
  end
15
15
 
16
16
  it 'catches hyphen placeholders' do
17
17
  record = OpenStruct.new(e: '-')
18
- filter.call(record, record).should be true
18
+ expect(filter.call(record, record)).to be true
19
19
  end
20
20
 
21
21
  it 'uses translated output value' do
22
22
  input = OpenStruct.new(e: '', other: 'me@example.com')
23
23
  output = OpenStruct.new(e: input.other)
24
- filter.call(input, output).should be false
24
+ expect(filter.call(input, output)).to be false
25
25
  end
26
26
  end
@@ -8,21 +8,21 @@ module Stockboy
8
8
 
9
9
  describe ".register" do
10
10
  it "registers a key and class" do
11
- Filters.register(:invalid, filter).should === filter
11
+ expect(Filters.register(:invalid, filter)).to be === filter
12
12
  end
13
13
  end
14
14
 
15
15
  describe ".find" do
16
16
  it "returns a filter class" do
17
17
  Filters.register(:invalid, filter)
18
- Filters.find(:invalid).should === filter
18
+ expect(Filters.find(:invalid)).to be === filter
19
19
  end
20
20
  end
21
21
 
22
22
  describe ".[]" do
23
23
  it "returns a filter class" do
24
24
  Filters.register(:invalid, filter)
25
- Filters[:invalid].should === filter
25
+ expect(Filters[:invalid]).to be === filter
26
26
  end
27
27
  end
28
28
 
@@ -30,7 +30,7 @@ module Stockboy
30
30
  it "returns all registered filters" do
31
31
  Filters.register(:invalid, filter)
32
32
  Filters.register(:semivalid, filter)
33
- Filters.all.should include(invalid: filter, semivalid: filter)
33
+ expect(Filters.all).to include(invalid: filter, semivalid: filter)
34
34
  end
35
35
  end
36
36
 
@@ -74,14 +74,14 @@ module Stockboy
74
74
  end
75
75
 
76
76
  it "returns an instance of Job" do
77
- Job.define("test_job").should be_a Job
77
+ expect(Job.define("test_job")).to be_a Job
78
78
  end
79
79
 
80
80
  it "yields the defined job" do
81
81
  yielded = nil
82
82
  job = Job.define("test_job") { |j| yielded = j }
83
- job.should be_a Job
84
- job.should be yielded
83
+ expect(job).to be_a Job
84
+ expect(job).to be yielded
85
85
  end
86
86
 
87
87
  it "should read a file from a path" do
@@ -94,7 +94,7 @@ module Stockboy
94
94
  .with(:ftp)
95
95
  .and_return(TestProvider)
96
96
  job = Job.define("test_job")
97
- job.provider.should be_a TestProvider
97
+ expect(job.provider).to be_a TestProvider
98
98
  end
99
99
 
100
100
  it "assigns a registered reader from a symbol" do
@@ -102,18 +102,18 @@ module Stockboy
102
102
  .with(:csv)
103
103
  .and_return(TestReader)
104
104
  job = Job.define("test_job")
105
- job.reader.should be_a TestReader
105
+ expect(job.reader).to be_a TestReader
106
106
  end
107
107
 
108
108
  it "assigns attributes from a block" do
109
109
  job = Job.define("test_job")
110
- job.attributes.map(&:to).should == [:name, :email, :updated_at]
110
+ expect(job.attributes.map(&:to)).to eq [:name, :email, :updated_at]
111
111
  end
112
112
 
113
113
  it "assigns triggers into their associated array from a block" do
114
114
  job = Job.define("test_job")
115
- job.triggers[:cleanup].size.should == 2
116
- job.triggers[:cleanup].each { |t| t.should be_a Proc }
115
+ expect(job.triggers[:cleanup].size).to eq 2
116
+ job.triggers[:cleanup].each { |t| expect(t).to be_a Proc }
117
117
  end
118
118
  end
119
119
 
@@ -126,12 +126,12 @@ module Stockboy
126
126
 
127
127
  it "replaces the attribute map" do
128
128
  job.attributes = AttributeMap.new do last_name end
129
- job.attributes.map(&:to).should == [:last_name]
129
+ expect(job.attributes.map(&:to)).to eq [:last_name]
130
130
  end
131
131
 
132
132
  it "resets the job" do
133
133
  job.attributes = AttributeMap.new do last_name end
134
- job.all_records.should be_empty
134
+ expect(job.all_records).to be_empty
135
135
  end
136
136
 
137
137
  end
@@ -147,7 +147,7 @@ module Stockboy
147
147
  job.reader = reader_double(parse: [{"name"=>"A"},{"name"=>"B"}])
148
148
 
149
149
  job.process
150
- job.total_records.should == 2
150
+ expect(job.total_records).to eq 2
151
151
  end
152
152
 
153
153
  it "partitions records by filter" do
@@ -155,7 +155,7 @@ module Stockboy
155
155
  job.filters = {alpha: proc{ |r| r.name =~ /A/ }}
156
156
 
157
157
  job.process
158
- job.records[:alpha].length.should == 1
158
+ expect(job.records[:alpha].length).to eq 1
159
159
  end
160
160
 
161
161
  it "keeps unfiltered_records" do
@@ -163,7 +163,7 @@ module Stockboy
163
163
  job.filters = {zeta: proc{ |r| r.name =~ /Z/ }}
164
164
 
165
165
  job.process
166
- job.unfiltered_records.length.should == 1
166
+ expect(job.unfiltered_records.length).to eq 1
167
167
  end
168
168
 
169
169
  it "keeps all_records" do
@@ -171,7 +171,7 @@ module Stockboy
171
171
  job.filters = {alpha: proc{ |r| r.name =~ /A/ }}
172
172
 
173
173
  job.process
174
- job.all_records.length.should == 2
174
+ expect(job.all_records.length).to eq 2
175
175
  end
176
176
 
177
177
  it "resets filters between runs" do
@@ -186,14 +186,14 @@ module Stockboy
186
186
  job.reader = double(parse: [{"name"=>"A"},{"name"=>"Z"}])
187
187
  job.filters = {alpha: counter = CountingFilter.new(/A/)}
188
188
 
189
- counter.matches.should == 0
189
+ expect(counter.matches).to eq 0
190
190
  2.times { job.process }
191
- counter.matches.should == 1
191
+ expect(counter.matches).to eq 1
192
192
  end
193
193
 
194
194
  it "has empty partitions" do
195
195
  job.filters = {alpha: proc{ |r| r.name =~ /A/ }, beta: proc{ |r| r.name =~ /B/ }}
196
- job.records.should == {alpha: [], beta: []}
196
+ expect(job.records).to eq({alpha: [], beta: []})
197
197
  end
198
198
 
199
199
  context "with a repeating provider" do
@@ -209,7 +209,7 @@ module Stockboy
209
209
 
210
210
  it "it loads all records into a set" do
211
211
  job.process
212
- job.all_records.size.should == 3
212
+ expect(job.all_records.size).to eq 3
213
213
  end
214
214
  end
215
215
 
@@ -224,7 +224,7 @@ module Stockboy
224
224
 
225
225
  context "before processing" do
226
226
  it "should be empty" do
227
- job.record_counts.should == {}
227
+ expect(job.record_counts).to eq({})
228
228
  end
229
229
  end
230
230
 
@@ -237,7 +237,7 @@ module Stockboy
237
237
  job.reader = double(parse: [{"name"=>"Arthur"}, {"name"=>"Abc"}, {"name"=>"Zaphod"}])
238
238
  job.process
239
239
 
240
- job.record_counts.should == {alpha: 2, zeta: 1}
240
+ expect(job.record_counts).to eq({alpha: 2, zeta: 1})
241
241
  end
242
242
  end
243
243
 
@@ -247,9 +247,9 @@ module Stockboy
247
247
  end
248
248
 
249
249
  it "indicates if the job has been processed" do
250
- job.processed?.should be false
250
+ expect(job.processed?).to be false
251
251
  job.process
252
- job.processed?.should be true
252
+ expect(job.processed?).to be true
253
253
  end
254
254
  end
255
255
 
@@ -274,7 +274,7 @@ module Stockboy
274
274
  expect(job.provider).to receive(:delete_data).once
275
275
  stats = {}
276
276
  job.trigger(:success, stats)
277
- stats[:count].should == 1
277
+ expect(stats[:count]).to eq 1
278
278
  end
279
279
 
280
280
  end
@@ -284,7 +284,7 @@ module Stockboy
284
284
  it "replaces existing triggers" do
285
285
  job.triggers = {breakfast: double}
286
286
  job.triggers = {lunch: double}
287
- job.triggers.keys.should == [:lunch]
287
+ expect(job.triggers.keys).to eq [:lunch]
288
288
  end
289
289
 
290
290
  end
@@ -8,23 +8,24 @@ module Stockboy
8
8
  end
9
9
 
10
10
  it "accesses initialized fields from hash" do
11
- record.full_name.should == 'Arthur Dent'
11
+ expect(record.full_name).to eq 'Arthur Dent'
12
12
  end
13
13
 
14
14
  it "does not redefine accessor methods" do
15
15
  record1 = MappedRecord.new(:full_name => 'Arthur Dent')
16
16
  record2 = MappedRecord.new(:full_name => 'Arthur Dent')
17
17
 
18
- record1.method(:full_name).owner.should ==
18
+ expect(record1.method(:full_name).owner).to eq(
19
19
  record2.method(:full_name).owner
20
+ )
20
21
  end
21
22
 
22
23
  it "only has its own accessor methods" do
23
24
  record1 = MappedRecord.new(:first_name => 'Arthur')
24
25
  record2 = MappedRecord.new(:last_name => 'Dent')
25
26
 
26
- record1.should_not respond_to(:last_name)
27
- record2.should_not respond_to(:first_name)
27
+ expect(record1).not_to respond_to(:last_name)
28
+ expect(record2).not_to respond_to(:first_name)
28
29
  end
29
30
  end
30
31
  end
@@ -27,7 +27,7 @@ module Stockboy
27
27
  it "yields each data set" do
28
28
  calls = []
29
29
  repeater.data { |data| calls << data.split(",").last }
30
- calls.should == ["1", "2", "3"]
30
+ expect(calls).to eq ["1", "2", "3"]
31
31
  end
32
32
 
33
33
  end
@@ -43,7 +43,7 @@ module Stockboy
43
43
  repeater.each do |nth_provider|
44
44
  calls << nth_provider
45
45
  end
46
- calls.map(&:page).should == [42]
46
+ expect(calls.map(&:page)).to eq [42]
47
47
  end
48
48
  end
49
49
 
@@ -41,13 +41,13 @@ module Stockboy
41
41
  it "fetches data when there is none" do
42
42
  expect(provider).to receive(:fetch_data).once.and_call_original
43
43
  2.times do
44
- provider.data.should == "TEST,DATA"
44
+ expect(provider.data).to eq "TEST,DATA"
45
45
  end
46
46
  end
47
47
 
48
48
  it "yields data to a block" do
49
49
  provider.data do |data|
50
- data.should == "TEST,DATA"
50
+ expect(data).to eq "TEST,DATA"
51
51
  end
52
52
  end
53
53
  end
@@ -58,7 +58,7 @@ module Stockboy
58
58
  it "clears and reloads the data" do
59
59
  data = provider.data
60
60
  expect(provider).to receive(:fetch_data).once.and_call_original
61
- provider.reload.should == data
61
+ expect(provider.reload).to eq data
62
62
  end
63
63
  end
64
64
 
@@ -13,22 +13,22 @@ module Stockboy
13
13
  provider.file_larger = 1024
14
14
  provider.pick = :first
15
15
 
16
- provider.file_dir.should == "fixtures/files"
17
- provider.file_name.should == %r{import_20[1-9][0-9]-(0[1-9]|1[0-2])-([0-2][1-9]|3[0-1]).csv}
18
- provider.file_newer.should == Date.today
19
- provider.file_smaller.should == 1024**2
20
- provider.file_larger.should == 1024
21
- provider.pick.should == :first
16
+ expect(provider.file_dir).to eq "fixtures/files"
17
+ expect(provider.file_name).to eq %r{import_20[1-9][0-9]-(0[1-9]|1[0-2])-([0-2][1-9]|3[0-1]).csv}
18
+ expect(provider.file_newer).to eq Date.today
19
+ expect(provider.file_smaller).to eq 1024**2
20
+ expect(provider.file_larger).to eq 1024
21
+ expect(provider.pick).to eq :first
22
22
  end
23
23
 
24
24
  describe ".new" do
25
25
  it "has no errors" do
26
- provider.errors.should be_empty
26
+ expect(provider.errors).to be_empty
27
27
  end
28
28
 
29
29
  it "accepts block initialization" do
30
30
  provider = Providers::File.new{ |f| f.file_dir 'fixtures/files' }
31
- provider.file_dir.should == 'fixtures/files'
31
+ expect(provider.file_dir).to eq 'fixtures/files'
32
32
  end
33
33
  end
34
34
 
@@ -61,25 +61,25 @@ module Stockboy
61
61
 
62
62
  it "fails with an error if the file doesn't exist" do
63
63
  provider.file_name = "missing-file.csv"
64
- provider.data.should be nil
65
- provider.valid?.should be false
66
- provider.errors.first.should match /not found/
64
+ expect(provider.data).to be nil
65
+ expect(provider.valid?).to be false
66
+ expect(provider.errors.first).to match /not found/
67
67
  end
68
68
 
69
69
  it "finds last matching file from string glob" do
70
70
  provider.file_name = "test_data-*.csv"
71
- provider.data.should == "2012-02-02\n"
71
+ expect(provider.data).to eq "2012-02-02\n"
72
72
  end
73
73
 
74
74
  it "finds first matching file from string glob" do
75
75
  provider.file_name = "test_data-*.csv"
76
76
  provider.pick = :first
77
- provider.data.should == "2012-01-01\n"
77
+ expect(provider.data).to eq "2012-01-01\n"
78
78
  end
79
79
 
80
80
  it "finds last matching file from regex" do
81
81
  provider.file_name = /test_data/
82
- provider.data.should == "2012-02-02\n"
82
+ expect(provider.data).to eq "2012-02-02\n"
83
83
  end
84
84
 
85
85
  context "metadata validation" do
@@ -90,22 +90,22 @@ module Stockboy
90
90
  it "skips old files with :since" do
91
91
  expect_any_instance_of(::File).to receive(:mtime).and_return last_week
92
92
  provider.since = recently
93
- provider.data.should be nil
94
- provider.errors.first.should == "no new files since #{recently}"
93
+ expect(provider.data).to be nil
94
+ expect(provider.errors.first).to eq "no new files since #{recently}"
95
95
  end
96
96
 
97
97
  it "skips large files with :file_smaller" do
98
98
  expect_any_instance_of(::File).to receive(:size).and_return 1001
99
99
  provider.file_smaller = 1000
100
- provider.data.should be nil
101
- provider.errors.first.should == "file size larger than 1000"
100
+ expect(provider.data).to be nil
101
+ expect(provider.errors.first).to eq "file size larger than 1000"
102
102
  end
103
103
 
104
104
  it "skips small files with :file_larger" do
105
105
  expect_any_instance_of(::File).to receive(:size).and_return 999
106
106
  provider.file_larger = 1000
107
- provider.data.should be nil
108
- provider.errors.first.should == "file size smaller than 1000"
107
+ expect(provider.data).to be nil
108
+ expect(provider.errors.first).to eq "file size smaller than 1000"
109
109
  end
110
110
  end
111
111
  end