rmtools 1.2.10 → 1.2.11
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +8 -0
- data/Rakefile +2 -2
- data/lib/rmtools/console/coloring.rb +12 -1
- data/lib/rmtools/core/module.rb +1 -1
- data/lib/rmtools/core/proc.rb +3 -3
- data/lib/rmtools/db/active_record.rb +92 -78
- data/lib/rmtools/dev/blackhole.rb +3 -0
- data/lib/rmtools/dev/present.rb +2 -2
- data/lib/rmtools/dev/trace_format.rb +3 -2
- data/lib/rmtools/dev/traceback.rb +6 -3
- data/lib/rmtools/enumerable/array.rb +4 -0
- data/lib/rmtools/enumerable/array_iterators.rb +2 -2
- data/lib/rmtools/xml/libxml.rb +1 -1
- metadata +78 -76
data/README.txt
CHANGED
@@ -4,10 +4,18 @@ Copyright (c) 2010-2012
|
|
4
4
|
This work is licensed under the same license as Ruby language.
|
5
5
|
|
6
6
|
== RMTools
|
7
|
+
https://github.com/tinbka/rmtools
|
7
8
|
Methods for basic classes addon collection.
|
8
9
|
|
9
10
|
== CHANGES
|
10
11
|
|
12
|
+
== Version 1.2.11
|
13
|
+
|
14
|
+
* Added Array#select_by and #reject_by pattern-iterators
|
15
|
+
* Fixed ActiveRecord::Base.select_rand
|
16
|
+
* Restricted RMTools.format_trace to use with Rails because of hard slowdown
|
17
|
+
* Updated Proc constants for ruby 1.9
|
18
|
+
|
11
19
|
== Version 1.2.10
|
12
20
|
|
13
21
|
* Update String#parse:caller to parse ruby 1.9 "block level". Now block level processes in RMLogger and RMTools.format_trace
|
data/Rakefile
CHANGED
@@ -31,6 +31,16 @@ module RMTools
|
|
31
31
|
method_defined? :b and undef_method :b
|
32
32
|
method_defined? :p and undef_method :p
|
33
33
|
|
34
|
+
def demo(str, pattern=nil)
|
35
|
+
%w[black red green yellow blue purple cyan gray].xprod(%w[bold underline graybg boldbg]).each {|color, effect|
|
36
|
+
if pattern
|
37
|
+
puts ghl(str, pattern, "#{color}_#{effect}")
|
38
|
+
else
|
39
|
+
puts paint(str, transparent, color, effect)
|
40
|
+
end
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
34
44
|
def paint(str, transparent, num=nil, effect=nil)
|
35
45
|
# default cmd.exe cannot into ANSI
|
36
46
|
str = str.to_s
|
@@ -40,7 +50,7 @@ module RMTools
|
|
40
50
|
if !num
|
41
51
|
effect = Effects[num]
|
42
52
|
elsif num.is Array
|
43
|
-
num, effect = num
|
53
|
+
num, effect = num
|
44
54
|
end
|
45
55
|
end
|
46
56
|
effect = Effects[effect] if effect.is String
|
@@ -57,6 +67,7 @@ module RMTools
|
|
57
67
|
end
|
58
68
|
end
|
59
69
|
|
70
|
+
# Without +transparent+ Painter stops coloring once it find colored substring
|
60
71
|
# puts "words have one #{Painter.red_bold 'highlighted'} among them"
|
61
72
|
# <default>words have one <red>highlighted</red> among them</default>
|
62
73
|
# puts Painter.gray "words have one #{Painter.red_bold 'highlighted'} among them"
|
data/lib/rmtools/core/module.rb
CHANGED
data/lib/rmtools/core/proc.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
class Proc
|
3
|
-
NULL = lambda {} unless defined? Proc::NULL
|
4
|
-
TRUE = lambda {true} unless defined? Proc::TRUE
|
5
|
-
FALSE = lambda {false} unless defined? Proc::FALSE
|
3
|
+
NULL = lambda {|*x|} unless defined? Proc::NULL
|
4
|
+
TRUE = lambda {|*x| true} unless defined? Proc::TRUE
|
5
|
+
FALSE = lambda {|*x| false} unless defined? Proc::FALSE
|
6
6
|
attr_accessor :string
|
7
7
|
|
8
8
|
def when
|
@@ -19,9 +19,98 @@ module ActiveRecord
|
|
19
19
|
|
20
20
|
class Base
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
class << self
|
23
|
+
|
24
|
+
def establish_connection_with config
|
25
|
+
ActiveRecord.establish_connection_with config
|
26
|
+
end
|
27
|
+
|
28
|
+
def merge_conditions(*conditions)
|
29
|
+
segments = conditions.map {|condition|
|
30
|
+
sanitize_sql condition
|
31
|
+
}.reject {|condition|
|
32
|
+
condition.blank?
|
33
|
+
}
|
34
|
+
"(#{segments.join(') AND (')})" unless segments.empty?
|
35
|
+
end
|
36
|
+
|
37
|
+
def execute_sanitized(sql)
|
38
|
+
connection.execute sanitize_sql sql
|
39
|
+
end
|
40
|
+
|
41
|
+
# requires primary key
|
42
|
+
def forced_create(hash)
|
43
|
+
names = columns.names
|
44
|
+
id = (hash[primary_key.to_sym] ||= maximum(primary_key)+1)
|
45
|
+
execute_sanitized([
|
46
|
+
"INSERT INTO #{quoted_table_name} VALUES (:#{names*', :'})",
|
47
|
+
Hash[names.map {|name| [name.to_sym, nil]}].merge(hash)
|
48
|
+
])
|
49
|
+
find_by_sql(["SELECT * FROM #{quoted_table_name} WHERE #{primary_key} = ?", id])[0]
|
50
|
+
end
|
51
|
+
|
52
|
+
# values must be 2-tuple array [[column1, value1], [column2, value2], ...] and columns must be in order they've been created
|
53
|
+
def insert_unless_exist(table, values)
|
54
|
+
table = connection.quote_table_name table
|
55
|
+
if execute_sanitized(["SELECT COUNT(*) FROM #{table} WHERE #{vaues.firsts.map {|v| "#{connection.quote_column_name v}=?"}*' AND '} LIMIT 1", *values.lasts]).to_a.flatten > 0
|
56
|
+
false
|
57
|
+
else
|
58
|
+
execute_sanitized ["INSERT INTO #{table} VALUES (#{['?']*values.size*','})", *values.lasts]
|
59
|
+
true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def select_rand(limit, options={})
|
64
|
+
cnt = options.delete :cnt
|
65
|
+
_where = options.delete :where
|
66
|
+
cnt_where = options.delete(:cnt_where) || _where
|
67
|
+
if !cnt and !cnt_where
|
68
|
+
ids = options[:ids] || pluck(:id)
|
69
|
+
if fields = options[:fields]
|
70
|
+
return select(fields).where(id: ids.randsample(limit)).all
|
71
|
+
else
|
72
|
+
return where(id: ids.randsample(limit)).all
|
73
|
+
end
|
74
|
+
#cnt = options[:ids].size
|
75
|
+
#where ||= "#{table_name}.id IN (:ids)"
|
76
|
+
end
|
77
|
+
discnt = options.delete :discnt
|
78
|
+
tables = options.delete(:tables) || table_name
|
79
|
+
cnt_tables = options.delete(:cnt_tables) || tables
|
80
|
+
fields = (options.delete(:fields) || %w[*])*','
|
81
|
+
|
82
|
+
find_by_sql(["SELECT * FROM (
|
83
|
+
SELECT @cnt:=#{cnt ? cnt.to_i : 'COUNT(*)'}+1#{-discnt.to_i if discnt}, @lim:=#{limit.to_i}#{" FROM #{cnt_tables} WHERE #{cnt_where}" if !cnt}
|
84
|
+
) vars
|
85
|
+
STRAIGHT_JOIN (
|
86
|
+
SELECT #{fields}, @lim:=@lim-1 FROM #{tables} WHERE (@cnt:=@cnt-1) AND RAND() < @lim/@cnt#{" AND (#{_where})" if _where}
|
87
|
+
) i", options])
|
88
|
+
end
|
89
|
+
|
90
|
+
class_attribute :enums
|
91
|
+
def enum hash
|
92
|
+
key = hash.keys.first
|
93
|
+
(self.enums ||= {}).merge! hash
|
94
|
+
define_attribute_methods if !attribute_methods_generated?
|
95
|
+
class_eval %{
|
96
|
+
def #{key}
|
97
|
+
missing_attribute('#{key}', caller) unless @attributes.has_key?('#{key}')
|
98
|
+
self.class.enums[:#{key}][@attributes['#{key}']]
|
99
|
+
end
|
100
|
+
def #{key}=(val)
|
101
|
+
write_attribute('#{key}', Fixnum === val ? val : self.class.enums[:#{key}].index val.to_s
|
102
|
+
end
|
103
|
+
}
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
# fix for thinking_sphinx equation in #instances_from_class:
|
109
|
+
# ids.collect {|obj_id| instances.detect do |obj| obj.primary_key_for_sphinx == obj_id end}
|
110
|
+
# where obj_id is Array
|
111
|
+
#def primary_key_for_sphinx
|
112
|
+
# [read_attribute(self.class.primary_key_for_sphinx)]
|
113
|
+
#end
|
25
114
|
|
26
115
|
def to_hash
|
27
116
|
return attributes if respond_to? :attributes
|
@@ -50,85 +139,10 @@ module ActiveRecord
|
|
50
139
|
self.class.destroy_all(attributes)
|
51
140
|
end
|
52
141
|
|
53
|
-
def self.merge_conditions(*conditions)
|
54
|
-
segments = conditions.map {|condition|
|
55
|
-
sanitize_sql condition
|
56
|
-
}.reject {|condition|
|
57
|
-
condition.blank?
|
58
|
-
}
|
59
|
-
"(#{segments.join(') AND (')})" unless segments.empty?
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.execute_sanitized(sql)
|
63
|
-
connection.execute sanitize_sql sql
|
64
|
-
end
|
65
|
-
|
66
|
-
# requires primary key
|
67
|
-
def self.forced_create(hash)
|
68
|
-
names = columns.names
|
69
|
-
id = (hash[primary_key.to_sym] ||= maximum(primary_key)+1)
|
70
|
-
execute_sanitized([
|
71
|
-
"INSERT INTO #{quoted_table_name} VALUES (:#{names*', :'})",
|
72
|
-
Hash[names.map {|name| [name.to_sym, nil]}].merge(hash)
|
73
|
-
])
|
74
|
-
find_by_sql(["SELECT * FROM #{quoted_table_name} WHERE #{primary_key} = ?", id])[0]
|
75
|
-
end
|
76
|
-
|
77
|
-
# values must be 2-tuple array [[column1, value1], [column2, value2], ...] and columns must be in order they've been created
|
78
|
-
def self.insert_unless_exist(table, values)
|
79
|
-
table = connection.quote_table_name table
|
80
|
-
if execute_sanitized(["SELECT COUNT(*) FROM #{table} WHERE #{vaues.firsts.map {|v| "#{connection.quote_column_name v}=?"}*' AND '} LIMIT 1", *values.lasts]).to_a.flatten > 0
|
81
|
-
false
|
82
|
-
else
|
83
|
-
execute_sanitized ["INSERT INTO #{table} VALUES (#{['?']*values.size*','})", *values.lasts]
|
84
|
-
true
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
142
|
def resource_path
|
89
143
|
"#{self.class.name.tableize}/#{id}"
|
90
144
|
end
|
91
145
|
|
92
|
-
def self.select_rand(limit, options={})
|
93
|
-
cnt = options.delete :cnt
|
94
|
-
discnt = options.delete :discnt
|
95
|
-
where = options.delete :where
|
96
|
-
cnt_where = options.delete :cnt_where
|
97
|
-
tables = options.delete :tables
|
98
|
-
cnt_tables = options.delete :cnt_tables
|
99
|
-
fields = options.delete :fields
|
100
|
-
|
101
|
-
find_by_sql(["SELECT * FROM (
|
102
|
-
SELECT @cnt:=#{cnt ? cnt.to_i : 'COUNT(*)'}+1#{-discnt.to_i if discnt}, @lim:=#{limit.to_i}#{"FROM #{options[:cnt_tables] || table_name} WHERE #{cnt_where}" if !cnt}
|
103
|
-
) vars
|
104
|
-
STRAIGHT_JOIN (
|
105
|
-
SELECT #{fields || table_name+'.*'}, @lim:=@lim-1 FROM #{tables || table_name} WHERE (@cnt:=@cnt-1) AND RAND() < @lim/@cnt#{" AND (#{where})" if where}
|
106
|
-
) i", options])
|
107
|
-
end
|
108
|
-
|
109
|
-
class_attribute :enums
|
110
|
-
def self.enum hash
|
111
|
-
key = hash.keys.first
|
112
|
-
(self.enums ||= {}).merge! hash
|
113
|
-
define_attribute_methods if !attribute_methods_generated?
|
114
|
-
class_eval %{
|
115
|
-
def #{key}
|
116
|
-
missing_attribute('#{key}', caller) unless @attributes.has_key?('#{key}')
|
117
|
-
self.class.enums[:#{key}][@attributes['#{key}']]
|
118
|
-
end
|
119
|
-
def #{key}=(val)
|
120
|
-
write_attribute('#{key}', Fixnum === val ? val : self.class.enums[:#{key}].index val.to_s
|
121
|
-
end
|
122
|
-
}
|
123
|
-
end
|
124
|
-
|
125
|
-
# fix for thinking_sphinx equation in #instances_from_class:
|
126
|
-
# ids.collect {|obj_id| instances.detect do |obj| obj.primary_key_for_sphinx == obj_id end}
|
127
|
-
# where obj_id is Array
|
128
|
-
#def primary_key_for_sphinx
|
129
|
-
# [read_attribute(self.class.primary_key_for_sphinx)]
|
130
|
-
#end
|
131
|
-
|
132
146
|
end
|
133
147
|
|
134
148
|
class Relation
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
class BlackHole
|
3
|
+
__init__
|
3
4
|
|
4
5
|
# abc = BlackHole.new
|
5
6
|
# (abc.first.get {|_| !_}.something << 'blah blah')[123].raise!
|
@@ -15,6 +16,8 @@ class BlackHole
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
19
|
+
def b; false end
|
20
|
+
|
18
21
|
if RUBY_VERSION < '1.9'
|
19
22
|
undef id
|
20
23
|
end
|
data/lib/rmtools/dev/present.rb
CHANGED
@@ -14,7 +14,7 @@ class Array
|
|
14
14
|
res = "[ "
|
15
15
|
indent = (size-1).to_s.size
|
16
16
|
res << map_with_index {|k,i|
|
17
|
-
"#{i.to_s.rjust(indent)}: #{(k.is String and !inspect_string) ? k : k.inspect}"
|
17
|
+
"#{RMTools::Painter.w(i.to_s.rjust(indent))}: #{(k.is String and !inspect_string) ? k : k.inspect}"
|
18
18
|
}*"\n "
|
19
19
|
res << "]"
|
20
20
|
puts res
|
@@ -52,7 +52,7 @@ class Hash
|
|
52
52
|
str = "{ "
|
53
53
|
sorted = sort rescue to_a.sort_by_to_s
|
54
54
|
str << sorted.map {|k,v|
|
55
|
-
"#{(k.is String and !inspect_string) ? k : k.inspect} => #{(v.is String and !inspect_string) ? v : v.inspect},"
|
55
|
+
"#{RMTools::Painter.w((k.is String and !inspect_string) ? k : k.inspect)} => #{(v.is String and !inspect_string) ? v : v.inspect},"
|
56
56
|
}*"\n "
|
57
57
|
str << "}"
|
58
58
|
puts str
|
@@ -25,10 +25,11 @@ module RMTools
|
|
25
25
|
def format_trace(a)
|
26
26
|
bt, steps, i = [], [], 0
|
27
27
|
m = a[0].parse:caller
|
28
|
-
|
28
|
+
# seems like that bug is fixed for now
|
29
|
+
#m.line -= 1 if m and m.file =~ /\.haml$/
|
29
30
|
while i < a.size
|
30
31
|
m2 = a[i+1] && a[i+1].parse(:caller)
|
31
|
-
m2.line -= 1 if m2 and m2.file =~ /\.haml$/
|
32
|
+
#m2.line -= 1 if m2 and m2.file =~ /\.haml$/
|
32
33
|
if !m or m.path =~ IgnoreFiles
|
33
34
|
nil
|
34
35
|
else
|
@@ -2,8 +2,11 @@
|
|
2
2
|
RMTools::require 'dev/trace_format'
|
3
3
|
require 'active_support/core_ext/class/attribute'
|
4
4
|
|
5
|
-
#
|
6
|
-
#
|
5
|
+
# As for rmtools-1.1.0, 1.9.1 may hung up processing IO while generating traceback
|
6
|
+
# As for 1.2.10 with 1.9.3 with readline support it isn't hung up anymore
|
7
|
+
# Still it's not suitable for Rails, too many raises inside the engine slow all the wor in 5-10 times.
|
8
|
+
# I need a way to format backtrace only in case it is actually about to be printed onto log or console/
|
9
|
+
unless ENV['RAILS_ENV']
|
7
10
|
class Exception
|
8
11
|
alias :set_bt :set_backtrace
|
9
12
|
class_attribute :__trace_format
|
@@ -35,4 +38,4 @@ require 'active_support/core_ext/class/attribute'
|
|
35
38
|
class SystemStackError
|
36
39
|
trace_format false
|
37
40
|
end
|
38
|
-
|
41
|
+
end
|
@@ -14,7 +14,7 @@ unless defined? RMTools::Iterators
|
|
14
14
|
# => [[1, 2, 3], [3, 4, 6]]
|
15
15
|
class Array
|
16
16
|
alias :throw_no :method_missing
|
17
|
-
RMTools::Iterators = %r{^(#{(instance_methods.grep(/_by$/)+%w{every no select reject partition find_all find sum foldr find_by select_by})*'|'})_([\w\d\_]+[!?]?)}
|
17
|
+
RMTools::Iterators = %r{^(#{(instance_methods.grep(/_by$/)+%w{every no select reject partition find_all find sum foldr find_by select_by reject_by})*'|'})_([\w\d\_]+[!?]?)}
|
18
18
|
|
19
19
|
def method_missing(method, *args, &block)
|
20
20
|
if match = (meth = method.to_s).match(RMTools::Iterators)
|
@@ -26,7 +26,7 @@ unless defined? RMTools::Iterators
|
|
26
26
|
end
|
27
27
|
return case iterator
|
28
28
|
when :sum; sum(args.shift) {|i| i.__send__ meth, *args, &block}
|
29
|
-
when :find_by;
|
29
|
+
when :find_by, :select_by, :reject_by; __send__(iterator, meth, *args)
|
30
30
|
else __send__(iterator) {|i| i.__send__ meth, *args, &block}
|
31
31
|
end
|
32
32
|
rescue NoMethodError => e
|
data/lib/rmtools/xml/libxml.rb
CHANGED
metadata
CHANGED
@@ -1,81 +1,92 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmtools
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.11
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
- 10
|
10
|
-
version: 1.2.10
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Sergey Baev
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-08-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rake
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 49
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 8
|
32
|
-
- 7
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.8.7
|
34
22
|
type: :runtime
|
35
|
-
version_requirements: *id001
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: activesupport
|
38
23
|
prerelease: false
|
39
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.8.7
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activesupport
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
40
33
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 19
|
45
|
-
segments:
|
46
|
-
- 2
|
47
|
-
- 3
|
48
|
-
- 8
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
49
37
|
version: 2.3.8
|
50
38
|
type: :runtime
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: hoe
|
54
39
|
prerelease: false
|
55
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.3.8
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rdoc
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.10'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
57
|
none: false
|
57
|
-
requirements:
|
58
|
+
requirements:
|
58
59
|
- - ~>
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.10'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: hoe
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.0'
|
65
70
|
type: :development
|
66
|
-
|
67
|
-
|
68
|
-
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '3.0'
|
78
|
+
description: Applied library primarily for debug and text/arrays/files processing
|
79
|
+
purposes.
|
80
|
+
email:
|
69
81
|
- tinbka@gmail.com
|
70
82
|
executables: []
|
71
|
-
|
72
|
-
extensions:
|
83
|
+
extensions:
|
73
84
|
- ext/extconf.rb
|
74
|
-
extra_rdoc_files:
|
85
|
+
extra_rdoc_files:
|
75
86
|
- ./Manifest.txt
|
76
87
|
- ./License.txt
|
77
88
|
- ./README.txt
|
78
|
-
files:
|
89
|
+
files:
|
79
90
|
- ext/extconf.rb
|
80
91
|
- ext/rmtools.h
|
81
92
|
- ext/rmtools.cpp
|
@@ -173,39 +184,30 @@ files:
|
|
173
184
|
- ./Manifest.txt
|
174
185
|
- ./License.txt
|
175
186
|
- ./README.txt
|
176
|
-
homepage:
|
187
|
+
homepage: https://github.com/tinbka/rmtools
|
177
188
|
licenses: []
|
178
|
-
|
179
189
|
post_install_message:
|
180
|
-
rdoc_options:
|
190
|
+
rdoc_options:
|
181
191
|
- --main
|
182
192
|
- README.txt
|
183
|
-
require_paths:
|
193
|
+
require_paths:
|
184
194
|
- lib
|
185
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
195
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
186
196
|
none: false
|
187
|
-
requirements:
|
188
|
-
- -
|
189
|
-
- !ruby/object:Gem::Version
|
190
|
-
|
191
|
-
|
192
|
-
- 0
|
193
|
-
version: "0"
|
194
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
197
|
+
requirements:
|
198
|
+
- - ! '>='
|
199
|
+
- !ruby/object:Gem::Version
|
200
|
+
version: '0'
|
201
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
202
|
none: false
|
196
|
-
requirements:
|
197
|
-
- -
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
|
200
|
-
segments:
|
201
|
-
- 0
|
202
|
-
version: "0"
|
203
|
+
requirements:
|
204
|
+
- - ! '>='
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0'
|
203
207
|
requirements: []
|
204
|
-
|
205
208
|
rubyforge_project: rmtools
|
206
|
-
rubygems_version: 1.8.
|
209
|
+
rubygems_version: 1.8.24
|
207
210
|
signing_key:
|
208
211
|
specification_version: 3
|
209
212
|
summary: Yet another Ruby applied lib
|
210
213
|
test_files: []
|
211
|
-
|