procemon 0.0.1
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/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
|