remetric 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{LICENSE.txt → MIT-LICENSE} +1 -3
- data/README.rdoc +7 -0
- data/Rakefile +32 -1
- data/app/assets/images/remetric/loading_logo.gif +0 -0
- data/app/assets/images/remetric/logo.png +0 -0
- data/app/assets/javascripts/remetric/app.js.coffee +22 -0
- data/app/assets/javascripts/remetric/application.js +16 -0
- data/app/assets/javascripts/remetric/dialog.js.coffee +21 -0
- data/app/assets/javascripts/remetric/messages.js.coffee +21 -0
- data/app/assets/javascripts/remetric/search.js.coffee +8 -0
- data/app/assets/javascripts/remetric/window.js.coffee +12 -0
- data/app/assets/stylesheets/remetric/app.css.scss +103 -0
- data/app/assets/stylesheets/remetric/application.css +16 -0
- data/app/assets/stylesheets/remetric/dialog.css.scss +100 -0
- data/app/assets/stylesheets/remetric/nav.css.scss +57 -0
- data/app/assets/stylesheets/remetric/reset.css +61 -0
- data/app/assets/stylesheets/remetric/search.css.scss +31 -0
- data/app/assets/stylesheets/remetric/tables.css.scss +25 -0
- data/app/controllers/remetric/application_controller.rb +9 -0
- data/app/controllers/remetric/dashboard_controller.rb +11 -0
- data/app/controllers/remetric/events_controller.rb +42 -0
- data/app/controllers/remetric/trackables_controller.rb +91 -0
- data/app/models/remetric/event.rb +60 -0
- data/app/models/remetric/trackable.rb +30 -0
- data/app/views/layouts/remetric/application.html.erb +29 -0
- data/app/views/remetric/application/_footer.html.erb +17 -0
- data/app/views/remetric/application/_nav.html.erb +21 -0
- data/app/views/remetric/dashboard/index.html.erb +1 -0
- data/app/views/remetric/dashboard/settings.html.erb +8 -0
- data/app/views/remetric/events/index.html.erb +30 -0
- data/app/views/remetric/events/show.html.erb +7 -0
- data/app/views/remetric/trackables/_form.html.erb +17 -0
- data/app/views/remetric/trackables/_trackable.html.erb +7 -0
- data/app/views/remetric/trackables/edit.html.erb +6 -0
- data/app/views/remetric/trackables/index.html.erb +68 -0
- data/app/views/remetric/trackables/index.js.erb +3 -0
- data/app/views/remetric/trackables/new.html.erb +5 -0
- data/app/views/remetric/trackables/show.html.erb +7 -0
- data/config/routes.rb +12 -0
- data/db/migrate/20140412130825_create_remetric_people.rb +8 -0
- data/db/migrate/20140412174234_create_remetric_trackables.rb +8 -0
- data/lib/remetric.rb +6 -45
- data/lib/remetric/engine.rb +17 -0
- data/lib/remetric/version.rb +2 -2
- data/lib/tasks/remetric_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +24 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +34 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +39 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/remetric.rb +15 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/mongoid.yml +69 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/db/schema.rb +20 -0
- data/test/dummy/log/development.log +77955 -0
- data/test/dummy/log/test.log +467 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/b3d404bff8ad98818c7006bbb375fc1377b98253/app.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/b3d404bff8ad98818c7006bbb375fc1377b98253/dialog.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/b3d404bff8ad98818c7006bbb375fc1377b98253/nav.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/b3d404bff8ad98818c7006bbb375fc1377b98253/search.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/b3d404bff8ad98818c7006bbb375fc1377b98253/tables.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/b3d404bff8ad98818c7006bbb375fc1377b98253/topbar.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/ef6ae779781469a1465ad72c03c0938d2b0957c7/app.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/ef6ae779781469a1465ad72c03c0938d2b0957c7/nav.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/ef6ae779781469a1465ad72c03c0938d2b0957c7/tables.css.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/036811149d0b235dc6a5d390b4cb7798 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/06044aa6fe90933931b87690cac756bb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/06523dcd5742577ca664780dccd6580d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/06cc1493872f7a7a686e7ceb15dc1edf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/08489a22fa3cea1f692673a79aeccc4d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0d0cd4d3626b8b7af859b848bb261b3b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/0ff64eb5301cc3a431a373318ef77ba9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/10777ee134d29c9933492eeb5f6a9a2e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/11a53c34e9d924ddcee8311e550e2a6a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/129284b0ab310e7cd9e25d84f9ee36ce +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/14ff5f14de79dc5534dda36eed0dc845 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/16bc847779945aa181449f07c9100ce4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1bc5ddb997a9674aa1ecf3596bcdea3b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1f7d448c7dd65aed702d885795263877 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/220d17e65184e9dc17578233e30285fc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/22359219f7d258ed678aa744625a1ff7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/23666533c8ff01f445bafdb2f1f02f86 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/27aa9a37df2520f26820676eed4f3700 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/281c6ce161cccf80f16cdb17ab4418cd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/29cf8dc04f0a517a0942324f7b779454 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2c11af377df23e6b6cdb35d040ce2e11 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2ca8c93fa70493848ec54ace98c8a74e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2d61509baca84dc502058ddd3248ec90 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2d6d573978d9d81e29432df0ea46d478 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/317da10b37ae905e1542a67d23559e69 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/32415ecae858572a5f3f19657e9fb686 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/396258e541c9223b9e7125c90bb3858b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/399fe27d4c9f18008f13282aebe13bce +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/39f8aac6fdfbd8e63ad64acfff6f11f6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3b016f440de7952117708d55661662d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3ca240f453c6ec94f2e9c5a27d7001f8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3e5365e32d57e4ac856f716b1cd3459e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3f9ed1aa1e459fc046192c14ed163a6c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/41444136ce4142d1170281f949577191 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/42c1ebcb98209b8dd066f44a6f6e91a4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/43a4bb43dd1715ec2eb67640a4988b50 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/45e79781056c40dc5cb1ed347f77706f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/507aa6d1fad718f18dac9753b23c1134 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/53e9204c5b6f9c911b53e6e7094c70cf +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/559c497c5bc5a3b0d6424b06c25fd993 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5e0f4b04d24167f4992c12c5debd3d8c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5ed4dfea5ce8c0191e138a49420dac41 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/61ae00e63e21dfb8ebec7b02b5dd422b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6690911b74d6cd9a2551a8e7712f5ba4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/698af75cb266cf67de8b35c5fbb87424 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6d872803bfb95566f660e9798b3cc34c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6e15f97a017c405492d9fc87477ad721 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6e956f97a9713501d948b2d083a4a020 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/6febf106bc4ae38f75f0887d1592de37 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/702c0722c0c5b287d25a402f7ee117f0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7064b9323802e4196822328ae83e9628 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/71e500b75cfd9b76b02bf67e12b3c833 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/72419c0eb8026ff0ce7f259890db2503 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/724b47e2fc60f39379329a90781df725 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/726ba6daceacbfd72d591ee2b20f55d0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/730529e519077e2969563e5e07f4fc00 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/741b2378e393e0588e5f82ab58a24082 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/76f4fb7efdd4f6c2acd738e55ea07d2f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7a29d789acb5ef53d4dc3e9a2a6cc762 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7b6dd538f069c113f1f9c8e76c9db372 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/808bfcd132560482630ba70dc6e282c8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8dfcdf65937789aca525d56adf1a4656 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9093f4594b2a064c24fc65f610e92e29 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/94b993ea74b11163bd3bd728ae31d051 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9538978dc1870cad6434d9c702a08d78 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b1a83d18767d300d400470a03bc4f7b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9b4fb1df1100690f915b3c08dc3b6e12 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9fe904495c3e56e07f56a2234def4ce3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a095af3c7e60e112ec29d7629c8af830 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a14ef177cbf5fcfae6e7eaac56e034b9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a31bbb879540ba0d456b98d902190384 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a3e3e63eb8abde2bd1dd81e850cf80e1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a52f913105047ed83d060e708c394961 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a776b0cf1650a70054f5da91283fecc4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b0785de9897c1eadef94fdaf024915f9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b49c711ecdbc2fff4f119705e2e53e4d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bc613cfb0adcb20734431cf9b9d07141 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bdae695e1d71988ce570d79394f0247e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c195f58c840031e93dcf040048d5386b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c2a902f3266b677f365fc3ce5a7bd820 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c7bd9cf81453a7911957b783ec6ecf5c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c8bb4469accab5fc441d923464873c47 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9ab7f296b30469ef9170c3ab336cdf4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c9bd5507d8142fbe02e5034485314999 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cb13c3985fc61edc836f19c9fd5f9a01 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cbf388d3208ecbd03a788db6891d2781 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cc6c1b77f34a8e580980b31eb35b441b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cc8e5fb7cbde151721ea55b7ad2d35dc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cca380662516cb1daca88d3f2c9a3b9e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d0796c18ca312aaa9f18fcf1091835a6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d15eb2bca16eb0f31c2089c5f397c5e2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/da0a32f5a80c68a1464a23861b172ea8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/db25052d96407ff539ebf9992cc5ba53 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dbef3e25a00efadb8ebc056530ea9c77 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dfdd2dcf54d51f737c704e8bb3d74997 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e6ca11d406eb8e17f4bd3db3c73117d5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e8e21ae1f6a7630e209b12d622cb6581 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ecdddb465b19971df1d705261890c12e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/eec9cdbbe1ffd8783ec43c910318e77a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ef1ae4e5869278227bd877dc5b9c1ed1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ef55b424d975f62aa8ace6d8e6d1420b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f58a02ac7bddf274a99d091aff62f179 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f703d7f63b064f4c9363a37b6c8f7102 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fa73f084d9c960b3822e9a670eddd6e9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fad64d3cc1d38839f623367e9e8bdab7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ff91cdc7d41ec915a2db3524da4c962f +0 -0
- data/test/fixtures/remetric/people.yml +11 -0
- data/test/fixtures/remetric/trackables.yml +11 -0
- data/test/models/remetric/event_test.rb +17 -0
- data/test/remetric_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +464 -27
- data/.gitignore +0 -1
- data/Gemfile +0 -6
- data/README.md +0 -49
- data/remetric.gemspec +0 -23
@@ -0,0 +1,61 @@
|
|
1
|
+
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote,
|
2
|
+
pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd,
|
3
|
+
q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt,
|
4
|
+
dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot,
|
5
|
+
thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption,
|
6
|
+
footer, header, hgroup, menu, nav, output, ruby, section, summary, time,
|
7
|
+
mark, audio, video {
|
8
|
+
margin: 0;
|
9
|
+
padding: 0;
|
10
|
+
border: 0;
|
11
|
+
font-size: 100%;
|
12
|
+
font: inherit;
|
13
|
+
vertical-align: baseline;
|
14
|
+
outline: none
|
15
|
+
}
|
16
|
+
|
17
|
+
article, aside, details, figcaption, figure, footer, header, hgroup,
|
18
|
+
menu, nav, section {
|
19
|
+
display: block
|
20
|
+
}
|
21
|
+
|
22
|
+
body {
|
23
|
+
line-height: 1
|
24
|
+
}
|
25
|
+
|
26
|
+
ol, ul {
|
27
|
+
list-style: none
|
28
|
+
}
|
29
|
+
|
30
|
+
blockquote, q {
|
31
|
+
quotes: none
|
32
|
+
}
|
33
|
+
|
34
|
+
blockquote:before, blockquote:after, q:before, q:after {
|
35
|
+
content: '';
|
36
|
+
content: none
|
37
|
+
}
|
38
|
+
|
39
|
+
table {
|
40
|
+
border-collapse: collapse;
|
41
|
+
border-spacing: 0
|
42
|
+
}
|
43
|
+
|
44
|
+
a {
|
45
|
+
text-decoration: none;
|
46
|
+
color: inherit;
|
47
|
+
}
|
48
|
+
|
49
|
+
b, strong {
|
50
|
+
font-weight: 600;
|
51
|
+
}
|
52
|
+
|
53
|
+
i, em {
|
54
|
+
font-style: oblique;
|
55
|
+
}
|
56
|
+
|
57
|
+
*, *:before, *:after {
|
58
|
+
-moz-box-sizing: border-box;
|
59
|
+
-webkit-box-sizing: border-box;
|
60
|
+
box-sizing: border-box
|
61
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
@-webkit-keyframes rotate {
|
2
|
+
from {
|
3
|
+
-webkit-transform: rotate(0deg);
|
4
|
+
}
|
5
|
+
to {
|
6
|
+
-webkit-transform: rotate(360deg);
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
#quick_search {
|
11
|
+
button {
|
12
|
+
margin-left: -10px;
|
13
|
+
border-radius: 0 4px 4px 0;
|
14
|
+
border: 1px solid #ccc;
|
15
|
+
padding: 5px 15px;
|
16
|
+
|
17
|
+
.loading {
|
18
|
+
display: none;
|
19
|
+
-webkit-animation-name: rotate;
|
20
|
+
-webkit-animation-duration: 0.5s;
|
21
|
+
-webkit-animation-iteration-count: infinite;
|
22
|
+
-webkit-animation-timing-function: linear;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
#search {
|
28
|
+
display: none;
|
29
|
+
background: #eee;
|
30
|
+
padding: 15px;
|
31
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
.table {
|
2
|
+
margin: 20px auto;
|
3
|
+
width: 100%;
|
4
|
+
background: #eee;
|
5
|
+
|
6
|
+
td, th {
|
7
|
+
padding: 8px;
|
8
|
+
text-align: left;
|
9
|
+
}
|
10
|
+
|
11
|
+
td {
|
12
|
+
a {
|
13
|
+
font-weight: 200;
|
14
|
+
color: #333;
|
15
|
+
display: block;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
th {
|
20
|
+
background: #777;
|
21
|
+
color: #fff;
|
22
|
+
font-size: 13px;
|
23
|
+
text-transform: uppercase;
|
24
|
+
}
|
25
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_dependency "remetric/application_controller"
|
2
|
+
|
3
|
+
module Remetric
|
4
|
+
class EventsController < ApplicationController
|
5
|
+
before_action :set_event, only: [:show]
|
6
|
+
|
7
|
+
# GET /events
|
8
|
+
def index
|
9
|
+
@events = Event.all
|
10
|
+
@events = Event.where(description: params[:description]) if params[:description]
|
11
|
+
@descriptions = @events.group_by(&:description).sort_by{|k, v| v.count}.reverse.to_a
|
12
|
+
end
|
13
|
+
|
14
|
+
# POST /events
|
15
|
+
def create
|
16
|
+
@event = Event.new(event_params)
|
17
|
+
|
18
|
+
if @event.save
|
19
|
+
redirect_to @event, notice: 'Event was successfully created.'
|
20
|
+
else
|
21
|
+
render :new
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# DELETE /events/1
|
26
|
+
def destroy
|
27
|
+
@events = Event.delete_all if params[:confirm]
|
28
|
+
redirect_to :back, notice: 'Event was successfully destroyed.'
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
# Use callbacks to share common setup or constraints between actions.
|
33
|
+
def set_event
|
34
|
+
@event = Event.find(params[:id])
|
35
|
+
end
|
36
|
+
|
37
|
+
# Only allow a trusted parameter "white list" through.
|
38
|
+
def event_params
|
39
|
+
params[:event]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require_dependency "remetric/application_controller"
|
2
|
+
|
3
|
+
module Remetric
|
4
|
+
class TrackablesController < ApplicationController
|
5
|
+
before_filter :set_model
|
6
|
+
before_action :set_trackable, only: [:show, :edit, :update]
|
7
|
+
|
8
|
+
# GET /trackables
|
9
|
+
def index
|
10
|
+
@cols = Remetric.config.trackable_models[@model.to_sym].except(:key).map { |k, v| k.to_s }
|
11
|
+
@trackables = Trackable
|
12
|
+
@trackables = @trackables.where(model: @model)
|
13
|
+
|
14
|
+
cookies["#{@model}_q"] = params[:q] if params[:q]
|
15
|
+
@q = cookies["#{@model}_q"]
|
16
|
+
|
17
|
+
unless @q.blank?
|
18
|
+
q = Regexp.new @q, i: true
|
19
|
+
any_ofs = []
|
20
|
+
|
21
|
+
@cols.each do |col|
|
22
|
+
if col == "id"
|
23
|
+
any_ofs.push({ "key" => q })
|
24
|
+
else
|
25
|
+
any_ofs.push({ "data.#{col}" => q })
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
@trackables = @trackables.any_of(any_ofs)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# GET /trackables/1
|
34
|
+
def show
|
35
|
+
end
|
36
|
+
|
37
|
+
# GET /trackables/new
|
38
|
+
def new
|
39
|
+
@trackable = Trackable.new
|
40
|
+
end
|
41
|
+
|
42
|
+
# GET /trackables/1/edit
|
43
|
+
def edit
|
44
|
+
end
|
45
|
+
|
46
|
+
# POST /trackables
|
47
|
+
def create
|
48
|
+
@trackable = Trackable.new(trackable_params)
|
49
|
+
|
50
|
+
if @trackable.save
|
51
|
+
redirect_to @trackable, notice: 'Trackable was successfully created.'
|
52
|
+
else
|
53
|
+
render :new
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# PATCH/PUT /trackables/1
|
58
|
+
def update
|
59
|
+
if @trackable.update(trackable_params)
|
60
|
+
redirect_to @trackable, notice: 'Trackable was successfully updated.'
|
61
|
+
else
|
62
|
+
render :edit
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# DELETE /trackables/1
|
67
|
+
def destroy
|
68
|
+
Trackable.where(model: @model).delete_all if params[:confirm]
|
69
|
+
redirect_to :back, notice: "#{@model.pluralize.capitalize} were successfully destroyed."
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
# Use callbacks to share common setup or constraints between actions.
|
74
|
+
def set_trackable
|
75
|
+
@trackable = Trackable.where(model: @model, key: params[:key]).first
|
76
|
+
end
|
77
|
+
|
78
|
+
# Only allow a trusted parameter "white list" through.
|
79
|
+
def trackable_params
|
80
|
+
params[:trackable]
|
81
|
+
end
|
82
|
+
|
83
|
+
def set_model
|
84
|
+
@model = params[:collection].downcase.singularize
|
85
|
+
|
86
|
+
if !@trackable_models.include? @model
|
87
|
+
redirect_to root_path, notice: "#{params[:collection].capitalize} do not exist. To track them, update your Remetric config."
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Remetric
|
2
|
+
class Event
|
3
|
+
include Mongoid::Document
|
4
|
+
include Mongoid::Timestamps
|
5
|
+
include Mongoid::Attributes::Dynamic
|
6
|
+
|
7
|
+
field :description
|
8
|
+
|
9
|
+
validates_presence_of :description
|
10
|
+
|
11
|
+
before_create :attach_trackable_models
|
12
|
+
|
13
|
+
def story
|
14
|
+
Liquid::Template.parse(description).render(attributes)
|
15
|
+
end
|
16
|
+
|
17
|
+
def linked_story
|
18
|
+
d = attributes
|
19
|
+
|
20
|
+
Remetric.config.trackable_models.each do |model, cols|
|
21
|
+
model = model.to_s
|
22
|
+
|
23
|
+
if self.has_attribute? model
|
24
|
+
key = d[model]["id"]
|
25
|
+
|
26
|
+
# if Trackable.where(model: model, key: key.to_s).first
|
27
|
+
linked_model_attributes = {}
|
28
|
+
self.send(model).map { |k, v| linked_model_attributes[k] = "<a href=\"#{Engine.routes.url_helpers.trackable_path(model.pluralize, key)}\">#{v}</a>" }
|
29
|
+
d.delete model
|
30
|
+
d[model] = linked_model_attributes
|
31
|
+
# end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Liquid::Template.parse(description).render(d)
|
36
|
+
end
|
37
|
+
|
38
|
+
def attach_trackable_models
|
39
|
+
Remetric.config.trackable_models.each do |model, cols|
|
40
|
+
model = model.to_s
|
41
|
+
|
42
|
+
if self.has_attribute? model
|
43
|
+
args = self.send(model)
|
44
|
+
args = args.attributes if args.class.ancestors.include? ActiveRecord::Base
|
45
|
+
args = args.with_indifferent_access
|
46
|
+
key_field = cols[:key]
|
47
|
+
key_field = :id if key_field.blank?
|
48
|
+
key = args[key_field].to_s.parameterize
|
49
|
+
t = Trackable.where(key: key, model: model).first_or_initialize
|
50
|
+
t.data ||= {}
|
51
|
+
t.data = t.data.merge(args)
|
52
|
+
|
53
|
+
if t.save
|
54
|
+
self[model] = t.data
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Remetric
|
2
|
+
class Trackable
|
3
|
+
include Mongoid::Document
|
4
|
+
include Mongoid::Timestamps
|
5
|
+
|
6
|
+
field :model
|
7
|
+
field :key
|
8
|
+
field :data, type: Hash
|
9
|
+
|
10
|
+
index({ key: 1 }, { unique: true, name: "trackable_key_index" })
|
11
|
+
|
12
|
+
validates_presence_of :model
|
13
|
+
validates_presence_of :key
|
14
|
+
validates_uniqueness_of :key, scope: :model
|
15
|
+
|
16
|
+
def self.matchers
|
17
|
+
[
|
18
|
+
["contains", "ilike"],
|
19
|
+
["is exactly", "="],
|
20
|
+
["is not", "!="],
|
21
|
+
["greater than", ">"],
|
22
|
+
["greater than or equal to", ">="],
|
23
|
+
["less than", "<"],
|
24
|
+
["less than or equal to", "<="],
|
25
|
+
["exists", "exists"],
|
26
|
+
["does not exist", "does not exist"]
|
27
|
+
]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Remetric</title>
|
5
|
+
<%= stylesheet_link_tag "remetric/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "remetric/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= render "nav", placeholder: false %>
|
12
|
+
<%= render "nav", placeholder: true %>
|
13
|
+
|
14
|
+
<div class="wide_container">
|
15
|
+
<% if notice %>
|
16
|
+
<p><%= notice %></p>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<div id="yield">
|
20
|
+
<%= yield %>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<%= render "footer" %>
|
25
|
+
|
26
|
+
<div id="dialog_overlay"></div>
|
27
|
+
|
28
|
+
</body>
|
29
|
+
</html>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<div id="footer">
|
2
|
+
<div class="wide_container">
|
3
|
+
<p class="float_right">
|
4
|
+
<%= link_to "Remetric<b>HD</b>: $750/yr".html_safe, "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UPE2M95QCEET6" %>
|
5
|
+
</p>
|
6
|
+
|
7
|
+
<p class="float_left">
|
8
|
+
<%= Time.zone.now.strftime("%a, %b %-d - %k:%M:%S %Z") %>
|
9
|
+
</p>
|
10
|
+
|
11
|
+
<p class="align_center">
|
12
|
+
<%= link_to "Remetric v#{Remetric::VERSION}", "https://github.com/dallas22ca/remetric" %>
|
13
|
+
</p>
|
14
|
+
|
15
|
+
<div class="clear"></div>
|
16
|
+
</div>
|
17
|
+
</div>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<div class="topbar<%= " topbar_placeholder" if placeholder %>">
|
2
|
+
<div class="wide_container">
|
3
|
+
|
4
|
+
<%= link_to image_tag("remetric/logo.png"), root_path, id: "logo" %>
|
5
|
+
<%= link_to image_tag("remetric/loading_logo.gif"), root_path, id: "loading_logo" %>
|
6
|
+
|
7
|
+
<ul class="nav">
|
8
|
+
<li><%= link_to "Dashboard", root_path, class: "#{"selected" if request.path == root_path}" %></li>
|
9
|
+
<li><%= link_to "Events", events_path, class: "#{"selected" if request.path == events_path}" %></li>
|
10
|
+
|
11
|
+
<% @trackable_models.each do |model| %>
|
12
|
+
<li><%= link_to model.pluralize.capitalize, trackables_path(model.downcase.pluralize), class: "#{"selected" if request.path == trackables_path(model.downcase.pluralize)}" %>
|
13
|
+
<% end %>
|
14
|
+
|
15
|
+
<li><%= link_to "Settings", settings_path, class: "#{"selected" if request.path == settings_path}" %></li>
|
16
|
+
</ul>
|
17
|
+
|
18
|
+
<div class="clear"></div>
|
19
|
+
|
20
|
+
</div>
|
21
|
+
</div>
|