Sha256: 62d8e1e92d6bf205b7492ca2c7a527a85d41f668a097f939a334dc719778ef72

Contents?: true

Size: 1.11 KB

Versions: 3

Compression:

Stored size: 1.11 KB

Contents

# Generate model specs.

require 'katapult/generator'

module Katapult
  module Generators
    class ModelSpecsGenerator < Katapult::Generator

      desc 'Generate model specs'

      check_class_collision
      source_root File.expand_path('../templates', __FILE__)


      def create_model_spec
        template 'model_spec.rb', File.join('spec', 'models', "#{file_name}_spec.rb")
      end

      no_tasks do
        def specable_attrs
          model.attrs.select do |attr|
            attr.assignable_values_as_list? or !attr.default.nil?
          end
        end

        def assignable_value_for(attr)
          attr.assignable_values.last
        end

        # Guess a value that is not assignable
        def unassignable_value_for(attr)
          case attr.type
          when :integer
            attr.assignable_values.max + 1
          when :string
            assignable_value_for(attr) + '-unassignable'
          else
            raise "Assignable values for :#{attr.type} attributes not supported"
          end
        end
      end

      private

      def model
        @element
      end

    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
katapult-0.5.0 lib/generators/katapult/model_specs/model_specs_generator.rb
katapult-0.4.1 lib/generators/katapult/model_specs/model_specs_generator.rb
katapult-0.4.0 lib/generators/katapult/model_specs/model_specs_generator.rb