unidom-article_number 3.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (24) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/unidom/article_number/application_controller.rb +8 -2
  3. data/app/helpers/unidom/article_number/application_helper.rb +8 -1
  4. data/app/jobs/unidom/article_number/application_job.rb +7 -1
  5. data/app/mailers/unidom/article_number/application_mailer.rb +9 -3
  6. data/app/models/unidom/article_number/application_record.rb +8 -2
  7. data/app/models/unidom/article_number/concerns/as_barcode.rb +27 -19
  8. data/app/models/unidom/article_number/concerns/as_ean13_marked.rb +16 -8
  9. data/app/models/unidom/article_number/concerns/as_ean8_marked.rb +16 -8
  10. data/app/models/unidom/article_number/concerns/as_marked.rb +26 -18
  11. data/app/models/unidom/article_number/concerns/code128_barcode.rb +23 -15
  12. data/app/models/unidom/article_number/ean13_barcode.rb +35 -29
  13. data/app/models/unidom/article_number/ean8_barcode.rb +28 -22
  14. data/app/models/unidom/article_number/marking.rb +30 -24
  15. data/app/models/unidom/article_number/vehicle_identification_number.rb +30 -24
  16. data/app/validators/unidom/article_number/vehicle_identification_number_validator.rb +28 -22
  17. data/app/views/layouts/unidom/article_number/application.html.erb +1 -1
  18. data/db/migrate/20020101000000_create_unidom_markings.rb +4 -4
  19. data/db/migrate/20020102000000_create_unidom_ean_13_barcodes.rb +4 -4
  20. data/db/migrate/20020103000000_create_unidom_ean_8_barcodes.rb +4 -4
  21. data/db/migrate/20020111000000_create_unidom_vehicle_identification_numbers.rb +4 -4
  22. data/lib/unidom/article_number/engine.rb +1 -1
  23. data/lib/unidom/article_number/version.rb +1 -1
  24. metadata +7 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 193db4f054cf4f48af079266d4f04b47613cff838f0390dff0536ec1acf380eb
4
- data.tar.gz: b4f1fd360428afeb471f0a380ecec57cb3057869663a0b16c09de39f0e0ecbcb
3
+ metadata.gz: 20387d317914c567cade086d61a214bdc1544df3db3188765a6d1d876fbbf0d4
4
+ data.tar.gz: f3122b1aff3157ba6e49b2c60a1dbd832debe28c985482cb64ff0aee74e5f1da
5
5
  SHA512:
6
- metadata.gz: ad9efe8aa0829faf6c15abce4d0574296f581ec2f4259aa53bb52c5f7912d44a7bc2f34e0cc1dcfcfa87e648dba00de6c025fe8229c49760b212e7c2044fde4e
7
- data.tar.gz: 5d2c920a5f0c03b30c93f399b8c3bc36e32a263ed9164584e2205e81f9fd84dec5a81e0c2f4489a2fab915f49d34a5681b987054012f35e7e400b999b414e733
6
+ metadata.gz: 41c78fa15b41db235ca0cd303c64127aa548339287eabe3d8a0f76ceecb277160457fec56f3a50233c825837258c0f909d21b2650cd36465522a9753cdc11096
7
+ data.tar.gz: 53956165e31e623a47cc60dfd1bba815050f0498d63a585d254c81886d03ecb39429132a5a35250c7322c96a82d05687a334b50df3ed49a40aac91e88f943186
@@ -1,6 +1,12 @@
1
1
  ##
2
2
  # Application controller 是模块内所有控制器的基类。
3
3
 
4
- class Unidom::ArticleNumber::ApplicationController < ActionController::Base
5
- protect_from_forgery with: :exception
4
+ module Unidom
5
+ module ArticleNumber
6
+
7
+ class ApplicationController < ActionController::Base
8
+ protect_from_forgery with: :exception
9
+ end
10
+
11
+ end
6
12
  end
@@ -1,2 +1,9 @@
1
- module Unidom::ArticleNumber::ApplicationHelper
1
+
2
+ module Unidom
3
+ module ArticleNumber
4
+
5
+ module ApplicationHelper
6
+ end
7
+
8
+ end
2
9
  end
@@ -1,5 +1,11 @@
1
1
  ##
2
2
  # Application job 是模块内所有异步任务的基类。
3
3
 
4
- class Unidom::ArticleNumber::ApplicationJob < ActiveJob::Base
4
+ module Unidom
5
+ module ArticleNumber
6
+
7
+ class ApplicationJob < ActiveJob::Base
8
+ end
9
+
10
+ end
5
11
  end
@@ -1,7 +1,13 @@
1
1
  ##
2
2
  # Application mailer 是模块内所有电子邮件发送类的基类。
