Module: SimpleCommand::KlassTransform
- Included in:
- Dispatcher
- Defined in:
- lib/simple_command_dispatcher/klass_transform.rb
Overview
Handles class and module transformations.
Instance Method Summary collapse
-
#camelize(token) ⇒ String
Transforms a route into a module string.
-
#ensure_options(options) ⇒ Hash
Ensures options are initialized and valid before accessing them.
-
#to_class_string(klass, options = {}) ⇒ String
Returns the klass as a string after transformations have been applied.
-
#to_constantized_class(klass, klass_modules = [], options = {}) ⇒ Class
Returns a constantized class (as a Class constant), given the klass and klass_modules.
-
#to_constantized_class_string(klass, klass_modules = [], options = {}) ⇒ String
Returns a fully-qualified constantized class (as a string), given the klass and klass_modules.
-
#to_modules_string(klass_modules = [], options = {}) ⇒ String
Returns a string of modules that can be subsequently prepended to a class, to create a constantized class.
-
#validate_klass(klass, options) ⇒ String
Validates klass and returns klass as a string after all blanks have been removed using klass.gsub(/s+/, “”).
-
#validate_klass_modules(klass_modules) ⇒ Symbol, Array or String
Validates and returns klass_modules.
Instance Method Details
#camelize(token) ⇒ String
Transforms a route into a module string
147 148 149 150 151 152 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 147 def camelize(token) if !token.instance_of? String raise ArgumentError.new('Token is not a String') end token = token.titlecase.camelize.sub(/^[:]*/,"").trim_all unless token.empty? end |
#ensure_options(options) ⇒ Hash
Ensures options are initialized and valid before accessing them.
170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 170 def () = {} unless .instance_of? Hash = { camelize: false, titleize: false, class_titleize: false, module_titleize: false, class_camelize: false, module_camelize: false}.merge() if [:camelize] [:class_camelize] = [:module_camelize] = true end if [:titleize] [:class_titleize] = [:module_titleize] = true end end |
#to_class_string(klass, options = {}) ⇒ String
Returns the klass as a string after transformations have been applied.
127 128 129 130 131 132 133 134 135 136 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 127 def to_class_string(klass, = {}) klass = validate_klass(klass, ) if [:class_titleize] klass = klass.titleize end if [:class_camelize] klass = camelize(klass) end klass end |
#to_constantized_class(klass, klass_modules = [], options = {}) ⇒ Class
Returns a constantized class (as a Class constant), given the klass and klass_modules.
32 33 34 35 36 37 38 39 40 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 32 def to_constantized_class(klass, klass_modules = [], = {}) constantized_class_string = to_constantized_class_string(klass, klass_modules, ) begin constantized_class_string.constantize rescue raise NameError.new("\"#{constantized_class_string}\" is not a valid class constant.") end end |
#to_constantized_class_string(klass, klass_modules = [], options = {}) ⇒ String
Returns a fully-qualified constantized class (as a string), given the klass and klass_modules.
59 60 61 62 63 64 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 59 def to_constantized_class_string(klass, klass_modules = [], = {}) = () klass_modules = to_modules_string(klass_modules, ) klass_string = to_class_string(klass, ) "#{klass_modules}#{klass_string}" end |
#to_modules_string(klass_modules = [], options = {}) ⇒ String
Returns a string of modules that can be subsequently prepended to a class, to create a constantized class.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 83 def to_modules_string(klass_modules = [], = {}) klass_modules = validate_klass_modules(klass_modules) = () klass_modules_string = '' if !klass_modules.empty? case klass_modules when String klass_modules_string = klass_modules when Array klass_modules_string = "#{klass_modules.join('::')}" when Hash klass_modules_string = '' klass_modules.to_a.each_with_index.map { | value, index | klass_modules_string = index == 0 ? value[1].to_s : "#{klass_modules_string}::#{value[1]}" } else raise ArgumentError.new('Class modules is not a String, Hash or Array.') end klass_modules_string = klass_modules_string.split('::').map(&:titleize).join('::') if [:module_titleize] klass_modules_string = camelize(klass_modules_string) if [:module_camelize] klass_modules_string = klass_modules_string.trim_all klass_modules_string = "#{klass_modules_string}::" unless klass_modules_string.empty? end klass_modules_string end |
#validate_klass(klass, options) ⇒ String
Validates klass and returns klass as a string after all blanks have been removed using klass.gsub(/s+/, “”).
200 201 202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 200 def validate_klass(klass, ) if !(klass.is_a?(Symbol) || klass.is_a?(String)) raise ArgumentError.new('Class is not a String or Symbol. Class must equal the class name of the SimpleCommand or Command to call in the form of a String or Symbol.') end klass = klass.to_s.strip if klass.empty? raise ArgumentError.new('Class is empty?') end klass end |
#validate_klass_modules(klass_modules) ⇒ Symbol, Array or String
Validates and returns klass_modules.
230 231 232 233 234 235 236 237 238 |
# File 'lib/simple_command_dispatcher/klass_transform.rb', line 230 def validate_klass_modules(klass_modules) return {} if klass_modules.nil? || (klass_modules.respond_to?(:empty?) && klass_modules.empty?) if !klass_modules.instance_of?(String) && !klass_modules.instance_of?(Hash) && !klass_modules.instance_of?(Array) raise ArgumentError.new('Class modules is not a String, Hash or Array.') end klass_modules end |