ruby-rails-extensions 1.1.1 → 2.0.0
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/CHANGELOG.md +8 -0
- data/lib/ruby-rails-extensions/extensions/all_keys.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/all_values.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/any_key.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/any_value.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/assign_nil.rb +51 -56
- data/lib/ruby-rails-extensions/extensions/clean_string.rb +22 -30
- data/lib/ruby-rails-extensions/extensions/compact_blank_join.rb +6 -8
- data/lib/ruby-rails-extensions/extensions/compact_map.rb +11 -15
- data/lib/ruby-rails-extensions/extensions/current_day.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/current_month.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/current_week.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/day_of_week.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/display_military.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/display_user.rb +9 -15
- data/lib/ruby-rails-extensions/extensions/find_bang.rb +7 -11
- data/lib/ruby-rails-extensions/extensions/find_dupes.rb +8 -10
- data/lib/ruby-rails-extensions/extensions/first_dupe.rb +4 -6
- data/lib/ruby-rails-extensions/extensions/google_format.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/hash_only.rb +16 -20
- data/lib/ruby-rails-extensions/extensions/humanize_symbol.rb +2 -4
- data/lib/ruby-rails-extensions/extensions/in_utc.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/input.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/month_and_year.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/month_year.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/no_keys.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/no_values.rb +3 -5
- data/lib/ruby-rails-extensions/extensions/only_some.rb +16 -18
- data/lib/ruby-rails-extensions/extensions/overlaps.rb +5 -9
- data/lib/ruby-rails-extensions/extensions/pipe.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/presence_bang.rb +9 -11
- data/lib/ruby-rails-extensions/extensions/quarter_dates.rb +28 -34
- data/lib/ruby-rails-extensions/extensions/range_add.rb +36 -38
- data/lib/ruby-rails-extensions/extensions/range_multiply.rb +36 -38
- data/lib/ruby-rails-extensions/extensions/remove_reserved_keywords.rb +18 -20
- data/lib/ruby-rails-extensions/extensions/safe_parse.rb +15 -21
- data/lib/ruby-rails-extensions/extensions/select_present.rb +2 -6
- data/lib/ruby-rails-extensions/extensions/select_present_join.rb +1 -3
- data/lib/ruby-rails-extensions/extensions/set_to_sentence.rb +2 -4
- data/lib/ruby-rails-extensions/extensions/to_bool.rb +14 -24
- data/lib/ruby-rails-extensions/extensions/to_dec.rb +9 -15
- data/lib/ruby-rails-extensions/extensions/to_i.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/to_local.rb +8 -12
- data/lib/ruby-rails-extensions/extensions/to_negative_i.rb +22 -28
- data/lib/ruby-rails-extensions/extensions/to_nonzero_i.rb +22 -28
- data/lib/ruby-rails-extensions/extensions/to_or_sentence.rb +5 -9
- data/lib/ruby-rails-extensions/extensions/to_positive_i.rb +22 -28
- data/lib/ruby-rails-extensions/extensions/to_sort_i.rb +5 -11
- data/lib/ruby-rails-extensions/extensions/to_x.rb +9 -15
- data/lib/ruby-rails-extensions/extensions/todays_date.rb +9 -12
- data/lib/ruby-rails-extensions/extensions/uniq_map.rb +13 -15
- data/lib/ruby-rails-extensions/extensions/usd_to_f.rb +9 -15
- data/lib/ruby-rails-extensions/extensions/usd_to_i.rb +6 -10
- data/lib/ruby-rails-extensions/extensions/weighted_sum.rb +16 -18
- data/lib/ruby-rails-extensions/extensions/yesno.rb +9 -15
- data/lib/ruby-rails-extensions/extensions/zero_range.rb +14 -16
- data/lib/ruby-rails-extensions/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 55be0ba360ddc75f362e31c5e4dd863f6816b897e3fb722db748698a379e586f
         | 
| 4 | 
            +
              data.tar.gz: 879cdcb54384e5927bacbad99714f54c2d737a86f55aac79d4f97d83de658b59
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 868b8f77e7e7ec4d974ac7af0e0f07352362d009ff1ab748868965a072f4c7cafd1ea9ec44ec30a6828f19a7d59a9ec1b4bafd7272a25fde053f7d442809f6ca
         | 
