bidu-house 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a8ee8b5568f69553340146072bce28f3887689fc
4
- data.tar.gz: 2260ec4004e11743cb309b17abcb39128f0df8bc
3
+ metadata.gz: 96781d4525f8097700f5d5db4795f493b38fe712
4
+ data.tar.gz: ea2a54d9377214dc1e0edd66aa66d9d33daa7acb
5
5
  SHA512:
6
- metadata.gz: df4558e098446b0d289a6e243894f2e77c0912d996e16a4bdf6bb7bb9d4966dc74f7628c1ebbe7cc1812cdf302d4aee2996cc280d2b193942d3c89bffdc293e8
7
- data.tar.gz: 640c40f723e5ec0568de883080043bebf05c3d5cca4828f2ae3ffcc9d81afd2d53af96bd1432b3bbfaddf51f7dfce19cef27c7b2420efd68ab3635501c28658c
6
+ metadata.gz: edcdf77746f852974617b39a3288de005f6a704d2aa2e9670b25c61c44f3bac344cb50fbda438d32442a50e6d35bd2273cd80942721b15abd42357631e001b6f
7
+ data.tar.gz: 384598beefd1f88bfea28e7fd8169b33a3e6b589da309636d44b926b4714ee85044829f63beed65ae34ca1ede71626bbce6a1dc73fc2b1a519e2173ce0fee2f4
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bidu-house (1.2.0)
4
+ bidu-house (1.3.0)
5
5
  activesupport
6
6
  bidu-active_ext
7
7
  concern_builder
@@ -5,6 +5,7 @@ module Bidu
5
5
  require 'bidu/house/report/active_record'
6
6
  require 'bidu/house/report/error'
7
7
  require 'bidu/house/report/range'
8
+ require 'bidu/house/report/multiple'
8
9
  ALLOWED_PARAMETERS = []
9
10
  DEFAULT_OPTION = {}
10
11
 
@@ -13,7 +14,7 @@ module Bidu
13
14
  json_parse :id, case: :snake
14
15
 
15
16
  def initialize(options = {})
16
- @json = DEFAULT_OPTION.merge(options)
17
+ @json = default_option.merge(options)
17
18
  end
18
19
 
19
20
  def status
@@ -27,6 +28,17 @@ module Bidu
27
28
  def as_json
28
29
  { status: status }
29
30
  end
31
+
32
+ private
33
+
34
+ def default_option
35
+ self.class.default_options
36
+ end
37
+
38
+ def self.default_options
39
+ return {} if self == Report
40
+ self.superclass.default_options.merge(self::DEFAULT_OPTION)
41
+ end
30
42
  end
31
43
  end
32
44
  end
@@ -16,7 +16,7 @@ module Bidu
16
16
  json_parse :scope, :external_key, :uniq, :limit, case: :snake
17
17
 
18
18
  def initialize(options)
19
- super(DEFAULT_OPTION.merge(options))
19
+ super(self.class::DEFAULT_OPTION.merge(options))
20
20
  end
21
21
 
22
22
  def percentage
@@ -1,4 +1,4 @@
1
- class Bidu::House::Report::Multiple < Bidu::House::Report
1
+ module Bidu::House::Report::Multiple
2
2
  def as_json
