lib/chgk_rating/utils/transformations.rb in chgk_rating-1.0.0.rc1 vs lib/chgk_rating/utils/transformations.rb in chgk_rating-1.0.0

- old
+ new

@@ -1,83 +1,83 @@ -module ChgkRating - module Utils - module Transformations - def transformation(name = 'integer_string') - up, down = name.to_s.split '_' - up = 'integer' if up.nil? || up.empty? - down = 'string' if down.nil? || down.empty? - - %i(up down).inject({}) do |result, t| - current_transformer = binding.local_variable_get t - result.merge({ - "transform_#{t}".to_sym => send(current_transformer) - }) - end - end - - class << self - def load_transformers! - TRANSFORMERS.each do |method_name, transformer| - define_method(method_name) { transformer } - end - end - - private - - def chgk_object(namespace, type = 'Models') - ->(d) do - opts = type == 'Models' ? - [d, {lazy: true}] : - [{collection: d, lazy: true}] - - Module.const_get("ChgkRating::#{type}::#{namespace}").new(*opts) - end - end - - def to_boolean - ->(d) { !d.to_i.zero? } - end - - def to_binary_boolean - ->(d) { d ? '1' : '0' } - end - - def to_star(method = :to_s, iterate = false) - ->(d) do - iterate ? - d.map {|obj| obj.send method } : - d.send(method) - end - end - end - - TRANSFORMERS = { - string: to_star, - integer: to_star(:to_i), - float: to_star(:to_f), - id: to_star(:id), - ids: to_star(:id, true), - sym: to_star(:to_sym), - strdate: to_star(:to_s_chgk), - uri: ->(d) { URI.parse_safely d }, - boolean: to_boolean, - binboolean: to_binary_boolean, - date: ->(d) { Date.parse_safely d}, - datetime: ->(d) { DateTime.parse_safely d}, - splitboolean: ->(d) do - d&.split('')&.map {|result| to_boolean.call(result)} - end, - arraystrboolean: ->(d) do - d&.map {|result| to_binary_boolean.call(result)} - end, - arrayboolean: ->(d) do - d&.map {|result| to_boolean.call(result)} - end, - team: chgk_object('Team'), - player: chgk_object('Player'), - players: chgk_object('Players', 'Collections') - }.freeze - - load_transformers! - end - end +module ChgkRating + module Utils + module Transformations + def transformation(name = 'integer_string') + up, down = name.to_s.split '_' + up = 'integer' if up.nil? || up.empty? + down = 'string' if down.nil? || down.empty? + + %i(up down).inject({}) do |result, t| + current_transformer = binding.local_variable_get t + result.merge({ + "transform_#{t}".to_sym => send(current_transformer) + }) + end + end + + class << self + def load_transformers! + TRANSFORMERS.each do |method_name, transformer| + define_method(method_name) { transformer } + end + end + + private + + def chgk_object(namespace, type = 'Models') + ->(d) do + opts = type == 'Models' ? + [d, {lazy: true}] : + [{collection: d, lazy: true}] + + Module.const_get("ChgkRating::#{type}::#{namespace}").new(*opts) + end + end + + def to_boolean + ->(d) { !d.to_i.zero? } + end + + def to_binary_boolean + ->(d) { d ? '1' : '0' } + end + + def to_star(method = :to_s, iterate = false) + ->(d) do + iterate ? + d.map {|obj| obj.send method } : + d.send(method) + end + end + end + + TRANSFORMERS = { + string: to_star, + integer: to_star(:to_i), + float: to_star(:to_f), + id: to_star(:id), + ids: to_star(:id, true), + sym: to_star(:to_sym), + strdate: to_star(:to_s_chgk), + uri: ->(d) { URI.parse_safely d }, + boolean: to_boolean, + binboolean: to_binary_boolean, + date: ->(d) { Date.parse_safely d}, + datetime: ->(d) { DateTime.parse_safely d}, + splitboolean: ->(d) do + d&.split('')&.map {|result| to_boolean.call(result)} + end, + arraystrboolean: ->(d) do + d&.map {|result| to_binary_boolean.call(result)} + end, + arrayboolean: ->(d) do + d&.map {|result| to_boolean.call(result)} + end, + team: chgk_object('Team'), + player: chgk_object('Player'), + players: chgk_object('Players', 'Collections') + }.freeze + + load_transformers! + end + end end \ No newline at end of file