Konstantin Haase
e218b13073
be less forgiving with /auth/github requests
2015-10-05 18:16:29 +02:00
Konstantin Haase
716bd1f8e6
v3: don't have recursive recursiveness trigger endless db queries, fixes travis-pro/team-teal#497
2015-10-05 17:49:10 +02:00
carlad
36d361b7af
remove empty line
2015-09-30 17:19:08 +02:00
carlad
b6ffb8bdf8
v3 add job cancellation endpoint ans spec
2015-09-30 17:03:00 +02:00
carlad
d8e24bf52f
v3 fix specs for build canceland restart
2015-09-30 16:37:34 +02:00
carlad
e3de9a4f07
v3 update payload again
2015-09-30 16:19:07 +02:00
carlad
a2deeb1d96
v3 update payload
2015-09-30 15:49:48 +02:00
carlad
38b73f53cb
v3 more trying to get the payload right
2015-09-30 15:35:19 +02:00
carlad
f3b8258b53
v3 update payload for build restart
2015-09-30 15:29:12 +02:00
carlad
5c6e705012
v3 update sidekiq payload for build restart and cancel
2015-09-30 15:21:59 +02:00
carlad
b73a5604d0
v3 add build/id/cancel endpoint and tests
2015-09-29 16:28:42 +02:00
carlad
d99c3c8c54
v3 update build cancel, access control, specs for build cancel
2015-09-28 18:45:52 +02:00
carlad
faf60a5f7f
initial work to add build and job cancellation incl updating existing specs
2015-09-25 16:04:47 +02:00
carlad
ab979e2356
add category to broadcasts renderer
2015-09-23 15:32:15 +02:00
carlad
866ed28641
v3 revert removal of :last_build from repo renderer
2015-09-22 16:23:26 +02:00
carlad
af7fdec340
v3 remove :last_build attrubite from repository renderer
2015-09-22 16:16:01 +02:00
carlad
6821cec524
revert change to build renderer
2015-09-21 17:02:38 +02:00
carlad
986ae0ef97
add branch to build minimal rep
2015-09-21 16:26:01 +02:00
carlad
9f2b880f83
increase throttle limit for authenticated requests
2015-09-18 09:58:34 +02:00
Konstantin Haase
c372b07344
only enable request throttling in production
2015-09-17 15:26:30 +02:00
Konstantin Haase
e8769dddc5
add missing constant
2015-09-17 15:21:16 +02:00
Konstantin Haase
5e40f33fc1
remove left-overs from inheriting from Rack::Attack
2015-09-17 15:18:48 +02:00
Konstantin Haase
e478c621f2
no more inheritance
2015-09-17 15:13:33 +02:00
Konstantin Haase
dc0da3645a
work around strange constant lookup
2015-09-17 15:10:27 +02:00
Konstantin Haase
9303a24595
base throttling on access token if the call is authenticated, rather than on IP address, improve throttling rules
2015-09-17 14:57:50 +02:00
Konstantin Haase
b59fa6cd94
add general throttling
2015-09-15 19:30:13 +02:00
Konstantin Haase
af977ca677
use in-memory store for local development
2015-09-15 19:22:04 +02:00
Konstantin Haase
3e0423aae3
add auto-throtteling to /auth/github
2015-09-15 19:17:01 +02:00
Konstantin Haase
fb4bedbb6b
move ip blacklist to redis
2015-09-15 18:29:54 +02:00
carlad
4a0932df1e
prefix ids with correct tables when ordering
2015-09-15 11:45:16 +02:00
carlad
dc7ced1c7f
v3 add :default_branch to minimal representation for repository, update specs
2015-09-14 18:43:26 +02:00
carlad
28c6e04eb8
put jobs service back in
2015-09-11 11:10:36 +02:00
carlad
1640c33517
fix incorrect broadcast endpoints - add correct broadcasts endpoint
2015-09-10 17:36:13 +02:00
carlad
bd61d1e58e
add broadcasts - initial work
2015-09-10 15:08:41 +02:00
carlad
2c5ad649f5
v3 add :exists_on_github to standard branch representation
2015-09-08 16:26:43 +02:00
carlad
9d7a01e60c
Merge branch 'master' into cd-v3-parity
...
Keeping my branch up to date with the master
2015-09-08 12:21:49 +02:00
carlad
2e72233213
v3 fix services
2015-09-07 17:10:03 +02:00
carlad
f44b374d79
v3 add branches endpoint
2015-09-07 17:09:05 +02:00
carlad
beaa4b7e17
add branches endpoint
2015-09-07 17:07:09 +02:00
Konstantin Haase
3242189259
v3: eager load jobs for build history if asked for
2015-09-03 15:30:18 +02:00
Konstantin Haase
2891dd640a
v3: use cached_matrix_ids for build.jobs if only job ids are being loaded
2015-09-03 15:03:12 +02:00
carlad
702b539ddf
v3 put endpoints in routes.rb into alphabetical order
2015-09-02 18:22:10 +02:00
carlad
211637e247
v3 make specs use v3 models, update representations of build and job, make some indentation pretty
2015-09-02 16:21:41 +02:00
carlad
d99d80ac98
v3 add :job_ids to build payload, update builds/find_spec
2015-08-27 13:33:46 +02:00
carlad
8e6dbf9319
v3 add /job/:id endpoint
2015-08-27 11:00:09 +02:00
carlad
1a3d42da21
v3 add _type_disabled to ovveride activerecord setting wrong class on job
2015-08-26 16:33:16 +02:00
carlad
98bcc9e530
add :jobs to build payload
2015-08-26 12:44:15 +02:00
Konstantin Haase
6b0850813c
Merge branch 'cd-v3-parity'
2015-08-25 19:42:00 +02:00
Konstantin Haase
e3d56ecadb
v3: more info in the service index
2015-08-25 19:41:04 +02:00
Konstantin Haase
2610c03801
v3: in service index, sort resources alphabetically
2015-08-25 18:07:21 +02:00
Konstantin Haase
ee03ebfbe5
v3: have attributes in service index list representations
2015-08-25 17:53:08 +02:00
carlad
51bcdec77a
add @representation attribute to collections and update specs
2015-08-25 17:50:45 +02:00
carlad
720d8aa284
add @representation attribute to payload and update specs
2015-08-25 17:21:02 +02:00
carlad
517b3b60ef
Merge branch 'master' into cd-v3-parity
2015-08-24 10:01:59 +02:00
Konstantin Haase
09df061268
v3: add @warnings
2015-08-21 19:50:37 +02:00
Konstantin Haase
462b2aed0d
v3: allow filtering builds by branch
2015-08-21 19:11:27 +02:00
Konstantin Haase
4eb89ab141
v3: allow filtering by /repo/…/builds?state=… as a shorthand for /repo/…/builds?build.state=…
2015-08-21 18:56:51 +02:00
Konstantin Haase
73ec1d496e
v3: allow filtering builds by event_type, state and previous_state
2015-08-21 18:46:42 +02:00
Konstantin Haase
cc346ce165
v3: more eager-loading
2015-08-21 18:33:27 +02:00
Konstantin Haase
cbc5329b3d
v3: avoid N+1 query in builds endpoint
2015-08-21 18:26:21 +02:00
Konstantin Haase
34bff32c3d
v3: pagination => @pagination
2015-08-21 17:27:42 +02:00
carlad
8057dc7ab9
Merge branch 'master' into cd-v3-parity
2015-08-21 17:07:25 +02:00
Konstantin Haase
b3f47d3856
v3: add pagination
2015-08-21 17:04:12 +02:00
Konstantin Haase
ac522d6fdd
Merge commit 'e9d1105'
2015-08-21 14:43:49 +02:00
carlad
8ef0a2d8e5
implement requests
2015-08-21 14:39:28 +02:00
Konstantin Haase
28e3e52b3e
fix alignment
2015-08-21 14:39:19 +02:00
Konstantin Haase
5ef17e7da0
Merge branch 'cd-v3-parity'
2015-08-21 14:38:38 +02:00
carlad
e9d11056c0
update find for access control
2015-08-21 14:05:36 +02:00
carlad
f7634f0f39
update routes for builds
2015-08-21 13:48:47 +02:00
carlad
fe9a6536d7
add builds
2015-08-21 13:38:07 +02:00
Konstantin Haase
18a90c2561
v3: if the API is not marked as public (travis-ci.com), then do not allow read access to organizations the user is not a member of (note: private repos were never included)
2015-08-19 13:04:54 +02:00
Konstantin Haase
a6c6b3c0bd
add repository.active to v2
2015-07-17 11:26:00 +02:00
Konstantin Haase
edac220a42
add secure and private flag to config payload
2015-07-14 17:30:50 +02:00
Sven Fuchs
426a4f3a69
ignore invalidated repos on the Repositories query
2015-07-14 14:35:56 +02:00
Sven Fuchs
d831597cc2
ignore invalidated repos
2015-07-14 14:35:20 +02:00
Piotr Sarnacki
2ce1220ef5
Merge pull request #179 from travis-ci/pass-token-to-request-create
...
Include token in requests/create payload
2015-07-08 14:30:18 +02:00
Piotr Sarnacki
a35d78afd8
Allow to configure limit for requests creation
2015-07-08 13:55:40 +02:00
Piotr Sarnacki
b898d863c0
Increase requests creation limit to 50
2015-07-08 13:40:43 +02:00
Piotr Sarnacki
3fa44b2e3f
Include token in requests/create payload
2015-07-08 13:38:55 +02:00
Piotr Sarnacki
857af4fde0
Use Accept entries for getting API version
2015-07-07 12:45:30 +02:00
Piotr Sarnacki
a1b421a7fa
Merge pull request #175 from travis-ci/remove-triggering-builds-in-v2
...
Remove triggering builds in V2
2015-06-29 14:58:15 +02:00
Piotr Sarnacki
c001a4d830
Return channels for a user record
2015-06-18 15:28:02 +02:00
Piotr Sarnacki
66f5d71d1a
Remove triggering builds in V2
2015-06-15 12:22:42 +02:00
Konstantin Haase
0cdecaade3
API v3: add captures route dsl method
2015-05-21 14:57:16 +02:00
Piotr Sarnacki
bff7f76c33
v3: Implement fetching repository by slug
2015-05-21 12:29:04 +02:00
Konstantin Haase
b9adb793cd
Travis.config.env => Travis.env
2015-05-12 12:26:29 +02:00
Konstantin Haase
3ade697ed3
set application_name on database connection
2015-05-12 12:18:49 +02:00
Konstantin Haase
887a797ae6
add support for setting session variables for postgres connections (as you can in ActiveRecord 4.x)
2015-05-12 11:55:46 +02:00
Konstantin Haase
9ec2ef7f56
allow switching profiler mode
2015-05-11 17:51:43 +02:00
Konstantin Haase
b0f142a94b
v3: drastically reduce objects allocated by access control
2015-05-11 17:38:40 +02:00
Konstantin Haase
225e654f89
Merge branch 'master' of github.com:travis-ci/travis-api
2015-05-11 17:14:34 +02:00
Konstantin Haase
16c5106cd3
v3: reduce object allocations from polyorphic relations patch
2015-05-11 17:14:24 +02:00
Konstantin Haase
ea23fd3b7e
add stackprof
2015-05-11 17:13:21 +02:00
Sven Fuchs
40a9699a9e
include event_type to build payloads, accept multiple event types
2015-05-06 17:08:49 +02:00
Konstantin Haase
2f19ba3357
API v3: don't load all builds when eagerloading repository.last_build
2015-05-05 17:01:03 +02:00
Konstantin Haase
59835c80f6
API v3: remove n+1 query from owner page endpoint
2015-05-05 16:43:52 +02:00
Konstantin Haase
cc82721565
Revert "v3: add active and private filter to owner query"
...
This reverts commit 2b12aadc0d
.
2015-05-04 18:34:15 +02:00
Konstantin Haase
2b12aadc0d
v3: add active and private filter to owner query
2015-05-04 18:23:40 +02:00
Konstantin Haase
140efa4766
Merge pull request #159 from travis-ci/sf-throttle-request-receive
...
Throttle request receive
2015-05-01 09:50:31 +02:00
Konstantin Haase
61ae7e669e
v3: allow expanding build.commit
2015-04-30 17:08:52 +02:00
Konstantin Haase
fb8e6825db
v3: expose build.previous_state
2015-04-30 16:25:14 +02:00
Konstantin Haase
ae7de12bec
v3: add build.event_type
2015-04-30 16:17:55 +02:00
Konstantin Haase
8215720b49
v3: don't fall back to v2 on 404
2015-04-30 16:05:58 +02:00
Sven Fuchs
7428ea4c7f
restore deprecated POST /requests for restarting builds/jobs
2015-04-30 12:55:26 +02:00
Sven Fuchs
587a1a0f80
Auto-merged master into sf-throttle-request-receive on deployment.
2015-04-30 11:33:40 +02:00
Konstantin Haase
857f13b26c
v3: add @permissions to user payload
2015-04-29 14:39:52 +02:00
Konstantin Haase
2094b50553
v3: add @permissions to organization payload
2015-04-29 14:28:33 +02:00
Konstantin Haase
21aa667b9c
v3: add account permissions
2015-04-29 14:14:21 +02:00
Konstantin Haase
429ad3fc6b
v3: don't error on including magic fields
2015-04-29 13:44:32 +02:00
Konstantin Haase
2b0ae177fa
v3: expose repo access permissions in payload
2015-04-29 11:31:05 +02:00
Konstantin Haase
77ad196a86
v3: use permissions check for enable/disable
2015-04-29 10:56:33 +02:00
Konstantin Haase
eac88e5d50
v3: introduce permission objects
2015-04-29 10:50:34 +02:00
Konstantin Haase
283092ff92
v3: avoid fetching the same repo owner over and over again when rendering a repo list
2015-04-28 22:28:45 +02:00
Konstantin Haase
075e2d1c6c
v3: avoid n+1 query for last_build on the default branch when loading a list of repositories
2015-04-28 22:08:27 +02:00
Konstantin Haase
c3e96c4a55
v3: use query object for include logic to avoid n+1 queries
2015-04-28 22:02:03 +02:00
Konstantin Haase
ad7ff86aa7
v3: make sure access_control is handed on
2015-04-28 21:50:33 +02:00
Konstantin Haase
3730dc74df
API v3: better eager loading and recursion detection for denormalized relations
2015-04-28 18:30:53 +02:00
Konstantin Haase
ae31a57541
v3: add @href to denormalized repository.owner
2015-04-28 18:14:36 +02:00
Konstantin Haase
49ad3bccda
v3: properly hand on options to nested render calls
2015-04-28 16:46:45 +02:00
Konstantin Haase
595163619d
API v3: allow eager loading owner repos
2015-04-28 14:58:21 +02:00
Konstantin Haase
bbba06a85f
API v3: fix owner query
2015-04-28 12:43:54 +02:00
Konstantin Haase
44f2be4afb
fix repo visibility filter
2015-04-28 12:41:51 +02:00
Konstantin Haase
99ca87b7c4
API v3: make polymorphic has_many work
2015-04-28 12:41:29 +02:00
Konstantin Haase
d8f1075491
start working on repos by owner endpoint
2015-04-27 17:01:41 +02:00
Konstantin Haase
922f221b09
v3: fix Model#===
2015-04-22 16:24:26 +02:00
Konstantin Haase
3794a999a3
try to match last lib not first lib when loading directories
2015-04-22 15:22:40 +02:00
Konstantin Haase
1b19b57109
v3: add accounts api
2015-04-17 13:34:29 +02:00
Konstantin Haase
344979a2a8
v3: rename account to owner (so we can use account for private accounts api)
2015-04-17 12:44:10 +02:00
Konstantin Haase
3680fcf389
v3: add subscription model
2015-04-17 12:16:11 +02:00
Konstantin Haase
aeb5046298
v3: one shared superclass for org/user renderers
2015-04-17 11:42:14 +02:00
Piotr Sarnacki
222a97028a
Allow to get repositories by ids
2015-04-16 13:42:33 +02:00
Konstantin Haase
a12240a0eb
v3: add avatar_url
2015-04-15 16:22:16 +02:00
Konstantin Haase
23c72dfa69
v3: remove include param from POST templates
2015-04-15 13:23:05 +02:00
Konstantin Haase
d9f5e1e736
make user and org lookup by login case insensitive
2015-04-14 16:07:23 +02:00
Konstantin Haase
3e47c93df8
v3: include query params in uri templates
2015-04-13 16:49:51 +02:00
Konstantin Haase
51c2d1f0bf
v3: implement query params whitelisting to avoid argument injection attacks
2015-04-13 16:00:47 +02:00
Konstantin Haase
5efdcc24c8
implement accounts api
2015-04-13 13:12:18 +02:00
Piotr Sarnacki
6d74c51e0e
Add avatar_url to accounts
2015-03-25 16:11:17 +01:00
Konstantin Haase
3a058339be
v3: add /user and /user/:id
2015-03-24 17:25:57 +01:00
Konstantin Haase
4ae3f5e171
v3: add owner_name and name to sidekiq payload when creating a new request
2015-03-24 12:34:37 +01:00
Konstantin Haase
e4f868cea7
v3: request payload needs to be json encoded
2015-03-24 11:52:27 +01:00
Konstantin Haase
03938cabdc
v3: throttle and enable request creation
2015-03-23 15:18:36 +01:00
Konstantin Haase
1b3bbca5a5
have auth not freak out on GH error
2015-03-12 17:54:36 +01:00
Konstantin Haase
bf6384e50e
do not print backtraces in production
2015-03-12 16:00:40 +01:00
Konstantin Haase
eb88cf6a2a
v3: avoid N+1 queries when eager loading repository relations
2015-03-10 15:59:04 +01:00
Konstantin Haase
0f6b02b339
v3: add @href to home document
2015-03-10 11:29:03 +01:00
Konstantin Haase
3c43f7e3fd
v3: expose available attributes for collections
2015-03-10 11:23:48 +01:00
Konstantin Haase
9449ada1cd
v3: add attributes to service index
2015-03-09 19:48:52 +01:00
Konstantin Haase
9b8a99ea33
v3: consisten nameing
2015-03-09 18:35:38 +01:00
Konstantin Haase
a3a9f1282a
v3: add ?include=, detect circular dependencies in renderer
2015-03-09 16:56:02 +01:00
Konstantin Haase
3687436bd8
v3: update existing hook instead of removing it
2015-03-06 17:09:33 +01:00
Konstantin Haase
e01e71e6db
v3: fix gh call
2015-03-06 17:04:46 +01:00
Konstantin Haase
819b057497
v3: override existing travis hook
2015-03-06 17:02:30 +01:00
Konstantin Haase
deacd0fdfa
use correct variable
2015-03-06 16:57:06 +01:00
Konstantin Haase
05c20422cc
v3: github_oauth_token is encrypted
2015-03-06 16:07:45 +01:00
Konstantin Haase
08505fead0
v3: don't set user/token on github hook
2015-03-06 15:36:31 +01:00
Konstantin Haase
de5908dd43
v3: implement enable/disable
2015-03-06 15:35:47 +01:00
Konstantin Haase
47b6590aad
Merge branch 'master' into rkh-v3-enable-disable
2015-03-05 14:56:37 +01:00
Konstantin Haase
a7c403734b
v3: add feature flag to request create
2015-03-05 14:44:25 +01:00
Konstantin Haase
9ea21e6352
Merge branch 'master' into rkh-v3-enable-disable
2015-03-05 14:27:17 +01:00
Konstantin Haase
7c6dc9a54c
v3: full request create implementation and specs
2015-03-04 18:35:25 +01:00
Konstantin Haase
8123f99b8a
v3: limit branch.builds to pushes
2015-02-24 06:46:32 +01:00
Konstantin Haase
c968bbaab1
v3: use branches table for default_branch, eager load on /repos endpoint to avoid N+1 queries
2015-02-23 22:54:28 +01:00
Konstantin Haase
f100a2b927
Merge pull request #163 from travis-ci/rkh-v3-separate-models
...
API v3: No longer use models from travis-core
2015-02-23 17:51:31 +01:00
Konstantin Haase
135b4b4a99
add spec for patched belongs_to
2015-02-23 17:18:07 +01:00
Konstantin Haase
0a485d2137
make sure access control is using the non-core user model
2015-02-23 17:09:14 +01:00
Konstantin Haase
d78a5b8883
add a comment to belongs_to extension
2015-02-23 16:58:55 +01:00
Konstantin Haase
5f2dc47e07
no longer use models from travis-core in queries
2015-02-23 16:50:51 +01:00
Konstantin Haase
20e9448dc1
Merge pull request #146 from cscott/bug-145
...
Allow branch names to contain slashes.
2015-02-23 12:51:17 +01:00
Konstantin Haase
2cf685c450
v3: add api endpoints for enabling/disabling a repo
2015-02-23 11:19:25 +01:00
Konstantin Haase
68c6b9239d
allow setting Travis-API-Version header via ajax
2015-02-18 14:59:57 +01:00
Konstantin Haase
f01c9a80b0
global gitignore, we meet again
2015-02-18 14:22:17 +01:00
Konstantin Haase
515b815069
v3: properly expose default_branch and last build for that branch in repo payload
2015-02-18 14:14:39 +01:00
Konstantin Haase
963a217fbf
v3: add missing files
2015-02-18 13:48:29 +01:00
Konstantin Haase
7fce1b93f3
v3: add /build/:id endpoint
2015-02-18 13:47:04 +01:00
Konstantin Haase
ab9f121ff2
v3: remove obsolete file
2015-02-18 13:15:38 +01:00
Konstantin Haase
bd4d6b91b4
v3: get rid of service helper mixins
2015-02-18 13:12:13 +01:00
Konstantin Haase
bc638ccb19
v3: refactor model rendering
2015-02-18 13:11:25 +01:00
Konstantin Haase
b84a0a492b
v3: add /org/:id endpoint
2015-02-18 10:07:14 +01:00
Konstantin Haase
32c2d9b0b9
v3: add @href to payloads
2015-02-17 15:48:12 +01:00
Konstantin Haase
cbc45c1a0a
v3: only X-Cascade on 404
2015-02-17 13:32:01 +01:00
Konstantin Haase
f104c413d4
fix args
2015-02-17 13:27:12 +01:00
Konstantin Haase
e19a9a5bed
flag request API as not_implemented
2015-02-17 13:11:57 +01:00
Konstantin Haase
49b03750e4
Merge branch 'master' into rkh-v3-request-create
2015-02-17 11:50:54 +01:00
carlad
8f6083117c
add async method to send exception error to sentry
...
add ErrorHandling class, refactor spec
correct the raven config class
correct the raven test
add a fake method for getting an exception
require error_handling
add new TestError class to test exceptions
add correct error class to test
add rescue block to raven send
make method a class method and add a test Travis.config.dns
add error the repos to test error
remove carla method in repos
add a fake error in repos
delete carla method
2015-02-13 16:16:45 +01:00
Sven Fuchs
a395ba865d
throttle build request receive api
2015-02-11 17:46:55 +01:00
Konstantin Haase
5e3cb2d3e6
remove unused code for now
2015-02-11 10:08:07 +01:00
Konstantin Haase
3567a759c2
v3: initial stab at request creation api
2015-02-11 10:05:08 +01:00
Sven Fuchs
4dfdefc933
remove deprecated restart action on /requests
2015-02-05 20:10:35 +01:00
Sven Fuchs
d3157ce0b8
Merge pull request #158 from travis-ci/ar_cd_background_tasks
...
add correct database info to sidekiq logging
2015-01-28 10:34:46 +01:00
Konstantin Haase
592320ac4c
v3: last_build can be nil, active should always be a boolean
2015-01-27 17:03:36 +01:00
carlad
f31d38e25e
add correct database info to sidekiq logging
2015-01-27 16:24:09 +01:00
carlad
517a3b04f7
Revert "Revert "Merge branch 'master' of github.com:travis-ci/travis-api""
...
This reverts commit 171b9c57c7
.
2015-01-27 16:22:30 +01:00
Konstantin Haase
737a31ad23
v3: add /orgs endpoint, fixes travis-pro/api-v3#1
2015-01-27 15:50:21 +01:00
Konstantin Haase
a9ffd2bef9
v3: avoid having to repeat the resource type over and over in services, automatically wrap return value in result
2015-01-27 15:30:00 +01:00
Konstantin Haase
171b9c57c7
Revert "Merge branch 'master' of github.com:travis-ci/travis-api"
...
This reverts commit 1b8f77ab36
, reversing
changes made to 79a4a9ad13
.
2015-01-27 14:39:36 +01:00
Konstantin Haase
1b8f77ab36
Merge branch 'master' of github.com:travis-ci/travis-api
2015-01-27 14:32:50 +01:00
Konstantin Haase
79a4a9ad13
v3: add repository.active to payload
2015-01-27 14:32:38 +01:00
Konstantin Haase
2e4771ccd2
v3: move find repos logic to query object, allow filtering by private and active
2015-01-27 14:30:35 +01:00
Konstantin Haase
1712204321
v3: introduce query objects for DB interaction
2015-01-27 13:57:51 +01:00