procemon
========
Gotta catch em all!
This is a collection of my Ruby Procs in the adventure of becoming the best!
This is including Tons of monkey_patch for new features to classes,
meta-programing tricks, terminal argument controls, daemonise trick,
tmp folder helpers, Application centralized datas, folder structure logic ,
meta data control, dynamic lib read etc
short lazy doc
in Str2duck
# convert string object to something what is it looks to be as duck type mean to do
# useful for RESTfull aps when data sent as string
duck
in Tmp_dir
# init a tmpdir in the OS tmp folder with the application name
# (by default this is the root folder name)
tmpdir_init
in Name
# what it looks to be
set_app_name_by_root_folder
in Argv
# what it looks to be
process_parameters
in Daemon
# Checks to see if the current process is the child process and if not
# will update the pid file with the child pid.
self.start pid, pidfile, outfile, errfile
# Attempts to write the pid of the forked process to the pid file.
self.write pid, pidfile
# Try and read the existing pid from the pid file and signal the
# process. Returns true for a non blocking status.
self.kill(pidfile)
# Send stdout and stderr to log files for the child process
self.redirect outfile, errfile
self.daemonize
self.kill_with_pid
self.terminate
self.kill_by_name(*args)
self.stop
self.init
in Inject_methods
# this will inject a code block to a target instance method
# by default the before or after sym is not required
# default => before
#
# Test.inject_singleton_method :hello do |*args|
# puts "singleton extra, so#{args[0]}"
# end
#
inject_singleton_method(method,options=:before,&block)
#Singleton.methods[self.object_id]= self.method(method)
# this will inject a code block to a target singleton method
# by default the before or after sym is not required
# default => before
#
# Test.inject_instance_method :hello, :before do |*args|
# puts "singleton on a instance method and "+args[0]
# end
#
inject_instance_method(method,options=:before,&block)
in Require
# load meta-s
meta_load(app_folder= Dir.pwd)
# find elements
get_meta_config(app_folder= Dir.pwd)
# defaults
# find elements
# defaults
# processing
# return data
# mount libs
mount_libs(app_folder= Dir.pwd)
# load lib files
# Offline repo activate
mount_modules(app_folder= Dir.pwd)
#Return File_name => File_path
get_files(folder)
# Validation
# Check that does the folder is absolute or not
# Get Files list
# Return file_name:folder
# require by absolute path directory's files
require_directory(folder)
# require sender relative directory's files
require_relative_directory(folder)
# generate config from yaml (default is app_root/config folder)
generate_config(target_config_hash= Application.config,app_folder= Dir.pwd)
# try load all the ruby files marked with "generate" in they name from app_root/docs
generate_documentation(boolean= false,keyword= "generate",app_folder= Dir.pwd)
in Port
get_port(mint_port,max_port,host="0.0.0.0")
port_open?(port,host="0.0.0.0")
in Eval
# NOT working yet, need to rework the exclude method
# safe_eval(string [, binding [, filename [,lineno]]] *allowed_class/module_names ) -> obj
#
# Evaluates the Ruby expression(s) in string. If
# binding is given, which must be a Binding
# object, the evaluation is performed in its context. If the
# optional filename and lineno parameters are
# present, they will be used when reporting syntax errors.
#
# def get_binding(str)
# return binding
# end
# str = "hello"
# safe_eval "str + ' Fred'" ,Kernel#=> "hello Fred"
# safe_eval "str + ' Fred'", get_binding("bye") ,Kernel#=> "bye Fred"
safe_eval(*args)
in Process
self.daemonize
self.stop
in String
# Find string in othere string
positions(oth_string)
# return value
# Standard in rails. See official documentation
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
camelize(first_letter = :upper)
# Standard in rails. See official documentation
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
dasherize
# Standard in rails. See official documentation
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
demodulize
# Standard in rails. See official documentation
# [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html]
underscore
# Check that instance of String is start with an upper case or not
capitalized?
in Yml
self.save_file(file_path,config_hash)
self.load_file(file_path)
in Object
# The hidden singleton lurks behind everyone
metaclass; class << self; self; end; end
# extend the metaclass with an instance eval
meta_eval &blk; metaclass.instance_eval &blk; end
# Adds methods to a metaclass
meta_name, &blk
# Defines an instance method within a class
class_name, &blk
# constantize object
constantize
# find and replace object in object
find_and_replace(input,*params)
# it was made only for fun to make same each to array and hash and everything
each_universal(&block)
# map an object => experiment
map_object(symbol_key="$type")
# is class?
class?
# convert class instance instance variables into a hash object
convert_to_hash
# this will check that the class is
# defined or not in the runtime memory
class_exists?
# This will convert a symbol or string and format to be a valid
# constant name and create from it a class with instance attribute accessors
# Best use is when you get raw data in string from external source
# and you want make them class objects
#
# :hello_world.to_class(:test)
# HelloWorld.to_class(:sup)
# hw_var = HelloWorld.new
# hw_var.sup = "Fine thanks!"
# hw_var.test = 5
#
# puts hw_var.test
#
#> produce 5 :Integer
#
# you can also use this formats
# :HelloWorld , "hello.world",
# "hello/world", "Hello::World",
# "hello:world"...
to_class(*attributes)
or
create_attributes(*attributes)
in File
self.create(route_name ,filemod="w",string_data=String.new)
in Array
# remove arguments or array of
# parameters from the main array
trim(*args)
# return index of the target element
index_of(target_element)
# remove n. element from the end
# and return a new object
pinch n=1
# remove n. element from the end
# and return the original object
pinch! n=1
# return boolean by other array
# all element included or
# not in the target array
contain?(oth_array)#anothere array
# do safe transpose
safe_transpose
in Class
# get singleton methods to target class without super class methods
class_methods
# bind a singleton method to a class object
create_class_method(method,&block)
# create an instance method
create_instance_method(method,&block)
# Iterates over all subclasses (direct and indirect)
each_subclass
# Returns an Array of subclasses (direct and indirect)
subclasses
# Returns an Array of direct subclasses
direct_subclasses
# create singleton attribute
class_attr_accessor(name)
# GET
# SET
# create class instance attribute
instance_attr_accessor(name)
in Integer
# because for i in integer/fixnum not working,
# here is a little patch
each &block
in Random
string(length= 7,amount=1)
integer(length= 3)
boolean
time from = Time.at(1114924812), to = Time.now
date from = Time.at(1114924812), to = Time.now
datetime from = Time.at(1114924812), to = Time.now
in Hash
# remove elements by keys,
# array of keys,
# hashTags,
# strings
trim(*args)
#pass single or array of keys, which will be removed, returning the remaining hash
remove!(*keys)
#non-destructive version
remove(*keys)
# Returns a new hash with +self+ and +other_hash+ merged recursively.
#
# h1 = {:x => {:y => [4,5,6]}, :z => [7,8,9]}
# h2 = {:x => {:y => [7,8,9]}, :z => "xyz"}
#
# h1.deep_merge(h2#=> { :x => {:y => [7, 8, 9]}, :z => "xyz" }
# h2.deep_merge(h1#=> { :x => {:y => [4, 5, 6]}, :z => [7, 8, 9] }
deep_merge(other_hash)
# Same as +deep_merge+, but modifies +self+.
deep_merge!(other_hash)
# return bool that does the sub hash all element include the hash who call this or not
deep_include?(sub_hash)
in Kernel
# eats puts like formated printf method
# just use an integer what will be the distance
# between elements and the elements next to it
putsf(integer,*args)