3
3
 
4
- class Unidom::ArticleNumber::ApplicationMailer < ActionMailer::Base
5
- default from: 'from@example.com'
6
- layout 'mailer'
4
+ module Unidom
5
+ module ArticleNumber
6
+
7
+ class ApplicationMailer < ActionMailer::Base
8
+ default from: 'from@example.com'
9
+ layout 'mailer'
10
+ end
11
+
12
+ end
7
13
  end
@@ -1,6 +1,12 @@
1
1
  ##
2
2
  # Application record 是模块内所有模型的抽象基类。
3
3
 
4
- class Unidom::ArticleNumber::ApplicationRecord < ActiveRecord::Base
5
- self.abstract_class = true
4
+ module Unidom
5
+ module ArticleNumber
6
+
7
+ class ApplicationRecord < ActiveRecord::Base
8
+ self.abstract_class = true
9
+ end
10
+
11
+ end
6
12
  end
@@ -1,31 +1,39 @@
1
1
  ##
2
2
  # As Barcode 是条形码的领域逻辑关注点。
3
3
 
4
- module Unidom::ArticleNumber::Concerns::AsBarcode
4
+ module Unidom
5
+ module ArticleNumber
6
+ module Concerns
5
7
 
6
- extend ActiveSupport::Concern
8
+ module AsBarcode
7
9
 
8
- included do |includer|
10
+ extend ActiveSupport::Concern
9
11
 
10
- has_many :markings, class_name: 'Unidom::ArticleNumber::Marking', as: :barcode
11
- has_many :marked_products, through: :markings, source: :marked, source_type: 'Unidom::Product::Product'
12
+ included do |includer|
12
13
 
13
- def mark!(marked, by: nil, at: Time.now)
14
- raise ArgumentError.new('The marked argument is required.') if marked.blank?
15
- raise ArgumentError.new('The by argument is required.' ) if by.blank?
16
- raise ArgumentError.new('The at argument is required.' ) if at.blank?
17
- markings.create! marked: marked, marker: by, opened_at: at
18
- end
14
+ has_many :markings, class_name: 'Unidom::ArticleNumber::Marking', as: :barcode
15
+ has_many :marked_products, through: :markings, source: :marked, source_type: 'Unidom::Product::Product'
19
16
 
20
- def mark?(marked, at: Time.now)
21
- raise ArgumentError.new('The marked argument is required.') if marked.blank?
22
- raise ArgumentError.new('The at argument is required.' ) if at.blank?
23
- markings.marked_is(marked).valid_at(now: at).alive.exists?
24
- end
17
+ def mark!(marked, by: nil, at: Time.now)
18
+ raise ArgumentError.new('The marked argument is required.') if marked.blank?
19
+ raise ArgumentError.new('The by argument is required.' ) if by.blank?
20
+ raise ArgumentError.new('The at argument is required.' ) if at.blank?
21
+ markings.create! marked: marked, marker: by, opened_at: at
22
+ end
25
23
 
26
- end
24
+ def mark?(marked, at: Time.now)
25
+ raise ArgumentError.new('The marked argument is required.') if marked.blank?
26
+ raise ArgumentError.new('The at argument is required.' ) if at.blank?
27
+ markings.marked_is(marked).valid_at(now: at).alive.exists?
28
+ end
27
29
 
28
- module ClassMethods
29
- end
30
+ end
30
31
 
32
+ module ClassMethods
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
31
39
  end
@@ -1,19 +1,27 @@
1
1
  ##
2
2
  # As EAN-13 Marked 是被 EAN-13 条形码标注的物品的领域逻辑关注点。
3
3
 
4
- module Unidom::ArticleNumber::Concerns::AsEan13Marked
4
+ module Unidom
5
+ module ArticleNumber
6
+ module Concerns
5
7
 
6
- extend ActiveSupport::Concern
8
+ module AsEan13Marked
7
9
 
8
- include Unidom::ArticleNumber::Concerns::AsMarked
10
+ extend ActiveSupport::Concern
9
11
 
10
- included do |includer|
12
+ include Unidom::ArticleNumber::Concerns::AsMarked
11
13
 
12
- has_many :ean13_barcodes, through: :markings, source: :barcode, source_type: 'Unidom::ArticleNumber::Ean13Barcode'
14
+ included do |includer|
13
15
 
14
- end
16
+ has_many :ean13_barcodes, through: :markings, source: :barcode, source_type: 'Unidom::ArticleNumber::Ean13Barcode'
15
17
 
16
- module ClassMethods
17
- end
18
+ end
19
+
20
+ module ClassMethods
21
+ end
18
22
 
23
+ end
24
+
25
+ end
26
+ end
19
27
  end
