akashiyaki 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/README.md +59 -2
- data/akashiyaki.gemspec +1 -0
- data/exe/ak4 +8 -0
- data/lib/akashiyaki/account.rb +3 -0
- data/lib/akashiyaki/account_parser.rb +84 -0
- data/lib/akashiyaki/cli.rb +50 -0
- data/lib/akashiyaki/command.rb +30 -0
- data/lib/akashiyaki/version.rb +1 -1
- metadata +23 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 652a4b0a3b87f208ed5b4e3bf586aafdb943421f
|
4
|
+
data.tar.gz: 5c4ee1c02c2a749ca78bdf9b04e76b841d8e64b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b415ece85b90835994b649f888bac5378c22e81ed3041971a43616afbcf599f2f1ae71ee692890c55a09d71c4db73c8f790a802765ffa8f56ae91609ed47f9df
|
7
|
+
data.tar.gz: cecd482c7b2f9f1ce8f3ad25cdb48ad5592fcb2e85b21d1010d3599debb88b6eb752da82c503fc80373e8410e46d68ea52e31f6f6acea6dd668828608e2ea3f6
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
$ gem install akashiyaki
|
20
20
|
|
21
|
-
##
|
21
|
+
## Library
|
22
22
|
|
23
23
|
```rb
|
24
24
|
require "akashiyaki"
|
@@ -30,10 +30,67 @@ client.start_break
|
|
30
30
|
client.finish_break
|
31
31
|
```
|
32
32
|
|
33
|
+
## CLI
|
34
|
+
|
35
|
+
Akashiyaki includes `ak4` command that is a CLI tool to access AKASHI.
|
36
|
+
|
37
|
+
Basic usage:
|
38
|
+
|
39
|
+
```bash
|
40
|
+
# To start work
|
41
|
+
ak4 work start
|
42
|
+
|
43
|
+
# To finish work
|
44
|
+
ak4 work finish
|
45
|
+
|
46
|
+
# To start break
|
47
|
+
ak4 break start
|
48
|
+
|
49
|
+
# To finish break
|
50
|
+
ak4 break finish
|
51
|
+
```
|
52
|
+
|
53
|
+
When `ak4` is executed without account information, `ak4` asks you about your account:
|
54
|
+
|
55
|
+
```bash
|
56
|
+
$ ak4 work finish
|
57
|
+
Company ID: mycompany
|
58
|
+
Login ID: myid
|
59
|
+
Password: %
|
60
|
+
```
|
61
|
+
|
62
|
+
If you think it's too much bother to enter account information everytime, you can save your account as configuration file `~/.config/ak4/account.yaml` (or `~/.config/ak4/account.json`):
|
63
|
+
|
64
|
+
```yaml
|
65
|
+
company: mycompany
|
66
|
+
id: myid
|
67
|
+
password: mypassword
|
68
|
+
```
|
69
|
+
|
70
|
+
`ak4` reads account information from `$XDG_CONFIG_HOME` directory.
|
71
|
+
|
72
|
+
If you don't want to save your password, you can save only company ID and login ID:
|
73
|
+
|
74
|
+
```yaml
|
75
|
+
company: mycompany
|
76
|
+
id: myid
|
77
|
+
```
|
78
|
+
|
79
|
+
So `ak4` asks you about only password.
|
80
|
+
|
81
|
+
You can also use command options:
|
82
|
+
|
83
|
+
```bash
|
84
|
+
Options:
|
85
|
+
[--config=CONFIG]
|
86
|
+
-c, [--company=COMPANY]
|
87
|
+
-i, [--id=ID]
|
88
|
+
-p, [--password=PASSWORD]
|
89
|
+
```
|
90
|
+
|
33
91
|
## Development
|
34
92
|
|
35
93
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
36
|
-
|
37
94
|
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 tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
38
95
|
|
39
96
|
## Contributing
|
data/akashiyaki.gemspec
CHANGED
data/exe/ak4
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "io/console"
|
4
|
+
require "json"
|
5
|
+
require "yaml"
|
6
|
+
|
7
|
+
require "akashiyaki/account"
|
8
|
+
|
9
|
+
module Akashiyaki
|
10
|
+
class AccountParser
|
11
|
+
def initialize(options)
|
12
|
+
@options = options
|
13
|
+
end
|
14
|
+
|
15
|
+
def parse
|
16
|
+
Account.new(company, id, password)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def company
|
22
|
+
return @options[:company] if @options[:company]
|
23
|
+
return config["company"] if config["company"]
|
24
|
+
|
25
|
+
print "Company ID: "
|
26
|
+
STDIN.gets.chomp
|
27
|
+
end
|
28
|
+
|
29
|
+
def config
|
30
|
+
@config ||= load_config_file
|
31
|
+
end
|
32
|
+
|
33
|
+
def id
|
34
|
+
return @options[:id] if @options[:id]
|
35
|
+
return config["id"] if config["id"]
|
36
|
+
|
37
|
+
print "Login ID: "
|
38
|
+
STDIN.gets.chomp
|
39
|
+
end
|
40
|
+
|
41
|
+
def password
|
42
|
+
return @options[:password] if @options[:password]
|
43
|
+
return config[:password] if config[:password]
|
44
|
+
|
45
|
+
print "Password: "
|
46
|
+
STDIN.noecho(&:gets).chomp
|
47
|
+
end
|
48
|
+
|
49
|
+
def search_config
|
50
|
+
if @options[:config]
|
51
|
+
path = File.expand_path(@options[:config])
|
52
|
+
return path if File.exist?(path)
|
53
|
+
end
|
54
|
+
|
55
|
+
%w(json yaml yml).each do |ext|
|
56
|
+
path = File.join(config_dir, "account.#{ext}")
|
57
|
+
return path if File.exist?(path)
|
58
|
+
end
|
59
|
+
|
60
|
+
nil
|
61
|
+
end
|
62
|
+
|
63
|
+
def config_dir
|
64
|
+
@config_dir ||=
|
65
|
+
File.join(
|
66
|
+
ENV["XDG_CONFIG_HOME"] || File.expand_path("~/.config"),
|
67
|
+
"ak4"
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def load_config_file
|
72
|
+
config_file = search_config
|
73
|
+
|
74
|
+
return {} unless config_file
|
75
|
+
|
76
|
+
case config_file
|
77
|
+
when /\.json$/
|
78
|
+
JSON.parse(File.read(config_file))
|
79
|
+
when /\.ya?ml$/
|
80
|
+
YAML.load_file(config_file)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "thor"
|
5
|
+
|
6
|
+
require "akashiyaki/account_parser"
|
7
|
+
require "akashiyaki/command"
|
8
|
+
|
9
|
+
module Akashiyaki
|
10
|
+
class Cli < Thor
|
11
|
+
class << self
|
12
|
+
def mode(mode, start, finish)
|
13
|
+
desc "#{mode} ACTION [options]", "#{start}/#{finish}"
|
14
|
+
subcommand mode, command_class(mode, start, finish)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def command_class(mode, start, finish)
|
20
|
+
Class.new(Thor).tap do |c|
|
21
|
+
c.desc "start [options]", start
|
22
|
+
c.send(:define_method, :start) do
|
23
|
+
Command.new(
|
24
|
+
mode,
|
25
|
+
:start,
|
26
|
+
AccountParser.new(options).parse
|
27
|
+
).run
|
28
|
+
end
|
29
|
+
|
30
|
+
c.desc "finish [options]", finish
|
31
|
+
c.send(:define_method, :finish) do
|
32
|
+
Command.new(
|
33
|
+
mode,
|
34
|
+
:finish,
|
35
|
+
AccountParser.new(options).parse
|
36
|
+
).run
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class_option :config, type: :string
|
43
|
+
class_option :company, aliases: "-c", type: :string
|
44
|
+
class_option :id, aliases: "-i", type: :string
|
45
|
+
class_option :password, aliases: "-p", type: :string
|
46
|
+
|
47
|
+
mode("work", "出勤", "退勤")
|
48
|
+
mode("break", "休憩開始", "休憩終了")
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "akashiyaki/client"
|
4
|
+
|
5
|
+
module Akashiyaki
|
6
|
+
class Command
|
7
|
+
attr_reader :mode, :action, :account
|
8
|
+
|
9
|
+
def initialize(mode, action, account)
|
10
|
+
@mode = mode
|
11
|
+
@action = action
|
12
|
+
@account = account
|
13
|
+
end
|
14
|
+
|
15
|
+
def run
|
16
|
+
client.send(:"#{action}_#{mode}")
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def client
|
22
|
+
@client ||=
|
23
|
+
Client.new(
|
24
|
+
account.company,
|
25
|
+
account.id,
|
26
|
+
account.password
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/akashiyaki/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: akashiyaki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nownabe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,10 +66,25 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 2.7.5
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: thor
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.19.4
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.19.4
|
69
83
|
description:
|
70
84
|
email:
|
71
85
|
- nownabe@gmail.com
|
72
|
-
executables:
|
86
|
+
executables:
|
87
|
+
- ak4
|
73
88
|
extensions: []
|
74
89
|
extra_rdoc_files: []
|
75
90
|
files:
|
@@ -82,8 +97,13 @@ files:
|
|
82
97
|
- akashiyaki.gemspec
|
83
98
|
- bin/console
|
84
99
|
- bin/setup
|
100
|
+
- exe/ak4
|
85
101
|
- lib/akashiyaki.rb
|
102
|
+
- lib/akashiyaki/account.rb
|
103
|
+
- lib/akashiyaki/account_parser.rb
|
104
|
+
- lib/akashiyaki/cli.rb
|
86
105
|
- lib/akashiyaki/client.rb
|
106
|
+
- lib/akashiyaki/command.rb
|
87
107
|
- lib/akashiyaki/version.rb
|
88
108
|
homepage: https://github.com/nownabe/akashiyaki
|
89
109
|
licenses:
|