mpatch 1.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjkwMmJkYTBlZjA5YWU2MmIwZGU0ZGMzYTE2YTgxNTRmY2M1NjMzNQ==
5
+ data.tar.gz: !binary |-
6
+ MjhjMTNlMjVmZjk5ZTlkOTc0MDkzMTU4NTZkNThmY2QxOTMwMTllYQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OTdhZmY2NGI1M2JkODUxOTQ3NGFhZjAyZDZkMzM4ODY1NzcwNzA2ZWZmNmRh
10
+ NjJhNDc2MjdjOTAyZGY4MGZmYzliZDU0N2U2MjQ5ZjA1ZTcxMzdlMjk0ODhk
11
+ ZmZiY2RkNjJkMjA4MjcyZjk2NTJlZjMyYzk1NTc0OTk0OGY4OTA=
12
+ data.tar.gz: !binary |-
13
+ ZmRmMmIzMDBiMWQ5MTI5YzZjMmE3Njc5Y2Q4NWMzZWI2MTBiOWJkOThiYmRm
14
+ YmNhZmMzNGQ1MjY1NTYxZWZhNzczMmVhZmMxYzZhYzY1NDk5ZTI5ZDBjYzRi
15
+ MDY1ZjEyZDJiMTJlZTVmM2Y0MDEyYWE3NTFjYjVmNjFmZjYzMDc=
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ mpatch
2
+ ======
3
+
4
+ Monkey patch collection for advance helper functions
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require File.join "bundler","gem_tasks"
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
data/files.rb ADDED
@@ -0,0 +1,24 @@
1
+ ### Get Files from dir
2
+ begin
3
+
4
+ files_to_be_loaded = %w[version.rb]
5
+
6
+ SpecFiles= Array.new
7
+
8
+ Dir[File.expand_path(File.join(File.dirname(__FILE__),"**","*"))].sort.uniq.each do |one_file_name|
9
+ one_file_name = File.expand_path one_file_name
10
+ file_name = one_file_name[(File.expand_path(File.dirname(__FILE__)).to_s.length+1)..(one_file_name.length-1)]
11
+
12
+ if !one_file_name.include?("pkg")
13
+ if !File.directory? file_name
14
+ SpecFiles.push file_name
15
+ STDOUT.puts file_name if $DEBUG
16
+ if files_to_be_loaded.include? one_file_name.split(File::SEPARATOR).last
17
+ load one_file_name
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,90 @@
1
+ require File.join 'active_support','time'
2
+
3
+ class String
4
+
5
+ def duck
6
+
7
+ begin
8
+ if self == self.to_f.to_s
9
+ return self.to_f
10
+ end
11
+ rescue NoMethodError
12
+ end
13
+
14
+ begin
15
+ if self == self.to_i.to_s
16
+ return self.to_i
17
+ end
18
+ rescue NoMethodError
19
+ end
20
+
21
+ begin
22
+ if self.gsub(":","") == self.to_datetime.to_s.gsub(
23
+ "T"," ").gsub("+"," +").gsub(":","")
24
+ return self.to_datetime
25
+ end
26
+ rescue Exception
27
+ end
28
+
29
+ begin
30
+ if self == self.to_datetime.to_s
31
+ return self.to_datetime
32
+ end
33
+ rescue Exception
34
+ end
35
+
36
+ begin
37
+ if self == self.to_date.to_s
38
+ return self.to_date
39
+ end
40
+ rescue Exception
41
+ end
42
+
43
+ begin
44
+ if self == "true"
45
+ return true
46
+ end
47
+ rescue NoMethodError
48
+ end
49
+
50
+
51
+ begin
52
+ if self == "false"
53
+ return false
54
+ end
55
+ rescue NoMethodError
56
+ end
57
+
58
+ begin
59
+ string_input= self
60
+ contain= nil
61
+ ["[", "]","^","$","*","/"].each do |one_sym|
62
+ if string_input.include? one_sym
63
+ contain ||= true
64
+ end
65
+ end
66
+ if contain == true
67
+ string_regexp= Regexp.new(string_input).inspect#.gsub('\\','')
68
+ string_regexp= string_regexp[1..(string_regexp.length-2)]
69
+ if string_input == string_regexp
70
+ return Regexp.new(string_input)
71
+ else
72
+ raise ArgumentError,"invalid input string"
73
+ end
74
+ end
75
+ rescue ArgumentError
76
+ end
77
+
78
+ begin
79
+ if self == self.to_s.to_s
80
+ return self.to_s
81
+ end
82
+ rescue NoMethodError
83
+ end
84
+
85
+ end
86
+
87
+ alias :to_duck :duck
88
+ alias :to_d :duck
89
+
90
+ end
@@ -0,0 +1,149 @@
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 from the end
35
+ # and return a new object
36
+ def pinch n=1
37
+ return self[0..(self.count-(n+1))]
38
+ end
39
+
40
+ # remove n. element from the end
41
+ # and return the original object
42
+ def pinch! n=1
43
+ n.times do
44
+ self.pop
45
+ end
46
+ return self
47
+ end
48
+
49
+ # return boolean by other array
50
+ # all element included or
51
+ # not in the target array
52
+ def contain?(oth_array)#anothere array
53
+ (oth_array & self) == oth_array
54
+ end
55
+
56
+ # return boolean by other array
57
+ # if any element included from
58
+ # the oth_array, return a true
59
+ def contain_any_of?(oth_array)
60
+ oth_array.each do |element|
61
+ if self.include? element
62
+ return true
63
+ end
64
+ end
65
+ return false
66
+ end
67
+
68
+ alias :contains_any_of? :contain_any_of?
69
+ alias :has_any_of? :contain_any_of?
70
+
71
+ # do safe transpose
72
+ def safe_transpose
73
+ result = []
74
+ max_size = self.max { |a,b| a.size <=> b.size }.size
75
+ max_size.times do |i|
76
+ result[i] = Array.new(self.first.size)
77
+ self.each_with_index { |r,j| result[i][j] = r[i] }
78
+ end
79
+ result
80
+ end
81
+
82
+ alias :contains? :contain?
83
+
84
+ # return boolean
85
+ # if any element class is equal to th given class
86
+ # return a true , else false
87
+ def contain_element_of_class?(class_name)
88
+ target_array= self.map{|e| e.class }.uniq
89
+ if class_name.class != Class
90
+ raise ArgumentError, "Argument must be a Class!"
91
+ end
92
+ if target_array.include? class_name
93
+ return true
94
+ end
95
+ return false
96
+ end
97
+
98
+ alias :contains_element_of_class? :contain_element_of_class?
99
+ alias :has_element_of_class? :contain_element_of_class?
100
+
101
+ # generate params structure from array
102
+ # *args => [:opts,:args]
103
+ def params_separation
104
+
105
+ options= self.map { |element|
106
+ if element.class == Hash
107
+ element
108
+ end
109
+ }.uniq - [ nil ]
110
+ #options.each{|e| self.delete(e) }
111
+ arguments= self.dup - options
112
+ options= Hash[*options]
113
+
114
+ return [options,arguments]
115
+
116
+ end
117
+
118
+ alias :separate_params :params_separation
119
+ alias :process_params :params_separation
120
+
121
+ # generate params structure from array
122
+ # return_array
123
+ def extract_class! class_name
124
+
125
+ if class_name.class != Class
126
+ raise ArgumentError, "parameter must be a class name"
127
+ end
128
+
129
+ return_value= self.map { |element|
130
+ if element.class == class_name
131
+ element
132
+ end
133
+ }.uniq - [ nil ]
134
+ return_value.each{|e| self.delete(e) }
135
+
136
+ return return_value
137
+
138
+ end
139
+ alias :cut_class! :extract_class!
140
+
141
+ # generate params structure from array
142
+ # *args - options {}
143
+ def extract_options!
144
+ options= self.extract_class! Hash
145
+ return Hash[*options]
146
+ end
147
+ alias :extract_hash! :extract_options!
148
+
149
+ end
@@ -0,0 +1,15 @@
1
+ class Object
2
+
3
+ def boolean?
4
+ !!self == self
5
+ end
6
+
7
+ def true?
8
+ self == true
9
+ end
10
+
11
+ def false?
12
+ self == false
13
+ end
14
+
15
+ end
@@ -0,0 +1,92 @@
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
+ begin
30
+ yield candidate if candidate < self
31
+ rescue ArgumentError
32
+ # comparison of Class with Class failed (ArgumentError)
33
+ end
34
+ }
35
+ end
36
+
37
+ # Returns an Array of subclasses (direct and indirect)
38
+ def subclasses_all
39
+ ret = []
40
+ each_subclass {|c| ret.push c}
41
+ ret
42
+ end
43
+
44
+ alias :all_subclasses :subclasses_all
45
+
46
+ # Returns an Array of direct subclasses
47
+ def subclasses
48
+ ret = []
49
+ each_subclass {|c| ret.push(c) if c.superclass == self }
50
+ ret
51
+ end
52
+ alias :subclass :subclasses
53
+
54
+ # create singleton attribute
55
+ def class_attr_accessor(name)
56
+
57
+ ### GET
58
+ begin
59
+ define_method name do
60
+ class_variable_get "@@#{name}"
61
+ end
62
+ end
63
+
64
+ ### SET
65
+ begin
66
+ define_method "#{name}=" do |new_val|
67
+ class_variable_set "@@#{name}", new_val
68
+ end
69
+ end
70
+
71
+ end
72
+
73
+ # create class instance attribute
74
+ def instance_attr_accessor(name)
75
+
76
+ ### GET
77
+ begin
78
+ define_method name do
79
+ instance_variable_get "@#{name}"
80
+ end
81
+ end
82
+
83
+ ### SET
84
+ begin
85
+ define_method "#{name}=" do |new_val|
86
+ instance_variable_set "@#{name}", new_val
87
+ end
88
+ end
89
+
90
+ end
91
+
92
+ end
File without changes
@@ -0,0 +1,71 @@
1
+ class File
2
+
3
+ # create a file, if not exsist create file, and dir if needed
4
+ def self.create(route_name ,filemod="w",string_data=String.new)
5
+ begin
6
+
7
+ #file_name generate
8
+ if !route_name.to_s.split(File::SEPARATOR).last.nil? || route_name.to_s.split(File::SEPARATOR).last != ''
9
+ file_name = route_name.to_s.split(File::SEPARATOR).last
10
+ else
11
+ file_name = nil?
12
+ end
13
+
14
+ #path_way
15
+ begin
16
+ raise ArgumentError, "missing route_name: #{route_name}" if route_name.nil?
17
+ path = File.expand_path(route_name).to_s.split(File::SEPARATOR)
18
+ path = path - [File.expand_path(route_name).to_s.split(File::SEPARATOR).last]
19
+ path.shift
20
+ end
21
+
22
+ #job
23
+ begin
24
+ if !Dir.exists?(File::SEPARATOR+path.join(File::SEPARATOR))
25
+
26
+ at_now = File::SEPARATOR
27
+ path.each do |dir_to_be_checked|
28
+
29
+ at_now += "#{dir_to_be_checked+File::SEPARATOR}"
30
+ Dir.mkdir(at_now) if !Dir.exists?(at_now)
31
+
32
+ end
33
+ end
34
+ end
35
+
36
+ # write data
37
+ begin
38
+ full_path = "#{File::SEPARATOR+path.join(File::SEPARATOR)+File::SEPARATOR}#{file_name}"
39
+ if File.exist? full_path
40
+ File.open(full_path,filemod).write string_data
41
+ else
42
+ File.new(full_path,filemod).write string_data
43
+ end
44
+ end
45
+
46
+ rescue Exception => ex
47
+ puts ex
48
+ end
49
+ end
50
+
51
+ # start read the file object on each line
52
+ # optionable an integer value to start read line at
53
+ # compatible with mac (i am linux user, so not tested)
54
+ def each_line_from(start_at=1,&block)
55
+ unless [Integer,Fixnum,Bignum].include?(start_at.class)
56
+ raise ArgumentError, "invalid line index"
57
+ end
58
+ begin
59
+ line_num= 1
60
+ text= self.read
61
+ text.gsub!(/\r\n?/, "\n")
62
+ text.each_line do |*line|
63
+ if line_num >= start_at
64
+ block.call #*line
65
+ end
66
+ line_num += 1
67
+ end
68
+ end
69
+ end
70
+
71
+ end
@@ -0,0 +1,109 @@
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
+ alias :+ :deep_merge
63
+
64
+ # Same as +deep_merge+, but modifies +self+.
65
+ def deep_merge!(other_hash)
66
+ other_hash.each_pair do |k,v|
67
+ tv = self[k]
68
+ self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
69
+ end
70
+ self
71
+ end unless method_defined? :deep_merge!
72
+
73
+ # return bool that does the sub hash all element include the hash who call this or not
74
+ def deep_include?(sub_hash)
75
+ sub_hash.keys.all? do |key|
76
+ self.has_key?(key) && if sub_hash[key].is_a?(Hash)
77
+ self[key].is_a?(Hash) && self[key].deep_include?(sub_hash[key])
78
+ else
79
+ self[key] == sub_hash[key]
80
+ end
81
+ end
82
+ end unless method_defined? :deep_include?
83
+
84
+ # map hash will work just alike map but instead of an array it will return a hash obj
85
+ #
86
+ # {:hello=> "world",:world => "hello"}.map_hash{|k,v| [ k , 123] }
87
+ # #> {:hello=>123, :world=>123}
88
+ #
89
+ # {:hello=> "world",:world => "hello"}.map_hash{|k,v| { k => 123 } }
90
+ # #> {:hello=>123, :world=>123}
91
+ #
92
+ def map_hash &block
93
+
94
+ tmp_hash= Hash.new
95
+ map_hash_obj= self.map &block
96
+ map_hash_obj.each do |hash|
97
+
98
+ if hash.class <= Array
99
+ hash= Hash[*hash]
100
+ end
101
+
102
+ tmp_hash.deep_merge!(hash)
103
+
104
+ end
105
+
106
+ return tmp_hash
107
+ end
108
+
109
+ end
@@ -0,0 +1,12 @@
1
+
2
+ class Integer
3
+
4
+ # because for i in integer/fixnum not working,
5
+ # here is a little patch
6
+ def each &block
7
+ self.times do |number|
8
+ block.call number
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,9 @@
1
+ def putsf(integer,*args)
2
+ command_string=String.new
3
+ args.each do |one_element|
4
+ command_string+="%-#{integer}s"
5
+ end
6
+ command_string+="\n"
7
+ printf command_string,*args
8
+ end
9
+
@@ -0,0 +1,16 @@
1
+ class Module
2
+
3
+ # return the module objects direct sub modules
4
+ def modules
5
+ constants.collect {|const_name| const_get(const_name)}.select {|const| const.class == Module}
6
+ end
7
+
8
+ # return the module objects direct sub modules
9
+ def classes
10
+ constants.collect {|const_name| const_get(const_name)}.select {|const| const.class == Class}
11
+ end
12
+
13
+ alias :submodules :modules
14
+ alias :subclasses :classes
15
+
16
+ end
@@ -0,0 +1,275 @@
1
+ class Object
2
+
3
+ # basic validations for those who fear the DUCK!
4
+ def must_be class_name
5
+ if class_name.class == Class
6
+ begin
7
+ if self.class != class_name
8
+ raise ArgumentError, "invalid parameter given: #{self}"
9
+ end
10
+ end
11
+ else
12
+ begin
13
+ if self != class_name
14
+ raise ArgumentError, "invalid parameter given: #{self}"
15
+ end
16
+ end
17
+ end
18
+ return self
19
+ end unless method_defined? :must_be
20
+
21
+ # return the object Binding
22
+ def binding?
23
+ return binding
24
+ end
25
+
26
+ alias :get_binding :binding?
27
+
28
+ # The hidden singleton lurks behind everyone
29
+ def metaclass; class << self; self; end; end
30
+
31
+ # extend the metaclass with an instance eval
32
+ def meta_eval &blk; metaclass.instance_eval &blk; end
33
+
34
+ # Adds methods to a metaclass
35
+ def meta_def name, &blk
36
+ meta_eval { define_method name, &blk }
37
+ end
38
+
39
+ # Defines an instance method within a class
40
+ def class_def name, &blk
41
+ class_eval { define_method name, &blk }
42
+ end
43
+
44
+ # constantize object
45
+ def constantize
46
+ camel_cased_word= self.to_s
47
+ names = camel_cased_word.split('::')
48
+ names.shift if names.empty? || names.first.empty?
49
+
50
+ constant = Object
51
+ names.each do |name|
52
+ constant = constant.const_defined?(name, false) ? constant.const_get(name) : constant.const_missing(name)
53
+ end
54
+ constant
55
+ end unless method_defined? :constantize
56
+
57
+ # find and replace object in object
58
+ def find_and_replace(input,*params)
59
+ params=Hash[*params]
60
+ # some default values
61
+ begin
62
+ #None!
63
+ end
64
+ # Do the find and replace
65
+ begin
66
+
67
+ if input.class == Array
68
+ input.count.times do |counter|
69
+ params.each do |key,value|
70
+ input[counter]= input[counter].gsub(key,value)
71
+ end
72
+ end
73
+ elsif input.class == String
74
+ params.each do |key,value|
75
+ input= input.gsub(key,value)
76
+ end
77
+ elsif input.class == Integer
78
+ params.each do |key,value|
79
+ input= input.to_s.gsub(key,value).to_i
80
+ end
81
+ elsif input.class == Float
82
+ params.each do |key,value|
83
+ input= input.to_s.gsub(key,value).to_f
84
+ end
85
+ end
86
+
87
+ # return value
88
+ return input
89
+ end
90
+ end
91
+
92
+ # each for any object
93
+ def each_universal(&block)
94
+ case self.class.to_s.downcase
95
+ when "hash"
96
+ self.each do |key,value|
97
+ block.call(key,value)
98
+ end
99
+ when "array"
100
+ self.each do |one_element|
101
+ block.call(self.index(one_element),one_element)
102
+ end
103
+ else
104
+ block.call nil,self
105
+ end
106
+ end
107
+
108
+ # map an object => experiment
109
+ def map_object(symbol_key="$type")
110
+
111
+ stage = self
112
+ do_later = Hash.new
113
+ samples = Hash.new
114
+ relations = Hash.new
115
+ main_object = nil
116
+
117
+ loop do
118
+
119
+ # processing
120
+ begin
121
+
122
+ tmp_key = String.new
123
+ tmp_hash= Hash.new
124
+ stage.each_universal do |key,value|
125
+
126
+ if value.class.to_s.downcase == "string"
127
+
128
+ if key== symbol_key
129
+ tmp_key= value
130
+ main_object ||= value
131
+ else
132
+ tmp_hash[key]= value
133
+ end
134
+
135
+ else
136
+
137
+ value.each_universal do |key_sub,value_sub|
138
+ if key_sub == symbol_key && tmp_key != String.new
139
+ child_property = Hash.new
140
+ child_property['type']= value_sub
141
+ child_property['class']= value.class.to_s
142
+ relations[tmp_key]= child_property
143
+ end
144
+ do_later[key_sub]= value_sub
145
+ end
146
+
147
+ end
148
+ end
149
+
150
+ if tmp_key != String.new && tmp_hash != Hash.new
151
+ samples[tmp_key]=tmp_hash
152
+ end
153
+
154
+ end
155
+
156
+ # finish
157
+ begin
158
+ break if do_later == Hash.new
159
+ stage= do_later
160
+ do_later = Hash.new
161
+ end
162
+
163
+ end
164
+
165
+ return {:samples => samples,
166
+ :relations => relations,
167
+ :main => main_object
168
+ }
169
+
170
+ end
171
+
172
+ # is class?
173
+ def class?
174
+ self.class == Class
175
+ end
176
+
177
+ # convert class instance instance variables into a hash object
178
+ def convert_to_hash
179
+
180
+ unless self.class.class == Class
181
+ raise NoMethodError, "undefined method `to_hash' for #{self.inspect}"
182
+ end
183
+
184
+ tmp_hash= Hash.new()
185
+ self.instance_variables.each do|var|
186
+ tmp_hash[var.to_s.delete("@")] = self.instance_variable_get(var)
187
+ end
188
+
189
+ return tmp_hash
190
+
191
+ end
192
+
193
+ # this will check that the class is
194
+ # defined or not in the runtime memory
195
+ def class_exists?
196
+ klass = Module.const_get(self)
197
+ return klass.is_a?(Class)
198
+ rescue NameError
199
+ return false
200
+ end
201
+
202
+ # This will convert a symbol or string and format to be a valid
203
+ # constant name and create from it a class with instance attribute accessors
204
+ # Best use is when you get raw data in string from external source
205
+ # and you want make them class objects
206
+ #
207
+ # :hello_world.to_class(:test)
208
+ # HelloWorld.to_class(:sup)
209
+ # hw_var = HelloWorld.new
210
+ # hw_var.sup = "Fine thanks!"
211
+ # hw_var.test = 5
212
+ #
213
+ # puts hw_var.test
214
+ #
215
+ # #> produce 5 :Integer
216
+ #
217
+ # you can also use this formats
218
+ # :HelloWorld , "hello.world",
219
+ # "hello/world", "Hello::World",
220
+ # "hello:world"...
221
+ def to_class(*attributes)
222
+
223
+ unless self.class == Symbol || self.class == String || self.class == Class
224
+ raise ArgumentError, "object must be symbol or string to make able build class to it"
225
+ end
226
+
227
+ class_name= self.to_s
228
+
229
+ unless self.class == Class
230
+
231
+ class_name= class_name[0].upcase+class_name[1..class_name.length]
232
+ %w[ _ . : / ].each do |one_sym|
233
+
234
+ loop do
235
+ index_nmb= class_name.index(one_sym)
236
+ break if index_nmb.nil?
237
+ class_name[index_nmb..index_nmb+1]= class_name[index_nmb+1].upcase
238
+ end
239
+
240
+ end
241
+
242
+ end
243
+
244
+ create_attribute = Proc.new do |*args|
245
+
246
+ end
247
+
248
+ unless class_name.class_exists?
249
+
250
+ Object.const_set(
251
+ class_name,
252
+ Class.new
253
+ )
254
+
255
+ end
256
+
257
+
258
+ class_name.constantize.class_eval do
259
+ attributes.each do |one_attribute|
260
+ attr_accessor one_attribute.to_s.to_sym
261
+ end
262
+ end
263
+
264
+
265
+
266
+ return true
267
+
268
+ end
269
+
270
+ alias :create_attributes :to_class
271
+ alias :map_sample :map_object
272
+ alias :each_univ :each_universal
273
+ alias :fnr :find_and_replace
274
+
275
+ end
@@ -0,0 +1,27 @@
1
+ class Proc
2
+
3
+ # sugar syntax for proc * operator
4
+ # a = ->(x){x+1}
5
+ # b = ->(x){x*10}
6
+ # c = b*a
7
+ # c.call(1) #=> 20
8
+ def *(other)
9
+ Proc.new { |*args| self[*other[*args]] }
10
+ end unless method_defined? :*
11
+
12
+ def call_with_binding(bind, *args)
13
+ Bindless.new([bind]).run_proc(self, *args)
14
+ end
15
+
16
+ def call_with_obj(obj, *args)
17
+ m = nil
18
+ p = self
19
+ Object.class_eval do
20
+ define_method :a_temp_method_name, &p
21
+ m = instance_method :a_temp_method_name
22
+ remove_method :a_temp_method_name
23
+ end
24
+ m.bind(obj).call(*args)
25
+ end
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ module Process
2
+ def self.daemonize
3
+ File.create Application.pid,'a+'
4
+ File.create Application.log,'a+'
5
+ File.create Application.daemon_stderr,'a+'
6
+ Daemon.start fork,
7
+ Application.pid,
8
+ Application.log,
9
+ Application.daemon_stderr
10
+ end
11
+ def self.stop
12
+ Daemon.stop
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ class RND
2
+ class << self
3
+ def string(length= 7,amount=1,hyphen= " ")
4
+ amount_container= Array.new
5
+ amount.times do
6
+ mrg= String.new
7
+ mrg= (0...length).map{ ('a'..'z').to_a[rand(26)] }.join
8
+ amount_container.push mrg
9
+ end
10
+ return amount_container.join(hyphen)
11
+ end
12
+ def integer(length= 3)
13
+ Random.rand(length)
14
+ end
15
+ def boolean
16
+ rand(2) == 1
17
+ end
18
+ def time from = Time.at(1114924812), to = Time.now
19
+ rand(from..to)
20
+ end
21
+ def date from = Time.at(1114924812), to = Time.now
22
+ rand(from..to).to_date
23
+ end
24
+ def datetime from = Time.at(1114924812), to = Time.now
25
+ rand(from..to).to_datetime
26
+ end
27
+ end
28
+ end
29
+
30
+ # alias in Random from RND
31
+ begin
32
+ (RND.singleton_methods-Object.singleton_methods).each do |one_method_sym|
33
+ Random.class_eval do
34
+ define_singleton_method one_method_sym do |*args|
35
+ RND.__send__(one_method_sym,*args)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,78 @@
1
+ class String
2
+
3
+ # Find string in othere string
4
+ def positions(oth_string)
5
+
6
+ special_chrs=%w[# _ & < > @ $ . , -]+[*(0..9)]+[*("A".."Z")]+[*("a".."z")]
7
+ loop do
8
+ if oth_string.include? special_chrs[0]
9
+ special_chrs.shift
10
+ else
11
+ break
12
+ end
13
+ end
14
+
15
+ string=self
16
+ return_array = Array.new
17
+ loop do
18
+ break if string.index(oth_string).nil?
19
+ range_value= ((string.index(oth_string))..(string.index(oth_string)+oth_string.length-1))
20
+ return_array.push range_value
21
+ [*range_value].each do |one_index|
22
+ string[one_index]= special_chrs[0]
23
+ end
24
+ end
25
+
26
+ # return value
27
+ return return_array
28
+ end
29
+
30
+ # Standard in rails. See official documentation
31
+ # [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
32
+ def camelize(first_letter = :upper)
33
+ if first_letter == :upper
34
+ gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
35
+ else
36
+ self[0..0].downcase + camelize[1..-1]
37
+ end
38
+ end unless method_defined? :camelize
39
+
40
+ # Standard in rails. See official documentation
41
+ # [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
42
+ def dasherize
43
+ gsub(/_/, '-')
44
+ end unless method_defined? :dasherize
45
+
46
+ # Standard in rails. See official documentation
47
+ # [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
48
+ def demodulize
49
+ gsub(/^.*::/, '')
50
+ end unless method_defined? :demodulize
51
+
52
+ # Standard in rails. See official documentation
53
+ # [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
54
+ def underscore
55
+ gsub(/::/, '/').
56
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
57
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
58
+ tr("-", "_").
59
+ downcase
60
+ end unless method_defined? :underscore
61
+
62
+ # Check that instance of String is start with an upper case or not
63
+ def capitalized?
64
+ self.match(/^[[:upper:]]/) ? true : false
65
+ end
66
+
67
+ # return the number how often the str is with in the self
68
+ # by default with \b regex border
69
+ def frequency(str)
70
+ begin
71
+ if str.class == String
72
+ str= '\b'+str+'\b'
73
+ end
74
+ end
75
+ self.scan(/#{str}/).count
76
+ end
77
+
78
+ end
data/lib/mpatch/yml.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'yaml'
2
+ module YAML
3
+ def self.save_file(file_path,config_hash)
4
+ File.open(file_path, 'w+') {|f| f.write(config_hash.to_yaml) }
5
+ end
6
+
7
+ def self.load_file(file_path)
8
+ YAML.load(File.open(file_path))
9
+ end
10
+ end
11
+
data/lib/mpatch.rb ADDED
@@ -0,0 +1,6 @@
1
+ #encoding: UTF-8
2
+ module MPatch
3
+
4
+ Dir.glob(File.join(File.absolute_path(File.dirname(__FILE__)),"mpatch","**","*.{rb,ru}")).each{|e|require e}
5
+
6
+ end
data/mpatch.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__),"files.rb"))
4
+
5
+ ### Specification for the new Gem
6
+ Gem::Specification.new do |spec|
7
+
8
+ spec.name = "mpatch"
9
+ spec.version = File.open(File.join(File.dirname(__FILE__),"VERSION")).read.split("\n")[0].chomp.gsub(' ','')
10
+ spec.authors = ["Adam Luzsi"]
11
+ spec.email = ["adamluzsi@gmail.com"]
12
+ spec.description = %q{This is a collection of my Ruby monkey patches for making easer to use the basic classes}
13
+ spec.summary = %q{collection of methods for extend basic classes}
14
+ spec.homepage = "https://github.com/adamluzsi/mpatch"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = SpecFiles
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mpatch
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Adam Luzsi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-10 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This is a collection of my Ruby monkey patches for making easer to use
14
+ the basic classes
15
+ email:
16
+ - adamluzsi@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - Gemfile
22
+ - README.md
23
+ - Rakefile
24
+ - VERSION
25
+ - files.rb
26
+ - lib/mpatch.rb
27
+ - lib/mpatch/active_support/str2duck.rb
28
+ - lib/mpatch/array.rb
29
+ - lib/mpatch/boolean.rb
30
+ - lib/mpatch/class.rb
31
+ - lib/mpatch/exception.rb
32
+ - lib/mpatch/file.rb
33
+ - lib/mpatch/hash.rb
34
+ - lib/mpatch/integer.rb
35
+ - lib/mpatch/kernel.rb
36
+ - lib/mpatch/module.rb
37
+ - lib/mpatch/object.rb
38
+ - lib/mpatch/proc.rb
39
+ - lib/mpatch/process.rb
40
+ - lib/mpatch/random.rb
41
+ - lib/mpatch/string.rb
42
+ - lib/mpatch/yml.rb
43
+ - mpatch.gemspec
44
+ homepage: https://github.com/adamluzsi/mpatch
45
+ licenses:
46
+ - MIT
47
+ metadata: {}
48
+ post_install_message:
49
+ rdoc_options: []
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 2.2.1
65
+ signing_key:
66
+ specification_version: 4
67
+ summary: collection of methods for extend basic classes
68
+ test_files: []
69
+ has_rdoc: