dscf-core 0.1.1 → 0.1.2

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
  SHA256:
3
- metadata.gz: 619edb7b97e90954dc87fcef846540842f55e0f6dc6cfd0712bb811704fa2f12
4
- data.tar.gz: c53ede3b3dd65d47cf040cad38b52327dcb2cacacddbe7020a3bef6891a8add1
3
+ metadata.gz: 113ae71c73f1677c95192abafbe070227cb8938204430fc320e0ee7667546f74
4
+ data.tar.gz: d688f387984a84dc6e2078cacf65cb74560ad568073d4965b6943a5a0997ac9b
5
5
  SHA512:
6
- metadata.gz: b0236fc1c523a946f57da3a1f173e9dea653ab7487504afda1017400517d890bb27579e149a4e5e7eec0328933e2760307929d897281ef519904344f1bdc4a66
7
- data.tar.gz: de58d1c8a1c991c83d61ea76869ff0b73d724db1616ccfc6ba8df6f16fcc6d79fd3ee987e811f8be1eead8557a4b0a3ad7d3b31d4daf5709c55372f1d89b558f
6
+ metadata.gz: e5f9c9c60bcec896a04c131a93b574f7f8dda64a15793816d3f9422cbeaed04788b6200015c8a0b3ea17302b43ac6592c3acce724bbbb016468da8ffa7e23749
7
+ data.tar.gz: 6d0ad2580955a6c87d33d4b7b6131ea9a65944c79f032568dd361c9d301bd3ce77eaada16ddf1b5e87c932e5e6d630151e6ebd97daf8d7712af212d20cfbc05a
@@ -0,0 +1,11 @@
1
+ module Dscf
2
+ module Core
3
+ class Address < ApplicationRecord
4
+ belongs_to :user, class_name: "Dscf::Core::User"
5
+
6
+ enum :address_type, {shipping: 0, residence: 1, current: 2, branch: 3}
7
+
8
+ validates :country, presence: true
9
+ end
10
+ end
11
+ end
@@ -6,6 +6,8 @@ module Dscf
6
6
 
7
7
  has_one_attached :logo
8
8
 
9
+ has_many :documents, as: :documentable, dependent: :destroy, class_name: "Dscf::Core::Document"
10
+
9
11
  validates :name, presence: true
10
12
 
11
13
  def logo_url
@@ -0,0 +1,19 @@
1
+ module Dscf
2
+ module Core
3
+ class Document < ApplicationRecord
4
+ belongs_to :documentable, polymorphic: true
5
+ belongs_to :verified_by, polymorphic: true, optional: true
6
+ validates :document_type, presence: true
7
+
8
+ has_one_attached :file
9
+
10
+ enum :document_type, {business_license: 0, drivers_license: 1, claim: 2}
11
+
12
+ def file_url
13
+ return nil unless file.attached?
14
+
15
+ Rails.application.routes.url_helpers.rails_blob_url(file, only_path: true)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -9,6 +9,9 @@ module Dscf
9
9
  has_many :user_roles, class_name: "Dscf::Core::UserRole"
10
10
  has_many :roles, through: :user_roles, class_name: "Dscf::Core::Role"
11
11
  has_many :businesses, dependent: :destroy, class_name: "Dscf::Core::Business"
12
+ has_many :addresses, dependent: :destroy, class_name: "Dscf::Core::Address"
13
+ has_many :documents, as: :documentable, dependent: :destroy, class_name: "Dscf::Core::Document"
14
+ has_one :user_profile, dependent: :destroy, class_name: "Dscf::Core::UserProfile"
12
15
  end
13
16
  end
14
17
  end
@@ -0,0 +1,12 @@
1
+ module Dscf
2
+ module Core
3
+ class UserProfile < ApplicationRecord
4
+ belongs_to :user, class_name: "Dscf::Core::User"
5
+
6
+ validates :first_name, presence: true
7
+ validates :last_name, presence: true
8
+ validates :watchlist_hit, inclusion: {in: [true, false]}
9
+ validates :verification_status, presence: true
10
+ end
11
+ end
12
+ end
@@ -1,4 +1,4 @@
1
- class CreateDscfCoreBusinesses < ActiveRecord::Migration[7.1]
1
+ class CreateDscfCoreBusinesses < ActiveRecord::Migration[8.0]
2
2
  def change
