everlog 0.0.1

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.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/Guardfile +8 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +29 -0
  8. data/Rakefile +1 -0
  9. data/everlog.gemspec +33 -0
  10. data/lib/everlog.rb +42 -0
  11. data/lib/everlog/app.rb +15 -0
  12. data/lib/everlog/app/animetick.rb +14 -0
  13. data/lib/everlog/app/evernote.rb +9 -0
  14. data/lib/everlog/app/github.rb +9 -0
  15. data/lib/everlog/app/hatena.rb +13 -0
  16. data/lib/everlog/app/moves.rb +9 -0
  17. data/lib/everlog/app/twitter.rb +11 -0
  18. data/lib/everlog/app/weather.rb +9 -0
  19. data/lib/everlog/dom.rb +9 -0
  20. data/lib/everlog/dom/entity.rb +11 -0
  21. data/lib/everlog/dom/entity/config.rb +30 -0
  22. data/lib/everlog/dom/entity/content.erb +170 -0
  23. data/lib/everlog/dom/entity/content.rb +14 -0
  24. data/lib/everlog/dom/module.rb +6 -0
  25. data/lib/everlog/dom/module/github.rb +28 -0
  26. data/lib/everlog/dom/module/moves.rb +26 -0
  27. data/lib/everlog/dom/repository.rb +5 -0
  28. data/lib/everlog/dom/repository/evernote.rb +24 -0
  29. data/lib/everlog/dom/service.rb +5 -0
  30. data/lib/everlog/dom/service/nullobject.rb +18 -0
  31. data/lib/everlog/dom/value.rb +18 -0
  32. data/lib/everlog/dom/value/animetick.rb +25 -0
  33. data/lib/everlog/dom/value/github.rb +6 -0
  34. data/lib/everlog/dom/value/github/activity.rb +18 -0
  35. data/lib/everlog/dom/value/github/commit.rb +13 -0
  36. data/lib/everlog/dom/value/hatena.rb +20 -0
  37. data/lib/everlog/dom/value/moves.rb +16 -0
  38. data/lib/everlog/dom/value/moves/move.rb +31 -0
  39. data/lib/everlog/dom/value/moves/place.rb +13 -0
  40. data/lib/everlog/dom/value/moves/referer.rb +10 -0
  41. data/lib/everlog/dom/value/moves/referer/move.rb +7 -0
  42. data/lib/everlog/dom/value/moves/referer/place.rb +8 -0
  43. data/lib/everlog/dom/value/moves/summary.rb +30 -0
  44. data/lib/everlog/dom/value/twitter.rb +13 -0
  45. data/lib/everlog/dom/value/weather.rb +31 -0
  46. data/lib/everlog/inf.rb +5 -0
  47. data/lib/everlog/inf/api.rb +20 -0
  48. data/lib/everlog/inf/api/animetick.rb +25 -0
  49. data/lib/everlog/inf/api/evernote.rb +37 -0
  50. data/lib/everlog/inf/api/github.rb +26 -0
  51. data/lib/everlog/inf/api/googlemap.rb +15 -0
  52. data/lib/everlog/inf/api/hatena.rb +20 -0
  53. data/lib/everlog/inf/api/moves.rb +21 -0
  54. data/lib/everlog/inf/api/twitter.rb +26 -0
  55. data/lib/everlog/inf/api/wunderground.rb +15 -0
  56. data/lib/everlog/version.rb +3 -0
  57. data/spec/fixtures/animetick/list_ticket_response.json +1 -0
  58. data/spec/fixtures/hatena/feed_response.json +80 -0
  59. data/spec/fixtures/moves/daily_storyline_response.json +319 -0
  60. data/spec/fixtures/moves/daily_summary_response.json +29 -0
  61. data/spec/fixtures/moves/sample_for_erb.json +29 -0
  62. data/spec/fixtures/wunderground/yesterday_response.json +1 -0
  63. data/spec/lifelog/app/animetick_spec.rb +13 -0
  64. data/spec/lifelog/app/evernote_spec.rb +14 -0
  65. data/spec/lifelog/app/github_spec.rb +22 -0
  66. data/spec/lifelog/app/hatena_spec.rb +35 -0
  67. data/spec/lifelog/app/moves_spec.rb +9 -0
  68. data/spec/lifelog/app/twitter_spec.rb +33 -0
  69. data/spec/lifelog/app/weather_spec.rb +11 -0
  70. data/spec/lifelog/dom/entity/config_spec.rb +22 -0
  71. data/spec/lifelog/dom/entity/content_spec.rb +23 -0
  72. data/spec/lifelog/dom/module/github_spec.rb +60 -0
  73. data/spec/lifelog/dom/module/moves_spec.rb +37 -0
  74. data/spec/lifelog/dom/repository/evernote_spec.rb +26 -0
  75. data/spec/lifelog/dom/service/nullobject_spec.rb +19 -0
  76. data/spec/lifelog/dom/value/animetick_spec.rb +49 -0
  77. data/spec/lifelog/dom/value/github/activity_spec.rb +25 -0
  78. data/spec/lifelog/dom/value/github/commit_spec.rb +23 -0
  79. data/spec/lifelog/dom/value/hatena_spec.rb +23 -0
  80. data/spec/lifelog/dom/value/moves/move_spec.rb +45 -0
  81. data/spec/lifelog/dom/value/moves/place_spec.rb +18 -0
  82. data/spec/lifelog/dom/value/moves/referer/move_spec.rb +18 -0
  83. data/spec/lifelog/dom/value/moves/referer/place_spec.rb +17 -0
  84. data/spec/lifelog/dom/value/moves/summary_spec.rb +64 -0
  85. data/spec/lifelog/dom/value/twitter_spec.rb +23 -0
  86. data/spec/lifelog/dom/value/weather_spec.rb +43 -0
  87. data/spec/lifelog/inf/api/animetick_spec.rb +22 -0
  88. data/spec/lifelog/inf/api/evernote_spec.rb +49 -0
  89. data/spec/lifelog/inf/api/github_spec.rb +36 -0
  90. data/spec/lifelog/inf/api/googlemap_spec.rb +9 -0
  91. data/spec/lifelog/inf/api/hatena_spec.rb +23 -0
  92. data/spec/lifelog/inf/api/moves_spec.rb +13 -0
  93. data/spec/lifelog/inf/api/twitter_spec.rb +23 -0
  94. data/spec/lifelog/inf/api/wunderground_spec.rb +11 -0
  95. data/spec/spec_helper.rb +8 -0
  96. 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,6 @@
