env_compare 0.1.1 → 0.1.3.pre.alpha

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
  SHA256:
3
- metadata.gz: 62c65e23128c8437144d682263d6ad17a22485a1ffc4a68a3adcd8b0125e7bc3
4
- data.tar.gz: 212ecb5eef50ee9003c4469cd454c57383cb95040620ea507c7bd27f861bb00b
3
+ metadata.gz: c1119534c3a09963aa5e16f2c11730ea7915f78c1a5efe8b3471d952bf3ec595
4
+ data.tar.gz: 79b778d047d032173624c4ea612d91684b897685268cfe18e20e22cded13df42
5
5
  SHA512:
6
- metadata.gz: 59cae1f9c4d5484e0e74e455748fe0dfaf13a1935354b8c2b7cd62968ad0af418ece27fc0381cfe5c1703e0c58a37a6ecaa3242a8b85aab2a5716faac8b49cf0
7
- data.tar.gz: eaf22b1743bb0c750c7d6bf494b48cef5206228cfec1931450be23af3fd10ee4cc5c142e9f25130bc84ab871a28c08383478c13a5ff2540798424d0ee8ffc5dd
6
+ metadata.gz: 9cf797bd514f23db0ccc51f81d29021fc8fb296031d52b119a82ffd327a033f48e778ff17892d05da68f6ab3fd0165a80db561661651210b3781074bff10b596
7
+ data.tar.gz: 3173d7ecf3810de57da910c86bbddbc5a70276a98056705251b8b80130f0379ad8506987f7055dfc14f528725753898abb1c95199e337b084fd32335c088f673
@@ -16,14 +16,56 @@ require:
16
16
  Layout/LineLength:
17
17
  Max: 120
18
18
 
19
- Style/Documentation:
20
- Enabled: false
21
-
22
- Metrics/MethodLength:
23
- Max: 15
24
-
25
19
  Layout/DotPosition:
26
20
  EnforcedStyle: trailing
27
21
 
22
+ Layout/EmptyLinesAroundAttributeAccessor:
23
+ Enabled: true
24
+
28
25
  Layout/MultilineMethodCallIndentation:
29
26
  EnforcedStyle: indented
27
+
28
+ Layout/SpaceAroundMethodCallOperator:
29
+ Enabled: true
30
+
31
+
32
+ Lint/DeprecatedOpenSSLConstant:
33
+ Enabled: true
34
+
35
+ Lint/MixedRegexpCaptureTypes:
36
+ Enabled: true
37
+
38
+ Lint/RaiseException:
39
+ Enabled: true
40
+
41
+ Lint/StructNewOverride:
42
+ Enabled: true
43
+
44
+
45
+ Metrics/MethodLength:
46
+ Max: 15
47
+
48
+
49
+ Style/Documentation:
50
+ Enabled: false
51
+
52
+ Style/ExponentialNotation:
53
+ Enabled: true
54
+
55
+ Style/HashEachMethods:
56
+ Enabled: true
57
+
58
+ Style/HashTransformKeys:
59
+ Enabled: true
60
+
61
+ Style/HashTransformValues:
62
+ Enabled: true
63
+
64
+ Style/RedundantRegexpCharacterClass:
65
+ Enabled: true
66
+
67
+ Style/RedundantRegexpEscape:
68
+ Enabled: true
69
+
70
+ Style/SlicingWithRange:
71
+ Enabled: true
data/Gemfile CHANGED
@@ -1,7 +1,9 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in env_compare.gemspec
4
6
  gemspec
5
7
 
6
- gem "rake", "~> 12.0"
7
- gem "rspec", "~> 3.0"
8
+ gem 'rake', '~> 12.0'
9
+ gem 'rspec', '~> 3.0'
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- env_compare (0.1.0)
4
+ env_compare (0.1.3.pre.alpha)
5
5
  launchy
6
+ platform-api
6
7
  thor
7
8
 
8
9
  GEM
@@ -13,18 +14,32 @@ GEM
13
14
  ast (2.4.1)
14
15
  coderay (1.1.3)
15
16
  diff-lcs (1.3)
