TokiCLI 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d881a874cdf17efa2db5ad24c0ab808d5a89fc7
4
- data.tar.gz: 118745d1d2ee3ab2e4108115303f99fc507ed1c1
3
+ metadata.gz: 1db92272981801ffe206b7deb7b686bd194ceded
4
+ data.tar.gz: 0b556e5a4319091462a8eda7b8602e4a9d2779ae
5
5
  SHA512:
6
- metadata.gz: 6ea00b551307a61234ffed4f78fcbbd8bb355e5831a88903107eadcf7e3ead7281b2f225dc5e173d2a60c243ac2a392c72776803e0d800bc382c60687d129ff1
7
- data.tar.gz: d9d1c10fa33308227dbcb96e5ebbb497dc50f2d88a1338765d6c8ccd6bda7ece83b872b3631555e2597e00fb02bc3662c725ccc616abcc28358dd07127895207
6
+ metadata.gz: 3ca756456fc395d8e76fab04291802be0665183b50c2fb7e752690cff6c2f0f6268fd3e28e7eeb59f9933d39a5fa12ba93b2f4e68186a330c773ac4f0186c277
7
+ data.tar.gz: ebf7afa8a4f1fd14e66015050095c58854a8ff3c8e7f7c2dc96b73aaa888559de042f746c8f16590adaee68b7a868570b334ae7bcfcd9518b2612e87f6598d96
@@ -0,0 +1 @@
1
+ 2.2.0
@@ -1,3 +1,19 @@
1
1
  language: ruby
2
+ cache: bundler
3
+
2
4
  rvm:
3
- - 2.1.2
5
+ - "2.1.0"
6
+ - "2.0.0"
7
+
8
+ script: 'bundle exec rake spec'
9
+
10
+ branches:
11
+ only:
12
+ - master
13
+
14
+ notifications:
15
+ email:
16
+ - ericdejonckheere@gmail.com
17
+
18
+ before_install:
19
+ - gem install CFPropertyList -v '2.2.8'
@@ -1,3 +1,7 @@
1
+ # 0.3.1
2
+
3
+ - Column width
4
+
1
5
  # 0.3.0
2
6
 
3
7
  - Complete refactoring
