string_foundation 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Gemfile +9 -9
  4. data/Gemfile.lock +19 -19
  5. data/{LICENSE.txt → LICENSE} +1 -1
  6. data/PULL_REQUEST_TEMPLATE.md +14 -0
  7. data/README.md +244 -104
  8. data/Rakefile +3 -3
  9. data/bin/console +1 -0
  10. data/coverage/assets/{0.10.0 → 0.10.2}/application.css +0 -0
  11. data/coverage/assets/{0.10.0 → 0.10.2}/application.js +0 -0
  12. data/coverage/assets/{0.10.0 → 0.10.2}/colorbox/border.png +0 -0
  13. data/coverage/assets/{0.10.0 → 0.10.2}/colorbox/controls.png +0 -0
  14. data/coverage/assets/{0.10.0 → 0.10.2}/colorbox/loading.gif +0 -0
  15. data/coverage/assets/{0.10.0 → 0.10.2}/colorbox/loading_background.png +0 -0
  16. data/coverage/assets/{0.10.0 → 0.10.2}/favicon_green.png +0 -0
  17. data/coverage/assets/{0.10.0 → 0.10.2}/favicon_red.png +0 -0
  18. data/coverage/assets/{0.10.0 → 0.10.2}/favicon_yellow.png +0 -0
  19. data/coverage/assets/{0.10.0 → 0.10.2}/loading.gif +0 -0
  20. data/coverage/assets/{0.10.0 → 0.10.2}/magnify.png +0 -0
  21. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  22. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  23. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  24. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  25. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  26. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  27. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  28. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  29. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-icons_222222_256x240.png +0 -0
  30. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  31. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-icons_454545_256x240.png +0 -0
  32. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-icons_888888_256x240.png +0 -0
  33. data/coverage/assets/{0.10.0 → 0.10.2}/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  34. data/coverage/index.html +5885 -3160
  35. data/lib/string_foundation.rb +4 -2
  36. data/lib/string_foundation/blank.rb +17 -0
  37. data/lib/string_foundation/case.rb +28 -38
  38. data/lib/string_foundation/convert.rb +9 -9
  39. data/lib/string_foundation/convertible.rb +4 -4
  40. data/lib/string_foundation/is.rb +13 -0
  41. data/lib/string_foundation/length.rb +56 -0
  42. data/lib/string_foundation/like.rb +4 -4
  43. data/lib/string_foundation/version.rb +2 -2
  44. data/lib/string_foundation/with.rb +7 -7
  45. data/pkg/string_foundation-1.1.0.gem +0 -0
  46. data/spec/spec_helper.rb +10 -10
  47. data/spec/string_foundation/blank_spec.rb +91 -0
  48. data/spec/string_foundation/case_spec.rb +398 -433
  49. data/spec/string_foundation/convert_spec.rb +98 -98
  50. data/spec/string_foundation/convertible_spec.rb +286 -0
  51. data/spec/string_foundation/is_spec.rb +62 -0
  52. data/spec/string_foundation/length_spec.rb +226 -0
  53. data/spec/string_foundation/like_spec.rb +103 -103
  54. data/spec/string_foundation/version_spec.rb +4 -4
  55. data/spec/string_foundation/with_spec.rb +48 -48
  56. data/spec/support/enhanced_matchers_extension.rb +1 -0
  57. data/string_foundation.gemspec +15 -14
  58. metadata +46 -37
  59. data/circle.yml +0 -14
  60. data/pkg/string_foundation-1.0.0.gem +0 -0
  61. data/spec/string_foundation/convertaile_spec.rb +0 -286
@@ -1,6 +1,8 @@
1
1
  # ==============================================================================
2
2
  # LIB - STRING FOUNDATION - STRING FOUNDATION
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
4
+ # ==============================================================================
5
5
  # Require methods.