@@ -1,19 +1,27 @@
1
1
  ##
2
2
  # As EAN-8 Marked 是被 EAN-8 条形码标注的物品的领域逻辑关注点。
3
3
 
4
- module Unidom::ArticleNumber::Concerns::AsEan8Marked
4
+ module Unidom
5
+ module ArticleNumber
6
+ module Concerns
5
7
 
6
- extend ActiveSupport::Concern
8
+ module AsEan8Marked
7
9
 
8
- include Unidom::ArticleNumber::Concerns::AsMarked
10
+ extend ActiveSupport::Concern
9
11
 
10
- included do |includer|
12
+ include Unidom::ArticleNumber::Concerns::AsMarked
11
13
 
12
- has_many :ean8_barcodes, through: :markings, source: :barcode, source_type: 'Unidom::ArticleNumber::Ean8Barcode'
14
+ included do |includer|
13
15
 
14
- end
16
+ has_many :ean8_barcodes, through: :markings, source: :barcode, source_type: 'Unidom::ArticleNumber::Ean8Barcode'
15
17
 
16
- module ClassMethods
17
- end
18
+ end
19
+
20
+ module ClassMethods
21
+ end
18
22
 
23
+ end
24
+
25
+ end
26
+ end
19
27
  end
@@ -1,30 +1,38 @@
1
1
  ##
2
2
  # As Marked 是被条形码标注的物品的领域逻辑关注点。
3
3
 
4
- module Unidom::ArticleNumber::Concerns::AsMarked
4
+ module Unidom
5
+ module ArticleNumber
6
+ module Concerns
5
7
 
6
- extend ActiveSupport::Concern
8
+ module AsMarked
7
9
 
8
- included do |includer|
10
+ extend ActiveSupport::Concern
9
11
 
10
- has_many :markings, class_name: 'Unidom::ArticleNumber::Marking', as: :marked
12
+ included do |includer|
11
13
 
12
- def is_marked!(as: nil, by: nil, at: Time.now)
13
- raise ArgumentError.new('The as argument is required.') if as.blank?
14
- raise ArgumentError.new('The by argument is required.') if by.blank?
15
- raise ArgumentError.new('The at argument is required.') if at.blank?
16
- markings.create! barcode: as, marker: by, opened_at: at
17
- end
14
+ has_many :markings, class_name: 'Unidom::ArticleNumber::Marking', as: :marked
18
15
 
19
- def is_marked?(as: nil, at: Time.now)
20
- raise ArgumentError.new('The as argument is required.') if as.blank?
21
- raise ArgumentError.new('The at argument is required.') if at.blank?
22
- markings.barcode_is(as).valid_at(now: at).alive.exists?
23
- end
16
+ def is_marked!(as: nil, by: nil, at: Time.now)
17
+ raise ArgumentError.new('The as argument is required.') if as.blank?
18
+ raise ArgumentError.new('The by argument is required.') if by.blank?
19
+ raise ArgumentError.new('The at argument is required.') if at.blank?
20
+ markings.create! barcode: as, marker: by, opened_at: at
21
+ end
24
22
 
25
- end
23
+ def is_marked?(as: nil, at: Time.now)
24
+ raise ArgumentError.new('The as argument is required.') if as.blank?
25
+ raise ArgumentError.new('The at argument is required.') if at.blank?
26
+ markings.barcode_is(as).valid_at(now: at).alive.exists?
27
+ end
26
28
 
27
- module ClassMethods
28
- end
29
+ end
29
30
 
31
+ module ClassMethods
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
30
38
  end
@@ -4,28 +4,36 @@
4
4
  # Code 128 B 条形码 code set: ASCII characters 32 to 127 (0-9, A-Z, a-z), special characters, and FNC 1-4.
5
5
  # Code 128 C 条形码 code set: 00-99 (encodes each two digits with one code) and FNC1.
6
6
 
7
- module Unidom::ArticleNumber::Concerns::Code128Barcode
7
+ module Unidom
8
+ module ArticleNumber
9
+ module Concerns
8
10
 
9
- extend ActiveSupport::Concern
11
+ module Code128Barcode
10
12
 
11
- included do |includer|
13
+ extend ActiveSupport::Concern
12
14
 
13
- validates :code, uniqueness: true
14
- validates :code, numericality: { only_integer: true }, if: Proc.new { |barcode| 'C'==barcode.code_set_code }
15
+ included do |includer|
15
16
 
16
- has_many :markings, class_name: 'Unidom::ArticleNumber::Marking'
17
+ validates :code, uniqueness: true
18
+ validates :code, numericality: { only_integer: true }, if: Proc.new { |barcode| 'C'==barcode.code_set_code }
17
19
 
