motion-yapper 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.travis.yml +6 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +63 -0
- data/README.md +16 -0
- data/Rakefile +20 -0
- data/app/app_delegate.rb +5 -0
- data/lib/yapper.rb +30 -0
- data/lib/yapper/attachment.rb +48 -0
- data/lib/yapper/bson.rb +20 -0
- data/lib/yapper/config.rb +18 -0
- data/lib/yapper/db.rb +151 -0
- data/lib/yapper/document.rb +54 -0
- data/lib/yapper/document/attachment.rb +26 -0
- data/lib/yapper/document/callbacks.rb +86 -0
- data/lib/yapper/document/persistance.rb +171 -0
- data/lib/yapper/document/relation.rb +84 -0
- data/lib/yapper/document/selection.rb +100 -0
- data/lib/yapper/extensions.rb +80 -0
- data/lib/yapper/log.rb +5 -0
- data/lib/yapper/sync.rb +134 -0
- data/lib/yapper/sync/data.rb +12 -0
- data/lib/yapper/sync/event.rb +194 -0
- data/lib/yapper/sync/queue.rb +164 -0
- data/lib/yapper/timestamps.rb +16 -0
- data/lib/yapper/version.rb +3 -0
- data/lib/yapper/yapper.rb +2 -0
- data/spec/helpers/time_helper.rb +3 -0
- data/spec/integration/all_spec.rb +40 -0
- data/spec/integration/callback_spec.rb +87 -0
- data/spec/integration/db_spec.rb +40 -0
- data/spec/integration/find_spec.rb +51 -0
- data/spec/integration/persistance_spec.rb +118 -0
- data/spec/integration/relation_spec.rb +174 -0
- data/spec/integration/sync_spec.rb +42 -0
- data/spec/integration/timestamps_spec.rb +34 -0
- data/spec/integration/types_spec.rb +23 -0
- data/spec/integration/when_spec.rb +29 -0
- data/spec/integration/where_spec.rb +132 -0
- data/vendor/Podfile.lock +24 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.h +641 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPClient.m +1396 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.h +133 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFHTTPRequestOperation.m +327 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.h +113 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFImageRequestOperation.m +321 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.h +71 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFJSONRequestOperation.m +150 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFNetworkActivityIndicatorManager.m +157 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFNetworking.h +43 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.h +68 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFPropertyListRequestOperation.m +143 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.h +370 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFURLConnectionOperation.m +848 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.h +89 -0
- data/vendor/Pods/AFNetworking/AFNetworking/AFXMLRequestOperation.m +167 -0
- data/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.h +78 -0
- data/vendor/Pods/AFNetworking/AFNetworking/UIImageView+AFNetworking.m +191 -0
- data/vendor/Pods/AFNetworking/LICENSE +19 -0
- data/vendor/Pods/AFNetworking/README.md +208 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPClient.h +641 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFHTTPRequestOperation.h +133 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFImageRequestOperation.h +113 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFJSONRequestOperation.h +71 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFNetworking.h +43 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFPropertyListRequestOperation.h +68 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFURLConnectionOperation.h +370 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/AFXMLRequestOperation.h +89 -0
- data/vendor/Pods/BuildHeaders/AFNetworking/UIImageView+AFNetworking.h +78 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/ContextFilterLogFormatter.h +65 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDASLLogger.h +41 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDAbstractDatabaseLogger.h +102 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDFileLogger.h +334 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDLog.h +601 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DDTTYLogger.h +167 -0
- data/vendor/Pods/BuildHeaders/CocoaLumberjack/DispatchQueueLogFormatter.h +116 -0
- data/vendor/Pods/BuildHeaders/NSData+MD5Digest/NSData+MD5Digest.h +18 -0
- data/vendor/Pods/BuildHeaders/Reachability/Reachability.h +109 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapCache.h +90 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapCollectionKey.h +20 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabase.h +547 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseConnection.h +447 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseConnectionState.h +29 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseDefaults.h +37 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtension.h +15 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtensionConnection.h +11 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtensionPrivate.h +440 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseExtensionTransaction.h +11 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredView.h +108 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewConnection.h +12 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewPrivate.h +19 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFilteredViewTransaction.h +39 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearch.h +89 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchConnection.h +32 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchPrivate.h +69 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchSnippetOptions.h +79 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseFullTextSearchTransaction.h +68 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseLogging.h +158 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseManager.h +17 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabasePrivate.h +424 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseQuery.h +42 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndex.h +100 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexConnection.h +33 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexPrivate.h +73 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexSetup.h +33 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseSecondaryIndexTransaction.h +58 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseStatement.h +13 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseString.h +121 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseTransaction.h +541 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseView.h +186 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewChange.h +272 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewChangePrivate.h +94 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewConnection.h +115 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewMappings.h +825 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewMappingsPrivate.h +72 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewOptions.h +56 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewPage.h +36 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewPageMetadata.h +27 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewPrivate.h +153 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewRangeOptions.h +330 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewRangeOptionsPrivate.h +17 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapDatabaseViewTransaction.h +447 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapMemoryTable.h +74 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapNull.h +17 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapSet.h +41 -0
- data/vendor/Pods/BuildHeaders/YapDatabase/YapTouch.h +15 -0
- data/vendor/Pods/CocoaLumberjack/LICENSE.txt +18 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDASLLogger.h +41 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDASLLogger.m +99 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDAbstractDatabaseLogger.h +102 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDAbstractDatabaseLogger.m +727 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDFileLogger.h +334 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDFileLogger.m +1353 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog.h +601 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDLog.m +1083 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDTTYLogger.h +167 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/DDTTYLogger.m +1479 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/ContextFilterLogFormatter.h +65 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/ContextFilterLogFormatter.m +191 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DispatchQueueLogFormatter.h +116 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/DispatchQueueLogFormatter.m +251 -0
- data/vendor/Pods/CocoaLumberjack/Lumberjack/Extensions/README.txt +7 -0
- data/vendor/Pods/CocoaLumberjack/README.markdown +37 -0
- data/vendor/Pods/Headers/AFNetworking/AFHTTPClient.h +641 -0
- data/vendor/Pods/Headers/AFNetworking/AFHTTPRequestOperation.h +133 -0
- data/vendor/Pods/Headers/AFNetworking/AFImageRequestOperation.h +113 -0
- data/vendor/Pods/Headers/AFNetworking/AFJSONRequestOperation.h +71 -0
- data/vendor/Pods/Headers/AFNetworking/AFNetworkActivityIndicatorManager.h +75 -0
- data/vendor/Pods/Headers/AFNetworking/AFNetworking.h +43 -0
- data/vendor/Pods/Headers/AFNetworking/AFPropertyListRequestOperation.h +68 -0
- data/vendor/Pods/Headers/AFNetworking/AFURLConnectionOperation.h +370 -0
- data/vendor/Pods/Headers/AFNetworking/AFXMLRequestOperation.h +89 -0
- data/vendor/Pods/Headers/AFNetworking/UIImageView+AFNetworking.h +78 -0
- data/vendor/Pods/Headers/CocoaLumberjack/ContextFilterLogFormatter.h +65 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DDASLLogger.h +41 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DDAbstractDatabaseLogger.h +102 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DDFileLogger.h +334 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DDLog.h +601 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DDTTYLogger.h +167 -0
- data/vendor/Pods/Headers/CocoaLumberjack/DispatchQueueLogFormatter.h +116 -0
- data/vendor/Pods/Headers/NSData+MD5Digest/NSData+MD5Digest.h +18 -0
- data/vendor/Pods/Headers/Reachability/Reachability.h +109 -0
- data/vendor/Pods/Headers/YapDatabase/YapCache.h +90 -0
- data/vendor/Pods/Headers/YapDatabase/YapCollectionKey.h +20 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabase.h +547 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseConnection.h +447 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseConnectionState.h +29 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseDefaults.h +37 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtension.h +15 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtensionConnection.h +11 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtensionPrivate.h +440 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseExtensionTransaction.h +11 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredView.h +108 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewConnection.h +12 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewPrivate.h +19 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFilteredViewTransaction.h +39 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearch.h +89 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchConnection.h +32 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchPrivate.h +69 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchSnippetOptions.h +79 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseFullTextSearchTransaction.h +68 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseLogging.h +158 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseManager.h +17 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabasePrivate.h +424 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseQuery.h +42 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndex.h +100 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexConnection.h +33 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexPrivate.h +73 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexSetup.h +33 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseSecondaryIndexTransaction.h +58 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseStatement.h +13 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseString.h +121 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseTransaction.h +541 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseView.h +186 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewChange.h +272 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewChangePrivate.h +94 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewConnection.h +115 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewMappings.h +825 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewMappingsPrivate.h +72 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewOptions.h +56 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewPage.h +36 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewPageMetadata.h +27 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewPrivate.h +153 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewRangeOptions.h +330 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewRangeOptionsPrivate.h +17 -0
- data/vendor/Pods/Headers/YapDatabase/YapDatabaseViewTransaction.h +447 -0
- data/vendor/Pods/Headers/YapDatabase/YapMemoryTable.h +74 -0
- data/vendor/Pods/Headers/YapDatabase/YapNull.h +17 -0
- data/vendor/Pods/Headers/YapDatabase/YapSet.h +41 -0
- data/vendor/Pods/Headers/YapDatabase/YapTouch.h +15 -0
- data/vendor/Pods/Headers/____Pods-AFNetworking-prefix.h +17 -0
- data/vendor/Pods/Headers/____Pods-CocoaLumberjack-prefix.h +5 -0
- data/vendor/Pods/Headers/____Pods-NSData+MD5Digest-prefix.h +5 -0
- data/vendor/Pods/Headers/____Pods-Reachability-prefix.h +5 -0
- data/vendor/Pods/Headers/____Pods-YapDatabase-prefix.h +5 -0
- data/vendor/Pods/Headers/____Pods-environment.h +38 -0
- data/vendor/Pods/Manifest.lock +24 -0
- data/vendor/Pods/NSData+MD5Digest/NSData+MD5Digest/NSData+MD5Digest.h +18 -0
- data/vendor/Pods/NSData+MD5Digest/NSData+MD5Digest/NSData+MD5Digest.m +39 -0
- data/vendor/Pods/NSData+MD5Digest/README.md +11 -0
- data/vendor/Pods/Pods-AFNetworking-Private.xcconfig +5 -0
- data/vendor/Pods/Pods-AFNetworking-dummy.m +5 -0
- data/vendor/Pods/Pods-AFNetworking-prefix.pch +17 -0
- data/vendor/Pods/Pods-AFNetworking.xcconfig +1 -0
- data/vendor/Pods/Pods-Acknowledgements.markdown +96 -0
- data/vendor/Pods/Pods-Acknowledgements.plist +142 -0
- data/vendor/Pods/Pods-CocoaLumberjack-Private.xcconfig +5 -0
- data/vendor/Pods/Pods-CocoaLumberjack-dummy.m +5 -0
- data/vendor/Pods/Pods-CocoaLumberjack-prefix.pch +5 -0
- data/vendor/Pods/Pods-CocoaLumberjack.xcconfig +0 -0
- data/vendor/Pods/Pods-NSData+MD5Digest-Private.xcconfig +5 -0
- data/vendor/Pods/Pods-NSData+MD5Digest-dummy.m +5 -0
- data/vendor/Pods/Pods-NSData+MD5Digest-prefix.pch +5 -0
- data/vendor/Pods/Pods-NSData+MD5Digest.xcconfig +0 -0
- data/vendor/Pods/Pods-Reachability-Private.xcconfig +5 -0
- data/vendor/Pods/Pods-Reachability-dummy.m +5 -0
- data/vendor/Pods/Pods-Reachability-prefix.pch +5 -0
- data/vendor/Pods/Pods-Reachability.xcconfig +1 -0
- data/vendor/Pods/Pods-YapDatabase-Private.xcconfig +5 -0
- data/vendor/Pods/Pods-YapDatabase-dummy.m +5 -0
- data/vendor/Pods/Pods-YapDatabase-prefix.pch +5 -0
- data/vendor/Pods/Pods-YapDatabase.xcconfig +1 -0
- data/vendor/Pods/Pods-dummy.m +5 -0
- data/vendor/Pods/Pods-environment.h +38 -0
- data/vendor/Pods/Pods-resources.sh +68 -0
- data/vendor/Pods/Pods.bridgesupport +5096 -0
- data/vendor/Pods/Pods.xcconfig +5 -0
- data/vendor/Pods/Pods.xcodeproj/project.pbxproj +5536 -0
- data/vendor/Pods/Reachability/LICENCE.txt +24 -0
- data/vendor/Pods/Reachability/README.md +65 -0
- data/vendor/Pods/Reachability/Reachability.h +109 -0
- data/vendor/Pods/Reachability/Reachability.m +527 -0
- data/vendor/Pods/YapDatabase/LICENSE.txt +18 -0
- data/vendor/Pods/YapDatabase/README.md +30 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/Internal/YapDatabaseFilteredViewPrivate.h +19 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredView.h +108 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredView.m +175 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewConnection.h +12 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewConnection.m +41 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTransaction.h +39 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FilteredViews/YapDatabaseFilteredViewTransaction.m +966 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/Internal/YapDatabaseFullTextSearchPrivate.h +69 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearch.h +89 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearch.m +146 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchConnection.h +32 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchConnection.m +298 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchSnippetOptions.h +79 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchSnippetOptions.m +95 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchTransaction.h +68 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/FullTextSearch/YapDatabaseFullTextSearchTransaction.m +1352 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/Internal/YapDatabaseExtensionPrivate.h +440 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtension.h +15 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtension.m +58 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionConnection.h +11 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionConnection.m +46 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionTransaction.h +11 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Protocol/YapDatabaseExtensionTransaction.m +180 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/Internal/YapDatabaseSecondaryIndexPrivate.h +73 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndex.h +100 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndex.m +149 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexConnection.h +33 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexConnection.m +330 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexSetup.h +33 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexSetup.m +184 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.h +58 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/SecondaryIndex/YapDatabaseSecondaryIndexTransaction.m +1166 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewChangePrivate.h +94 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewMappingsPrivate.h +72 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPage.h +36 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPage.mm +296 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPageMetadata.h +27 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPageMetadata.m +28 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewPrivate.h +153 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Internal/YapDatabaseViewRangeOptionsPrivate.h +17 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewChange.h +272 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewChange.m +2494 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewMappings.h +825 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewMappings.m +1567 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewRangeOptions.h +330 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/Utilities/YapDatabaseViewRangeOptions.m +141 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseView.h +186 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseView.m +191 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewConnection.h +115 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewConnection.m +897 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewOptions.h +56 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewOptions.m +27 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTransaction.h +447 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Extensions/Views/YapDatabaseViewTransaction.m +4505 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapCache.h +90 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapCache.m +453 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseConnectionState.h +29 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseConnectionState.m +48 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseDefaults.h +37 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseDefaults.m +83 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseLogging.h +158 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseLogging.m +73 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseManager.h +17 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseManager.m +56 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabasePrivate.h +424 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseStatement.h +13 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseStatement.m +26 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapDatabaseString.h +121 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapMemoryTable.h +74 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapMemoryTable.m +603 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapNull.h +17 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapNull.m +31 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapTouch.h +15 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Internal/YapTouch.m +31 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapCollectionKey.h +20 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapCollectionKey.m +194 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapDatabaseQuery.h +42 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapDatabaseQuery.m +96 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapSet.h +41 -0
- data/vendor/Pods/YapDatabase/YapDatabase/Utilities/YapSet.m +82 -0
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabase.h +547 -0
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabase.m +2022 -0
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseConnection.h +447 -0
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseConnection.m +3874 -0
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseTransaction.h +541 -0
- data/vendor/Pods/YapDatabase/YapDatabase/YapDatabaseTransaction.m +5282 -0
- data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.bridgesupport +16 -0
- data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.h +13 -0
- data/vendor/YapDatabaseRubyMotion/YapDatabaseRubyMotion.m +20 -0
- data/yapper.gemspec +24 -0
- metadata +458 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import "DDLog.h"
|
|
3
|
+
|
|
4
|
+
@class ContextFilterLogFormatter;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Welcome to Cocoa Lumberjack!
|
|
8
|
+
*
|
|
9
|
+
* The project page has a wealth of documentation if you have any questions.
|
|
10
|
+
* https://github.com/robbiehanson/CocoaLumberjack
|
|
11
|
+
*
|
|
12
|
+
* If you're new to the project you may wish to read the "Getting Started" page.
|
|
13
|
+
* https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
|
|
14
|
+
*
|
|
15
|
+
*
|
|
16
|
+
* This class provides a log formatter that filters log statements from a logging context not on the whitelist.
|
|
17
|
+
*
|
|
18
|
+
* A log formatter can be added to any logger to format and/or filter its output.
|
|
19
|
+
* You can learn more about log formatters here:
|
|
20
|
+
* https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters
|
|
21
|
+
*
|
|
22
|
+
* You can learn more about logging context's here:
|
|
23
|
+
* https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomContext
|
|
24
|
+
*
|
|
25
|
+
* But here's a quick overview / refresher:
|
|
26
|
+
*
|
|
27
|
+
* Every log statement has a logging context.
|
|
28
|
+
* These come from the underlying logging macros defined in DDLog.h.
|
|
29
|
+
* The default logging context is zero.
|
|
30
|
+
* You can define multiple logging context's for use in your application.
|
|
31
|
+
* For example, logically separate parts of your app each have a different logging context.
|
|
32
|
+
* Also 3rd party frameworks that make use of Lumberjack generally use their own dedicated logging context.
|
|
33
|
+
**/
|
|
34
|
+
@interface ContextWhitelistFilterLogFormatter : NSObject <DDLogFormatter>
|
|
35
|
+
|
|
36
|
+
- (id)init;
|
|
37
|
+
|
|
38
|
+
- (void)addToWhitelist:(int)loggingContext;
|
|
39
|
+
- (void)removeFromWhitelist:(int)loggingContext;
|
|
40
|
+
|
|
41
|
+
- (NSArray *)whitelist;
|
|
42
|
+
|
|
43
|
+
- (BOOL)isOnWhitelist:(int)loggingContext;
|
|
44
|
+
|
|
45
|
+
@end
|
|
46
|
+
|
|
47
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
48
|
+
#pragma mark -
|
|
49
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* This class provides a log formatter that filters log statements from a logging context on the blacklist.
|
|
53
|
+
**/
|
|
54
|
+
@interface ContextBlacklistFilterLogFormatter : NSObject <DDLogFormatter>
|
|
55
|
+
|
|
56
|
+
- (id)init;
|
|
57
|
+
|
|
58
|
+
- (void)addToBlacklist:(int)loggingContext;
|
|
59
|
+
- (void)removeFromBlacklist:(int)loggingContext;
|
|
60
|
+
|
|
61
|
+
- (NSArray *)blacklist;
|
|
62
|
+
|
|
63
|
+
- (BOOL)isOnBlacklist:(int)loggingContext;
|
|
64
|
+
|
|
65
|
+
@end
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
#import "ContextFilterLogFormatter.h"
|
|
2
|
+
#import <libkern/OSAtomic.h>
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Welcome to Cocoa Lumberjack!
|
|
6
|
+
*
|
|
7
|
+
* The project page has a wealth of documentation if you have any questions.
|
|
8
|
+
* https://github.com/robbiehanson/CocoaLumberjack
|
|
9
|
+
*
|
|
10
|
+
* If you're new to the project you may wish to read the "Getting Started" wiki.
|
|
11
|
+
* https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
|
|
12
|
+
**/
|
|
13
|
+
|
|
14
|
+
#if ! __has_feature(objc_arc)
|
|
15
|
+
#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
@interface LoggingContextSet : NSObject
|
|
19
|
+
|
|
20
|
+
- (void)addToSet:(int)loggingContext;
|
|
21
|
+
- (void)removeFromSet:(int)loggingContext;
|
|
22
|
+
|
|
23
|
+
- (NSArray *)currentSet;
|
|
24
|
+
|
|
25
|
+
- (BOOL)isInSet:(int)loggingContext;
|
|
26
|
+
|
|
27
|
+
@end
|
|
28
|
+
|
|
29
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
30
|
+
#pragma mark -
|
|
31
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
32
|
+
|
|
33
|
+
@implementation ContextWhitelistFilterLogFormatter
|
|
34
|
+
{
|
|
35
|
+
LoggingContextSet *contextSet;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
- (id)init
|
|
39
|
+
{
|
|
40
|
+
if ((self = [super init]))
|
|
41
|
+
{
|
|
42
|
+
contextSet = [[LoggingContextSet alloc] init];
|
|
43
|
+
}
|
|
44
|
+
return self;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
- (void)addToWhitelist:(int)loggingContext
|
|
49
|
+
{
|
|
50
|
+
[contextSet addToSet:loggingContext];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
- (void)removeFromWhitelist:(int)loggingContext
|
|
54
|
+
{
|
|
55
|
+
[contextSet removeFromSet:loggingContext];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
- (NSArray *)whitelist
|
|
59
|
+
{
|
|
60
|
+
return [contextSet currentSet];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
- (BOOL)isOnWhitelist:(int)loggingContext
|
|
64
|
+
{
|
|
65
|
+
return [contextSet isInSet:loggingContext];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage
|
|
69
|
+
{
|
|
70
|
+
if ([self isOnWhitelist:logMessage->logContext])
|
|
71
|
+
return logMessage->logMsg;
|
|
72
|
+
else
|
|
73
|
+
return nil;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@end
|
|
77
|
+
|
|
78
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
79
|
+
#pragma mark -
|
|
80
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
81
|
+
|
|
82
|
+
@implementation ContextBlacklistFilterLogFormatter
|
|
83
|
+
{
|
|
84
|
+
LoggingContextSet *contextSet;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
- (id)init
|
|
88
|
+
{
|
|
89
|
+
if ((self = [super init]))
|
|
90
|
+
{
|
|
91
|
+
contextSet = [[LoggingContextSet alloc] init];
|
|
92
|
+
}
|
|
93
|
+
return self;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
- (void)addToBlacklist:(int)loggingContext
|
|
98
|
+
{
|
|
99
|
+
[contextSet addToSet:loggingContext];
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
- (void)removeFromBlacklist:(int)loggingContext
|
|
103
|
+
{
|
|
104
|
+
[contextSet removeFromSet:loggingContext];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
- (NSArray *)blacklist
|
|
108
|
+
{
|
|
109
|
+
return [contextSet currentSet];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
- (BOOL)isOnBlacklist:(int)loggingContext
|
|
113
|
+
{
|
|
114
|
+
return [contextSet isInSet:loggingContext];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage
|
|
118
|
+
{
|
|
119
|
+
if ([self isOnBlacklist:logMessage->logContext])
|
|
120
|
+
return nil;
|
|
121
|
+
else
|
|
122
|
+
return logMessage->logMsg;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
@end
|
|
126
|
+
|
|
127
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
128
|
+
#pragma mark -
|
|
129
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
130
|
+
|
|
131
|
+
@implementation LoggingContextSet
|
|
132
|
+
{
|
|
133
|
+
OSSpinLock lock;
|
|
134
|
+
NSMutableSet *set;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
- (id)init
|
|
138
|
+
{
|
|
139
|
+
if ((self = [super init]))
|
|
140
|
+
{
|
|
141
|
+
set = [[NSMutableSet alloc] init];
|
|
142
|
+
}
|
|
143
|
+
return self;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
- (void)addToSet:(int)loggingContext
|
|
148
|
+
{
|
|
149
|
+
OSSpinLockLock(&lock);
|
|
150
|
+
{
|
|
151
|
+
[set addObject:@(loggingContext)];
|
|
152
|
+
}
|
|
153
|
+
OSSpinLockUnlock(&lock);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
- (void)removeFromSet:(int)loggingContext
|
|
157
|
+
{
|
|
158
|
+
OSSpinLockLock(&lock);
|
|
159
|
+
{
|
|
160
|
+
[set removeObject:@(loggingContext)];
|
|
161
|
+
}
|
|
162
|
+
OSSpinLockUnlock(&lock);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
- (NSArray *)currentSet
|
|
166
|
+
{
|
|
167
|
+
NSArray *result = nil;
|
|
168
|
+
|
|
169
|
+
OSSpinLockLock(&lock);
|
|
170
|
+
{
|
|
171
|
+
result = [set allObjects];
|
|
172
|
+
}
|
|
173
|
+
OSSpinLockUnlock(&lock);
|
|
174
|
+
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
- (BOOL)isInSet:(int)loggingContext
|
|
179
|
+
{
|
|
180
|
+
BOOL result = NO;
|
|
181
|
+
|
|
182
|
+
OSSpinLockLock(&lock);
|
|
183
|
+
{
|
|
184
|
+
result = [set containsObject:@(loggingContext)];
|
|
185
|
+
}
|
|
186
|
+
OSSpinLockUnlock(&lock);
|
|
187
|
+
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import <libkern/OSAtomic.h>
|
|
3
|
+
#import "DDLog.h"
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Welcome to Cocoa Lumberjack!
|
|
8
|
+
*
|
|
9
|
+
* The project page has a wealth of documentation if you have any questions.
|
|
10
|
+
* https://github.com/robbiehanson/CocoaLumberjack
|
|
11
|
+
*
|
|
12
|
+
* If you're new to the project you may wish to read the "Getting Started" page.
|
|
13
|
+
* https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
|
|
14
|
+
*
|
|
15
|
+
*
|
|
16
|
+
* This class provides a log formatter that prints the dispatch_queue label instead of the mach_thread_id.
|
|
17
|
+
*
|
|
18
|
+
* A log formatter can be added to any logger to format and/or filter its output.
|
|
19
|
+
* You can learn more about log formatters here:
|
|
20
|
+
* https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters
|
|
21
|
+
*
|
|
22
|
+
* A typical NSLog (or DDTTYLogger) prints detailed info as [<process_id>:<thread_id>].
|
|
23
|
+
* For example:
|
|
24
|
+
*
|
|
25
|
+
* 2011-10-17 20:21:45.435 AppName[19928:5207] Your log message here
|
|
26
|
+
*
|
|
27
|
+
* Where:
|
|
28
|
+
* - 19928 = process id
|
|
29
|
+
* - 5207 = thread id (mach_thread_id printed in hex)
|
|
30
|
+
*
|
|
31
|
+
* When using grand central dispatch (GCD), this information is less useful.
|
|
32
|
+
* This is because a single serial dispatch queue may be run on any thread from an internally managed thread pool.
|
|
33
|
+
* For example:
|
|
34
|
+
*
|
|
35
|
+
* 2011-10-17 20:32:31.111 AppName[19954:4d07] Message from my_serial_dispatch_queue
|
|
36
|
+
* 2011-10-17 20:32:31.112 AppName[19954:5207] Message from my_serial_dispatch_queue
|
|
37
|
+
* 2011-10-17 20:32:31.113 AppName[19954:2c55] Message from my_serial_dispatch_queue
|
|
38
|
+
*
|
|
39
|
+
* This formatter allows you to replace the standard [box:info] with the dispatch_queue name.
|
|
40
|
+
* For example:
|
|
41
|
+
*
|
|
42
|
+
* 2011-10-17 20:32:31.111 AppName[img-scaling] Message from my_serial_dispatch_queue
|
|
43
|
+
* 2011-10-17 20:32:31.112 AppName[img-scaling] Message from my_serial_dispatch_queue
|
|
44
|
+
* 2011-10-17 20:32:31.113 AppName[img-scaling] Message from my_serial_dispatch_queue
|
|
45
|
+
*
|
|
46
|
+
* If the dispatch_queue doesn't have a set name, then it falls back to the thread name.
|
|
47
|
+
* If the current thread doesn't have a set name, then it falls back to the mach_thread_id in hex (like normal).
|
|
48
|
+
*
|
|
49
|
+
* Note: If manually creating your own background threads (via NSThread/alloc/init or NSThread/detachNeThread),
|
|
50
|
+
* you can use [[NSThread currentThread] setName:(NSString *)].
|
|
51
|
+
**/
|
|
52
|
+
@interface DispatchQueueLogFormatter : NSObject <DDLogFormatter> {
|
|
53
|
+
@protected
|
|
54
|
+
|
|
55
|
+
NSString *dateFormatString;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Standard init method.
|
|
60
|
+
* Configure using properties as desired.
|
|
61
|
+
**/
|
|
62
|
+
- (id)init;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* The minQueueLength restricts the minimum size of the [detail box].
|
|
66
|
+
* If the minQueueLength is set to 0, there is no restriction.
|
|
67
|
+
*
|
|
68
|
+
* For example, say a dispatch_queue has a label of "diskIO":
|
|
69
|
+
*
|
|
70
|
+
* If the minQueueLength is 0: [diskIO]
|
|
71
|
+
* If the minQueueLength is 4: [diskIO]
|
|
72
|
+
* If the minQueueLength is 5: [diskIO]
|
|
73
|
+
* If the minQueueLength is 6: [diskIO]
|
|
74
|
+
* If the minQueueLength is 7: [diskIO ]
|
|
75
|
+
* If the minQueueLength is 8: [diskIO ]
|
|
76
|
+
*
|
|
77
|
+
* The default minQueueLength is 0 (no minimum, so [detail box] won't be padded).
|
|
78
|
+
*
|
|
79
|
+
* If you want every [detail box] to have the exact same width,
|
|
80
|
+
* set both minQueueLength and maxQueueLength to the same value.
|
|
81
|
+
**/
|
|
82
|
+
@property (assign) NSUInteger minQueueLength;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The maxQueueLength restricts the number of characters that will be inside the [detail box].
|
|
86
|
+
* If the maxQueueLength is 0, there is no restriction.
|
|
87
|
+
*
|
|
88
|
+
* For example, say a dispatch_queue has a label of "diskIO":
|
|
89
|
+
*
|
|
90
|
+
* If the maxQueueLength is 0: [diskIO]
|
|
91
|
+
* If the maxQueueLength is 4: [disk]
|
|
92
|
+
* If the maxQueueLength is 5: [diskI]
|
|
93
|
+
* If the maxQueueLength is 6: [diskIO]
|
|
94
|
+
* If the maxQueueLength is 7: [diskIO]
|
|
95
|
+
* If the maxQueueLength is 8: [diskIO]
|
|
96
|
+
*
|
|
97
|
+
* The default maxQueueLength is 0 (no maximum, so [detail box] won't be truncated).
|
|
98
|
+
*
|
|
99
|
+
* If you want every [detail box] to have the exact same width,
|
|
100
|
+
* set both minQueueLength and maxQueueLength to the same value.
|
|
101
|
+
**/
|
|
102
|
+
@property (assign) NSUInteger maxQueueLength;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Sometimes queue labels have long names like "com.apple.main-queue",
|
|
106
|
+
* but you'd prefer something shorter like simply "main".
|
|
107
|
+
*
|
|
108
|
+
* This method allows you to set such preferred replacements.
|
|
109
|
+
* The above example is set by default.
|
|
110
|
+
*
|
|
111
|
+
* To remove/undo a previous replacement, invoke this method with nil for the 'shortLabel' parameter.
|
|
112
|
+
**/
|
|
113
|
+
- (NSString *)replacementStringForQueueLabel:(NSString *)longLabel;
|
|
114
|
+
- (void)setReplacementString:(NSString *)shortLabel forQueueLabel:(NSString *)longLabel;
|
|
115
|
+
|
|
116
|
+
@end
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
#import "DispatchQueueLogFormatter.h"
|
|
2
|
+
#import <libkern/OSAtomic.h>
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Welcome to Cocoa Lumberjack!
|
|
6
|
+
*
|
|
7
|
+
* The project page has a wealth of documentation if you have any questions.
|
|
8
|
+
* https://github.com/robbiehanson/CocoaLumberjack
|
|
9
|
+
*
|
|
10
|
+
* If you're new to the project you may wish to read the "Getting Started" wiki.
|
|
11
|
+
* https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted
|
|
12
|
+
**/
|
|
13
|
+
|
|
14
|
+
#if ! __has_feature(objc_arc)
|
|
15
|
+
#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@implementation DispatchQueueLogFormatter
|
|
20
|
+
{
|
|
21
|
+
int32_t atomicLoggerCount;
|
|
22
|
+
NSDateFormatter *threadUnsafeDateFormatter; // Use [self stringFromDate]
|
|
23
|
+
|
|
24
|
+
OSSpinLock lock;
|
|
25
|
+
|
|
26
|
+
NSUInteger _minQueueLength; // _prefix == Only access via atomic property
|
|
27
|
+
NSUInteger _maxQueueLength; // _prefix == Only access via atomic property
|
|
28
|
+
NSMutableDictionary *_replacements; // _prefix == Only access from within spinlock
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
- (id)init
|
|
32
|
+
{
|
|
33
|
+
if ((self = [super init]))
|
|
34
|
+
{
|
|
35
|
+
dateFormatString = @"yyyy-MM-dd HH:mm:ss:SSS";
|
|
36
|
+
|
|
37
|
+
atomicLoggerCount = 0;
|
|
38
|
+
threadUnsafeDateFormatter = nil;
|
|
39
|
+
|
|
40
|
+
_minQueueLength = 0;
|
|
41
|
+
_maxQueueLength = 0;
|
|
42
|
+
_replacements = [[NSMutableDictionary alloc] init];
|
|
43
|
+
|
|
44
|
+
// Set default replacements:
|
|
45
|
+
|
|
46
|
+
[_replacements setObject:@"main" forKey:@"com.apple.main-thread"];
|
|
47
|
+
}
|
|
48
|
+
return self;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
53
|
+
#pragma mark Configuration
|
|
54
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
55
|
+
|
|
56
|
+
@synthesize minQueueLength = _minQueueLength;
|
|
57
|
+
@synthesize maxQueueLength = _maxQueueLength;
|
|
58
|
+
|
|
59
|
+
- (NSString *)replacementStringForQueueLabel:(NSString *)longLabel
|
|
60
|
+
{
|
|
61
|
+
NSString *result = nil;
|
|
62
|
+
|
|
63
|
+
OSSpinLockLock(&lock);
|
|
64
|
+
{
|
|
65
|
+
result = [_replacements objectForKey:longLabel];
|
|
66
|
+
}
|
|
67
|
+
OSSpinLockUnlock(&lock);
|
|
68
|
+
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
- (void)setReplacementString:(NSString *)shortLabel forQueueLabel:(NSString *)longLabel
|
|
73
|
+
{
|
|
74
|
+
OSSpinLockLock(&lock);
|
|
75
|
+
{
|
|
76
|
+
if (shortLabel)
|
|
77
|
+
[_replacements setObject:shortLabel forKey:longLabel];
|
|
78
|
+
else
|
|
79
|
+
[_replacements removeObjectForKey:longLabel];
|
|
80
|
+
}
|
|
81
|
+
OSSpinLockUnlock(&lock);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
85
|
+
#pragma mark DDLogFormatter
|
|
86
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
87
|
+
|
|
88
|
+
- (NSString *)stringFromDate:(NSDate *)date
|
|
89
|
+
{
|
|
90
|
+
int32_t loggerCount = OSAtomicAdd32(0, &atomicLoggerCount);
|
|
91
|
+
|
|
92
|
+
if (loggerCount <= 1)
|
|
93
|
+
{
|
|
94
|
+
// Single-threaded mode.
|
|
95
|
+
|
|
96
|
+
if (threadUnsafeDateFormatter == nil)
|
|
97
|
+
{
|
|
98
|
+
threadUnsafeDateFormatter = [[NSDateFormatter alloc] init];
|
|
99
|
+
[threadUnsafeDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
|
|
100
|
+
[threadUnsafeDateFormatter setDateFormat:dateFormatString];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return [threadUnsafeDateFormatter stringFromDate:date];
|
|
104
|
+
}
|
|
105
|
+
else
|
|
106
|
+
{
|
|
107
|
+
// Multi-threaded mode.
|
|
108
|
+
// NSDateFormatter is NOT thread-safe.
|
|
109
|
+
|
|
110
|
+
NSString *key = @"DispatchQueueLogFormatter_NSDateFormatter";
|
|
111
|
+
|
|
112
|
+
NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];
|
|
113
|
+
NSDateFormatter *dateFormatter = [threadDictionary objectForKey:key];
|
|
114
|
+
|
|
115
|
+
if (dateFormatter == nil)
|
|
116
|
+
{
|
|
117
|
+
dateFormatter = [[NSDateFormatter alloc] init];
|
|
118
|
+
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
|
|
119
|
+
[dateFormatter setDateFormat:dateFormatString];
|
|
120
|
+
|
|
121
|
+
[threadDictionary setObject:dateFormatter forKey:key];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return [dateFormatter stringFromDate:date];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
- (NSString *)queueThreadLabelForLogMessage:(DDLogMessage *)logMessage
|
|
129
|
+
{
|
|
130
|
+
// As per the DDLogFormatter contract, this method is always invoked on the same thread/dispatch_queue
|
|
131
|
+
|
|
132
|
+
NSUInteger minQueueLength = self.minQueueLength;
|
|
133
|
+
NSUInteger maxQueueLength = self.maxQueueLength;
|
|
134
|
+
|
|
135
|
+
// Get the name of the queue, thread, or machID (whichever we are to use).
|
|
136
|
+
|
|
137
|
+
NSString *queueThreadLabel = nil;
|
|
138
|
+
|
|
139
|
+
BOOL useQueueLabel = YES;
|
|
140
|
+
BOOL useThreadName = NO;
|
|
141
|
+
|
|
142
|
+
if (logMessage->queueLabel)
|
|
143
|
+
{
|
|
144
|
+
// If you manually create a thread, it's dispatch_queue will have one of the thread names below.
|
|
145
|
+
// Since all such threads have the same name, we'd prefer to use the threadName or the machThreadID.
|
|
146
|
+
|
|
147
|
+
char *names[] = { "com.apple.root.low-priority",
|
|
148
|
+
"com.apple.root.default-priority",
|
|
149
|
+
"com.apple.root.high-priority",
|
|
150
|
+
"com.apple.root.low-overcommit-priority",
|
|
151
|
+
"com.apple.root.default-overcommit-priority",
|
|
152
|
+
"com.apple.root.high-overcommit-priority" };
|
|
153
|
+
|
|
154
|
+
int length = sizeof(names) / sizeof(char *);
|
|
155
|
+
|
|
156
|
+
int i;
|
|
157
|
+
for (i = 0; i < length; i++)
|
|
158
|
+
{
|
|
159
|
+
if (strcmp(logMessage->queueLabel, names[i]) == 0)
|
|
160
|
+
{
|
|
161
|
+
useQueueLabel = NO;
|
|
162
|
+
useThreadName = [logMessage->threadName length] > 0;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else
|
|
168
|
+
{
|
|
169
|
+
useQueueLabel = NO;
|
|
170
|
+
useThreadName = [logMessage->threadName length] > 0;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (useQueueLabel || useThreadName)
|
|
174
|
+
{
|
|
175
|
+
NSString *fullLabel;
|
|
176
|
+
NSString *abrvLabel;
|
|
177
|
+
|
|
178
|
+
if (useQueueLabel)
|
|
179
|
+
fullLabel = @(logMessage->queueLabel);
|
|
180
|
+
else
|
|
181
|
+
fullLabel = logMessage->threadName;
|
|
182
|
+
|
|
183
|
+
OSSpinLockLock(&lock);
|
|
184
|
+
{
|
|
185
|
+
abrvLabel = [_replacements objectForKey:fullLabel];
|
|
186
|
+
}
|
|
187
|
+
OSSpinLockUnlock(&lock);
|
|
188
|
+
|
|
189
|
+
if (abrvLabel)
|
|
190
|
+
queueThreadLabel = abrvLabel;
|
|
191
|
+
else
|
|
192
|
+
queueThreadLabel = fullLabel;
|
|
193
|
+
}
|
|
194
|
+
else
|
|
195
|
+
{
|
|
196
|
+
queueThreadLabel = [NSString stringWithFormat:@"%x", logMessage->machThreadID];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Now use the thread label in the output
|
|
200
|
+
|
|
201
|
+
NSUInteger labelLength = [queueThreadLabel length];
|
|
202
|
+
|
|
203
|
+
// labelLength > maxQueueLength : truncate
|
|
204
|
+
// labelLength < minQueueLength : padding
|
|
205
|
+
// : exact
|
|
206
|
+
|
|
207
|
+
if ((maxQueueLength > 0) && (labelLength > maxQueueLength))
|
|
208
|
+
{
|
|
209
|
+
// Truncate
|
|
210
|
+
|
|
211
|
+
return [queueThreadLabel substringToIndex:maxQueueLength];
|
|
212
|
+
}
|
|
213
|
+
else if (labelLength < minQueueLength)
|
|
214
|
+
{
|
|
215
|
+
// Padding
|
|
216
|
+
|
|
217
|
+
NSUInteger numSpaces = minQueueLength - labelLength;
|
|
218
|
+
|
|
219
|
+
char spaces[numSpaces + 1];
|
|
220
|
+
memset(spaces, ' ', numSpaces);
|
|
221
|
+
spaces[numSpaces] = '\0';
|
|
222
|
+
|
|
223
|
+
return [NSString stringWithFormat:@"%@%s", queueThreadLabel, spaces];
|
|
224
|
+
}
|
|
225
|
+
else
|
|
226
|
+
{
|
|
227
|
+
// Exact
|
|
228
|
+
|
|
229
|
+
return queueThreadLabel;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage
|
|
234
|
+
{
|
|
235
|
+
NSString *timestamp = [self stringFromDate:(logMessage->timestamp)];
|
|
236
|
+
NSString *queueThreadLabel = [self queueThreadLabelForLogMessage:logMessage];
|
|
237
|
+
|
|
238
|
+
return [NSString stringWithFormat:@"%@ [%@] %@", timestamp, queueThreadLabel, logMessage->logMsg];
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
- (void)didAddToLogger:(id <DDLogger>)logger
|
|
242
|
+
{
|
|
243
|
+
OSAtomicIncrement32(&atomicLoggerCount);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
- (void)willRemoveFromLogger:(id <DDLogger>)logger
|
|
247
|
+
{
|
|
248
|
+
OSAtomicDecrement32(&atomicLoggerCount);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
@end
|