mas-rad_core 0.0.81 → 0.0.82
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.
- checksums.yaml +4 -4
- data/app/models/firm.rb +19 -21
- data/app/serializers/firm_serializer.rb +8 -0
- data/db/migrate/20150930140851_remove_firm_email_and_phone.rb +26 -0
- data/lib/mas/rad_core/version.rb +1 -1
- data/spec/dummy/db/schema.rb +2 -4
- data/spec/dummy/log/test.log +0 -0
- data/spec/factories/firm.rb +7 -3
- data/spec/models/firm_factory_spec.rb +20 -1
- data/spec/models/firm_spec.rb +10 -48
- data/spec/serializers/firm_serializer_spec.rb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8aaa6855712fd187910683b20259960b00ca1472
|
4
|
+
data.tar.gz: 104f655a861efc082670fda527505d9e89fda40e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 588fa78f40923457266cc2d6017043c9e48792724186c247d09a4c1b930a33ce117f2a269eebb67445e361fb3bbedd0ef17967522d2ad72575fd30d206ca341f
|
7
|
+
data.tar.gz: d8b7e188680d827cd27a985ea7a52dad63c992d32ff3dd7c6e3ab3ef2d7c04b676619efaceb6caad789b1d82b89121312b80e578ac388cceb1976268d25700ef
|
data/app/models/firm.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
class Firm < ActiveRecord::Base
|
2
2
|
include Geocodable
|
3
3
|
|
4
|
+
FREE_INITIAL_MEETING_VALID_VALUES = [true, false].freeze
|
5
|
+
|
6
|
+
# We use a scalar required field as a marker to detect a record saved with validation
|
7
|
+
REGISTERED_MARKER_FIELD = :free_initial_meeting
|
8
|
+
REGISTERED_MARKER_FIELD_VALID_VALUES = FREE_INITIAL_MEETING_VALID_VALUES
|
9
|
+
|
4
10
|
ADVICE_TYPES_ATTRIBUTES = [
|
5
11
|
:retirement_income_products_flag,
|
6
12
|
:pension_transfer_flag,
|
@@ -10,7 +16,7 @@ class Firm < ActiveRecord::Base
|
|
10
16
|
:wills_and_probate_flag
|
11
17
|
]
|
12
18
|
|
13
|
-
scope :registered, -> { where.not(
|
19
|
+
scope :registered, -> { where.not(REGISTERED_MARKER_FIELD => nil) }
|
14
20
|
scope :sorted_by_registered_name, -> { order(:registered_name) }
|
15
21
|
|
16
22
|
has_and_belongs_to_many :in_person_advice_methods
|
@@ -39,23 +45,13 @@ class Firm < ActiveRecord::Base
|
|
39
45
|
before_validation :clear_blank_languages
|
40
46
|
before_validation :deduplicate_languages
|
41
47
|
|
42
|
-
validates :email_address,
|
43
|
-
presence: true,
|
44
|
-
length: { maximum: 50 },
|
45
|
-
format: { with: /.+@.+\..+/ }
|
46
|
-
|
47
|
-
validates :telephone_number,
|
48
|
-
presence: true,
|
49
|
-
length: { maximum: 30 },
|
50
|
-
format: { with: /\A[0-9 ]+\z/ }
|
51
|
-
|
52
48
|
validates :website_address,
|
53
49
|
allow_blank: true,
|
54
50
|
length: { maximum: 100 },
|
55
51
|
format: { with: /\Ahttps?:\/\/\S+\.\S+/ }
|
56
52
|
|
57
53
|
validates :free_initial_meeting,
|
58
|
-
inclusion: { in:
|
54
|
+
inclusion: { in: FREE_INITIAL_MEETING_VALID_VALUES }
|
59
55
|
|
60
56
|
validates :initial_meeting_duration,
|
61
57
|
presence: true,
|
@@ -131,17 +127,21 @@ class Firm < ActiveRecord::Base
|
|
131
127
|
# This method is basically a cheap way to answer the question: has this
|
132
128
|
# record ever been saved with validation enabled?
|
133
129
|
def registered?
|
134
|
-
|
130
|
+
# false is a valid value so we cannot use `.present?`
|
131
|
+
!(send(REGISTERED_MARKER_FIELD).nil?)
|
135
132
|
end
|
136
133
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
134
|
+
if Rails.env.test?
|
135
|
+
# A helper to shield tests from modifying the marker field directly
|
136
|
+
def __set_registered(state)
|
137
|
+
new_value = (state) ? REGISTERED_MARKER_FIELD_VALID_VALUES.first : nil
|
138
|
+
send("#{REGISTERED_MARKER_FIELD}=", new_value)
|
139
|
+
end
|
140
|
+
alias_method :__registered=, :__set_registered
|
143
141
|
end
|
144
142
|
|
143
|
+
enum status: { independent: 1, restricted: 2 }
|
144
|
+
|
145
145
|
def in_person_advice?
|
146
146
|
in_person_advice_methods.present?
|
147
147
|
end
|
@@ -155,8 +155,6 @@ class Firm < ActiveRecord::Base
|
|
155
155
|
|
156
156
|
def field_order
|
157
157
|
[
|
158
|
-
:email_address,
|
159
|
-
:telephone_number,
|
160
158
|
:website_address,
|
161
159
|
:address_line_one,
|
162
160
|
:address_line_two,
|
@@ -40,6 +40,14 @@ class FirmSerializer < ActiveModel::Serializer
|
|
40
40
|
object.advisers.geocoded
|
41
41
|
end
|
42
42
|
|
43
|
+
def telephone_number
|
44
|
+
object.main_office.telephone_number
|
45
|
+
end
|
46
|
+
|
47
|
+
def email_address
|
48
|
+
object.main_office.email_address
|
49
|
+
end
|
50
|
+
|
43
51
|
def postcode_searchable
|
44
52
|
object.postcode_searchable?
|
45
53
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class RemoveFirmEmailAndPhone < ActiveRecord::Migration
|
2
|
+
class Firm < ActiveRecord::Base; has_many :offices, -> { order created_at: :asc }; end
|
3
|
+
class Office < ActiveRecord::Base; belongs_to :firm; end
|
4
|
+
|
5
|
+
def up
|
6
|
+
remove_column :firms, :email_address
|
7
|
+
remove_column :firms, :telephone_number
|
8
|
+
|
9
|
+
# Data does not need to be migrated as the offices migration will have
|
10
|
+
# already copied these two fields into an office record.
|
11
|
+
end
|
12
|
+
|
13
|
+
def down
|
14
|
+
add_column :firms, :email_address, :string
|
15
|
+
add_column :firms, :telephone_number, :string
|
16
|
+
|
17
|
+
# Use the equivalent main office fields to repopulate
|
18
|
+
Firm.all.select { |f| f.offices.any? }.each do |firm|
|
19
|
+
main_office = firm.offices.first
|
20
|
+
firm.update!(
|
21
|
+
email_address: main_office.email_address,
|
22
|
+
telephone_number: main_office.telephone_number
|
23
|
+
)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/mas/rad_core/version.rb
CHANGED
data/spec/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended that you check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(version:
|
14
|
+
ActiveRecord::Schema.define(version: 20150930140851) do
|
15
15
|
|
16
16
|
# These are extensions that must be enabled in order to support this database
|
17
17
|
enable_extension "plpgsql"
|
@@ -80,8 +80,6 @@ ActiveRecord::Schema.define(version: 20150825090822) do
|
|
80
80
|
create_table "firms", force: :cascade do |t|
|
81
81
|
t.integer "fca_number", null: false
|
82
82
|
t.string "registered_name", null: false
|
83
|
-
t.string "email_address"
|
84
|
-
t.string "telephone_number"
|
85
83
|
t.datetime "created_at", null: false
|
86
84
|
t.datetime "updated_at", null: false
|
87
85
|
t.boolean "free_initial_meeting"
|
@@ -99,8 +97,8 @@ ActiveRecord::Schema.define(version: 20150825090822) do
|
|
99
97
|
t.string "website_address"
|
100
98
|
t.boolean "ethical_investing_flag", default: false, null: false
|
101
99
|
t.boolean "sharia_investing_flag", default: false, null: false
|
102
|
-
t.text "languages", default: [], null: false, array: true
|
103
100
|
t.integer "status"
|
101
|
+
t.text "languages", default: [], null: false, array: true
|
104
102
|
end
|
105
103
|
|
106
104
|
add_index "firms", ["initial_meeting_duration_id"], name: "index_firms_on_initial_meeting_duration_id", using: :btree
|
data/spec/dummy/log/test.log
CHANGED
Binary file
|
data/spec/factories/firm.rb
CHANGED
@@ -4,8 +4,6 @@ FactoryGirl.define do
|
|
4
4
|
factory :firm, aliases: [:publishable_firm, :onboarded_firm] do
|
5
5
|
fca_number
|
6
6
|
registered_name
|
7
|
-
email_address { Faker::Internet.email }
|
8
|
-
telephone_number { Faker::Base.numerify('##### ### ###') }
|
9
7
|
website_address { Faker::Internet.url }
|
10
8
|
in_person_advice_methods { create_list(:in_person_advice_method, rand(1..3)) }
|
11
9
|
free_initial_meeting { [true, false].sample }
|
@@ -49,6 +47,7 @@ FactoryGirl.define do
|
|
49
47
|
factory :firm_with_advisers, traits: [:with_advisers]
|
50
48
|
factory :firm_without_advisers, traits: [:without_advisers]
|
51
49
|
factory :firm_with_offices, traits: [:with_offices]
|
50
|
+
factory :firm_without_offices, traits: [:without_offices]
|
52
51
|
factory :firm_with_principal, traits: [:with_principal]
|
53
52
|
factory :firm_with_no_business_split, traits: [:with_no_business_split]
|
54
53
|
factory :firm_with_remote_advice, traits: [:with_remote_advice]
|
@@ -57,7 +56,8 @@ FactoryGirl.define do
|
|
57
56
|
factory :invalid_firm, traits: [:invalid], aliases: [:not_onboarded_firm]
|
58
57
|
|
59
58
|
trait :invalid do
|
60
|
-
|
59
|
+
# Invalidate the marker field without referencing it directly
|
60
|
+
__registered false
|
61
61
|
end
|
62
62
|
|
63
63
|
trait :with_no_business_split do
|
@@ -85,6 +85,10 @@ FactoryGirl.define do
|
|
85
85
|
offices_count 3
|
86
86
|
end
|
87
87
|
|
88
|
+
trait :without_offices do
|
89
|
+
offices_count 0
|
90
|
+
end
|
91
|
+
|
88
92
|
trait :with_remote_advice do
|
89
93
|
other_advice_methods { create_list(:other_advice_method, rand(1..3)) }
|
90
94
|
in_person_advice_methods []
|
@@ -61,7 +61,7 @@ RSpec.describe 'Firm factory' do
|
|
61
61
|
specify 'associations' do
|
62
62
|
expect(subject.principal).not_to be_present
|
63
63
|
expect(subject).to have(1).offices
|
64
|
-
expect(subject).to have(
|
64
|
+
expect(subject).to have(:no).advisers
|
65
65
|
expect(subject).to have(:no).trading_names
|
66
66
|
end
|
67
67
|
end
|
@@ -85,6 +85,25 @@ RSpec.describe 'Firm factory' do
|
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
|
+
describe 'factory :firm_without_offices' do
|
89
|
+
let(:factory) { :firm_without_offices }
|
90
|
+
|
91
|
+
specify 'expected status' do
|
92
|
+
expect(subject).to be_persisted
|
93
|
+
expect(subject).to be_valid
|
94
|
+
expect(subject).not_to be_publishable
|
95
|
+
expect(subject).not_to be_trading_name
|
96
|
+
expect(subject.primary_advice_method).to be(:local)
|
97
|
+
end
|
98
|
+
|
99
|
+
specify 'associations' do
|
100
|
+
expect(subject.principal).not_to be_present
|
101
|
+
expect(subject).to have(:no).offices
|
102
|
+
expect(subject).to have(1).advisers
|
103
|
+
expect(subject).to have(:no).trading_names
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
88
107
|
describe 'factory :firm_with_trading_names' do
|
89
108
|
let(:factory) { :firm_with_trading_names }
|
90
109
|
|
data/spec/models/firm_spec.rb
CHANGED
@@ -18,29 +18,19 @@ RSpec.describe Firm do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe '#registered?' do
|
21
|
-
|
22
|
-
firm.
|
23
|
-
expect(firm).not_to be_registered
|
21
|
+
def set_marker_field(firm, value)
|
22
|
+
firm.send("#{Firm::REGISTERED_MARKER_FIELD}=", value)
|
24
23
|
end
|
25
24
|
|
26
|
-
it 'is
|
27
|
-
firm
|
28
|
-
expect(firm).
|
25
|
+
it 'is false if the REGISTERED_MARKER_FIELD field is nil' do
|
26
|
+
set_marker_field(firm, nil)
|
27
|
+
expect(firm).not_to be_registered
|
29
28
|
end
|
30
|
-
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
expect(
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'when provided' do
|
40
|
-
let(:firm) { build(:firm, telephone_number: ' 07715 930 457 ') }
|
41
|
-
|
42
|
-
it 'removes whitespace' do
|
43
|
-
expect(firm.telephone_number).to eq('07715930457')
|
30
|
+
it 'is true if the REGISTERED_MARKER_FIELD field has a valid value' do
|
31
|
+
Firm::REGISTERED_MARKER_FIELD_VALID_VALUES.each do |value|
|
32
|
+
set_marker_field(firm, value)
|
33
|
+
expect(firm).to be_registered
|
44
34
|
end
|
45
35
|
end
|
46
36
|
end
|
@@ -185,34 +175,6 @@ RSpec.describe Firm do
|
|
185
175
|
expect(firm.field_order).not_to be_empty
|
186
176
|
end
|
187
177
|
|
188
|
-
describe 'email address' do
|
189
|
-
context 'when not present' do
|
190
|
-
before { firm.email_address = nil }
|
191
|
-
|
192
|
-
it { is_expected.to_not be_valid }
|
193
|
-
end
|
194
|
-
|
195
|
-
context 'when badly formatted' do
|
196
|
-
before { firm.email_address = 'not-valid' }
|
197
|
-
|
198
|
-
it { is_expected.to_not be_valid }
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
describe 'telephone number' do
|
203
|
-
context 'when not present' do
|
204
|
-
before { firm.telephone_number = nil }
|
205
|
-
|
206
|
-
it { is_expected.to_not be_valid }
|
207
|
-
end
|
208
|
-
|
209
|
-
context 'when badly formatted' do
|
210
|
-
before { firm.telephone_number = 'not-valid' }
|
211
|
-
|
212
|
-
it { is_expected.to_not be_valid }
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
178
|
describe 'Website address' do
|
217
179
|
context 'when provided' do
|
218
180
|
it 'must not exceed 100 characters' do
|
@@ -450,7 +412,7 @@ RSpec.describe Firm do
|
|
450
412
|
it 'the firm is published' do
|
451
413
|
firm = create :firm
|
452
414
|
allow(IndexFirmJob).to receive(:perform_later)
|
453
|
-
firm.update_attributes(
|
415
|
+
firm.update_attributes(registered_name: 'A new name')
|
454
416
|
firm.run_callbacks(:commit)
|
455
417
|
expect(IndexFirmJob).to have_received(:perform_later).with(firm)
|
456
418
|
end
|
@@ -39,7 +39,7 @@ RSpec.describe FirmSerializer do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'exposes `telephone_number`' do
|
42
|
-
expect(subject[:telephone_number]).to eql(firm.telephone_number)
|
42
|
+
expect(subject[:telephone_number]).to eql(firm.main_office.telephone_number)
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'exposes `website_address`' do
|
@@ -47,7 +47,7 @@ RSpec.describe FirmSerializer do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'exposes `email_address`' do
|
50
|
-
expect(subject[:email_address]).to eql(firm.email_address)
|
50
|
+
expect(subject[:email_address]).to eql(firm.main_office.email_address)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'exposes `free_initial_meeting`' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mas-rad_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.82
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Lovell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -305,6 +305,7 @@ files:
|
|
305
305
|
- db/migrate/20150813103046_remove_confirmed_disclaimer_from_advisers.rb
|
306
306
|
- db/migrate/20150817141257_add_status_to_firms.rb
|
307
307
|
- db/migrate/20150825090822_move_firm_address_to_office.rb
|
308
|
+
- db/migrate/20150930140851_remove_firm_email_and_phone.rb
|
308
309
|
- lib/mas/adviser_result.rb
|
309
310
|
- lib/mas/elastic_search_client.rb
|
310
311
|
- lib/mas/firm_repository.rb
|