dm_ruby_extensions 1.0.9 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: faf35d14eb0e9a4fd037b1e3b3aed616141a0cb4
4
- data.tar.gz: 3419c2d7b07edcc1dcf0c5c5a3bcd0abb1d6a4c7
2
+ SHA256:
3
+ metadata.gz: a52656d8cd06524cb3619c98f8ee54221bbe7099bd8583ac3f6635a3fca73ad1
4
+ data.tar.gz: 8563dfd8ae1a2d76e5d07fbc6d4b09ce84f01f0970de0344ed6da46bb69f3819
5
5
  SHA512:
6
- metadata.gz: ff6026e4c21a2adc2238854c7ac1623bd6d8931ff9ecbab07bb7b4b535b28885bca80f568b1d2445f313c3ec29a3a46cce147f85143db802b274f0b02eddd54c
7
- data.tar.gz: b2ff730e615af076f516718e68ad5f6f2a08467f327146c7b446c6e76c99be09b7652c79162c13df645463d735bcddf070727d115aa6f71ca3984beca6f6f230
6
+ metadata.gz: 58dc5a359f374ca974e993472c29ea2649a0855856f03335bd276f5aed0bedb490dee6ea34309e714cbdbce9253c54fdb5ca5c02fa3115b0acf64d681b689b83
7
+ data.tar.gz: 7e9f70201a41ac2f623214e27af7cd1549984174e4f5bea5e578a8f8898a18f931a546799293feba8449918402f77ac51ea4f2e5ca100f3124fb3d5499f862dd
@@ -0,0 +1,41 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ jobs:
7
+ rspec:
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ os:
12
+ - ubuntu-latest
13
+ - macos-latest
14
+ ruby-version: [3.0, 3.1, 3.2, 'ruby-head']
15
+
16
+ runs-on: ${{ matrix.os }}
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - name: Set up Ruby ${{ matrix.ruby-version }}
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby-version }}
25
+ bundler-cache: true # 'bundle install' and cache
26
+
27
+ - name: Run ${{ matrix.os }} tests
28
+ run: bundle install
29
+ run: bundle exec rspec
30
+
31
+ rubocop:
32
+ runs-on: ubuntu-latest
33
+
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+
37
+ - name: Set up Ruby ${{ matrix.ruby-version }}
38
+ uses: ruby/setup-ruby@v1
39
+ - name: Run rubocop
40
+ run: bundle install
41
+ run: bundle exec rubocop
data/.gitignore CHANGED
@@ -15,6 +15,3 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
-
19
- /.ruby-version
20
- /.ruby-gemset
data/.rubocop.yml ADDED
@@ -0,0 +1,26 @@
1
+ AllCops:
2
+ Exclude:
3
+ - '**/tmp/**/*'
4
+ CacheRootDirectory: tmp
5
+ UseCache: false
6
+
7
+ Metrics/BlockLength:
8
+ Enabled: false
9
+
10
+ Metrics/MethodLength:
11
+ Enabled: false
12
+
13
+ Metrics/AbcSize:
14
+ Enabled: false
15
+
16
+ Metrics/CyclomaticComplexity:
17
+ Enabled: false
18
+
19
+ Metrics/ClassLength:
20
+ Enabled: false
21
+
22
+ Metrics/PerceivedComplexity:
23
+ Enabled: false
24
+
25
+ Style/Documentation:
26
+ Enabled: false
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.2.2
data/Gemfile CHANGED
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
4
6
 
5
- gem 'rake'
6
7
  gem 'pry-byebug'
8
+ gem 'rake'
7
9
  gem 'rspec'