6
- Dir.glob(File.join(File.dirname(__FILE__), 'string_foundation','*.rb')).each { |f| require f }
6
+ Dir.glob(File.join(File.dirname(__FILE__), "string_foundation", "*.rb")).each do |file|
7
+ require file
8
+ end
@@ -0,0 +1,17 @@
1
+ # ==============================================================================
2
+ # LIB - STRING FOUNDATION - BLANK
3
+ # frozen_string_literal: true
4
+ # ==============================================================================
5
+ class String
6
+
7
+ # Check whether a string is empty or only half-width spaces.
8
+ def blank?
9
+ self.empty? || /\A[[:space:]]*\z/.match(self).instance_of?(MatchData)
10
+ end
11
+
12
+ # Check whether a string is not empty or only half-width spaces.
13
+ def present?
14
+ !(self.blank?)
15
+ end
16
+
17
+ end
@@ -1,22 +1,21 @@
1
1
  # ==============================================================================
2
2
  # LIB - STRING FOUNDATION - CASE
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
4
+ # ==============================================================================
5
5
  class String
6
6
 
7
7
  # Convert to lowerCamelCase.
8
8
  def to_lcamel
9
9
  ucamel = self.to_ucamel
10
- ucamel.make_head_lower
10
+ ucamel.instance_eval { make_head_lower }
11
11
  end
12
12
 
13
13
  # Convert to UpperCamelCase.
14
14
  def to_ucamel
15
- self.split_camel.map do |cw|
16
- cw.split(/\.|_|-|\s/).map do |w|
17
- w.capitalize
18
- end.join
19
- end.join
15
+ split_camel.map do |cw|
16
+ cw.split(/\.|_|-|\s/).map { |w| w.capitalize }.join
17
+ end
18
+ .join
20
19
  end
21
20
 
22
21
  # Convert to lower_snake_case.
@@ -27,11 +26,10 @@ class String
27
26
 
28
27
  # Convert to Upper_Snake_Case.
29
28
  def to_usnake
30
- self.split_camel.map do |cw|
31
- cw.split(/\.|_|-|\s/).map do |w|
32
- w.capitalize
33
- end.join('_')
34
- end.join('_')
29
+ split_camel.map do |cw|
30
+ cw.split(/\.|_|-|\s/).map { |w| w.capitalize }.join("_")
31
+ end
32
+ .join("_")
35
33
  end
36
34
 
37
35
  # Convert to lower-kebab-case.
@@ -42,11 +40,10 @@ class String
42
40
 
43
41
  # Convert to Upper-Kebab-Case.
44
42
  def to_ukebab
45
- self.split_camel.map do |cw|
46
- cw.split(/\.|_|-|\s/).map do |w|
47
- w.capitalize
48
- end.join('-')
49
- end.join('-')
43
+ split_camel.map do |cw|
44
+ cw.split(/\.|_|-|\s/).map { |w| w.capitalize }.join("-")
45
+ end
46
+ .join("-")
50
47
  end
51
48
 
52
49
  # Convert to lower space case.
@@ -57,11 +54,10 @@ class String
57
54
 
58
55
  # Convert to Upper Space Case.
59
56
  def to_uspace
60
- self.split_camel.map do |cw|
61
- cw.split(/\.|_|-|\s/).map do |w|
62
- w.capitalize
63
- end.join(' ')
64
- end.join(' ')
57
+ split_camel.map do |cw|
58
+ cw.split(/\.|_|-|\s/).map { |w| w.capitalize }.join(" ")
59
+ end
60
+ .join(" ")
65
61
  end
66
62
 
67
63
  # Convert to lower.dot.case.
@@ -72,26 +68,20 @@ class String
72
68
 
73
69
  # Convert to Upper.Dot.Case.
74
70
  def to_udot
75
- self.split_camel.map do |cw|
76
- cw.split(/\.|_|-|\s/).map do |w|
77
- w.capitalize
78
- end.join('.')
79
- end.join('.')
71
+ split_camel.map do |cw|
72
+ cw.split(/\.|_|-|\s/).map { |w| w.capitalize }.join(".")
73
+ end
74
+ .join(".")
80
75
  end
81
76
 
77
+
78
+ # ----------------------------------------------------------------------------
79
+ # Private
80
+ # ----------------------------------------------------------------------------
81
+ private
82
82
  # Split string according to camel case.
83
83
  def split_camel
84
- self.split /(?=[A-Z])/
85
- end
86
-
87
- # Whether a character is uppder case or not.
88
- def is_upper?
89
- /[[:upper:]]/.match(self) ? true : false
90
- end
91
-
92
- # Whether a character is lower case or not.
93
- def is_lower?
94
- /[[:lower:]]/.match(self) ? true : false
84
+ self.split(/(?=[A-Z])/)
95
85
  end
