标签: delegation

Rails/Rspec - 为委托方法编写规范(allow_nil选项)

鉴于以下代码:

(1)您如何编写规范来测试:allow_nil => false选项?

(2)是否值得编写规范进行测试?

class Event < ActiveRecord::Base
  belongs_to :league

  delegate :name, :to => :league, :prefix => true, :allow_nil => false
end

describe Event do

  context 'when delegating methods to league object' do
    it { should respond_to(:league_name) }
  end

end
Run Code Online (Sandbox Code Playgroud)

如果你能扩展应该这样做,那将是很好的:

it { should delegate(:name).to(:league).with_options(:prefix => true, :allow_nil => false) }
Run Code Online (Sandbox Code Playgroud)

delegation rspec-rails

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

Nsnotification或授权?

我只是研究了这两个,它们似乎都是很好的交流方式,但是通知似乎更容易处理.在哪些情况下,您希望使用委派而不是nsnotification,以及nsnotification而不是委托?

iphone xcode delegation ios

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

使用Kerberos委派的SSAS会收到连接超时错误

我有一种情况,客户端连接到我的webservice(存在于另一台服务器上)必须访问SQL Server数据库和SSAS服务器.

它必须使用在访问SQL Server和SSAS多维数据集时调用服务的客户端的凭据.

为此,我这样做

var winId = HttpContext.Current.User.Identity as WindowsIdentity; var ctx = winId.Impersonate(); // Access Database/SSAS ctx.Undo();

在我的服务中,访问SQL Server数据库时工作正常.

但是,当我访问SSAS服务器时,我得到"连接超时或丢失"

有很多帖子,如 http://denglishbi.wordpress.com/2009/03/31/windows-server-2008-kerberos-bug-%E2%80%93-transport-connection-issues-with-ssas- data/ http://sqlblogcasts.com/blogs/drjohn/archive/2009/03/28/kerberos-kills-large-mdx-queries-on-windows-server-2008-ssas.aspx

在这方面,但我使用的是我的服务所在的Windows Server 2008 R2,所以这应该不是问题,因为这个错误应该由Microsoft修复.

任何关于如何最好地诊断这个问题的信息将不胜感激.

澄清SSAS服务器确实有SPN.这实际上是在一点上工作但现在已经停止了.没有重复的SPN或任何东西的迹象.

有趣的是,它在一台SSAS服务器上间歇工作,但似乎一直在为另一台服务器工作.它们都已经命名为本文档中提到的SPN

https://support.pyramidanalytics.com/entries/22056243-Configuring-Kerberos-Delegation-for-Named-Instances-of-SSAS-with-Active-Directory-and-additional-pro

sql-server ssas kerberos delegation asmx

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

python中的方法委派

我正在编写一个用于编排AWS集群的小框架,并且有一些常见的层次结构模式一次又一次出现.一种这样的模式是将一组实例收集到一个更大的对象中,然后将一些方法直接委托给所有实例.因此,我不是一遍又一遍地复制和粘贴相同的样板代码,而是使用以下模式对其进行抽象:

def __getattr__(self, item):
    if not item in self._allowed_items:
        raise NonDelegatableItem

    def delegator():
        for instance in self.all_instances:
            getattr(instance, item)()

    return delegator
Run Code Online (Sandbox Code Playgroud)

是否有更好的方式或模式来完成授权?

python reflection delegation message-passing python-2.7

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

CoffeeScript:内联调用委托,它与函数绑定一起使用

我有以下CS代码片段:

class Ctrl
    constructor: (@security) ->
        ...

    isAuthenticated: -> @security.isAuthenticated()
Run Code Online (Sandbox Code Playgroud)

这被翻译成以下JS:

Ctrl = (function() {
    function Ctrl(security) {
        this.security = security;
        ...
    }

    Ctrl.prototype.isAuthenticated = function() {
        return this.security.isAuthenticated();
    };
})()
Run Code Online (Sandbox Code Playgroud)

