Class: Mygen::Generator

Inherits:
Object
  • Object
show all
Includes:
Naming
Defined in:
lib/mygen/generator.rb

Direct Known Subclasses

Plugins::MygenGenerator

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Naming

#camel_case, #cc_name, #d_name, #dash_case, #no_case, #s_name, #snake_case

Constructor Details

#initializeGenerator

Returns a new instance of Generator.



7
8
9
# File 'lib/mygen/generator.rb', line 7

def initialize
  @template_source_dir = File.join(ENV['HOME'], ".mygen", "plugins", generator_name, "templates")
end

Instance Attribute Details

#dest_dirObject

Returns the value of attribute dest_dir.



5
6
7
# File 'lib/mygen/generator.rb', line 5

def dest_dir
  @dest_dir
end

#dry_runObject

Returns the value of attribute dry_run.



5
6
7
# File 'lib/mygen/generator.rb', line 5

def dry_run
  @dry_run
end

#nameObject

Returns the value of attribute name.



5
6
7
# File 'lib/mygen/generator.rb', line 5

def name
  @name
end

#template_source_dirObject

Returns the value of attribute template_source_dir.



5
6
7
# File 'lib/mygen/generator.rb', line 5

def template_source_dir
  @template_source_dir
end

Class Method Details

.descendantsObject



11
12
13
# File 'lib/mygen/generator.rb', line 11

def self.descendants
  ObjectSpace.each_object(Class).select { |klass| klass < self }
end

Instance Method Details

#descriptionObject



15
16
17
# File 'lib/mygen/generator.rb', line 15

def description
  "Plugin has no description"
end

#file_destination(file, bindings) ⇒ Object



86
87
88
89
90
# File 'lib/mygen/generator.rb', line 86

def file_destination(file, bindings)
  # subtract template_source_dir from path, add dest_dir and substitute filenames
  new_file = file.gsub(template_source_dir, '')
  replaced_filename(new_file, bindings)
end

#fileutilsObject



23
24
25
# File 'lib/mygen/generator.rb', line 23

def fileutils
  dry_run ? FileUtils::DryRun : FileUtils::Verbose
end

#generator_nameObject



19
20
21
# File 'lib/mygen/generator.rb', line 19

def generator_name
  snake_case(self.class.name)
end

#internal_template_filesObject



35
36
37
# File 'lib/mygen/generator.rb', line 35

def internal_template_files
  template_files(internal_template_source_dir)
end

#internal_template_source_dirObject



39
40
41
# File 'lib/mygen/generator.rb', line 39

def internal_template_source_dir
  File.join(Mygen.root, "templates", generator_name)
end

#make_template_tree(internal = false) ⇒ Object



43
44
45
46
47
# File 'lib/mygen/generator.rb', line 43

def make_template_tree(internal = false)
  @template_source_dir = internal_template_source_dir if internal
  fileutils.rm_rf(dest_dir) if File.exist?(dest_dir)
  fileutils.cp_r(template_source_dir, dest_dir)
end

#move_file_in_place(src, dest) ⇒ Object



75
76
77
78
79
# File 'lib/mygen/generator.rb', line 75

def move_file_in_place(src, dest)
  sf = File.absolute_path(src)
  df = File.absolute_path(dest)
  fileutils.mv(sf, df) unless sf == df
end

#parse(file, bindings) ⇒ Object



69
70
71
72
73
# File 'lib/mygen/generator.rb', line 69

def parse(file, bindings)
  erb = ERB.new(File.read(file))
  result = erb.result bindings
  File.open(file, "w") { |f| f.write(result) }
end

#parse_and_place_file(file, dest, bindings) ⇒ Object



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

def parse_and_place_file(file, dest, bindings)
  erb = ERB.new(File.read(file))
  erb.result bindings
end

#parse_templates(bindings) ⇒ Object

rename directories that should be filtered, from __name files should be from the destination, so no dirs needs to be filtered and only files need to be processed.



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/mygen/generator.rb', line 53

def parse_templates(bindings)
  template_dirs(File.join(dest_dir)).each do |dir|
    dest = file_destination(dir, bindings)
    move_file_in_place(dir, dest)
  end
#      Filter files with erb
  template_files(File.join(dest_dir)).each do |file|
    dest = file_destination(file, bindings)
    # This is where you parse the erb files and fill in the contens
    if file.end_with? 'erb'
      parse(file, bindings)
    end
    move_file_in_place(file, dest)
  end
end

#template_dirs(path = template_source_dir) ⇒ Object



31
32
33
# File 'lib/mygen/generator.rb', line 31

def template_dirs(path = template_source_dir)
  Dir.glob(File.join(path, "**/*")).select { |f| File.directory? f }
end

#template_files(path = template_source_dir) ⇒ Object



27
28
29
# File 'lib/mygen/generator.rb', line 27

def template_files(path = template_source_dir)
  Dir.glob(File.join(path, "**/*")).select { |f| File.file? f }
end