nuggets 1.4.0 → 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
2
  SHA1:
3
- metadata.gz: b8bc4223cf7e497022aa29613c8fddce9a757b69
4
- data.tar.gz: 3f1f0159203157d4fbcded7cf3dc5aeb25972df2
3
+ metadata.gz: 5af6231048355058097a53aac9443148a84e7bbc
4
+ data.tar.gz: c6976ef57d142740afed95d49bfdd366992d5bbb
5
5
  SHA512:
6
- metadata.gz: aedaaac17d00e186d8219ba67495fc1b5f73033251cff451b8f38e5e454cee49a4eac56922c2ae2b34c2ff3d87ba1bf922285a512f879e197552ea7219084733
7
- data.tar.gz: 99ed4373f5c96cd6a0f42a0ee55e4ee5a8d99f166245fb2ff6f54330dfbeac503f021868bda9569bf8149b05aea31cb3ec7c6855c30a5509fbbabeff9a03678d
6
+ metadata.gz: ea703b2f4bd23a05391a67d6ce8694fa63ab59d02d8e7f7766de2516838a1a7bd8ce31c6a42e09ea78cfb4ddc4009956852e3845ec61f4eccbe6d6f793ef1259
7
+ data.tar.gz: 702b6c308c17b5fd8e54f7538bf6057f573cadf60326ace6a55b40cbe805e45b67e581a13a9618e5900f8ec461512d85ff287fa2e39a6ee83f532cf922844510
data/ChangeLog CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  = Revision history for nuggets
4
4
 
5
+ == 1.5.0 [2016-04-19]
6
+
7
+ * Added String#format.
8
+ * Added String#highlight.
9
+ * Dropped IO::NULL, available as File::NULL since Ruby 1.9.3.
10
+
5
11
  == 1.4.0 [2015-10-02]
6
12
 
7
13
  * Added File.open_file.
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to nuggets version 1.4.0.
5
+ This documentation refers to nuggets version 1.5.0.
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -58,7 +58,7 @@ Travis CI:: https://travis-ci.org/blackwinter/nuggets
58
58
 
59
59
  == LICENSE AND COPYRIGHT
60
60
 
61
- Copyright (C) 2007-2015 Jens Wille
61
+ Copyright (C) 2007-2016 Jens Wille
62
62
 
63
63
  nuggets is free software: you can redistribute it and/or modify it
64
64
  under the terms of the GNU Affero General Public License as published by
@@ -40,7 +40,7 @@ class Array
40
40
  # Applies to string argument accordingly: First string in _array_ applied to
41
41
  # _str_; empty string if _str_ is empty.
42
42
  def %(args)
43
- opts = { :sep => ', ' }
43
+ opts = { sep: ', ' }
44
44
  opts.update(pop) if last.is_a?(::Hash)
45
45
 
46
46
  default = lambda { |n| ['%s'] * n * opts[:sep] }
@@ -39,10 +39,10 @@ module Nuggets
39
39
  #
40
40
  # The "numeric" variants format the item as a (decimal) number.
41
41
  FORMATS = {
42
- :default => '%-*s [%s]%*s %*d',
43
- :percent => '%-*s [%s]%*s %*d (%.2f%%)',
44
- :numeric => '%*d [%s]%*s %*d',
45
- :numeric_percent => '%*d [%s]%*s %*d (%.2f%%)'
42
+ default: '%-*s [%s]%*s %*d',
43
+ percent: '%-*s [%s]%*s %*d (%.2f%%)',
44
+ numeric: '%*d [%s]%*s %*d',
45
+ numeric_percent: '%*d [%s]%*s %*d (%.2f%%)'
46
46
  }
47
47
 
48
48
  # Encapsulates a #histogram item and provides the following attributes (see
@@ -34,8 +34,8 @@ class Hash
34
34
  # Returns <tt>hash#to_a</tt>, in forced order (cf. Array#in_order).
35
35
  #
36
36
  # Examples:
37
- # { :a => 1, :b => 2, :c => 3 }.in_order(:b, :c) #=> [[:b, 2], [:c, 3], [:a, 1]]
38
- # { :a => 1, :b => 2, :c => 3 }.in_order(:b, :d) #=> [[:b, 2], [:a, 1], [:c, 3]]
37
+ # { a: 1, b: 2, c: 3 }.in_order(:b, :c) #=> [[:b, 2], [:c, 3], [:a, 1]]
38
+ # { a: 1, b: 2, c: 3 }.in_order(:b, :d) #=> [[:b, 2], [:a, 1], [:c, 3]]
39
39
  def in_order(*ordered)
40
40
  keys.in_order(*ordered).map { |key| [key, self[key]] }
41
41
  end
@@ -45,8 +45,8 @@ module Nuggets
45
45
  # Example:
