mas-rad_core 0.0.81 → 0.0.82

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: e2f8947dfc7c45c34e1998ca8af771722f43f493
4
- data.tar.gz: 6885e9c568e5100b60f6794e2416a6b59f88db2a
3
+ metadata.gz: 8aaa6855712fd187910683b20259960b00ca1472
4
+ data.tar.gz: 104f655a861efc082670fda527505d9e89fda40e
5
5
  SHA512:
6
- metadata.gz: c715b56726070f6f800e7155434b4d418207bc22f776d19b0131997bd8f73c847928e26181a613007fad7939f7cd6d42253df5bbe41600c1a16c2e71bdc62860
7
- data.tar.gz: 4ac0dec58ce440793367fbe0b3e56655cae7daf6981d4797cfd57adf322b14ac5a02709bfe2642be7db191e4392b3a71c6635d5d6e5cad83f58978dbc4e2bd81
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(email_address: nil) }
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: [true, false] }
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
- email_address.present?
130
+ # false is a valid value so we cannot use `.present?`
131
+ !(send(REGISTERED_MARKER_FIELD).nil?)
135
132
  end
136
133
 
137
- enum status: { independent: 1, restricted: 2 }
138
-
139
- def telephone_number
140
- return nil unless self[:telephone_number]
141
-
142
- self[:telephone_number].gsub(' ', '')
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
@@ -1,5 +1,5 @@
1
1
  module MAS
2
2
  module RadCore
3
- VERSION = '0.0.81'
3
+ VERSION = '0.0.82'
4
4
  end
5
5
  end
@@ -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: 20150825090822) do
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
Binary file
@@ -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
- email_address nil
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(0).advisers
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
 
@@ -18,29 +18,19 @@ RSpec.describe Firm do
18
18
  end
19
19
 
20
20
  describe '#registered?' do
21
- it 'is false if the firm has no email address' do
22
- firm.email_address = nil
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 true if the firm has an email address' do
27
- firm.email_address = 'acme@example.com'
28
- expect(firm).to be_registered
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
- describe '#telephone_number' do
33
- context 'when `nil`' do
34
- it 'returns `nil`' do
35
- expect(build(:firm, telephone_number: nil).telephone_number).to be_nil
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(email_address: 'bill@example.com')
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.81
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-09-29 00:00:00.000000000 Z
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