everlog 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/Guardfile +8 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/everlog.gemspec +33 -0
- data/lib/everlog.rb +42 -0
- data/lib/everlog/app.rb +15 -0
- data/lib/everlog/app/animetick.rb +14 -0
- data/lib/everlog/app/evernote.rb +9 -0
- data/lib/everlog/app/github.rb +9 -0
- data/lib/everlog/app/hatena.rb +13 -0
- data/lib/everlog/app/moves.rb +9 -0
- data/lib/everlog/app/twitter.rb +11 -0
- data/lib/everlog/app/weather.rb +9 -0
- data/lib/everlog/dom.rb +9 -0
- data/lib/everlog/dom/entity.rb +11 -0
- data/lib/everlog/dom/entity/config.rb +30 -0
- data/lib/everlog/dom/entity/content.erb +170 -0
- data/lib/everlog/dom/entity/content.rb +14 -0
- data/lib/everlog/dom/module.rb +6 -0
- data/lib/everlog/dom/module/github.rb +28 -0
- data/lib/everlog/dom/module/moves.rb +26 -0
- data/lib/everlog/dom/repository.rb +5 -0
- data/lib/everlog/dom/repository/evernote.rb +24 -0
- data/lib/everlog/dom/service.rb +5 -0
- data/lib/everlog/dom/service/nullobject.rb +18 -0
- data/lib/everlog/dom/value.rb +18 -0
- data/lib/everlog/dom/value/animetick.rb +25 -0
- data/lib/everlog/dom/value/github.rb +6 -0
- data/lib/everlog/dom/value/github/activity.rb +18 -0
- data/lib/everlog/dom/value/github/commit.rb +13 -0
- data/lib/everlog/dom/value/hatena.rb +20 -0
- data/lib/everlog/dom/value/moves.rb +16 -0
- data/lib/everlog/dom/value/moves/move.rb +31 -0
- data/lib/everlog/dom/value/moves/place.rb +13 -0
- data/lib/everlog/dom/value/moves/referer.rb +10 -0
- data/lib/everlog/dom/value/moves/referer/move.rb +7 -0
- data/lib/everlog/dom/value/moves/referer/place.rb +8 -0
- data/lib/everlog/dom/value/moves/summary.rb +30 -0
- data/lib/everlog/dom/value/twitter.rb +13 -0
- data/lib/everlog/dom/value/weather.rb +31 -0
- data/lib/everlog/inf.rb +5 -0
- data/lib/everlog/inf/api.rb +20 -0
- data/lib/everlog/inf/api/animetick.rb +25 -0
- data/lib/everlog/inf/api/evernote.rb +37 -0
- data/lib/everlog/inf/api/github.rb +26 -0
- data/lib/everlog/inf/api/googlemap.rb +15 -0
- data/lib/everlog/inf/api/hatena.rb +20 -0
- data/lib/everlog/inf/api/moves.rb +21 -0
- data/lib/everlog/inf/api/twitter.rb +26 -0
- data/lib/everlog/inf/api/wunderground.rb +15 -0
- data/lib/everlog/version.rb +3 -0
- data/spec/fixtures/animetick/list_ticket_response.json +1 -0
- data/spec/fixtures/hatena/feed_response.json +80 -0
- data/spec/fixtures/moves/daily_storyline_response.json +319 -0
- data/spec/fixtures/moves/daily_summary_response.json +29 -0
- data/spec/fixtures/moves/sample_for_erb.json +29 -0
- data/spec/fixtures/wunderground/yesterday_response.json +1 -0
- data/spec/lifelog/app/animetick_spec.rb +13 -0
- data/spec/lifelog/app/evernote_spec.rb +14 -0
- data/spec/lifelog/app/github_spec.rb +22 -0
- data/spec/lifelog/app/hatena_spec.rb +35 -0
- data/spec/lifelog/app/moves_spec.rb +9 -0
- data/spec/lifelog/app/twitter_spec.rb +33 -0
- data/spec/lifelog/app/weather_spec.rb +11 -0
- data/spec/lifelog/dom/entity/config_spec.rb +22 -0
- data/spec/lifelog/dom/entity/content_spec.rb +23 -0
- data/spec/lifelog/dom/module/github_spec.rb +60 -0
- data/spec/lifelog/dom/module/moves_spec.rb +37 -0
- data/spec/lifelog/dom/repository/evernote_spec.rb +26 -0
- data/spec/lifelog/dom/service/nullobject_spec.rb +19 -0
- data/spec/lifelog/dom/value/animetick_spec.rb +49 -0
- data/spec/lifelog/dom/value/github/activity_spec.rb +25 -0
- data/spec/lifelog/dom/value/github/commit_spec.rb +23 -0
- data/spec/lifelog/dom/value/hatena_spec.rb +23 -0
- data/spec/lifelog/dom/value/moves/move_spec.rb +45 -0
- data/spec/lifelog/dom/value/moves/place_spec.rb +18 -0
- data/spec/lifelog/dom/value/moves/referer/move_spec.rb +18 -0
- data/spec/lifelog/dom/value/moves/referer/place_spec.rb +17 -0
- data/spec/lifelog/dom/value/moves/summary_spec.rb +64 -0
- data/spec/lifelog/dom/value/twitter_spec.rb +23 -0
- data/spec/lifelog/dom/value/weather_spec.rb +43 -0
- data/spec/lifelog/inf/api/animetick_spec.rb +22 -0
- data/spec/lifelog/inf/api/evernote_spec.rb +49 -0
- data/spec/lifelog/inf/api/github_spec.rb +36 -0
- data/spec/lifelog/inf/api/googlemap_spec.rb +9 -0
- data/spec/lifelog/inf/api/hatena_spec.rb +23 -0
- data/spec/lifelog/inf/api/moves_spec.rb +13 -0
- data/spec/lifelog/inf/api/twitter_spec.rb +23 -0
- data/spec/lifelog/inf/api/wunderground_spec.rb +11 -0
- data/spec/spec_helper.rb +8 -0
- metadata +345 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Entity::Content < Dom::Entity
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
def push(name, value)
|
6
|
+
instance_variable_set("@#{name}", value)
|
7
|
+
end
|
8
|
+
|
9
|
+
def render
|
10
|
+
template = File.open(File.dirname(__FILE__) + '/content.erb').read.delete("\n")
|
11
|
+
ERB.new(template).result(binding)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Module::Github
|
3
|
+
|
4
|
+
def initialize api_config
|
5
|
+
@api_config = api_config
|
6
|
+
end
|
7
|
+
|
8
|
+
def api_client
|
9
|
+
@api_client ||= Inf::Api::Github.new(@api_config)
|
10
|
+
end
|
11
|
+
|
12
|
+
def repo_names
|
13
|
+
api_client.repos.map { |r| r.full_name }
|
14
|
+
end
|
15
|
+
|
16
|
+
def repo_activity(repo_name, date)
|
17
|
+
repo_commits = commits(repo_name.sub(/.*\//, ''), date)
|
18
|
+
return nil if repo_commits.nil?
|
19
|
+
Dom::Value::Github::Repository_Activity.new(repo_name, repo_commits)
|
20
|
+
end
|
21
|
+
|
22
|
+
def commits(repo, date)
|
23
|
+
response = api_client.commits_on(repo, date)
|
24
|
+
return nil if response.empty?
|
25
|
+
response.map { |r| Dom::Value::Github::Commit.new(r) }.reverse
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Module::Moves
|
3
|
+
def initialize config
|
4
|
+
@config = config
|
5
|
+
end
|
6
|
+
|
7
|
+
def moves_api
|
8
|
+
@moves_api ||= Inf::Api::Moves.new(@config)
|
9
|
+
end
|
10
|
+
|
11
|
+
def storyline
|
12
|
+
moves_api.daily_storyline.map do |story|
|
13
|
+
case story['type']
|
14
|
+
when 'place'
|
15
|
+
Dom::Value::Moves::Referer::Place.new story
|
16
|
+
when 'move'
|
17
|
+
Dom::Value::Moves::Referer::Move.new story
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def summary
|
23
|
+
Dom::Value::Moves::Summary.new(moves_api.daily_summary)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Repository::Evernote < Dom::Repository
|
3
|
+
TARGET = 'lifelog'
|
4
|
+
|
5
|
+
def initialize(is_sandbox, config)
|
6
|
+
@is_sandbox = is_sandbox
|
7
|
+
@config = config
|
8
|
+
end
|
9
|
+
|
10
|
+
def api_client
|
11
|
+
@api_client ||= Inf::Api::Evernote.new(@is_sandbox, @config)
|
12
|
+
end
|
13
|
+
|
14
|
+
def save(title, content)
|
15
|
+
api_client.note.notebookGuid = get_guid_forcibly TARGET
|
16
|
+
api_client.post_note(title, content)
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_guid_forcibly notebook_name
|
20
|
+
api_client.notebooks.each {|n| return n.guid if n.name == notebook_name }
|
21
|
+
api_client.create_notebook(notebook_name).guid
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Everlog
|
2
|
+
class NullObject
|
3
|
+
def method_missing(*args, &block)
|
4
|
+
self
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_a; []; end
|
8
|
+
def to_s; ''; end
|
9
|
+
def to_i; 0; end
|
10
|
+
def to_f; 0.0; end
|
11
|
+
end
|
12
|
+
|
13
|
+
module Maybe
|
14
|
+
def maybe value
|
15
|
+
value.nil? ? NullObject.new : value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value
|
3
|
+
require 'everlog/dom/value/twitter'
|
4
|
+
require 'everlog/dom/value/hatena'
|
5
|
+
require 'everlog/dom/value/github'
|
6
|
+
require 'everlog/dom/value/moves'
|
7
|
+
require 'everlog/dom/value/animetick'
|
8
|
+
require 'everlog/dom/value/weather'
|
9
|
+
|
10
|
+
def initialize(response)
|
11
|
+
@response = response
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_to_His date
|
15
|
+
date.sub(/\d{4}-\d{2}-\d{2}\ /, '').match(/\d{2}:\d{2}/).to_s
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value::Animetick < Dom::Value
|
3
|
+
include Maybe
|
4
|
+
|
5
|
+
def title
|
6
|
+
maybe(@response['title']).to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
def sub_title
|
10
|
+
maybe(@response['sub_title']).to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def count
|
14
|
+
maybe(@response['count']).to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
def updated_at
|
18
|
+
DateTime.parse(@response['updated_at']).to_time
|
19
|
+
end
|
20
|
+
|
21
|
+
def updated_at_screen
|
22
|
+
parse_to_His(maybe(@response['updated_at']).to_s)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value::Github::Repository_Activity < Dom::Value::Github
|
3
|
+
include Maybe
|
4
|
+
|
5
|
+
def initialize(repo_name, repo_commits)
|
6
|
+
@repo_name = repo_name
|
7
|
+
@commits = repo_commits
|
8
|
+
end
|
9
|
+
|
10
|
+
def repo_name
|
11
|
+
maybe(@repo_name).to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
def commits
|
15
|
+
maybe(@commits).to_a
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value::Hatena < Dom::Value
|
3
|
+
include Maybe
|
4
|
+
|
5
|
+
def title
|
6
|
+
maybe(@response['title']).to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
def link
|
10
|
+
@response['link'].first['href']
|
11
|
+
end
|
12
|
+
|
13
|
+
def issued
|
14
|
+
row_string = maybe(@response['issued']).to_s
|
15
|
+
DateTime.parse(row_string).to_time
|
16
|
+
rescue ArgumentError
|
17
|
+
Time.parse('00:00:00')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value::Moves < Dom::Value
|
3
|
+
require 'everlog/dom/value/moves/summary'
|
4
|
+
require 'everlog/dom/value/moves/place'
|
5
|
+
require 'everlog/dom/value/moves/move'
|
6
|
+
require 'everlog/dom/value/moves/referer'
|
7
|
+
|
8
|
+
def round_off float
|
9
|
+
"%.1f" % float
|
10
|
+
end
|
11
|
+
|
12
|
+
def km
|
13
|
+
1000
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value::Moves::Move < Dom::Value::Moves
|
3
|
+
include Maybe
|
4
|
+
|
5
|
+
def action
|
6
|
+
maybe(@response['activity']).to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
def duration
|
10
|
+
duration = maybe(@response['duration'])
|
11
|
+
round_off((duration.to_f / 60))
|
12
|
+
end
|
13
|
+
|
14
|
+
def start_time
|
15
|
+
parse_to_His(pick_today(maybe(@response['startTime'].to_s)))
|
16
|
+
end
|
17
|
+
|
18
|
+
def end_time
|
19
|
+
parse_to_His(pick_today(maybe(@response['endTime'].to_s)))
|
20
|
+
end
|
21
|
+
|
22
|
+
def distance
|
23
|
+
maybe(@response['distance']).to_f / km
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def pick_today response
|
28
|
+
DateTime.parse(response).to_time.to_s
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value::Moves::Summary < Dom::Value::Moves
|
3
|
+
include Maybe
|
4
|
+
def initialize response
|
5
|
+
@response = maybe(response)
|
6
|
+
end
|
7
|
+
|
8
|
+
def walk
|
9
|
+
maybe(pick('wlk'))['distance'].to_f / km
|
10
|
+
end
|
11
|
+
|
12
|
+
def cycle
|
13
|
+
maybe(pick('cyc'))['distance'].to_f / km
|
14
|
+
end
|
15
|
+
|
16
|
+
def transport
|
17
|
+
maybe(pick('trp'))['distance'].to_f / km
|
18
|
+
end
|
19
|
+
|
20
|
+
def cal
|
21
|
+
@response.map {|r| maybe(r["calories"]).to_i }.inject(:+)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def pick activity
|
26
|
+
@response.each { |r| return r if r['activity'] == activity }
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Dom::Value::Weather < Dom::Value
|
3
|
+
include Maybe
|
4
|
+
|
5
|
+
def max_temp
|
6
|
+
maybe(tempms.each.max).to_i
|
7
|
+
end
|
8
|
+
|
9
|
+
def min_temp
|
10
|
+
maybe(tempms.each.min).to_i
|
11
|
+
end
|
12
|
+
|
13
|
+
def condition
|
14
|
+
cond = maybe(icons.each.max).to_s
|
15
|
+
cond == 'unknown' ? 'sunny' : cond
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def tempms
|
20
|
+
select_observations { |r| r['tempm'].to_f }
|
21
|
+
end
|
22
|
+
|
23
|
+
def icons
|
24
|
+
select_observations { |r| r['icon'] }
|
25
|
+
end
|
26
|
+
|
27
|
+
def select_observations ¶meter
|
28
|
+
maybe(@response)['observations'].to_a.map { |r| parameter.call(r) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/everlog/inf.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
class Everlog
|
2
|
+
class Inf::Api
|
3
|
+
require 'everlog/inf/api/twitter'
|
4
|
+
require 'everlog/inf/api/hatena'
|
5
|
+
require 'everlog/inf/api/github'
|
6
|
+
require 'everlog/inf/api/evernote'
|
7
|
+
require 'everlog/inf/api/googlemap'
|
8
|
+
require 'everlog/inf/api/moves'
|
9
|
+
require 'everlog/inf/api/animetick'
|
10
|
+
require 'everlog/inf/api/wunderground'
|
11
|
+
|
12
|
+
def initialize config
|
13
|
+
@config = config
|
14
|
+
end
|
15
|
+
|
16
|
+
def client
|
17
|
+
raise 'no implemented.'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|