Module: Gamefic::Sdk::Scaffold
- Defined in:
- lib/gamefic-sdk/scaffold.rb
Defined Under Namespace
Classes: Binder
Class Method Summary collapse
- .build(name, destination) ⇒ Object
- .custom_copy(origin, destination, data) ⇒ Object
- .render(file, data) ⇒ Object
Class Method Details
.build(name, destination) ⇒ Object
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 |