tins 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/.travis.yml +7 -0
- data/Gemfile +5 -0
- data/LICENSE +18 -0
- data/README.rdoc +20 -0
- data/Rakefile +28 -0
- data/TODO +1 -0
- data/VERSION +1 -0
- data/lib/spruz.rb +1 -0
- data/lib/tins.rb +34 -0
- data/lib/tins/alias.rb +1 -0
- data/lib/tins/attempt.rb +51 -0
- data/lib/tins/bijection.rb +46 -0
- data/lib/tins/count_by.rb +8 -0
- data/lib/tins/deep_dup.rb +11 -0
- data/lib/tins/file_binary.rb +85 -0
- data/lib/tins/generator.rb +68 -0
- data/lib/tins/go.rb +43 -0
- data/lib/tins/hash_symbolize_keys_recursive.rb +28 -0
- data/lib/tins/hash_union.rb +15 -0
- data/lib/tins/limited.rb +38 -0
- data/lib/tins/lines_file.rb +123 -0
- data/lib/tins/memoize.rb +78 -0
- data/lib/tins/minimize.rb +55 -0
- data/lib/tins/module_group.rb +13 -0
- data/lib/tins/null.rb +26 -0
- data/lib/tins/once.rb +25 -0
- data/lib/tins/p.rb +23 -0
- data/lib/tins/partial_application.rb +31 -0
- data/lib/tins/range_plus.rb +9 -0
- data/lib/tins/round.rb +51 -0
- data/lib/tins/secure_write.rb +25 -0
- data/lib/tins/shuffle.rb +17 -0
- data/lib/tins/string_camelize.rb +16 -0
- data/lib/tins/string_underscore.rb +15 -0
- data/lib/tins/string_version.rb +105 -0
- data/lib/tins/subhash.rb +42 -0
- data/lib/tins/time_dummy.rb +31 -0
- data/lib/tins/to_proc.rb +11 -0
- data/lib/tins/uniq_by.rb +10 -0
- data/lib/tins/version.rb +10 -0
- data/lib/tins/write.rb +19 -0
- data/lib/tins/xt.rb +25 -0
- data/lib/tins/xt/attempt.rb +7 -0
- data/lib/tins/xt/blank.rb +67 -0
- data/lib/tins/xt/count_by.rb +11 -0
- data/lib/tins/xt/deep_dup.rb +7 -0
- data/lib/tins/xt/file_binary.rb +7 -0
- data/lib/tins/xt/full.rb +33 -0
- data/lib/tins/xt/hash_symbolize_keys_recursive.rb +7 -0
- data/lib/tins/xt/hash_union.rb +11 -0
- data/lib/tins/xt/irb.rb +17 -0
- data/lib/tins/xt/named.rb +35 -0
- data/lib/tins/xt/null.rb +5 -0
- data/lib/tins/xt/p.rb +7 -0
- data/lib/tins/xt/partial_application.rb +11 -0
- data/lib/tins/xt/range_plus.rb +12 -0
- data/lib/tins/xt/round.rb +13 -0
- data/lib/tins/xt/secure_write.rb +11 -0
- data/lib/tins/xt/shuffle.rb +11 -0
- data/lib/tins/xt/string.rb +5 -0
- data/lib/tins/xt/string_camelize.rb +6 -0
- data/lib/tins/xt/string_underscore.rb +6 -0
- data/lib/tins/xt/string_version.rb +7 -0
- data/lib/tins/xt/subhash.rb +11 -0
- data/lib/tins/xt/symbol_to_proc.rb +7 -0
- data/lib/tins/xt/time_dummy.rb +7 -0
- data/lib/tins/xt/uniq_by.rb +15 -0
- data/lib/tins/xt/write.rb +11 -0
- data/tests/tins_file_binary_test.rb +67 -0
- data/tests/tins_lines_file_test.rb +84 -0
- data/tests/tins_memoize_test.rb +52 -0
- data/tests/tins_secure_write_test.rb +44 -0
- data/tests/tins_test.rb +629 -0
- data/tins.gemspec +35 -0
- metadata +212 -0
data/lib/tins/xt/full.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'tins/xt/blank'
|
2
|
+
|
3
|
+
module Tins
|
4
|
+
module Full
|
5
|
+
# Returns the object if it isn't blank (as in Object#blank?), otherwise it
|
6
|
+
# returns nil. If a block was given as an argument and the object isn't
|
7
|
+
# blank, the block is executed with the object as its first argument. If an
|
8
|
+
# argument +dispatch+ was given and the object wasn't blank the method
|
9
|
+
# given by dispatch is called on the object. This is the same as
|
10
|
+
# foo.full?(&:bar) in the previous block form.
|
11
|
+
def full?(dispatch = nil, *args)
|
12
|
+
if blank?
|
13
|
+
obj = nil
|
14
|
+
#elsif Module === dispatch # TODO
|
15
|
+
# dispatch.found?(self)
|
16
|
+
elsif dispatch
|
17
|
+
obj = __send__(dispatch, *args)
|
18
|
+
obj = nil if obj.blank?
|
19
|
+
else
|
20
|
+
obj = self
|
21
|
+
end
|
22
|
+
if block_given? and obj
|
23
|
+
yield obj
|
24
|
+
else
|
25
|
+
obj
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class ::Object
|
31
|
+
include Full
|
32
|
+
end
|
33
|
+
end
|
data/lib/tins/xt/irb.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'irb'
|
2
|
+
|
3
|
+
module Tins
|
4
|
+
IRB = ::IRB
|
5
|
+
|
6
|
+
module ::IRB
|
7
|
+
def self.examine(binding = TOPLEVEL_BINDING)
|
8
|
+
setup nil
|
9
|
+
workspace = WorkSpace.new binding
|
10
|
+
irb = Irb.new workspace
|
11
|
+
@CONF[:MAIN_CONTEXT] = irb.context
|
12
|
+
catch(:IRB_EXIT) { irb.eval_input }
|
13
|
+
rescue Interrupt
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'tins/xt/string_version'
|
2
|
+
|
3
|
+
class Object
|
4
|
+
if RUBY_VERSION.version >= '1.9'.version
|
5
|
+
def named(name, method, *args, &named_block)
|
6
|
+
extend Module.new {
|
7
|
+
define_method(name) do |*rest, &block|
|
8
|
+
block = named_block if named_block
|
9
|
+
__send__(method, *(args + rest), &block)
|
10
|
+
end
|
11
|
+
}
|
12
|
+
end
|
13
|
+
else
|
14
|
+
def named(name, method, *args, &block)
|
15
|
+
extend Module.new { define_method(name) { |*rest| __send__(method, *(args + rest), &block) } }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Module
|
21
|
+
if RUBY_VERSION.version >= '1.9'.version
|
22
|
+
def named(name, method, *args, &named_block)
|
23
|
+
include Module.new {
|
24
|
+
define_method(name) do |*rest, &block|
|
25
|
+
block = named_block if named_block
|
26
|
+
__send__(method, *(args + rest), &block)
|
27
|
+
end
|
28
|
+
}
|
29
|
+
end
|
30
|
+
else
|
31
|
+
def named(name, method, *args, &block)
|
32
|
+
include Module.new { define_method(name) { |*rest| __send__(method, *(args + rest), &block) } }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/tins/xt/null.rb
ADDED
data/lib/tins/xt/p.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'tempfile'
|
5
|
+
require 'tins/xt/file_binary'
|
6
|
+
|
7
|
+
module Tins
|
8
|
+
class TinsFileBinaryTest < Test::Unit::TestCase
|
9
|
+
def test_ascii_buffer_size
|
10
|
+
write_file do |file|
|
11
|
+
file.write "A" * 10 + "\x00"
|
12
|
+
assert_equal true, file.ascii?(:buffer_size => 10)
|
13
|
+
assert_equal true, File.ascii?(file.path, :buffer_size => 10)
|
14
|
+
assert_equal false, file.binary?(:buffer_size => 10)
|
15
|
+
assert_equal false, File.binary?(file.path, :buffer_size => 10)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_binary
|
20
|
+
write_file do |file|
|
21
|
+
file.write "A" * 69 + "\x01" * 31
|
22
|
+
assert_equal true, file.binary?
|
23
|
+
assert_equal true, File.binary?(file.path)
|
24
|
+
assert_equal false, file.ascii?
|
25
|
+
assert_equal false, File.ascii?(file.path)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_ascii_offset
|
30
|
+
write_file do |file|
|
31
|
+
file.write "\x01" * 31 + "A" * 70
|
32
|
+
assert_equal false, file.binary?(:offset => 1)
|
33
|
+
assert_equal false, File.binary?(file.path, :offset => 1)
|
34
|
+
assert_equal true, file.ascii?(:offset => 1)
|
35
|
+
assert_equal true, File.ascii?(file.path, :offset => 1)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_binary_zero
|
40
|
+
write_file do |file|
|
41
|
+
file.write "A" * 50 + "\0" + "A" * 49
|
42
|
+
assert_equal true, file.binary?
|
43
|
+
assert_equal true, File.binary?(file.path)
|
44
|
+
assert_equal false, file.ascii?
|
45
|
+
assert_equal false, File.ascii?(file.path)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_ascii
|
50
|
+
write_file do |file|
|
51
|
+
file.write "A" * 100
|
52
|
+
assert_equal false, file.binary?
|
53
|
+
assert_equal false, File.binary?(file.path)
|
54
|
+
assert_equal true, file.ascii?
|
55
|
+
assert_equal true, File.ascii?(file.path)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def write_file
|
62
|
+
File.open(File.join(Dir.tmpdir, "temp.#$$"), 'wb+') do |file|
|
63
|
+
yield file
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'tempfile'
|
5
|
+
require 'tins/lines_file'
|
6
|
+
|
7
|
+
module Tins
|
8
|
+
class TinsLinesFileTest < Test::Unit::TestCase
|
9
|
+
FILE = <<EOT
|
10
|
+
def foo
|
11
|
+
end
|
12
|
+
|
13
|
+
def bar
|
14
|
+
end
|
15
|
+
|
16
|
+
def baz
|
17
|
+
end
|
18
|
+
EOT
|
19
|
+
|
20
|
+
def test_instantiation
|
21
|
+
write_file do |file|
|
22
|
+
file.write FILE
|
23
|
+
file.rewind
|
24
|
+
assert_kind_of Tins::LinesFile, lf = Tins::LinesFile.for_file(file)
|
25
|
+
assert_equal [ "def foo\n", 1 ], [ lf.line, lf.line.line_number ]
|
26
|
+
assert_kind_of Tins::LinesFile, lf = Tins::LinesFile.for_filename(file.path)
|
27
|
+
assert_equal [ "def foo\n", 1 ], [ lf.line, lf.line.line_number ]
|
28
|
+
file.rewind
|
29
|
+
assert_kind_of Tins::LinesFile, lf = Tins::LinesFile.for_lines(file.readlines)
|
30
|
+
assert_equal [ "def foo\n", 1 ], [ lf.line, lf.line.line_number ]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_match
|
35
|
+
write_file do |file|
|
36
|
+
file.write FILE
|
37
|
+
file.rewind
|
38
|
+
lf = Tins::LinesFile.for_file(file)
|
39
|
+
assert_equal "def foo\n", lf.line
|
40
|
+
assert_equal 1, lf.line.line_number
|
41
|
+
assert_equal %w[foo], lf.match_forward(/def (\S+)/)
|
42
|
+
assert_equal "def foo\n", lf.line
|
43
|
+
assert_equal %w[foo], lf.match_forward(/def (\S+)/, true)
|
44
|
+
assert_equal 2, lf.line.line_number
|
45
|
+
assert_equal "end\n", lf.line
|
46
|
+
assert_equal %w[bar], lf.match_forward(/def (\S+)/, true)
|
47
|
+
assert_equal 5, lf.line.line_number
|
48
|
+
assert_equal %w[baz], lf.match_forward(/def (\S+)/, true)
|
49
|
+
assert_nil lf.match_forward(/def (\S+)/, true)
|
50
|
+
assert_equal "end\n", lf.line
|
51
|
+
assert_equal 8, lf.line.line_number
|
52
|
+
assert_equal %w[baz], lf.match_backward(/def (\S+)/)
|
53
|
+
assert_equal "def baz\n", lf.line
|
54
|
+
assert_equal 7, lf.line.line_number
|
55
|
+
assert_equal %w[baz], lf.match_backward(/def (\S+)/, true)
|
56
|
+
assert_equal "\n", lf.line
|
57
|
+
assert_equal 6, lf.line.line_number
|
58
|
+
assert_equal %w[bar], lf.match_backward(/def (\S+)/, true)
|
59
|
+
assert_equal %w[foo], lf.match_backward(/def (\S+)/, true)
|
60
|
+
assert_equal nil, lf.match_backward(/nada/, true)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_empty_and_not
|
65
|
+
lf = Tins::LinesFile.for_lines []
|
66
|
+
assert_equal true, lf.empty?
|
67
|
+
assert_equal 0, lf.last_line_number
|
68
|
+
assert_equal [], lf.to_a
|
69
|
+
lf = Tins::LinesFile.for_lines [ "foo\n" ]
|
70
|
+
assert_equal false, lf.empty?
|
71
|
+
assert_equal 1, lf.last_line_number
|
72
|
+
assert_equal [ "foo\n" ], lf.to_a
|
73
|
+
assert_equal [ "foo\n", 1 ], [ lf.line, lf.line.line_number ]
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def write_file
|
79
|
+
File.open(File.join(Dir.tmpdir, "temp.#$$"), 'wb+') do |file|
|
80
|
+
yield file
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|