ruboty-jobcan 0.1.1 → 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
  SHA1:
3
- metadata.gz: 56f732325b542a73278f169be504638eec2e63b3
4
- data.tar.gz: 560c033f3d6a14bd87988b4acc23dc1cd51c5ba9
3
+ metadata.gz: 73e500010b3adf3025367661723360fa555e24b4
4
+ data.tar.gz: 4c29f7959546bb61e86d07401c320d4a0aab2e87
5
5
  SHA512:
6
- metadata.gz: 42bdd99cf2618c0a17e426bddee6a9b6ee6875a5c8722fec208ef0d577ed32dc2b2b79ba0e35df55f74791e3d0541bcd18bcb0b35448f0b5dd60fa422c68d09e
7
- data.tar.gz: 97a11cb46f5ce519e0b1ed6961d939667a32d4f15458d12861e8fe9c6da001fab56a6edc943566f5d7a1c0eda2142d996e09ef2005401f16dbd24f56d57574ec
6
+ metadata.gz: 9c43a02dfd75f6538fa8238c640bf1612696540d07d92ce3feae3459668bd42aa55a70617728bfcfd6baf3c5afba870a247a8fb381ab22c7542db1dccfabc397
7
+ data.tar.gz: bd5a0dbce45340ec74b456d0a9bf192c097d9e2e732c4b2fcab5703e7e943a945b1653f8816a021596ca831f2f32571a339896d30ceb72ed29e360a48b0df38c
data/README.md CHANGED
@@ -1,13 +1,60 @@
1
1
  # Ruboty::Jobcan
2
2
 
3
+ ## Usage
4
+
5
+ To use JOBCAN API, you have to teach Ruboty either your code or login info.
6
+
7
+ ### Teach JOBCAN code
8
+
3
9
  ```
4
10
  ruboty remember my jobcan code <code>
11
+ ```
12
+
13
+ `<code>` is the text attached to your mobile login URL,
14
+ e.g. `http://jobcan.jp/m?code=YOUR_CODE_GOES_HERE`.
15
+ Check out the invitation email from JOBCAN for the URL.
16
+
17
+
18
+ ### Teach client ID, email, and password
19
+
20
+ Alternatively, you can use these environment variables to provide your credentials.
21
+
22
+ ```
23
+ RUBOTY_JOBCAN_CLIENT_ID
24
+ RUBOTY_JOBCAN_EMAIL
25
+ RUBOTY_JOBCAN_PASSWORD
26
+ ```
27
+
28
+ ### Set group ID
29
+
30
+ Then set your default group ID.
31
+
32
+ ```
5
33
  ruboty remember my jobcan group id <group_id>
6
- ruboty punch the clock
7
34
  ```
8
35
 
9
- ## Installation
36
+ `<group_id>` is the numeric ID of your group;
37
+ ask your manager or check out the source code of https://ssl.jobcan.jp/employee for it.
38
+
39
+ ![group ID](img/group_id.png)
40
+
41
+
42
+ You can also use group name aliases.
43
+
44
+ ```
45
+ ruboty register my jobcan group alias <group_name> -> <group_id>
46
+ ```
47
+
48
+ ### Clock in/out
10
49
 
50
+ ```
51
+ ruboty clock in
52
+ ruboty clock out
53
+ ruboty clock in at <group_name>
54
+ ruboty clock out at <group_name>
55
+ ```
56
+
57
+ ## Installation
11
58
 
