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 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