Sha256: 15355bf1b809643ab84ad12c875fca8c3b4a0ceb180b05f527f3c79cb561578f

Contents?: true

Size: 1.71 KB

Versions: 12

Compression:

Stored size: 1.71 KB

Contents

require "goon_model_gen"

require "active_support/core_ext/string"

module GoonModelGen
  module Templates
    module DSL
      def dependencies
        @dependencies ||= {}
      end

      def import(alias_or_package, package_or_nil = nil)
        package_path = package_or_nil || alias_or_package
        new_alias = package_or_nil ? alias_or_package.to_s : nil
        package_path = package_path.path if package_path.respond_to?(:path)
        return if package_path.blank?
        if dependencies.key?(package_path)
          old_alias = dependencies[package_path]
          raise "Conflict alias #{old_alias.inspect} and #{new_alias.inspect}" if old_alias != new_alias
        end
        dependencies[package_path] ||= new_alias
      end

      def partitioned_imports(except: [])
        pkg_paths = dependencies.keys - except
        import_contents = partition(pkg_paths).map do |group|
          group.map do |path|
            ailas_name = dependencies[path]
            ailas_name ? "\t#{ailas_name} \"#{path}\"" : "\t\"#{path}\""
          end.join("\n")
        end
        import_contents.empty? ? '' : "import (\n%s\n)\n" % import_contents.join("\n\n")
      end

      PARTITION_PATTERNS = [
        /\A[^\.\/]+(?:\/.+)?\z/,
        /\Agopkg\.in\//,
        /\Agolang\.org\//,
        /\Agoogle\.golang\.org\//,
        /\Agithub\.com\//,
      ].freeze

      def partition(paths)
        groups = paths.group_by do |path|
          PARTITION_PATTERNS.index{|ptn| ptn =~ path} || PARTITION_PATTERNS.length
        end
        groups.keys.sort.map{|k| groups[k].sort }
      end

      def user_editable(value: true)
        @user_editable = value
      end

      def user_editable?
        @user_editable
      end

    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
goon_model_gen-0.3.1 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.3.0 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.2.5 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.2.4 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.2.3 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.2.2 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.2.1 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.2.0 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.1.3 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.1.2 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.1.1 lib/goon_model_gen/templates/dsl.rb
goon_model_gen-0.1.0 lib/goon_model_gen/templates/dsl.rb