46
46
  #
47
47
  # hash = Hash.nest(2)
48
- # hash[:foo][:bar][:a] = { :x => 1, :y => 2 }
49
- # hash[:foo][:bar][:b] = { :x => 0, :y => 3 }
48
+ # hash[:foo][:bar][:a] = { x: 1, y: 2 }
49
+ # hash[:foo][:bar][:b] = { x: 0, y: 3 }
50
50
  # hash
51
51
  # #=> {:foo=>{:bar=>{:b=>{:y=>3, :x=>0}, :a=>{:y=>2, :x=>1}}}}
52
52
  def nest(depth = 0, value = default = true)
@@ -30,7 +30,7 @@ module Nuggets
30
30
 
31
31
  # call-seq:
32
32
  # hash.unroll(*value_keys) => anArray
33
- # hash.unroll(*value_keys, :sort_by => ...) => anArray
33
+ # hash.unroll(*value_keys, sort_by: ...) => anArray
34
34
  # hash.unroll(*value_keys) { |value_hash| ... } => anArray
35
35
  #
36
36
  # "Unrolls" a nested hash, so that each path through _hash_ results in a
@@ -46,13 +46,13 @@ module Nuggets
46
46
  #
47
47
  # Examples:
48
48
  #
49
- # { :foo => { :bar => { :a => { :x => 1, :y => 2 }, :b => { :x => 0, :y => 3 } } } }.unroll
49
+ # { foo: { bar: { a: { x: 1, y: 2 }, b: { x: 0, y: 3 } } } }.unroll
50
50
  # #=> [[:foo, :bar, :b, 3, 0], [:foo, :bar, :a, 2, 1]]
51
51
  #
52
- # { :foo => { :bar => { :a => { :x => 1, :y => 2 }, :b => { :x => 0, :y => 3 } } } }.unroll(:sort_by => :to_s)
52
+ # { foo: { bar: { a: { x: 1, y: 2 }, b: { x: 0, y: 3 } } } }.unroll(sort_by: :to_s)
53
53
  # #=> [[:foo, :bar, :a, 1, 2], [:foo, :bar, :b, 0, 3]]
54
54
  #
55
- # { :foo => { :bar => { :a => { :x => 1, :y => 2 }, :b => { :x => 0, :y => 3 } } } }.unroll { |data| data[:x] = nil; data[:y] *= 2 }
55
+ # { foo: { bar: { a: { x: 1, y: 2 }, b: { x: 0, y: 3 } } } }.unroll { |data| data[:x] = nil; data[:y] *= 2 }
56
56
  # #=> [[:foo, :bar, :b, 6, nil], [:foo, :bar, :a, 4, nil]]
57
57
  def unroll(*value_keys, &block)
58
58
  args = value_keys.dup
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # nuggets -- Extending Ruby #
5
5
  # #
6
- # Copyright (C) 2007-2012 Jens Wille #
6
+ # Copyright (C) 2007-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -24,13 +24,11 @@
24
24
  ###############################################################################
25
25
  #++
26
26
 
27
- require 'nuggets/io/null_mixin'
28
-
29
27
  module Nuggets
30
28
  class IO
31
29
  module RedirectMixin
32
30
 
33
- def redirect(target = NullMixin::NULL, mode = 'w')
31
+ def redirect(target = ::File::NULL, mode = 'w')
34
32
  unless target.is_a?(self.class)
35
33
  target = ::File.open(target, mode)
36
34
  close_target = true
@@ -54,7 +54,7 @@ module Nuggets
54
54
  # Log line patterns