| 7 | 
            +
              data.tar.gz: 43d272c9b3bc33ccceef003fc3f4e8be1bb3dd6ec83dd6b42879186e7c52dab68c57b0cfa8b6fe5a5660e756a06c0b2110fab411bed6d1e239b5866c8a310a58
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,6 +1,14 @@ | |
| 1 1 | 
             
            Unreleased Changes
         | 
| 2 2 | 
             
            ------------------
         | 
| 3 3 |  | 
| 4 | 
            +
            2.0.0 (2024-07-26)
         | 
| 5 | 
            +
            ------------------
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Possible breaking change:
         | 
| 8 | 
            +
              * The check for `method_defined?` was removed because the whole point of this gem is to define the methonds in that
         | 
| 9 | 
            +
                block. This means there are some things assumed the developer using this gem already has, from this gem or rails,
         | 
| 10 | 
            +
                e.g. `Enumerable#compact_blank_join` relies on `Enumerable#compact_blank`
         | 
| 11 | 
            +
             | 
| 4 12 | 
             
            1.1.1 (2024-03-01)
         | 
| 5 13 | 
             
            ------------------
         | 
| 6 14 |  | 
| @@ -1,67 +1,62 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
                      end
         | 
| 3 | 
            +
            # requires `ActiveModel::AttributeAssignment` and `Hash#stringify_keys`
         | 
| 4 | 
            +
            module ActiveModel
         | 
| 5 | 
            +
              module AttributeAssignment
         | 
| 6 | 
            +
                # Allows you to set nil attributes by passing in a hash of attributes with
         | 
| 7 | 
            +
                # keys matching the attribute names.
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                # @raise [ActiveModel::ForbiddenAttributesError] If the passed hash responds to `permitted?` method
         | 
| 10 | 
            +
                #   and the return value of this method is +false+.
         | 
| 11 | 
            +
                #
         | 
| 12 | 
            +
                # @example
         | 
| 13 | 
            +
                #
         | 
| 14 | 
            +
                #   class Cat
         | 
| 15 | 
            +
                #     include ActiveModel::AttributeAssignment
         | 
| 16 | 
            +
                #     attr_accessor :name, :status
         | 
| 17 | 
            +
                #   end
         | 
| 18 | 
            +
                #
         | 
| 19 | 
            +
                #   cat = Cat.new
         | 
| 20 | 
            +
                #   cat.assign_nil_attributes(name: "Gorby")
         | 
| 21 | 
            +
                #   cat.name # => 'Gorby'
         | 
| 22 | 
            +
                #   cat.status # => nil
         | 
| 23 | 
            +
                #   cat.assign_nil_attributes(status: "yawning")
         | 
| 24 | 
            +
                #   cat.name # => 'Gorby'
         | 
| 25 | 
            +
                #   cat.status # => 'yawning'
         | 
| 26 | 
            +
                #   cat.assign_nil_attributes(status: "sleeping")
         | 
| 27 | 
            +
                #   cat.name # => 'Gorby'
         | 
| 28 | 
            +
                #   cat.status # => 'yawning'
         | 
| 29 | 
            +
                #
         | 
| 30 | 
            +
                # @param new_attributes
         | 
| 31 | 
            +
                #
         | 
| 32 | 
            +
                # @return [void]
         | 
| 33 | 
            +
                #
         | 
| 34 | 
            +
                def assign_nil_attributes(new_attributes)
         | 
| 35 | 
            +
                  unless new_attributes.respond_to?(:stringify_keys)
         | 
| 36 | 
            +
                    raise(ArgumentError, 'When assigning attributes, you must pass a hash as an argument.')
         | 
| 37 | 
            +
                  end
         | 
| 39 38 |  | 
| 40 | 
            -
             | 
| 39 | 
            +
                  return if new_attributes.empty?
         | 
| 41 40 |  | 
| 42 | 
            -
             | 
| 41 | 
            +
                  attributes = new_attributes.stringify_keys
         | 
| 43 42 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
                  end
         | 
| 43 | 
            +
                  _assign_nil_attributes(sanitize_for_mass_assignment(attributes))
         | 
| 44 | 
            +
                end
         | 
| 47 45 |  | 
| 48 | 
            -
             | 
| 46 | 
            +
                private
         | 
| 49 47 |  | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
                          next unless v.nil?
         | 
| 48 | 
            +
                  # Assign any `nil` attribute
         | 