18
- include Unidom::Common::Concerns::ModelExtension
20
+ has_many :markings, class_name: 'Unidom::ArticleNumber::Marking'
19
21
 
20
- #def weighted_modulo_103_checksum(codes)
21
- # sum = 103
22
- # codes.each_with_index do |char, index| sum += (char.unpack('C').first-32)*(index+1) end
23
- # sum%103
24
- #end
22
+ include Unidom::Common::Concerns::ModelExtension
25
23
 
26
- end
24
+ #def weighted_modulo_103_checksum(codes)
25
+ # sum = 103
26
+ # codes.each_with_index do |char, index| sum += (char.unpack('C').first-32)*(index+1) end
27
+ # sum%103
28
+ #end
27
29
 
28
- module ClassMethods
29
- end
30
+ end
31
+
32
+ module ClassMethods
33
+ end
30
34
 
35
+ end
36
+
37
+ end
38
+ end
31
39
  end
@@ -3,34 +3,40 @@
3
3
  # https://en.wikipedia.org/wiki/EAN-13
4
4
  # https://en.wikipedia.org/wiki/International_Article_Number_(EAN)
5
5
 
6
- class Unidom::ArticleNumber::Ean13Barcode < Unidom::ArticleNumber::ApplicationRecord
7
-
8
- RESTRICTED_DISTRIBUTION_GS1_PREFIXES = (('020'..'029').to_a + ('040'..'049').to_a + ('200'..'299').to_a).freeze
9
-
10
- self.table_name = 'unidom_ean_13_barcodes'
11
-
12
- include Unidom::Common::Concerns::ModelExtension
13
- include Unidom::ArticleNumber::Concerns::AsBarcode
14
-
15
- validates :code, uniqueness: true, length: { minimum: 13 }, numericality: { only_integer: true }
16
- validates :gs1_prefix, presence: true, length: { is: 3 }, numericality: { only_integer: true }
17
- validates :company_number, presence: true, length: { is: 4 }, numericality: { only_integer: true }
18
- validates :item_reference, presence: true, length: { is: 5 }, numericality: { only_integer: true }
19
- validates :check_digit, presence: true, length: { is: 1 }, numericality: { only_integer: true }
20
-
21
- def code=(code)
22
- code = code.to_s
23
- write_attribute :code, code
24
- if code.present?
25
- write_attribute :gs1_prefix, code[0..2]
26
- write_attribute :company_number, code[3..6]
27
- write_attribute :item_reference, code[7..11]
28
- write_attribute :check_digit, code[12]
29
- end
30
- end
6
+ module Unidom
7
+ module ArticleNumber
31
8
 
32
- def restricted_distribution?
33
- self.class::RESTRICTED_DISTRIBUTION_GS1_PREFIXES.include? gs1_prefix
34
- end
9
+ class Ean13Barcode < ApplicationRecord
10
+
11
+ RESTRICTED_DISTRIBUTION_GS1_PREFIXES = (('020'..'029').to_a + ('040'..'049').to_a + ('200'..'299').to_a).freeze
12
+
13
+ self.table_name = 'unidom_ean_13_barcodes'
14
+
15
+ include Unidom::Common::Concerns::ModelExtension
16
+ include Unidom::ArticleNumber::Concerns::AsBarcode
35
17
 
36
- end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::Ean13Barcode'
18
+ validates :code, uniqueness: true, length: { minimum: 13 }, numericality: { only_integer: true }
19
+ validates :gs1_prefix, presence: true, length: { is: 3 }, numericality: { only_integer: true }
20
+ validates :company_number, presence: true, length: { is: 4 }, numericality: { only_integer: true }
21
+ validates :item_reference, presence: true, length: { is: 5 }, numericality: { only_integer: true }
22
+ validates :check_digit, presence: true, length: { is: 1 }, numericality: { only_integer: true }
23
+
24
+ def code=(code)
25
+ code = code.to_s
26
+ write_attribute :code, code
27
+ if code.present?
28
+ write_attribute :gs1_prefix, code[0..2]
29
+ write_attribute :company_number, code[3..6]
30
+ write_attribute :item_reference, code[7..11]
31
+ write_attribute :check_digit, code[12]
32
+ end
33
+ end
34
+
35
+ def restricted_distribution?
36
+ self.class::RESTRICTED_DISTRIBUTION_GS1_PREFIXES.include? gs1_prefix
37
+ end
38
+
39
+ end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::Ean13Barcode'
40
+
41
+ end
42
+ end
@@ -2,32 +2,38 @@
2
2
  # EAN-8 Barcode 是8位条形码。
3
3
  # https://en.wikipedia.org/wiki/EAN-8
4
4
 
