easy_creds 1.0.1

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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +51 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +165 -0
  5. data/exe/easy_creds +6 -0
  6. data/lib/easy_creds/actions/edit.rb +156 -0
  7. data/lib/easy_creds/actions/editor_edit.rb +70 -0
  8. data/lib/easy_creds/actions/init.rb +93 -0
  9. data/lib/easy_creds/actions/local/delete.rb +44 -0
  10. data/lib/easy_creds/actions/local/edit.rb +13 -0
  11. data/lib/easy_creds/actions/local/editor_edit.rb +13 -0
  12. data/lib/easy_creds/actions/local/init.rb +32 -0
  13. data/lib/easy_creds/actions/local/status.rb +49 -0
  14. data/lib/easy_creds/actions/local/sync_key.rb +63 -0
  15. data/lib/easy_creds/actions/local.rb +31 -0
  16. data/lib/easy_creds/actions/pull.rb +142 -0
  17. data/lib/easy_creds/actions/push.rb +149 -0
  18. data/lib/easy_creds/actions/status.rb +82 -0
  19. data/lib/easy_creds/cli.rb +147 -0
  20. data/lib/easy_creds/config.rb +52 -0
  21. data/lib/easy_creds/configuration.rb +91 -0
  22. data/lib/easy_creds/credentials_io.rb +128 -0
  23. data/lib/easy_creds/differ.rb +41 -0
  24. data/lib/easy_creds/doctor.rb +100 -0
  25. data/lib/easy_creds/env_picker.rb +24 -0
  26. data/lib/easy_creds/flatten.rb +25 -0
  27. data/lib/easy_creds/generators.rb +113 -0
  28. data/lib/easy_creds/init_state.rb +65 -0
  29. data/lib/easy_creds/installer.rb +55 -0
  30. data/lib/easy_creds/onboarding/gem_setup.rb +98 -0
  31. data/lib/easy_creds/onboarding/project_wizard.rb +106 -0
  32. data/lib/easy_creds/onboarding/register_prompt.rb +47 -0
  33. data/lib/easy_creds/onboarding/runner.rb +17 -0
  34. data/lib/easy_creds/onboarding/template_picker.rb +36 -0
  35. data/lib/easy_creds/overlay.rb +71 -0
  36. data/lib/easy_creds/project.rb +74 -0
  37. data/lib/easy_creds/projects/registry.rb +135 -0
  38. data/lib/easy_creds/provider.rb +30 -0
  39. data/lib/easy_creds/providers/base.rb +25 -0
  40. data/lib/easy_creds/providers/one_password.rb +187 -0
  41. data/lib/easy_creds/railtie.rb +10 -0
  42. data/lib/easy_creds/templates/files/default-beastmode.yml +33 -0
  43. data/lib/easy_creds/templates/files/microservice-minimal.yml +7 -0
  44. data/lib/easy_creds/templates/files/rails-api.yml +20 -0
  45. data/lib/easy_creds/templates/files/rails-fullstack.yml +37 -0
  46. data/lib/easy_creds/templates/registry.rb +62 -0
  47. data/lib/easy_creds/templates/renderer.rb +37 -0
  48. data/lib/easy_creds/theme.rb +129 -0
  49. data/lib/easy_creds/thor_cli.rb +299 -0
  50. data/lib/easy_creds/vault_picker.rb +56 -0
  51. data/lib/easy_creds/version.rb +5 -0
  52. data/lib/easy_creds/views/diff_table.rb +36 -0
  53. data/lib/easy_creds/views/header.rb +40 -0
  54. data/lib/easy_creds/views/init_dispatch.rb +132 -0
  55. data/lib/easy_creds/views/init_tree.rb +250 -0
  56. data/lib/easy_creds/views/local_menu.rb +38 -0
  57. data/lib/easy_creds/views/menu.rb +55 -0
  58. data/lib/easy_creds/views/project_picker.rb +56 -0
  59. data/lib/easy_creds/views/settings_menu.rb +108 -0
  60. data/lib/easy_creds/views/templates_menu.rb +142 -0
  61. data/lib/easy_creds/views/welcome_screen.rb +131 -0
  62. data/lib/easy_creds.rb +54 -0
  63. data/lib/tasks/easy_creds.rake +23 -0
  64. metadata +292 -0
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
4
+
5
+ require 'tty-reader'
6
+ require 'tty-cursor'
7
+ require 'tty-screen'
8
+
9
+ module EasyCreds
10
+ module Views
11
+ module WelcomeScreen
12
+ MAX_WIDTH = 100
13
+ PROJECTS_MAX = 6
14
+
15
+ # Returns: Projects::Project | :init_here | :templates | :settings | :quit
16
+ def self.run(registry)
17
+ reader = TTY::Reader.new(interrupt: :signal)
18
+ projects = registry.projects
19
+ .sort_by { |pr| -(pr.last_seen_at&.to_i || 0) }
20
+ .first(PROJECTS_MAX)
21
+ cursor = 0
22
+
23
+ print TTY::Cursor.hide
24
+ redraw(projects, cursor)
25
+
26
+ loop do
27
+ key = reader.read_keypress(nonblock: false)
28
+
29
+ case key
30
+ when "\e[A", 'k'
31
+ cursor = [cursor - 1, 0].max if projects.any?
32
+ when "\e[B", 'j'
33
+ cursor = [cursor + 1, projects.size - 1].min if projects.any?
34
+ when "\r", "\n"
35
+ return projects[cursor] if projects.any?
36
+ when 'i' then return :init_here
37
+ when 't' then return :templates
38
+ when ',' then return :settings
39
+ when 'q' then return :quit
40
+ end
41
+
42
+ redraw(projects, cursor)
43
+ end
44
+ rescue Interrupt
45
+ :quit
46
+ ensure
47
+ print TTY::Cursor.show
48
+ print TTY::Cursor.move_to(0, 0)
49
+ print TTY::Cursor.clear_screen_down
50
+ end
51
+
52
+ def self.redraw(projects, cursor)
53
+ width = [TTY::Screen.width, MAX_WIDTH].min
54
+ buf = +''
55
+ buf << "\e[H\e[J"
56
+
57
+ buf << draw_banner(width)
58
+ buf << "\n"
59
+ buf << " #{Theme.tprompt_line}\n\n"
60
+
61
+ if projects.any?
62
+ buf << " #{Theme.dim('── Recent projects ' + '─' * [width - 22, 4].max)}\n\n"
63
+ projects.each_with_index { |pr, i| buf << project_row(pr, i == cursor) }
64
+ buf << "\n"
65
+ end
66
+
67
+ buf << draw_tiles(width)
68
+
69
+ hints = [['↑↓', 'nav'], ['↵', 'open'], ['i', 'init'], ['t', 'templates'],
70
+ [',', 'settings'], ['q', 'quit']]
71
+ key_hints = hints.map { |k, l| "#{Theme.kbd(k)} #{Theme.dim(l)}" }.join(' ')
72
+ buf << " #{Theme.dim('──')} #{key_hints} #{Theme.dim('──')}\n"
73
+
74
+ print buf
75
+ end
76
+
77
+ def self.draw_banner(width)
78
+ inner = width - 4
79
+ vault = EasyCreds.config.default_vault
80
+
81
+ lines = Theme::BANNER_ART.map { |l| " #{Theme.accent(l)}" }
82
+ lines << ''
83
+ lines << " #{Theme.dim("v#{EasyCreds::VERSION} · credentials ↔ 1Password sync · vault: #{vault || '(not set)'}")}"
84
+
85
+ rows = lines.map { |l| "#{Theme.box_side} #{Theme.rpad(l, inner)} #{Theme.box_side}" }
86
+ "#{Theme.box_top(width)}\n#{rows.join("\n")}\n#{Theme.box_bottom(width)}\n"
87
+ end
88
+
89
+ def self.project_row(pr, active)
90
+ miss = pr.exists_on_disk? ? '' : " #{Theme.error('✖ missing')}"
91
+ kind = pr.rails? ? Theme.ok('[rails]') : Theme.accent('[std]')
92
+ seen = Views::ProjectPicker.relative_time(pr.last_seen_at)
93
+ prefix = active ? " #{Theme.accent('›')} " : ' '
94
+ name = Theme.bold(pr.name.ljust(24))
95
+ path = Theme.dim(pr.display_path.ljust(32))
96
+ "#{prefix}#{name} #{kind} #{path} #{Theme.dim(seen)}#{miss}\n"
97
+ end
98
+
99
+ def self.draw_tiles(width)
100
+ inner_w = [(width - 8) / 2, 24].max
101
+ tiles = [
102
+ { key: 'i', title: 'init here', desc: 'register this directory' },
103
+ { key: 't', title: 'templates', desc: 'manage template library' },
104
+ { key: ',', title: 'settings', desc: 'edit global config' },
105
+ { key: 'q', title: 'quit', desc: 'exit easy_creds' }
106
+ ]
107
+
108
+ out = +''
109
+ tiles.each_slice(2) do |left, right|
110
+ l_title = " #{Theme.kbd(left[:key])} #{Theme.bold(left[:title])}"
111
+ r_title = " #{Theme.kbd(right[:key])} #{Theme.bold(right[:title])}"
112
+ l_desc = " #{Theme.dim(left[:desc])}"
113
+ r_desc = " #{Theme.dim(right[:desc])}"
114
+ top = Theme.dim("╭#{'─' * inner_w}╮")
115
+ bot = Theme.dim("╰#{'─' * inner_w}╯")
116
+ sep = Theme.box_side
117
+
118
+ out << " #{top} #{top}\n"
119
+ out << " #{sep}#{Theme.rpad(l_title, inner_w)}#{sep} #{sep}#{Theme.rpad(r_title, inner_w)}#{sep}\n"
120
+ out << " #{sep}#{Theme.rpad(l_desc, inner_w)}#{sep} #{sep}#{Theme.rpad(r_desc, inner_w)}#{sep}\n"
121
+ out << " #{bot} #{bot}\n\n"
122
+ end
123
+ out
124
+ end
125
+
126
+ private_class_method :redraw, :draw_banner, :project_row, :draw_tiles
127
+ end
128
+ end
129
+ end
130
+
131
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
data/lib/easy_creds.rb ADDED
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'easy_creds/version'
4
+ require 'easy_creds/configuration'
5
+ require 'easy_creds/project'
6
+ require 'easy_creds/flatten'
7
+ require 'easy_creds/differ'
8
+ require 'easy_creds/env_picker'
9
+ require 'easy_creds/theme'
10
+ require 'easy_creds/generators'
11
+ require 'easy_creds/init_state'
12
+ require 'easy_creds/config'
13
+ require 'easy_creds/credentials_io'
14
+ require 'easy_creds/overlay'
15
+ require 'easy_creds/providers/base'
16
+ require 'easy_creds/providers/one_password'
17
+ require 'easy_creds/provider'
18
+ require 'easy_creds/views/diff_table'
19
+ require 'easy_creds/views/header'
20
+ require 'easy_creds/views/menu'
21
+ require 'easy_creds/views/local_menu'
22
+ require 'easy_creds/views/init_dispatch'
23
+ require 'easy_creds/views/init_tree'
24
+ require 'easy_creds/actions/local/status'
25
+ require 'easy_creds/actions/local/init'
26
+ require 'easy_creds/actions/local/edit'
27
+ require 'easy_creds/actions/local/editor_edit'
28
+ require 'easy_creds/actions/local/sync_key'
29
+ require 'easy_creds/actions/local/delete'
30
+ require 'easy_creds/actions/status'
31
+ require 'easy_creds/actions/push'
32
+ require 'easy_creds/actions/pull'
33
+ require 'easy_creds/actions/init'
34
+ require 'easy_creds/actions/edit'
35
+ require 'easy_creds/actions/editor_edit'
36
+ require 'easy_creds/actions/local'
37
+ require 'easy_creds/cli'
38
+ require 'easy_creds/vault_picker'
39
+ require 'easy_creds/templates/registry'
40
+ require 'easy_creds/templates/renderer'
41
+ require 'easy_creds/onboarding/gem_setup'
42
+ require 'easy_creds/onboarding/project_wizard'
43
+ require 'easy_creds/onboarding/template_picker'
44
+ require 'easy_creds/onboarding/runner'
45
+ require 'easy_creds/onboarding/register_prompt'
46
+ require 'easy_creds/projects/registry'
47
+ require 'easy_creds/views/project_picker'
48
+ require 'easy_creds/views/welcome_screen'
49
+ require 'easy_creds/views/templates_menu'
50
+ require 'easy_creds/views/settings_menu'
51
+ require 'easy_creds/installer'
52
+ require 'easy_creds/doctor'
53
+ require 'easy_creds/thor_cli'
54
+ require 'easy_creds/railtie' if defined?(Rails::Railtie)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :credentials do
4
+ desc 'Interactive TUI to sync Rails credentials with the configured provider'
5
+ task :sync do
6
+ require 'easy_creds'
7
+ EasyCreds::CLI.start(project: EasyCreds::Project.detect(Rails.root))
8
+ end
9
+ end
10
+
11
+ namespace :easy_creds do
12
+ desc 'Install overlay initializer + gitignore rules (idempotent)'
13
+ task :install do
14
+ require 'easy_creds'
15
+ EasyCreds::Installer.new(Rails.root).run
16
+ end
17
+
18
+ desc 'Run the per-project onboarding wizard'
19
+ task :onboard do
20
+ require 'easy_creds'
21
+ EasyCreds::Onboarding::Runner.start(project: EasyCreds::Project.detect(Rails.root))
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,292 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: easy_creds
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Pawel Niemczyk
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: activesupport
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '7.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '7.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: thor
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.3'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.3'
40
+ - !ruby/object:Gem::Dependency
41
+ name: tty-prompt
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.23'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.23'
54
+ - !ruby/object:Gem::Dependency
55
+ name: tty-spinner
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.9'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.9'
68
+ - !ruby/object:Gem::Dependency
69
+ name: tty-table
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.12'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.12'
82
+ - !ruby/object:Gem::Dependency
83
+ name: tty-box
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.7'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.7'
96
+ - !ruby/object:Gem::Dependency
97
+ name: tty-screen
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.8'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '0.8'
110
+ - !ruby/object:Gem::Dependency
111
+ name: tty-cursor
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.7'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0.7'
124
+ - !ruby/object:Gem::Dependency
125
+ name: tty-reader
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0.9'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '0.9'
138
+ - !ruby/object:Gem::Dependency
139
+ name: pastel
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.8'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.8'
152
+ - !ruby/object:Gem::Dependency
153
+ name: minitest
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '5.20'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '5.20'
166
+ - !ruby/object:Gem::Dependency
167
+ name: rake
168
+ requirement: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '13.0'
173
+ type: :development
174
+ prerelease: false
175
+ version_requirements: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '13.0'
180
+ - !ruby/object:Gem::Dependency
181
+ name: simplecov
182
+ requirement: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '0.22'
187
+ type: :development
188
+ prerelease: false
189
+ version_requirements: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '0.22'
194
+ description: Onboarding wizard, encrypted-credentials TUI, and 1Password sync. Works
195
+ inside Rails or standalone.
196
+ email:
197
+ - pniemczyk.info@gmail.com
198
+ executables:
199
+ - easy_creds
200
+ extensions: []
201
+ extra_rdoc_files: []
202
+ files:
203
+ - CHANGELOG.md
204
+ - LICENSE.txt
205
+ - README.md
206
+ - exe/easy_creds
207
+ - lib/easy_creds.rb
208
+ - lib/easy_creds/actions/edit.rb
209
+ - lib/easy_creds/actions/editor_edit.rb
210
+ - lib/easy_creds/actions/init.rb
211
+ - lib/easy_creds/actions/local.rb
212
+ - lib/easy_creds/actions/local/delete.rb
213
+ - lib/easy_creds/actions/local/edit.rb
214
+ - lib/easy_creds/actions/local/editor_edit.rb
215
+ - lib/easy_creds/actions/local/init.rb
216
+ - lib/easy_creds/actions/local/status.rb
217
+ - lib/easy_creds/actions/local/sync_key.rb
218
+ - lib/easy_creds/actions/pull.rb
219
+ - lib/easy_creds/actions/push.rb
220
+ - lib/easy_creds/actions/status.rb
221
+ - lib/easy_creds/cli.rb
222
+ - lib/easy_creds/config.rb
223
+ - lib/easy_creds/configuration.rb
224
+ - lib/easy_creds/credentials_io.rb
225
+ - lib/easy_creds/differ.rb
226
+ - lib/easy_creds/doctor.rb
227
+ - lib/easy_creds/env_picker.rb
228
+ - lib/easy_creds/flatten.rb
229
+ - lib/easy_creds/generators.rb
230
+ - lib/easy_creds/init_state.rb
231
+ - lib/easy_creds/installer.rb
232
+ - lib/easy_creds/onboarding/gem_setup.rb
233
+ - lib/easy_creds/onboarding/project_wizard.rb
234
+ - lib/easy_creds/onboarding/register_prompt.rb
235
+ - lib/easy_creds/onboarding/runner.rb
236
+ - lib/easy_creds/onboarding/template_picker.rb
237
+ - lib/easy_creds/overlay.rb
238
+ - lib/easy_creds/project.rb
239
+ - lib/easy_creds/projects/registry.rb
240
+ - lib/easy_creds/provider.rb
241
+ - lib/easy_creds/providers/base.rb
242
+ - lib/easy_creds/providers/one_password.rb
243
+ - lib/easy_creds/railtie.rb
244
+ - lib/easy_creds/templates/files/default-beastmode.yml
245
+ - lib/easy_creds/templates/files/microservice-minimal.yml
246
+ - lib/easy_creds/templates/files/rails-api.yml
247
+ - lib/easy_creds/templates/files/rails-fullstack.yml
248
+ - lib/easy_creds/templates/registry.rb
249
+ - lib/easy_creds/templates/renderer.rb
250
+ - lib/easy_creds/theme.rb
251
+ - lib/easy_creds/thor_cli.rb
252
+ - lib/easy_creds/vault_picker.rb
253
+ - lib/easy_creds/version.rb
254
+ - lib/easy_creds/views/diff_table.rb
255
+ - lib/easy_creds/views/header.rb
256
+ - lib/easy_creds/views/init_dispatch.rb
257
+ - lib/easy_creds/views/init_tree.rb
258
+ - lib/easy_creds/views/local_menu.rb
259
+ - lib/easy_creds/views/menu.rb
260
+ - lib/easy_creds/views/project_picker.rb
261
+ - lib/easy_creds/views/settings_menu.rb
262
+ - lib/easy_creds/views/templates_menu.rb
263
+ - lib/easy_creds/views/welcome_screen.rb
264
+ - lib/tasks/easy_creds.rake
265
+ homepage: https://github.com/pniemczyk/easy_creds
266
+ licenses:
267
+ - MIT
268
+ metadata:
269
+ rubygems_mfa_required: 'true'
270
+ homepage_uri: https://github.com/pniemczyk/easy_creds
271
+ source_code_uri: https://github.com/pniemczyk/easy_creds/tree/main
272
+ documentation_uri: https://pniemczyk.github.io/easy_creds/
273
+ changelog_uri: https://github.com/pniemczyk/easy_creds/blob/main/CHANGELOG.md
274
+ bug_tracker_uri: https://github.com/pniemczyk/easy_creds/issues
275
+ rdoc_options: []
276
+ require_paths:
277
+ - lib
278
+ required_ruby_version: !ruby/object:Gem::Requirement
279
+ requirements:
280
+ - - ">="
281
+ - !ruby/object:Gem::Version
282
+ version: 3.2.0
283
+ required_rubygems_version: !ruby/object:Gem::Requirement
284
+ requirements:
285
+ - - ">="
286
+ - !ruby/object:Gem::Version
287
+ version: '0'
288
+ requirements: []
289
+ rubygems_version: 4.0.6
290
+ specification_version: 4
291
+ summary: Interactive TUI to sync encrypted credentials with 1Password
292
+ test_files: []