module Ovaltine

Constants

VERSION

Public Class Methods

create_constant_files(path, options) click to toggle source
# File lib/ovaltine.rb, line 12
def self.create_constant_files(path, options)
  require_formatter(options[:language])
  files = Dir.glob("#{path}/**/*.storyboard")
  groups = files.group_by {|f| File.basename(f).sub('.storyboard','')}
  formatters = groups.map do |name, paths|
    storyboard = Storyboard.new(name, paths)
    StoryboardFormatter.new(storyboard, options[:prefix], options[:copy], (options[:output_directory] || path))
  end
  generated_paths = formatters.map(&:output_paths).flatten
  if existing_path = generated_paths.detect {|p| File.exist?(p)} and !options[:auto_replace]
    return unless prompt("Some generated files already exist. Overwrite? (Y/n)", 'y')
  end

  paths = write_files(formatters)

  if project_filepath = options[:project] || Dir.glob("#{File.dirname(path)}/**/*.xcodeproj").first
    return unless options[:auto_add] or prompt("Add files to project? (y/N)", 'n')
    project = XcodeProject.new(project_filepath)
    if paths.sort.map {|p| project.add_file_ref(p)}.compact.size > 0
      project.save
      puts "#{File.basename(project_filepath)} updated"
    else
      puts "All files already added"
    end
  end
end

Private Class Methods

prompt(title, default_answer) click to toggle source
# File lib/ovaltine.rb, line 54
def self.prompt title, default_answer
  puts title
  answer = STDIN.gets.chomp
  if answer.length == 0
    default_answer == 'y'
  elsif !['y','n'].include?(answer.downcase)
    false
  else
    answer.downcase == 'y'
  end
end
require_formatter(language='objc') click to toggle source
# File lib/ovaltine.rb, line 66
def self.require_formatter(language='objc')
  case language
  when 'objc'
    require 'ovaltine/objc/storyboard_formatter'
    require 'ovaltine/objc/storyboard_templates'
  end
end
write_files(formatters) click to toggle source
# File lib/ovaltine.rb, line 41
def self.write_files formatters
  files = []
  formatters.each do |formatter|
    formatter.write
    files += formatter.output_paths
  end
  files.each do |path|
    puts "  * #{File.basename(path)}"
  end
  puts "\n#{files.size} files generated"
  files
end