5
- class Unidom::ArticleNumber::Ean8Barcode < Unidom::ArticleNumber::ApplicationRecord
5
+ module Unidom
6
+ module ArticleNumber
6
7
 
7
- RESTRICTED_DISTRIBUTION_GS1_PREFIXES = (('020'..'029').to_a + ('040'..'049').to_a + ('200'..'299').to_a).freeze
8
+ class Ean8Barcode < ApplicationRecord
8
9
 
9
- self.table_name = 'unidom_ean_8_barcodes'
10
+ RESTRICTED_DISTRIBUTION_GS1_PREFIXES = (('020'..'029').to_a + ('040'..'049').to_a + ('200'..'299').to_a).freeze
10
11
 
11
- include Unidom::Common::Concerns::ModelExtension
12
- include Unidom::ArticleNumber::Concerns::AsBarcode
12
+ self.table_name = 'unidom_ean_8_barcodes'
13
13
 
14
- validates :code, uniqueness: true, length: { minimum: 8 }, numericality: { only_integer: true }
15
- validates :gs1_prefix, presence: true, length: { is: 3 }, numericality: { only_integer: true }
16
- validates :item_reference, presence: true, length: { is: 4 }, numericality: { only_integer: true }
17
- validates :check_digit, presence: true, length: { is: 1 }, numericality: { only_integer: true }
14
+ include Unidom::Common::Concerns::ModelExtension
15
+ include Unidom::ArticleNumber::Concerns::AsBarcode
18
16
 
19
- def code=(code)
20
- code = code.to_s
21
- write_attribute :code, code
22
- if code.present?
23
- write_attribute :gs1_prefix, code[0..2]
24
- write_attribute :item_reference, code[3..6]
25
- write_attribute :check_digit, code[7]
26
- end
27
- end
17
+ validates :code, uniqueness: true, length: { minimum: 8 }, numericality: { only_integer: true }
18
+ validates :gs1_prefix, presence: true, length: { is: 3 }, numericality: { only_integer: true }
19
+ validates :item_reference, presence: true, length: { is: 4 }, numericality: { only_integer: true }
20
+ validates :check_digit, presence: true, length: { is: 1 }, numericality: { only_integer: true }
28
21
 
29
- def restricted_distribution?
30
- self.class::RESTRICTED_DISTRIBUTION_GS1_PREFIXES.include? gs1_prefix
31
- end
22
+ def code=(code)
23
+ code = code.to_s
24
+ write_attribute :code, code
25
+ if code.present?
26
+ write_attribute :gs1_prefix, code[0..2]
27
+ write_attribute :item_reference, code[3..6]
28
+ write_attribute :check_digit, code[7]
29
+ end
30
+ end
31
+
32
+ def restricted_distribution?
33
+ self.class::RESTRICTED_DISTRIBUTION_GS1_PREFIXES.include? gs1_prefix
34
+ end
32
35
 
33
- end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::Ean8Barcode'
36
+ end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::Ean8Barcode'
37
+
38
+ end
39
+ end
@@ -1,36 +1,42 @@
1
1
  ##
2
2
  # Marking 是条码和物品的标记关系。
3
3
 
4
- class Unidom::ArticleNumber::Marking < Unidom::ArticleNumber::ApplicationRecord
4
+ module Unidom
5
+ module ArticleNumber
5
6
 
6
- self.table_name = 'unidom_markings'
7
+ class Marking < ApplicationRecord
7
8
 
8
- include Unidom::Common::Concerns::ModelExtension
9
+ self.table_name = 'unidom_markings'
9
10
 
10
- belongs_to :barcode, polymorphic: true
11
- belongs_to :marked, polymorphic: true
12
- belongs_to :marker, polymorphic: true
11
+ include Unidom::Common::Concerns::ModelExtension
13
12
 
14
- scope :barcode_is, ->(barcode) { where barcode: barcode }
15
- scope :marked_by, ->(marker) { where marker: marker }
16
- scope :marked_is, ->(marked) { where marked: marked }
13
+ belongs_to :barcode, polymorphic: true
14
+ belongs_to :marked, polymorphic: true
15
+ belongs_to :marker, polymorphic: true
17
16
 
18
- def self.mark!(barcode: nil, marked: nil, marker: nil, opened_at: Time.now)
17
+ scope :barcode_is, ->(barcode) { where barcode: barcode }
18
+ scope :marked_by, ->(marker) { where marker: marker }
19
+ scope :marked_is, ->(marked) { where marked: marked }
19
20
 
20
- raise ArgumentError.new('The barcode argument is required.' ) if barcode.blank?
21
- raise ArgumentError.new('The marked argument is required.' ) if marked.blank?
22
- raise ArgumentError.new('The opened_at argument is required.') if opened_at.blank?
21
+ def self.mark!(barcode: nil, marked: nil, marker: nil, opened_at: Time.now)
23
22
 