1
+ class Everlog
2
+ class Dom::Module
3
+ require 'everlog/dom/module/github'
4
+ require 'everlog/dom/module/moves'
5
+ end
6
+ 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,5 @@
1
+ class Everlog
2
+ class Dom::Repository
3
+ require 'everlog/dom/repository/evernote'
4
+ end
5
+ 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,5 @@
1
+ class Everlog
2
+ class Service
3
+ require 'everlog/dom/service/nullobject'
4
+ end
5
+ 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,6 @@
1
+ class Everlog
2
+ class Dom::Value::Github < Dom::Value
3
+ require 'everlog/dom/value/github/activity'
4
+ require 'everlog/dom/value/github/commit'
5
+ end
6
+ 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,13 @@
1
+ class Everlog
2
+ class Dom::Value::Github::Commit < Dom::Value::Github
3
+ include Maybe
4
+
5
+ def url
6
+ maybe(@response.rels[:html].href).to_s
7
+ end
8
+
9
+ def message
10
+ maybe(@response.commit[:message]).to_s
11
+ end
12
+ end
13
+ 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,13 @@
1
+ class Everlog
2
+ class Dom::Value::Moves::Place < Dom::Value::Moves
3
+ include Maybe
4
+
5
+ def latitude
6
+ maybe(@response['place'])['location']['lat'].to_s
7
+ end
8
+
9
+ def longitude
10
+ maybe(@response['place'])['location']['lon'].to_s
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ class Everlog
2
+ class Dom::Value::Moves::Referer < Dom::Value::Moves
3
+ require 'everlog/dom/value/moves/referer/place'
4
+ require 'everlog/dom/value/moves/referer/move'
5
+
6
+ def name
7
+ self.class.name.split('::').last.downcase
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ class Everlog
2
+ class Dom::Value::Moves::Referer::Move < Dom::Value::Moves::Referer
3
+ def to_a
4
+ @response['activities'].map { |s| Dom::Value::Moves::Move.new(s) }
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ class Everlog
2
+ class Dom::Value::Moves::Referer::Place < Dom::Value::Moves::Referer
3
+ def screen_name
4
+ place = Dom::Value::Moves::Place.new(@response)
5
+ Inf::Api::GoogleMap.new.screen_name(place.latitude, place.longitude)
6
+ end
7
+ end
8
+ 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,13 @@
1
+ class Everlog
2
+ class Dom::Value::Twitter < Dom::Value
3
+ include Maybe
4
+
5
+ def tweet
6
+ maybe(@response).text.to_s
7
+ end
8
+
9
+ def created_at
10
+ parse_to_His(maybe(@response).created_at.to_s)
11
+ end
12
+ end
13
+ 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 &parameter
28
+ maybe(@response)['observations'].to_a.map { |r| parameter.call(r) }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,5 @@
1
+ class Everlog
2
+ class Inf
3
+ require 'everlog/inf/api'
4
+ end
5
+ end
@@ -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