| 49 | 
            +
                  #
         | 
| 50 | 
            +
                  # @param attributes [Hash]
         | 
| 51 | 
            +
                  #
         | 
| 52 | 
            +
                  # @return [void]
         | 
| 53 | 
            +
                  #
         | 
| 54 | 
            +
                  def _assign_nil_attributes(attributes)
         | 
| 55 | 
            +
                    attributes.each do |k, v|
         | 
| 56 | 
            +
                      next unless v.nil?
         | 
| 60 57 |  | 
| 61 | 
            -
             | 
| 62 | 
            -
                        end
         | 
| 63 | 
            -
                      end
         | 
| 58 | 
            +
                      _assign_attribute(k, v)
         | 
| 64 59 | 
             
                    end
         | 
| 65 | 
            -
             | 
| 60 | 
            +
                  end
         | 
| 66 61 | 
             
              end
         | 
| 67 62 | 
             
            end
         | 
| @@ -1,41 +1,33 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            String.class_eval do
         | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
                 | 
| 12 | 
            -
                  replace(encode('UTF-8', invalid: :replace, undef: :replace, replace: replace_with))
         | 
| 13 | 
            -
                end
         | 
| 4 | 
            +
              # Remove all non-UTF-8 chars from a string.
         | 
| 5 | 
            +
              #
         | 
| 6 | 
            +
              # @param replace_with [String, nil] What to replace invalid chars with.
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # @return [String]
         | 
| 9 | 
            +
              #
         | 
| 10 | 
            +
              def clean!(replace_with = '')
         | 
| 11 | 
            +
                replace(encode('UTF-8', invalid: :replace, undef: :replace, replace: replace_with))
         | 
| 14 12 | 
             
              end
         | 
| 15 13 |  | 
| 16 | 
            -
               | 
| 17 | 
            -
             | 
| 18 | 
            -
                 | 
| 19 | 
            -
                  dup.clean!(replace_with)
         | 
| 20 | 
            -
                end
         | 
| 14 | 
            +
              # @see {#clean!}
         | 
| 15 | 
            +
              def clean(replace_with = '')
         | 
| 16 | 
            +
                dup.clean!(replace_with)
         | 
| 21 17 | 
             
              end
         | 
| 22 18 |  | 
| 23 | 
            -
               | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
                 | 
| 31 | 
            -
                  replace(encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: replace_with))
         | 
| 32 | 
            -
                end
         | 
| 19 | 
            +
              # Remove all non-UTF-8 chars from a string and convert to binary.
         | 
| 20 | 
            +
              #
         | 
| 21 | 
            +
              # @param replace_with [String, nil] What to replace invalid chars with.
         | 
| 22 | 
            +
              #
         | 
| 23 | 
            +
              # @return [String]
         | 
| 24 | 
            +
              #
         | 
| 25 | 
            +
              def clean_binary!(replace_with = '')
         | 
| 26 | 
            +
                replace(encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: replace_with))
         | 
| 33 27 | 
             
              end
         | 
| 34 28 |  | 
| 35 | 
            -
               | 
| 36 | 
            -
             | 
| 37 | 
            -
                 | 
| 38 | 
            -
                  dup.clean_binary!(replace_with)
         | 
| 39 | 
            -
                end
         | 
| 29 | 
            +
              # @see {#clean_binary!}
         | 
| 30 | 
            +
              def clean_binary(replace_with = '')
         | 
| 31 | 
            +
                dup.clean_binary!(replace_with)
         | 
| 40 32 | 
             
              end
         | 
| 41 33 | 
             
            end
         | 
| @@ -1,13 +1,11 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            Enumerable.class_eval do
         | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                 | 
| 10 | 
            -
                  compact_blank.join(using)
         | 
| 11 | 
            -
                end
         | 
| 4 | 
            +
              # Joins the elements together after calling `compact_blank`
         | 
| 5 | 
            +
              #
         | 
| 6 | 
            +
              # @return [String]
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              def compact_blank_join(using = '')
         | 
| 9 | 
            +
                compact_blank.join(using)
         | 
| 12 10 | 
             
              end
         | 
| 13 11 | 
             
            end
         | 
| @@ -4,26 +4,22 @@ require 'forwardable' | |
| 4 4 | 
             
            require 'set'
         | 