24
- query = barcode_is(barcode).marked_is(marked).valid_at.alive
25
- creation = { opened_at: opened_at }
26
- if marker.present? && marker.respond_to?(:id)
27
- creation[:marker] = marker
28
- else
29
- creation[:marker_id] = Unidom::Common::NULL_UUID
30
- creation[:marker_type] = ''
31
- end
32
- query.first_or_create! creation
23
+ raise ArgumentError.new('The barcode argument is required.' ) if barcode.blank?
24
+ raise ArgumentError.new('The marked argument is required.' ) if marked.blank?
25
+ raise ArgumentError.new('The opened_at argument is required.') if opened_at.blank?
33
26
 
34
- end
27
+ query = barcode_is(barcode).marked_is(marked).valid_at.alive
28
+ creation = { opened_at: opened_at }
29
+ if marker.present? && marker.respond_to?(:id)
30
+ creation[:marker] = marker
31
+ else
32
+ creation[:marker_id] = Unidom::Common::NULL_UUID
33
+ creation[:marker_type] = ''
34
+ end
35
+ query.first_or_create! creation
36
+
37
+ end
35
38
 
36
- end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::Marking'
39
+ end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::Marking'
40
+
41
+ end
42
+ end
@@ -3,28 +3,34 @@
3
3
  # https://en.wikipedia.org/wiki/Vehicle_identification_number
4
4
  # GB 16735-2004
5
5
 
6
- class Unidom::ArticleNumber::VehicleIdentificationNumber < Unidom::ArticleNumber::ApplicationRecord
7
-
8
- self.table_name = 'unidom_vehicle_identification_numbers'
9
-
10
- include Unidom::Common::Concerns::ModelExtension
11
- include Unidom::ArticleNumber::Concerns::AsBarcode
12
-
13
- validates :code, uniqueness: true, 'unidom/article_number/vehicle_identification_number': true
14
- validates :world_manufacturer_identifier, presence: true, length: { is: columns_hash['world_manufacturer_identifier'].limit }
15
- validates :vehicle_descriptor_section, presence: true, length: { is: columns_hash['vehicle_descriptor_section'].limit }
16
- validates :check_digit, presence: true, length: { is: columns_hash['check_digit'].limit }
17
- validates :vehicle_identifier_section, presence: true, length: { is: columns_hash['vehicle_identifier_section'].limit }
18
-
19
- def code=(code)
20
- code = code.to_s
21
- write_attribute :code, code
22
- if code.present?
23
- write_attribute :world_manufacturer_identifier, code[0..2]
24
- write_attribute :vehicle_descriptor_section, code[3..7]
25
- write_attribute :check_digit, code[8]
26
- write_attribute :vehicle_identifier_section, code[9..16]
27
- end
28
- end
6
+ module Unidom
7
+ module ArticleNumber
8
+
9
+ class VehicleIdentificationNumber < ApplicationRecord
10
+
11
+ self.table_name = 'unidom_vehicle_identification_numbers'
12
+
13
+ include Unidom::Common::Concerns::ModelExtension
14
+ include Unidom::ArticleNumber::Concerns::AsBarcode
29
15
 
30
- end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::VehicleIdentificationNumber'
16
+ validates :code, uniqueness: true, 'unidom/article_number/vehicle_identification_number': true
17
+ validates :world_manufacturer_identifier, presence: true, length: { is: columns_hash['world_manufacturer_identifier'].limit }
18
+ validates :vehicle_descriptor_section, presence: true, length: { is: columns_hash['vehicle_descriptor_section'].limit }
19
+ validates :check_digit, presence: true, length: { is: columns_hash['check_digit'].limit }
20
+ validates :vehicle_identifier_section, presence: true, length: { is: columns_hash['vehicle_identifier_section'].limit }
21
+
22
+ def code=(code)
23
+ code = code.to_s
24
+ write_attribute :code, code
25
+ if code.present?
26
+ write_attribute :world_manufacturer_identifier, code[0..2]
27
+ write_attribute :vehicle_descriptor_section, code[3..7]
28
+ write_attribute :check_digit, code[8]
29
+ write_attribute :vehicle_identifier_section, code[9..16]
30
+ end
31
+ end
32
+
33
+ end unless Unidom::Common::Neglection.namespace_neglected? 'Unidom::ArticleNumber::VehicleIdentificationNumber'
34
+
35
+ end
36
+ end
@@ -1,29 +1,35 @@
1
1
  # https://en.wikipedia.org/wiki/Vehicle_identification_number#Check-digit_calculation