96
86
 
97
87
  # Make first character lower case.
@@ -1,10 +1,10 @@
1
1
  # ==============================================================================
2
2
  # LIB - STRING FOUNDATION - CONVERT
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
5
- require_relative 'convertible'
6
- require_relative 'like'
7
- require_relative 'with'
4
+ # ==============================================================================
5
+ require_relative "convertible"
6
+ require_relative "like"
7
+ require_relative "with"
8
8
  class String
9
9
 
10
10
  # Convert to TrueClass or FalseClass.
@@ -13,7 +13,7 @@ class String
13
13
  raise TypeError.new("#{self} cannot be converted to TrueClass or FalseClass")
14
14
  end
15
15
 
16
- (self == 'true')
16
+ (self == "true")
17
17
  end
18
18
 
19
19
  # Convert a booly string to TrueClass or FalseClass.
@@ -22,7 +22,7 @@ class String
22
22
  raise TypeError.new("#{self} cannot be converted to TrueClass or FalseClass")
23
23
  end
24
24
 
25
- return true if self == 'true' || (self.to_f? && self.to_f > 0)
25
+ return true if self == "true" || (self.to_f? && self.to_f > 0)
26
26
  false
27
27
  end
28
28
 
@@ -30,20 +30,20 @@ class String
30
30
  def to_pretty
31
31
  return self.without_leading_zeros.to_i if self.like_i?
32
32
  return self.without_leading_zeros.to_f if self.like_f?
33
- return self.to_bool if self.to_bool?
33
+ return self.to_bool if self.to_bool?
34
34
 
35
35
  (self.length > 0) ? self : nil
36
36
  end
37
37
 
38
38
  # Convert from newline character to specific characters.
39
39
  def nl_to(char)
40
- char = '' if char.nil?
40
+ char = "" if char.nil?
41
41
  self.gsub(/(\r\n|\n)/, char)
42
42
  end
43
43
 
44
44
  # Convert from newline character to a HTML tag "<br>".
45
45
  def nl_to_br
46
- self.nl_to('<br>')
46
+ self.nl_to("<br>")
47
47
  end
48
48
 
49
49
  alias_method :nl2, :nl_to
@@ -1,8 +1,8 @@
1
1
  # ==============================================================================
2
2
  # LIB - STRING FOUNDATION - CONVERTIBLE
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
5
- require_relative 'with'
4
+ # ==============================================================================
5
+ require_relative "with"
6
6
  class String
7
7
 
8
8
  # Whether or not to be possible to covert String to Integer.
@@ -23,7 +23,7 @@ class String
23
23
 
24
24
  # Whether or not to be possible to covert String to Boolean.
25
25
  def to_bool?
26
- return true if %w(true false).include?(self)
26
+ return true if ["true", "false"].include?(self)
27
27
  false
28
28
  end
29
29
 
@@ -31,7 +31,7 @@ class String
31
31
  # like boolean types.
32
32
  def to_booly?
33
33
  return true if self.length == 0
34
- return true if %w(true false).include?(self)
34
+ return true if ["true", "false"].include?(self)
35
35
  return true if self.to_f?
36
36
 
37
37
  false
