-1

複雑な割り当てを設定するこのメソッドを調整しようとしており、この関数が警官を通過させるための他のオプションを探しています。

誰かが私を正しい方向に向けるための考えを持っていますか?

現在、内部の 2 つの .map 呼び出しを分割しようとしています。

失敗した警官

Assignment Branch Condition size for parse_items is too high. [24.08/15]
  def parse_items
Avoid multi-line chains of blocks.
    end.compact.map do |opt|

問題のコード

  def parse_items
    options = parse_relationships
    options = options.select { |opt| opt['type'] == 'product_options' }
    options.map do |opt|
      parse_included.detect { |x| x['id'] == opt['id'] }
    end.compact.map do |opt|
      {
        group_id: @payload['id'],
        originator_id: opt['id'],
        price: opt['attributes']['price'],
        description: opt['attributes']['name'],
        exp_quantity: opt['attributes']['quantity'].to_i,
        title: parse_attributes['name'],
        image_originator_url: 'image_for_product',
        updated_at: timestamp
      }
    end
  end

ヘルパー メソッド

  private

  def parse_data
    @payload['data']
  rescue
    []
  end

  def parse_included
    @payload['included']
  rescue
    []
  end

  def parse_attributes
    @payload['data']['attributes']
  rescue
    []
  end

  def parse_relationships
    @payload['data']['relationships']['options']['data']
  rescue
    []
  end

  def timestamp
    Time.parse(parse_attributes['updated_at'])
  end

更新されたエラー

仕様: 引数の数が間違っています (指定された 2 に対して 1 が期待されます)。Failure/Error: SELECT = ->(opt) { opt['type'] == 'product_options' }

parse_items の割り当て分岐条件のサイズが大きすぎます。[17/15]

更新されたコード

  SELECT = ->(opt) { opt['type'] == 'product_options' }
  MAP = ->(opt) { parse_included.detect { |x| x['id'] == opt['id'] } }
  def parse_items
    parse_relationships.select(&SELECT).map(&MAP).compact.map do |opt|
      {
        group_id: @payload['id'],
        originator_id: opt['id'],
        price: opt['attributes']['price'],
        description: opt['attributes']['name'],
        exp_quantity: opt['attributes']['quantity'].to_i,
        title: parse_attributes['name'],
        image_originator_url: 'image_for_product',
        updated_at: timestamp
      }
    end
  end
4

1 に答える 1

0

私はこれをリファクタリングして、はるかにきれいにし、すべての警官を渡すことができました! 万歳!

  def parse_items
    assign_item_attributes(select_included_option(select_item_options(parse_relationships['options']['data'])))
  end

  def select_included_option(options)
    options.map do |opt|
      parse_included.detect { |x| x['id'] == opt['id'] }
    end
  end

  def assign_item_attributes(options)
    options.compact.map do |opt|
      {
        group_id: @payload['id'],
        originator_id: opt['id'],
        price: opt['attributes']['price'],
        description: opt['attributes']['name'],
        exp_quantity: opt['attributes']['quantity'].to_i,
        title: parse_attributes['name'],
        image_originator_url: parse_image,
        updated_at: parse_timestamp
      }
    end
  end

  def select_item_options(options)
    options.select { |opt| opt['type'] == 'product_options' }
  end
于 2016-08-10T20:44:34.353 に答える