小编Dav*_*uth的帖子

如何在Rails控制器动作的RSpec测试中指定查询字符串?

我有一个叫做的动作yearly_csv.在这个动作中,我执行两个操作,如需求和供应.

def yearly_csv
   if demand == 'true'
       demand_csv
   else
       supply_csv
   end
end
Run Code Online (Sandbox Code Playgroud)

我在视图中有两个单选按钮来选择其中一个操作.现在我想在RSpec中单独测试每个操作.例如,一个供应规格和另一个需求规格.我的问题是如何将单选按钮值传递给yearly_csv动作(get)?

ruby rspec ruby-on-rails capybara rspec-rails

7
推荐指数
2
解决办法
7025
查看次数

观察者模式与中介模式

我做了一些谷歌搜索,是的,我知道有关这两者之间的差异的问题之前已经在stackoverflow和整个网络上被问过.但我主要找到措辞有问题的答案,这可能令人困惑.

我的问题是,如果有人在这里可以为我提供两个中介和观察者模式的视觉示例,可以清楚地展示两者之间的差异.在Javascript中.谢谢!

javascript mediator observer-pattern

7
推荐指数
1
解决办法
1842
查看次数

知道什么事件触发了ActiveRecord模型的after_commit

我有以下代码段:

class Product
 after_commit :do_something, on: %i(update create)

 def do_something
   if # update
     ...
   else # create
     ...
   end
 end
end
Run Code Online (Sandbox Code Playgroud)

如何知道在此提交后触发了什么事件?

提交之后请不要告诉我有2个:

after_commit :do_something_on_update, on: :update
after_commit :do_something_on_create, on: :create
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails ruby-on-rails-4 rails-activerecord

7
推荐指数
2
解决办法
2134
查看次数

无法使用Build runner类型的Visual Studio解决方案文件获取工件

我是TeamCity的新手.我正在使用Visual Studio解决方案文件构建步骤.我想配置工件路径,以便我可以在Artifact文件夹中的某处获取我的编译输出.我从TeamCity文档中无法理解:)

我有以下配置.但没有得到任何神器.

