jiraquest 0.0.2

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.
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'achievements'
4
+ require_relative 'login'
5
+ require_relative 'score'
6
+ require_relative 'morale'
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml/store'
4
+ require_relative '../utils'
5
+
6
+ # Logs in users
7
+ class Login
8
+ def initialize
9
+ @store = DATA
10
+ @user = @store.transaction { @store[:user] }
11
+ end
12
+
13
+ # simple method to return the username only for other methods
14
+ def current_user
15
+ @user
16
+ end
17
+
18
+ # Report who is logged in
19
+ def user_message
20
+ puts "Logged in as #{@user}"
21
+ end
22
+
23
+ # If there a user exists, ask to resume
24
+ def login
25
+ if @user
26
+ resume
27
+ else
28
+ create_user
29
+ end
30
+ Achievement.new.employee_otm
31
+ end
32
+
33
+ # Ask to resume, if not, ask to delete user
34
+ def resume
35
+ if Prompter.new.resume(@user)
36
+ user_message
37
+ else
38
+ delete_user?
39
+ end
40
+ end
41
+
42
+ def create_user
43
+ @store.transaction do
44
+ store = @store
45
+ @user = Prompter.new.user
46
+ store[:user] = @user
47
+ end
48
+ reset_data
49
+ end
50
+
51
+ def reset_data
52
+ Score.new.reset_score
53
+ Morale.new.reset_morale
54
+ reset_list(Achievement.new.list, 'achievements')
55
+ reset_list(Activity.new.list, 'distractions')
56
+ reset_list(Activity.new.list, 'warnings')
57
+ reset_list(Notifications.new.list, 'notifications')
58
+ reset_list(Quests.new.list, 'quests')
59
+ end
60
+
61
+ def reset_list(data, type)
62
+ @list = Array.new(data.length, {})
63
+ data.each_with_index do |activity, i|
64
+ @list[i][activity] = 0
65
+ end
66
+ @list.uniq!
67
+ @store.transaction do
68
+ store = @store
69
+ store[type] = @list[0]
70
+ end
71
+ end
72
+
73
+ # Ask if really sure to delete user
74
+ def delete_user?
75
+ return false unless Prompter.new.delete(@user)
76
+ puts "\n❌ DELETING user #{@user}! This action cannot be undone\n"
77
+ return false unless Prompter.new.really_sure?
78
+ @store.transaction do
79
+ store = @store
80
+ store.delete(:user)
81
+ end
82
+ reset_data
83
+ puts "❌ Deleted user #{@user}"
84
+ create_user
85
+ end
86
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml/store'
4
+ require_relative '../utils'
5
+
6
+ # Keeps track of users score
7
+ class Morale
8
+ def initialize
9
+ @store = DATA
10
+ @morale = @store.transaction { @store[:morale] }
11
+ end
12
+
13
+ def report_morale
14
+ puts "Your morale level is #{@morale}"
15
+ end
16
+
17
+ def reset_morale
18
+ @store.transaction do
19
+ store = @store
20
+ store[:morale] = 0
21
+ end
22
+ end
23
+
24
+ def update_morale(number)
25
+ @store.transaction do
26
+ store = @store
27
+ store[:morale] += number
28
+ end
29
+ end
30
+
31
+ def update_and_print(number)
32
+ update_morale(number)
33
+ report_morale
34
+ end
35
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml/store'
4
+ require_relative '../utils'
5
+
6
+ # Keeps track of users score
7
+ class Score
8
+ def initialize
9
+ @store = DATA
10
+ @score = @store.transaction { @store[:score] }
11
+ end
12
+
13
+ # jiraS ==========================
14
+ def report_score
15
+ puts "You have #{@score} jiras"
16
+ end
17
+
18
+ def reset_score
19
+ @store.transaction do
20
+ store = @store
21
+ store[:score] = 0
22
+ end
23
+ end
24
+
25
+ def update_points(number)
26
+ @store.transaction do
27
+ store = @store
28
+ store[:score] += number
29
+ end
30
+ end
31
+
32
+ def update_and_print(number)
33
+ update_points(number)
34
+ report_score
35
+ end
36
+
37
+ # QUESTS ==========================
38
+ def report_quests
39
+ puts "You have completed #{@quests} Quests"
40
+ end
41
+
42
+ def update_quests(quest)
43
+ @store.transaction do
44
+ store = @store
45
+ store['quests'][quest.to_s] = 'DONE'
46
+ end
47
+ end
48
+
49
+ def update_quests_and_print(number)
50
+ update_quests(number)
51
+ report_quests
52
+ end
53
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'figlet'
4
+ require 'yaml/store'
5
+
6
+ # Some ultra cool figlets
7
+ class Fig
8
+ def initialize
9
+ @store = DATA
10
+ @font = FIGLET
11
+ @figlet = Figlet::Typesetter.new(@font)
12
+ @user = @store.transaction { @store[:user] }
13
+ end
14
+
15
+ def jiraquest
16
+ puts @figlet['jiraquest 2018!']
17
+ end
18
+
19
+ def user
20
+ puts @figlet[@user.to_s]
21
+ end
22
+
23
+ def jira_user
24
+ puts @figlet["#{@user} jiraquest"]
25
+ end
26
+
27
+ def user_message(message)
28
+ puts @figlet["#{@user} #{message}"]
29
+ end
30
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'figlet'
4
+ require_relative 'reporter'
5
+ require_relative 'system'
6
+ require_relative 'terminal'
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'figlet'
4
+ require_relative '../game/game'
5
+
6
+ # Simple Console Reporting or usage instructions
7
+ class Reporter
8
+ def initialize
9
+ @pastel = Pastel.new
10
+ @prompt = TTY::Prompt.new
11
+ format = "[#{@pastel.yellow(':spinner')}] " + @pastel.yellow('jiraing...')
12
+ @spinner = TTY::Spinner.new(format, success_mark: @pastel.green('+'))
13
+ end
14
+
15
+ def welcome
16
+ Fig.new.jiraquest
17
+ success("🤖 Welcome to jiraquest, #{Login.new.current_user}!")
18
+ end
19
+
20
+ def success(message)
21
+ @spinner.success(@pastel.green(message))
22
+ end
23
+
24
+ def timed_success(message, seconds)
25
+ @spinner.auto_spin
26
+ sleep seconds
27
+ success("✅ #{message}\n")
28
+ end
29
+
30
+ def quest_complete(quest)
31
+ Fig.new.user_message('jirad HARD')
32
+ sleep 3
33
+ system 'clear'
34
+ success("Congratulations! You completed the #{quest} Quest!")
35
+ Score.new.update_quests(quest)
36
+ end
37
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'terminal'
4
+ require_relative '../../jiraquest/distractions/activities'
5
+ require 'tty-prompt'
6
+ require 'ruby-progressbar'
7
+ require 'timeout'
8
+
9
+ # Simple User Prompts
10
+ class System
11
+ def initialize
12
+ @prompt = TTY::Prompt.new
13
+ end
14
+
15
+ def vpn
16
+ Terminal.new.two_factor
17
+ Terminal.new.r_progress(100)
18
+ Reporter.new.success('Jacked into the network.')
19
+ end
20
+
21
+ def boot
22
+ Activity.new.boot_warning
23
+ if @prompt.yes?('Would you like to boot up your work machine?')
24
+ Reporter.new.timed_success('Booted Up!', 3)
25
+ true
26
+ else
27
+ Activity.new.choose
28
+ boot
29
+ end
30
+ end
31
+
32
+ def stress_vpn
33
+ Timeout.timeout(1) do
34
+ vpn
35
+ end
36
+ rescue Timeout::Error
37
+ @prompt.warn('The 2FA timed out, TYPE FASTER')
38
+ vpn
39
+ end
40
+
41
+ def vpn_expired
42
+ @prompt.error("\nYou return to your machine to find your VPN session has expired!")
43
+ Terminal.new.two_factor
44
+ Terminal.new.r_progress(100)
45
+ end
46
+
47
+ def ide_update
48
+ @prompt.warn("\nThere is an IDE update")
49
+ ide_distractions until @prompt.yes?('Do you update your IDE now?')
50
+ updating
51
+ end
52
+
53
+ def ide_distractions
54
+ Activity.new.choose
55
+ Activity.new.warning
56
+ vpn_expired
57
+ Notifications.new.reddit
58
+ Notifications.new.warning
59
+ end
60
+
61
+ def updating
62
+ puts 'Updating IDE'
63
+ Terminal.new.amazing_update
64
+ end
65
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ruby-progressbar'
4
+
5
+ # Simple User Prompts
6
+ class Terminal
7
+ def initialize
8
+ form = "\e[0;34m%t: |%B|\e[0m"
9
+ @pbar = ProgressBar.create(length: 80, smoothing: 0.3, format: form)
10
+ @prompt = TTY::Prompt.new
11
+ end
12
+
13
+ # Creates a progress bar with random increments of time
14
+ # can be called with an overriding default title
15
+ #
16
+ # Example:
17
+ # Terminal.new.r_progress(10, 'Downloading')
18
+ # Terminal.new.r_progress(200, 'Deleting...')
19
+ #
20
+ def r_progress(duration, title = 'Connecting')
21
+ @pbar.title = title
22
+ 100.times do
23
+ @pbar.increment
24
+ sleep 0.001 * rand(1..duration)
25
+ end
26
+ end
27
+
28
+ # A progress bar with linear increments
29
+ # can be called with an overriding default title
30
+ #
31
+ # Example:
32
+ # Terminal.new.progress('Downloading')
33
+ #
34
+ def progress(title = 'Connecting')
35
+ @pbar.title = title
36
+ 100.times do
37
+ @pbar.increment
38
+ sleep 0.01
39
+ end
40
+ end
41
+
42
+ # Use this for the amazing_update to change titles every n number steps
43
+ def steps_message(steps, title = 'Connecting')
44
+ steps.times do
45
+ @pbar.title = title
46
+ @pbar.increment
47
+ sleep 0.01 * rand(1..20)
48
+ end
49
+ end
50
+
51
+ # rubocop:disable Lint/UselessAssignment
52
+ def amazing_update(_title = 'Connecting')
53
+ steps_message(10)
54
+ steps_message(10, title = 'Contacting Software Sites')
55
+ steps_message(20, title = 'Indexing jiras')
56
+ steps_message(10, title = 'Validating Checksums')
57
+ steps_message(30, title = 'Checking Type Safety')
58
+ steps_message(10, title = 'Deleting Previous Work')
59
+ steps_message(10, title = 'Installing')
60
+ end
61
+ # rubocop:enable Lint/UselessAssignment
62
+
63
+ # rubocop:disable Lint/AmbiguousRegexpLiteral
64
+ def two_factor
65
+ @prompt.mask('Please enter your VPNs 2FA PIN:') do |q|
66
+ q.validate /^\d{6}$/, 'Must be a six digit PIN!'
67
+ end
68
+ end
69
+ # rubocop:enable Lint/AmbiguousRegexpLiteral
70
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'tty-prompt'
4
+
5
+ # Simple User Prompts
6
+ class Prompter
7
+ def initialize
8
+ @prompt = TTY::Prompt.new
9
+ end
10
+
11
+ def confirm
12
+ exit unless @prompt.yes?('Ready to rock, Y/N?')
13
+ system 'clear'
14
+ end
15
+
16
+ def really_sure?
17
+ @prompt.yes?('Are you totally sure, Y/N?')
18
+ end
19
+
20
+ def user
21
+ @prompt.ask('Please enter your username:')
22
+ end
23
+
24
+ def create_user?
25
+ @prompt.yes?('Create a new jiraQuest user?')
26
+ end
27
+
28
+ def resume(user)
29
+ @prompt.yes?("Would you like to resume jiraQuest as #{user}?")
30
+ end
31
+
32
+ def delete(user)
33
+ @prompt.yes?("Would you like to delete the data for #{user}?")
34
+ end
35
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'date/date'
4
+ require_relative 'prompts/prompts'
5
+ require_relative 'user/user'
6
+ require_relative 'game/game'
7
+ require_relative 'assetloader'
metadata ADDED
@@ -0,0 +1,208 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jiraquest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - tcob
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: figlet
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pastel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: ruby-progressbar
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: tty-prompt
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: tty-spinner
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description:
140
+ email:
141
+ - briantcob@gmail.com
142
+ executables:
143
+ - jiraquest
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".rspec"
149
+ - ".rubocop.yml"
150
+ - ".rubocop_todo.yml"
151
+ - ".rubosync.yml"
152
+ - ".travis.yml"
153
+ - CODE_OF_CONDUCT.md
154
+ - CONTRIBUTING.md
155
+ - Gemfile
156
+ - LICENSE
157
+ - README.md
158
+ - Rakefile
159
+ - assets/fonts/big.flf
160
+ - bin/jiraquest
161
+ - jiraquest.gemspec
162
+ - lib/jiraquest.rb
163
+ - lib/jiraquest/distractions/activities.rb
164
+ - lib/jiraquest/distractions/distractions.rb
165
+ - lib/jiraquest/distractions/notifications.rb
166
+ - lib/jiraquest/quests/button.rb
167
+ - lib/jiraquest/quests/quests.rb
168
+ - lib/jiraquest/quests/setup.rb
169
+ - lib/jiraquest/version.rb
170
+ - lib/utils/assetloader.rb
171
+ - lib/utils/date/date.rb
172
+ - lib/utils/game/achievements.rb
173
+ - lib/utils/game/game.rb
174
+ - lib/utils/game/login.rb
175
+ - lib/utils/game/morale.rb
176
+ - lib/utils/game/score.rb
177
+ - lib/utils/prompts/figlet.rb
178
+ - lib/utils/prompts/prompts.rb
179
+ - lib/utils/prompts/reporter.rb
180
+ - lib/utils/prompts/system.rb
181
+ - lib/utils/prompts/terminal.rb
182
+ - lib/utils/user/user.rb
183
+ - lib/utils/utils.rb
184
+ homepage: https://github.com/tcob/jiraquest
185
+ licenses:
186
+ - MIT
187
+ metadata: {}
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 2.7.7
205
+ signing_key:
206
+ specification_version: 4
207
+ summary: Immersive jiraquest Text-based adventure game.
208
+ test_files: []