| 5 5 |  | 
| 6 6 | 
             
            Array.class_eval do
         | 
| 7 | 
            -
               | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
                 | 
| 11 | 
            -
                  return to_enum(:compact_map) unless block_given?
         | 
| 7 | 
            +
              # @return [Array]
         | 
| 8 | 
            +
              # Similar to `filter_map` but excludes `nil` instead of falsy
         | 
| 9 | 
            +
              def compact_map
         | 
| 10 | 
            +
                return to_enum(:compact_map) unless block_given?
         | 
| 12 11 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
                  r
         | 
| 12 | 
            +
                r = []
         | 
| 13 | 
            +
                each do |*args|
         | 
| 14 | 
            +
                  result = yield(*args)
         | 
| 15 | 
            +
                  r.push(result) unless result.nil?
         | 
| 19 16 | 
             
                end
         | 
| 17 | 
            +
                r
         | 
| 20 18 | 
             
              end
         | 
| 21 19 | 
             
            end
         | 
| 22 20 |  | 
| 23 21 | 
             
            Set.class_eval do
         | 
| 24 | 
            -
               | 
| 25 | 
            -
                extend Forwardable
         | 
| 22 | 
            +
              extend Forwardable
         | 
| 26 23 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
              end
         | 
| 24 | 
            +
              def_delegators :to_a, :compact_map
         | 
| 29 25 | 
             
            end
         | 
| @@ -3,19 +3,15 @@ | |
| 3 3 | 
             
            require 'date'
         | 
| 4 4 |  | 
| 5 5 | 
             
            DateTime.class_eval do
         | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
                 | 
| 9 | 
            -
                  beginning_of_month..end_of_month
         | 
| 10 | 
            -
                end
         | 
| 6 | 
            +
              # :nodoc:
         | 
| 7 | 
            +
              def current_month
         | 
| 8 | 
            +
                beginning_of_month..end_of_month
         | 
| 11 9 | 
             
              end
         | 
| 12 10 | 
             
            end
         | 
| 13 11 |  | 
| 14 12 | 
             
            Date.class_eval do
         | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
                  beginning_of_month..end_of_month
         | 
| 19 | 
            -
                end
         | 
| 13 | 
            +
              # :nodoc:
         | 
| 14 | 
            +
              def current_month
         | 
| 15 | 
            +
                beginning_of_month..end_of_month
         | 
| 20 16 | 
             
              end
         | 
| 21 17 | 
             
            end
         | 
| @@ -3,19 +3,15 @@ | |
| 3 3 | 
             
            require 'date'
         | 
| 4 4 |  | 
| 5 5 | 
             
            DateTime.class_eval do
         | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
                 | 
| 9 | 
            -
                  beginning_of_week..end_of_week
         | 
| 10 | 
            -
                end
         | 
| 6 | 
            +
              # @return Range<DateTime>
         | 
| 7 | 
            +
              def current_week
         | 
| 8 | 
            +
                beginning_of_week..end_of_week
         | 
| 11 9 | 
             
              end
         | 
| 12 10 | 
             
            end
         | 
| 13 11 |  | 
| 14 12 | 
             
            Date.class_eval do
         | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
                  beginning_of_week..end_of_week
         | 
| 19 | 
            -
                end
         | 
| 13 | 
            +
              # @return Range<Date>
         | 
| 14 | 
            +
              def current_week
         | 
| 15 | 
            +
                beginning_of_week..end_of_week
         | 
| 20 16 | 
             
              end
         | 
| 21 17 | 
             
            end
         | 
| @@ -3,19 +3,15 @@ | |
| 3 3 | 
             
            require 'date'
         | 
| 4 4 |  | 
| 5 5 | 
             
            DateTime.class_eval do
         | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
                 | 
| 9 | 
            -
                  strftime('%A')
         | 
| 10 | 
            -
                end
         | 
| 6 | 
            +
              # @return [String] - Full day word
         | 
| 7 | 
            +
              def day_of_week
         | 
| 8 | 
            +
                strftime('%A')
         | 
| 11 9 | 
             
              end
         | 
| 12 10 | 
             
            end
         | 
| 13 11 |  | 
| 14 12 | 
             
            Date.class_eval do
         | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
                  strftime('%A')
         | 
| 19 | 
            -
                end
         | 
| 13 | 
            +
              # @return [String] - Full day word
         | 
