post_json 1.0.5 → 1.0.6
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 +4 -4
- data/MIT-LICENSE +1 -1
- data/README.md +65 -51
- data/Rakefile +0 -1
- data/lib/generators/post_json/install/templates/initializer.rb +2 -0
- data/lib/post_json.rb +1 -1
- data/lib/post_json/base.rb +3 -0
- data/lib/post_json/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96d7ef19a5b074957629924c45a9a71894cc5f97
|
4
|
+
data.tar.gz: ca189492fea7bf032db65d2762c852b66c39532b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 263da488e04ee6c7dc08aaaed72d21c0802bc3d6ec96aa5575e0519c8945c72c31f20c346e432eaa182cfe8b1b964f5bcd0eeacdca7f02b3d693606ae73cc8d1
|
7
|
+
data.tar.gz: b3a221adbf2b1b67c810a0c0b7c76c942ff4f68dc3a3234e75557a7006c07ce49be538560218884085f94ff08e8108a8050464cee7e6b1b35cee78c7edf6d389
|
data/MIT-LICENSE
CHANGED
@@ -17,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
17
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
18
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
19
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@ PostJson take full advantage of PostgreSQL 9.2+ support for JavaScript (Google's
|
|
7
7
|
PostJson, because we love document databases and PostgreSQL. PostJson combine features of Ruby, ActiveRecord and
|
8
8
|
PostgreSQL to provide a great document database.
|
9
9
|
|
10
|
-
See example of how we use PostJson as part of
|
10
|
+
See example of how we use PostJson as part of <a href="https://github.com/webnuts/jumpstarter">Jumpstarter</a>.
|
11
11
|
|
12
12
|
|
13
13
|
## Getting started
|
@@ -105,61 +105,43 @@ Also, __notice you don't have to define model attributes anywhere!__
|
|
105
105
|
|
106
106
|
Like you would expect with ActiveRecord.
|
107
107
|
|
108
|
-
|
108
|
+
5. Introduction to select and selectors.
|
109
109
|
|
110
|
-
|
111
|
-
limit
|
112
|
-
offset
|
113
|
-
page(page, per_page) # translate to `offset((page-1)*per_page).limit(per_page)`
|
114
|
-
only
|
115
|
-
order
|
116
|
-
reorder
|
117
|
-
reverse_order
|
118
|
-
where
|
119
|
-
|
120
|
-
And ...
|
121
|
-
|
122
|
-
all
|
123
|
-
any?
|
124
|
-
blank?
|
125
|
-
count
|
126
|
-
delete
|
127
|
-
delete_all
|
128
|
-
destroy
|
129
|
-
destroy_all
|
130
|
-
empty?
|
131
|
-
exists?
|
132
|
-
find
|
133
|
-
find_by
|
134
|
-
find_by!
|
135
|
-
find_each
|
136
|
-
find_in_batches
|
137
|
-
first
|
138
|
-
first!
|
139
|
-
first_or_create
|
140
|
-
first_or_initialize
|
141
|
-
ids
|
142
|
-
last
|
143
|
-
load
|
144
|
-
many?
|
145
|
-
pluck
|
146
|
-
select
|
147
|
-
size
|
148
|
-
take
|
149
|
-
take!
|
150
|
-
to_a
|
151
|
-
to_sql
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
110
|
+
Sometimes we need a transformed version of documents. This is very easy with `select`
|
156
111
|
|
112
|
+
me = Person.create(name: "Jacob", details: {age: 33})
|
113
|
+
|
114
|
+
other_me = Person.limit(1).select({name: "name", age: "details.age"}).first
|
115
|
+
puts other_me # {name: "Jacob", age: 33}
|
116
|
+
|
117
|
+
`select` takes a hash as argument and return an array of hashes. The value of each key/value pair in the hash argument is a selector. Selectors can point at attributes at root level, but also nested attributes. Each level of attributes is seperated with a dot (.).
|
118
|
+
|
119
|
+
6. Check out the initializer at `config/initializers/post_json.rb`
|
120
|
+
|
121
|
+
PostJson.setup "people" do |collection|
|
122
|
+
collection.record_timestamps = true # default is 'true'
|
123
|
+
collection.created_at_attribute_name = "created_at" # default is 'created_at'
|
124
|
+
collection.updated_at_attribute_name = "updated_at" # default is 'updated_at'
|
125
|
+
collection.include_version_number = true # default is 'true'
|
126
|
+
collection.version_attribute_name = "version" # default is 'version'
|
127
|
+
collection.use_dynamic_index = true # default is 'true'
|
128
|
+
collection.create_dynamic_index_milliseconds_threshold = 50 # default is '50'
|
129
|
+
end
|
130
|
+
|
131
|
+
#### All of the following methods are supported
|
157
132
|
|
133
|
+
all, any?, blank?, count, delete, delete_all, destroy, destroy_all, each, empty?, except, exists?, find, find_by,
|
134
|
+
find_by!, find_each, find_in_batches, first, first!, first_or_create, first_or_initialize, ids, last, limit, load,
|
135
|
+
many?, offset, only, order, pluck, reorder, reverse_order, select, size, take, take!, to_a, to_sql, and where.
|
136
|
+
|
137
|
+
We also added `page(page, per_page)`, which translate into `offset((page-1)*per_page).limit(per_page)`.
|
158
138
|
|
159
139
|
## Dynamic Indexes
|
160
140
|
|
161
|
-
|
162
|
-
|
141
|
+
Most applications do the same queries over and over again. This is why we think it is useful, if PostJson create indexes on slow queries.
|
142
|
+
|
143
|
+
So we have created a feature we call `Dynamic Index`. It will automatically create indexes on slow queries,
|
144
|
+
so queries speed up considerably.
|
163
145
|
|
164
146
|
PostJson will measure the duration of each `SELECT` query and instruct PostgreSQL to create an Index,
|
165
147
|
if the query duration is above a specified threshold.
|
@@ -174,6 +156,38 @@ Lets say that you execute the following query and the duration is above the thre
|
|
174
156
|
PostJson will create (unless it already exists) an Index on `name` behind the scenes. The next time
|
175
157
|
you execute a query with `name` the performance will be much improved.
|
176
158
|
|
159
|
+
You can adjust the settings:
|
160
|
+
|
161
|
+
class Person < PostJson::Collection["people"]
|
162
|
+
self.create_dynamic_index_milliseconds_threshold = 75
|
163
|
+
end
|
164
|
+
|
165
|
+
# Or you can do:
|
166
|
+
|
167
|
+
PostJson::Collection["people"].create_dynamic_index_milliseconds_threshold = 75
|
168
|
+
|
169
|
+
# Now indexes are only created if queries are slower than 75 milliseconds.
|
170
|
+
|
171
|
+
|
172
|
+
You might already know this about User Interfaces, but it is usual considered good practice if auto-complete responses are served to the user within 100 milliseconds. Other results are usual okay within 500 milliseconds. So leave room for application processing and network delay.
|
173
|
+
|
174
|
+
Do not set create_dynamic_index_milliseconds_threshold too low as PostJson will try to create an index for every query performance. Like a threshold of 1 millisecond will be less than almost all query durations.
|
175
|
+
|
176
|
+
## The future
|
177
|
+
|
178
|
+
A few things we will be working on:
|
179
|
+
- Versioning of documents with support for history, restore and rollback.
|
180
|
+
- Restore a copy of entire collection at a specific date.
|
181
|
+
- Copy a collection.
|
182
|
+
- Automatic deletion of dynamic indexes when unused for a period of time.
|
183
|
+
- Full text search. PostgreSQL has many great features.
|
184
|
+
- Bulk import.
|
185
|
+
- Support for files. Maybe as attachments to documents.
|
186
|
+
- Keep the similarities with ActiveRecord API, but it shouldn't depend on Rails or ActiveRecord.
|
187
|
+
- Better performance and less complex code.
|
188
|
+
|
189
|
+
And please let us know what you think and what you need.
|
190
|
+
|
177
191
|
## Requirements
|
178
192
|
|
179
193
|
- PostgreSQL 9.2 or 9.3
|
@@ -187,7 +201,7 @@ PostJson is released under the MIT License. See the MIT-LICENSE file.
|
|
187
201
|
|
188
202
|
That's awesome, thank you!
|
189
203
|
|
190
|
-
Do you have an idea or suggestion? Please create an issue or send us an e-mail (hello@webnuts.com). We would be happy to implement
|
204
|
+
Do you have an idea or suggestion? Please create an issue or send us an e-mail (hello@webnuts.com). We would be happy to implement right away.
|
191
205
|
|
192
206
|
You can also send us a pull request with your contribution.
|
193
207
|
|
data/Rakefile
CHANGED
data/lib/post_json.rb
CHANGED
data/lib/post_json/base.rb
CHANGED
data/lib/post_json/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: post_json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Madsen and Martin Thoegersen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|