10
+ gem 'rubocop', '~> 1.36'
11
+ gem 'rubocop-rspec', '~> 2.13'
data/README.md CHANGED
@@ -3,7 +3,9 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/dm_ruby_extensions.svg)](http://badge.fury.io/rb/dm_ruby_extensions)
4
4
  [![Build Status](https://travis-ci.com/digitalmoksha/dm_ruby_extensions.svg?branch=master)](https://travis-ci.com/digitalmoksha/dm_ruby_extensions)
5
5
 
6
- Adds some simple convienence methods to some Ruby classes, for use in the digitalMoksha gems. Although some of these can be found in other libraries, this includes a small handful and removes the dependency on another large library.
6
+ Adds some simple convenience methods to some Ruby classes, for use in the digitalMoksha gems.
7
+ Although some of these can be found in other libraries, this includes a small handful and
8
+ removes the dependency on another large library.
7
9
 
8
10
  ## Installation
9
11
 
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new
5
7
 
6
- task :default => :spec
7
- task :test => :spec
8
+ task default: :spec
9
+ task test: :spec
data/bin/console ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'dm_ruby_extensions'
6
+ require 'irb'
7
+
8
+ puts <<~TEXT
9
+ -------------------
10
+ Example Usage:
11
+
12
+ '1'.as_boolean
13
+ (Date.today - 12.years).to_age
14
+ -------------------
15
+
16
+ TEXT
17
+
18
+ IRB.start(__FILE__)
@@ -1,21 +1,24 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'dm_ruby_extensions/version'
5
6
 
6
7
  Gem::Specification.new do |gem|
7
- gem.name = "dm_ruby_extensions"
8
+ gem.name = 'dm_ruby_extensions'
8
9
  gem.version = DmRubyExtensions::VERSION
9
- gem.authors = ["Brett Walker"]
10
- gem.email = ["github@digitalmoksha.com"]
11
- gem.description = %q{Ruby base class extensions}
12
- gem.summary = %q{Simple Ruby base class extensions}
13
- gem.homepage = "https://github.com/digitalmoksha/dm_ruby_extensions"
10
+ gem.authors = ['Brett Walker']
11
+ gem.email = ['github@digitalmoksha.com']
12
+ gem.description = 'Ruby base class extensions'
13
+ gem.summary = 'Simple Ruby base class extensions'
14
+ gem.homepage = 'https://github.com/digitalmoksha/dm_ruby_extensions'
14
15
  gem.licenses = ['MIT']
15
16
 
16
- gem.files = `git ls-files`.split($/)
17
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.require_paths = ["lib"]
19
-
20
- gem.add_dependency 'activesupport', '>= 4.0'
19
+ gem.require_paths = ['lib']
20
+
21
+ gem.required_ruby_version = '~> 3.0'
22
+
23
+ gem.add_dependency 'activesupport', '>= 6.0'
21
24
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #------------------------------------------------------------------------------
2
4
  class Array
3
-
4
- # Extract options from a set of arguments. Removes and returns the last element in the array if it's a hash, otherwise returns a blank hash.
5
+ # Extract options from a set of arguments. Removes and returns the last element
6
+ # in the array if it's a hash, otherwise returns a blank hash.
5
7
  #
6
8
  # def options(*args)
7
9
  # args.extract_options!
@@ -19,7 +21,7 @@ class Array
19
21
  # [0,5,7,8,11,16].closest_max(7) => 7
20
22
  #------------------------------------------------------------------------------
21
23
  def closest_max(value)
22
- self.select{|item| item <= value}.max
24
+ self.select { |item| item <= value }.max
23
25
  end
24
26
 
25
27
  # able to join safe and unsafe strings
@@ -27,7 +29,7 @@ class Array
27
29
  def xss_aware_join(delimiter = '')
28
30
  ''.html_safe.tap do |str|
29
31
  each_with_index do |element, i|
30
- str << delimiter if i > 0
32
+ str << delimiter if i.positive?
31
33
  str << element
32
34
  end
33
35
  end
@@ -38,8 +40,8 @@ class Array
38
40
  # is an empty string (rails tag methods will not include the
39
41
  # attribute if it is nil, which is desirable for cleaner html)
40
42
  #------------------------------------------------------------------------------
41
- def css_join(delimiter = '')
42
- str = self.flatten.delete_if {|x| x.nil? || x == ''}.join(' ')
43
+ def css_join(_delimiter = '')
44
+ str = flatten.delete_if { |x| x.nil? || x == '' }.join(' ')
43
45
  str == '' ? nil : str
44
46
  end
45
47
  end
@@ -1,23 +1,22 @@
1
- class Date
1
+ # frozen_string_literal: true
2
2
 
3
+ class Date
3
4
  # http://stackoverflow.com/questions/819263/get-persons-age-in-ruby
4
5
  #------------------------------------------------------------------------------
5
6
  def to_age
6
7
  now = Time.now.utc.to_date
7
- now.year - self.year - ((now.month > self.month || (now.month == self.month && now.day >= self.day)) ? 0 : 1)
8
+ now.year - year - (now.month > month || (now.month == month && now.day >= day) ? 0 : 1)
8
9
  end
9
-
10
+
10
11
  #------------------------------------------------------------------------------
11
12
  def localize(options = {})
12
- options = {:format => options} if options.class == String
13
- I18n.localize(self, options)
13
+ options = { format: options } if options.instance_of?(String)
14
+ I18n.localize(self, **options)
14
15
  end
15
16
 
16
17
  # Create a unique sortable index for this date
17
18
  #------------------------------------------------------------------------------
18
19
  def to_index
19
- yday + (year-2000) * 1000
20
+ yday + (year - 2000) * 1000
20
21
  end
21
-
22
22
  end
23
-
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #------------------------------------------------------------------------------
2
4
  class DateTime
3
-
4
5
  #------------------------------------------------------------------------------
5
6
  def to_age
6
7
  (DateTime.now - self).to_i / 365
@@ -8,15 +9,13 @@ class DateTime
8
9
 
9
10
  #------------------------------------------------------------------------------
10
11
  def localize(options = {})
11
- options = {:format => options} if options.class == String
12
- I18n.localize(self, options)
12
+ options = { format: options } if options.instance_of?(String)
13
+ I18n.localize(self, **options)
13
14
  end
14
-
15
+
15
16
  # Create a unique sortable index for this date
16
17
  #------------------------------------------------------------------------------
17
18
  def to_index
18
- yday + (year-2000) * 1000
19
+ yday + (year - 2000) * 1000
19
20
  end
20
-
21
21
  end
22
-
@@ -1,8 +1,7 @@
1
- class FalseClass #:nodoc:
1
+ # frozen_string_literal: true
2
2
 
3
+ class FalseClass # :nodoc:
3
4
  def as_boolean
4
5
  false
5
6
  end
6
-
7
7
  end
8
-
@@ -1,30 +1,40 @@
1
+ # frozen_string_literal: true
2
+
1
3
  #------------------------------------------------------------------------------
2
4
  class Hash
3
-
4
- # takes a Hash (like the params hash), and converts the Rails date attributes
5
+ # takes a Hash (like the params hash), and converts the Rails date attributes
5
6
  # to a real Date object.
6
- # {'start_date(1i)' => 2012, 'start_date(2i)' => 11, 'start_date(3i)' => 23}.convert_date(:start_date)
7
+ # {'start_date(1i)' => 2012, 'start_date(2i)' => 11, 'start_date(3i)' => 23}.convert_date(:start_date)
7
8
  #------------------------------------------------------------------------------
8
9
  def convert_date(date_symbol_or_string)
9
10
  attribute = date_symbol_or_string.to_s
10
- return nil if self[attribute + '(1i)'].nil? || self[attribute + '(2i)'].nil? || self[attribute + '(3i)'].nil?
11
- return Date.new(self[attribute + '(1i)'].to_i, self[attribute + '(2i)'].to_i, self[attribute + '(3i)'].to_i)
11
+ return nil if self["#{attribute}(1i)"].nil? || self["#{attribute}(2i)"].nil? || self["#{attribute}(3i)"].nil?
12
+
13
+ Date.new(self["#{attribute}(1i)"].to_i, self["#{attribute}(2i)"].to_i, self["#{attribute}(3i)"].to_i)
12
14
  end
13
15
 
14
- # takes a Hash (like the params hash), and converts the Rails datetime attributes
16
+ # takes a Hash (like the params hash), and converts the Rails datetime attributes
15
17
  # to a real Date object.
16
18
  #------------------------------------------------------------------------------
17
19
  def convert_datetime(date_symbol_or_string)
18
20
  attribute = date_symbol_or_string.to_s
19
- return nil if self[attribute + '(1i)'].nil? || self[attribute + '(2i)'].nil? || self[attribute + '(3i)'].nil? || self[attribute + '(4i)'].nil? || self[attribute + '(5i)'].nil?
20
- return Time.local(self[attribute + '(1i)'].to_i, self[attribute + '(2i)'].to_i, self[attribute + '(3i)'].to_i, self[attribute + '(4i)'].to_i, self[attribute + '(5i)'].to_i)
21
+ if self["#{attribute}(1i)"].nil? || self["#{attribute}(2i)"].nil? ||
22
+ self["#{attribute}(3i)"].nil? || self["#{attribute}(4i)"].nil? ||
23
+ self["#{attribute}(5i)"].nil?
24
+ return nil
25
+ end
26
+
27
+ Time.local(self["#{attribute}(1i)"].to_i, self["#{attribute}(2i)"].to_i, self["#{attribute}(3i)"].to_i,
28
+ self["#{attribute}(4i)"].to_i, self["#{attribute}(5i)"].to_i)
21
29
  end
22
30
 
23
31
  # Convert hash of parameters to a query string
24
32
  #------------------------------------------------------------------------------
33
+ # rubocop:disable Style/OptionalBooleanParameter
25
34
  def url_query_string(leading_slash = true)
26
- (leading_slash ? "/?" : "?") << URI.escape(self.collect{|k,v| "#{k}=#{v}"}.join('&'))
35
+ "#{leading_slash ? '/?' : '?'}#{to_query}"
27
36
  end
37
+ # rubocop:enable Style/OptionalBooleanParameter
28
38
 
29
39
  # Borrowed from https://github.com/rubyworks/facets
30
40
  #------------------------------------------------------------------------------
@@ -42,7 +52,7 @@ class Hash
42
52
  # foo.rekey(:b=>:x) #=> { :a =>1, :x=>2 }
43
53
  # foo.rekey('foo'=>'bar') #=> { :a =>1, :b=>2 }
44
54
  #
45
- # If a block is given, converts all keys in the Hash accroding to the
55
+ # If a block is given, converts all keys in the Hash according to the
46
56
  # given block procedure.
47
57
  #
48
58
  # foo = { :name=>'Gavin', :wife=>:Lisa }
@@ -55,37 +65,36 @@ class Hash
55
65
  # Raises an ArgumentError if both a +key_map+ and a block are given.
56
66
  # If both are needed just call #rekey twice.
57
67
  #
58
- # TODO: If `nil` is returned by block should the key be set to `nil` or the orignal key?
68
+ # TODO: If `nil` is returned by block should the key be set to `nil` or the original key?
59
69
  #
60
70
  # CREDIT: Trans, Gavin Kistner
71
+ def rekey(key_map = nil, &block)
72
+ raise ArgumentError, 'argument or block' if key_map && block
61
73
 
62
- def rekey(key_map=nil, &block)
63
- raise ArgumentError, "argument or block" if key_map && block
64
-
65
- if !(key_map or block)
66
- block = lambda{|k| k.to_sym}
74
+ unless key_map || block
75
+ block = lambda { |k| k.to_sym } # rubocop:disable Style/SymbolProc, Style/Lambda
67
76
  end
68
77
 
69
78
  if block
70
79
  hash = dup.clear
71
80
  if block.arity.abs == 1
72
81
  each_pair do |k, v|
73
- hash[block[k]] = v #hash[block[k] || k] = v
82
+ hash[block[k]] = v # hash[block[k] || k] = v
74
83
  end
75
84
  else
76
85
  each_pair do |k, v|
77
- hash[block[k,v]] = v #hash[block[k,v] || k] = v
86
+ hash[block[k, v]] = v # hash[block[k,v] || k] = v
78
87
  end
79
88
  end
80
89
  else
81
- #hash = dup.clear # to keep default_proc
82
- #(keys - key_map.keys).each do |key|
83
- # hash[key] = self[key]
84
- #end
85
- #key_map.each do |from, to|
86
- # hash[to] = self[from] if key?(from)
87
- #end
88
- hash = dup # to keep default_proc
90
+ # hash = dup.clear # to keep default_proc
91
+ # (keys - key_map.keys).each do |key|
92
+ # hash[key] = self[key]
93
+ # end
94
+ # key_map.each do |from, to|
95
+ # hash[to] = self[from] if key?(from)
96
+ # end
97
+ hash = dup # to keep default_proc
89
98
  key_map.each_pair do |from, to|
90
99
  hash[to] = hash.delete(from) if hash.key?(from)
91
100
  end
@@ -102,8 +111,7 @@ class Hash
102
111
  #
103
112
  # CREDIT: Trans, Gavin Kistner
104
113
 
105
- def rekey!(key_map=nil, &block)
114
+ def rekey!(key_map = nil, &block)
106
115
  replace(rekey(key_map, &block))
107
116
  end
108
-
109
117
  end
@@ -1,16 +1,17 @@
1
- class Integer
1
+ # frozen_string_literal: true
2
2
 
3
+ class Integer
3
4
  # Factorial of number
4
5
  # 5.factorial == 5 x 4 x 3 x 2 x 1 == 120
5
6
  #------------------------------------------------------------------------------
6
7
  def factorial
7
- return 1 if self.zero?
8
+ return 1 if zero?
9
+
8
10
  (1..self).inject(:*)
9
11
  end
10
12
 
11
13
  #------------------------------------------------------------------------------
12
14
  def as_boolean
13
- (self > 0) ? true : false
15
+ positive? ? true : false
14
16
  end
15
-
16
17
  end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # If nil, then return a default string
2
4
  #------------------------------------------------------------------------------
3
- class NilClass #:nodoc:
4
-
5
+ class NilClass # :nodoc:
5
6
  #------------------------------------------------------------------------------
6
7
  def to_s_default(default_str = 'n/a')
7
8
  default_str
@@ -11,7 +12,7 @@ class NilClass #:nodoc:
11
12
  def as_boolean
12
13
  false
13
14
  end
14
-
15
+
15
16
  #------------------------------------------------------------------------------
16
17
  def to_age
17
18
  0
@@ -19,18 +20,17 @@ class NilClass #:nodoc:
19
20
 
20
21
  #------------------------------------------------------------------------------
21
22
  def sql_wildcard
22
- "%"
23
+ '%'
23
24
  end
24
-
25
+
25
26
  #------------------------------------------------------------------------------
26
27
  def utc
27
- ""
28
+ ''
28
29
  end
29
-
30
+
30
31
  # if nil + something, just return something
31
32
  #------------------------------------------------------------------------------
32
- def +(y)
33
- y
33
+ def +(other)
34
+ other
34
35
  end
35
-
36
- end
36
+ end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Numeric
2
4
  #------------------------------------------------------------------------------
3
- def percent_of(n, precision = 0)
4
- n == 0 ? 0 : (self.to_f / n.to_f * 100.0).round(precision)
5
+ def percent_of(num, precision = 0)
6
+ num.zero? ? 0 : (to_f / num * 100.0).round(precision)
5
7
  end
6
8
  end