| 14 | 
            +
              def day_of_week
         | 
| 15 | 
            +
                strftime('%A')
         | 
| 20 16 | 
             
              end
         | 
| 21 17 | 
             
            end
         | 
| @@ -3,19 +3,15 @@ | |
| 3 3 | 
             
            require 'date'
         | 
| 4 4 |  | 
| 5 5 | 
             
            DateTime.class_eval do
         | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
                 | 
| 9 | 
            -
                  strftime(all ? '%m/%d/%Y %T' : '%-m/%-d/%y %T')
         | 
| 10 | 
            -
                end
         | 
| 6 | 
            +
              # @return [String]
         | 
| 7 | 
            +
              def display_military(all = false)
         | 
| 8 | 
            +
                strftime(all ? '%m/%d/%Y %T' : '%-m/%-d/%y %T')
         | 
| 11 9 | 
             
              end
         | 
| 12 10 | 
             
            end
         | 
| 13 11 |  | 
| 14 12 | 
             
            Time.class_eval do
         | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
                  to_datetime.display_military(all)
         | 
| 19 | 
            -
                end
         | 
| 13 | 
            +
              # @return [String]
         | 
| 14 | 
            +
              def display_military(all = false)
         | 
| 15 | 
            +
                to_datetime.display_military(all)
         | 
| 20 16 | 
             
              end
         | 
| 21 17 | 
             
            end
         | 
| @@ -3,28 +3,22 @@ | |
| 3 3 | 
             
            require 'date'
         | 
| 4 4 |  | 
| 5 5 | 
             
            DateTime.class_eval do
         | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
                 | 
| 9 | 
            -
                  strftime(all ? '%m/%d/%Y %r' : '%-m/%-d/%y %r')
         | 
| 10 | 
            -
                end
         | 
| 6 | 
            +
              # @return [String] - mm/dd/yyyy HH:MM:SS AM/PM or m/d/yy HH:MM:SS AM/PM
         | 
| 7 | 
            +
              def display_user(all = false)
         | 
| 8 | 
            +
                strftime(all ? '%m/%d/%Y %r' : '%-m/%-d/%y %r')
         | 
| 11 9 | 
             
              end
         | 
| 12 10 | 
             
            end
         | 
| 13 11 |  | 
| 14 12 | 
             
            Time.class_eval do
         | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 17 | 
            -
                 | 
| 18 | 
            -
                  to_datetime.display_user(all)
         | 
| 19 | 
            -
                end
         | 
| 13 | 
            +
              # @return [String] - mm/dd/yyyy or m/d/yy
         | 
| 14 | 
            +
              def display_user(all = false)
         | 
| 15 | 
            +
                to_datetime.display_user(all)
         | 
| 20 16 | 
             
              end
         | 
| 21 17 | 
             
            end
         | 
| 22 18 |  | 
| 23 19 | 
             
            Date.class_eval do
         | 
| 24 | 
            -
               | 
| 25 | 
            -
             | 
| 26 | 
            -
                 | 
| 27 | 
            -
                  strftime(all ? '%m/%d/%Y' : '%-m/%-d/%y')
         | 
| 28 | 
            -
                end
         | 
| 20 | 
            +
              # @return [String] - mm/dd/yyyy or m/d/yy
         | 
| 21 | 
            +
              def display_user(all = false)
         | 
| 22 | 
            +
                strftime(all ? '%m/%d/%Y' : '%-m/%-d/%y')
         | 
| 29 23 | 
             
              end
         | 
| 30 24 | 
             
            end
         | 
| @@ -4,21 +4,17 @@ require 'forwardable' | |
| 4 4 | 
             
            require 'set'
         | 
| 5 5 |  | 
| 6 6 | 
             
            Array.class_eval do
         | 
| 7 | 
            -
               | 
| 8 | 
            -
             | 
| 9 | 
            -
                 | 
| 10 | 
            -
             | 
| 11 | 
            -
                  raise(RubyRailsExtensions::Errors::NotFoundError, 'Not found') if x.nil?
         | 
| 7 | 
            +
              # :nodoc:
         | 
| 8 | 
            +
              def find!(&block)
         | 
| 9 | 
            +
                x = find(&block)
         | 
| 10 | 
            +
                raise(RubyRailsExtensions::Errors::NotFoundError, 'Not found') if x.nil?
         | 
