Sha256: 80e731d77d46ea2df7dd8648bdb8d05d2cab34bdd80a19406755d8f32228a160

Contents?: true

Size: 1.13 KB

Versions: 7

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

require "fileutils"
require "ggem/template"

module GGem; end

class GGem::Gem
  NoNameError = Class.new(ArgumentError)

  attr_reader :root_path, :name

  def initialize(path, name)
    raise NoNameError if name.to_s.empty?
    @root_path, self.name = path, name
  end

  def save!
    GGem::Template.new(self).save
    self
  end

  def path
    File.join(@root_path, @name)
  end

  def name=(name)
    @name = normalize_name(name)
  end

  def module_name
    transforms = {
      "_" => "",
      "-" => "",
    }
    @module_name ||= transform_name(transforms, &:capitalize)
  end

  def ruby_name
    @ruby_name ||= transform_name(&:downcase)
  end

  private

  def normalize_name(name)
    und_camelcs = [/([A-Z])([a-z])/, '_\1\2']
    rm_dup_und  = [/_+/, "_"]
    rm_lead_und = [/^_/, ""]
    name.gsub(*und_camelcs).gsub(*rm_dup_und).sub(*rm_lead_und).downcase
  end

  def transform_name(conditions = {}, &block)
    n = (block ? block.call(name) : name)
    conditions.each do |on, glue|
      if (a = n.split(on)).size > 1
        n = a.map{ |part| block&.call(part) }.join(glue)
      end
    end
    n
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
ggem-1.10.6 lib/ggem/gem.rb
ggem-1.10.5 lib/ggem/gem.rb
ggem-1.10.4 lib/ggem/gem.rb
ggem-1.10.3 lib/ggem/gem.rb
ggem-1.10.2 lib/ggem/gem.rb
ggem-1.10.1 lib/ggem/gem.rb
ggem-1.10.0 lib/ggem/gem.rb