鉴于以下代码:
(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) 我只是研究了这两个,它们似乎都是很好的交流方式,但是通知似乎更容易处理.在哪些情况下,您希望使用委派而不是nsnotification,以及nsnotification而不是委托?
我有一种情况,客户端连接到我的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
我正在编写一个用于编排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)
是否有更好的方式或模式来完成授权?
我有以下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)
有线索吗?
我正在与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时是更好的选择。
有什么建议吗?
我有以下函数来访问属性的委托.它使用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.b并a从中获取实例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) 在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) 我不确定是否有一种“正确”的方法,但是在我将自己的不兼容的实现整合在一起之前,也许所有标准中都有一些可以满足我的需要的东西?
情况是这样的:苹果公司已经声明其手机上的应用程序必须包含所有标准功能。不再有带有网页内容的 iframe!如果您需要显示来自网络的内容,请打开系统浏览器(Safari)!不幸的是,我们需要显示来自网络的内容,所以我们开始......
现在,该应用程序需要用户之前已完成的身份验证。我们存储我们需要的任何令牌。当打开浏览器时,我们不想强迫用户重新进行身份验证。我们需要以某种方式将访问凭据传递给浏览器,并且最好安全地执行此操作。此外,浏览器中的网页需要从我们的 OpenID Connect 服务器获取令牌。
不幸的是,应用程序和浏览器之间的唯一通信点是 URL,因此我们提供的所有内容都将在那里,一目了然。我知道 OAuth 非常担心这一点,以至于他们无法仅使用屏幕上可见的内容来拦截身份验证,而是使用一次性中间代码、反向通道和 PKCE 之类的东西。
不幸的是,我看不到任何方法来使用“开箱即用”的默认流程来实现我的需要。我可以考虑对那些可以做到这一点的流程进行修改,但我不是安全专家,所以我宁愿采用经过专家审查的标准。
我想在特定的上下文中使用Kotlin 委托。
printMessage(),我仍然需要以与多态继承中调用的方式相同的方式调用委托super.printMessage()。我可以通过简单地在子句中实例化匿名委托来完成第一个任务by(class 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用任意的代表构建我的类。
delegation ×10
kotlin ×2
reflection ×2
appdelegate ×1
asmx ×1
coffeescript ×1
concurrency ×1
delegates ×1
ios ×1
iphone ×1
java ×1
javascript ×1
kerberos ×1
oauth-2.0 ×1
python ×1
python-2.7 ×1
rspec-rails ×1
sql-server ×1
ssas ×1
swift ×1
xcode ×1