使用deface更改Spree存储中的错误代码

时间:2014-12-01 21:14:35

标签: spree deface

我在Spree工作,我正在尝试使用Deface来改变这个

<% if order.has_step?("delivery") %>
  <div class="columns alpha four" data-hook="order-ship-address">
    <h6><%= Spree.t(:shipping_address) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:address) unless @order.completed? %></h6>
    <%= render :partial => 'spree/shared/address', :locals => { :address => order.ship_address } %>
  </div>
<% end %>

<% if @order.has_step?("delivery") %>
  <div class="columns alpha four">
    <h6><%= Spree.t(:shipments) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:delivery) unless @order.completed? %></h6>
    <div class="delivery">
      <% order.shipments.each do |shipment| %>
        <div>
          <i class='fa fa-truck'></i>
          <%= Spree.t(:shipment_details, :stock_location => shipment.stock_location.name, :shipping_method => shipment.selected_shipping_rate.name) %>
        </div>
      <% end %>
    </div>
    <%= render(:partial => 'spree/shared/shipment_tracking', :locals => {:order => @order}) if @order.shipped? %>
  </div>
<% end %>

..进入这个。

<div class="columns alpha four" data-hook="order-ship-address">
  <h6><%= Spree.t(:shipping_address) %> <%= link_to "(#{Spree.t(:edit)})", checkout_state_path(:address) unless @order.completed? %></h6>
  <%= render :partial => 'spree/shared/address', :locals => { :address => order.ship_address } %>
</div>

我已经提交了关于冗余if语句的pull请求,并在第二个if @ order.has_step中添加了数据挂钩?(&#34; delivery&#34;),但在此期间我需要编写一个deface覆盖,将页面更改为我需要它的外观。我可以删除第一个if @ order.has_step?(&#34; delivery&#34;)因为我认为 Deface将针对我所谈论的第一个实例我写的页面

:remove => "erb[silent]:contains('if order.has_step?(\"delivery\"')")

虽然说实话,文档在这一点上并不是很好。无论如何,如何删除第二个if语句的全部内容?没有数据挂钩来定位它,并使用

:remove_content => "erb[silent]:contains('if order.has_step?(\"delivery\"')")

只删除第一个if语句的内容。我无法在第二个if语句中定位第一个div,因为已经有一个div class =&#34;列alpha 4&#34;在第一个if语句中。我不想在页面上留下空白的div,所以我该怎么办?

2 个答案:

答案 0 :(得分:0)

引用代码中的两个if语句不引用同一个变量。第一个if引用order,第二个引用@order

使用deface删除erb的现有部分时,传入contains的字符串必须与要移动的代码完全匹配才能使覆盖正确定位它。由于第二个if语句使用@order,并且您的匹配器不包含@符号,因此它不会删除该特定if语句。

根据deface repo中的rspec测试,您似乎无法在remove操作中使用多个匹配字符串和一个覆盖。相反,您必须使用第二个覆盖来处理第二个if语句并将其删除。

答案 1 :(得分:0)

我发布给Spree的拉取请求使整个问题没有实际意义(如果你感兴趣,可以在这里找到https://github.com/spree/spree/pull/5692)。此外,事实证明,@ order和order函数在该文档中的方式完全相同,并且所有对@order的引用都在从Spree中删除。