dscf-marketplace 0.1.1 → 0.1.3

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: cde6c4e0be884ac22882a61a3e8e0dbe2e195905a18ec4daf22733c581c0c23d
4
- data.tar.gz: dbffce607b9df1020c5ea3d2a7d6b23cabe97ee22f2d8e36795d0fb0f5694da3
3
+ metadata.gz: 796eeeaf3921a9ddb0e478285af2b644a972cb51a53231a39e7062e7c4b53f0a
4
+ data.tar.gz: af123ae47644fd07cca78b7e3b4907ef79d530cf96dff069338499ebf908cd0e
5
5
  SHA512:
6
- metadata.gz: 48d49e3eaf3840f63fdf72cc26487fbefe607023a749a6a12b2d48d6a3dce2145ca6fcdaf54138b3c924d98ab462c9779810455fd0cb7949476ce4e5bbc16fb7
7
- data.tar.gz: 2252875018cea0d8272f4860090cb27175c20ce9986997d3846163db59484bf3024af348a9c7e1a4ac8d6f04c79e1ce3f90e8f254babced1b6aa283c92970972
6
+ metadata.gz: d6aa7f04ccb27eb52e027c68a72c429cfdf793d9c7dfde195851b868e6a69296e6328000eed13fd12075dd18ef76f164f6d7a8deee69a1dc31869f809c30da79
7
+ data.tar.gz: 9a4653a2bbd5b67779a5180ea2dc660971e50485ed6224d86f7904079bdc1302bd6c26bb2c8006761c22f43b9e0f5e335c15db9bbfff8ed6098b83f51a5b9fdc
@@ -0,0 +1,40 @@
1
+ module Dscf
2
+ module Marketplace
3
+ class Unit < ApplicationRecord
4
+ enum :unit_type, {
5
+ weight: 0,
6
+ volume: 1,
7
+ quantity: 2,
8
+ dimension: 3,
9
+ area: 4,
10
+ other: 5
11
+ }
12
+
13
+ has_many :unit_conversions, class_name: "Dscf::Marketplace::UnitConversion", foreign_key: :from_unit_id
14
+ has_many :products, class_name: "Dscf::Marketplace::Product"
15
+ has_many :supplier_products, class_name: "Dscf::Marketplace::SupplierProduct"
16
+ has_many :listings, class_name: "Dscf::Marketplace::Listing"
17
+ has_many :order_items, class_name: "Dscf::Marketplace::OrderItem"
18
+ has_many :rfq_items, class_name: "Dscf::Marketplace::RfqItem"
19
+ has_many :quotation_items, class_name: "Dscf::Marketplace::QuotationItem"
20
+
21
+ validates :code, presence: true, uniqueness: true, length: {maximum: 10}
22
+ validates :name, presence: true, length: {maximum: 50}
23
+ validates :unit_type, presence: true
24
+
25
+ scope :by_type, ->(type) { where(unit_type: unit_types[type]) }
26
+
27
+ def display_name
28
+ "#{name} (#{code})"
29
+ end
30
+
31
+ def convertible_to?(other_unit)
32
+ return false if other_unit.nil?
33
+ return true if id == other_unit.id
34
+
35
+ unit_conversions.exists?(to_unit: other_unit) ||
36
+ other_unit.unit_conversions.exists?(to_unit: self)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,33 @@
1
+ module Dscf
2
+ module Marketplace
3
+ class UnitConversion < ApplicationRecord
4
+ belongs_to :from_unit, class_name: "Dscf::Marketplace::Unit"
5
+ belongs_to :to_unit, class_name: "Dscf::Marketplace::Unit"
6
+
7
+ validates :from_unit_id, presence: true
8
+ validates :to_unit_id, presence: true
9
+ validates :conversion_factor, presence: true, numericality: {greater_than: 0}
10
+ validates :notes, length: {maximum: 500}, allow_blank: true
11
+
12
+ validate :units_must_be_different
13
+
14
+ def units_must_be_different
15
+ return unless from_unit_id && to_unit_id
16
+
17
+ return unless from_unit_id == to_unit_id
18
+
19
+ errors.add(:to_unit_id, "must be different from from_unit")
20
+ end
21
+
22
+ def reverse_conversion_factor
23
+ return nil unless conversion_factor && conversion_factor != 0
24
+
25
+ 1.0 / conversion_factor
26
+ end
27
+
28
+ def description
29
+ "#{from_unit&.display_name} → #{to_unit&.display_name} (×#{conversion_factor})"
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ class CreateDscfMarketplaceUnits < ActiveRecord::Migration[8.0]
2
+ def change
3
+ create_table :dscf_marketplace_units do |t|
4
+ t.string :code, null: false, limit: 10
5
+ t.string :name, null: false, limit: 50
6
+ t.integer :unit_type, null: false
7
+
8
+ t.timestamps
9
+ end
10
+
11
+ add_index :dscf_marketplace_units, :code,
12
+ unique: true,
13
+ name: "code_on_dm_units_indx"
14
+ add_index :dscf_marketplace_units, :unit_type,
15
+ name: "unit_type_on_dm_units_indx"
16
+ end
17
+ end
@@ -0,0 +1,23 @@
1
+ class CreateDscfMarketplaceUnitConversions < ActiveRecord::Migration[8.0]
2
+ def change
3
+ create_table :dscf_marketplace_unit_conversions do |t|
4
+ t.references :from_unit,
5
+ index: {name: "from_unit_on_dm_uc_indx"},
6
+ null: false,
7
+ foreign_key: {to_table: :dscf_marketplace_units}
8
+ t.references :to_unit,
9
+ index: {name: "to_unit_on_dm_uc_indx"},
10
+ null: false,
11
+ foreign_key: {to_table: :dscf_marketplace_units}
12
+ t.decimal :conversion_factor, precision: 15, scale: 6, null: false
13
+ t.string :notes, limit: 500
14
+
15
+ t.timestamps
16
+ end
17
+
18
+ add_index :dscf_marketplace_unit_conversions,
19
+ %i[from_unit_id to_unit_id],
20
+ unique: true,
21
+ name: "unique_unit_conversion_indx"
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Dscf
2
2
  module Marketplace
