whois_slacking 0.0.3 → 0.0.5

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: 3b4aca75b625140a4019efa60cb8af78e89d80dc
4
- data.tar.gz: 75a6421c82aac3cf1b57a5d98ff65ebf0c8da180
3
+ metadata.gz: 2c12a90fd78ffc81ec00d90aa15e50c61bb53041
4
+ data.tar.gz: 95ae875b987913537d79c40de5676a8ea3df0392
5
5
  SHA512:
6
- metadata.gz: 88115cc516d9739cfd9d524ac50487f130d4578d973929e05dd2eff76beb9acc595abfa7d3a2a2f99d0a2773c6db3b3f4c0938a667284326f986e349dae1c200
7
- data.tar.gz: 449be7d50e8830191efcce26284a22f3ad49c68299c49c2a1ea4742f983c12fa96a4da5070628c9f00ef51c84cf1268e943dd51d357dd10e61e687e8c122270a
6
+ metadata.gz: b343af7a6be9858de23f6285a7a9d33729c7b16982580155d871493fb978d4221c52bc5ed2e0b84db0ab52ce28b4a8fe8bcd964ddacd572613af6a495a66e2d6
7
+ data.tar.gz: 4d4e91bc2a20bedff2b746a9335371034f17b94ff64998932eb2b19bec54e87dc9548631d6c8625d438fa373b80959bab328776b8dc92a6c566d2432aa025cd7
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- whois_slacking (0.0.2)
4
+ whois_slacking (0.0.4)
5
5
  dotenv (~> 2.0.2)
6
6
  moneta (~> 0.8.0)
7
7
  multi_xml (~> 0.5)
data/README.md CHANGED
@@ -21,9 +21,10 @@ gem install whois_slacking
21
21
  ```
22
22
  Update the .env file with the proper tokens
23
23
 
24
- Make the following call in a ruby file and call it in cron job that runs daily:
24
+ Call the slackcron.rb file in the base directory (or create your own cronscript).
25
+ Create a cronjob that calls the script e.g.:
25
26
  ```