@@ -0,0 +1,13 @@
1
+ # ==============================================================================
2
+ # LIB - STRING FOUNDATION - IS
3
+ # frozen_string_literal: true
4
+ # ==============================================================================
5
+ class String
6
+
7
+ def is_sym?(symbol)
8
+ raise ArgumentError.new("argument must be Symbol") unless symbol.instance_of?(Symbol)
9
+
10
+ (self == symbol.to_s)
11
+ end
12
+
13
+ end
@@ -0,0 +1,56 @@
1
+ # ==============================================================================
2
+ # LIB - STRING FOUNDATION - LENGTH
3
+ # frozen_string_literal: true
4
+ # ==============================================================================
5
+ class String
6
+
7
+ # Check whether characters length is a specific number.
8
+ def length?(length)
9
+ unless [Integer, Range, Fixnum, Bignum].include?(length.class)
10
+ raise ArgumentError.new("argument must be Integer (including Fixnum or Bignum) or Range")
11
+ end
12
+
13
+ return (self.length == length) unless length.instance_of?(Range)
14
+ self.length.between?(length.first, length.last)
15
+ end
16
+
17
+ # Check whether characters length is less than a specific number.
18
+ def length_lt?(length)
19
+ self.instance_eval { allow_only_integer(length) }
20
+
21
+ (self.length < length)
22
+ end
23
+
24
+ # Check whether characters length is less than or equal to a specific number.
25
+ def length_lte?(length)
26
+ self.instance_eval { allow_only_integer(length) }
27
+
28
+ (self.length <= length)
29
+ end
30
+
31
+ # Check whether characters length is greater than a specific number.
32
+ def length_gt?(length)
33
+ self.instance_eval { allow_only_integer(length) }
34
+
35
+ (self.length > length)
36
+ end
37
+
38
+ # Check whether characters length is greater than or equal to a specific number.
39
+ def length_gte?(length)
40
+ self.instance_eval { allow_only_integer(length) }
41
+
42
+ (self.length >= length)
43
+ end
44
+
45
+
46
+ # ----------------------------------------------------------------------------
47
+ # Private
48
+ # ----------------------------------------------------------------------------
49
+ private
50
+ # Allow only Integer.
51
+ def allow_only_integer(argument)
52
+ return if [Integer, Fixnum, Bignum].include?(argument.class)
53
+ raise ArgumentError.new("argument must be Integer (including Fixnum or Bignum)")
54
+ end
55
+
56
+ end
@@ -1,8 +1,8 @@
1
1
  # ==============================================================================
2
2
  # LIB - STRING FOUNDATION - LIKE
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
5
- require_relative 'convertible'
4
+ # ==============================================================================
5
+ require_relative "convertible"
6
6
  class String
7
7
 
8
8
  # Check whether a string is an integral number.
@@ -10,7 +10,7 @@ class String
10
10
  return false unless self.to_i?
11
11
 
12
12
  num = self.without_leading_zeros
13
- (num.to_i == num.to_i) && !num.include?('.')
13
+ (num.to_i == num.to_i) && !num.include?(".")
14
14
  end
15
15
 
16
16
  # Check whether a string is a floating point number.
@@ -18,7 +18,7 @@ class String
18
18
  return false unless self.to_f?
19
19
 
20
20
  num = self.without_leading_zeros
21
- (num.to_i != num.to_f) || num.include?('.')
21
+ (num.to_i != num.to_f) || num.include?(".")
22
22
  end
23
23
 
24
24
  end
@@ -1,7 +1,7 @@
1
1
  # ==============================================================================
2
2
  # LIB - STRING FOUNDATION - VERSION
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
4
+ # ==============================================================================
5
5
  module StringFoundation
6
- VERSION = '1.0.0'
6
+ VERSION = "1.1.0"
7
7
  end
@@ -1,20 +1,20 @@
1
1
  # ==============================================================================
2
2
  # LIB - STRING FOUNDATION - WITH
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
4
+ # ==============================================================================
5
5
  class String
6
6
 
7
7
  # Remove leading zeros.
8
8
  def without_leading_zeros
9
- return self if self == '0'
9
+ return self if self == "0"
10
10
 
11
- is_positive = self.start_with?('0')
12
- is_negative = self.start_with?('-0')
11
+ is_positive = self.start_with?("0")
12
+ is_negative = self.start_with?("-0")
13
13
  if is_positive || is_negative
14
- sig = self[0, self.length].gsub(/(^0+)|(^-0+)/, '')
14
+ sig = self[0, self.length].gsub(/(^0+)|(^-0+)/, "")
15
15
 
16
- sig = '0' + sig if sig.start_with?('.') || sig.length == 0
17
- sig = '-' + sig if is_negative && sig != '0'
16
+ sig = "0" + sig if sig.start_with?(".") || sig.length == 0
17
+ sig = "-" + sig if is_negative && sig != "0"
18
18
 
19
19
  sig
20
20
  else
@@ -1,13 +1,13 @@
1
1
  # ==============================================================================
2
2
  # SPEC - SPEC HELPER
3
- # ==============================================================================
4
3
  # frozen_string_literal: true
4
+ # ==============================================================================
5
5
  # Configure Simple Cov to get coverage and Codecov.
