lib/hash/hash_path_proc.rb in bblib-0.2.2 vs lib/hash/hash_path_proc.rb in bblib-0.3.0
- old
+ new
@@ -1,22 +1,25 @@
require 'time'
class Hash
- def hash_path_proc action, paths, *args, **params
- BBLib.hash_path_proc self, action, paths, *args, **params
+ def path_proc action, paths, *args
+ BBLib.hash_path_proc self, action, paths, *args
end
+
+ alias_method :hash_path_proc, :path_proc
end
class Array
- def hash_path_proc action, paths, *args, **params
- BBLib.hash_path_proc self, action, paths, *args, **params
+ def hash_path_proc action, paths, *args
+ BBLib.hash_path_proc self, action, paths, *args
end
end
module BBLib
- def self.hash_path_proc hash, action, paths, *args, **params
+ def self.hash_path_proc hash, action, paths, *args
+ params = BBLib::named_args(*args)
action = HASH_PATH_PROC_TYPES.keys.find{ |k| k == action || HASH_PATH_PROC_TYPES[k][:aliases].include?(action) }
return nil unless action
paths.to_a.each do |path|
hash.hash_path(path).each do |value|
if params.include?(:condition) && params[:condition]
@@ -24,95 +27,93 @@
next unless eval(params[:condition].gsub('$', value.to_s))
rescue StandardError, SyntaxError => e
next
end
end
- HashPath.send(action, hash, path, value, *args, **params)
+ HashPath.send(action, hash, path, value, *args)
end
end
return hash
end
HASH_PATH_PROC_TYPES = {
- evaluate: { aliases: [:eval, :equation, :equate]},
- append: { aliases: [:suffix]},
- prepend: { aliases: [:prefix]},
- split: { aliases: [:delimit, :delim, :separate, :msplit]},
- replace: { aliases: [:swap]},
- extract: { aliases: [:grab, :scan]},
- extract_first: {aliases: [:grab_first, :scan_first]},
- extract_last: {aliases: [:grab_last, :scan_last]},
- parse_date: { aliases: [:date, :parse_time, :time]},
- parse_date_unix: { aliases: [:unix_time, :unix_date]},
- parse_duration: { aliases: [:duration]},
- parse_file_size: { aliases: [:file_size]},
- to_string: {aliases: [:to_s, :stringify]},
- downcase: { aliases: [:lower, :lowercase, :to_lower]},
- upcase: { aliases: [:upper, :uppercase, :to_upper]},
- roman: { aliases: [:convert_roman, :roman_numeral, :parse_roman]},
- remove_symbols: { aliases: [:chop_symbols, :drop_symbols]},
- format_articles: { aliases: [:articles]},
- reverse: { aliases: [:invert]},
- delete: { aliases: [:del]},
- remove: { aliases: [:rem]},
- custom: {aliases: [:send]},
- # TODO
- # titlecase: { aliases: [:title_case]},
- encapsulate: {aliases: []},
- uncapsulate: {aliases: []},
- extract_integers: {aliases: [:extract_ints]},
- extract_floats: {aliases: []},
- extract_numbers: {aliases: []},
- max_number: {aliases: [:max, :maximum, :maximum_number]},
- min_number: {aliases: [:min, :minimum, :minimum_number]},
- avg_number: {aliases: [:avg, :average, :average_number]},
- sum_number: {aliases: [:sum]},
- strip: {aliases: [:trim]},
- # rename: { aliases: [:rename_key]},
- concat: { aliases: [:join, :concat_with]},
- reverse_concat: { aliases: [:reverse_join, :reverse_concat_with]}
+ evaluate: { aliases: [:eval, :equation, :equate]},
+ append: { aliases: [:suffix]},
+ prepend: { aliases: [:prefix]},
+ split: { aliases: [:delimit, :delim, :separate, :msplit]},
+ replace: { aliases: [:swap]},
+ extract: { aliases: [:grab, :scan]},
+ extract_first: { aliases: [:grab_first, :scan_first]},
+ extract_last: { aliases: [:grab_last, :scan_last]},
+ parse_date: { aliases: [:date, :parse_time, :time]},
+ parse_date_unix: { aliases: [:unix_time, :unix_date]},
+ parse_duration: { aliases: [:duration]},
+ parse_file_size: { aliases: [:file_size]},
+ to_string: { aliases: [:to_s, :stringify]},
+ downcase: { aliases: [:lower, :lowercase, :to_lower]},
+ upcase: { aliases: [:upper, :uppercase, :to_upper]},
+ roman: { aliases: [:convert_roman, :roman_numeral, :parse_roman]},
+ remove_symbols: { aliases: [:chop_symbols, :drop_symbols]},
+ format_articles: { aliases: [:articles]},
+ reverse: { aliases: [:invert]},
+ delete: { aliases: [:del]},
+ remove: { aliases: [:rem]},
+ custom: { aliases: [:send]},
+ encapsulate: { aliases: []},
+ uncapsulate: {aliases: []},
+ extract_integers: { aliases: [:extract_ints]},
+ extract_floats: { aliases: []},
+ extract_numbers: { aliases: []},
+ max_number: { aliases: [:max, :maximum, :maximum_number]},
+ min_number: { aliases: [:min, :minimum, :minimum_number]},
+ avg_number: { aliases: [:avg, :average, :average_number]},
+ sum_number: { aliases: [:sum]},
+ strip: { aliases: [:trim]},
+ concat: { aliases: [:join, :concat_with]},
+ reverse_concat: { aliases: [:reverse_join, :reverse_concat_with]}
}
module HashPath
- def self.evaluate hash, path, value, args, params
+ def self.evaluate hash, path, value, args
exp = args.to_a.first.to_s.gsub('$', value.to_s)
hash.hash_path_set path => eval(exp)
end
- def self.append hash, path, value, args, params
+ def self.append hash, path, value, args
hash.hash_path_set path => "#{value}#{args}"
end
- def self.prepend hash, path, value, args, params
+ def self.prepend hash, path, value, args
hash.hash_path_set path => "#{args}#{value}"
end
- def self.split hash, path, value, args, params
+ def self.split hash, path, value, args
hash.hash_path_set path => value.msplit(args)
end
- def self.replace hash, path, value, args, params
+ def self.replace hash, path, value, args
value = value.dup.to_s
args.each{ |k,v| value.gsub!(k, v.to_s) }
hash.hash_path_set path => value
end
- def self.extract hash, path, value, *args, **params
+ def self.extract hash, path, value, *args
slice = (Array === args && args[1].nil? ? (0..-1) : args[1])
hash.hash_path_set path => value.to_s.scan(args.first)[slice]
end
- def self.extract_first hash, path, value, *args, **params
+ def self.extract_first hash, path, value, *args
extract(hash, path, value, *args + [0])
end
- def self.extract_last hash, path, value, *args, **params
+ def self.extract_last hash, path, value, *args
extract(hash, path, value, *args + [-1])
end
- def self.parse_date hash, path, value, *args, **params
+ def self.parse_date hash, path, value, *args
+ params = BBLib::named_args(args)
format = params.include?(:format) ? params[:format] : '%Y-%m-%d %H:%M:%S'
formatted = nil
args.each do |pattern|
next unless formatted.nil?
begin
@@ -125,11 +126,12 @@
rescue
end
hash.hash_path_set path => formatted
end
- def self.parse_date_unix hash, path, value, *args, **params
+ def self.parse_date_unix hash, path, value, *args
+ params = BBLib::named_args(args)
format = params.include?(:format) ? params[:format] : '%Y-%m-%d %H:%M:%S'
formatted = nil
args.each do |pattern|
next unless formatted.nil?
begin
@@ -142,113 +144,111 @@
rescue
end
hash.hash_path_set path => formatted.to_f
end
- def self.parse_duration hash, path, value, args, params
+ def self.parse_duration hash, path, value, args
hash.hash_path_set path => value.to_s.parse_duration(output: args.empty? ? :sec : args )
end
- def self.parse_file_size hash, path, value, args, params
+ def self.parse_file_size hash, path, value, args
hash.hash_path_set path => value.to_s.parse_file_size(output: args.empty? ? :bytes : args )
end
- def self.to_string hash, path, value, *args, **params
+ def self.to_string hash, path, value, *args
hash.hash_path_set path => value.to_s
end
- def self.downcase hash, path, value, *args, **params
+ def self.downcase hash, path, value, *args
hash.hash_path_set path => value.to_s.downcase
end
- def self.upcase hash, path, value, *args, **params
+ def self.upcase hash, path, value, *args
hash.hash_path_set path => value.to_s.upcase
end
- def self.roman hash, path, value, *args, **params
+ def self.roman hash, path, value, *args
hash.hash_path_set path => (args[0] == :to ? value.to_s.to_roman : value.to_s.from_roman)
end
- def self.remove_symbols hash, path, value, *args, **params
+ def self.remove_symbols hash, path, value, *args
hash.hash_path_set path => value.to_s.drop_symbols
end
- def self.format_articles hash, path, value, args, **params
+ def self.format_articles hash, path, value, args
hash.hash_path_set path => value.to_s.move_articles(args.nil? ? :front : args)
end
- def self.reverse hash, path, value, *args, **params
+ def self.reverse hash, path, value, *args
hash.hash_path_set path => value.to_s.reverse
end
- def self.delete hash, path, value, *args, **params
+ def self.delete hash, path, value, *args
hash.hash_path_delete path
end
- def self.remove hash, path, value, *args, **params
+ def self.remove hash, path, value, *args
removed = value.to_s
args.each{ |a| removed.gsub!(a, '')}
hash.hash_path_set path => removed
end
- def self.custom hash, path, value, *args, **params
- if params.nil? || params.empty?
- hash.hash_path_set path => value.send(*args)
- else
- hash.hash_path_set path => value.send(*args, **params)
- end
+ def self.custom hash, path, value, *args
+ hash.hash_path_set path => value.send(*args)
end
- def self.encapsulate hash, path, value, args, **params
+ def self.encapsulate hash, path, value, args
hash.hash_path_set path => "#{args}#{value}#{args}"
end
- def self.uncapsulate hash, path, value, args, **params
+ def self.uncapsulate hash, path, value, args
value = value[args.size..-1] if value.start_with?(args)
value = value[0..-(args.size)-1] if value.end_with?(args)
hash.hash_path_set path => value
end
- def self.max_number hash, path, value, *args, **params
+ def self.max_number hash, path, value, *args
hash.hash_path_set path => value.to_s.extract_numbers.max
end
- def self.min_number hash, path, value, *args, **params
+ def self.min_number hash, path, value, *args
hash.hash_path_set path => value.to_s.extract_numbers.min
end
- def self.avg_number hash, path, value, *args, **params
+ def self.avg_number hash, path, value, *args
nums = value.to_s.extract_numbers
avg = nums.inject{ |s, x| s + x }.to_f / nums.size.to_f
hash.hash_path_set path => avg
end
- def self.sum_number hash, path, value, *args, **params
+ def self.sum_number hash, path, value, *args
hash.hash_path_set path => value.to_s.extract_numbers.inject{ |s,x| s + x }
end
- def self.strip hash, path, value, args, **params
+ def self.strip hash, path, value, args
value.map!{ |m| m.respond_to?(:strip) ? m.strip : m } if value.is_a?(Array)
hash.hash_path_set path => (value.respond_to?(:strip) ? value.strip : value)
end
- def self.extract_integers hash, path, value, args, **params
+ def self.extract_integers hash, path, value, args
hash.hash_path_set path => (value.extract_integers)
end
- def self.extract_floats hash, path, value, args, **params
+ def self.extract_floats hash, path, value, args
hash.hash_path_set path => (value.extract_floats)
end
- def self.extract_numbers hash, path, value, args, **params
+ def self.extract_numbers hash, path, value, args
hash.hash_path_set path => (value.extract_numbers)
end
- def self.concat hash, path, value, *args, **params
+ def self.concat hash, path, value, *args
+ params = BBLib::named_args(args)
hash.hash_path_set path => "#{value}#{params[:join]}#{hash.hash_path(args.first)[params[:range].nil? ? 0 : params[:range]]}"
end
- def self.reverse_concat hash, path, value, *args, **params
+ def self.reverse_concat hash, path, value, *args
+ params = BBLib::named_args(args)
hash.hash_path_set path => "#{hash.hash_path(args.first)[params[:range].nil? ? 0 : params[:range]]}#{params[:join]}#{value}"
end
end