From 1029761addfd63876048bdd2d522347c73570431 Mon Sep 17 00:00:00 2001 From: Zhenya Tulusha Date: Wed, 23 May 2012 22:32:41 +0300 Subject: [PATCH 1/2] Some refactoring and AppleDoc stuff --- MUKit/MUCore/MUCore.h | 3 + MUKit/MUCore/MUInputTextFilter.h | 98 ++++++++++---- MUKit/MUCore/MUInputTextFilter.m | 46 ++----- MUKit/MUCore/MUValidator.h | 215 ++++++++++++++++++++----------- MUKit/MUCore/MUWeakRef.h | 42 ++++-- MUKit/MUCore/MUWeakRef.m | 9 -- MUKit/MULogger/MULogger.h | 31 ++++- help/docset-installed.txt | 4 + 8 files changed, 298 insertions(+), 150 deletions(-) create mode 100644 help/docset-installed.txt diff --git a/MUKit/MUCore/MUCore.h b/MUKit/MUCore/MUCore.h index 65ef06e..21b38de 100644 --- a/MUKit/MUCore/MUCore.h +++ b/MUKit/MUCore/MUCore.h @@ -9,6 +9,7 @@ #ifndef MUKitTest_MUCore_h #define MUKitTest_MUCore_h +// Base #import "MUKitDefines.h" #import "MUHelper.h" #import "MUWeakRef.h" @@ -17,9 +18,11 @@ #import "MUPair.h" #import "MUHelper.h" #import "MUFetchable.h" + // Validators #import "MUValidator.h" #import "MUValidationGroup.h" + // Formatters #import "MUCreditCardNumberFormatter.h" #import "MUPhoneNumberFormatter.h" diff --git a/MUKit/MUCore/MUInputTextFilter.h b/MUKit/MUCore/MUInputTextFilter.h index 8cfeece..ab3ae3e 100644 --- a/MUKit/MUCore/MUInputTextFilter.h +++ b/MUKit/MUCore/MUInputTextFilter.h @@ -8,64 +8,114 @@ #import -//============================================================================== -//============================================================================== -//============================================================================== -/// text filter : base class +/** + `MUInputFilter` is an `NSObject` that used for filtering input info in text fields and text views. + + @warning It's base class and should be subclassed for implenting some specified filters + + */ @interface MUInputFilter : NSObject +///------------------------------- +/// @name Main filter Methods +///------------------------------- + +/** + Should return `YES` if replacementString correspons to filter allowed input. + */ - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only number +/** + `MUInputFilterNumbreValue` is an `MUInputFilter` that allows to input only numbers. + + */ @interface MUInputFilterNumbreValue : MUInputFilter +///------------------------------- +/// @name Main filter Methods +///------------------------------- + @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only numbers, numbers value has max +/** + `MUInputFilterNumbreValueWithMaxLengthText` is an `MUInputFilterNumbreValue` that allows to input only numbers and input string should be less than specified maximum length. + + */ @interface MUInputFilterNumbreValueWithMaxLengthText : MUInputFilterNumbreValue @property (nonatomic, assign) NSUInteger maxLengthText; +///------------------------------- +/// @name Initialization Input Filter Methods +///------------------------------- + +/** + Creates and initializes an `MUInputFilterNumbreValueWithMaxLengthText` object with the specified maximum text's length. + + @param maximum length of allowed input text + + @return The newly-initialized Input Filter + */ - (id)initWithMaxLengthText:(NSUInteger) aMaxLengthText; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only letters +/** + `MUInputFilterLetterValue` is an `MUInputFilter` that allows to input only letters. + + */ @interface MUInputFilterLetterValue : MUInputFilter +///------------------------------- +/// @name Main filter Methods +///------------------------------- + @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only letters, text has limited the length +/** + `MUInputFilterLetterValueWithMaxLengthText` is an `MUInputFilterLetterValue` that allows to input only letters and input string should be less than specified maximum length. + + */ @interface MUInputFilterLetterValueWithMaxLengthText : MUInputFilterLetterValue @property (nonatomic, assign) NSUInteger maxLengthText; +///------------------------------- +/// @name Initialization Input Filter Methods +///------------------------------- + +/** + Creates and initializes an `MUInputFilterLetterValueWithMaxLengthText` object with the specified maximum text's length. + + @param maximum length of allowed input text + + @return The newly-initialized Input Filter + */ - (id)initWithMaxLengthText:(NSUInteger) aMaxLengthText; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text has limited the length +/** + `MUInputFilterStringWithMaxLengthText` is an `MUInputFilter` that allows to input any characters and input string should be less than specified maximum length. + + */ @interface MUInputFilterStringWithMaxLengthText : MUInputFilter @property (nonatomic, assign) NSUInteger maxLengthText; +///------------------------------- +/// @name Initialization Input Filter Methods +///------------------------------- + +/** + Creates and initializes an `MUInputFilterStringWithMaxLengthText` object with the specified maximum text's length. + + @param maximum length of allowed input text + + @return The newly-initialized Input Filter + */ - (id)initWithMaxLengthText:(NSUInteger) aMaxLengthText; @end diff --git a/MUKit/MUCore/MUInputTextFilter.m b/MUKit/MUCore/MUInputTextFilter.m index c5be1b9..a5ee774 100644 --- a/MUKit/MUCore/MUInputTextFilter.m +++ b/MUKit/MUCore/MUInputTextFilter.m @@ -8,10 +8,8 @@ #import "MUInputTextFilter.h" -//============================================================================== -//============================================================================== -//============================================================================== -/// text filter : base class +#pragma mark - MUInputFilter + @implementation MUInputFilter - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string @@ -21,10 +19,8 @@ - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)ra @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only number +#pragma mark - MUInputFilterNumbreValue + @implementation MUInputFilterNumbreValue //============================================================================== @@ -53,16 +49,12 @@ - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)ra @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only numbers, numbers value has max and min +#pragma mark - MUInputFilterNumbreValueWithMaxLengthText + @implementation MUInputFilterNumbreValueWithMaxLengthText -//============================================================================== @synthesize maxLengthText; -//============================================================================== - (id) initWithMaxLengthText:(NSUInteger)aMaxLengthText { self = [super init]; @@ -73,7 +65,6 @@ - (id) initWithMaxLengthText:(NSUInteger)aMaxLengthText return self; } -//============================================================================== - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { BOOL result = NO; @@ -99,13 +90,10 @@ - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)ra @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only letters +#pragma mark - MUInputFilterLetterValue + @implementation MUInputFilterLetterValue -//============================================================================== - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { BOOL result = NO; @@ -132,16 +120,12 @@ - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)ra @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text with only letters, text has limited the length +#pragma mark - MUInputFilterLetterValueWithMaxLengthText + @implementation MUInputFilterLetterValueWithMaxLengthText -//============================================================================== @synthesize maxLengthText; -//============================================================================== - (id) initWithMaxLengthText:(NSUInteger)aMaxLengthText { self = [super init]; @@ -152,7 +136,6 @@ - (id) initWithMaxLengthText:(NSUInteger)aMaxLengthText return self; } -//============================================================================== - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { BOOL result = NO; @@ -178,16 +161,12 @@ - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)ra @end -//============================================================================== -//============================================================================== -//============================================================================== -/// text has limited the length +#pragma mark - MUInputFilterStringWithMaxLengthText + @implementation MUInputFilterStringWithMaxLengthText -//============================================================================== @synthesize maxLengthText; -//============================================================================== - (id) initWithMaxLengthText:(NSUInteger)aMaxLengthText { self = [super init]; @@ -198,7 +177,6 @@ - (id) initWithMaxLengthText:(NSUInteger)aMaxLengthText return self; } -//============================================================================== - (BOOL) filterText:(id)inputTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { BOOL result = NO; diff --git a/MUKit/MUCore/MUValidator.h b/MUKit/MUCore/MUValidator.h index 9718bd5..02be10b 100644 --- a/MUKit/MUCore/MUValidator.h +++ b/MUKit/MUCore/MUValidator.h @@ -12,10 +12,18 @@ NSString* getOnlyNumbers(NSString *phoneNumber); @class MUValidator; -//============================================================================== -//============================================================================== -//============================================================================== -/// +/** + `MUValidationProtocol` is an interface made for `MUValidator`. + + ## Interface Methods + + - `setValidator:` + - `validator` + - `validate` + + @warning Object that supports this protocol should also have property `validatableText` + + */ @protocol MUValidationProtocol @property (nonatomic, assign) NSString* validatableText; @@ -25,176 +33,237 @@ NSString* getOnlyNumbers(NSString *phoneNumber); @end -//============================================================================== -//============================================================================== -//============================================================================== -/// TextField validator + +/** + `MUValidator` is an `NSObject` subclass that used for validate text in Text Field and Text View. + + ## Subclassing Notes + + The main method of this calss is -`validate` so for subclassing this class this method should be overriden to change validation behavior. + + */ @interface MUValidator : NSObject { id validatableObject; NSString *errorMessage; } +/** + Object that supports `MUValidationProtocol`. It will be used for validation. + */ @property (nonatomic, assign) id validatableObject; +/** + Specified text that should be shown in Alert View if validation process fails. + */ @property (nonatomic, retain) NSString *errorMessage; +/** + Validate `validatableObject` if it was set. + + @return YES if validatableObject passed validation process. + */ - (BOOL) validate; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// Alwayse return YES +/** + `MUValidatorAny` is an `MUValidator` subclass that returns YES for any validationableObject. + + */ @interface MUValidatorAny : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// return YES if textField has only numbers +/** + `MUValidatorNumber` is an `MUValidator` subclass that validate Text Field for allowed only numbers + + */ @interface MUValidatorNumber : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// only english letters +/** + `MUValidatorLetters` is an `MUValidator` subclass that validate Text Field for allowed only English letters + + */ @interface MUValidatorLetters : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// only english words +/** + `MUValidatorWords` is an `MUValidator` subclass that validate Text Field for allowed only English words + + */ @interface MUValidatorWords : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// only email +/** + `MUValidatorEmail` is an `MUValidator` subclass that validate Text Field for allowed only email format strings + + */ @interface MUValidatorEmail : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// return YES if current value equal with value of aTestedField +/** + `MUValidatorEmail` is an `MUValidator` subclass that validate Text Field for allowed only if validatableObject value equels value of aTestedField + + */ @interface MUValidatorEqual : MUValidator { MUValidator *testedValidator; } +///--------------------------------------- +/// @name Main methods +///--------------------------------------- + +/** + Creates and initializes an `MUValidatorIntWithRange` object with the specified Tested Text Field. + + @param Tested Text Field that support `MUValidationProtocol` + + @return The newly-initialized validator object with aTestedField + */ - (id) initWithTestedField:(id)aTestedObject; + +/** + Creates and initializes an `MUValidatorIntWithRange` object with the specified Tested Validator. + + @param Tested Validator object of class `MUValidator` + + @return The newly-initialized validator object with Tested Validator + */ - (id) initWithTestedFieldValidator:(MUValidator *)aTestedValidator; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// +/** + `MUValidatorNotEmpty` is an `MUValidator` subclass that validate Text Field for emtpiness not allowed + + */ @interface MUValidatorNotEmpty : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// +/** + `MUValidatorUSAZipCode` is an `MUValidator` subclass that validate Text Field for allowed only USA Zip format strings + + */ @interface MUValidatorUSAZipCode : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// full name consist of first name ' ' lastName +/** + `MUValidatorFullName` is an `MUValidator` subclass that validate Text Field for allowed only _full name_ format strings + + @warning full name consist of first name ' ' lastName + */ @interface MUValidatorFullName : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// +/** + `MUValidatorURL` is an `MUValidator` subclass that validate Text Field for allowed only URL format strings + + */ @interface MUValidatorURL : MUValidator { } @end -//============================================================================== -//============================================================================== -//============================================================================== -/// +/** + `MUValidatorIntWithRange` is an `MUValidator` subclass that validate Text Field for allowed only numbers with specified range. + + */ @interface MUValidatorIntWithRange : MUValidator { NSRange range; } +///--------------------------------------- +/// @name Main methods +///--------------------------------------- + +/** + Creates and initializes an `MUValidatorIntWithRange` object with the specified range. + + @param object of `NSRange` class + + @return The newly-initialized validator object with range + */ - (id) initWithRange:(NSRange)aRange; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// +/** + `MUValidatorStringWithRange` is an `MUValidator` subclass that validate Text Field for allowed strings with specified range. + + */ @interface MUValidatorStringWithRange : MUValidator { NSRange range; } +///--------------------------------------- +/// @name Main methods +///--------------------------------------- + +/** + Creates and initializes an `MUValidatorIntWithRange` object with the specified range. + + @param object of `NSRange` class + + @return The newly-initialized validator object with range + */ - (id) initWithRange:(NSRange)aRange; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// Exemple: validation count number in phone number (050)-50-50-500 +/** + `MUValidatorCountNumberInTextWithRange` is an `MUValidator` subclass that validate Text Field for allowed only phone format strings. + + @warning Exemple: validation count number in phone number (050)-50-50-500 + */ @interface MUValidatorCountNumberInTextWithRange : MUValidator { NSRange range; } +///--------------------------------------- +/// @name Main methods +///--------------------------------------- + +/** + Creates and initializes an `MUValidatorIntWithRange` object with the specified range. + + @param object of `NSRange` class + + @return The newly-initialized validator object with range + */ - (id) initWithRange:(NSRange)aRange; @end -//============================================================================== -//============================================================================== -//============================================================================== -/// +/** + `MUValidatorMoney` is an `MUValidator` subclass that validate Text Field for allowed only money format strings. + + */ @interface MUValidatorMoney : MUValidator { } @end - -////============================================================================== -////============================================================================== -////============================================================================== -///// -//@interface MUValidator : MUValidator -//{ -//} -//@end diff --git a/MUKit/MUCore/MUWeakRef.h b/MUKit/MUCore/MUWeakRef.h index 78dea59..ac6db72 100644 --- a/MUKit/MUCore/MUWeakRef.h +++ b/MUKit/MUCore/MUWeakRef.h @@ -12,9 +12,9 @@ @class MUWeakRef; -//============================================================================== -//============================================================================== -//============================================================================== +/** + `MUWeakRefProtocol` interface made for using in `MUWeakRef` class. + */ @protocol MUWeakRefProtocol - (MUWeakRef*) weakReference; @@ -22,9 +22,21 @@ @end -//============================================================================== -//============================================================================== -//============================================================================== +/** + `MUWeakRef` made for awoding circular references. + + ## Base Description + + Using assign to create weak references can be unsafe in a multithreaded system, particularly when either object can be retained by a third object, and then used to dereference the other object. + + Fortunately, this is often a problem of hierarchy, and the object containing the weak reference only cares about the object it refers to for the referred-to object's lifetime. This is the usual situation with a Superior<->Subordinate relationship. + + ## Some advantages + + It's thread safe. There is no way you can have the weak reference contained in Subordinate become an invalid pointer. It may become nil but that is OK. + Only the objects themselves need to know about the embedded weak reference. All other objects can treat Subordinate as if it has a regular reference to Superior. + + */ @interface MUWeakRef : NSObject { @private @@ -33,11 +45,23 @@ @property (readonly) NSObject* object; +///--------------------------------------- +/// @name Main methods +///--------------------------------------- + +/** + Creates and initializes an `MUWeakRef` object with the specified weak reference. + + @param object that corresponds to `MUWeakRefProtocol` + + @return The newly-initialized object with weak reference + */ - (id) initWithObject:(NSObject*) aObject; + +/** + Clear weak referenced object + */ - (void) invalidate; @end -//============================================================================== -//============================================================================== -//============================================================================== diff --git a/MUKit/MUCore/MUWeakRef.m b/MUKit/MUCore/MUWeakRef.m index c16289d..883659b 100644 --- a/MUKit/MUCore/MUWeakRef.m +++ b/MUKit/MUCore/MUWeakRef.m @@ -9,14 +9,10 @@ #import "MUWeakRef.h" -//============================================================================== -//============================================================================== -//============================================================================== @implementation MUWeakRef @dynamic object; -//============================================================================== - (id) initWithObject:(NSObject*) aObject { if( (self = [super init]) ) @@ -27,7 +23,6 @@ - (id) initWithObject:(NSObject*) aObject return self; } -//============================================================================== - (void) invalidate { @synchronized(self) @@ -36,7 +31,6 @@ - (void) invalidate } } -//============================================================================== - (NSObject*) object { @synchronized(self) @@ -45,7 +39,4 @@ - (void) invalidate } } -//============================================================================== -//============================================================================== -//============================================================================== @end diff --git a/MUKit/MULogger/MULogger.h b/MUKit/MULogger/MULogger.h index cc033d7..8382192 100644 --- a/MUKit/MULogger/MULogger.h +++ b/MUKit/MULogger/MULogger.h @@ -16,11 +16,40 @@ // formatters #import "MULogFormatterPlainText.h" -//============================================================================== + + +/** + `MULogger` is a set of functions that could be invoced for logging info to different consumers (like files etc). + + */ + +///------------------------------- +/// @name Logger's functions +///------------------------------- + +/** + Logging text with _info_ type. + */ void MULogInfo(NSString* format, ...); + +/** + Logging text with _debug_ type. + */ void MULogDebug(NSString* format, ...); + +/** + Logging text with _warning_ type. + */ void MULogWarning(NSString* format, ...); + +/** + Logging text with _error_ type. + */ void MULogError(NSString* format, ...); + +/** + Logging text with _fatal error_ type. + */ void MULogFatal(NSString* format, ...); #endif diff --git a/help/docset-installed.txt b/help/docset-installed.txt new file mode 100644 index 0000000..7459f9a --- /dev/null +++ b/help/docset-installed.txt @@ -0,0 +1,4 @@ +Documentation set was installed to Xcode! + +Path: /Users/zhenya/Library/Developer/Shared/Documentation/DocSets/com.111min.MUKitTest.docset +Time: 2012-05-21 14:23:11 +0000 \ No newline at end of file From ebb8f467d487bb9ffdc22bc682de0c03a92be84f Mon Sep 17 00:00:00 2001 From: Zhenya Tulusha Date: Mon, 28 May 2012 13:25:58 +0300 Subject: [PATCH 2/2] Classes diagram added --- ClassesDiagram.graffle | Bin 0 -> 20778 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ClassesDiagram.graffle diff --git a/ClassesDiagram.graffle b/ClassesDiagram.graffle new file mode 100644 index 0000000000000000000000000000000000000000..2eb559079ba2c8189a92ab2884e0d93aff41d062 GIT binary patch literal 20778 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 M2iM2gn&l}60N{g%HUIzs literal 0 HcmV?d00001