| 12 11 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
                end
         | 
| 12 | 
            +
                x
         | 
| 15 13 | 
             
              end
         | 
| 16 14 | 
             
            end
         | 
| 17 15 |  | 
| 18 16 | 
             
            Set.class_eval do
         | 
| 19 | 
            -
               | 
| 20 | 
            -
                extend Forwardable
         | 
| 17 | 
            +
              extend Forwardable
         | 
| 21 18 |  | 
| 22 | 
            -
             | 
| 23 | 
            -
              end
         | 
| 19 | 
            +
              def_delegators :to_a, :find!
         | 
| 24 20 | 
             
            end
         | 
| @@ -1,16 +1,14 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            Array.class_eval do
         | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
                 | 
| 10 | 
            -
             | 
| 11 | 
            -
                  results.uniq!
         | 
| 4 | 
            +
              # @param threshold [Integer] default 1
         | 
| 5 | 
            +
              #
         | 
| 6 | 
            +
              # @return [Array] excluding items that appear more than `threshold` times
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              def find_dupes(threshold = 1)
         | 
| 9 | 
            +
                results = select { |item| count(item) > threshold }
         | 
| 10 | 
            +
                results.uniq!
         | 
| 12 11 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
                end
         | 
| 12 | 
            +
                results
         | 
| 15 13 | 
             
              end
         | 
| 16 14 | 
             
            end
         | 
| @@ -1,11 +1,9 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            Array.class_eval do
         | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
                 | 
| 8 | 
            -
                  find { |item| count(item) > threshold }
         | 
| 9 | 
            -
                end
         | 
| 4 | 
            +
              # @param threshold [Integer] default 1
         | 
| 5 | 
            +
              # @return [*] first items that appears more than `threshold` times
         | 
| 6 | 
            +
              def first_dupe(threshold = 1)
         | 
| 7 | 
            +
                find { |item| count(item) > threshold }
         | 
| 10 8 | 
             
              end
         | 
| 11 9 | 
             
            end
         | 
| @@ -3,10 +3,8 @@ | |
| 3 3 | 
             
            require 'date'
         | 
| 4 4 |  | 
| 5 5 | 
             
            DateTime.class_eval do
         | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
                 | 
| 9 | 
            -
                  strftime('%FT%T%z')
         | 
| 10 | 
            -
                end
         | 
| 6 | 
            +
              # @return [String] yyyy-mm-ddThh:mm:ss+hhmm
         | 
| 7 | 
            +
              def google_format
         | 
| 8 | 
            +
                strftime('%FT%T%z')
         | 
| 11 9 | 
             
              end
         | 
| 12 10 | 
             
            end
         | 
| @@ -1,27 +1,23 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            Hash.class_eval do
         | 
| 4 | 
            -
               | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
                 | 
| 14 | 
            -
                  slice(*keys)
         | 
| 15 | 
            -
                end
         | 
| 4 | 
            +
              # The opposite of +Hash.except+.
         | 
| 5 | 
            +
              # ~/.rvm/gems/ruby-2.1.2/gems/activesupport-4.2.5/lib/active_support/core_ext/hash/except.rb
         | 
| 6 | 
            +
              # https://apidock.com/rails/Hash/except
         | 
| 7 | 
            +
              #
         | 
| 8 | 
            +
              # Selects only the supplied keys.
         | 
| 9 | 
            +
              #
         | 
| 10 | 
            +
              # http://api.rubyonrails.org/classes/Hash.html#method-i-slice
         | 
| 11 | 
            +
              #
         | 
| 12 | 
            +
              def only(*keys)
         | 
| 13 | 
            +
                slice(*keys)
         | 
| 16 14 | 
             
              end
         | 
| 17 15 |  | 
| 18 | 
            -
               | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
                 | 
| 24 | 
            -
                  slice!(*keys)
         | 
| 25 | 
            -
                end
         | 
| 16 | 
            +
              # See +only+
         | 
| 17 | 
            +
              #
         | 
| 18 | 
            +
              # http://apidock.com/rails/v4.1.8/Hash/extract%21
         | 
| 19 | 
            +
              #
         | 
| 20 | 
            +
              def only!(*keys)
         | 
| 21 | 
            +
                slice!(*keys)
         | 
| 26 22 | 
             
              end
         | 
| 27 23 | 
             
            end
         |