2
2
  # GB 16735-2004
3
3
 
4
- class Unidom::ArticleNumber::VehicleIdentificationNumberValidator < ActiveModel::EachValidator
5
-
6
- WEIGHTS = '8765432X098765432'.freeze
7
- TRANSLITERATION = '0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ'.freeze
8
- CHECK_DIGITS = '0123456789X'.freeze
9
-
10
- def validate_each(record, attribute, value)
11
- value = value.to_s.upcase
12
- if value.length>17
13
- record.errors[attribute] << (options[:message]||'The length should be 17')
14
- elsif value.match /I|O|Q/
15
- record.errors[attribute] << (options[:message]||'I, O, Q should be excluded')
16
- else
17
- record.errors[attribute] << (options[:message]||'is invalid') unless check_digit(value)==value[8]
18
- end
19
- end
4
+ module Unidom
5
+ module ArticleNumber
20
6
 
21
- def check_digit(value)
22
- checksum = 0
23
- value.chars.each_with_index do |char, index| checksum += self.class::TRANSLITERATION.index(char)%10*self.class::CHECK_DIGITS.index(self.class::WEIGHTS.at(index)) end
24
- self.class::CHECK_DIGITS.at checksum%11
25
- end
7
+ class VehicleIdentificationNumberValidator < ActiveModel::EachValidator
8
+
9
+ WEIGHTS = '8765432X098765432'.freeze
10
+ TRANSLITERATION = '0123456789.ABCDEFGH..JKLMN.P.R..STUVWXYZ'.freeze
11
+ CHECK_DIGITS = '0123456789X'.freeze
12
+
13
+ def validate_each(record, attribute, value)
14
+ value = value.to_s.upcase
15
+ if value.length>17
16
+ record.errors[attribute] << (options[:message]||'The length should be 17')
17
+ elsif value.match /I|O|Q/
18
+ record.errors[attribute] << (options[:message]||'I, O, Q should be excluded')
19
+ else
20
+ record.errors[attribute] << (options[:message]||'is invalid') unless check_digit(value)==value[8]
21
+ end
22
+ end
26
23
 
27
- private :check_digit
24
+ def check_digit(value)
25
+ checksum = 0
26
+ value.chars.each_with_index do |char, index| checksum += self.class::TRANSLITERATION.index(char)%10*self.class::CHECK_DIGITS.index(self.class::WEIGHTS.at(index)) end
27
+ self.class::CHECK_DIGITS.at checksum%11
28
+ end
28
29
 
30
+ private :check_digit
31
+
32
+ end
33
+
34
+ end
29
35
  end
@@ -2,7 +2,7 @@
2
2
  <html>
3
3
  <head>
4
4
  <title>Unidom Article Number</title>
5
- <%= stylesheet_link_tag 'unidom/article_number/application', media: "all" %>
5
+ <%= stylesheet_link_tag 'unidom/article_number/application', media: 'all' %>
6
6
  <%= csrf_meta_tags %>
7
7
  </head>
8
8
  <body>
@@ -1,4 +1,4 @@
1
- class CreateUnidomMarkings < ActiveRecord::Migration
1
+ class CreateUnidomMarkings < ActiveRecord::Migration[6.0]
2
2
 
3
3
  def change
4
4
 
@@ -11,9 +11,9 @@ class CreateUnidomMarkings < ActiveRecord::Migration
11
11
  t.references :marker, type: :uuid, null: false,
12
12
  polymorphic: { null: false, default: '', limit: 200 }
13
13
 
14
- t.column :state, 'char(1)', null: false, default: 'C'
15
- t.datetime :opened_at, null: false, default: ::Time.utc(1970)
16
- t.datetime :closed_at, null: false, default: ::Time.utc(3000)
14
+ t.column :state, 'char(1)', null: false, default: Unidom::Common::STATE
15
+ t.datetime :opened_at, null: false, default: Unidom::Common::OPENED_AT
16
+ t.datetime :closed_at, null: false, default: Unidom::Common::CLOSED_AT
17
17
  t.boolean :defunct, null: false, default: false
18
18
  t.jsonb :notation, null: false, default: {}
19
19
 
@@ -1,4 +1,4 @@
1
- class CreateUnidomEan13Barcodes < ActiveRecord::Migration
1
+ class CreateUnidomEan13Barcodes < ActiveRecord::Migration[6.0]
2
2
 
3
3
  def change
4
4
 
@@ -10,9 +10,9 @@ class CreateUnidomEan13Barcodes < ActiveRecord::Migration
10
10
  t.string :item_reference, null: false, default: '0'*2, limit: 6
11
11
  t.column :check_digit, 'char(1)', null: false, default: '0'
12
12
 