3
3
  create_table :dscf_core_businesses do |t|
4
4
  t.string :name, null: false
@@ -0,0 +1,19 @@
1
+ class CreateDscfCoreAddresses < ActiveRecord::Migration[8.0]
2
+ def change
3
+ create_table :dscf_core_addresses do |t|
4
+ t.references :user, null: false, index: {name: "user_on_dc_add_indx"}, foreign_key: {to_table: :dscf_core_users}
5
+ t.integer :address_type
6
+ t.string :country, null: false, default: "Ethiopia"
7
+ t.string :city
8
+ t.string :sub_city
9
+ t.string :woreda
10
+ t.string :kebele
11
+ t.string :house_numbers
12
+ t.string :po_box
13
+ t.decimal :latitude, precision: 10, scale: 6
14
+ t.decimal :longitude, precision: 10, scale: 6
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ class CreateDscfCoreDocuments < ActiveRecord::Migration[8.0]
2
+ def change
3
+ create_table :dscf_core_documents do |t|
4
+ t.references :documentable, polymorphic: true, null: false
5
+ t.string :document_type, null: false
6
+ t.boolean :is_verified, default: false
7
+ t.references :verified_by, polymorphic: true, null: true
8
+ t.datetime :verified_at
9
+ t.jsonb :metadata, default: {}
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ class ChangeDocumentTypeInDscfCoreDocuments < ActiveRecord::Migration[8.0]
2
+ def up
3
+ remove_column :dscf_core_documents, :document_type
4
+ add_column :dscf_core_documents, :document_type, :integer, null: false
5
+ end
6
+
7
+ def down
8
+ remove_column :dscf_core_documents, :document_type
9
+ add_column :dscf_core_documents, :document_type, :string, null: false
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ class CreateDscfCoreUserProfiles < ActiveRecord::Migration[8.0]
2
+ def change
3
+ create_table :dscf_core_user_profiles do |t|
4
+ t.references :user, null: false, index: {name: "user_on_dc_up_indx"}, foreign_key: {to_table: :dscf_core_users}
5
+ t.string :first_name, null: false
6
+ t.string :middle_name
7
+ t.string :last_name, null: false
8
+ t.string :gender
9
+ t.string :nationality
10
+ t.date :date_of_birth
11
+ t.string :place_of_birth
12
+ t.string :fayda_number
13
+ t.string :occupation
14
+ t.string :position_title
15
+ t.string :employer_name
16
+ t.decimal :avg_monthly_income, precision: 18, scale: 2
17
+ t.decimal :avg_annual_income, precision: 18, scale: 2
18
+ t.string :pep_status
19
+ t.decimal :risk_score, precision: 5, scale: 2
20
+ t.boolean :watchlist_hit, null: false
21
+ t.string :verification_status, null: false
22
+
23
+ t.timestamps
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  module Dscf
2
2
  module Core
