Sha256: a9f3a2c800ac4ffc36879260cf3439929917443c1f77ee0ef6d3de5fa341549e

Contents?: true

Size: 1.84 KB

Versions: 1

Compression:

Stored size: 1.84 KB

Contents

require 'spectifly/xsd'

namespace :spectifly do
  namespace :xsd do
    def write_entity(entity, path)
      File.open(File.join(path, "#{entity.name}.xsd"), 'w') do |f|
        f.write Spectifly::Xsd::Builder.new(entity).build
      end
    end

    Spectifly::Task.new('generate_from_entities', [:destination_path]) do |spectifly, args|
      options = File.exist?(spectifly.presenter_path) ? { :presenter_path => spectifly.presenter_path } : {}

      Spectifly::Entity.from_directory(spectifly.entity_path, options).each do |name, entity|
        if entity.is_a? Spectifly::Entity
          write_entity(entity, args[:destination_path])
        else
          presenter_path = File.join(args[:destination_path], name)
          FileUtils.mkdir_p presenter_path unless File.exist? presenter_path
          entity.each do |presenter_entity_name, presenter_entity|
            write_entity(presenter_entity, presenter_path)
          end
        end
      end
    end

    Spectifly::Task.new('generate_extended_types', [:destination_path]) do |spectifly, args|
      File.open(File.join(args[:destination_path], "extended.xsd"), 'w') do |f|
        f.write Spectifly::Xsd::Types.build_extended
      end
    end

    Spectifly::Task.new('ensure_presenter_validity', [:destination_path]) do |spectifly, args|
      # just copy all the xsds over into each presenter directory, for easy zipping and whatnot
      schema = Dir.glob(File.join(args[:destination_path], '*.xsd'))
      directories = (Dir.glob(File.join(args[:destination_path], "*")) - schema)
      directories.each do |path|
        FileUtils.cp schema, path
      end
    end

    desc 'Generate all XSDs for the configured entity directory, including extended type definitions'
    task :generate_all, [:destination_path] => [:generate_from_entities, :generate_extended_types, :ensure_presenter_validity]
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spectifly-0.0.3 lib/tasks/spectifly.rake