enumbler 0.6.0 → 0.6.1
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +3 -2
- data/lib/enumbler/enabler.rb +18 -5
- data/lib/enumbler/enumble.rb +5 -8
- data/lib/enumbler/version.rb +1 -1
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: b196f7e09065d7f461c8f0c4ae87e25d849600dfa38840b2aba5b9f2d75c2d7b
         | 
| 4 | 
            +
              data.tar.gz: f187980e2ba0a7b79dc9657c1469e205aa1e3efb7439190d2d5592d5df0851b9
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 43c6e81c18303961b9e1ea530282f70fff80d76b57bf57eeef347f014a3bc6918d525748a0e0ea216bd4aed31579b9c133d43dd085a0cca42dbab4c19ab5f839
         | 
| 7 | 
            +
              data.tar.gz: 96635852aa098120cc7a93e30d8e51c865e0be220ae73b93f06cca1af783feaa9776cb2295d02f5a3cfbc4abff6c2d1495c0b4951c9b06755f444a2db3cc931d
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -26,6 +26,7 @@ Suppose you have a `House` and you want to add some `colors` to the house.  You | |
| 26 26 | 
             
            ActiveRecord::Schema.define do
         | 
| 27 27 | 
             
              create_table :colors|t|
         | 
| 28 28 | 
             
                t.string :label, null: false, index: { unique: true }
         | 
| 29 | 
            +
                t.string :hex, null: true
         | 
| 29 30 | 
             
              end
         | 
| 30 31 |  | 
| 31 32 | 
             
              create_table :houses|t|
         | 
| @@ -42,8 +43,8 @@ end | |
| 42 43 | 
             
            class Color < ApplicationRecord
         | 
| 43 44 | 
             
              include Enumbler::Enabler
         | 
| 44 45 |  | 
| 45 | 
            -
              enumble :black, 1
         | 
| 46 | 
            -
              enumble :white, 2
         | 
| 46 | 
            +
              enumble :black, 1, hex: '000000'
         | 
| 47 | 
            +
              enumble :white, 2, hex: 'ffffff'
         | 
| 47 48 | 
             
              enumble :dark_brown, 3
         | 
| 48 49 | 
             
              enumble :infinity, 4, label: 'Infinity - and beyond!'
         | 
| 49 50 | 
             
            end
         | 
    
        data/lib/enumbler/enabler.rb
    CHANGED
    
    | @@ -40,8 +40,8 @@ module Enumbler | |
| 40 40 | 
             
                  #   class Color < ApplicationRecord
         | 
| 41 41 | 
             
                  #     include Enumbler::Enabler
         | 
| 42 42 | 
             
                  #
         | 
| 43 | 
            -
                  #     enumble :black, 1
         | 
| 44 | 
            -
                  #     enumble :white, 2
         | 
| 43 | 
            +
                  #     enumble :black, 1, hex: '000000'
         | 
| 44 | 
            +
                  #     enumble :white, 2, hex: 'ffffff'
         | 
| 45 45 | 
             
                  #     enumble :dark_brown, 3, # label: 'dark-brown'
         | 
| 46 46 | 
             
                  #     enumble :black_hole, 3, label: 'Oh my! It is a black hole!'
         | 
| 47 47 | 
             
                  #   end
         | 
| @@ -55,14 +55,16 @@ module Enumbler | |
| 55 55 | 
             
                  # @param enum [Symbol] the enum representation
         | 
| 56 56 | 
             
                  # @param id [Integer] the primary key value
         | 
| 57 57 | 
             
                  # @param label [String] optional: label for humans
         | 
| 58 | 
            -
                  # @param ** | 
| 58 | 
            +
                  # @param **attributes [Hash] optional: additional attributes and values that
         | 
| 59 59 | 
             
                  #   will be saved to the database for this enumble record
         | 