正如您所看到的isAuthenticated,security对象的方法的简单委托和创建匿名函数是多余的.
我想避免创建这个额外的调用级别,而是执行一种"内联委托",它将转换为JS,类似于:

Ctrl = (function() {
    function Ctrl(security) {
        this.security = security;
        ...
    }

    Ctrl.prototype.isAuthenticated = this.security.isAuthenticated;
})()
Run Code Online (Sandbox Code Playgroud)

以下不起作用,因为它试图绑定@security到错误的对象:

class Ctrl
    constructor: (@security) ->
        ...

    isAuthenticated: @security.isAuthenticated
Run Code Online (Sandbox Code Playgroud)

有线索吗?

javascript delegation coffeescript

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

从appdelegate更新viewcontroller-最佳做法?

我正在与iBeacons一起在AppDelegate.swift中实现CoreLocation方法(在AppDelegate中实现方法以确保App后台功能)

在“ ViewController.swift”随附的SingleView应用程序中,将数据从AppDelegate传递到ViewController以更新视图(例如UIImages,UILabels或UITableViews)的最佳实践是什么?

我已经成功实现了两种不同的方法:

1)委托,通过在AppDelegate.swift中触发Viewcontroller委托方法:

protocol BeaconLocationDelegate { func minorBeaconChanged(minorValue:NSNumber) }

var locationDelegate: BeaconLocationDelegate

locationDelegate?.minorBeaconChanged(nearestBeacon.minor)
Run Code Online (Sandbox Code Playgroud)

ViewController.swift:

在viewDidLoad方法中:

(UIApplication.sharedApplication().delegate as AppDelegate).locationDelegate = self
Run Code Online (Sandbox Code Playgroud)

(我发现这看起来很难看-将此属性声明为委托的更好方法吗?)

协议实现:

func minorBeaconChanged(minorValue: NSNumber) {
  // do fancy stuff here
}
Run Code Online (Sandbox Code Playgroud)

2)通过在AppDelegate中创建对ViewController的引用:

let viewController:ViewController = window!.rootViewController as ViewController
viewController.doSomethingFancy()
Run Code Online (Sandbox Code Playgroud)

两种方法对我来说都很好用,但是我认为通过委派的第一种方法更优雅,并且在拥有多个ViewController时是更好的选择。

有什么建议吗?

delegation viewcontroller appdelegate swift

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

我怎样才能得到Kotlin酒店的名称?

我有以下函数来访问属性的委托.它使用Kotlin反射来获取属性的名称和Java反射以获得该字段.