data/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ [![Gem Version](https://badge.fury.io/rb/TokiCLI.svg)](http://badge.fury.io/rb/TokiCLI)
2
+
3
+ [![Build Status](https://travis-ci.org/ericdke/TokiCLI.svg?branch=master)](https://github.com/ericdke/TokiCLI)
4
+
5
+
1
6
  # TokiCLI
2
7
 
3
8
  Toki.app command-line client and API server.
@@ -6,6 +11,17 @@ Access your Toki data from the local database or from the App.net backup channel
6
11
 
7
12
  ![TokiServer example](https://www.evernote.com/shard/s89/sh/dd392b00-82b6-4f13-b573-c925a99ae5a0/02aa5ea4266e8bc7e28d7c91ba8b922c/deep/0/toki-server.png)
8
13
 
14
+ ---
15
+
16
+ **UPDATE**
17
+
18
+ Toki.app will cease to function when App.net will shut down their servers on 2017/03/14.
19
+
20
+ TokiCLI will continue to function but will then be irrelevant as there will not be anything to track anymore via Toki.app (and TokiCLI's App.net-related will also cease to function, of course).
21
+
22
+ You will still be able to read and analyse your existing data with TokiCLI.
23
+
24
+ ---
9
25
 
10
26
  ## Installation
11
27
 
@@ -222,11 +238,9 @@ You can also use the TokiCLI API in another app:
222
238
 
223
239
  ### Basic
224
240
 
225
- Create a basic TokiCLI API instance:
226
-
227
- `toki = TokiCLI::TokiAPI.new("#{~/Library/path/to/tokiapp/db}")`
241
+ Create a basic TokiCLI API instance without referencing bundles:
228
242
 
229
- *That's the format used by the test suite.*
243
+ `toki = TokiCLI::TokiAPI.new("#{~/Library/path/to/tokiapp/db}", {})`
230
244
 
231
245
  ### With apps names
232
246
 
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
+ spec.required_ruby_version = '< 2.2.0'
20
21
 
21
22
  spec.add_dependency "thor", "~> 0.18"
22
23
  spec.add_dependency "rest-client", "~> 1.6"
@@ -28,7 +29,7 @@ Gem::Specification.new do |spec|
28
29
  spec.add_dependency 'sinatra-assetpack', "~> 0.3", '>= 0.3.2'
29
30
  spec.add_dependency "sinatra-contrib", '~> 1.4', '>= 1.4.2'
30
31
 
31
- spec.add_development_dependency "bundler", "~> 1.7"
32
+ spec.add_development_dependency "bundler", "~> 1.5"
32
33
  spec.add_development_dependency "rake", "~> 10.0"
33
34
  spec.add_development_dependency "rspec", "~> 3.0"
34
35
  spec.add_development_dependency "coveralls"
@@ -3,7 +3,7 @@ module TokiCLI
3
3
  class FileOps
4
4
 
5
5
  require 'fileutils'
6
- require 'CFPropertyList'
6
+ require 'cfpropertylist'
7
7
  require 'yaml'
8
8
 
9
9
  attr_accessor :home_path, :toki_path, :db_path, :db_file, :bundles_file, :bundles, :config_file, :config_path, :config, :data_path, :files_path, :user_file, :log_path
@@ -1,3 +1,3 @@
1
1
  module TokiCLI
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -8,7 +8,7 @@ module TokiCLI
8
8
 
9
9
  def initialize settings = {}
10
10
  @settings = if settings.empty?
11
- {"table"=>{"width"=>90}} # force default if no initialization
11
+ {"table"=>{"width"=>120}} # force default if no initialization
12
12
  else
13
13
  settings
14
14
  end
@@ -146,7 +146,7 @@ module TokiCLI
146
146
 
147
147
  def app_row_with_name(obj)
148
148
  max = @settings['table']['width'] / 3
149
- [width(max + 5, obj['bundle']), width(max - 5, obj['name']), readable_time(obj['total']['time'])]
149
+ [width(max + 5, obj['bundle']), width(max - 10, obj['name']), readable_time(obj['total']['time'])]
150
150
  end
151
151
 
152
152
  def app_row(obj)
@@ -2,9 +2,18 @@ require 'spec_helper'
2
2
 
3
3
  describe TokiCLI do
4
4
 
5
+ class Fake
6
+ attr_accessor :home_path, :toki_path, :db_path, :db_file, :bundles_file, :bundles, :config_file, :config_path, :config, :data_path, :files_path, :user_file, :log_path
7
+ def db_file
8
+ 'spec/mock/mock.sqlite3'
9
+ end
10
+ def config
11
+ {}
12
+ end
13
+ end
14
+
5
15
  before do
6
- TokiCLI::FileOps.any_instance.stub(:db_file).and_return('spec/mock/mock.sqlite3')
7
- TokiCLI::FileOps.any_instance.stub(:bundles).and_return(nil)
16
+ TokiCLI::FileOps.stub(:new).and_return(Fake.new)
8
17
  end
9
18
 
10
19
  describe "#version" do
@@ -92,7 +101,7 @@ describe TokiCLI do
92
101
  printed = capture_stdout do
93
102
  TokiCLI::App.start(['activity', '--day', '2014-09-14'])
94
103
  end
95
- expect(printed).to include *['com.apple.finder | 02:00:00 | 00m 04s | 3009986780794979448', 'com.apple.Safari | 17:00:00 | 02m 02s | 279578532860092796', 'com.apple.finder | 23:30:00 | 01m 37s | 5321635596015812810']
104
+ expect(printed).to include *['3009986780794979448', '279578532860092796', '5321635596015812810']
96
105
  end
97
106
  end
98
107
 
@@ -101,7 +110,7 @@ describe TokiCLI do
101
110
  printed = capture_stdout do
102
111
  TokiCLI::App.start(['activity', '--since', '2014-09-14'])
103
112
  end
104
- expect(printed).to include *['com.apple.finder | 02:00:00 | 00m 04s | 3009986780794979448', 'com.apple.Safari | 17:00:00 | 02m 02s | 279578532860092796', 'com.apple.finder | 23:30:00 | 01m 37s | 5321635596015812810', 'com.apple.finder | 08:15:00 | 00m 29s | 2450616761580369798', 'com.apple.Safari | 15:00:00 | 00m 06s | 7557789946794681026']
113
+ expect(printed).to include *['3009986780794979448', '279578532860092796', '5321635596015812810', '2450616761580369798', '7557789946794681026']
105
114
  end
106
115
  end
107
116
 
@@ -110,7 +119,7 @@ describe TokiCLI do
110
119
  printed = capture_stdout do
111
120
  TokiCLI::App.start(['bundle', 'com.apple.iTunes'])
112
121
  end
113
- expect(printed).to include *['2014-04-13', '16:45:00 | 01m 02s | 93837223385103975', '2014-04-14', '09:15:00 | 00m 18s | 9048025340952260608', '12:30:00 | 00m 27s | 8045504996000693405', 'Total: 3h 52m 32s']
122
+ expect(printed).to include *['93837223385103975', '9048025340952260608', '8045504996000693405']
114
123
  end
115
124
  end
116
125
 
@@ -265,8 +274,8 @@ describe TokiCLI::TokiAPI do
265
274
  expect(resp['meta']['code']).to eq 200
266
275
  expect(resp['meta']['request']['command']).to eq 'bundle_log'
267
276
  expect(resp['data'].size).to eq 1397
268
- expect(resp['data']['6853206097451538432'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-04-12 15:15:00 +0200"], ["duration", {"seconds"=>10, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>10}}]]
269
- expect(resp['data']['8223841650221385607'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-09-15 10:45:00 +0200"], ["duration", {"seconds"=>70, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>10}}]]
277
+ expect(resp['data']['6853206097451538432'].to_a).to include *[["bundle", "com.apple.finder"], ["name", nil], ["duration", {"seconds"=>10, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>10}}]]
278
+ expect(resp['data']['8223841650221385607'].to_a).to include *[["bundle", "com.apple.finder"], ["name", nil], ["duration", {"seconds"=>70, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>10}}]]
270
279
  end
271
280
  end
272
281
 
@@ -277,8 +286,8 @@ describe TokiCLI::TokiAPI do
277
286
  expect(resp['meta']['code']).to eq 200
278
287
  expect(resp['meta']['request']['command']).to eq 'bundle_log_since'
279
288
  expect(resp['data'].size).to eq 131
280
- expect(resp['data']['3343489613556420396'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-09-01 08:45:00 +0200"], ["duration", {"seconds"=>15, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>15}}]]
281
- expect(resp['data']['8223841650221385607'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-09-15 10:45:00 +0200"], ["duration", {"seconds"=>70, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>10}}]]
289
+ expect(resp['data']['3343489613556420396'].to_a).to include *[["bundle", "com.apple.finder"], ["name", nil], ["duration", {"seconds"=>15, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>15}}]]
290
+ expect(resp['data']['8223841650221385607'].to_a).to include *[["bundle", "com.apple.finder"], ["name", nil], ["duration", {"seconds"=>70, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>10}}]]
282
291
  end
283
292
  end
284
293
 
@@ -290,8 +299,8 @@ describe TokiCLI::TokiAPI do
290
299
  expect(resp['meta']['request']['command']).to eq 'bundle_log_before'
291
300
  expect(resp['data'].size).to eq 1266
292
301
  arr = resp['data'].to_a
293
- expect(arr.first).to eq ["6853206097451538432", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-04-12 15:15:00 +0200", "duration"=>{"seconds"=>10, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>10}}}]
294
- expect(arr.last).to eq ["3110227595022506229", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-08-31 23:00:00 +0200", "duration"=>{"seconds"=>30, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>30}}}]
302
+ expect(arr.first).to include "6853206097451538432"
303
+ expect(arr.last).to include "3110227595022506229"
295
304
  end
296
305
  end
297
306
 
@@ -303,8 +312,8 @@ describe TokiCLI::TokiAPI do
303
312
  expect(resp['meta']['request']['command']).to eq 'bundle_log_range'
304
313
  expect(resp['data'].size).to eq 26
305
314
  arr = resp['data'].to_a
306
- expect(arr.first).to eq ["3343489613556420396", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-01 08:45:00 +0200", "duration"=>{"seconds"=>15, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>15}}}]
307
- expect(arr.last).to eq ["249678006045203865", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-03 21:30:00 +0200", "duration"=>{"seconds"=>16, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>16}}}]
315
+ expect(arr.first).to include "3343489613556420396"
316
+ expect(arr.last).to include "249678006045203865"
308
317
  end
309
318
  end
310
319
 
@@ -317,8 +326,8 @@ describe TokiCLI::TokiAPI do
317
326
  expect(resp['meta']['request']['args']).to eq ["com.apple.finder", "2014-09-01", "2014-09-02"]
318
327
  expect(resp['data'].size).to eq 13
319
328
  arr = resp['data'].to_a
320
- expect(arr.first).to eq ["3343489613556420396", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-01 08:45:00 +0200", "duration"=>{"seconds"=>15, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>15}}}]
321
- expect(arr.last).to eq ["8777542996540152763", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-01 21:45:00 +0200", "duration"=>{"seconds"=>61, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>1}}}]
329
+ expect(arr.first).to include "3343489613556420396"
330
+ expect(arr.last).to include "8777542996540152763"
322
331
  end
323
332
  end
324
333
 
@@ -331,8 +340,8 @@ describe TokiCLI::TokiAPI do
331
340
  expect(resp['meta']['request']['args']).to eq ["2014-09-13"]
332
341
  expect(resp['data'].size).to eq 87
333
342
  arr = resp['data'].to_a
334
- expect(arr.first).to eq ["1226267152535471391", {"bundle"=>"com.apple.appstore", "name"=>nil, "start"=>"2014-09-13 10:15:00 +0200", "duration"=>{"seconds"=>3, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>3}}}]
335
- expect(arr.last).to eq ["7557789946794681026", {"bundle"=>"com.apple.Safari", "name"=>nil, "start"=>"2014-09-15 15:00:00 +0200", "duration"=>{"seconds"=>6, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>6}}}]
343
+ expect(arr.first).to include "1226267152535471391"
344
+ expect(arr.last).to include "7557789946794681026"
336
345
  end
337
346
  end
338
347
 
@@ -345,10 +354,83 @@ describe TokiCLI::TokiAPI do
345
354
  expect(resp['meta']['request']['args']).to eq ["2014-09-13"]
346
355
  expect(resp['data'].size).to eq 17
347
356
  arr = resp['data'].to_a
348
- expect(arr.first).to eq ["6362298701774470696", {"bundle"=>"com.apple.Safari", "name"=>nil, "start"=>"2014-09-13 10:15:00 +0200", "duration"=>{"seconds"=>54, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>54}}}]
349
- expect(arr.last).to eq ["2496889557830869773", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-13 19:00:00 +0200", "duration"=>{"seconds"=>297, "time"=>{"hours"=>0, "minutes"=>4, "seconds"=>57}}}]
357
+ expect(arr.first).to include "6362298701774470696"
358
+ expect(arr.last).to include "2496889557830869773"
350
359
  end
351
360
  end
352
361
 
362
+ end
363
+
364
+ describe TokiCLI::Helpers do
365
+
366
+ let(:helpers) { TokiCLI::Helpers.new }
367
+
368
+ describe "#sec_to_time" do
369
+ it "converts unix time in a hash of hours/minutes/seconds" do
370
+ result = helpers.sec_to_time(12345)
371
+ expect(result['hours']).to eq 3
372
+ expect(result['minutes']).to eq 25
373
+ expect(result['seconds']).to eq 45
374
+ end
375
+ end
376
+
377
+ describe "#epoch_to_date" do
378
+ it "converts unix date to iso time" do
379
+ result = helpers.epoch_to_date(1411075048)
380
+ expect(result.to_s).to include '2014-09-18'
381
+ end
382
+ end
383
+
384
+ describe "#check_date_validity" do
385
+ it "converts a string to a date object" do
386
+ result = helpers.check_date_validity('2014-09-18')
387
+ expect(result.iso8601[0..9]).to eq '2014-09-18'
388
+ end
389
+ it "returns false if string is incorrect" do
390
+ result = helpers.check_date_validity('yolo')
391
+ expect(result).to be false
392
+ end
393
+ end
394
+
395
+ describe "#readable_time" do
396
+ it "converts a hash of hours/minutes/seconds to a string" do
397
+ result = helpers.readable_time({'hours' => 12, 'minutes' => 33, 'seconds' => 7})
398
+ expect(result).to eq '12h 33m 07s'
399
+ end
400
+ end
401
+
402
+ describe "#readable_time_log" do
403
+ it "converts a hash of hours/minutes/seconds to a string" do
404
+ result = helpers.readable_time_log({'hours' => 12, 'minutes' => 33, 'seconds' => 7})
405
+ expect(result).to eq '33m 07s'
406
+ end
407
+ end
408
+
409
+ describe "#calc_apps_total" do
410
+ it "sums the number of seconds in each object" do
411
+ result = helpers.calc_apps_total([{'total' => {'seconds' => 7}}, {'total' => {'seconds' => 10}}])
412
+ expect(result).to eq 17
413
+ end
414
+ end
415
+
416
+ describe "#calc_logs_total" do
417
+ it "sums the number of seconds in each object" do
418
+ result = helpers.calc_logs_total(
419
+ {
420
+ 1 => {
421
+ 'duration' => {
422
+ 'seconds' => 7
423
+ }
424
+ },
425
+ 2 => {
426
+ 'duration' => {
427
+ 'seconds' => 10
428
+ }
429
+ }
430
+ }
431
+ )
432
+ expect(result).to eq 17
433
+ end
434
+ end
353
435
 
354
436
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: TokiCLI
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Dejonckheere
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-18 00:00:00.000000000 Z
11
+ date: 2017-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -160,14 +160,14 @@ dependencies:
160
160
  requirements:
161
161
  - - "~>"
162
162
  - !ruby/object:Gem::Version
163
- version: '1.7'
163
+ version: '1.5'
164
164
  type: :development
165
165
  prerelease: false
166
166
  version_requirements: !ruby/object:Gem::Requirement
167
167
  requirements:
168
168
  - - "~>"
169
169
  - !ruby/object:Gem::Version
170
- version: '1.7'
170
+ version: '1.5'
171
171
  - !ruby/object:Gem::Dependency
172
172
  name: rake
173
173
  requirement: !ruby/object:Gem::Requirement
@@ -224,6 +224,7 @@ files:
224
224
  - ".coveralls.yml"
225
225
  - ".gitignore"
226
226
  - ".rspec"
227
+ - ".ruby-version"
227
228
  - ".travis.yml"
228
229
  - CHANGELOG.md
229
230
  - Gemfile
@@ -614,9 +615,9 @@ require_paths:
614
615
  - lib
615
616
  required_ruby_version: !ruby/object:Gem::Requirement
616
617
  requirements:
617
- - - ">="
618
+ - - "<"
618
619
  - !ruby/object:Gem::Version
619
- version: '0'
620
+ version: 2.2.0
620
621
  required_rubygems_version: !ruby/object:Gem::Requirement
621
622
  requirements:
622
623
  - - ">="
@@ -624,7 +625,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
624
625
  version: '0'
625
626
  requirements: []
626
627
  rubyforge_project:
627
- rubygems_version: 2.4.1
628
+ rubygems_version: 2.4.5
628
629
  signing_key:
629
630
  specification_version: 4
630
631
  summary: Toki.app command-line client and API server