13
- t.column :state, 'char(1)', null: false, default: 'C'
14
- t.datetime :opened_at, null: false, default: ::Time.utc(1970)
15
- t.datetime :closed_at, null: false, default: ::Time.utc(3000)
13
+ t.column :state, 'char(1)', null: false, default: Unidom::Common::STATE
14
+ t.datetime :opened_at, null: false, default: Unidom::Common::OPENED_AT
15
+ t.datetime :closed_at, null: false, default: Unidom::Common::CLOSED_AT
16
16
  t.boolean :defunct, null: false, default: false
17
17
  t.jsonb :notation, null: false, default: {}
18
18
 
@@ -1,4 +1,4 @@
1
- class CreateUnidomEan8Barcodes < ActiveRecord::Migration
1
+ class CreateUnidomEan8Barcodes < ActiveRecord::Migration[6.0]
2
2
 
3
3
  def change
4
4
 
@@ -9,9 +9,9 @@ class CreateUnidomEan8Barcodes < ActiveRecord::Migration
9
9
  t.column :item_reference, 'char(4)', null: false, default: '0'*4
10
10
  t.column :check_digit, 'char(1)', null: false, default: '0'
11
11
 
12
- t.column :state, 'char(1)', null: false, default: 'C'
13
- t.datetime :opened_at, null: false, default: ::Time.utc(1970)
14
- t.datetime :closed_at, null: false, default: ::Time.utc(3000)
12
+ t.column :state, 'char(1)', null: false, default: Unidom::Common::STATE
13
+ t.datetime :opened_at, null: false, default: Unidom::Common::OPENED_AT
14
+ t.datetime :closed_at, null: false, default: Unidom::Common::CLOSED_AT
15
15
  t.boolean :defunct, null: false, default: false
16
16
  t.jsonb :notation, null: false, default: {}
17
17
 
@@ -1,4 +1,4 @@
1
- class CreateUnidomVehicleIdentificationNumbers < ActiveRecord::Migration
1
+ class CreateUnidomVehicleIdentificationNumbers < ActiveRecord::Migration[6.0]
2
2
 
3
3
  def change
4
4
 
@@ -10,9 +10,9 @@ class CreateUnidomVehicleIdentificationNumbers < ActiveRecord::Migration
10
10
  t.column :check_digit, 'char(1)', null: false, default: '0'
11
11
  t.column :vehicle_identifier_section, 'char(8)', null: false, default: '0'*8
12
12
 
13
- t.column :state, 'char(1)', null: false, default: 'C'
14
- t.datetime :opened_at, null: false, default: ::Time.utc(1970)
15
- t.datetime :closed_at, null: false, default: ::Time.utc(3000)
13
+ t.column :state, 'char(1)', null: false, default: Unidom::Common::STATE
14
+ t.datetime :opened_at, null: false, default: Unidom::Common::OPENED_AT
15
+ t.datetime :closed_at, null: false, default: Unidom::Common::CLOSED_AT
16
16
  t.boolean :defunct, null: false, default: false
17
17
  t.jsonb :notation, null: false, default: {}
18
18
 
@@ -1,7 +1,7 @@
1
1
  module Unidom
2
2
  module ArticleNumber
3
3
 
4
- class Engine < ::Rails::Engine
4
+ class Engine < Rails::Engine
5
5
 
6
6
  include Unidom::Common::EngineExtension
7
7
 
@@ -1,5 +1,5 @@
1
1
  module Unidom
2
2
  module ArticleNumber
3
- VERSION = '3.0'.freeze
3
+ VERSION = '3.0.1'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unidom-article_number
3
3
  version: !ruby/object:Gem::Version
4
- version: '3.0'
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Topbit Du
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-19 00:00:00.000000000 Z
11
+ date: 2021-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: unidom-common
@@ -75,11 +75,11 @@ files:
75
75
  - lib/unidom/article_number/types_rspec.rb
76
76
  - lib/unidom/article_number/validators_rspec.rb
77
77
  - lib/unidom/article_number/version.rb
78
- homepage: https://github.com/topbitdu/unidom-article_number
78
+ homepage: https://gitee.com/Unidom/unidom-article_number
79
79
  licenses:
80
80
  - MIT
81
81
  metadata: {}
82
- post_install_message:
82
+ post_install_message:
83
83
  rdoc_options: []
84
84
  require_paths:
85
85
  - lib
@@ -94,8 +94,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  requirements: []
97
- rubygems_version: 3.1.2
98
- signing_key:
97
+ rubygems_version: 3.2.3
98
+ signing_key:
99
99
  specification_version: 4
100
100
  summary: Unidom Article Number Domain Model Engine 物品编码领域模型引擎
101
101
  test_files: []