3
3
  {
4
4
  status: status
@@ -1,5 +1,5 @@
1
1
  module Bidu
2
2
  module House
3
- VERSION = '1.2.0'
3
+ VERSION = '1.3.0'
4
4
  end
5
5
  end
@@ -0,0 +1,122 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bidu::House::Report::Multiple do
4
+ class Bidu::House::Report::DocTypeError < Bidu::House::Report::Error
5
+ ALLOWED_PARAMETERS=[:period, :threshold]
6
+ DEFAULT_OPTION = {
7
+ threshold: 0.25,
8
+ clazz: Document,
9
+ external_key: :external_id
10
+ }
11
+
12
+ json_parse :doc_type, case: :snake
13
+
14
+ def base
15
+ super.where(doc_type: doc_type)
16
+ end
17
+ end
18
+
19
+ class Bidu::House::Report::Multiple::Dummy < Bidu::House::Report
20
+ include Bidu::House::Report::Multiple
21
+ DEFAULT_OPTION = {
22
+ doc_type: [:a, :b]
23
+ }
24
+ json_parse :doc_type, case: :snake
25
+
26
+ def reports_ids
27
+ [ doc_type ].flatten
28
+ end
29
+
30
+ def sub_report_class
31
+ Bidu::House::Report::DocTypeError
32
+ end
33
+
34
+ def key
35
+ :doc_type
36
+ end
37
+ end
38
+
39
+ let(:subject) { described_class::Dummy.new }
40
+ let(:a_errors) { 1 }
41
+ let(:a_successes) { 1 }
42
+ let(:b_errors) { 1 }
43
+ let(:b_successes) { 1 }
44
+ let(:setup) do
45
+ {
46
+ success: { a: a_successes, b: b_successes },
47
+ error: { a: a_errors, b: b_errors }
48
+ }
49
+ end
50
+
51
+ before do
52
+ Document.delete_all
53
+ setup.each do |status, map|
54
+ map.each do |doc_type, quantity|
55
+ quantity.times do
56
+ Document.create(status: status, doc_type: doc_type, external_id: Document.count)
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ describe '#error?' do
63
+ context 'when all subreports are with error' do
64
+ it { expect(subject.error?).to be_truthy }
65
+ end
66
+
67
+ context 'when one of the reports is not an error' do
68
+ let(:a_successes) { 4 }
69
+
70
+ it { expect(subject.error?).to be_truthy }
71
+ end
72
+
73
+ context 'when none of the reports is an error' do
74
+ let(:a_successes) { 4 }
75
+ let(:b_successes) { 4 }
76
+
77
+ it { expect(subject.error?).to be_falsey }
78
+ end
79
+ end
80
+
81
+ describe '#as_json' do
82
+ let(:expected) do
83
+ {
84
+ 'a' => { ids: [2], percentage: 0.5, status: :error },
85
+ 'b' => { ids: [3], percentage: 0.5, status: :error },
86
+ status: :error
87
+ }
88
+ end
89
+
90
+ context 'when all subreports are with error' do
91
+ it { expect(subject.as_json).to eq(expected) }
92
+ end
93
+
94
+ context 'when one of the reports is not an error' do
95
+ let(:a_successes) { 4 }
96
+ let(:expected) do
97
+ {
98
+ 'a' => { ids: [5], percentage: 0.2, status: :ok },
99
+ 'b' => { ids: [6], percentage: 0.5, status: :error },
100
+ status: :error
101
+ }
102
+ end
103
+
104
+ it { expect(subject.as_json).to eq(expected) }
105
+ end
106
+
107
+ context 'when none of the reports is an error' do
108
+ let(:a_successes) { 4 }
109
+ let(:b_successes) { 4 }
110
+ let(:expected) do
111
+ {
112
+ 'a' => { ids: [8], percentage: 0.2, status: :ok },
113
+ 'b' => { ids: [9], percentage: 0.2, status: :ok },
114
+ status: :ok
115
+ }
116
+ end
117
+
118
+ it { expect(subject.as_json).to eq(expected) }
119
+ end
120
+ end
121
+ end
122
+
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bidu::House::Report do
4
+ class Bidu::House::Report::Dummy1 < Bidu::House::Report
5
+ DEFAULT_OPTION = {
6
+ option_value: 1,
7
+ other_option: 10
8
+ }
9
+ json_parse :option_value, :other_option, case: :snake
10
+ end
11
+ class Bidu::House::Report::Dummy2 < Bidu::House::Report::Dummy1; end
12
+ class Bidu::House::Report::Dummy3 < Bidu::House::Report::Dummy1
13
+ DEFAULT_OPTION = { option_value: 5 }
14
+ end
15
+
16
+ describe 'default_options' do
17
+ let(:report_class) { described_class::Dummy1 }
18
+ let(:subject) { report_class.new }
19
+
20
+ it 'setup the attributes using class default options' do
21
+ expect(subject.option_value).to eq(1)
22
+ expect(subject.other_option).to eq(10)
23
+ end
24
+
25
+ context 'when class inherit options' do
26
+ let(:report_class) { described_class::Dummy2 }
27
+
28
+ it 'setup the attributes using superclass default options' do
29
+ expect(subject.option_value).to eq(1)
30
+ expect(subject.other_option).to eq(10)
31
+ end
32
+ end
33
+
34
+ context 'when class inherit options but overrides some' do
35
+ let(:report_class) { described_class::Dummy3 }
36
+
37
+ it 'setup the attributes using superclass default options' do
38
+ expect(subject.option_value).to eq(5)
39
+ expect(subject.other_option).to eq(10)
40
+ end
41
+ end
42
+ end
43
+ end
44
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bidu-house
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bidu Dev's Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-31 00:00:00.000000000 Z
11
+ date: 2016-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -211,9 +211,11 @@ files:
211
211
  - lib/bidu/period_parser.rb
212
212
  - lib/json_parser/type_cast_ext.rb
213
213
  - spec/lib/bidu/house/report/error_spec.rb
214
+ - spec/lib/bidu/house/report/multiple_spec.rb
214
215
  - spec/lib/bidu/house/report/range_spec.rb
215
216
  - spec/lib/bidu/house/report/report_config_spec.rb
216
217
  - spec/lib/bidu/house/report_builder_spec.rb
218
+ - spec/lib/bidu/house/report_spec.rb
217
219
  - spec/lib/bidu/house/status_builder_spec.rb
218
220
  - spec/lib/bidu/house/status_spec.rb
219
221
  - spec/lib/bidu/period_parser_spec.rb