cal4near 0.1.0 → 0.2.0

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
  SHA256:
3
- metadata.gz: 872a62fa1f557fdf85235824334bdff98fa6d2b64205f846a3d803024d0f11fc
4
- data.tar.gz: e8ebfc5bc675c8116288f23d89c7517946aca6be1c87d9f4441e4888ea1d52fe
3
+ metadata.gz: 962a769e590ce2126052259f29cb6388e0437a3bb7710d6af2352ba9390b9ba7
4
+ data.tar.gz: e6f4a4aef668039638293302e4fa8be1d2e8774fe9640dfcb4c158fae7175999
5
5
  SHA512:
6
- metadata.gz: 9fbcc0c20819f60918457dc4592e547e794edb49b398127a20ac8de1409c80d74be82d77dc4e4b9b241dd9575b1394ebc76bb63459c1ec864a4dd77b25f62e55
7
- data.tar.gz: 410751d59e27aee97f4634d8043e4d152d2743b826b5c5bafe97c46df7c9ef250aeeb104226277cd16365a672c5091d3f7060e2fe56ac1c104a4b195c986bf10
6
+ metadata.gz: 7c410224e01c9ada37128b56e5f6535d26fafe12099edccd8c76266e706020aa82b3f4c923950e05de7abef4e02104c67294e74dd516b5bc1ee8f60abd9e9e40
7
+ data.tar.gz: a33c7228f8b45b1d9d85427a7598ad1325c1c6ce07c8c666562c1c912e38544e11033b9e7b4c6ad7e1a09f346c74152dd5637e42be7a8283823de9a276f99e1a
data/README.md CHANGED
@@ -1,53 +1,73 @@
1
1
  # Cal4near
2
2
 
3
- Googleカレンダーの情報をコンソールから取得するツール
3
+ Googleカレンダーの情報をコンソールへ出力するツールです。
4
4
 
5
- (作成中)
5
+ ### 主な機能
6
+ - 空いている時間を出力する
7
+ - [WIP]予定がある時間を出力する
6
8
 
7
- 予定が入っていない時間を出力する
9
+ ### 出力例
8
10
 
9
11
  ```
10
- $bin/cal4
11
- 2021/10/28(木) 16:00-17:00, 18:00-19:00
12
- 2021/10/29(金) 11:00-16:00, 17:00-19:00
13
- 2021/10/30() 9:00-19:00
14
- 2021/10/31() 9:00-19:00
15
- 2021/11/01() 12:00-14:00, 17:00-19:00
16
- 2021/11/02() 11:00-16:00
17
- 2021/11/03() 12:00-19:00
18
- 2021/11/04() 11:00-19:00
12
+ --------------
13
+ free times
14
+ --------------
15
+ 2022/02/21()
16
+ 2022/02/22() 12:00-17:00
17
+ 2022/02/23() 11:00-13:00, 14:00-18:00
18
+ 2022/02/24()
19
+ 2022/02/25()
20
+ 2022/02/26() 9:00-18:00
21
+ 2022/02/27(日) 9:00-18:00
22
+ 2022/02/28(月) 11:00-14:00, 16:00-18:00
23
+ 2022/03/01(火) 12:00-17:00
24
+ 2022/03/02(水) 11:00-18:00
25
+ 2022/03/03(木) 12:00-14:00, 15:00-17:00
19
26
 
20
27
  ```
21
28
 
22
- ## Installation
29
+ ## インストール
23
30
 
24
- Add this line to your application's Gemfile:
25
-
26
- ```ruby
27
- gem 'cal4near'
28
- ```
31
+ $ gem install cal4near
29
32
 
30
- And then execute:
33
+ ## 事前準備
31
34
 
32
- $ bundle install
35
+ GoogleClandarAPIを使えるように設定が必要です。
36
+ 以下を参考にしてください。
33
37
 
34
- Or install it yourself as:
38
+ https://qiita.com/nakamaksk/items/d1f522ecbb12aa969afc
35
39
 
36
- $ gem install cal4near
40
+ ## 使い方
37
41
 
38
- ## Usage
42
+ ### 空いている時間を取得
39
43
 
40
- TODO: Write usage instructions here
44
+ ```
45
+ cal4 free
46
+ ```
41
47
 
42
- ## Development
48
+ 出力例
43
49
 
44
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
45
50
 