6
6
  # !! These should be written at the beginning of this file to work. !!
7
- require 'simplecov'
8
- require 'simplecov-console'
9
- require 'codecov'
10
- if ENV['CI']
7
+ require "simplecov"
8
+ require "simplecov-console"
9
+ require "codecov"
10
+ if ENV["CI"]
11
11
  SimpleCov.formatter = SimpleCov::Formatter::Codecov
12
12
  else
13
13
  SimpleCov.formatters = [
@@ -18,12 +18,12 @@ end
18
18
  SimpleCov.start
19
19
 
20
20
  # Require core files.
21
- require 'bundler/setup'
22
- require 'string_foundation'
23
- require 'support/enhanced_matchers_extension'
21
+ require "bundler/setup"
22
+ require "string_foundation"
23
+ require "support/enhanced_matchers_extension"
24
24
 
25
25
  # Require components.
26
- require 'random_token'
26
+ require "random_token"
27
27
 
28
28
  # ------------------------------------------------------------------------------
29
29
  # RSpec Settings
@@ -32,7 +32,7 @@ RSpec.configure do |config|
32
32
  config.include EnhancedMatchersExtension
33
33
 
34
34
  # Enable flags like --only-failures and --next-failure .
35
- config.example_status_persistence_file_path = '.rspec_status'
35
+ config.example_status_persistence_file_path = ".rspec_status"
36
36
 
37
37
  config.expect_with :rspec do |c|
38
38
  c.syntax = :expect
@@ -0,0 +1,91 @@
1
+ # ==============================================================================
2
+ # SPEC - STRING FOUNDATION - BLANK SPEC
3
+ # frozen_string_literal: true
4
+ # ==============================================================================
5
+ describe "[ Blank Methods ]" do
6
+ let(:string) { "" }
7
+
8
+ # ----------------------------------------------------------------------------
9
+ # Check Whether A String Is A Blank
10
+ # ----------------------------------------------------------------------------
11
+ describe "CHECK WHETHER A STRING IS A BLANK ::" do
12
+ subject { string.blank? }
13
+
14
+ context "when a string is empty," do
15
+ it { is_expected.to be true }
16
+ end
17
+
18
+ context "when a string is a word," do
19
+ let(:string) { "string" }
20
+
21
+ it { is_expected.to be false }
22
+ end
23
+
24
+ context "when a string includes half-width spaces," do
25
+ let(:string) { "this is string foundation." }
26
+
27
+ it { is_expected.to be false }
28
+ end
29
+
30
+ context "when a string includes only 1 half-width space," do
31
+ let(:string) { " " }
32
+
33
+ it { is_expected.to be true }
34
+ end
35
+
36
+ context "when a string includes only multiple half-width spaces," do
37
+ let(:string) { " " * 3 }
38
+
39
+ it { is_expected.to be true }
40
+ end
41
+
42
+ context "when a string is a newline," do
43
+ let(:string) { "\n" }
44
+
45
+ it { is_expected.to be true }
46
+ end
47
+ end
48
+
49
+
50
+ # ----------------------------------------------------------------------------
51
+ # Check Whether A String Is Present
52
+ # ----------------------------------------------------------------------------
53
+ describe "CHECK WHETHER A STRING IS PRESENT ::" do
54
+ subject { string.present? }
55
+
56
+ context "when a string is empty," do
57
+ it { is_expected.to be false }
58
+ end
59
+
60
+ context "when a string is a word," do
61
+ let(:string) { "string" }
62
+
63
+ it { is_expected.to be true }
64
+ end
65
+
66
+ context "when a string includes half-width spaces," do
67
+ let(:string) { "this is string foundation." }
68
+
69
+ it { is_expected.to be true }
70
+ end
71
+
72
+ context "when a string includes only 1 half-width space," do
73
+ let(:string) { " " }
74
+
75
+ it { is_expected.to be false }
76
+ end
77
+
78
+ context "when a string includes only multiple half-width spaces," do
79
+ let(:string) { " " * 3 }
80
+
81
+ it { is_expected.to be false }
82
+ end
83
+
84
+ context "when a string is a newline," do
85
+ let(:string) { "\n" }
86
+
87
+ it { is_expected.to be false }
88
+ end
89
+ end
90
+
91
+ end