tagen 1.1.7 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -1
- data/.travis.yml +5 -0
- data/CHANGELOG +6 -0
- data/Gemfile +2 -3
- data/Gemfile.lock +13 -15
- data/README.md +20 -39
- data/Rakefile +2 -1
- data/benchmark/a.rb +14 -0
- data/lib/tagen/core.rb +17 -22
- data/lib/tagen/core/array.rb +5 -109
- data/lib/tagen/core/array/append.rb +3 -0
- data/lib/tagen/core/array/delete_values.rb +43 -0
- data/lib/tagen/core/array/extract_options.rb +35 -94
- data/lib/tagen/core/class.rb +1 -0
- data/lib/tagen/core/enumerable.rb +15 -18
- data/lib/tagen/core/enumerator.rb +22 -12
- data/lib/tagen/core/exception.rb +5 -3
- data/lib/tagen/core/file.rb +1 -0
- data/lib/tagen/core/hash.rb +4 -39
- data/lib/tagen/core/integer.rb +2 -0
- data/lib/tagen/core/io.rb +59 -26
- data/lib/tagen/core/kernel.rb +5 -64
- data/lib/tagen/core/kernel/deprecate.rb +5 -0
- data/lib/tagen/core/kernel/platform.rb +46 -0
- data/lib/tagen/core/kernel/shell.rb +45 -0
- data/lib/tagen/core/module.rb +9 -11
- data/lib/tagen/core/numeric.rb +4 -2
- data/lib/tagen/core/object.rb +6 -21
- data/lib/tagen/core/process.rb +6 -4
- data/lib/tagen/core/re.rb +2 -2
- data/lib/tagen/core/string.rb +12 -47
- data/lib/tagen/core/time.rb +30 -38
- data/lib/tagen/erb.rb +10 -8
- data/lib/tagen/net/http.rb +33 -29
- data/lib/tagen/pathname.rb +1 -5
- data/lib/tagen/rbconfig.rb +8 -0
- data/lib/tagen/socket.rb +8 -2
- data/lib/tagen/uri.rb +9 -0
- data/lib/tagen/version.rb +1 -1
- data/lib/tagen/vim.rb +8 -8
- data/lib/tagen/xmpp4r.rb +23 -23
- data/spec/spec_helper.rb +23 -17
- data/spec/tagen/core/array/delete_values_spec.rb +19 -0
- data/spec/tagen/core/array/extract_options_spec.rb +9 -29
- data/spec/tagen/core/enumerable_spec.rb +9 -0
- data/spec/tagen/core/enumerator_spec.rb +10 -12
- data/spec/tagen/core/exception_spec.rb +14 -9
- data/spec/tagen/core/io_spec.rb +20 -0
- data/spec/tagen/core/kernel/platform_spec.rb +92 -0
- data/spec/tagen/core/kernel/shell_spec.rb +27 -0
- data/spec/tagen/core/numeric_spec.rb +10 -0
- data/spec/tagen/core/process_spec.rb +14 -0
- data/spec/tagen/core/re_spec.rb +9 -0
- data/spec/tagen/core/string_spec.rb +9 -0
- data/spec/tagen/core/time_spec.rb +6 -51
- data/spec/tagen/erb_spec.rb +3 -10
- data/spec/tagen/pathname_spec.rb +11 -0
- data/spec/tagen/rbconfig_spec.rb +11 -0
- data/spec/tagen/socket_spec.rb +7 -5
- data/spec/tagen/uri_spec.rb +13 -0
- data/tagen.gemspec +3 -4
- metadata +45 -51
- data/TODO +0 -1
- data/docs/Architecture.md +0 -17
- data/docs/CoreExtensions.md +0 -40
- data/docs/ExtraExtensions.md +0 -20
- data/lib/tagen/RMagick.rb +0 -12
- data/lib/tagen/audioinfo.rb +0 -22
- data/lib/tagen/cairo.rb +0 -811
- data/lib/tagen/core/extend_hash.rb +0 -46
- data/lib/tagen/core/marshal.rb +0 -34
- data/lib/tagen/core/open_option.rb +0 -161
- data/lib/tagen/core/string/pyformat.rb +0 -336
- data/lib/tagen/core/symbol.rb +0 -8
- data/lib/tagen/date.rb +0 -80
- data/lib/tagen/gdk_pixbuf2.rb +0 -26
- data/lib/tagen/gtk2.rb +0 -122
- data/lib/tagen/ncurses.rb +0 -246
- data/lib/tagen/poppler.rb +0 -48
- data/lib/tagen/tree.rb +0 -77
- data/lib/tagen/xmpp4r/roster.rb +0 -20
- data/lib/tagen/yaml.rb +0 -38
- data/spec/tagen/cairo_spec.rb +0 -137
- data/spec/tagen/core/array_spec.rb +0 -42
- data/spec/tagen/core/extend_hash_spec.rb +0 -54
- data/spec/tagen/core/hash_spec.rb +0 -10
- data/spec/tagen/core/module_spec.rb +0 -14
- data/spec/tagen/core/open_option_spec.rb +0 -83
- data/spec/tagen/core/string/pyformat_spec.rb +0 -98
- data/spec/tagen/core/symbol_spec.rb +0 -15
- data/spec/tagen/core_spec.rb +0 -6
- data/spec/tagen/date_spec.rb +0 -146
@@ -0,0 +1 @@
|
|
1
|
+
require "active_support/core_ext/class"
|
@@ -1,20 +1,17 @@
|
|
1
|
-
=begin
|
2
|
-
|
3
|
-
== enumerate it
|
4
|
-
|
5
|
-
* collect{k,v} Array#map!
|
6
|
-
* each_cons(n),{}=>nil each_slice
|
7
|
-
|
8
|
-
== retrive value
|
9
|
-
* [slice]
|
10
|
-
* first/last(),(n) Array#first!
|
11
|
-
* find{} find_index(v),{} find_all Array#find! Array#find_all!
|
12
|
-
* grep(obj),{=>v}
|
13
|
-
|
14
|
-
* Array#delete(v) delete_at(i) clear()
|
15
|
-
|
16
|
-
=end
|
17
1
|
module Enumerable
|
18
|
-
|
19
|
-
|
2
|
+
# Returns an array of every element in enum for each pattern === element
|
3
|
+
#
|
4
|
+
# @example
|
5
|
+
#
|
6
|
+
# a = %w[aa ab bb cc]
|
7
|
+
# a.grep_values(/a./, "bb") -> ["aa", "ab", "bb"]
|
8
|
+
#
|
9
|
+
# @return [Array]
|
10
|
+
def grep_values(*patterns, &blk)
|
11
|
+
patterns.each.with_object([]) {|pat,m|
|
12
|
+
m.push *grep(pat, &blk)
|
13
|
+
}
|
14
|
+
end
|
20
15
|
end
|
16
|
+
|
17
|
+
require "active_support/core_ext/enumerable"
|
@@ -1,11 +1,18 @@
|
|
1
1
|
class Enumerator
|
2
|
-
#
|
3
|
-
# @see with_index, with_object
|
2
|
+
# Combine with_index and with_object.
|
4
3
|
#
|
5
4
|
# @example
|
6
|
-
|
7
|
-
#
|
8
|
-
|
5
|
+
#
|
6
|
+
# %w[a b].each.with_iobject([]){|v, i, memo|
|
7
|
+
# memo << [v, i]
|
8
|
+
# }
|
9
|
+
# -> [a, 0], [b, 1]
|
10
|
+
#
|
11
|
+
# %w[a b].each.with_iobject(2, []){|v, i, memo|
|
12
|
+
# memo << [v, i]
|
13
|
+
# }
|
14
|
+
# -> [a, 2], [b, 3]
|
15
|
+
#
|
9
16
|
# @overload with_iobject(*args)
|
10
17
|
# @param [Fixnum,Object] *args pass Fixnum as offset, otherwise as memo_obj
|
11
18
|
# @return Enumerator
|
@@ -14,16 +21,19 @@ class Enumerator
|
|
14
21
|
# @yieldparam [Object] (*args)
|
15
22
|
# @yieldparam [Fixnum] idx index
|
16
23
|
# @yieldparam [Object] memo_obj
|
17
|
-
|
24
|
+
#
|
25
|
+
# @see with_index
|
26
|
+
# @see with_object
|
27
|
+
def with_iobject(*args, &blk)
|
18
28
|
return self.to_enum(:with_iobject, *args) unless blk
|
19
29
|
|
20
|
-
|
21
|
-
|
22
|
-
memo
|
30
|
+
(offset,), (memo,) = args.partition{|v| Fixnum === v}
|
31
|
+
index = offset || 0
|
32
|
+
raise ArgumentError, "must provide memo object" unless memo
|
23
33
|
|
24
|
-
|
25
|
-
|
26
|
-
|
34
|
+
with_object(memo) do |args2, m|
|
35
|
+
blk.call args2, index, m
|
36
|
+
index += 1
|
27
37
|
end
|
28
38
|
end
|
29
39
|
end
|
data/lib/tagen/core/exception.rb
CHANGED
@@ -1,16 +1,18 @@
|
|
1
|
-
# +
|
1
|
+
# +exit_code+ for shell programming.
|
2
2
|
#
|
3
3
|
# @example
|
4
4
|
#
|
5
5
|
# MyError = Class.new(Exception)
|
6
6
|
# MyError.exit_code = 1
|
7
7
|
#
|
8
|
-
# class MyError2 < Exception
|
8
|
+
# class MyError2 < Exception
|
9
|
+
# @@eixt_code=1
|
10
|
+
# end
|
9
11
|
#
|
10
12
|
# begin
|
11
13
|
# ...
|
12
14
|
# rescue MyError => e
|
13
|
-
# p e.exit_code
|
15
|
+
# p e.exit_code -> 1
|
14
16
|
# end
|
15
17
|
class Exception
|
16
18
|
class << self
|
@@ -0,0 +1 @@
|
|
1
|
+
require "tagen/core/io"
|
data/lib/tagen/core/hash.rb
CHANGED
@@ -1,39 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
# original: delete(key)
|
7
|
-
# current: delete(*keys)
|
8
|
-
#
|
9
|
-
# return [Hash]
|
10
|
-
def delete *keys, &blk
|
11
|
-
values = keys.each.with_object [] do |k,m|
|
12
|
-
m << original_delete(k, &blk)
|
13
|
-
end
|
14
|
-
keys.length==1 ? values[0] : values
|
15
|
-
end
|
16
|
-
|
17
|
-
# confict with awesome_print which extend Array#grep
|
18
|
-
#
|
19
|
-
# grep pat at hash's keys, and return a new hash.
|
20
|
-
# @see Array#grep
|
21
|
-
#
|
22
|
-
# @example
|
23
|
-
#
|
24
|
-
# foo = {a: 1, b: 2}
|
25
|
-
# foo.grep(:a) #=> {a: 1}
|
26
|
-
#
|
27
|
-
# @return [Hash]
|
28
|
-
#def grep(pat_s)
|
29
|
-
# pats = Array===pat_s ? pat_s : [pat_s]
|
30
|
-
#
|
31
|
-
# filtered_keys = pats.each.with_object([]) { |pat, memo|
|
32
|
-
# memo.push *self.keys.grep(pat)
|
33
|
-
# }
|
34
|
-
# filtered_keys.each.with_object({}) { |k,memo|
|
35
|
-
# memo[k] = self[k]
|
36
|
-
# }
|
37
|
-
# end
|
38
|
-
|
39
|
-
end # class Hash
|
1
|
+
require "active_support/core_ext/hash/keys"
|
2
|
+
require "active_support/core_ext/hash/slice"
|
3
|
+
require "active_support/core_ext/hash/deep_dup"
|
4
|
+
require "active_support/core_ext/hash/deep_merge"
|
data/lib/tagen/core/io.rb
CHANGED
@@ -1,29 +1,62 @@
|
|
1
|
-
|
2
|
-
Additional Method list
|
3
|
-
----------------------
|
1
|
+
require "tagen/core/array/extract_options"
|
4
2
|
|
5
|
-
* `#fd` _alias from fileno_
|
6
|
-
|
7
|
-
=end
|
8
3
|
class IO
|
4
|
+
class << self
|
5
|
+
# Extends IO#write with :mkdir option
|
6
|
+
#
|
7
|
+
# @overload write(name, string, [offset], [open_args])
|
8
|
+
# @param [Hash] open_args
|
9
|
+
# @option open_args [Boolean] :mkdir auto create missing directory in path
|
10
|
+
def write_with_tagen(name, string, *args)
|
11
|
+
(offset,), o = args.extract_options
|
12
|
+
mkdir_p(File.dirname(name)) if o[:mkdir]
|
13
|
+
|
14
|
+
write_without_tagen(name, string, offset, o)
|
15
|
+
end
|
16
|
+
|
17
|
+
alias write_without_tagen write
|
18
|
+
alias write write_with_tagen
|
19
|
+
|
20
|
+
# A convient method to append a file.
|
21
|
+
#
|
22
|
+
# @overload append(name, string, [offset], [open_args])
|
23
|
+
# @param [Hash] open_args
|
24
|
+
# @option open_args [Boolean] :mkdir auto create missing directory in path
|
25
|
+
#
|
26
|
+
# @example
|
27
|
+
#
|
28
|
+
# File.append("/tmp/a", "hello world")
|
29
|
+
#
|
30
|
+
# @see write
|
31
|
+
def append(name, string, *args)
|
32
|
+
(offset,), o = args.extract_options
|
33
|
+
o[:mode] = "a"
|
34
|
+
|
35
|
+
write(name, string, offset, o)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
# @param [Hash] o options
|
41
|
+
# @option o [Fixnum] :mode (0775)
|
42
|
+
def mkdir_p(path, o={})
|
43
|
+
return if File.exists?(path)
|
44
|
+
|
45
|
+
o[:mode] ||= 0775
|
46
|
+
|
47
|
+
stack = []
|
48
|
+
until path == stack.last
|
49
|
+
break if File.exists?(path)
|
50
|
+
stack << path
|
51
|
+
path = File.dirname(path)
|
52
|
+
end
|
53
|
+
|
54
|
+
stack.reverse.each do |p|
|
55
|
+
Dir.mkdir(p)
|
56
|
+
File.chmod(o[:mode], p)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
9
60
|
|
10
|
-
|
11
|
-
|
12
|
-
# use open(path, "w"){|f| f.write(text)}
|
13
|
-
#
|
14
|
-
# @param [String] path
|
15
|
-
# @param [String] text
|
16
|
-
# @return [String]
|
17
|
-
def self.write(path, text) open(path, "w"){|f| f.write(text)} end
|
18
|
-
|
19
|
-
# a convient function to append text.
|
20
|
-
#
|
21
|
-
# use open(path, "a"){|f| f.write(text)}
|
22
|
-
#
|
23
|
-
# @param [String] path
|
24
|
-
# @param [String] text
|
25
|
-
# @return [String]
|
26
|
-
def self.append(path, text) open(path, "a"){|f| f.write(text)} end
|
27
|
-
|
28
|
-
alias fd fileno
|
29
|
-
end # class IO
|
61
|
+
alias fd fileno
|
62
|
+
end
|
data/lib/tagen/core/kernel.rb
CHANGED
@@ -1,64 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
# @overload sh(cmd, o={})
|
7
|
-
# @param [String] cmd a shell command
|
8
|
-
# @param [Symbol, Hash] o support {Array#extract_extend_options}
|
9
|
-
# @option o [Boolean] :verbose print cmd if verbose
|
10
|
-
# @return [String] result
|
11
|
-
def sh(cmd, *args)
|
12
|
-
o = args.extract_extend_options!
|
13
|
-
puts cmd if o[:verbose]
|
14
|
-
`#{cmd}`
|
15
|
-
end
|
16
|
-
|
17
|
-
alias original_system system
|
18
|
-
|
19
|
-
# like Builtin system, but add option support
|
20
|
-
#
|
21
|
-
# @overload system(cmd, o={})
|
22
|
-
# @param [String] cmd
|
23
|
-
# @param [Symbol, Hash] o support {Array#extract_extend_options}
|
24
|
-
# @option o [Boolean] :verbose print cmd if verbose
|
25
|
-
# @return [Boolean,nil] true false nil
|
26
|
-
def system(*cmds)
|
27
|
-
o = cmds.extract_extend_options!
|
28
|
-
cmd = cmds.join(" ")
|
29
|
-
puts cmd if o[:verbose]
|
30
|
-
original_system cmd
|
31
|
-
end
|
32
|
-
|
33
|
-
# convert block to method.
|
34
|
-
#
|
35
|
-
# you can call a block with arguments
|
36
|
-
#
|
37
|
-
# @example USAGE
|
38
|
-
# instance_eval(&blk)
|
39
|
-
# blk2method(&blk).call *args
|
40
|
-
#
|
41
|
-
def blk2method(&blk)
|
42
|
-
self.class.class_eval {
|
43
|
-
define_method(:__blk2method, &blk)
|
44
|
-
}
|
45
|
-
method(:__blk2method)
|
46
|
-
end
|
47
|
-
|
48
|
-
# detect Platform information.
|
49
|
-
#
|
50
|
-
# RUBY_PLATFORM is "i686-linux" "i386-migw32"
|
51
|
-
#
|
52
|
-
# @return [Boolean]
|
53
|
-
def linux?
|
54
|
-
RUBY_PLATFORM =~ /linux/
|
55
|
-
end
|
56
|
-
|
57
|
-
# detect PLatform information.
|
58
|
-
#
|
59
|
-
# @return [Boolean]
|
60
|
-
# @see {#linux?}
|
61
|
-
def win32?
|
62
|
-
RUBY_PLATFORM =~ /mingw32|mswin/
|
63
|
-
end
|
64
|
-
end # module Kernel
|
1
|
+
require "tagen/core/kernel/shell"
|
2
|
+
require "tagen/core/kernel/deprecate"
|
3
|
+
require "tagen/core/kernel/platform"
|
4
|
+
require "active_support/core_ext/kernel/reporting"
|
5
|
+
require "active_support/core_ext/kernel/agnostics"
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "rbconfig"
|
2
|
+
|
3
|
+
module Kernel
|
4
|
+
private
|
5
|
+
# Return true when ruby is running in Linux Operation System.
|
6
|
+
def linux?
|
7
|
+
RbConfig::CONFIG["host_os"] =~ /linux|cygwin/
|
8
|
+
end
|
9
|
+
|
10
|
+
# Return true when ruby is running in Mac OS X.
|
11
|
+
def mac?
|
12
|
+
RbConfig::CONFIG["host_os"] =~ /mac|darwin/
|
13
|
+
end
|
14
|
+
|
15
|
+
# Return true when ruby is running in BSD Operation System.
|
16
|
+
def bsd?
|
17
|
+
RbConfig::CONFIG["host_os"] =~ /bsd/
|
18
|
+
end
|
19
|
+
|
20
|
+
# Return true when ruby is running in Windows Operation System.
|
21
|
+
def windows?
|
22
|
+
RbConfig::CONFIG["host_os"] =~ /mswin|mingw/
|
23
|
+
end
|
24
|
+
|
25
|
+
# Return true when ruby is running in Solaris Windows Operation System.
|
26
|
+
def solaris?
|
27
|
+
RbConfig::CONFIG["host_os"] =~ /solaris|sunos/
|
28
|
+
end
|
29
|
+
|
30
|
+
# Return true when ruby is running in symbian.
|
31
|
+
#
|
32
|
+
# TODO: who knows what symbian returns?
|
33
|
+
def symbian?
|
34
|
+
RbConfig::CONFIG["host_os"] =~ /symbian/
|
35
|
+
end
|
36
|
+
|
37
|
+
# Return true when ruby is running in Posix-compablity Operation System.
|
38
|
+
def posix?
|
39
|
+
linux? or mac? or bsd? or solaris? or begin
|
40
|
+
fork do end
|
41
|
+
true
|
42
|
+
rescue NotImplementedError, NoMethodError
|
43
|
+
false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Kernel
|
2
|
+
private
|
3
|
+
|
4
|
+
# run `cmd` with :show_cmd option.
|
5
|
+
#
|
6
|
+
# @overload sh(cmd, o={})
|
7
|
+
# @param [String] cmd a shell command
|
8
|
+
# @param [Hash] o
|
9
|
+
# @option o [Boolean] :show_cmd print cmd if true
|
10
|
+
# @return [String] result
|
11
|
+
#
|
12
|
+
# @see Kernel#`
|
13
|
+
def sh(cmd, *args)
|
14
|
+
o = args.last.instance_of?(Hash) ? args.pop : {}
|
15
|
+
puts cmd if o[:show_cmd]
|
16
|
+
`#{cmd}`
|
17
|
+
end
|
18
|
+
|
19
|
+
# Extends the default Kernel#system with :show_cmd option.
|
20
|
+
#
|
21
|
+
# @overload system([env,] command...[, options])
|
22
|
+
# @option options [Boolean] :show_cmd print cmd if true
|
23
|
+
#
|
24
|
+
# @see Kernel#system
|
25
|
+
def system_with_tagen(*args)
|
26
|
+
o = args.last.instance_of?(Hash) ? args.pop : {}
|
27
|
+
if Hash === args[0] then
|
28
|
+
env, *cmds = args
|
29
|
+
else
|
30
|
+
cmds = args
|
31
|
+
end
|
32
|
+
|
33
|
+
if o[:show_cmd]
|
34
|
+
puts cmds.join(" ")
|
35
|
+
o.delete(:show_cmd)
|
36
|
+
end
|
37
|
+
|
38
|
+
system_without_tagen *args, o
|
39
|
+
end
|
40
|
+
|
41
|
+
alias system_without_tagen system
|
42
|
+
alias system system_with_tagen
|
43
|
+
end
|
44
|
+
|
45
|
+
$sudo = Process.pid != 0 && system("which sudo &>/dev/null") ? "sudo" : ""
|
data/lib/tagen/core/module.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
end #class Module
|
1
|
+
require "active_support/core_ext/module/aliasing"
|
2
|
+
require "active_support/core_ext/module/introspection"
|
3
|
+
require "active_support/core_ext/module/anonymous"
|
4
|
+
require "active_support/core_ext/module/reachable"
|
5
|
+
require "active_support/core_ext/module/attribute_accessors"
|
6
|
+
require "active_support/core_ext/module/attr_internal"
|
7
|
+
require "active_support/core_ext/module/delegation"
|
8
|
+
require "active_support/core_ext/module/remove_method"
|
9
|
+
require "active_support/core_ext/module/qualified_const"
|
data/lib/tagen/core/numeric.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
class Numeric
|
2
|
-
# equivalent to a.fdiv(b).ceil
|
2
|
+
# equivalent to `a.fdiv(b).ceil`. +1
|
3
3
|
#
|
4
4
|
# @param [Numeric] num
|
5
5
|
# @return [Numeric]
|
6
|
-
def div2
|
6
|
+
def div2(num)
|
7
7
|
d, m = divmod(num)
|
8
8
|
d + (m==0 ? 0 : 1)
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
require "active_support/core_ext/numeric/bytes"
|