Unidom Article Number 物品编码领域模型引擎
Unidom (UNIfied Domain Object Model) is a series of domain model engines. The Article Number domain model engine includes EAN-13, EAN-8, and IMEI models. Unidom (统一领域对象模型)是一系列的领域模型引擎。物品编码领域模型引擎包括EAN-13、EAN-8和IMEI的模型。
Recent Update
Check out the Road Map to find out what's the next. Check out the Change Log to find out what's new.
Usage in Gemfile
gem 'unidom-article_number'
Run the Database Migration
rake db:migrate
The migration versions start with 200201.
Call the Model
= Unidom::ArticleNumber::Ean13Barcode.create! code: '1234567890123'
= Unidom::ArticleNumber::Ean8Barcode.create! code: '12345678'
marked = Unidom::Product::Product.create! name: 'Chocolate', abbreviation: 'Choc', packing_norm: '12 blocks', measurement_unit: 'box'
marker = Unidom::Party::Person.create! name: 'John'
ean_13_marking = Unidom::ArticleNumber::Marking.mark! barcode: , marked: marked, marker: marker, opened_at: Time.now
ean_8_marking = Unidom::ArticleNumber::Marking.mark! barcode: , marked: marked, marker: marker, opened_at: Time.now
vin = Unidom::ArticleNumber::VehicleIdentificationNumber.create! code: 'LVHCU165XD5002138'
# The Vehicle Identification Number Validator is enabled on the code field by default.
found_vin = Unidom::ArticleNumber::VehicleIdentificationNumber.coded_as('LVHCU165XD5002138').first
Include the Concern
include Unidom::ArticleNumber::Concerns::AsBarcode
include Unidom::ArticleNumber::Concerns::AsMarked
include Unidom::ArticleNumber::Concerns::AsEan13Marked
include Unidom::ArticleNumber::Concerns::AsEan8Marked
As Barcode concern
The As Barcode concern do the following tasks for the includer automatically:
- Define the has_many :markings macro as:
has_many :markings, class_name: 'Unidom::ArticleNumber::Marking', as: :barcode
- Define the #mark! method as:
mark!(marked, by: nil, at: Time.now)
- Define the #mark? mathod as:
mark?(marked, at: Time.now)
As Marked concern
The As Marked concern do the following tasks for the includer automatically:
- Define the has_many :markings macro as:
has_many :markings, class_name: 'Unidom::ArticleNumber::Marking', as: :marked
- Define the #is_marked! method as:
is_marked!(as: nil, by: nil, at: Time.now)
- Define the #is_marked? method as:
is_marked?(as: nil, at: Time.now)
As EAN-13 Marked concern
The As EAN-13 Marked concern do the following tasks for the includer automatically:
- Include the As Marked concern
- Define the has_many :ean13_barcodes macro as:
has_many :ean13_barcodes, through: :markings, source: :barcode, source_type: 'Unidom::ArticleNumber::Ean13Barcode'
As EAN-8 Marked concern
The As EAN-8 Marked concern do the following tasks for the includer automatically:
- Include the As Marked concern
- Define the has_many :ean8_barcodes macro as:
has_many :ean8_barcodes, through: :markings, source: :barcode, source_type: 'Unidom::ArticleNumber::Ean8Barcode'
Validator
Vehicle Identification Number validator
validates :vin, presence: true, 'unidom/article_number/vehicle_identification_number': true
Disable the Model & Migration
If you only need the app components other than models, the migrations should be neglected, and the models should not be loaded.
# config/initializers/unidom.rb
Unidom::Common.configure do ||
[:neglected_namespaces] = %w{
Unidom::ArticleNumber
}
end
RSpec examples
RSpec example manifest (run automatically)
# spec/models/unidom_spec.rb
require 'unidom/article_number/models_rspec'
# spec/types/unidom_spec.rb
require 'unidom/article_number/types_rspec'
# spec/validators/unidom_spec.rb
require 'unidom/article_number/validators_rspec'
RSpec shared examples (to be integrated)
# The Unidom::ArticleNumber::Ean13Barcode model, the Unidom::ArticleNumber::Ean8Barcode model, & the Unidom::ArticleNumber::VehicleIdentificationNumber model already include the Unidom::ArticleNumber::Concerns::AsBarcode concern
# app/models/your_barcode.rb
class YourBarcode < ActiveRecord::Base
include Unidom::Common::Concerns::ModelExtension
include Unidom::ArticleNumber::Concerns::AsBarcode
end
# spec/support/unidom_rspec_shared_examples.rb
require 'unidom/article_number/rspec_shared_examples'
# spec/models/your_barcode_spec.rb
describe YourBarcode do
model_attribtues = {
code: 'AABBCCDDEEFF'
}
it_behaves_like 'Unidom::ArticleNumber::Concerns::AsBarcode', model_attribtues
end