17
+ erubis (2.7.0)
18
+ excon (0.76.0)
19
+ heroics (0.1.1)
20
+ erubis (~> 2.0)
21
+ excon
22
+ moneta
23
+ multi_json (>= 1.9.2)
16
24
  launchy (2.5.0)
17
25
  addressable (~> 2.7)
18
26
  method_source (1.0.0)
27
+ moneta (1.0.0)
28
+ multi_json (1.15.0)
19
29
  parallel (1.19.1)
20
30
  parser (2.7.1.3)
21
31
  ast (~> 2.4.0)
32
+ platform-api (3.0.0)
33
+ heroics (~> 0.1.1)
34
+ moneta (~> 1.0.0)
35
+ rate_throttle_client (~> 0.1.0)
22
36
  pry (0.13.1)
23
37
  coderay (~> 1.1)
24
38
  method_source (~> 1.0)
25
39
  public_suffix (4.0.5)
26
40
  rainbow (3.0.0)
27
41
  rake (12.3.3)
42
+ rate_throttle_client (0.1.2)
28
43
  regexp_parser (1.7.1)
29
44
  rexml (3.2.4)
30
45
  rspec (3.9.0)
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Jay Dorsey
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -11,47 +11,99 @@ production environment variables
11
11
  This gem helps pull down the environment variables and give you
12
12
  a little interface to view & compare them with (via a UI)
13
13
 
