Oh, I'm just playing with it right now.
I started building something small using the Git adapter, and quickly couldn't find the 3 records my simple program had made with the example code—that's what prompted the first question.
I had explored ActiveModel & Git a couple years ago, but with the number of libgit2 adapters available now that imitate Rugged (incl an ObjC one), I got curious to see if I could build a simple mobile/web app pair that would allow for the models to be versioned, to diverge, and then (with custom code), to merge back again. ToyStore seemed like a super simple model for working with models that allowed me to swap out the store, and provide guidance on how I would do something similar in iOS. Perhaps a pipe dream; I'm just playing. :-)
So, to give you an example of the kind of query I might be looking for:
How would I grab a list of recently active users for my home page?
Based on your earlier comments, I've just taken the Grit repo that I handed to the adapter, and used its API to do the equivalent of `MyModel.all`. I can see the basic separation, then, of query versus model/relationship work. I'm guessing that to handle the question above, I'd create a new model with some property that's a list of Users; say `ApplicationStatus.recentlyActiveUsers` that I could write code to ensure that the list was fewer than 20, and that my app would push a User object into that model when a User's actions qualified them to be in the list, and that my home page would simply locate that well-known model, access the list of users, and then traverse the relationships needed to render the list onto the page (or, I suppose I could create a model that captured only the salient details, and have that data 'duplicated' between the core app models and the recentlyActiveUsers models...). I guess I expect it to be a lot like Mongo (ObjectIDs embedded into some document property that I can use to go lookup an item in this or another collection), but without all the specifics of querying or indexing, etc. That's left to me to tune to my specific kind of data, stored and indexed how I want it to be, while allowing the bulk of my model logic to remain unchanged because it relies mainly on the unchanging assumption that this stuff is in a basic key/value store of some sort.
Seems like it's pretty powerful for a decent subset of what you _don't_ want to change when you are doing optimization work as your app grows, while also flexible enough to handle shifting storage strategies over time. What would change is the non-key-based retrieval code and impl-specific index declarations, etc.
Am I catching on to the philosophy right?
--Tim