From a5e97af3a3c46d77ba23f711a173b24295e2026a Mon Sep 17 00:00:00 2001 From: Alex Ling Date: Sun, 3 May 2020 16:31:00 +0000 Subject: [PATCH] Use abstract class in the Rename module --- src/rename.cr | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/rename.cr b/src/rename.cr index aff7a46..af115e6 100644 --- a/src/rename.cr +++ b/src/rename.cr @@ -1,7 +1,17 @@ module Rename alias VHash = Hash(String, String) - class Variable + abstract class Base(T) + @ary = [] of T + + def push(var) + @ary.push var + end + + abstract def render(hash : VHash) + end + + class Variable < Base(String) property id : String def initialize(@id) @@ -12,13 +22,7 @@ module Rename end end - class Pattern - @ary = [] of Variable - - def push(var) - @ary.push var - end - + class Pattern < Base(Variable) def render(hash : VHash) @ary.each do |v| if hash.has_key? v.id @@ -29,13 +33,7 @@ module Rename end end - class Group - @ary = [] of (Pattern | String) - - def push(var) - @ary.push var - end - + class Group < Base(Pattern | String) def render(hash : VHash) return "" if @ary.select(&.is_a? Pattern) .any? &.as(Pattern).render(hash).empty? @@ -49,11 +47,9 @@ module Rename end end - class Rule + class Rule < Base(Group | String | Pattern) ESCAPE = ['/'] - @ary = [] of (Group | String | Pattern) - def initialize(str : String) parse! str rescue e