Sha256: 4efedc9910b134f8ae1069fb0256dffe455dac3ce13a171335b8e56677a63a85

Contents?: true

Size: 1.63 KB

Versions: 9

Compression:

Stored size: 1.63 KB

Contents

module Rails
  module Generators
    class RepresenterGenerator < Rails::Generators::NamedBase
      source_root File.expand_path("../templates", __FILE__)

      argument :properties, :type => :array, :default => [],
        :banner => "property[:class[:extend]] property[:class[:extend]]"

      class_option :format, :default => :json, :banner => "--format=JSON",
        :desc => "Use different formats JSON, JSON::HAL or XML"

      def generate_representer_file
        template('representer.rb', file_path)
      end

      private

      def format
        options[:format].upcase
      end

      def property_options
        PropertyBuilder.new(properties)
      end

      def file_path
        base_path = 'app/representers'
        File.join(base_path, class_path, "#{file_name}_representer.rb")
      end

      class PropertyBuilder
        include Enumerable

        def initialize(properties)
          @raw = properties
        end

        def each(&block)
          properties_with_options.each(&block)
        end

        private

        def properties_with_options
          properties.map do |(name, klass, representer)|
            p = [name_option(name)]
            p << hash_option(:class, klass)
            p << hash_option(:extend, representer)

            p.compact.join(', ')
          end
        end

        def name_option(name)
          return unless name
          "property :#{name}"
        end

        def hash_option(key, value)
          return unless key && value
          ":#{key} => #{value.classify}"
        end

        def properties
          @raw.map { |p| p.split(':') }
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/roar-rails-1.2.0/lib/generators/rails/representer_generator.rb
roar-rails-1.2.0 lib/generators/rails/representer_generator.rb
roar-rails-1.1.0 lib/generators/rails/representer_generator.rb
roar-rails-1.0.2 lib/generators/rails/representer_generator.rb
roar-rails-1.0.1 lib/generators/rails/representer_generator.rb
roar-rails-1.0.0 lib/generators/rails/representer_generator.rb
roar-rails-0.1.6 lib/generators/rails/representer_generator.rb
roar-rails-0.1.5 lib/generators/rails/representer_generator.rb
roar-rails-0.1.4 lib/generators/rails/representer_generator.rb