12
59
  ```ruby
13
60
  gem 'ruboty-jobcan'
@@ -29,5 +76,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
29
76
 
30
77
  ## Contributing
31
78
 
32
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ruboty-jobcan.
33
-
79
+ Bug reports and pull requests are welcome on GitHub at https://github.com/uasi/ruboty-jobcan.
Binary file
@@ -1,5 +1,7 @@
1
1
  require "faraday"
2
+ require "faraday_middleware"
2
3
  require "faraday-cookie_jar"
4
+ require "jbcn"
3
5
 
4
6
  module Ruboty
5
7
  module Actions
@@ -22,99 +24,82 @@ module Ruboty
22
24
  message.reply("I remember.")
23
25
  end
24
26
 
25
- def punch_clock(in_out = :auto)
26
- unless (code = user_data["code"])
27
- message.reply("I don't know your JOBCAN code.")
28
- return
29
- end
30
- unless (group_id = user_data["group_id"])
31
- message.reply("I don't know your JOBCAN group ID.")
32
- return
33
- end
34
- client = JobcanClient.new(code, group_id, in_out)
35
- client.authenticate!
36
- status = client.punch_clock!
37
- message.reply("OK, your current status is #{status}.")
38
- rescue
39
- message.reply("Error: #{$!}")
27
+ def register_group_alias
28
+ user_data["alias_#{message[:group_name]}"] = message[:group_id]
29
+ message.reply("I registered alias #{message[:group_name]} to ID #{message[:group_id]}.")
40
30
  end
41
31
 
42
- def clock_in
43
- punch_clock(:in)
44
- end
45
-
46
- def clock_out
47
- punch_clock(:out)
48
- end
49
-
50
- private
51
-
52
- def user_data
53
- brain_space = message.robot.brain.data[NAMESPACE] ||= {}
54
- brain_space[message.from_name] ||= {}
55
- end
56
-
57
- class JobcanClient
58
- def initialize(code, group_id, in_out)
59
- @code = code
60
- @group_id = group_id
61
- @in_out = in_out
32
+ def clock_in_out
33
+ unless client
34
+ message.reply("I don't know your JOBCAN login info.")
35
+ return
62
36
  end
63
37
 
64
- def authenticate!
65
- response = faraday.get(authenticate_url)
66
- unless response.status == 200
67
- fail "could not log in to JOBCAN; it returned #{response.status}"
38
+ if (group_name = message[:group_name])
39
+ unless (group_id = user_data["alias_#{group_name}"])
40
+ message.reply("I don't know that JOBCAN group alias '#{group_name}'.")
41
+ return
42
+ end
43
+ else
44
+ unless (group_id = user_data["group_id"])
45
+ message.reply("I don't know your JOBCAN group ID.")
46
+ return
68
47
  end
69
48
  end
70
49
 
71
- def punch_clock!
72
- response = faraday.post(punch_clock_url, punch_clock_request_body)
73
- unless response.status == 200
74
- fail "could not punch the clock on JOBCAN; it returned #{response.status}"
75
- end
76
- result = JSON.parse(response.body) or fail "could not parse response"
77
- if result["result"] == 0
78
- if result["errors"] && result["errors"]["aditCount"] == "duplicate"
79
- fail "you have punched the clock within a minute"
80
- end
81
- fail result["errors"].to_s
82
- end
83
- result["current_status"]
50
+ result = client.clock(message[:in_out].to_sym, group_id: group_id)
51
+ unless result.is_a?(Hash) && (current_status = result["current_status"])
52
+ message.reply("I got unknown response from JOBCAN: #{result}.")
53
+ return
84
54
  end
85
55
 
86
- private
56
+ message.reply("OK, your current status is #{current_status}.")
57
+ end
58
+
59
+ private
87
60
 
88
- def faraday
89
- @faraday ||= Faraday.new do |builder|
90
- # Note that the server will return JSON string with text/html content type.
91
- # Don't use `builder.response :json` here.
92
- builder.request :url_encoded
93
- builder.use FaradayMiddleware::FollowRedirects
94
- builder.use :cookie_jar
95
- builder.adapter Faraday.default_adapter
61
+ def client
62
+ unless instance_variable_defined?(:@client)
63
+ if (credentials = code_credentials || user_credentials)
64
+ @client = Jbcn::Client.new
65
+ @client.authenticate(credentials)
66
+ else
67
+ @client = nil
96
68
  end
97
69
  end
70
+ @client
71
+ end
98
72
 
99
- def authenticate_url
100
- "https://ssl.jobcan.jp/employee?code=#{@code}"
73
+ def code_credentials
74
+ if (code = user_data["code"])
75
+ Jbcn::CodeCredentials.new(code)
76
+ else
77
+ nil
101
78
  end
79
+ end
102
80
 
103
- def punch_clock_url
104
- "https://ssl.jobcan.jp/employee/index/adit"
81
+ def user_credentials
82
+ if login_env_present?
83
+ Jbcn::UserCredentials.new(
84
+ client_id: ENV["RUBOTY_JOBCAN_CLIENT_ID"],
85
+ username: ENV["RUBOTY_JOBCAN_USERNAME"] || ENV["RUBOTY_JOBCAN_EMAIL"],
86
+ password: ENV["RUBOTY_JOBCAN_PASSWORD"])
87
+ else
88
+ nil
105
89
  end
90
+ end
106
91
 
107
- def punch_clock_request_body
108
- { is_yakin: "0", adit_item: adit_item, adit_group_id: @group_id, notice: "" }
109
- end
92
+ def user_data
93
+ brain_space = message.robot.brain.data[NAMESPACE] ||= {}
94
+ brain_space[message.from_name] ||= {}
95
+ end
110
96
 
111
- def adit_item
112
- case @in_out
113
- when :auto then "DEF"
114
- when :in then "work_start"
115
- when :out then "work_end"
116
- end
117
- end
97
+ def login_env_present?
98
+ !!(
99
+ ENV["RUBOTY_JOBCAN_CLIENT_ID"] &&
100
+ ENV["RUBOTY_JOBCAN_PASSWORD"] &&
101
+ (ENV["RUBOTY_JOBCAN_USERNAME"] || ENV["RUBOTY_JOBCAN_EMAIL"])
102
+ )
118
103
  end
119
104
  end
120
105
  end
@@ -14,21 +14,15 @@ module Ruboty
14
14
  )
15
15
 
16
16
  on(
17
- /punch the clock\z/,
18
- description: "Punch the clock on JOBCAN",
19
- name: "punch_clock",
17
+ /register my jobcan group alias (?<group_name>.+?) -> (?<group_id>\d+)\z/,
18
+ description: "Create alias to JOBCAN group ID",
19
+ name: "register_group_alias",
20
20
  )
21
21
 
22
22
  on(
23
- /clock in\z/,
24
- description: "Clock in on JOBCAN",
25
- name: "clock_in",
26
- )
27
-
28
- on(
29
- /clock out\z/,
30
- description: "Clock out on JOBCAN",
31
- name: "clock_out",
23
+ /clock (?<in_out>in|out)(?: at (?<group_name>.+))?\z/,
24
+ description: "Clock in/out on JOBCAN (at group)",
25
+ name: "clock_in_out",
32
26
  )
33
27
 
34
28
  def remember_code(message)
@@ -39,16 +33,12 @@ module Ruboty
39
33
  Ruboty::Actions::Jobcan.new(message).remember_group_id
40
34
  end
41
35
 
42
- def punch_clock(message)
43
- Ruboty::Actions::Jobcan.new(message).punch_clock
44
- end
45
-
46
- def clock_in(message)
47
- Ruboty::Actions::Jobcan.new(message).clock_in
36
+ def register_group_alias(message)
37
+ Ruboty::Actions::Jobcan.new(message).register_group_alias
48
38
  end
49
39
 
50
- def clock_out(message)
51
- Ruboty::Actions::Jobcan.new(message).clock_out
40
+ def clock_in_out(message)
41
+ Ruboty::Actions::Jobcan.new(message).clock_in_out
52
42
  end
53
43
  end
54
44
  end
@@ -1,5 +1,5 @@
1
1
  module Ruboty
2
2
  module Jobcan
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -21,7 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.10"
22
22
  spec.add_development_dependency "rake", "~> 10.0"
23
23
 
24
- spec.add_runtime_dependency "faraday", "~> 0.9.0"
25
- spec.add_runtime_dependency "faraday_middleware", "~> 0.10.0"
26
- spec.add_runtime_dependency "faraday-cookie_jar", "~> 0.0.6"
24
+ spec.add_runtime_dependency "faraday", "~> 0.9"
25
+ spec.add_runtime_dependency "faraday_middleware", "~> 0.10"
26
+ spec.add_runtime_dependency "faraday-cookie_jar", "~> 0.0"
27
+ spec.add_runtime_dependency "jbcn", "~> 0.1"
27
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruboty-jobcan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomoki Aonuma
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-11-25 00:00:00.000000000 Z
11
+ date: 2016-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,42 +44,56 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.9.0
47
+ version: '0.9'
48
48
  type: :runtime
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.9.0
54
+ version: '0.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: faraday_middleware
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.10.0
61
+ version: '0.10'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.10.0
68
+ version: '0.10'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: faraday-cookie_jar
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.0.6
75
+ version: '0.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.0.6
82
+ version: '0.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: jbcn
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.1'
83
97
  description: Ruboty plug-in for punching the clock on JOBCAN.
84
98
  email:
85
99
  - uasi@uasi.jp
@@ -94,6 +108,7 @@ files:
94
108
  - Rakefile
95
109
  - bin/console
96
110
  - bin/setup
111
+ - img/group_id.png
97
112
  - lib/ruboty/actions/jobcan.rb
98
113
  - lib/ruboty/handlers/jobcan.rb
99
114
  - lib/ruboty/jobcan.rb
@@ -118,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
133
  version: '0'
119
134
  requirements: []
120
135
  rubyforge_project:
121
- rubygems_version: 2.4.5.1
136
+ rubygems_version: 2.6.8
122
137
  signing_key:
123
138
  specification_version: 4
124
139
  summary: Ruboty plug-in for punching the clock on JOBCAN.