| 60 | 
            -
                  def enumble(enum, id, label: nil, ** | 
| 60 | 
            +
                  def enumble(enum, id, label: nil, **attributes)
         | 
| 61 61 | 
             
                    @enumbles ||= Enumbler::Collection.new
         | 
| 62 62 | 
             
                    @enumbled_model = self
         | 
| 63 63 | 
             
                    @enumbler_label_column_name ||= :label
         | 
| 64 64 |  | 
| 65 | 
            -
                     | 
| 65 | 
            +
                    raise_error_if_model_does_not_support_attributes(attributes)
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                    enumble = Enumble.new(enum, id, label: label, label_column_name: @enumbler_label_column_name, **attributes)
         | 
| 66 68 |  | 
| 67 69 | 
             
                    if @enumbles.include?(enumble)
         | 
| 68 70 | 
             
                      raise Error, "You cannot add the same Enumble twice! Attempted to add: #{enum}, #{id}."
         | 
| @@ -310,6 +312,17 @@ module Enumbler | |
| 310 312 | 
             
                      raise Enumbler::Error, "The attribute #{attr} is not supported on this Enumble."
         | 
| 311 313 | 
             
                    end
         | 
| 312 314 | 
             
                  end
         | 
| 315 | 
            +
             | 
| 316 | 
            +
                  def raise_error_if_model_does_not_support_attributes(attributes)
         | 
| 317 | 
            +
                    return if attributes.blank?
         | 
| 318 | 
            +
             | 
| 319 | 
            +
                    unsupported_attrs = attributes.reject { |key, _value| has_attribute?(key) }
         | 
| 320 | 
            +
             | 
| 321 | 
            +
                    return if unsupported_attrs.blank?
         | 
| 322 | 
            +
             | 
| 323 | 
            +
                    raise Enumbler::Error,
         | 
| 324 | 
            +
                      "The model #{self} does not support the attribute(s): #{unsupported_attrs.keys.map(&:to_s).to_sentence}"
         | 
| 325 | 
            +
                  end
         | 
| 313 326 | 
             
                end
         | 
| 314 327 | 
             
              end
         | 
| 315 328 | 
             
            end
         | 
    
        data/lib/enumbler/enumble.rb
    CHANGED
    
    | @@ -2,18 +2,15 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            module Enumbler
         | 
| 4 4 | 
             
              # Class that holds each row of Enumble data.
         | 
| 5 | 
            -
              #
         | 
| 6 | 
            -
              # @todo We need to support additional options/attributes beyond the id/label
         | 
| 7 | 
            -
              #   pairs.  Is on the backburner for a moment.
         | 
| 8 5 | 
             
              class Enumble
         | 
| 9 | 
            -
                attr_reader :id, :enum, :label, :label_column_name | 
| 6 | 
            +
                attr_reader :id, :enum, :label, :label_column_name
         | 
| 10 7 |  | 
| 11 | 
            -
                def initialize(enum, id, label: nil, label_column_name: :label, ** | 
| 8 | 
            +
                def initialize(enum, id, label: nil, label_column_name: :label, **attributes)
         | 
| 12 9 | 
             
                  @id = id
         | 
| 13 10 | 
             
                  @enum = enum
         | 
| 14 11 | 
             
                  @label = label || enum.to_s.dasherize
         | 
| 15 12 | 
             
                  @label_column_name = label_column_name
         | 
| 16 | 
            -
                  @ | 
| 13 | 
            +
                  @additional_attributes = attributes || {}
         | 
| 17 14 | 
             
                end
         | 
| 18 15 |  | 
| 19 16 | 
             
                def ==(other)
         | 
| @@ -22,10 +19,10 @@ module Enumbler | |
| 22 19 | 
             
                end
         | 
| 23 20 |  | 
| 24 21 | 
             
                def attributes
         | 
| 25 | 
            -
                  {
         | 
| 22 | 
            +
                  @additional_attributes.merge({
         | 
| 26 23 | 
             
                    id: id,
         | 
| 27 24 | 
             
                    label_column_name => label,
         | 
| 28 | 
            -
                  }
         | 
| 25 | 
            +
                  })
         | 
| 29 26 | 
             
                end
         | 
| 30 27 |  | 
| 31 28 | 
             
                # Used to return itself from a class method.
         | 
    
        data/lib/enumbler/version.rb
    CHANGED