quality_extensions 1.0.3 → 1.1.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.
- data/lib/quality_extensions/array/shell_escape.rb +2 -2
- data/lib/quality_extensions/chainable_safe_nil.rb +2 -1
- data/lib/quality_extensions/colored/toggleability.rb +1 -1
- data/lib/quality_extensions/console/command.rb +1 -1
- data/lib/quality_extensions/date/iso8601.rb +1 -1
- data/lib/quality_extensions/exception/inspect_with_backtrace.rb +1 -1
- data/lib/quality_extensions/float/truncate.rb +78 -0
- data/lib/quality_extensions/hash/to_query_string.rb +1 -1
- data/lib/quality_extensions/kernel/backtrace.rb +1 -1
- data/lib/quality_extensions/kernel/die.rb +1 -1
- data/lib/quality_extensions/kernel/example_printer.rb +14 -9
- data/lib/quality_extensions/kernel/require_all.rb +1 -1
- data/lib/quality_extensions/module/alias_method_chain.rb +1 -1
- data/lib/quality_extensions/module/create.rb +1 -1
- data/lib/quality_extensions/module/guard_method.rb +1 -1
- data/lib/quality_extensions/module/join.rb +1 -1
- data/lib/quality_extensions/module/malias_method_chain.rb +1 -1
- data/lib/quality_extensions/module/split.rb +1 -1
- data/lib/quality_extensions/object/mcall.rb +1 -1
- data/lib/quality_extensions/object/methods.rb +2 -2
- data/lib/quality_extensions/string/shell_escape.rb +2 -2
- data/lib/quality_extensions/string/with_knowledge_of_color.rb +19 -5
- data/lib/quality_extensions/symbol/match.rb +1 -1
- data/lib/quality_extensions/test/difference_highlighting.rb +1 -1
- metadata +42 -34
@@ -7,8 +7,8 @@
|
|
7
7
|
|
8
8
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
9
9
|
require 'rubygems'
|
10
|
-
require 'facets/
|
11
|
-
require 'facets/kernel/
|
10
|
+
require 'facets/symbol/to_proc'
|
11
|
+
require 'facets/kernel/require_local'
|
12
12
|
require_local '../string/shell_escape.rb'
|
13
13
|
|
14
14
|
require 'pp'
|
@@ -38,10 +38,11 @@
|
|
38
38
|
#
|
39
39
|
# Conclusion: Chaining is impossible -- Just use _? on any object that might return nil (on which you want to call a method).
|
40
40
|
|
41
|
+
# TODO: figure out why the test started failing
|
41
42
|
|
42
43
|
require 'singleton'
|
43
44
|
require 'rubygems'
|
44
|
-
require 'facets/
|
45
|
+
require 'facets/basicobject'
|
45
46
|
|
46
47
|
|
47
48
|
class Object
|
@@ -32,7 +32,7 @@
|
|
32
32
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
33
33
|
require 'shellwords'
|
34
34
|
require 'rubygems'
|
35
|
-
require 'facets/style' #modulize
|
35
|
+
require 'facets/string/style' #modulize
|
36
36
|
require 'escape' # http://www.a-k-r.org/escape/
|
37
37
|
|
38
38
|
# TODO Test
|
@@ -8,7 +8,7 @@
|
|
8
8
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
9
9
|
require 'date'
|
10
10
|
require 'rubygems'
|
11
|
-
require 'facets/date'
|
11
|
+
require 'facets/date' # I'm guessing this used to provide iso8601 ... no longer does?
|
12
12
|
|
13
13
|
class Date
|
14
14
|
def iso8601
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
11
11
|
require 'rubygems'
|
12
|
-
require 'facets/module/
|
12
|
+
require 'facets/module/alias_method_chain'
|
13
13
|
|
14
14
|
class Exception
|
15
15
|
# Use this if you want to output an exception with all the details that you'd *normally* see if the exception went unrescued
|
@@ -0,0 +1,78 @@
|
|
1
|
+
#--
|
2
|
+
# Credits::
|
3
|
+
# Copyright:: Tyler Rick
|
4
|
+
# License:: Ruby License
|
5
|
+
# Submit to Facets?:: Maybe
|
6
|
+
# Developer notes::
|
7
|
+
#++
|
8
|
+
|
9
|
+
require 'rubygems'
|
10
|
+
require 'facets/numeric/round'
|
11
|
+
require 'quality_extensions/module/alias_method_chain'
|
12
|
+
|
13
|
+
# * http://www.oreillynet.com/ruby/blog/2005/12/adding_utility_to_core_classes_1.html
|
14
|
+
#class Float
|
15
|
+
# def round_to(x = nil)
|
16
|
+
# if x > 0
|
17
|
+
# ("%.0#{x.to_i}f" % self).to_f
|
18
|
+
# else
|
19
|
+
# # http://www.oreillynet.com/ruby/blog/2005/12/adding_utility_to_core_classes_1.html
|
20
|
+
# # An advantage (I think) of Jonas' solution is it allows rounding on the other side of the decimal when x is negative.
|
21
|
+
# # 1234.567.prec(-2) #=>1200.0
|
22
|
+
# puts (self * 10**x).to_i
|
23
|
+
# puts (10**x).to_f
|
24
|
+
# (self * 10**x).round / (10**x)
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
#end
|
28
|
+
|
29
|
+
# File lib/core/facets/float/round.rb, line 17
|
30
|
+
# def round_at( d ) #d=0
|
31
|
+
# (self * (10.0 ** d)).round.to_f / (10.0 ** d)
|
32
|
+
# end
|
33
|
+
|
34
|
+
class Float
|
35
|
+
def truncate_with_precision(d)
|
36
|
+
(self * (10.0 ** d)).truncate_without_precision.to_f / (10.0 ** d)
|
37
|
+
end
|
38
|
+
alias_method_chain :truncate, :precision
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
# _____ _
|
43
|
+
# |_ _|__ ___| |_
|
44
|
+
# | |/ _ \/ __| __|
|
45
|
+
# | | __/\__ \ |_
|
46
|
+
# |_|\___||___/\__|
|
47
|
+
#
|
48
|
+
=begin test
|
49
|
+
require 'test/unit'
|
50
|
+
|
51
|
+
class TheTest < Test::Unit::TestCase
|
52
|
+
def test_0
|
53
|
+
assert_equal 1234.0, 1234.567.truncate(0)
|
54
|
+
assert_equal 1235.0, 1234.567.round_at(0)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_1
|
58
|
+
assert_equal 1234.5, 1234.567.truncate(1)
|
59
|
+
assert_equal 1234.6, 1234.567.round_at(1)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_2
|
63
|
+
assert_equal 1234.56, 1234.567.truncate(2)
|
64
|
+
assert_equal 1234.57, 1234.567.round_at(2)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_negative_1
|
68
|
+
assert_equal 1230.0, 1235.567.truncate(-1)
|
69
|
+
assert_equal 1240.0, 1235.567.round_at(-1)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_negative_2
|
73
|
+
assert_equal 1200.0, 1254.567.truncate(-2)
|
74
|
+
assert_equal 1300.0, 1254.567.round_at(-2)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
=end
|
78
|
+
|
@@ -25,7 +25,7 @@ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
|
25
25
|
require 'test/unit'
|
26
26
|
require 'rubygems'
|
27
27
|
require 'quality_extensions/kernel/capture_output'
|
28
|
-
#require 'facets/kernel/
|
28
|
+
#require 'facets/kernel/require_local'
|
29
29
|
#require_local './capture_output'
|
30
30
|
|
31
31
|
class TheTest < Test::Unit::TestCase
|
@@ -4,8 +4,8 @@
|
|
4
4
|
# License:: Ruby License
|
5
5
|
# Submit to Facets?:: Yes
|
6
6
|
# Developer notes::
|
7
|
-
# * Can anyone think of a better name than put_statement?
|
8
|
-
# * Something more like xmp
|
7
|
+
# * Can anyone think of a better name than put_statement or stp?
|
8
|
+
# * Something more like xmp (eXaMple_Put)... sp? stp? xm? putst? -- Too cryptic?
|
9
9
|
# * verbose? -- too ambiguous (that could be the name for xmp, for example)
|
10
10
|
# * xmp: Do the set_trace_func trick that irb_xmp/of_caller both use... so that the user doesn't have to pass in the local binding manually...
|
11
11
|
# * Add class method for ExamplePrinter to set a template for use by xmp? So if you don't like the default ("=> #{result}"), you can specify your own...
|
@@ -13,6 +13,7 @@
|
|
13
13
|
|
14
14
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
15
15
|
require 'rubygems'
|
16
|
+
require 'quality_extensions/module/attribute_accessors'
|
16
17
|
#require 'facets/binding/self/of_caller'
|
17
18
|
|
18
19
|
# This was written because the irb/xmp that was already available seemed to be
|
@@ -26,22 +27,26 @@ module ExamplePrinter
|
|
26
27
|
# xmp 'o = C.new', binding
|
27
28
|
# # => o = C.new
|
28
29
|
def put_statement(code, binding = nil, file = __FILE__, line = __LINE__)
|
29
|
-
|
30
|
-
#
|
31
|
-
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
30
|
+
|
31
|
+
# We'd like to be able to just use the binding of the caller without passing it in, but unfortunately I don't know how (yet)...
|
32
|
+
## This didn't work. Still got this error: undefined local variable or method `x' for #<TheTest:0xb7dbc358> (NameError)
|
33
|
+
#Binding.of_caller do |caller_binding|
|
34
|
+
# #puts caller_binding
|
35
|
+
# puts code
|
36
|
+
# eval code, caller_binding
|
37
|
+
#end
|
38
|
+
|
35
39
|
puts code
|
36
40
|
eval code, binding, file, line
|
37
41
|
end
|
38
42
|
alias_method :stp, :put_statement
|
39
43
|
|
44
|
+
|
40
45
|
# Prints the given statement (+code+ -- a string) before evaluating it. Then prints its return value.
|
41
46
|
# Pretty much compatible with irb/xmp. But you have currently have to pass
|
42
47
|
# in the binding manually if you have any local variables/methods that xmp
|
43
48
|
# should have access to.
|
44
|
-
def xmp(code, binding = nil)
|
49
|
+
def xmp(code, binding = nil, options = {})
|
45
50
|
result = put_statement(code, binding)
|
46
51
|
puts "=> #{result}"
|
47
52
|
end
|
@@ -9,7 +9,7 @@ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
|
9
9
|
require 'rubygems'
|
10
10
|
require 'facets/filelist'
|
11
11
|
|
12
|
-
require 'facets/kernel/
|
12
|
+
require 'facets/kernel/require_local'
|
13
13
|
require_local '../file/exact_match_regexp'
|
14
14
|
|
15
15
|
module Kernel
|
@@ -28,7 +28,7 @@ require 'rubygems'
|
|
28
28
|
require 'quality_extensions/hash/assert_has_only_keys'
|
29
29
|
require 'facets/hash/merge'
|
30
30
|
require 'facets/kernel/constant'
|
31
|
-
require 'facets/
|
31
|
+
require 'facets/symbol/to_proc'
|
32
32
|
require 'quality_extensions/module/split'
|
33
33
|
require 'quality_extensions/module/basename'
|
34
34
|
require 'quality_extensions/module/dirname'
|
@@ -14,7 +14,7 @@
|
|
14
14
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
15
15
|
require 'rubygems'
|
16
16
|
require 'quality_extensions/module/attribute_accessors'
|
17
|
-
require 'facets/kernel/
|
17
|
+
require 'facets/kernel/require_local'
|
18
18
|
require_local 'bool_attr_accessor'
|
19
19
|
#require 'quality_extensions/module/bool_attr_accessor'
|
20
20
|
require 'quality_extensions/symbol/match'
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
11
11
|
require 'rubygems'
|
12
|
-
require 'facets/
|
12
|
+
require 'facets/symbol/to_proc'
|
13
13
|
require 'quality_extensions/symbol/constantize'
|
14
14
|
require 'quality_extensions/module/namespace' # dirname
|
15
15
|
require 'quality_extensions/module/basename'
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
10
10
|
require 'rubygems'
|
11
|
-
require 'facets/
|
11
|
+
require 'facets/symbol/to_proc'
|
12
12
|
|
13
13
|
class Module
|
14
14
|
# Very similar to Facets' +Module#nesting+, but, whereas +nesting+ will break <tt>A::B</tt> into an array of _constants_ represting nesting
|
@@ -8,8 +8,8 @@
|
|
8
8
|
|
9
9
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
10
10
|
require 'rubygems'
|
11
|
-
require 'facets/module/
|
12
|
-
require 'facets/
|
11
|
+
require 'facets/module/alias_method_chain'
|
12
|
+
require 'facets/symbol/to_proc'
|
13
13
|
|
14
14
|
class Object
|
15
15
|
|
@@ -8,8 +8,8 @@
|
|
8
8
|
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
9
9
|
require 'rubygems'
|
10
10
|
require 'escape' # http://www.a-k-r.org/escape/
|
11
|
-
require 'facets/
|
12
|
-
require 'facets/kernel/
|
11
|
+
require 'facets/symbol/to_proc'
|
12
|
+
require 'facets/kernel/require_local'
|
13
13
|
|
14
14
|
class String
|
15
15
|
def shell_escape
|
@@ -24,8 +24,15 @@ module WithKnowledgeOfColor
|
|
24
24
|
self.scan(Color_regexp).join
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
28
|
-
ljust(width + nonprinting_characters_used_for_color.length)
|
27
|
+
def ljust_with_color(width, padstr=' ')
|
28
|
+
#ljust(width + nonprinting_characters_used_for_color.length, padstr)
|
29
|
+
# That didn't work when you wanted the padstr to have color (as in ' '.on_blue)
|
30
|
+
|
31
|
+
self + padstr*(width - length_without_color)
|
32
|
+
end
|
33
|
+
|
34
|
+
def rjust_with_color(width, padstr=' ')
|
35
|
+
padstr*(width - length_without_color) + self
|
29
36
|
end
|
30
37
|
end
|
31
38
|
|
@@ -57,10 +64,17 @@ class TheTest < Test::Unit::TestCase
|
|
57
64
|
def test_nonprinting_characters_used_for_color
|
58
65
|
assert_equal "\e[34m\e[0m", 'abc'.blue.nonprinting_characters_used_for_color
|
59
66
|
end
|
60
|
-
def
|
67
|
+
def test_ljust_with_color
|
61
68
|
assert_equal "abc ", 'abc'. ljust( 5)
|
62
|
-
assert_equal "abc ", 'abc'.blue.
|
63
|
-
assert_equal "\e[34mabc\e[0m ", 'abc'.blue.
|
69
|
+
assert_equal "abc ", 'abc'.blue.ljust_with_color(5).strip_color
|
70
|
+
assert_equal "\e[34mabc\e[0m ", 'abc'.blue.ljust_with_color(5)
|
71
|
+
assert_equal "\e[34mabc\e[0m\e[44m \e[0m\e[44m \e[0m", 'abc'.blue.ljust_with_color(5, ' '.on_blue)
|
72
|
+
end
|
73
|
+
def test_rjust_with_color
|
74
|
+
assert_equal " abc", 'abc'. rjust( 5)
|
75
|
+
assert_equal " abc", 'abc'.blue.rjust_with_color(5).strip_color
|
76
|
+
assert_equal " \e[34mabc\e[0m", 'abc'.blue.rjust_with_color(5)
|
77
|
+
assert_equal "\e[44m \e[0m\e[44m \e[0m\e[34mabc\e[0m", 'abc'.blue.rjust_with_color(5, ' '.on_blue)
|
64
78
|
end
|
65
79
|
|
66
80
|
end
|
@@ -13,7 +13,7 @@ require 'rubygems'
|
|
13
13
|
gem 'colored'
|
14
14
|
require 'colored'
|
15
15
|
gem 'facets'
|
16
|
-
require 'facets/module/
|
16
|
+
require 'facets/module/alias_method_chain'
|
17
17
|
require 'quality_extensions/object/send_if'
|
18
18
|
require 'quality_extensions/string/each_char_with_index'
|
19
19
|
require 'quality_extensions/module/bool_attr_accessor'
|
metadata
CHANGED
@@ -1,34 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: quality_extensions
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.0
|
7
|
-
date: 2008-06-20 00:00:00 -07:00
|
8
|
-
summary: A collection of reusable Ruby methods which are not (yet) in Facets.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: rubyforge.org@tylerrick.com
|
12
|
-
homepage: http://quality-ext.rubyforge.org/
|
13
|
-
rubyforge_project: quality_extensions
|
14
|
-
description: A collection of reusable Ruby methods which are not (yet) in Facets.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 1.1.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Tyler Rick and others
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-09-17 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A collection of reusable Ruby methods which are not (yet) in Facets.
|
17
|
+
email: rubyforge.org@tylerrick.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- Readme
|
31
24
|
files:
|
25
|
+
- lib/quality_extensions/float/truncate.rb
|
32
26
|
- lib/quality_extensions/module/attribute_accessors.rb
|
33
27
|
- lib/quality_extensions/module/parents.rb
|
34
28
|
- lib/quality_extensions/module/namespace.rb
|
@@ -136,21 +130,35 @@ files:
|
|
136
130
|
- lib/quality_extensions/file/exact_match_regexp.rb
|
137
131
|
- test/all.rb
|
138
132
|
- Readme
|
139
|
-
|
140
|
-
-
|
133
|
+
has_rdoc: true
|
134
|
+
homepage: http://quality-ext.rubyforge.org/
|
135
|
+
post_install_message:
|
141
136
|
rdoc_options:
|
142
137
|
- --title
|
143
138
|
- quality_extensions
|
144
139
|
- --main
|
145
140
|
- Readme
|
146
141
|
- --line-numbers
|
147
|
-
|
148
|
-
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: "0"
|
149
|
+
version:
|
150
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: "0"
|
155
|
+
version:
|
153
156
|
requirements: []
|
154
157
|
|
155
|
-
|
156
|
-
|
158
|
+
rubyforge_project: quality_extensions
|
159
|
+
rubygems_version: 1.2.0
|
160
|
+
signing_key:
|
161
|
+
specification_version: 2
|
162
|
+
summary: A collection of reusable Ruby methods which are not (yet) in Facets.
|
163
|
+
test_files:
|
164
|
+
- test/all.rb
|