Class: Microgem::Generator

Inherits:
Thor::Group
  • Object
show all
Includes:
Thor::Actions
Defined in:
lib/microgem/generator.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#settingsObject (readonly)

Returns the value of attribute settings.



20
21
22
# File 'lib/microgem/generator.rb', line 20

def settings
  @settings
end

Class Method Details

.source_rootObject



9
10
11
# File 'lib/microgem/generator.rb', line 9

def self.source_root
  File.dirname(__FILE__) + '/../../template/'
end

Instance Method Details

#current_yearObject



97
98
99
# File 'lib/microgem/generator.rb', line 97

def current_year
  Date.today.year
end

#generateObject



101
102
103
104
105
106
107
108
# File 'lib/microgem/generator.rb', line 101

def generate
  directory ".", name,  exclude_pattern: %r<_spec.rb|Gemfile|\.travis\.yml>
  if options[:specs]
    directory "spec", name + "/spec"
    template ".travis.yml", name + "/.travis.yml"
    copy_file "Gemfile", name + "/Gemfile"
  end
end

#github_nameObject



85
86
87
# File 'lib/microgem/generator.rb', line 85

def github_name
  options[:github] || name
end

#infoObject



89
90
91
# File 'lib/microgem/generator.rb', line 89

def info
  options[:info]
end

#last_nameObject



77
78
79
# File 'lib/microgem/generator.rb', line 77

def last_name
  path[%r<[^/]+$>]
end

#load_settingsObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/microgem/generator.rb', line 22

def load_settings
  dotfile_path = File.expand_path("~/.microgem")
  if File.exist? dotfile_path
    @settings = JSON.load File.read(dotfile_path)
  else
    @settings = {}
    say "This is your first microgem. Please tell me who you are!"
    guess_author = `git config user.name`.chomp
    guess_author = nil if guess_author.empty?
    guess_email  = `git config user.email`.chomp
    guess_email = nil if guess_email.empty?
    guess_github = `git config github.user`.chomp
    guess_github = nil if guess_github.empty?
    @settings["author"]  = ask("Your Name" + (guess_author ? " [#{guess_author}]:" : ":"))
    @settings["author"] = guess_author if @settings["author"].empty? && guess_author
    @settings["email"]   = ask("Your E-Mail" + (guess_email ? " [#{guess_email}]:" : ":")) || guess_email
    @settings["email"] = guess_email if @settings["email"].empty? && guess_email
    @settings["website"] = ask("Your Website:")
    @settings["github"]  = ask("Your GitHub Name" + (guess_github ? " [#{guess_github}]:" : ":")) || guess_github
    @settings["github"] = guess_github if @settings["github"].empty? && guess_github
    File.write dotfile_path, JSON.dump(@settings)
  end
end

#module_def(index = nil) ⇒ Object

    • -



57
58
59
# File 'lib/microgem/generator.rb', line 57

def module_def(index=nil)
  options[:class] && index && sub_modules.size == index + 1 ? "class" : "module"
end

#module_nameObject



61
62
63
# File 'lib/microgem/generator.rb', line 61

def module_name
  name.gsub(/-[_-]*(?![_-]|$)/){ '::' }.gsub(/(^?[_-]+|(?<=:)|^)(.|$)/){ $2.upcase }
end

#pathObject



69
70
71
# File 'lib/microgem/generator.rb', line 69

def path
  name.gsub(/-[_-]*(?![_-]|$)/){ '/' }
end

#spec_nameObject



73
74
75
# File 'lib/microgem/generator.rb', line 73

def spec_name
  name.gsub(/-[_-]*(?![_-]|$)/){ '_' }
end

#specsObject



81
82
83
# File 'lib/microgem/generator.rb', line 81

def specs
  options[:specs]
end

#sub_modulesObject



65
66
67
# File 'lib/microgem/generator.rb', line 65

def sub_modules
  module_name.split '::'
end

#validate_nameObject



46
47
48
49
50
51
52
53
# File 'lib/microgem/generator.rb', line 46

def validate_name
  unless name =~ /\A[A-Z0-9_-]+\z/i
    raise ArgumentError, "invalid gem name: must only contain A-Z, 0-9, _ or -"
  end
  if module_name =~ /::[^A-Z]/
    raise ArgumentError, "invalid gem name: module names only allowed to start with A-Z"
  end
end

#versionObject



93
94
95
# File 'lib/microgem/generator.rb', line 93

def version
  options[:version]
end