46
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
51
+ ```
52
+ --------------
53
+ free times
54
+ --------------
55
+ 2022/02/21(月)
56
+ 2022/02/22(火) 12:00-17:00
57
+ 2022/02/23(水) 11:00-13:00, 14:00-18:00
58
+ 2022/02/24(木)
59
+ 2022/02/25(金)
60
+ 2022/02/26(土) 9:00-18:00
61
+ 2022/02/27(日) 9:00-18:00
62
+ 2022/02/28(月) 11:00-14:00, 16:00-18:00
63
+ 2022/03/01(火) 12:00-17:00
64
+ 2022/03/02(水) 11:00-18:00
65
+ 2022/03/03(木) 12:00-14:00, 15:00-17:00
66
+ ```
47
67
 
48
68
  ## Contributing
49
69
 
50
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/cal4near.
70
+ Bug reports and pull requests are welcome on GitHub at https://github.com/nakamaksk/cal4near.
51
71
 
52
72
  ## License
53
73
 
data/cal4near.gemspec CHANGED
@@ -29,9 +29,10 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
+ spec.add_dependency 'google-api-client'
33
+
32
34
  spec.add_development_dependency "rake", "~> 13.0"
33
35
  spec.add_development_dependency "rspec", "~> 3.0"
34
- spec.add_development_dependency 'google-api-client'
35
36
  spec.add_development_dependency 'dotenv'
36
37
  spec.add_development_dependency "pry"
37
38
  spec.add_development_dependency 'pry-byebug'
data/exe/cal4 ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler/setup"
3
+ require "cal4near"
4
+
5
+ HELP_MSG =<<-MSG
6
+ usage: cal4 [ free, f | busy, b ] [ -h ]
7
+
8
+ free, f : Stdout free times from Google Calendar api
9
+ busy, b : Stdout busy times from Google Calendar api
10
+
11
+ -h : Show help
12
+ MSG
13
+
14
+ WRONG_ARG_ERR_MSG =<<-MSG
15
+ [ERR]argument is wrong.
16
+ MSG
17
+
18
+ if ARGV.length > 0
19
+ case ARGV[0]
20
+ when '-h'
21
+ puts HELP_MSG
22
+ return
23
+ when 'free', 'f'
24
+ msg = "free times"
25
+ times_info = Cal4near.free_busy_times
26
+ is_free = true
27
+ when 'busy', 'b'
28
+ msg = "busy times"
29
+ times_info = Cal4near.free_busy_times
30
+ is_free = false
31
+ else
32
+ puts WRONG_ARG_ERR_MSG
33
+ puts HELP_MSG
34
+ return
35
+ end
36
+ else
37
+ puts WRONG_ARG_ERR_MSG
38
+ puts HELP_MSG
39
+ return
40
+ end
41
+
42
+ puts <<-MSG
43
+ ----------------------------
44
+ #{msg} (9:00 - 19:00)
45
+ ----------------------------
46
+ MSG
47
+
48
+ puts Cal4near.format(times_info, is_free)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cal4near
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/cal4near.rb CHANGED
@@ -6,8 +6,6 @@ require "googleauth"
6
6
  require "googleauth/stores/file_token_store"
7
7
  require "date"
8
8
  require "fileutils"
9
- require 'pry'
10
- require 'pry-byebug'
11
9
 
12
10
  module Cal4near
13
11
  class Error < StandardError; end
@@ -22,7 +20,7 @@ module Cal4near
22
20
  SCOPE = Google::Apis::CalendarV3::AUTH_CALENDAR_READONLY
23
21
 
24
22
  # 空き時間を検索する日時の範囲
25
- START_DATE = DateTime.now
23
+ START_DATE = DateTime.now.next_day(1)
26
24
  END_DATE = DateTime.now.next_day(30)
27
25
 
28
26
  # 空き時間を検索する時間の範囲
@@ -53,11 +51,12 @@ module Cal4near
53
51
  # @return [Hash]
54
52
  # @example 返り値のサンプルは以下
55
53
  # "2022-03-21"=> {"2022-03-21 09:00"=>{:free=>true}