3
- VERSION = "0.1.1".freeze
3
+ VERSION = "0.1.2".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,15 @@
1
+ FactoryBot.define do
2
+ factory :address, class: "Dscf::Core::Address" do
3
+ user
4
+ address_type { Dscf::Core::Address.address_types.keys.sample }
5
+ country { Faker::Address.country }
6
+ city { Faker::Address.city }
7
+ sub_city { Faker::Address.community }
8
+ woreda { Faker::Address.community }
9
+ kebele { Faker::Address.community }
10
+ house_numbers { Faker::Address.building_number }
11
+ po_box { Faker::Address.postcode }
12
+ latitude { Faker::Address.latitude }
13
+ longitude { Faker::Address.longitude }
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ FactoryBot.define do
2
+ factory :document, class: "Dscf::Core::Document" do
3
+ association :documentable, factory: :user # Default documentable
4
+ document_type { Dscf::Core::Document.document_types.keys.sample }
5
+ is_verified { false }
6
+ verified_at { nil }
7
+ metadata { {"source" => "test"} }
8
+
9
+ trait :for_user do
10
+ association :documentable, factory: :user
11
+ end
12
+
13
+ trait :for_business do
14
+ association :documentable, factory: :business
15
+ end
16
+
17
+ after(:build) do |document|
18
+ document.file.attach(
19
+ io: File.open(Rails.root.join("app", "fixtures", "images", "logo.jpg")),
20
+ filename: "logo.jpg",
21
+ content_type: "image/jpeg"
22
+ )
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ FactoryBot.define do
2
+ factory :user_profile, class: "Dscf::Core::UserProfile" do
3
+ user
4
+ first_name { Faker::Name.first_name }
5
+ middle_name { Faker::Name.middle_name }
6
+ last_name { Faker::Name.last_name }
7
+ gender { %w[Male Female Other].sample }
8
+ nationality { Faker::Address.country }
9
+ date_of_birth { Faker::Date.birthday(min_age: 18, max_age: 65) }
10
+ place_of_birth { Faker::Address.city }
11
+ fayda_number { Faker::Alphanumeric.alpha(number: 10) }
12
+ occupation { Faker::Job.title }
13
+ position_title { Faker::Job.position }
14
+ employer_name { Faker::Company.name }
15
+ avg_monthly_income { Faker::Number.decimal(l_digits: 5, r_digits: 2) }
16
+ avg_annual_income { Faker::Number.decimal(l_digits: 6, r_digits: 2) }
17
+ pep_status { %w[None Low Medium High].sample }
18
+ risk_score { Faker::Number.decimal(l_digits: 1, r_digits: 2) }
19
+ watchlist_hit { Faker::Boolean.boolean }
20
+ verification_status { %w[Pending Verified Rejected].sample }
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dscf-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
@@ -149,6 +149,20 @@ dependencies:
149
149
  - - ">="
150
150
  - !ruby/object:Gem::Version
151
151
  version: '0'
152
+ - !ruby/object:Gem::Dependency
153
+ name: active_storage_validations
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
152
166
  - !ruby/object:Gem::Dependency
153
167
  name: database_cleaner-active_record
154
168
  requirement: !ruby/object:Gem::Requirement
@@ -288,11 +302,14 @@ files:
288
302
  - app/controllers/dscf/core/application_controller.rb
289
303
  - app/jobs/dscf/core/application_job.rb
290
304
  - app/mailers/dscf/core/application_mailer.rb
305
+ - app/models/dscf/core/address.rb
291
306
  - app/models/dscf/core/application_record.rb
292
307
  - app/models/dscf/core/business.rb
293
308
  - app/models/dscf/core/business_type.rb
309
+ - app/models/dscf/core/document.rb
294
310
  - app/models/dscf/core/role.rb
295
311
  - app/models/dscf/core/user.rb
312
+ - app/models/dscf/core/user_profile.rb
296
313
  - app/models/dscf/core/user_role.rb
297
314
  - config/routes.rb
298
315
  - db/migrate/20250821175358_create_dscf_core_users.rb
@@ -300,13 +317,20 @@ files:
300
317
  - db/migrate/20250822054547_create_dscf_core_user_roles.rb
301
318
  - db/migrate/20250822065156_create_dscf_core_business_types.rb
302
319
  - db/migrate/20250822072222_create_dscf_core_businesses.rb
320
+ - db/migrate/20250822075206_create_dscf_core_addresses.rb
321
+ - db/migrate/20250822081522_create_dscf_core_documents.rb
322
+ - db/migrate/20250822083000_change_document_type_in_dscf_core_documents.rb
323
+ - db/migrate/20250822092031_create_dscf_core_user_profiles.rb
303
324
  - lib/dscf/core.rb
304
325
  - lib/dscf/core/engine.rb
305
326
  - lib/dscf/core/version.rb
306
327
  - lib/tasks/dscf/core_tasks.rake
328
+ - spec/factories/dscf/core/addresses.rb
307
329
  - spec/factories/dscf/core/business_types.rb
308
330
  - spec/factories/dscf/core/businesses.rb
331
+ - spec/factories/dscf/core/documents.rb
309
332
  - spec/factories/dscf/core/roles.rb
333
+ - spec/factories/dscf/core/user_profiles.rb
310
334
  - spec/factories/dscf/core/user_roles.rb
311
335
  - spec/factories/dscf/core/users.rb
312
336
  homepage: https://mksaddis.com/