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,186 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
|
|
3
|
+
#import "YapDatabaseExtension.h"
|
|
4
|
+
#import "YapDatabaseViewOptions.h"
|
|
5
|
+
#import "YapDatabaseViewConnection.h"
|
|
6
|
+
#import "YapDatabaseViewTransaction.h"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Welcome to YapDatabase!
|
|
10
|
+
*
|
|
11
|
+
* https://github.com/yaptv/YapDatabase
|
|
12
|
+
*
|
|
13
|
+
* The project wiki has a wealth of documentation if you have any questions.
|
|
14
|
+
* https://github.com/yaptv/YapDatabase/wiki
|
|
15
|
+
*
|
|
16
|
+
* YapDatabaseView is an extension designed to work with YapDatabase.
|
|
17
|
+
* It gives you a persistent sorted "view" of a configurable subset of your data.
|
|
18
|
+
*
|
|
19
|
+
* For the full documentation on Views, please see the related wiki article:
|
|
20
|
+
* https://github.com/yaptv/YapDatabase/wiki/Views
|
|
21
|
+
*
|
|
22
|
+
* Just in case you don't have Internet access,
|
|
23
|
+
* see the quick overview in YapDatabaseView.h.
|
|
24
|
+
**/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The grouping block handles both filtering and grouping.
|
|
28
|
+
*
|
|
29
|
+
* When you add or update rows in the databse the grouping block is invoked.
|
|
30
|
+
* Your grouping block can inspect the row and determine if it should be a part of the view.
|
|
31
|
+
* If not, your grouping block simply returns 'nil' and the object is excluded from the view (removing it if needed).
|
|
32
|
+
* Otherwise your grouping block returns a group, which can be any string you want.
|
|
33
|
+
* Once the view knows what group the row belongs to,
|
|
34
|
+
* it will then determine the position of the row within the group (using the sorting block).
|
|
35
|
+
*
|
|
36
|
+
* You should choose a block type that takes the minimum number of required parameters.
|
|
37
|
+
* The view can make various optimizations based on required parameters of the block.
|
|
38
|
+
**/
|
|
39
|
+
typedef id YapDatabaseViewGroupingBlock; // One of the YapDatabaseViewGroupingX types below.
|
|
40
|
+
|
|
41
|
+
typedef NSString* (^YapDatabaseViewGroupingWithKeyBlock)(NSString *collection, NSString *key);
|
|
42
|
+
typedef NSString* (^YapDatabaseViewGroupingWithObjectBlock)(NSString *collection, NSString *key, id object);
|
|
43
|
+
typedef NSString* (^YapDatabaseViewGroupingWithMetadataBlock)(NSString *collection, NSString *key, id metadata);
|
|
44
|
+
typedef NSString* (^YapDatabaseViewGroupingWithRowBlock)(NSString *collection, NSString *key, id object, id metadata);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The sorting block handles sorting of objects within their group.
|
|
48
|
+
*
|
|
49
|
+
* After the view invokes the grouping block to determine what group a database row belongs to (if any),
|
|
50
|
+
* the view then needs to determine what index within that group the row should be.
|
|
51
|
+
* In order to do this, it needs to compare the new/updated row with existing rows in the same view group.
|
|
52
|
+
* This is what the sorting block is used for.
|
|
53
|
+
* So the sorting block will be invoked automatically during this process until the view has come to a conclusion.
|
|
54
|
+
*
|
|
55
|
+
* You should choose a block type that takes the minimum number of required parameters.
|
|
56
|
+
* The view can make various optimizations based on required parameters of the block.
|
|
57
|
+
*
|
|
58
|
+
* For example, if sorting is based on the object, and the metadata of a row is updated,
|
|
59
|
+
* then the view can deduce that the index hasn't changed (if the group hans't), and can skip this step.
|
|
60
|
+
*
|
|
61
|
+
* Performance Note:
|
|
62
|
+
*
|
|
63
|
+
* The view uses various optimizations (based on common patterns)
|
|
64
|
+
* to reduce the number of times it needs to invoke the sorting block.
|
|
65
|
+
*
|
|
66
|
+
* - Pattern : row is updated, but its index in the view doesn't change.
|
|
67
|
+
* Optimization : if an updated row doesn't change groups, the view will first compare it with
|
|
68
|
+
* objects to the left and right.
|
|
69
|
+
*
|
|
70
|
+
* - Pattern : rows are added to the beginning or end or a view
|
|
71
|
+
* Optimization : if the last change put an object at the beginning of the view, then it will test this quickly.
|
|
72
|
+
* if the last change put an object at the end of the view, then it will test this quickly.
|
|
73
|
+
*
|
|
74
|
+
* These optimizations offer huge performance benefits to many common cases.
|
|
75
|
+
* For example, adding objects to a view that are sorted by timestamp of when they arrived.
|
|
76
|
+
*
|
|
77
|
+
* The optimizations are not always performed.
|
|
78
|
+
* That is, if the row is added to a group it didn't previously belong,
|
|
79
|
+
* or if the last change didn't place an item at the beginning or end of the view.
|
|
80
|
+
*
|
|
81
|
+
* If optimizations fail, or are skipped, then the view uses a binary search algorithm.
|
|
82
|
+
*
|
|
83
|
+
* Although this may be considered "internal information",
|
|
84
|
+
* I feel it is important to explain for the following reason:
|
|
85
|
+
*
|
|
86
|
+
* Another common pattern is to fetch a number of objects in a batch, and then insert them into the database.
|
|
87
|
+
* Now imagine a situation in which the view is sorting posts based on timestamp,
|
|
88
|
+
* and you just fetched the most recent 10 posts. You can enumerate these 10 posts in forwards or backwards
|
|
89
|
+
* while adding them to the database. One direction will hit the optimization every time. The other will cause
|
|
90
|
+
* the view to perform a binary search every time. These little one-liner optimzations are easy.
|
|
91
|
+
**/
|
|
92
|
+
typedef id YapDatabaseViewSortingBlock; // One of the YapDatabaseViewSortingX types below.
|
|
93
|
+
|
|
94
|
+
typedef NSComparisonResult (^YapDatabaseViewSortingWithKeyBlock) \
|
|
95
|
+
(NSString *group, NSString *collection1, NSString *key1, \
|
|
96
|
+
NSString *collection2, NSString *key2);
|
|
97
|
+
typedef NSComparisonResult (^YapDatabaseViewSortingWithObjectBlock) \
|
|
98
|
+
(NSString *group, NSString *collection1, NSString *key1, id object1, \
|
|
99
|
+
NSString *collection2, NSString *key2, id object2);
|
|
100
|
+
typedef NSComparisonResult (^YapDatabaseViewSortingWithMetadataBlock) \
|
|
101
|
+
(NSString *group, NSString *collection1, NSString *key1, id metadata, \
|
|
102
|
+
NSString *collection2, NSString *key2, id metadata2);
|
|
103
|
+
typedef NSComparisonResult (^YapDatabaseViewSortingWithRowBlock) \
|
|
104
|
+
(NSString *group, NSString *collection1, NSString *key1, id object1, id metadata1, \
|
|
105
|
+
NSString *collection2, NSString *key2, id object2, id metadata2);
|
|
106
|
+
|
|
107
|
+
#ifndef YapDatabaseViewBlockTypeDefined
|
|
108
|
+
#define YapDatabaseViewBlockTypeDefined 1
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* I wish there was a way to inspect a given block and see what kind of parameters it takes.
|
|
112
|
+
* Sadly this does not appear to be possible (at least not in any kind of standard legal way).
|
|
113
|
+
*
|
|
114
|
+
* Thus, unfortunately (for now), you will have to specify what kind of block you're passing.
|
|
115
|
+
**/
|
|
116
|
+
typedef enum {
|
|
117
|
+
YapDatabaseViewBlockTypeWithKey = 1,
|
|
118
|
+
YapDatabaseViewBlockTypeWithObject = 2,
|
|
119
|
+
YapDatabaseViewBlockTypeWithMetadata = 3,
|
|
120
|
+
YapDatabaseViewBlockTypeWithRow = 4
|
|
121
|
+
} YapDatabaseViewBlockType;
|
|
122
|
+
|
|
123
|
+
#endif
|
|
124
|
+
|
|
125
|
+
@interface YapDatabaseView : YapDatabaseExtension
|
|
126
|
+
|
|
127
|
+
/* Inherited from YapDatabaseExtension
|
|
128
|
+
|
|
129
|
+
@property (nonatomic, strong, readonly) NSString *registeredName;
|
|
130
|
+
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* See the wiki for an example of how to initialize a view:
|
|
135
|
+
* https://github.com/yaptv/YapDatabase/wiki/Views#wiki-initializing_a_view
|
|
136
|
+
*
|
|
137
|
+
* @param version
|
|
138
|
+
*
|
|
139
|
+
* If, after creating a view, you need to change either the groupingBlock or sortingBlock,
|
|
140
|
+
* then simply use the version parameter. If you pass a version that is different from the last
|
|
141
|
+
* initialization of the view, then the view will automatically flush its tables, and re-populate itself.
|
|
142
|
+
*
|
|
143
|
+
* @param options
|
|
144
|
+
*
|
|
145
|
+
* The options allow you to specify things like creating an in-memory-only view (non persistent).
|
|
146
|
+
**/
|
|
147
|
+
|
|
148
|
+
- (id)initWithGroupingBlock:(YapDatabaseViewGroupingBlock)groupingBlock
|
|
149
|
+
groupingBlockType:(YapDatabaseViewBlockType)groupingBlockType
|
|
150
|
+
sortingBlock:(YapDatabaseViewSortingBlock)sortingBlock
|
|
151
|
+
sortingBlockType:(YapDatabaseViewBlockType)sortingBlockType;
|
|
152
|
+
|
|
153
|
+
- (id)initWithGroupingBlock:(YapDatabaseViewGroupingBlock)groupingBlock
|
|
154
|
+
groupingBlockType:(YapDatabaseViewBlockType)groupingBlockType
|
|
155
|
+
sortingBlock:(YapDatabaseViewSortingBlock)sortingBlock
|
|
156
|
+
sortingBlockType:(YapDatabaseViewBlockType)sortingBlockType
|
|
157
|
+
version:(int)version;
|
|
158
|
+
|
|
159
|
+
- (id)initWithGroupingBlock:(YapDatabaseViewGroupingBlock)groupingBlock
|
|
160
|
+
groupingBlockType:(YapDatabaseViewBlockType)groupingBlockType
|
|
161
|
+
sortingBlock:(YapDatabaseViewSortingBlock)sortingBlock
|
|
162
|
+
sortingBlockType:(YapDatabaseViewBlockType)sortingBlockType
|
|
163
|
+
version:(int)version
|
|
164
|
+
options:(YapDatabaseViewOptions *)options;
|
|
165
|
+
|
|
166
|
+
@property (nonatomic, strong, readonly) YapDatabaseViewGroupingBlock groupingBlock;
|
|
167
|
+
@property (nonatomic, strong, readonly) YapDatabaseViewSortingBlock sortingBlock;
|
|
168
|
+
|
|
169
|
+
@property (nonatomic, assign, readonly) YapDatabaseViewBlockType groupingBlockType;
|
|
170
|
+
@property (nonatomic, assign, readonly) YapDatabaseViewBlockType sortingBlockType;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The version assists you in updating your blocks.
|
|
174
|
+
*
|
|
175
|
+
* If you need to change the groupingBlock or sortingBlock,
|
|
176
|
+
* then simply pass an incremented version during the init method,
|
|
177
|
+
* and the view will automatically update itself.
|
|
178
|
+
**/
|
|
179
|
+
@property (nonatomic, assign, readonly) int version;
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* The options allow you to specify things like creating an in-memory-only view (non persistent).
|
|
183
|
+
**/
|
|
184
|
+
@property (nonatomic, copy, readonly) YapDatabaseViewOptions *options;
|
|
185
|
+
|
|
186
|
+
@end
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
#import "YapDatabaseView.h"
|
|
2
|
+
#import "YapDatabaseViewPrivate.h"
|
|
3
|
+
|
|
4
|
+
#import "YapDatabasePrivate.h"
|
|
5
|
+
#import "YapDatabaseExtensionPrivate.h"
|
|
6
|
+
|
|
7
|
+
#import "YapDatabaseLogging.h"
|
|
8
|
+
|
|
9
|
+
#if ! __has_feature(objc_arc)
|
|
10
|
+
#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
|
|
11
|
+
#endif
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Define log level for this file: OFF, ERROR, WARN, INFO, VERBOSE
|
|
15
|
+
* See YapDatabaseLogging.h for more information.
|
|
16
|
+
**/
|
|
17
|
+
#if DEBUG
|
|
18
|
+
static const int ydbLogLevel = YDB_LOG_LEVEL_WARN;
|
|
19
|
+
#else
|
|
20
|
+
static const int ydbLogLevel = YDB_LOG_LEVEL_WARN;
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
@implementation YapDatabaseView
|
|
24
|
+
|
|
25
|
+
+ (void)dropTablesForRegisteredName:(NSString *)registeredName
|
|
26
|
+
withTransaction:(YapDatabaseReadWriteTransaction *)transaction
|
|
27
|
+
{
|
|
28
|
+
NSString *mapTableName = [self mapTableNameForRegisteredName:registeredName];
|
|
29
|
+
NSString *pageTableName = [self pageTableNameForRegisteredName:registeredName];
|
|
30
|
+
NSString *pageMetadataTableName = [self pageMetadataTableNameForRegisteredName:registeredName];
|
|
31
|
+
|
|
32
|
+
// Handle persistent view
|
|
33
|
+
|
|
34
|
+
sqlite3 *db = transaction->connection->db;
|
|
35
|
+
|
|
36
|
+
NSString *dropKeyTable = [NSString stringWithFormat:@"DROP TABLE IF EXISTS \"%@\";", mapTableName];
|
|
37
|
+
NSString *dropPageTable = [NSString stringWithFormat:@"DROP TABLE IF EXISTS \"%@\";", pageTableName];
|
|
38
|
+
|
|
39
|
+
int status;
|
|
40
|
+
|
|
41
|
+
status = sqlite3_exec(db, [dropKeyTable UTF8String], NULL, NULL, NULL);
|
|
42
|
+
if (status != SQLITE_OK)
|
|
43
|
+
{
|
|
44
|
+
YDBLogError(@"%@ - Failed dropping map table (%@): %d %s",
|
|
45
|
+
THIS_METHOD, mapTableName, status, sqlite3_errmsg(db));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
status = sqlite3_exec(db, [dropPageTable UTF8String], NULL, NULL, NULL);
|
|
49
|
+
if (status != SQLITE_OK)
|
|
50
|
+
{
|
|
51
|
+
YDBLogError(@"%@ - Failed dropping page table (%@): %d %s",
|
|
52
|
+
THIS_METHOD, pageTableName, status, sqlite3_errmsg(db));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Handle memory view
|
|
56
|
+
|
|
57
|
+
[transaction->connection unregisterTableWithName:mapTableName];
|
|
58
|
+
[transaction->connection unregisterTableWithName:pageTableName];
|
|
59
|
+
[transaction->connection unregisterTableWithName:pageMetadataTableName];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
+ (NSArray *)previousClassNames
|
|
63
|
+
{
|
|
64
|
+
return @[ @"YapCollectionsDatabaseView" ];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
+ (NSString *)mapTableNameForRegisteredName:(NSString *)registeredName
|
|
68
|
+
{
|
|
69
|
+
return [NSString stringWithFormat:@"view_%@_map", registeredName];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
+ (NSString *)pageTableNameForRegisteredName:(NSString *)registeredName
|
|
73
|
+
{
|
|
74
|
+
return [NSString stringWithFormat:@"view_%@_page", registeredName];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
+ (NSString *)pageMetadataTableNameForRegisteredName:(NSString *)registeredName
|
|
78
|
+
{
|
|
79
|
+
return [NSString stringWithFormat:@"view_%@_pageMetadata", registeredName];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
83
|
+
#pragma mark Instance
|
|
84
|
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
85
|
+
|
|
86
|
+
@synthesize groupingBlock = groupingBlock;
|
|
87
|
+
@synthesize sortingBlock = sortingBlock;
|
|
88
|
+
|
|
89
|
+
@synthesize groupingBlockType = groupingBlockType;
|
|
90
|
+
@synthesize sortingBlockType = sortingBlockType;
|
|
91
|
+
|
|
92
|
+
@synthesize version = version;
|
|
93
|
+
@dynamic options;
|
|
94
|
+
|
|
95
|
+
- (id)initWithGroupingBlock:(YapDatabaseViewGroupingBlock)inGroupingBlock
|
|
96
|
+
groupingBlockType:(YapDatabaseViewBlockType)inGroupingBlockType
|
|
97
|
+
sortingBlock:(YapDatabaseViewSortingBlock)inSortingBlock
|
|
98
|
+
sortingBlockType:(YapDatabaseViewBlockType)inSortingBlockType
|
|
99
|
+
{
|
|
100
|
+
return [self initWithGroupingBlock:inGroupingBlock
|
|
101
|
+
groupingBlockType:inGroupingBlockType
|
|
102
|
+
sortingBlock:inSortingBlock
|
|
103
|
+
sortingBlockType:inSortingBlockType
|
|
104
|
+
version:0
|
|
105
|
+
options:nil];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
- (id)initWithGroupingBlock:(YapDatabaseViewGroupingBlock)inGroupingBlock
|
|
109
|
+
groupingBlockType:(YapDatabaseViewBlockType)inGroupingBlockType
|
|
110
|
+
sortingBlock:(YapDatabaseViewSortingBlock)inSortingBlock
|
|
111
|
+
sortingBlockType:(YapDatabaseViewBlockType)inSortingBlockType
|
|
112
|
+
version:(int)inVersion
|
|
113
|
+
{
|
|
114
|
+
return [self initWithGroupingBlock:inGroupingBlock
|
|
115
|
+
groupingBlockType:inGroupingBlockType
|
|
116
|
+
sortingBlock:inSortingBlock
|
|
117
|
+
sortingBlockType:inSortingBlockType
|
|
118
|
+
version:inVersion
|
|
119
|
+
options:nil];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
- (id)initWithGroupingBlock:(YapDatabaseViewGroupingBlock)inGroupingBlock
|
|
123
|
+
groupingBlockType:(YapDatabaseViewBlockType)inGroupingBlockType
|
|
124
|
+
sortingBlock:(YapDatabaseViewSortingBlock)inSortingBlock
|
|
125
|
+
sortingBlockType:(YapDatabaseViewBlockType)inSortingBlockType
|
|
126
|
+
version:(int)inVersion
|
|
127
|
+
options:(YapDatabaseViewOptions *)inOptions;
|
|
128
|
+
{
|
|
129
|
+
if ((self = [super init]))
|
|
130
|
+
{
|
|
131
|
+
NSAssert(inGroupingBlockType == YapDatabaseViewBlockTypeWithKey ||
|
|
132
|
+
inGroupingBlockType == YapDatabaseViewBlockTypeWithObject ||
|
|
133
|
+
inGroupingBlockType == YapDatabaseViewBlockTypeWithMetadata ||
|
|
134
|
+
inGroupingBlockType == YapDatabaseViewBlockTypeWithRow,
|
|
135
|
+
@"Invalid grouping block type");
|
|
136
|
+
|
|
137
|
+
NSAssert(inSortingBlockType == YapDatabaseViewBlockTypeWithKey ||
|
|
138
|
+
inSortingBlockType == YapDatabaseViewBlockTypeWithObject ||
|
|
139
|
+
inSortingBlockType == YapDatabaseViewBlockTypeWithMetadata ||
|
|
140
|
+
inSortingBlockType == YapDatabaseViewBlockTypeWithRow,
|
|
141
|
+
@"Invalid sorting block type");
|
|
142
|
+
|
|
143
|
+
groupingBlock = inGroupingBlock;
|
|
144
|
+
groupingBlockType = inGroupingBlockType;
|
|
145
|
+
|
|
146
|
+
sortingBlock = inSortingBlock;
|
|
147
|
+
sortingBlockType = inSortingBlockType;
|
|
148
|
+
|
|
149
|
+
version = inVersion;
|
|
150
|
+
|
|
151
|
+
options = inOptions ? [inOptions copy] : [[YapDatabaseViewOptions alloc] init];
|
|
152
|
+
}
|
|
153
|
+
return self;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
- (YapDatabaseViewOptions *)options
|
|
157
|
+
{
|
|
158
|
+
return [options copy];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Subclasses must implement this method.
|
|
163
|
+
* This method is called during the view registration process to enusre the extension supports
|
|
164
|
+
* the database configuration.
|
|
165
|
+
**/
|
|
166
|
+
- (BOOL)supportsDatabase:(YapDatabase *)database withRegisteredExtensions:(NSDictionary *)registeredExtensions
|
|
167
|
+
{
|
|
168
|
+
return YES;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
- (YapDatabaseExtensionConnection *)newConnection:(YapDatabaseConnection *)databaseConnection
|
|
172
|
+
{
|
|
173
|
+
return [[YapDatabaseViewConnection alloc] initWithView:self databaseConnection:databaseConnection];
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
- (NSString *)mapTableName
|
|
177
|
+
{
|
|
178
|
+
return [[self class] mapTableNameForRegisteredName:self.registeredName];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
- (NSString *)pageTableName
|
|
182
|
+
{
|
|
183
|
+
return [[self class] pageTableNameForRegisteredName:self.registeredName];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
- (NSString *)pageMetadataTableName
|
|
187
|
+
{
|
|
188
|
+
return [[self class] pageMetadataTableNameForRegisteredName:self.registeredName];
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
@end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import "YapDatabaseExtensionConnection.h"
|
|
3
|
+
#import "YapDatabaseViewChange.h"
|
|
4
|
+
#import "YapDatabaseViewMappings.h"
|
|
5
|
+
|
|
6
|
+
@class YapDatabaseView;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Welcome to YapDatabase!
|
|
10
|
+
*
|
|
11
|
+
* https://github.com/yaptv/YapDatabase
|
|
12
|
+
*
|
|
13
|
+
* The project wiki has a wealth of documentation if you have any questions.
|
|
14
|
+
* https://github.com/yaptv/YapDatabase/wiki
|
|
15
|
+
*
|
|
16
|
+
* YapDatabaseView is an extension designed to work with YapDatabase.
|
|
17
|
+
* It gives you a persistent sorted "view" of a configurable subset of your data.
|
|
18
|
+
*
|
|
19
|
+
* For the full documentation on Views, please see the related wiki article:
|
|
20
|
+
* https://github.com/yaptv/YapDatabase/wiki/Views
|
|
21
|
+
*
|
|
22
|
+
*
|
|
23
|
+
* As a extension, YapDatabaseViewConnection is automatically created by YapDatabaseConnnection.
|
|
24
|
+
* You can access this object via:
|
|
25
|
+
*
|
|
26
|
+
* [databaseConnection extension:@"myRegisteredViewName"]
|
|
27
|
+
*
|
|
28
|
+
* @see YapDatabaseView
|
|
29
|
+
* @see YapDatabaseViewTransaction
|
|
30
|
+
**/
|
|
31
|
+
@interface YapDatabaseViewConnection : YapDatabaseExtensionConnection
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Returns the parent view instance.
|
|
35
|
+
**/
|
|
36
|
+
@property (nonatomic, strong, readonly) YapDatabaseView *view;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Want to easily animate a tableView or collectionView when the view changes?
|
|
40
|
+
* Want an exact list of changes that happend to the view?
|
|
41
|
+
*
|
|
42
|
+
* You're in luck!
|
|
43
|
+
*
|
|
44
|
+
* Here's an overview of how it works:
|
|
45
|
+
*
|
|
46
|
+
* - (void)yapDatabaseModified:(NSNotification *)notification
|
|
47
|
+
* {
|
|
48
|
+
* // Jump to the most recent commit.
|
|
49
|
+
* // End & Re-Begin the long-lived transaction atomically.
|
|
50
|
+
* // Also grab all the notifications for all the commits that I jump.
|
|
51
|
+
* NSArray *notifications = [roDatabaseConnection beginLongLivedReadTransaction];
|
|
52
|
+
*
|
|
53
|
+
* // What changed in my tableView?
|
|
54
|
+
*
|
|
55
|
+
* NSDictionary *mappings = @{ @"bestSellers" : @(0) };
|
|
56
|
+
* NSArray *changes = [[databaseConnection extension:@"sales"] operationsForNotifications:notifications
|
|
57
|
+
* withGroupToSectionMappings:mappings];
|
|
58
|
+
* if ([changes count] == 0)
|
|
59
|
+
* {
|
|
60
|
+
* // There aren't any changes that affect our tableView!
|
|
61
|
+
* return;
|
|
62
|
+
* }
|
|
63
|
+
*
|
|
64
|
+
* // Familiar with NSFetchedResultsController?
|
|
65
|
+
* // Then this should look pretty familiar
|
|
66
|
+
*
|
|
67
|
+
* [self.tableView beginUpdates];
|
|
68
|
+
*
|
|
69
|
+
* for (YapDatabaseViewChange *change in changes)
|
|
70
|
+
* {
|
|
71
|
+
* switch (change.type)
|
|
72
|
+
* {
|
|
73
|
+
* case YapDatabaseViewChangeDelete :
|
|
74
|
+
* {
|
|
75
|
+
* [self.tableView deleteRowsAtIndexPaths:@[ change.indexPath ]
|
|
76
|
+
* withRowAnimation:UITableViewRowAnimationAutomatic];
|
|
77
|
+
* break;
|
|
78
|
+
* }
|
|
79
|
+
* case YapDatabaseViewChangeInsert :
|
|
80
|
+
* {
|
|
81
|
+
* [self.tableView insertRowsAtIndexPaths:@[ change.newIndexPath ]
|
|
82
|
+
* withRowAnimation:UITableViewRowAnimationAutomatic];
|
|
83
|
+
* break;
|
|
84
|
+
* }
|
|
85
|
+
* case YapDatabaseViewChangeMove :
|
|
86
|
+
* {
|
|
87
|
+
* [self.tableView deleteRowsAtIndexPaths:@[ change.indexPath ]
|
|
88
|
+
* withRowAnimation:UITableViewRowAnimationAutomatic];
|
|
89
|
+
* [self.tableView insertRowsAtIndexPaths:@[ change.newIndexPath ]
|
|
90
|
+
* withRowAnimation:UITableViewRowAnimationAutomatic];
|
|
91
|
+
* break;
|
|
92
|
+
* }
|
|
93
|
+
* case YapDatabaseViewChangeUpdate :
|
|
94
|
+
* {
|
|
95
|
+
* [self.tableView reloadRowsAtIndexPaths:@[ change.indexPath ]
|
|
96
|
+
* withRowAnimation:UITableViewRowAnimationAutomatic];
|
|
97
|
+
* break;
|
|
98
|
+
* }
|
|
99
|
+
* }
|
|
100
|
+
* }
|
|
101
|
+
*
|
|
102
|
+
* [self.tableView endUpdates];
|
|
103
|
+
* }
|
|
104
|
+
**/
|
|
105
|
+
- (void)getSectionChanges:(NSArray **)sectionChangesPtr
|
|
106
|
+
rowChanges:(NSArray **)rowChangesPtr
|
|
107
|
+
forNotifications:(NSArray *)notifications
|
|
108
|
+
withMappings:(YapDatabaseViewMappings *)mappings;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* A simple YES/NO query to see if the view changed at all, inclusive of all groups.
|
|
112
|
+
**/
|
|
113
|
+
- (BOOL)hasChangesForNotifications:(NSArray *)notifications;
|
|
114
|
+
|
|
115
|
+
@end
|