14
- No server; it's all done via a CLI. It's really just a wrapper around
15
- some commands around the [heroku cli](https://devcenter.heroku.com/articles/heroku-cli) that does some formatting and
16
- munging of the output so you don't have to copy it all to Excel
17
-
18
- This gem wraps the heroku CLI tool to generates a small temporary
19
- HTML file & opens it using [launchy](https://github.com/copiousfreetime/launchy)
14
+ The heavy lifting is done via the [heroku platform-api gem](https://github.com/heroku/platform-api)
15
+ to retrieve environment variables, format them in an HTML page, and
16
+ generate a small HTML file and open it with [launchy](https://github.com/copiousfreetime/launchy)
20
17
 
21
18
  It automates a few things:
22
19
  - Hides environment variables that match across all environments
23
20
  - Puts them in alpha order
24
21
 
25
22
  It's primarily intended to compare pre-production ENV variables
23
+ across similar/identical environments
26
24
 
27
25
  ## Installation
28
26
 
29
- # Install heroku CLI
30
- brew tap heroku/brew && brew install heroku
27
+ ### Prerequisites
31
28
 
32
- git clone https://github.com/jaydorsey/env_compare.git && cd env_compare
33
- bundle
34
- rake build
35
- gem install pkg/env_compare-0.1.0.gem
29
+ ```bash
30
+ # Install Heroku CLI
31
+ brew tap heroku/brew && brew install heroku
32
+
33
+ # Login with Heroku CLI
34
+ heroku login
35
+
36
+ # Install the heroku oauth plugin to generate an OAuth token
37
+ heroku plugins:install heroku-cli-oauth
38
+
39
+ # Create a token to access your applications
40
+ heroku authorizations:create -d "Platform API token for environment variables"
41
+
42
+ # Set the Token from above to an environment variable
43
+ export OAUTH_TOKEN=<token>
44
+ ```
45
+
46
+ If you want to add the environment variable to your shell permanently, you can
47
+ run a variation of the command below:
36
48
 
37
- After installation you should have access to the `ec` executable wrapper
49
+ ```bash
50
+ # Add permanently to `.bash_profile`
51
+ echo 'export OAUTH_TOKEN=<token>' >>~/.bash_profile
52
+ ```
38
53
 
39
- > Note: There's no published gem yet. I'm not really sure how useful this is
40
- > but you can install via above or use the development commands below if you
41
- > don't want to build & install the gem locally
54
+ ### Install gem
55
+ ```bash
56
+ gem install env_compare
57
+ ```
58
+
59
+ After installation you should have access to the `ec` executable wrapper.
42
60
 
43
61
  ## Usage
62
+ Use `ec` command to start comparing 2 or more heroku application environment variables.
63
+
64
+ When only one application name is specified, output is shown in cli. Otherwise, your default browser is launched.
65
+
66
+ ## Compariing environment variables
67
+
68
+ ### Show **differences** **default*
69
+ ```bash
70
+ ec diff heroku-app-name1 heroku-app-name2 heroku-app-name3
71
+ ```
72
+
73
+ ### Show **all**
74
+ add `--all` option:
75
+ ```bash
76
+ ec diff --all heroku-app-name1 heroku-app-name2 heroku-app-name3
77
+ ```
78
+
79
+ ### Themes
80
+ - `--theme dark` **default**
81
+ - `--theme light`
82
+
83
+ For Example:
84
+ ```bash
85
+ ec diff --theme light heroku-app-name1 heroku-app-name2
86
+ ```
87
+
88
+ ## Updating environment variables across multiple apps
44
89
 
45
- First, you need to login with heroku cli:
90
+ You can use `ec update` to set or clear an environment variable across multiple Heroku
91
+ applications.
46
92
 
47
- heroku login
93
+ ### Update an environment variable
48
94
 
49
- Then, you can use the `ec` command
95
+ ```bash
96
+ ec update heroku-app-name1 heroku-app-name2 heroku-app-name3 --key=MY_KEY --value=asdf
97
+ ```
50
98
 
51
- Create a file showing differences between 2 or more heroku applications:
99
+ ### Clear an environment variable
52
100
 
53
- ec diff heroku-app-name1 heroku-app-name2 heroku-app-name3
101
+ The default key value is nil; omit the `--key` argument if you want to clear an
102
+ environment variable.
54
103
 
104
+ ```bash
105
+ ec update heroku-app-name1 heroku-app-name2 heroku-app-name3 --key=MY_KEY
106
+ ```
55
107
  ## Development
56
108
 
57
109
  To test this on your machine locally, after cloning the repo:
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
- task :default => :spec
8
+ task default: :spec
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "env_compare"
3
+ require 'bundler/setup'
4
+ require 'env_compare'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- require "pry"
10
+ require 'pry'
11
11
  Pry.start
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_dependency 'launchy'
31
31
  spec.add_dependency 'thor'
32
+ spec.add_dependency 'platform-api'
32
33
 
33
34
  spec.add_development_dependency 'pry'
34
35
  spec.add_development_dependency 'rspec'
data/exe/ec CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "env_compare"
3
+ require 'env_compare'
4
4
 
5
- EnvCompare::CLI.start(ARGV)
5
+ EnvCompare::Cli.start(ARGV)
@@ -3,99 +3,7 @@
3
3
  require 'env_compare/errors'
4
4
  require 'env_compare/name_space'
5
5
  require 'env_compare/version'
6
- require 'erb'
7
- require 'launchy'
8
- require 'securerandom'
9
- require 'thor'
10
- require 'pry'
6
+ require 'env_compare/cli'
11
7
 
12
8
  module EnvCompare
13
- class CLI < Thor
14
- attr_accessor :envs
15
-
16
- desc 'version', 'list version'
17
- def version
18
- puts EnvCompare::VERSION
19
- end
20
-
21
- desc 'list ENVIRONMENT', 'List environment variables for a single environment'
22
-
23
- def list(environment)
24
- output = `heroku config -a #{environment}`
25
- puts output
26
- end
27
-
28
- option :theme, type: :string, default: 'dark', desc: 'Theme to use'
29
- option :all, type: :boolean, default: false, desc: 'Display all ENV variables, including matches'
30
- desc 'diff heroku-app-name-1 heroku-app-name-2', 'Compare environment variables for 2+ environments'
31
- def diff(*envs)
32
- return list(envs.first) if envs.size == 1
33
-
34
- heroku_results(envs)
35
-
36
- # https://stackoverflow.com/a/5462069/2892779
37
- html =
38
- theme(options[:theme]).
39
- result(
40
- ::EnvCompare::NameSpace.new(data: calculated_output(envs), headers: ['KEY', envs].flatten).get_binding
41
- )
42
-
43
- save_and_open_file(html)
44
- end
45
-
46
- private
47
-
48
- def all_keys
49
- @all_keys ||= Set.new
50
- end
51
-
52
- def calculated_output(envs)
53
- all_keys.sort.map do |key|
54
- results = envs.map { |env| heroku_results[env][key] }
55
- next if results.uniq.size == 1 && !options[:all]
56
-
57
- [key, *results]
58
- end.compact
59
- end
60
-
61
- def heroku_results(envs = nil)
62
- @heroku_results ||=
63
- envs.each_with_object({}) do |env, obj|
64
- obj[env] = {}
65
- lines = `heroku config -a #{env}`.split("\n").drop(1)
66
-
67
- lines.each do |line|
68
- key, _, value = line.partition(':')
69
- obj[env][key.strip] = value.strip
70
-
71
- all_keys << key.strip
72
- end
73
- end
74
- end
75
-
76
- def save_and_open_file(html)
77
- filename = "#{SecureRandom.hex(32)}.html"
78
- output = File.open(filename, 'w')
79
- output.write(html)
80
- output.close
81
-
82
- full_path = File.join(Dir.pwd, output.path)
83
-
84
- Launchy.open(full_path)
85
-
86
- sleep(1)
87
-
88
- File.delete(full_path)
89
- end
90
-
91
- def theme(file)
92
- return ERB.new(File.read(theme_path(file))) if File.exist?(theme_path(file))
93
-
94
- raise MissingThemeError
95
- end
96
-
97
- def theme_path(file)
98
- @theme_path ||= File.join(File.dirname(__dir__), 'themes', "#{file}.erb")
99
- end
100
- end
101
9
  end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'erb'
4
+ require 'launchy'
5
+ require 'securerandom'
6
+ require 'platform-api'
7
+ require 'pry'
8
+ require 'thor'
9
+
10
+ module EnvCompare
11
+ class Cli < Thor
12
+ attr_accessor :envs
13
+
14
+ desc 'version', 'list version'
15
+ def version
16
+ puts EnvCompare::VERSION
17
+ end
18
+
19
+ desc 'list ENVIRONMENT', 'List environment variables for a single environment'
20
+
21
+ def list(environment)
22
+ output = `heroku config -a #{environment}`
23
+ puts output
24
+ end
25
+
26
+ option :theme, type: :string, default: 'dark', desc: 'Theme to use'
27
+ option :all, type: :boolean, default: false, desc: 'Display all ENV variables, including matches'
28
+ desc 'diff heroku-app-name-1 heroku-app-name-2', 'Compare environment variables for 2+ environments'
29
+ def diff(*envs)
30
+ return list(envs.first) if envs.size == 1
31
+
32
+ heroku_results(envs)
33
+
34
+ # https://stackoverflow.com/a/5462069/2892779
35
+ html =
36
+ theme(options[:theme]).
37
+ result(
38
+ ::EnvCompare::NameSpace.new(data: calculated_output(envs), headers: ['KEY', envs].flatten).get_binding
39
+ )
40
+
41
+ save_and_open_file(html)
42
+ end
43
+
44
+ # ec update app1 app2 KEY_NAME value
45
+ option :key, type: :string, desc: 'Key name'
46
+ option :value, type: :string, default: nil, desc: 'Value of key'
47
+ desc 'update heroku-app-name-1 heroku-app-name-2 MY_KEY test', 'Update environment variable for 1+ environments'
48
+ def update(*apps)
49
+ apps.each do |app|
50
+ update_config(app, { options[:key] => options[:value] })
51
+ end
52
+ end
53
+
54
+ private
55
+
56
+ def all_keys
57
+ @all_keys ||= Set.new
58
+ end
59
+
60
+ def calculated_output(envs)
61
+ all_keys.sort.map do |key|
62
+ results = envs.map { |env| heroku_results[env][key] }
63
+ next if results.uniq.size == 1 && !options[:all]
64
+
65
+ [key, *results]
66
+ end.compact
67
+ end
68
+
69
+ def heroku_results(app_names = nil)
70
+ @heroku_results ||=
71
+ app_names.each_with_object({}) do |app_name, obj|
72
+ obj[app_name] = {}
73
+
74
+ env_vars = config_vars_for_app(app_name)
75
+
76
+ env_vars.each do |key, value|
77
+ obj[app_name][key] = value
78
+
79
+ all_keys << key
80
+ end
81
+ end
82
+ end
83
+
84
+ def save_and_open_file(html)
85
+ filename = "#{SecureRandom.hex(32)}.html"
86
+ output = File.open(filename, 'w')
87
+ output.write(html)
88
+ output.close
89
+
90
+ full_path = File.join(Dir.pwd, output.path)
91
+
92
+ Launchy.open(full_path)
93
+
94
+ sleep(1)
95
+
96
+ File.delete(full_path)
97
+ end
98
+
99
+ def config_vars_for_app(app_name)
100
+ heroku.config_var.info_for_app(app_name)
101
+ end
102
+
103
+ def heroku
104
+ @heroku ||= PlatformAPI.connect_oauth(ENV['OAUTH_TOKEN'])
105
+ end
106
+
107
+ def theme(file)
108
+ return ERB.new(File.read(theme_path(file))) if File.exist?(theme_path(file))
109
+
110
+ raise MissingThemeError
111
+ end
112
+
113
+ def theme_path(file)
114
+ @theme_path ||= File.join(File.dirname(__dir__), '..', 'themes', "#{file}.erb")
115
+ end
116
+
117
+ def update_config(app, body)
118
+ heroku.config_var.update(app, body)
119
+ end
120
+ end
121
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EnvCompare
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.3-alpha'
5
5
  end
@@ -1,23 +1,34 @@
1
1
  <html>
2
2
  <head>
3
3
  <style>
4
+ :root {
5
+ --black: #000;
6
+ --blue: #409cff;
7
+ --gray-object-only: #636366;
8
+ --orange: #ffb340;
9
+ --purple: #da8fff;
10
+ }
11
+
4
12
  body {
5
- background: #000;
13
+ background: var(--black);
6
14
  font-family: Arial, Helvetica, sans-serif;
7
15
  }
16
+
8
17
  table {
9
- color: #da8fff;
18
+ color: var(--purple);
10
19
  table-layout: fixed;
11
20
  width: 100%;
12
21
  }
13
22
 
14
- table, th, td {
15
- border: 1px solid #636366;
23
+ table,
24
+ th,
25
+ td {
26
+ border: 1px solid var(--gray-object-only);
16
27
  border-collapse: collapse;
17
28
  }
18
29
 
19
30
  th {
20
- color: #ffb340;
31
+ color: var(--orange);
21
32
  letter-spacing: 1px;
22
33
  }
23
34
 
@@ -27,31 +38,12 @@
27
38
  }
28
39
 
29
40
  td:first-child {
30
- color: #409cff;
41
+ color: var(--blue);
31
42
  }
32
43
  </style>
33
44
  </head>
34
45
  <body>
35
- <table>
36
- <tr>
37
- <% headers.each_with_index do |header, idx| %>
38
- <th>
39
- <%= header %>&nbsp;
40
- (<%= data.map { |col| col[idx] }.compact.size - 1 %> keys)
41
- </th>
42
- <% end %>
43
- </tr>
44
- <% data.each do |row| %>
45
- <tr>
46
- <% row.each do |cell| %>
47
- <td>
48
- <% unless cell.nil? %>
49
- <code><%= cell %></code>
50
- <% end %>
51
- </td>
52
- <% end %>
53
- </tr>
54
- <% end %>
55
- </table>
46
+ <% table_template = EnvCompare::NameSpace.new(headers: headers, data: data) %>
47
+ <%= ERB.new(File.new("themes/table_template.erb").read).result(table_template.get_binding) %>
56
48
  </body>
57
49
  </html>
@@ -1,23 +1,33 @@
1
1
  <html>
2
2
  <head>
3
3
  <style>
4
+ :root {
5
+ --black: #000;
6
+ --blue: #0040dd;
7
+ --gray: #545456;
8
+ --white: #fff;
9
+ }
10
+
4
11
  body {
5
- background: #fff;
12
+ background: var(--white);
6
13
  font-family: Arial, Helvetica, sans-serif;
7
14
  }
15
+
8
16
  table {
9
- color: #000;
17
+ color: var(--black);
10
18
  table-layout: fixed;
11
19
  width: 100%;
12
20
  }
13
21
 
14
- table, th, td {
15
- border: 1px solid #636366;
22
+ table,
23
+ th,
24
+ td {
25
+ border: 1px solid var(--gray);
16
26
  border-collapse: collapse;
17
27
  }
18
28
 
19
29
  th {
20
- color: #000;
30
+ color: var(--black);
21
31
  letter-spacing: 1px;
22
32
  }
23
33
 
@@ -27,31 +37,12 @@
27
37
  }
28
38
 
29
39
  td:first-child {
30
- color: #409cff;
40
+ color: var(--blue);
31
41
  }
32
42
  </style>
33
43
  </head>
34
44
  <body>
35
- <table>
36
- <tr>
37
- <% headers.each_with_index do |header, idx| %>
38
- <th>
39
- <%= header %>&nbsp;
40
- (<%= data.map { |col| col[idx] }.compact.size - 1 %> keys)
41
- </th>
42
- <% end %>
43
- </tr>
44
- <% data.each do |row| %>
45
- <tr>
46
- <% row.each do |cell| %>
47
- <td>
48
- <% unless cell.nil? %>
49
- <code><%= cell %></code>
50
- <% end %>
51
- </td>
52
- <% end %>
53
- </tr>
54
- <% end %>
55
- </table>
45
+ <% table_template = EnvCompare::NameSpace.new(headers: headers, data: data) %>
46
+ <%= ERB.new(File.new("themes/table_template.erb").read).result(table_template.get_binding) %>
56
47
  </body>
57
48
  </html>
@@ -0,0 +1,26 @@
1
+ <table>
2
+ <thead>
3
+ <tr>
4
+ <% headers.each_with_index do |header, idx| %>
5
+ <th>
6
+ <%= header %>&nbsp;
7
+ (<%= data.map { |col| col[idx] }.compact.size %>)
8
+ </th>
9
+ <% end %>
10
+ </tr>
11
+ </thead>
12
+
13
+ <tbody>
14
+ <% data.each do |row| %>
15
+ <tr>
16
+ <% row.each do |cell| %>
17
+ <td>
18
+ <% unless cell.nil? %>
19
+ <code><%= cell %></code>
20
+ <% end %>
21
+ </td>
22
+ <% end %>
23
+ </tr>
24
+ <% end %>
25
+ </tbody>
26
+ </table>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: env_compare
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3.pre.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jay Dorsey
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-12 00:00:00.000000000 Z
11
+ date: 2020-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: launchy
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: platform-api
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: pry
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -109,6 +123,7 @@ files:
109
123
  - CHANGELOG.md
110
124
  - Gemfile
111
125
  - Gemfile.lock
126
+ - LICENSE
112
127
  - README.md
113
128
  - Rakefile
114
129
  - bin/console
@@ -116,11 +131,13 @@ files:
116
131
  - env_compare.gemspec
117
132
  - exe/ec
118
133
  - lib/env_compare.rb
134
+ - lib/env_compare/cli.rb
119
135
  - lib/env_compare/errors.rb
120
136
  - lib/env_compare/name_space.rb
121
137
  - lib/env_compare/version.rb
122
138
  - themes/dark.erb
123
139
  - themes/light.erb
140
+ - themes/table_template.erb
124
141
  homepage: https://jaydorsey.com/
125
142
  licenses: []
126
143
  metadata:
@@ -139,11 +156,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
156
  version: 2.3.0
140
157
  required_rubygems_version: !ruby/object:Gem::Requirement
141
158
  requirements:
142
- - - ">="
159
+ - - ">"
143
160
  - !ruby/object:Gem::Version
144
- version: '0'
161
+ version: 1.3.1
145
162
  requirements: []
146
- rubygems_version: 3.1.4
163
+ rubygems_version: 3.0.3
147
164
  signing_key:
148
165
  specification_version: 4
149
166
  summary: Compare ENV variables across Heroku environments