Artifact paths:- /MyProject/bin/Release/*.* => PublishDir
Build Runner : Visual Studio(sln)
Build file path: \Successor\Successor.sln
Targets: Rebuild
Configuration: Release
Platform: x86
Run Code Online (Sandbox Code Playgroud)

这里有什么不对?

谢谢

teamcity continuous-integration

6
推荐指数
2
解决办法
4215
查看次数

使用c#在中介模式中的循环依赖

我有一个关于我想在我的应用程序中实现的中介模式的问题(使用C#).在我的代码中实现模式时,我遇到了循环依赖.类的结构如下:

MediatorColleague组件/类在不同的程序集中,并且作为中介模式需要两个组件(类)相互使用.在引用彼此时出现问题.

请考虑以下代码:

namespace Mediator
{
   public abstract class IMediator
   {
      public IColleague colleague{get;set;}
      void Register();
      void Send();           
   }
   public class MediatorA:IMediator
   {        
     void Register(){//code here}
     void Send(){//code here}       
   }
 }
Run Code Online (Sandbox Code Playgroud)
namespace Colleague
{

    public abstract class IColleague
    {
        IMediator mediator;
        void Send();
        void Recieve();       

    }
    public class ColleagueA:IColleague
    {

        void Send(){//code here}
        void Recieve(){//code here}       

    }
}
Run Code Online (Sandbox Code Playgroud)

由于Mediater和同事在不同的命名空间和程序集中,如何解决循环依赖?

c# design-patterns mediator

6
推荐指数
1
解决办法
819
查看次数

NEventStore重播事件的问题

我们正在使用CQRS + ES.ES是NEventStore(通常是JOliver EventStore).我们在不同的命令中有2个聚合.第二AR的投影取决于读模型中第一AR投影所写的数据.问题是,当我们运行软件时,一切都变得如此之快,以至于有时两个聚合在事件存储中保持相同的日期时间(列CommitStamp).重播事件时,我们从CommitStamp列开始按顺序获取事件.但是如果两个流具有相同的CommitStamp并且采用错误的顺序,则读取模型预测会出现异常.

知道如何解决这个问题吗?

===============================

以下是关于github https://github.com/NEventStore/NEventStore/issues/170此问题的讨论

===============================

编辑:这是我们目前重播事件的方式.我搜索了GetFrom(...)如何工作,结果发现commitstamp列不用于排序.毕竟没有提交订单.因此,如果我开始重播事件,它可能会从今天返回事件,接下来是2年前记录的事件,下一个等等

public void ReplayEvents(Action<List<UncommittedEvent>> whatToDoWithEvents, DateTime loadEventsAfterDate)
    {
        var eventPortion = store.Advanced.GetFrom(loadEventsAfterDate);

        var uncommitedEventStream = new UncommittedEventStream();
        foreach (var commit in eventPortion)
        {
            foreach (var eventMessage in commit.Events.ToList()))
            {
                uncommitedEventStream.Append(new UncommittedEvent(eventMessage.Body));
            }
        }
        whatToDoWithEvents(uncommitedEventStream.ToList());
    }
Run Code Online (Sandbox Code Playgroud)

cqrs neventstore

6
推荐指数
1
解决办法
2161
查看次数

访客模式:访客或访问对象是否应该决定访问顺序?

我已经看过两种方式的例子,特别是维基百科显示了访问对象决定访问顺序的一个例子,我认为这是一种听起来很好的方法.

我处于这种情况,我需要几个访问订单,所以让访客决定访问订单似乎是合理的.但是,如果访问者负责访问顺序(即,用于调用被访问对象的accept方法),我可以让访问者直接调用一些访问方法(即,绕过访问对象的accept方法的调用)和这似乎与模式提出的完全相反.

在我们有多个不同的访问订单时,实施访问模式以及如何处理的正确方法是什么?

design-patterns visitor

6
推荐指数
1
解决办法
710
查看次数

PHP中的AbstractFactory没有方法重载

情况

我目前有4种类型的用户,我们预测将来至少还有3种.现在它们是:

  • 管理员(店铺管理员)
  • 员工(店长)
  • 员工(店员)
  • 顾客

在不久的将来,我将不得不让两位员工同时成为客户.我也有支持中心和记者.

问题

创建.创建.创建.我并不担心访问控制,权限等...我现在的代码可以在这方面做奇迹.我的问题只是关于创造.似乎抽象工厂对我来说可能是一个,但事实是所有那些"抽象教程"教学设计模式使用书籍和汽车只是没有帮助我把它带到我的情况.要么我的设计模式错误,要么我不理解它.

我的尝试

在UserFactory类中,我们可以看到问题的根源:abstract public function signUp();.这是不好的做法,甚至导致PHP 5.4+上的严格标准错误不尊重方法签名.在Java中,我会有方法重载来解决这个问题.在PHP中,方法重载的工作方式不同,不允许我以这种方式工作.

<?php

abstract class UserFactory {

    const ADMIN = 'AdminRecord';
    const MANAGER = 'ManagerRecord';
    const SALESMAN = 'SalesmanRecord';
    const CUSTOMER = 'CustomerRecord';

    public static function manufacture($type) {
        return new $type;
    }

    protected $accountController;
    protected $emailController;
    protected $toolMailer;

    function __construct() {
        $this->accountController = new AccountController();
        $this->emailController = new EmailController();
        $this->toolMailer = new ToolMailer();
    }

    abstract public function signUp();
}
Run Code Online (Sandbox Code Playgroud)

这是我的第一个用例:创建一个新的管理员.

class AdminRecord extends UserFactory { …
Run Code Online (Sandbox Code Playgroud)

php design-patterns abstract-factory

6
推荐指数
1
解决办法
333
查看次数

在单元测试中使用什么货币?

我正在开发一个严重依赖Joda-Money的应用程序,并且有许多单元测试来验证我的业务逻辑.对我来说,一个(不可否认的是次要的)关键点是用什么样的Money/ BigMoney对象进行测试; 具体来说,CurrencyUnit使用什么.

在我看来,我有几个选择:

  • 只是用 USD

    这显然是最简单的方法,我的大多数实际应用都将使用美元,因此它有一定的意义.另一方面,它感觉相当以美国为中心,我担心它会冒险让特定货币的错误不受控制.

  • 使用另一种真实货币,比如 CAD

    这会捕获错误的硬编码USD,但除此之外并没有比使用更好USD.

  • 使用专用的"假"货币,即XTS

    毕竟,这显然XTS是"保留用于测试".但Joda将伪货币表示为带-1小数位的货币.实际上,Joda-Money中货币之间的主要区别是小数位数,因此这可能会掩盖涉及小数位精度的任何错误,例如错误地舍入为整数值.

  • 注册我自己的自定义货币 CurrencyUnit.registerCurrency()

    这显然有效,但看起来有点奇怪,因为有其他选择.

  • 使用CurrencyUnit由模拟库创建的实例

    与注册自定义货币几乎相同.

再次,这显然是一个小问题,但我很好奇是否有这样的案例的标准做法,或者是否有明确的理由特别喜欢这些选项之一.

java unit-testing joda-money

6
推荐指数
1
解决办法
283
查看次数

如何安全地查看 Django REST 框架身份验证中的请求正文?

我已经实现了一个网络钩子。调用者提供共享秘密。它们连接请求 URL 和正文,使用密钥对其进行签名,并在标头中提供签名。为了验证签名,我需要重复该过程并将我获得的签名与调用者获得的签名进行比较。

我正在使用 Django REST 框架。我正在检查自定义中的签名Authentication。框架以请求作为参数来调用Authentication的方法。authenticate我可以从 获取请求正文request.stream.read()。但是,这会消耗流,从而阻止框架为我解析它:当框架调用视图时,请求没有data像通常那样的属性。

request.stream不允许我这样做seek(0)。该请求不允许我用倒带流(例如StringIO. 我当前的解决方法是将主体存储在视图中request.auth并自己在视图中解析它,这有效但很丑陋。

有没有办法在 中安全地访问请求正文Authentication

这是有效的版本:

myapp/authentications.py

import hmac
from hashlib import sha1
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed

class WebhookAuthentication(BaseAuthentication):
    def authenticate(self, request):
        actual_signature = request.META['X-Vendor-Signature']
        body, expected_signature = self.expected_signature(request)
        if actual_signature != expected_signature:
            raise AuthenticationFailed("Request X-Vendor-Signature did not match expected signature")
        return None, body  # Hack: preserve the …
Run Code Online (Sandbox Code Playgroud)

python django python-2.7 django-rest-framework

6
推荐指数
0
解决办法
608
查看次数