nuggets 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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