Module: Gamefic::Sdk::Scaffold

Defined in:
lib/gamefic-sdk/scaffold.rb

Defined Under Namespace

Classes: Binder

Class Method Summary collapse

Class Method Details

.build(name, destination) ⇒ Object

Raises:

  • (LoadError)


33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/gamefic-sdk/scaffold.rb', line 33

def build name, destination
  dir = File.join(SCAFFOLDS_PATH, name)
  raise LoadError, "Scaffold `#{name}` does not exist" unless File.directory?(dir)
  path = Pathname.new('.').join(destination).realdirpath
  data = Binder.new(name: File.basename(path))
  files = Dir.glob(File.join(dir, '**', '*'), File::FNM_DOTMATCH).select { |entry| File.file?(entry) }
  map = {}
  files.each do |file|
    rename = File.join(File.dirname(file), File.basename(file).gsub('__name__', data.name))
    dst = File.join(destination, rename[dir.length..-1])
    if File.file?(dst)
      raise "Gamefic generation would overwrite existing file #{rename}"
    else
      map[file] = dst
    end
  end
  map.each_pair { |src, dst| custom_copy src, dst, data }
  system "bundle install --gemfile=#{Shellwords.escape(File.join(destination, 'Gemfile'))}"
end

.custom_copy(origin, destination, data) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/gamefic-sdk/scaffold.rb', line 24

def custom_copy origin, destination, data
  FileUtils.mkdir_p File.dirname(destination)
  if destination.end_with?('.gf.erb')
    File.write destination[0..-8], render(origin, data)
  else
    FileUtils.cp_r origin, destination
  end
end

.render(file, data) ⇒ Object



18
19
20
21
22
# File 'lib/gamefic-sdk/scaffold.rb', line 18

def render(file, data)
  template = File.read(file)
  erb = ERB.new(template)
  erb.result(data.get_binding)
end