3
- VERSION = "0.1.1".freeze
3
+ VERSION = "0.1.3".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :dscf_marketplace_unit_conversion, class: "Dscf::Marketplace::UnitConversion" do
3
+ from_unit { create(:dscf_marketplace_unit) }
4
+ to_unit { create(:dscf_marketplace_unit) }
5
+ conversion_factor { 1.5 }
6
+ notes { "Conversion factor description" }
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :dscf_marketplace_unit, class: "Dscf::Marketplace::Unit" do
3
+ sequence(:code) { |n| "unit#{n}" }
4
+ sequence(:name) { |n| "Unit #{n}" }
5
+ unit_type { :quantity }
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dscf-marketplace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
@@ -197,20 +197,6 @@ dependencies:
197
197
  - - "~>"
198
198
  - !ruby/object:Gem::Version
199
199
  version: '4.1'
200
- - !ruby/object:Gem::Dependency
201
- name: active_storage_validations
202
- requirement: !ruby/object:Gem::Requirement
203
- requirements:
204
- - - "~>"
205
- - !ruby/object:Gem::Version
206
- version: '1.1'
207
- type: :development
208
- prerelease: false
209
- version_requirements: !ruby/object:Gem::Requirement
210
- requirements:
211
- - - "~>"
212
- - !ruby/object:Gem::Version
213
- version: '1.1'
214
200
  - !ruby/object:Gem::Dependency
215
201
  name: brakeman
216
202
  requirement: !ruby/object:Gem::Requirement
@@ -225,20 +211,6 @@ dependencies:
225
211
  - - "~>"
226
212
  - !ruby/object:Gem::Version
227
213
  version: '6.1'
228
- - !ruby/object:Gem::Dependency
229
- name: bullet
230
- requirement: !ruby/object:Gem::Requirement
231
- requirements:
232
- - - "~>"
233
- - !ruby/object:Gem::Version
234
- version: '7.1'
235
- type: :development
236
- prerelease: false
237
- version_requirements: !ruby/object:Gem::Requirement
238
- requirements:
239
- - - "~>"
240
- - !ruby/object:Gem::Version
241
- version: '7.1'
242
214
  - !ruby/object:Gem::Dependency
243
215
  name: database_cleaner-active_record
244
216
  requirement: !ruby/object:Gem::Requirement
@@ -450,14 +422,20 @@ files:
450
422
  - app/mailers/dscf/marketplace/application_mailer.rb
451
423
  - app/models/dscf/marketplace/application_record.rb
452
424
  - app/models/dscf/marketplace/category.rb
425
+ - app/models/dscf/marketplace/unit.rb
426
+ - app/models/dscf/marketplace/unit_conversion.rb
453
427
  - config/routes.rb
454
428
  - db/migrate/20250827172043_create_dscf_marketplace_categories.rb
455
429
  - db/migrate/20250827173526_update_dscf_marketplace_categories_indexes.rb
430
+ - db/migrate/20250827182550_create_dscf_marketplace_units.rb
431
+ - db/migrate/20250827185656_create_dscf_marketplace_unit_conversions.rb
456
432
  - lib/dscf/marketplace.rb
457
433
  - lib/dscf/marketplace/engine.rb
458
434
  - lib/dscf/marketplace/version.rb
459
435
  - lib/tasks/dscf/marketplace_tasks.rake
460
436
  - spec/factories/dscf/marketplace/categories.rb
437
+ - spec/factories/dscf/marketplace/unit_conversions.rb
438
+ - spec/factories/dscf/marketplace/units.rb
461
439
  homepage: https://mksaddis.com/
462
440
  licenses:
463
441
  - MIT
@@ -471,7 +449,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
471
449
  requirements:
472
450
  - - ">="
473
451
  - !ruby/object:Gem::Version
474
- version: '3.2'
452
+ version: '3.4'
475
453
  required_rubygems_version: !ruby/object:Gem::Requirement
476
454
  requirements:
477
455
  - - ">="