56
- def self.free_times(
54
+ def self.free_busy_times(
57
55
  start_date = START_DATE,
58
56
  end_date = END_DATE,
59
57
  start_hour = START_HOUR,
60
- end_hour = END_HOUR
58
+ end_hour = END_HOUR,
59
+ max_date_count = 100
61
60
  )
62
61
  busy_list = []
63
62
  events(start_date, end_date).each do |event|
@@ -78,7 +77,9 @@ module Cal4near
78
77
  # puts "Free time:"
79
78
 
80
79
  result = {}
81
- (start_date.to_date..end_date.to_date).each do |date|
80
+ (start_date.to_date..end_date.to_date).each.with_index(1) do |date, i|
81
+ break if i > max_date_count
82
+
82
83
  result[date.strftime(DATE_FORMAT)] ||= {} # YYYY-MM-DD
83
84
 
84
85
  start_work_time = Time.new(date.year, date.month, date.day, start_hour, 0, 0)
@@ -107,19 +108,19 @@ module Cal4near
107
108
  result
108
109
  end
109
110
 
110
- # @param [Hash] free_times
111
- def self.stdout(times_info)
111
+ # @param [Hash] free_busy_times
112
+ def self.format(times_info, is_free = true)
112
113
  result = times_info
113
114
  wdays = %w(日 月 火 水 木 金 土)
114
115
  # 出力
115
- result.each do |date, times|
116
+ date_time_info = result.map do |date, times|
116
117
  min_time = max_time = nil
117
118
  spans = []
118
119
  times.each do |time, info|
119
120
  time = DateTime.parse(time)
120
121
  min_time ||= time
121
122
  max_time = time
122
- if info[:free]
123
+ if (is_free && info[:free]) || (!is_free && !info[:free])
123
124
  next
124
125
  else
125
126
  if min_time && max_time && min_time < max_time
@@ -134,8 +135,11 @@ module Cal4near
134
135
  end
135
136
 
136
137
  tmp_date = Date.parse(date)
137
- puts "#{tmp_date.strftime("%Y/%m/%d")}(#{wdays[tmp_date.wday]}) #{spans.join(", ")}"
138
+ spans_text = spans.empty? ? "" : " #{spans.join(", ")}"
139
+ "#{tmp_date.strftime("%Y/%m/%d")}(#{wdays[tmp_date.wday]})#{spans_text}"
138
140
  end
141
+
142
+ date_time_info.join("\n")
139
143
  end
140
144
 
141
145
  ##
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cal4near
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nakamaksk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-21 00:00:00.000000000 Z
11
+ date: 2022-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rake
14
+ name: google-api-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '13.0'
20
- type: :development
19
+ version: '0'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '13.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: google-api-client
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '3.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: dotenv
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -97,7 +97,8 @@ dependencies:
97
97
  description: Fetch calendar information.
98
98
  email:
99
99
  - adebayanen@gmail.com
100
- executables: []
100
+ executables:
101
+ - cal4
101
102
  extensions: []
102
103
  extra_rdoc_files: []
103
104
  files:
@@ -108,10 +109,10 @@ files:
108
109
  - LICENSE.txt
109
110
  - README.md
110
111
  - Rakefile
111
- - bin/cal4
112
112
  - bin/console
113
113
  - bin/setup
114
114
  - cal4near.gemspec
115
+ - exe/cal4
115
116
  - lib/cal4near.rb
116
117
  - lib/cal4near/version.rb
117
118
  homepage: https://github.com/nakamaksk/cal4near
data/bin/cal4 DELETED
@@ -1,44 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require "bundler/setup"
3
- require "cal4near"
4
-
5
- HELP_MSG =<<-MSG
6
- usage: cal4 [--free] [--busy]
7
-
8
- --free : Stdout free times from calendar api
9
- --busy : Stdout busy times from calendar api [WIP]
10
- MSG
11
-
12
- WRONG_ARG_ERR_MSG =<<-MSG
13
- [ERR]argument is wrong.
14
- MSG
15
-
16
- if ARGV.length > 0
17
- case ARGV[0]
18
- when '-h'
19
- puts HELP_MSG
20
- return
21
- when '--free', '-f'
22
- msg = "free times"
23
- times_info = Cal4near.free_times
24
- # when '--busy', 'b'
25
- # TODO:busy_timesの実装
26
- # msg = "busy times"
27
- # times_info = Cal4near.busy_times
28
- else
29
- puts WRONG_ARG_ERR_MSG
30
- puts HELP_MSG
31
- return
32
- end
33
- else
34
- msg = "free times"
35
- times_info = Cal4near.free_times
36
- end
37
-
38
- puts <<-MSG
39
- --------------
40
- #{msg}
41
- --------------
42
- MSG
43
-
44
- Cal4near.stdout(times_info)