ruboty-jobcan 0.1.1 → 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 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.