55
55
  ITEMS = [
56
56
  [:processing, {
57
- :re => %r{
57
+ re: %r{
58
58
  #{PREFIX_RE} # pid, host
59
59
  Processing\s+
60
60
  (\w+) # controller
@@ -72,23 +72,23 @@ module Nuggets
72
72
  (\w+) # request_method
73
73
  \]
74
74
  }xo,
75
- :keys => [:controller, :action, :ip, :datetime, :request_method]
75
+ keys: [:controller, :action, :ip, :datetime, :request_method]
76
76
  }],
77
77
  [:session_id, {
78
- :re => %r{
78
+ re: %r{
79
79
  #{PREFIX_RE} # pid, host
80
80
  Session\sID:\s+
81
81
  (\S+) # sid
82
82
  }xo,
83
- :keys => [:sid]
83
+ keys: [:sid]
84
84
  }],
85
85
  [:parameters, {
86
- :re => %r{
86
+ re: %r{
87
87
  #{PREFIX_RE} # pid, host
88
88
  Parameters:\s+
89
89
  (\{.*\}) # params
90
90
  }xo, #}
91
- :proc => lambda { |entry, md|
91
+ proc: lambda { |entry, md|
92
92
  entry[:params_hash] = md[3].hash
93
93
  entry[:params] = begin
94
94
  eval("$SAFE = 3\n#{md[3].gsub(/#<.*?>/, '%q{\&}')}", nil, __FILE__, __LINE__) # !!!
@@ -98,7 +98,7 @@ module Nuggets
98
98
  }
99
99
  }],
100
100
  [:client_info, {
101
- :re => %r{
101
+ re: %r{
102
102
  #{PREFIX_RE} # pid, host
103
103
  Client\sinfo:\s+
104
104
  UA\s+=\s+
@@ -107,18 +107,18 @@ module Nuggets
107
107
  LANG\s+=\s+
108
108
  (.*) # accept_language
109
109
  }xo,
110
- :keys => [:user_agent, :accept_language]
110
+ keys: [:user_agent, :accept_language]
111
111
  }],
112
112
  [:referer, {
113
- :re => %r{
113
+ re: %r{
114
114
  #{PREFIX_RE} # pid, host
115
115
  Referer:\s+
116
116
  (.*) # referer
117
117
  }xo,
118
- :keys => [:referer]
118
+ keys: [:referer]
119
119
  }],
120
120
  [:meta, {
121
- :re => %r{
121
+ re: %r{
122
122
  #{PREFIX_RE} # pid, host
123
123
  Meta:\s+
124
124
  User\s+=\s+
@@ -127,20 +127,20 @@ module Nuggets
127
127
  Institution\s+=\s+
128
128
  (.*) # institution_id
129
129
  }xo,
130
- :keys => [:user_id, :institution_id]
130
+ keys: [:user_id, :institution_id]
131
131
  }],
132
132
  [:stats, {
133
- :re => %r{
133
+ re: %r{
134
134
  #{PREFIX_RE} # pid, host
135
135
  Stats:\s+
136
136
  (.*) # flags
137
137
  }xo,
138
- :proc => lambda { |entry, md|
138
+ proc: lambda { |entry, md|
139
139
  entry[:flags] = md[3].split(SEPARATOR_RE)
140
140
  }
141
141
  }],
142
142
  [:oauth, {
143
- :re => %r{
143
+ re: %r{
144
144
  #{PREFIX_RE} # pid, host
145
145
  OAuth:\s+
146
146
  Token\s+=\s+
@@ -152,10 +152,10 @@ module Nuggets
152
152
  Client\s+=\s+
153
153
  (.*) # client_id
154
154
  }xo,
155
- :keys => [:token_type, :token, :user_id, :client_id]
155
+ keys: [:token_type, :token, :user_id, :client_id]
156
156
  }],
157
157
  [:benchmark, {
158
- :re => %r{
158
+ re: %r{
159
159
  #{PREFIX_RE} # pid, host
160
160
  Completed\sin\s+
161
161
  (\S+) # runtime
@@ -185,7 +185,7 @@ module Nuggets
185
185
  (.*) # request_uri
186
186
  \]
187
187
  }xo,
188
- :keys => [:runtime, :rendering_runtime, :db_runtime, :status, :request_uri]
188
+ keys: [:runtime, :rendering_runtime, :db_runtime, :status, :request_uri]
189
189
  }]
190
190
  ]
191
191
 
@@ -0,0 +1,5 @@
1
+ require 'nuggets/string/format_mixin'
2
+
3
+ class String
4
+ include Nuggets::String::FormatMixin
5
+ end
@@ -0,0 +1,59 @@
1
+ #--
2
+ ###############################################################################
3
+ # #
4
+ # nuggets -- Extending Ruby #
5
+ # #
6
+ # Copyright (C) 2007-2016 Jens Wille #
7
+ # #
8
+ # Authors: #
9
+ # Jens Wille <jens.wille@gmail.com> #
10
+ # #
11
+ # nuggets is free software; you can redistribute it and/or modify it under #
12
+ # the terms of the GNU Affero General Public License as published by the Free #
13
+ # Software Foundation; either version 3 of the License, or (at your option) #
14
+ # any later version. #
15
+ # #
16
+ # nuggets is distributed in the hope that it will be useful, but WITHOUT ANY #
17
+ # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
18
+ # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for #
19
+ # more details. #
20
+ # #
21
+ # You should have received a copy of the GNU Affero General Public License #
22
+ # along with nuggets. If not, see <http://www.gnu.org/licenses/>. #
23
+ # #
24
+ ###############################################################################
25
+ #++
26
+
27
+ module Nuggets
28
+ class String
29
+ module FormatMixin
30
+
31
+ PREFIX = '%'
32
+
33
+ FORMAT_RE = %r{#{PREFIX}(?:\{(.*?)\}|(.))}o
34
+
35
+ # call-seq:
36
+ # str.format(hash) => aString
37
+ # str.format { |directive| ... } => aString
38
+ #
39
+ # Replace format directives in _str_.
40
+ #
41
+ # If +hash+ given, uses value of directive key (String or Symbol)
42
+ # as replacement value. Raises KeyError if directive key not found.
43
+ #
44
+ # If block given, uses result of +directive+ yielded to block as
45
+ # replacement value. Raises ArgumentError if block returns no value.
46
+ def format(hash = nil)
47
+ replace = lambda { |&b| gsub(FORMAT_RE) {
48
+ (k = $1 || $2) == PREFIX ? k : b[k] } }
49
+
50
+ hash ? replace.() { |k| hash.fetch(k) {
51
+ hash.fetch(k.to_sym) { raise(KeyError, "key not found: #{k}") } } } :
52
+ block_given? ? replace.() { |k| yield k or
53
+ raise(ArgumentError, "malformed format string - #{$&}") } :
54
+ raise(ArgumentError, 'wrong number of arguments (given 0, expected 1)')
55
+ end
56
+
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,5 @@
1
+ require 'nuggets/string/highlight_mixin'
2
+
3
+ class String
4
+ include Nuggets::String::HighlightMixin
5
+ end
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # nuggets -- Extending Ruby #
5
5
  # #
6
- # Copyright (C) 2007-2014 Jens Wille #
6
+ # Copyright (C) 2007-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -24,18 +24,38 @@
24
24
  ###############################################################################
25
25
  #++
26
26
 
27
- require 'nuggets/ruby_mixin'
28
-
29
27
  module Nuggets
30
- class IO
31
- module NullMixin
32
-
33
- NULL = case RubyMixin::RUBY_PLATFORM
34
- when /mswin|mingw/i then 'NUL'
35
- when /openvms/i then 'NL:'
36
- when /amiga/i then 'NIL:'
37
- else '/dev/null'
38
- end.freeze
28
+ class String
29
+ module HighlightMixin
30
+
31
+ # call-seq:
32
+ # str.highlight(needle[, prefix[, postfix]]) => new_string
33
+ #
34
+ # Highlight occurrences of +needle+ (String(s) and/or Regexp(s))
35
+ # in _str_ by surrounding them with +prefix+ and +postfix+.
36
+ def highlight(needle, prefix = '|', postfix = prefix)
37
+ offsets = []
38
+
39
+ Array(needle).each { |arg|
40
+ while index = index(arg, index || 0)
41
+ offsets << [index, index += ($& || arg).length]
42
+ end
43
+ }
44
+
45
+ flattened = [current = offsets.sort!.shift]
46
+
47
+ offsets.each { |offset|
48
+ i1, j1 = current
49
+ i2, j2 = offset
50
+
51
+ i2 > j1 ? flattened << current = offset :
52
+ j2 > j1 ? current[-1] = j2 : nil
53
+ }
54
+
55
+ dup.tap { |result| flattened.reverse_each { |i, j|
56
+ result.insert(j, postfix).insert(i, prefix)
57
+ } }
58
+ end
39
59
 
40
60
  end
41
61
  end
@@ -3,7 +3,7 @@ module Nuggets
3
3
  module Version
4
4
 
5
5
  MAJOR = 1
6
- MINOR = 4
6
+ MINOR = 5
7
7
  TINY = 0
8
8
 
9
9
  class << self
@@ -30,7 +30,7 @@ describe Array, 'format' do
30
30
  ['', '', '' ] => ''
31
31
  )
32
32
 
33
- test_format({ :sep => ':' },
33
+ test_format({ sep: ':' },
34
34
  ['1', '2', '3', '4'] => '1:2:3:4',
35
35
  ['1', '2', '3', '' ] => '1:2:3',
36
36
  ['1', '2', '', '4'] => '1:2:4',
@@ -12,12 +12,12 @@ describe_extended ENV, Nuggets::Env::SetMixin, true do
12
12
  end
13
13
 
14
14
  example do
15
- ENV.with(:lang => 'C') { ENV['LANG'].should == 'C' }
15
+ ENV.with(lang: 'C') { ENV['LANG'].should == 'C' }
16
16
  ENV['LANG'].should == @original['LANG']
17
17
  end
18
18
 
19
19
  example do
20
- ENV.set(:lang => 'C').to_hash.should == @original
20
+ ENV.set(lang: 'C').to_hash.should == @original
21
21
  ENV.to_hash.should == { 'LANG' => 'C' }
22
22
  end
23
23
 
@@ -2,7 +2,7 @@ require 'nuggets/hash/at'
2
2
 
3
3
  describe Hash, 'at' do
4
4
 
5
- let(:h) { { :a => 1, 2 => 3, nil => nil, 'foo' => %w[b a r] } }
5
+ let(:h) { { a: 1, 2 => 3, nil => nil, 'foo' => %w[b a r] } }
6
6
 
7
7
  example { h.first.should == { a: 1 } }
8
8
 
@@ -54,7 +54,7 @@ describe_extended Hash, Nuggets::Hash::DeepFetchMixin do
54
54
 
55
55
  context do
56
56
 
57
- let(:hash) { { :foo => { :bar => { :baz => 42 } } } }
57
+ let(:hash) { { foo: { bar: { baz: 42 } } } }
58
58
 
59
59
  example do
60
60
  lambda { hash.deep_fetch('foo/bar/baz') }.should raise_error(KeyError)
@@ -3,58 +3,58 @@ require 'nuggets/hash/deep_merge'
3
3
  describe_extended Hash, Nuggets::Hash::DeepMergeMixin do
4
4
 
5
5
  example do
6
- { :a => 1 }.deep_merge(:a => 2).should == { :a => 2 }
6
+ { a: 1 }.deep_merge(a: 2).should == { a: 2 }
7
7
  end
8
8
 
9
9
  example do
10
- { :a => 1 }.deep_merge(:b => 2).should == { :a => 1, :b => 2 }
10
+ { a: 1 }.deep_merge(b: 2).should == { a: 1, b: 2 }
11
11
  end
12
12
 
13
13
  example do
14
- { :a => { :b => 1 } }.deep_merge(:b => 2).should == { :a => { :b => 1 }, :b => 2 }
14
+ { a: { b: 1 } }.deep_merge(b: 2).should == { a: { b: 1 }, b: 2 }
15
15
  end
16
16
 
17
17
  example do
18
- { :a => { :b => 1 } }.deep_merge(:a => { :b => 2 }).should == { :a => { :b => 2 } }
18
+ { a: { b: 1 } }.deep_merge(a: { b: 2 }).should == { a: { b: 2 } }
19
19
  end
20
20
 
21
21
  example do
22
- lambda { { :a => { :b => { :c => 1 } } }.deep_merge(:a => { :b => 2 }) }.should raise_error(TypeError)
22
+ lambda { { a: { b: { c: 1 } } }.deep_merge(a: { b: 2 }) }.should raise_error(TypeError)
23
23
  end
24
24
 
25
25
  example do
26
- { :a => { :b => { :c => 1 } } }.deep_merge(:a => { :b => { :c => 2 } }).should == { :a => { :b => { :c => 2 } } }
26
+ { a: { b: { c: 1 } } }.deep_merge(a: { b: { c: 2 } }).should == { a: { b: { c: 2 } } }
27
27
  end
28
28
 
29
29
  example do
30
- { :a => { :b => { :c => 1 } } }.deep_merge(:a => { :b => { :d => 2 } }).should == { :a => { :b => { :c => 1, :d => 2 } } }
30
+ { a: { b: { c: 1 } } }.deep_merge(a: { b: { d: 2 } }).should == { a: { b: { c: 1, d: 2 } } }
31
31
  end
32
32
 
33
33
  example do
34
- { :a => { :b => { :c => 1 } } }.deep_merge(:a => { :b => { :c => 2 }, :d => 3 }).should == { :a => { :b => { :c => 2 }, :d => 3 } }
34
+ { a: { b: { c: 1 } } }.deep_merge(a: { b: { c: 2 }, d: 3 }).should == { a: { b: { c: 2 }, d: 3 } }
35
35
  end
36
36
 
37
37
  example do
38
- { :a => { :b => { :c => 1 }, :d => 2 } }.deep_merge(:a => { :b => { :c => 2 }, :d => 3 }).should == { :a => { :b => { :c => 2 }, :d => 3 } }
38
+ { a: { b: { c: 1 }, d: 2 } }.deep_merge(a: { b: { c: 2 }, d: 3 }).should == { a: { b: { c: 2 }, d: 3 } }
39
39
  end
40
40
 
41
41
  example do
42
- { :a => { :b => { :c => 1 }, :d => 2 }, :e => 3 }.deep_merge(:a => { :b => { :c => 2 }, :d => 3 }).should == { :a => { :b => { :c => 2 }, :d => 3 }, :e => 3 }
42
+ { a: { b: { c: 1 }, d: 2 }, e: 3 }.deep_merge(a: { b: { c: 2 }, d: 3 }).should == { a: { b: { c: 2 }, d: 3 }, e: 3 }
43
43
  end
44
44
 
45
45
  example do
46
- { :a => { :b => { :c => 1 } }, :d => { :e => 3 } }.deep_merge(:a => { :b => { :c => 2 } }, :d => { :e => 4 }).should == { :a => { :b => { :c => 2 } }, :d => { :e => 4 } }
46
+ { a: { b: { c: 1 } }, d: { e: 3 } }.deep_merge(a: { b: { c: 2 } }, d: { e: 4 }).should == { a: { b: { c: 2 } }, d: { e: 4 } }
47
47
  end
48
48
 
49
49
  context do
50
50
 
51
51
  before :each do
52
- @sub_hash1 = { :b => 1 }
53
- @sub_hash2 = { :b => 2 }
52
+ @sub_hash1 = { b: 1 }
53
+ @sub_hash2 = { b: 2 }
54
54
 
55
- @hash1 = { :a => @sub_hash1 }
56
- @hash2 = { :a => @sub_hash2 }
57
- @hash3 = { :a => { :b => 2} }
55
+ @hash1 = { a: @sub_hash1 }
56
+ @hash2 = { a: @sub_hash2 }
57
+ @hash3 = { a: { b: 2} }
58
58
  end
59
59
 
60
60
  example do
@@ -25,7 +25,7 @@ describe_extended Hash, Nuggets::Hash::SeenMixin, true do
25
25
  end
26
26
 
27
27
  example do
28
- hash = Hash.seen.update(:a => :b)
28
+ hash = Hash.seen.update(a: :b)
29
29
  hash.should be_an_instance_of(Hash)
30
30
 
31
31
  hash[:a].should == :b
@@ -18,12 +18,12 @@ describe_extended Hash, Nuggets::Hash::UnrollMixin do
18
18
  end
19
19
 
20
20
  example do
21
- hash = { :a => { :b => 1 } }
21
+ hash = { a: { b: 1 } }
22
22
  hash.unroll.should == [[:a, 1]]
23
23
  end
24
24
 
25
25
  example do
26
- hash = { :a => { :b => 1, :c => 2 } }
26
+ hash = { a: { b: 1, c: 2 } }
27
27
 
28
28
  result = hash.unroll.first
29
29
  result.size.should == 3
@@ -33,36 +33,24 @@ describe_extended Hash, Nuggets::Hash::UnrollMixin do
33
33
  result.should include(2)
34
34
  end
35
35
 
36
- if RUBY_VERSION < '1.9'
37
- example do
38
- hash = { :a => { :b => 1, :c => 2 } }
39
- lambda { hash.unroll(:sort => true) }.should raise_error(NoMethodError, /<=>/)
40
- end
41
-
42
- example do
43
- hash = { :a => { :b => 1, :c => 2 } }
44
- lambda { hash.unroll(:sort_by => lambda { |h| h.to_s }) }.should_not raise_error(NoMethodError)
45
- end
46
- end
47
-
48
36
  example do
49
37
  hash = { 'a' => { 'b' => 1, 'c' => 2 } }
50
- hash.unroll(:sort => true).should == [['a', 1, 2]]
38
+ hash.unroll(sort: true).should == [['a', 1, 2]]
51
39
  end
52
40
 
53
41
  example do
54
42
  hash = { 'a' => { 'b' => 1, 'c' => 2 }, 'd' => { 'b' => 0, 'c' => 3 } }
55
- hash.unroll('b', 'c', :sort => true).should == [['a', 1, 2], ['d', 0, 3]]
43
+ hash.unroll('b', 'c', sort: true).should == [['a', 1, 2], ['d', 0, 3]]
56
44
  end
57
45
 
58
46
  example do
59
47
  hash = { 'z' => { 'a' => { 'b' => 1, 'c' => 2 }, 'd' => { 'b' => 0, 'c' => 3 } } }
60
- hash.unroll('b', :sort_by => lambda { |h| h.to_s }).should == [['z', 'a', 1], ['z', 'd', 0]]
48
+ hash.unroll('b', sort_by: lambda { |h| h.to_s }).should == [['z', 'a', 1], ['z', 'd', 0]]
61
49
  end
62
50
 
63
51
  example do
64
52
  hash = { 'z' => { 'a' => { 'b' => 1, 'c' => 2 }, 'd' => { 'b' => 0, 'c' => 3 } } }
65
- hash.unroll(:sort => true) { |h| h['b'] = nil; h['c'] *= 2 }.should == [['z', 'a', nil, 4], ['z', 'd', nil, 6]]
53
+ hash.unroll(sort: true) { |h| h['b'] = nil; h['c'] *= 2 }.should == [['z', 'a', nil, 4], ['z', 'd', nil, 6]]
66
54
  end
67
55
 
68
56
  end
@@ -23,11 +23,11 @@ describe_extended Object, Nuggets::Object::BlankMixin do
23
23
  example { o.should be_vain }
24
24
  }
25
25
 
26
- [['', [], [nil], {}], { :x => nil, :y => [], :z => { :zz => nil } }].each { |o|
26
+ [['', [], [nil], {}], { x: nil, y: [], z: { zz: nil } }].each { |o|
27
27
  example { o.should_not be_void }
28
28
  }
29
29
 
30
- [['', [], [nil], {}], { :x => nil, :y => [], :z => { :zz => nil } }].each { |o|
30
+ [['', [], [nil], {}], { x: nil, y: [], z: { zz: nil } }].each { |o|
31
31
  example { o.should be_vain }
32
32
  }
33
33
 
@@ -2,12 +2,13 @@ require 'nuggets/object/singleton_class'
2
2
 
3
3
  describe_extended Object, Nuggets::Object::SingletonClassMixin do
4
4
 
5
- objects = [Class, Object.new, Class.new, 's', [1, 2], { :a => 'b' }]
5
+ objects = [Class, Object.new, Class.new, 's', [1, 2], { a: 'b' }]
6
6
  objects.unshift(Object) unless %w[jruby rbx].include?(RUBY_ENGINE)
7
7
 
8
8
  objects.each { |o|
9
9
  example { o.should_not be_a_singleton_class }
10
- example { lambda { o.singleton_object }.should raise_error(TypeError) }
10
+ example(nil, if: o != Object || RUBY_VERSION < '2.3') {
11
+ lambda { o.singleton_object }.should raise_error(TypeError) }
11
12
 
12
13
  s = o.singleton_class
13
14
 
@@ -0,0 +1,85 @@
1
+ require 'nuggets/string/format'
2
+
3
+ describe_extended String, Nuggets::String::FormatMixin do
4
+
5
+ example do
6
+ expect{'a%bc'.format}.to raise_error(ArgumentError, 'wrong number of arguments (given 0, expected 1)')
7
+ end
8
+
9
+ example do
10
+ expect('a%bc'.format('b' => 'foo')).to eq('afooc')
11
+ end
12
+
13
+ example do
14
+ expect('a%bc'.format(b: 'foo')).to eq('afooc')
15
+ end
16
+
17
+ example do
18
+ expect('a%bc'.format(b: :foo)).to eq('afooc')
19
+ end
20
+
21
+ example do
22
+ expect('a%bc'.format(b: 42)).to eq('a42c')
23
+ end
24
+
25
+ example do
26
+ expect('a%bc'.format(b: '')).to eq('ac')
27
+ end
28
+
29
+ example do
30
+ expect('a%bc'.format(b: nil)).to eq('ac')
31
+ end
32
+
33
+ example do
34
+ expect('a%{foo}c'.format('foo' => 'bar')).to eq('abarc')
35
+ end
36
+
37
+ example do
38
+ expect('a%{foo}c'.format(foo: 'bar')).to eq('abarc')
39
+ end
40
+
41
+ example do
42
+ expect('a%{foo}c'.format(foo: :bar)).to eq('abarc')
43
+ end
44
+
45
+ example do
46
+ expect(''.format({})).to eq('')
47
+ end
48
+
49
+ example do
50
+ expect('%'.format({})).to eq('%')
51
+ end
52
+
53
+ example do
54
+ expect('%%'.format({})).to eq('%')
55
+ end
56
+
57
+ example do
58
+ expect{'%a'.format({})}.to raise_error(KeyError, 'key not found: a')
59
+ end
60
+
61
+ example do
62
+ expect{'%a'.format('b' => 'foo')}.to raise_error(KeyError, 'key not found: a')
63
+ end
64
+
65
+ example do
66
+ expect{'%a'.format(Hash.new(42))}.to raise_error(KeyError, 'key not found: a')
67
+ end
68
+
69
+ example do
70
+ expect('a%bc'.format(&:upcase)).to eq('aBc')
71
+ end
72
+
73
+ example do
74
+ expect('a%bc'.format{''}).to eq('ac')
75
+ end
76
+
77
+ example do
78
+ expect{'a%bc'.format{}}.to raise_error(ArgumentError, 'malformed format string - %b')
79
+ end
80
+
81
+ example do
82
+ expect('a%bc%d%{foo}%%{baz}'.format(b: 42, d: 'D', 'foo' => :bar)).to eq('a42cDbar%{baz}')
83
+ end
84
+
85
+ end
@@ -0,0 +1,43 @@
1
+ require 'nuggets/string/highlight'
2
+
3
+ describe_extended String, Nuggets::String::HighlightMixin do
4
+
5
+ example do
6
+ s = 'lingo go do the go go'; t = s.dup
7
+ expect(s.highlight('lingo')).to eq('|lingo| go do the go go')
8
+ expect(s).to eq(t)
9
+
10
+ expect(s.highlight(/lingo/)).to eq('|lingo| go do the go go')
11
+ expect(s.highlight(/l.*ngo?/)).to eq('|lingo| go do the go go')
12
+
13
+ q = ['lingo', 'go', 'go go']
14
+ expect(s.highlight(q)).to eq('|lingo go| do the |go go|')
15
+ end
16
+
17
+ example do
18
+ s = 'lingö go do the go go'
19
+ q = ['lingö', 'go', 'go go']
20
+ expect(s.highlight(q)).to eq('|lingö| |go| do the |go go|')
21
+ end
22
+
23
+ example do
24
+ s = 'lingo go do the go go'
25
+ q = ['lingo', 'go', 'go go']
26
+ expect(s.highlight(q, '^')).to eq('^lingo go^ do the ^go go^')
27
+ expect(s.highlight(q, '<', '>')).to eq('<lingo go> do the <go go>')
28
+ expect(s.highlight(q, '<i>', '</i>')).to eq('<i>lingo go</i> do the <i>go go</i>')
29
+ end
30
+
31
+ example do
32
+ s = 'The fox went out on a chilly night'
33
+ q = [/[eo]n/]
34
+ expect(s.highlight(q)).to eq('The fox w|en|t out |on| a chilly night')
35
+ q << 'went'
36
+ expect(s.highlight(q)).to eq('The fox |went| out |on| a chilly night')
37
+ q << /ou.*a/
38
+ expect(s.highlight(q)).to eq('The fox |went| |out on a| chilly night')
39
+ q << 'went out'
40
+ expect(s.highlight(q)).to eq('The fox |went out on a| chilly night')
41
+ end
42
+
43
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nuggets
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-02 00:00:00.000000000 Z
11
+ date: 2016-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mime-types
@@ -205,8 +205,6 @@ files:
205
205
  - lib/nuggets/io/interact.rb
206
206
  - lib/nuggets/io/interact_mixin.rb
207
207
  - lib/nuggets/io/modes.rb
208
- - lib/nuggets/io/null.rb
209
- - lib/nuggets/io/null_mixin.rb
210
208
  - lib/nuggets/io/redirect.rb
211
209
  - lib/nuggets/io/redirect_mixin.rb
212
210
  - lib/nuggets/lazy_attr.rb
@@ -258,6 +256,10 @@ files:
258
256
  - lib/nuggets/string/case.rb
259
257
  - lib/nuggets/string/evaluate.rb
260
258
  - lib/nuggets/string/evaluate_mixin.rb
259
+ - lib/nuggets/string/format.rb
260
+ - lib/nuggets/string/format_mixin.rb
261
+ - lib/nuggets/string/highlight.rb
262
+ - lib/nuggets/string/highlight_mixin.rb
261
263
  - lib/nuggets/string/msub.rb
262
264
  - lib/nuggets/string/nsub.rb
263
265
  - lib/nuggets/string/sub_with_md.rb
@@ -339,6 +341,8 @@ files:
339
341
  - spec/nuggets/string/capitalize_first_spec.rb
340
342
  - spec/nuggets/string/case_spec.rb
341
343
  - spec/nuggets/string/evaluate_spec.rb
344
+ - spec/nuggets/string/format_spec.rb
345
+ - spec/nuggets/string/highlight_spec.rb
342
346
  - spec/nuggets/string/msub_spec.rb
343
347
  - spec/nuggets/string/nsub_spec.rb
344
348
  - spec/nuggets/string/sub_with_md_spec.rb
@@ -354,14 +358,15 @@ licenses:
354
358
  metadata: {}
355
359
  post_install_message: |2+
356
360
 
357
- nuggets-1.4.0 [2015-10-02]:
361
+ nuggets-1.5.0 [2016-04-19]:
358
362
 
359
- * Added File.open_file.
360
- * Added Array#extract_options.
363
+ * Added String#format.
364
+ * Added String#highlight.
365
+ * Dropped IO::NULL, available as File::NULL since Ruby 1.9.3.
361
366
 
362
367
  rdoc_options:
363
368
  - "--title"
364
- - nuggets Application documentation (v1.4.0)
369
+ - nuggets Application documentation (v1.5.0)
365
370
  - "--charset"
366
371
  - UTF-8
367
372
  - "--line-numbers"
@@ -382,7 +387,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
382
387
  version: '0'
383
388
  requirements: []
384
389
  rubyforge_project:
385
- rubygems_version: 2.4.8
390
+ rubygems_version: 2.6.3
386
391
  signing_key:
387
392
  specification_version: 4
388
393
  summary: Extending Ruby.
@@ -1,5 +0,0 @@
1
- require 'nuggets/io/null_mixin'
2
-
3
- class IO
4
- include Nuggets::IO::NullMixin
5
- end