fun Any.getDelegate<T>(prop: KProperty<T>): Any {
    return javaClass.getDeclaredField("${prop.name}\$delegate").let {
        it.setAccessible(true)
        it.get(this)
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法使用如下:

val delegate = a.getDelegate(A::b)
Run Code Online (Sandbox Code Playgroud)

但是,我更喜欢这样使用它:

val delegate = a.b.delegate
Run Code Online (Sandbox Code Playgroud)

上面代码的问题是获取属性名称a.ba从中获取实例a.b.根据我对Kotlin的了解,这可能是不可能的,但是我想看看我是否可以清理我的功能.

为了更好地了解我正在尝试做的事情,这是我的完整代码.我想要一个可观察的委托,我可以使用委托引用添加和删除观察者,而不创建附加变量.

fun Any.addObservable<T>(prop: KProperty<T>, observer: (T) -> Unit) {
    getObservableProperty(prop).observers.add(observer)
}

fun Any.getObservableProperty<T>(prop: KProperty<T>): ObservableProperty<T> {
    return getDelegate(prop) as ObservableProperty<T>
}

fun Any.getDelegate<T>(prop: KProperty<T>): Any {
    return javaClass.getDeclaredField("${prop.name}\$delegate").let {
        it.setAccessible(true)
        it.get(this)
    }
}

class ObservableProperty<T>(
        initialValue: T,
        initialObservers: Array<(T) -> Unit> = emptyArray()) : ReadWriteProperty<Any?, T> {

    private var value …
Run Code Online (Sandbox Code Playgroud)

reflection delegation kotlin

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

DelegatingVehicleTracker(第65页Goetz)如何返回"实时"视图?

在Java Concurrency in Practice的第65和66页上,Brian Goetz列出了以下代码:

@ThreadSafe
public class DelegatingVehicleTracker {
private final ConcurrentMap<String, Point> locations;
private final Map<String, Point> unmodifiableMap;

public DelegatingVehicleTracker(Map<String, Point> points) {
    locations = new ConcurrentHashMap<String, Point>(points);
    unmodifiableMap = Collections.unmodifiableMap(locations);
}

public Map<String, Point> getLocations() {
    return unmodifiableMap;
}

public Point getLocation(String id) {
    return locations.get(id);
}

public void setLocation(String id, int x, int y) {
    if (locations.replace(id, new Point(x, y)) == null)
        throw new IllegalArgumentException("invalid vehicle name: " + id);
}

// Alternate version of getLocations …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading delegation

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

OpenID Connect:在移动应用程序和浏览器之间传递 SSO 授权 - 什么是安全的方法?

我不确定是否有一种“正确”的方法,但是在我将自己的不兼容的实现整合在一起之前,也许所有标准中都有一些可以满足我的需要的东西?

情况是这样的:苹果公司已经声明其手机上的应用程序必须包含所有标准功能。不再有带有网页内容的 iframe!如果您需要显示来自网络的内容,请打开系统浏览器(Safari)!不幸的是,我们需要显示来自网络的内容,所以我们开始......

现在,该应用程序需要用户之前已完成的身份验证。我们存储我们需要的任何令牌。当打开浏览器时,我们不想强迫用户重新进行身份验证。我们需要以某种方式将访问凭据传递给浏览器,并且最好安全地执行此操作。此外,浏览器中的网页需要从我们的 OpenID Connect 服务器获取令牌。

不幸的是,应用程序和浏览器之间的唯一通信点是 URL,因此我们提供的所有内容都将在那里,一目了然。我知道 OAuth 非常担心这一点,以至于他们无法仅使用屏幕上可见的内容来拦截身份验证,而是使用一次性中间代码、反向通道和 PKCE 之类的东西。

不幸的是,我看不到任何方法来使用“开箱即用”的默认流程来实现我的需要。我可以考虑对那些可以做到这一点的流程进行修改,但我不是安全专家,所以我宁愿采用经过专家审查的标准。

delegation oauth-2.0 openid-connect

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

Kotlin:引用未由构造函数传递的委托

我想在特定的上下文中使用Kotlin 委托。

  • 不应在构造函数中传递委托。
  • 我想保留对委托的引用以供以后在代码中使用。例如,在我重写的方法中printMessage(),我仍然需要以与多态继承中调用的方式相同的方式调用委托super.printMessage()

我可以通过简单地在子句中实例化匿名委托来完成第一个任务byclass Derived() : Base by BaseImpl(42)使用Kotlin 的文档示例)。但是,这阻止了我访问匿名委托,因为我不知道如何引用它。

我想做类似以下的事情。然而,以下内容编译时不会出现错误'this' is not defined in this context

class Derived() : Base by this.b {
    
    val b: Base = BaseImpl(42)
    
    override fun printMessage() {
        b.printMessage()
        print("abc")
    }
}
Run Code Online (Sandbox Code Playgroud)

我确实需要为班级的每个实例分配一个单独的委托Derived。因此,作为全局变量移动b对我来说不是一个选择。

我最接近我需要的是构造函数的可选参数。这也不是一个好的选择,因为我不想允许Derived用任意的代表构建我的类。

delegates delegation kotlin kotlin-delegate

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