procemon 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +13 -0
- data/Gemfile.lock +72 -0
- data/LICENSE.txt +20 -0
- data/README.md +4 -0
- data/README.rdoc +19 -0
- data/Rakefile +170 -0
- data/VERSION +1 -0
- data/dump/macaddr.rb +95 -0
- data/dump/uuid.rb +324 -0
- data/lib/procemon.rb +55 -0
- data/lib/procemon/function/application.rb +20 -0
- data/lib/procemon/function/argv.rb +84 -0
- data/lib/procemon/function/daemon.rb +188 -0
- data/lib/procemon/function/documentation.rb +10 -0
- data/lib/procemon/function/eval.rb +76 -0
- data/lib/procemon/function/meta/inject_methods.rb +74 -0
- data/lib/procemon/function/name.rb +13 -0
- data/lib/procemon/function/port.rb +35 -0
- data/lib/procemon/function/require.rb +241 -0
- data/lib/procemon/function/str2duck.rb +85 -0
- data/lib/procemon/function/systemu.rb +360 -0
- data/lib/procemon/function/tmp_dir.rb +20 -0
- data/lib/procemon/mpatch/array.rb +59 -0
- data/lib/procemon/mpatch/class.rb +85 -0
- data/lib/procemon/mpatch/exception.rb +0 -0
- data/lib/procemon/mpatch/file.rb +48 -0
- data/lib/procemon/mpatch/hash.rb +82 -0
- data/lib/procemon/mpatch/kernel.rb +9 -0
- data/lib/procemon/mpatch/object.rb +172 -0
- data/lib/procemon/mpatch/process.rb +14 -0
- data/lib/procemon/mpatch/random.rb +43 -0
- data/lib/procemon/mpatch/string.rb +73 -0
- data/lib/procemon/mpatch/yml.rb +11 -0
- data/procemon.gemspec +58 -0
- data/test/test.rb +17 -0
- metadata +86 -0
@@ -0,0 +1,20 @@
|
|
1
|
+
module Procemon
|
2
|
+
class << self
|
3
|
+
|
4
|
+
require "tmpdir"
|
5
|
+
def tmpdir_init
|
6
|
+
begin
|
7
|
+
Dir.mkdir File.join(Dir.tmpdir,$0)
|
8
|
+
rescue Errno::EEXIST
|
9
|
+
end
|
10
|
+
|
11
|
+
Application.tmpdir= File.join(Dir.tmpdir,$0)
|
12
|
+
|
13
|
+
Application.pid= File.join(Application.tmpdir,"pid")
|
14
|
+
Application.log= File.join(Application.tmpdir,"log")
|
15
|
+
Application.daemon_stderr= File.join(Application.tmpdir,"daemon_stderr")
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class Array
|
2
|
+
|
3
|
+
# remove arguments or array of
|
4
|
+
# parameters from the main array
|
5
|
+
def trim(*args)
|
6
|
+
|
7
|
+
args.dup.each do |one_element|
|
8
|
+
if one_element.class == Array
|
9
|
+
args.delete_at(args.index(one_element))
|
10
|
+
args= args+one_element
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
delete_array= Array.new
|
15
|
+
args.each do |one_element|
|
16
|
+
index= self.index(one_element)
|
17
|
+
unless index.nil?
|
18
|
+
delete_array.push index
|
19
|
+
self.delete_at(index)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
return self
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
# return index of the target element
|
28
|
+
def index_of(target_element)
|
29
|
+
array = self
|
30
|
+
hash = Hash[array.map.with_index.to_a]
|
31
|
+
return hash[target_element]
|
32
|
+
end
|
33
|
+
|
34
|
+
# remove n. element
|
35
|
+
def pinch n=1
|
36
|
+
return self[0..(self.count-2)]
|
37
|
+
end
|
38
|
+
|
39
|
+
# return boolean by other array
|
40
|
+
# all element included or
|
41
|
+
# not in the target array
|
42
|
+
def contain?(oth_array)#anothere array
|
43
|
+
(oth_array & self) == oth_array
|
44
|
+
#(oth_array - self).size == 0
|
45
|
+
end
|
46
|
+
|
47
|
+
# do safe transpose
|
48
|
+
def safe_transpose
|
49
|
+
result = []
|
50
|
+
max_size = self.max { |a,b| a.size <=> b.size }.size
|
51
|
+
max_size.times do |i|
|
52
|
+
result[i] = Array.new(self.first.size)
|
53
|
+
self.each_with_index { |r,j| result[i][j] = r[i] }
|
54
|
+
end
|
55
|
+
result
|
56
|
+
end
|
57
|
+
|
58
|
+
alias :contains? :contain?
|
59
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
class Class
|
2
|
+
|
3
|
+
# get singleton methods to target class without super class methods
|
4
|
+
def class_methods
|
5
|
+
self.methods - Object.methods
|
6
|
+
end
|
7
|
+
|
8
|
+
# bind a singleton method to a class object
|
9
|
+
def create_class_method(method,&block)
|
10
|
+
self.class_eval do
|
11
|
+
define_singleton_method method do |*args|
|
12
|
+
block.call *args
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# create an instance method
|
18
|
+
def create_instance_method(method,&block)
|
19
|
+
self.class_eval do
|
20
|
+
define_method method do |*args|
|
21
|
+
block.call *args
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Iterates over all subclasses (direct and indirect)
|
27
|
+
def each_subclass
|
28
|
+
ObjectSpace.each_object(Class) { | candidate |
|
29
|
+
yield candidate if candidate < self
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns an Array of subclasses (direct and indirect)
|
34
|
+
def subclasses
|
35
|
+
ret = []
|
36
|
+
each_subclass {|c| ret << c}
|
37
|
+
ret
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns an Array of direct subclasses
|
41
|
+
def direct_subclasses
|
42
|
+
ret = []
|
43
|
+
each_subclass {|c| ret << c if c.superclass == self }
|
44
|
+
ret
|
45
|
+
end
|
46
|
+
|
47
|
+
# create singleton attribute
|
48
|
+
def class_attr_accessor(name)
|
49
|
+
|
50
|
+
### GET
|
51
|
+
begin
|
52
|
+
define_method name do
|
53
|
+
class_variable_get "@@#{name}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
### SET
|
58
|
+
begin
|
59
|
+
define_method "#{name}=" do |new_val|
|
60
|
+
class_variable_set "@@#{name}", new_val
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
# create class instance attribute
|
67
|
+
def instance_attr_accessor(name)
|
68
|
+
|
69
|
+
### GET
|
70
|
+
begin
|
71
|
+
define_method name do
|
72
|
+
instance_variable_get "@#{name}"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
### SET
|
77
|
+
begin
|
78
|
+
define_method "#{name}=" do |new_val|
|
79
|
+
instance_variable_set "@#{name}", new_val
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
File without changes
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class File
|
2
|
+
def self.create(route_name ,filemod="w",string_data=String.new)
|
3
|
+
begin
|
4
|
+
|
5
|
+
#file_name generate
|
6
|
+
if !route_name.to_s.split(File::SEPARATOR).last.nil? || route_name.to_s.split(File::SEPARATOR).last != ''
|
7
|
+
file_name = route_name.to_s.split(File::SEPARATOR).last
|
8
|
+
else
|
9
|
+
file_name = nil?
|
10
|
+
end
|
11
|
+
|
12
|
+
#path_way
|
13
|
+
begin
|
14
|
+
raise ArgumentError, "missing route_name: #{route_name}" if route_name.nil?
|
15
|
+
path = File.expand_path(route_name).to_s.split(File::SEPARATOR)
|
16
|
+
path = path - [File.expand_path(route_name).to_s.split(File::SEPARATOR).last]
|
17
|
+
path.shift
|
18
|
+
end
|
19
|
+
|
20
|
+
#job
|
21
|
+
begin
|
22
|
+
if !Dir.exists?(File::SEPARATOR+path.join(File::SEPARATOR))
|
23
|
+
|
24
|
+
at_now = File::SEPARATOR
|
25
|
+
path.each do |dir_to_be_checked|
|
26
|
+
|
27
|
+
at_now += "#{dir_to_be_checked+File::SEPARATOR}"
|
28
|
+
Dir.mkdir(at_now) if !Dir.exists?(at_now)
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# write data
|
35
|
+
begin
|
36
|
+
full_path = "#{File::SEPARATOR+path.join(File::SEPARATOR)+File::SEPARATOR}#{file_name}"
|
37
|
+
if File.exist? full_path
|
38
|
+
File.open(full_path,filemod).write string_data
|
39
|
+
else
|
40
|
+
File.new(full_path,filemod).write string_data
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
rescue Exception => ex
|
45
|
+
puts ex
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
# remove elements by keys,
|
4
|
+
# array of keys,
|
5
|
+
# hashTags,
|
6
|
+
# strings
|
7
|
+
def trim(*args)
|
8
|
+
|
9
|
+
args.each do |one_element|
|
10
|
+
case true
|
11
|
+
|
12
|
+
when one_element.class == Hash
|
13
|
+
begin
|
14
|
+
one_element.each do |key,value|
|
15
|
+
if self[key] == value
|
16
|
+
self.delete(key)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
when one_element.class == Array
|
22
|
+
begin
|
23
|
+
one_element.each do |one_key|
|
24
|
+
self.delete(one_key)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
when one_element.class == Symbol,
|
29
|
+
one_element.class == String
|
30
|
+
begin
|
31
|
+
self.delete(one_element)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
return self
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
#pass single or array of keys, which will be removed, returning the remaining hash
|
41
|
+
def remove!(*keys)
|
42
|
+
keys.each{|key| self.delete(key) }
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
#non-destructive version
|
47
|
+
def remove(*keys)
|
48
|
+
self.dup.remove!(*keys)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns a new hash with +self+ and +other_hash+ merged recursively.
|
52
|
+
#
|
53
|
+
# h1 = {:x => {:y => [4,5,6]}, :z => [7,8,9]}
|
54
|
+
# h2 = {:x => {:y => [7,8,9]}, :z => "xyz"}
|
55
|
+
#
|
56
|
+
# h1.deep_merge(h2) #=> { :x => {:y => [7, 8, 9]}, :z => "xyz" }
|
57
|
+
# h2.deep_merge(h1) #=> { :x => {:y => [4, 5, 6]}, :z => [7, 8, 9] }
|
58
|
+
def deep_merge(other_hash)
|
59
|
+
dup.deep_merge!(other_hash)
|
60
|
+
end unless method_defined? :deep_merge
|
61
|
+
|
62
|
+
# Same as +deep_merge+, but modifies +self+.
|
63
|
+
def deep_merge!(other_hash)
|
64
|
+
other_hash.each_pair do |k,v|
|
65
|
+
tv = self[k]
|
66
|
+
self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
|
67
|
+
end
|
68
|
+
self
|
69
|
+
end unless method_defined? :deep_merge!
|
70
|
+
|
71
|
+
# return bool that does the sub hash all element include the hash who call this or not
|
72
|
+
def deep_include?(sub_hash)
|
73
|
+
sub_hash.keys.all? do |key|
|
74
|
+
self.has_key?(key) && if sub_hash[key].is_a?(Hash)
|
75
|
+
self[key].is_a?(Hash) && self[key].deep_include?(sub_hash[key])
|
76
|
+
else
|
77
|
+
self[key] == sub_hash[key]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end unless method_defined? :deep_include?
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,172 @@
|
|
1
|
+
class Object
|
2
|
+
|
3
|
+
# The hidden singleton lurks behind everyone
|
4
|
+
def metaclass; class << self; self; end; end
|
5
|
+
|
6
|
+
# extend the metaclass with an instance eval
|
7
|
+
def meta_eval &blk; metaclass.instance_eval &blk; end
|
8
|
+
|
9
|
+
# Adds methods to a metaclass
|
10
|
+
def meta_def name, &blk
|
11
|
+
meta_eval { define_method name, &blk }
|
12
|
+
end
|
13
|
+
|
14
|
+
# Defines an instance method within a class
|
15
|
+
def class_def name, &blk
|
16
|
+
class_eval { define_method name, &blk }
|
17
|
+
end
|
18
|
+
|
19
|
+
# constantize object
|
20
|
+
def constantize
|
21
|
+
camel_cased_word= self.to_s
|
22
|
+
names = camel_cased_word.split('::')
|
23
|
+
names.shift if names.empty? || names.first.empty?
|
24
|
+
|
25
|
+
constant = Object
|
26
|
+
names.each do |name|
|
27
|
+
constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name)
|
28
|
+
end
|
29
|
+
constant
|
30
|
+
end unless method_defined? :constantize
|
31
|
+
|
32
|
+
# find and replace object in object
|
33
|
+
def find_and_replace(input,*params)
|
34
|
+
params=Hash[*params]
|
35
|
+
# some default values
|
36
|
+
begin
|
37
|
+
#None!
|
38
|
+
end
|
39
|
+
# Do the find and replace
|
40
|
+
begin
|
41
|
+
|
42
|
+
if input.class == Array
|
43
|
+
input.count.times do |counter|
|
44
|
+
params.each do |key,value|
|
45
|
+
input[counter]= input[counter].gsub(key,value)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
elsif input.class == String
|
49
|
+
params.each do |key,value|
|
50
|
+
input= input.gsub(key,value)
|
51
|
+
end
|
52
|
+
elsif input.class == Integer
|
53
|
+
params.each do |key,value|
|
54
|
+
input= input.to_s.gsub(key,value).to_i
|
55
|
+
end
|
56
|
+
elsif input.class == Float
|
57
|
+
params.each do |key,value|
|
58
|
+
input= input.to_s.gsub(key,value).to_f
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# return value
|
63
|
+
return input
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# each for any object
|
68
|
+
def each_universal(&block)
|
69
|
+
case self.class.to_s.downcase
|
70
|
+
when "hash"
|
71
|
+
self.each do |key,value|
|
72
|
+
block.call(key,value)
|
73
|
+
end
|
74
|
+
when "array"
|
75
|
+
self.each do |one_element|
|
76
|
+
block.call(self.index(one_element),one_element)
|
77
|
+
end
|
78
|
+
else
|
79
|
+
block.call nil,self
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# map an object => experiment
|
84
|
+
def map_object(symbol_key="$type")
|
85
|
+
|
86
|
+
stage = self
|
87
|
+
do_later = Hash.new
|
88
|
+
samples = Hash.new
|
89
|
+
relations = Hash.new
|
90
|
+
main_object = nil
|
91
|
+
|
92
|
+
loop do
|
93
|
+
|
94
|
+
# processing
|
95
|
+
begin
|
96
|
+
|
97
|
+
tmp_key = String.new
|
98
|
+
tmp_hash= Hash.new
|
99
|
+
stage.each_universal do |key,value|
|
100
|
+
|
101
|
+
if value.class.to_s.downcase == "string"
|
102
|
+
|
103
|
+
if key== symbol_key
|
104
|
+
tmp_key= value
|
105
|
+
main_object ||= value
|
106
|
+
else
|
107
|
+
tmp_hash[key]= value
|
108
|
+
end
|
109
|
+
|
110
|
+
else
|
111
|
+
|
112
|
+
value.each_universal do |key_sub,value_sub|
|
113
|
+
if key_sub == symbol_key && tmp_key != String.new
|
114
|
+
child_property = Hash.new
|
115
|
+
child_property['type']= value_sub
|
116
|
+
child_property['class']= value.class.to_s
|
117
|
+
relations[tmp_key]= child_property
|
118
|
+
end
|
119
|
+
do_later[key_sub]= value_sub
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
if tmp_key != String.new && tmp_hash != Hash.new
|
126
|
+
samples[tmp_key]=tmp_hash
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
# finish
|
132
|
+
begin
|
133
|
+
break if do_later == Hash.new
|
134
|
+
stage= do_later
|
135
|
+
do_later = Hash.new
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
return {:samples => samples,
|
141
|
+
:relations => relations,
|
142
|
+
:main => main_object
|
143
|
+
}
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
# is class?
|
148
|
+
def class?
|
149
|
+
self.class == Class
|
150
|
+
end
|
151
|
+
|
152
|
+
# convert class instance instance variables into a hash object
|
153
|
+
def convert_to_hash
|
154
|
+
|
155
|
+
unless self.class.class == Class
|
156
|
+
raise NoMethodError, "undefined method `to_hash' for #{self.inspect}"
|
157
|
+
end
|
158
|
+
|
159
|
+
tmp_hash= Hash.new()
|
160
|
+
self.instance_variables.each do|var|
|
161
|
+
tmp_hash[var.to_s.delete("@")] = self.instance_variable_get(var)
|
162
|
+
end
|
163
|
+
|
164
|
+
return tmp_hash
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
alias :map_sample :map_object
|
169
|
+
alias :each_univ :each_universal
|
170
|
+
alias :fnr :find_and_replace
|
171
|
+
|
172
|
+
end
|