26
- WhoIsSlacking::Start.now
27
+ 0 8 * * * /bin/bash -l -c 'rvm use 2.1.5 ; . $HOME/path-to-env/.env ; ruby $HOME/path-to-cronscript/slackcron.rb > /tmp/slackcron.log'
27
28
  ```
28
29
 
29
30
  ## Contribution
@@ -61,7 +61,7 @@ module WhoIsSlacking
61
61
  task.current_state != 'unestimated' &&
62
62
  task.current_state != 'unscheduled' &&
63
63
  task.current_state != 'accepted'
64
- WhoIsSlacking::DataTools.save_task(project_object.name, task.id, task.name, task.owned_by, task.current_state, task.accepted_at )
64
+ WhoIsSlacking::DataTools.save_task(project_object.name, task.id, task.name, task.owned_by, task.current_state, task.accepted_at, task.url )
65
65
  end
66
66
  end
67
67
  end
@@ -124,17 +124,18 @@ module WhoIsSlacking
124
124
  end
125
125
  end
126
126
 
127
- def self.save_task(project, task_id, task, user, current_state, accepted_at, options={})
127
+ def self.save_task(project, task_id, task, user, current_state, accepted_at, url, options={})
128
128
 
129
129
  # dont use accepted_at
130
130
  accepted_at = accepted_at
131
+ url = url
131
132
  created_dt = DateTime.now.to_s
132
133
  start_dt = DateTime.now.to_s
133
134
  updated_dt = created_dt
134
135
  current_state = current_state
135
136
  active = true
136
137
  message = nil
137
- task_entity = {project: project, task_id: task_id, task: task, user: user, current_state: current_state, active: active, start_dt: start_dt, created_dt: created_dt, accepted_at: accepted_at, updated_dt: updated_dt}
138
+ task_entity = {project: project, task_id: task_id, task: task, user: user, current_state: current_state, url: url, active: active, start_dt: start_dt, created_dt: created_dt, accepted_at: accepted_at, updated_dt: updated_dt}
138
139
  # initialize datastore type
139
140
  store = whois_store
140
141
  mutex = Moneta::Mutex.new(store, 'moneta')
@@ -143,7 +144,9 @@ module WhoIsSlacking
143
144
  entity_exists = store[mkey]
144
145
 
145
146
  if entity_exists &&
146
- entity_exists[:current_state] != 'finished' # -- if task/username combo exists and is not delivered/finished in db
147
+ entity_exists[:current_state] != 'finished' &&
148
+ entity_exists[:current_state] != 'delivered' &&
149
+ entity_exists[:current_state] != 'accepted' # -- if task/username combo exists and is not delivered/finished in db
147
150
  # -- calculate how long (realtime) the task has been worked on in days (.5, 1.5 etc)
148
151
  # -- update time on task
149
152
  # -- save who started task
@@ -152,45 +155,58 @@ module WhoIsSlacking
152
155
  # keep created at date
153
156
 
154
157
  start_dt = entity_exists[:start_dt].to_datetime
158
+ puts "start_dt in db was #{start_dt}"
155
159
 
156
160
  days_worked = TimeDifference.between(DateTime.now, start_dt).in_days
157
161
  if days_worked >= 1.0
158
- message = "*#{user} has spent #{days_worked.to_i} days working on #{task}*"
162
+ message = "*#{user}* has spent *#{days_worked.to_i} days* working on <#{url}|#{task}>"
159
163
  else # show hours instead
160
- hours_worked = TimeDifference.between(DateTime.now, start_dt).in_hours
161
- message = "*#{user} has spent #{hours_worked.to_i} hours working on #{task}*"
164
+ # hours_worked = TimeDifference.between(DateTime.now, start_dt).in_hours
165
+ # message = "*#{user} has spent #{hours_worked.to_i} hours working on #{task}*"
166
+ message = "*#{user}* has spent *less than a day* working on <#{url}|#{task}>"
162
167
  end
163
168
  # keep the created dt and start_dt
164
169
  created_dt = entity_exists[:created_dt]
165
170
  start_dt = entity_exists[:start_dt].to_datetime
166
171
  task_entity["created_dt"] = created_dt
167
- task_entity["start_dt"] = start_dt
172
+ task_entity["start_dt"] = start_dt.to_s
173
+ puts "start_dt in db will be #{start_dt}"
168
174
  store[mkey] = task_entity
169
175
 
176
+ elsif entity_exists && entity_exists[:current_state] == 'delivered' && current_state == 'delivered'
177
+ start_dt = entity_exists[:start_dt].to_datetime
178
+ puts "start_dt in db for delivered state was #{start_dt}"
179
+
180
+ days_worked = TimeDifference.between(DateTime.now, start_dt).in_days
181
+ if days_worked >= 1.0
182
+ message = "Task <#{url}|#{task}> has been in a *delivered state for #{days_worked.to_i} days*"
183
+ else
184
+ message = "Task <#{url}|#{task}> has been in a *delivered state for less than a day*"
185
+ end
170
186
  elsif entity_exists && entity_exists[:current_state] == 'finished'
171
- # don't do anything
187
+ # don't do anything if entity already exists as delivered
172
188
  else # -- if task/username combo does not exist in db
173
189
  # -- save project/task/user
174
190
  # -- save when task was started
175
191
  # -- save who started task
176
192
  store[mkey] = task_entity
177
193
 
178
- if current_state != "finished" # -- if task is not-completed in pivotal
194
+ if current_state != "finished" && current_state != "delivered" # -- if task is not-completed in pivotal and is not in db
179
195
  # -- save status as status not-completed
180
196
  # -- publish message task/user started today
181
197
  # -- "Today Johnny started 'As a user I should be able to log in'"
182
- message = "*Today #{user} started #{task}*"
198
+ message = "Now tracking *#{user}* as doing <#{url}|#{task}>"
183
199
 
184
- elsif current_state == "finished" # -- if task is completed in pivotal
200
+ elsif current_state == "finished" # -- if task is completed in pivotal and is not in db
185
201
  # -- save status as status completed
186
202
  # -- publish message task/user started today
187
203
  # -- "Today Johnny completed 'As a user I should be able to log in'"
188
- message = "*Today #{user} finished #{task}*"
204
+ message = "Today *#{user} finished* <#{url}|#{task}> and it is *waiting to be delivered*"
189
205
  elsif current_state == "delivered" # -- if task is completed in pivotal
190
206
  # -- save status as status completed
191
207
  # -- publish message task/user started today
192
208
  # -- "Today Johnny completed 'As a user I should be able to log in'"
193
- message = "*Today #{user} delivered #{task}*"
209
+ message = "Today *#{user} delivered* <#{url}|#{task}> and it is *waiting to be accepted*"
194
210
  end
195
211
 
196
212
  end
@@ -1,3 +1,3 @@
1
1
  module WhoIsSlacking
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.5'
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -51,6 +51,10 @@ describe "json client" do
51
51
  def current_state
52
52
  'started'
53
53
  end
54
+
55
+ def url
56
+ 'https://www.pivotaltracker.com/story/show/98984232'
57
+ end
54
58
 
55
59
  def accepted_dt
56
60
  DateTime.now
@@ -88,7 +92,7 @@ describe "json client" do
88
92
  end
89
93
 
90
94
  it "should save a project task" do
91
- WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt)
95
+ WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)
92
96
  expect(@store.key?(whois_key)).to eql true
93
97
  end
94
98
 
@@ -101,17 +105,22 @@ describe "json client" do
101
105
  expect(WhoIsSlacking::SlackWrapper.post_to_slack(message)["ok"]).to eql true
102
106
  end
103
107
 
104
- it "should post to slack 'Today xx started xxx' when a non completed task exists in pivotal but not in the db" do
105
- expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt)
106
- .fetch("message", nil).fetch("text", nil)) .to eql "*Today user started task*"
108
+ it "should post to slack 'Now tracking xx as doing xxx' when a non completed task exists in pivotal but not in the db" do
109
+ expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)
110
+ .fetch("message", nil).fetch("text", nil)) .to eql "Now tracking *user* as doing <https://www.pivotaltracker.com/story/show/98984232|task>"
107
111
  end
108
112
 
109
113
  it "should post to slack 'Today xx completed xxx' when a completed task exists in pivotal but not in the db" do
110
114
  current_state = 'finished'
111
- expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt)
112
- .fetch("message", nil).fetch("text", nil)) .to eql "*Today user finished task*"
115
+ expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)
116
+ .fetch("message", nil).fetch("text", nil)) .to eql "Today *user finished* <https://www.pivotaltracker.com/story/show/98984232|task> and it is *waiting to be delivered*"
113
117
  end
114
118
 
119
+ it "should post to slack 'Today xx delivered xxx' when a delivered task exists in pivotal but not in the db" do
120
+ current_state = 'delivered'
121
+ expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)
122
+ .fetch("message", nil).fetch("text", nil)) .to eql "Today *user delivered* <https://www.pivotaltracker.com/story/show/98984232|task> and it is *waiting to be accepted*"
123
+ end
115
124
 
116
125
  def direct_save(start_dt = (DateTime.now - 1), cstate = current_state)
117
126
  accepted_at = accepted_at
@@ -131,21 +140,30 @@ describe "json client" do
131
140
  it "should not post to slack when a finished task exists in pivotal *and* in the db" do
132
141
  accepted_dt = DateTime.now - 1
133
142
  direct_save(accepted_dt, 'finished')
134
- expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt)).to eql nil
143
+ expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)).to eql nil
144
+ end
145
+
146
+ it "should post to slack when a delivered task exists in pivotal *and* is still in the db" do
147
+ accepted_dt = DateTime.now - 1
148
+ current_state = 'delivered'
149
+ puts current_state
150
+ direct_save(accepted_dt, 'delivered')
151
+ expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)
152
+ .fetch("message", nil).fetch("text", nil)) .to eql "Task <https://www.pivotaltracker.com/story/show/98984232|task> has been in a *delivered state for 1 days*"
135
153
  end
136
154
 
137
155
  it "should post to slack 'xx has spent xx days working on xxx' when a non completed task exists in pivotal and in the db" do
138
156
  accepted_dt = DateTime.now - 1
139
157
  direct_save
140
- expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt)
141
- .fetch("message", nil).fetch("text", nil)) .to eql "*user has spent 1 days working on task*"
158
+ expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)
159
+ .fetch("message", nil).fetch("text", nil)) .to eql "*user* has spent *1 days* working on <https://www.pivotaltracker.com/story/show/98984232|task>"
142
160
  end
143
161
 
144
162
  it "should post to slack 'xx has spent xx hours working on xxx' when a non completed task exists in pivotal and in the db and the days worked is less than 1" do
145
163
  start_dt = DateTime.now - 0.5
146
164
  direct_save(start_dt)
147
- expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt)
148
- .fetch("message", nil).fetch("text", nil)) .to eql "*user has spent 12 hours working on task*"
165
+ expect(WhoIsSlacking::DataTools.save_task(project, task_id, task, user, current_state, accepted_dt, url)
166
+ .fetch("message", nil).fetch("text", nil)) .to eql "*user* has spent *less than a day* working on <https://www.pivotaltracker.com/story/show/98984232|task>"
149
167
  end
150
168
 
151
169
  it "should run through all tasks for a project, sending a message into slack for each of them" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whois_slacking
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - W Watson