Browse Source

Merge branch 'develop' of github.com:SnapKit/SnapKit

# Conflicts:
#	ISSUE_TEMPLATE.md
Robert Payne 9 years ago
parent
commit
0c3f83784d
7 changed files with 39 additions and 27 deletions
  1. 1 1
      .travis.yml
  2. 4 18
      ISSUE_TEMPLATE.md
  3. 2 2
      SnapKit.podspec
  4. 5 1
      Source/Constraint.swift
  5. 10 1
      Source/ConstraintDescription.swift
  6. 4 4
      Source/View+SnapKit.swift
  7. 13 0
      Tests/Tests.swift

+ 1 - 1
.travis.yml

@@ -1,5 +1,5 @@
 language: objective-c
-osx_image: xcode7
+osx_image: xcode7.3
 branches:
   only:
     - master

+ 4 - 18
ISSUE_TEMPLATE.md

@@ -1,25 +1,11 @@
 ### New Issue Checklist
 
-- [ ] I have looked at the [Documentation](http://snapkit.io/docs)
-- [ ] I have read the [F.A.Q.](http://snapkit.io/faq)
-
-### Environment / Configuration
-
-##### Platform
-
-* [ ] OS X
-* [ ] iOS
-
-##### Versions
-
+* I have looked at the [Documentation](http://snapkit.io/docs): `INSERT yes/no`
+* I have read the [F.A.Q.](http://snapkit.io/faq): `INSERT yes/no`
+* Platform is: `INSERT iOS/OSX/tvOS`
 * Platform version is: `INSERT PLATFORM VERSION`
 * SnapKit version is: `INSERT SNAPKIT VERSION`
-
-##### Integration
-
-- [ ] Carthage
-- [ ] Cocoapods
-- [ ] Manually / Other
+* Integration method is: `INSERT carthage/cocoapods/manually/other`
 
 ### Issue
 

+ 2 - 2
SnapKit.podspec

@@ -1,12 +1,12 @@
 Pod::Spec.new do |s|
   s.name = 'SnapKit'
-  s.version = '0.19.1'
+  s.version = '0.20.0'
   s.license = 'MIT'
   s.summary = 'Harness the power of auto layout with a simplified, chainable, and compile time safe syntax.'
   s.homepage = 'https://github.com/SnapKit/SnapKit'
   s.authors = { 'Robert Payne' => 'robertpayne@me.com' }
   s.social_media_url = 'http://twitter.com/robertjpayne'
-  s.source = { :git => 'https://github.com/SnapKit/SnapKit.git', :tag => '0.19.1' }
+  s.source = { :git => 'https://github.com/SnapKit/SnapKit.git', :tag => '0.20.0' }
 
   s.ios.deployment_target = '8.0'
   s.osx.deployment_target = '10.10'

+ 5 - 1
Source/Constraint.swift

@@ -193,15 +193,18 @@ internal class ConcreteConstraint: Constraint {
         }
     }
     
+    private let label: String?
+    
     private var installInfo: ConcreteConstraintInstallInfo? = nil
     
-    internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float) {
+    internal init(fromItem: ConstraintItem, toItem: ConstraintItem, relation: ConstraintRelation, constant: Any, multiplier: Float, priority: Float, label: String? = nil) {
         self.fromItem = fromItem
         self.toItem = toItem
         self.relation = relation
         self.constant = constant
         self.multiplier = multiplier
         self.priority = priority
+        self.label = label
     }
     
     internal func installOnView(updateExisting updateExisting: Bool = false, file: String? = nil, line: UInt? = nil) -> [LayoutConstraint] {
@@ -269,6 +272,7 @@ internal class ConcreteConstraint: Constraint {
                 attribute: layoutToAttribute,
                 multiplier: CGFloat(self.multiplier),
                 constant: layoutConstant)
+            layoutConstraint.identifier = self.label
             
             // set priority
             layoutConstraint.priority = self.priority

+ 10 - 1
Source/ConstraintDescription.swift

@@ -34,6 +34,8 @@ public protocol ConstraintDescriptionFinalizable: class {
     
     var constraint: Constraint { get }
     
+    func labeled(label: String) -> ConstraintDescriptionFinalizable
+    
 }
 
 /**
@@ -191,6 +193,7 @@ internal class ConstraintDescription: ConstraintDescriptionExtendable, Constrain
     internal var centerX: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterX) }
     internal var centerY: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.CenterY) }
     internal var baseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.Baseline) }
+    internal var label: String?
     
     @available(iOS 8.0, *)
     internal var firstBaseline: ConstraintDescriptionExtendable { return self.addConstraint(ConstraintAttributes.FirstBaseline) }
@@ -487,11 +490,17 @@ internal class ConstraintDescription: ConstraintDescriptionExtendable, Constrain
                 relation: self.relation!,
                 constant: self.constant,
                 multiplier: self.multiplier,
-                priority: self.priority)
+                priority: self.priority,
+                label: self.label)
         }
         return self.concreteConstraint!
     }
     
+    func labeled(label: String) -> ConstraintDescriptionFinalizable {
+        self.label = label
+        return self
+    }
+    
     // MARK: Private
     
     private let fromItem: ConstraintItem

+ 4 - 4
Source/View+SnapKit.swift

@@ -127,7 +127,7 @@ public extension View {
         
         :returns: the constraints made
     */
-    public func snp_prepareConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] {
+    public func snp_prepareConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> [Constraint] {
         return ConstraintMaker.prepareConstraints(view: self, file: file, line: line, closure: closure)
     }
     
@@ -136,7 +136,7 @@ public extension View {
         
         :param: closure that will be passed the `ConstraintMaker` to make the constraints with
     */
-    public func snp_makeConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {
+    public func snp_makeConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {
         ConstraintMaker.makeConstraints(view: self, file: file, line: line, closure: closure)
     }
     
@@ -147,7 +147,7 @@ public extension View {
     
         :param: closure that will be passed the `ConstraintMaker` to update the constraints with
     */
-    public func snp_updateConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {
+    public func snp_updateConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {
         ConstraintMaker.updateConstraints(view: self, file: file, line: line, closure: closure)
     }
     
@@ -156,7 +156,7 @@ public extension View {
     
         :param: closure that will be passed the `ConstraintMaker` to remake the constraints with
     */
-    public func snp_remakeConstraints(file: String = __FILE__, line: UInt = __LINE__, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {
+    public func snp_remakeConstraints(file: String = #file, line: UInt = #line, @noescape closure: (make: ConstraintMaker) -> Void) -> Void {
         ConstraintMaker.remakeConstraints(view: self, file: file, line: line, closure: closure)
     }
     

+ 13 - 0
Tests/Tests.swift

@@ -249,4 +249,17 @@ class SnapKitTests: XCTestCase {
         XCTAssertEqual(constraints[1].constant, 50, "Should be 50")
     }
     
+    func testConstraintIdentifier() {
+        let identifier = "Test-Identifier"
+        let view = View()
+        self.container.addSubview(view)
+        
+        view.snp_makeConstraints { (make) -> Void in
+            make.top.equalTo(self.container.snp_top).labeled(identifier)
+        }
+        
+        let constraints = container.snp_constraints as! [NSLayoutConstraint]
+        XCTAssertEqual(constraints[0].identifier, identifier, "Identifier should be 'Test'")
+    }
+    
 }