bump-cli 0.4.1 → 0.5.0

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
  SHA256:
3
- metadata.gz: 037f50e1dc85f791e29b7d04610c536d5c5de55465129218036508f7dc9b4f23
4
- data.tar.gz: a88fcc165c82445b31447194f4156479793294519327b7a37e0f253a532043d3
3
+ metadata.gz: d7f6a735076725944a751da14fdcf7dab5dafcaea84cf1b18d433d05bb23be71
4
+ data.tar.gz: d8ee9a2b87963ba54ea9bdc373ba02a1a85b23b6255dd58d9291d0855b927ce8
5
5
  SHA512:
6
- metadata.gz: 62985d280a33db74d42a6afafde570231aca07a18fbae7a492756352f9315ea38b7fc7fa97b188d0dd2823d65a82e6cc8b639449b1064746f831d7c3de1a5e2f
7
- data.tar.gz: 6179fc9f2b65c33c4416f869a1c7c1e41b825d81a1e77533bb3d84e6a319f870c79ffbd45b5ac53b4d4a9f54fd23d841959fd40f83cac77457124dd82defa438
6
+ metadata.gz: 3fc376b3b9b123f0b70ed488a49b651e2ed17ba95888bd07fcb9e7fb793663bea97d0f36d1e0508f2c4619b28186f568f607264c806ede9983a34e323d5fd7c8
7
+ data.tar.gz: b2f9e4d90a99813e03e6a46f2d7ecd43d43c449c238c89a1a3bf4eb70c79f1be7f09df7b1a2b0b70d6e816800e2135bf141a32422c97fce24ecf72cac591497d
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  .byebug_history
2
+ .ruby-version
2
3
  /.bundle/
3
4
  /.yardoc
4
5
  /Gemfile.lock
data/README.md CHANGED
@@ -29,25 +29,31 @@ Bump tries to identify your file specification and format automatically. You can
29
29
  * `asyncapi/v2/json`
30
30
  * `asyncapi/v2/yaml`
31
31
 
32
- The doc `id` and `token` options used below can be found in your documentation settings page on https://bump.sh. Note that you can replace these options by environments variables: `--id` can be replaced by `BUMP_ID`, and `--token` can by replaced by `BUMP_TOKEN`. This is useful to keep your private token secret.
32
+ `doc` and `token` options used below can be found in your documentation settings page on https://bump.sh. Note that you can replace the token option by an environment variable, to keep it secret: `--token` can by replaced by `BUMP_TOKEN`.
33
33
 
34
34
  ### Preview
35
35
 
36
36
  You can preview your documentation by calling the `preview` command. A temporary preview will be created, with a unique URL. This preview will be available for 30 minutes. You don't need any credentials to use this command.
37
37
 
38
+ Preview a documentation:
39
+
38
40
  $ bundle exec bump preview path/to/your/file.yml
39
41
 
40
42
  ### Validate
41
43
 
42
- Validate your file against its specification.
44
+ Validate your file against its specification:
43
45
 
44
- $ bundle exec bump validate path/to/your/file.yml --id DOC_ID --token DOC_TOKEN
46
+ $ bundle exec bump validate path/to/your/file.yml --doc DOC_ID_OR_SLUG --token DOC_TOKEN
45
47
 
46
48
  ### Deploy
47
49
 
48
- Deploy the file as the current version of the documentation.
50
+ Deploy the file as the current version of the documentation:
51
+
52
+ $ bundle exec bump deploy path/to/your/file.yml --doc DOC_ID_OR_SLUG --token DOC_TOKEN
53
+
54
+ Automatically create a documentation inside a hub and deploy it:
49
55
 
50
- $ bundle exec bump deploy path/to/your/file.yml --id DOC_ID --token DOC_TOKEN
56
+ $ bundle exec bump deploy path/to/your/file.yml --auto-create --doc DOC_SLUG --hub HUB_ID_OR_SLUG --token HUB_TOKEN
51
57
 
52
58
  ## Development
53
59
 
@@ -26,10 +26,10 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.required_ruby_version = '>= 2.3'
28
28
 
29
- spec.add_dependency "hanami-cli", '~> 0'
29
+ spec.add_dependency "dry-cli", '~> 0'
30
30
  spec.add_dependency "http", '>= 3'
31
31
 
32
- spec.add_development_dependency "bundler", "~> 1"
32
+ spec.add_development_dependency "bundler", ">= 1", "< 3"
33
33
  spec.add_development_dependency "byebug", "~> 11"
34
34
  spec.add_development_dependency "climate_control", '~> 0'
35
35
  spec.add_development_dependency "rake", "~> 13"
@@ -1,5 +1,5 @@
1
1
  require "bump/cli/version"
2
- require "hanami/cli"
2
+ require "dry/cli"
3
3
  require "http"
4
4
 
5
5
  module Bump
@@ -9,11 +9,11 @@ module Bump
9
9
  API_URL = ROOT_URL + API_PATH
10
10
 
11
11
  def call(*args)
12
- Hanami::CLI.new(Commands).call(*args)
12
+ Dry::CLI.new(Commands).call(*args)
13
13
  end
14
14
 
15
15
  module Commands
16
- extend Hanami::CLI::Registry
16
+ extend Dry::CLI::Registry
17
17
  end
18
18
  end
19
19
  end
@@ -1,9 +1,10 @@
1
1
  require 'open-uri'
2
+ require 'bump/cli/tools/uuid'
2
3
 
3
4
  module Bump
4
5
  class CLI
5
6
  module Commands
6
- class Base < Hanami::CLI::Command
7
+ class Base < Dry::CLI::Command
7
8
  USER_AGENT = "bump-cli/#{VERSION}".freeze
8
9
 
9
10
  private
@@ -14,12 +15,56 @@ module Bump
14
15
  .post(url, body: body)
15
16
  end
16
17
 
17
- def body(file, specification, validation)
18
- {
19
- definition: open(file).read,
20
- specification: specification,
21
- validation: validation
22
- }
18
+ def body(file, **options)
19
+ deprecation_warning(options)
20
+
21
+ compact(
22
+ {
23
+ definition: open(file).read,
24
+ specification: options[:specification],
25
+ validation: options[:validation],
26
+ auto_create_documentation: options[:'auto-create']
27
+ }.merge(documentation_or_hub(options))
28
+ )
29
+ end
30
+
31
+ def deprecation_warning(options)
32
+ if !options[:id].nil?
33
+ puts "[DEPRECATION WARNING] --id option is deprecated. Please use --doc instead."
34
+ end
35
+ end
36
+
37
+ def compact(hash)
38
+ hash.delete_if { |key, value| value.nil? }
39
+ end
40
+
41
+ def documentation_or_hub(options)
42
+ result = {}
43
+
44
+ result[:documentation_id] = options[:id]
45
+ result[:documentation_id] = options[:doc] if documentation_uuid?(options)
46
+ result[:documentation_slug] = options[:doc] if documentation_slug?(options)
47
+ result[:documentation_name] = options[:'doc-name']
48
+ result[:hub_id] = options[:hub] if hub_uuid?(options)
49
+ result[:hub_slug] = options[:hub] if hub_slug?(options)
50
+
51
+ compact(result)
52
+ end
53
+
54
+ def documentation_uuid?(options)
55
+ Bump::CLI::Tools::UUID.valid?(options[:doc])
56
+ end
57
+
58
+ def documentation_slug?(options)
59
+ !options[:doc].nil? && !documentation_uuid?(options)
60
+ end
61
+
62
+ def hub_uuid?(options)
63
+ Bump::CLI::Tools::UUID.valid?(options[:hub])
64
+ end
65
+
66
+ def hub_slug?(options)
67
+ !options[:hub].nil? && !hub_uuid?(options)
23
68
  end
24
69
 
25
70
  def with_errors_rescued
@@ -6,17 +6,21 @@ module Bump
6
6
  class Deploy < Base
7
7
  desc "Create a new version"
8
8
  argument :file, required: true, desc: "Path or URL to your API documentation file. OpenAPI (2.0 to 3.0.2) and AsyncAPI (2.0) specifications are currently supported."
9
- option :id, default: ENV.fetch("BUMP_ID", ""), desc: "Documentation public id"
10
- option :token, default: ENV.fetch("BUMP_TOKEN", ""), desc: "Documentation private token"
9
+ option :id, default: ENV.fetch("BUMP_ID", ""), desc: "[DEPRECATED] Documentation id. Use `documentation` option instead"
10
+ option :doc, default: ENV.fetch("BUMP_ID", ""), desc: "Documentation id or slug"
11
+ option :'doc-name', desc: "Documentation name. Used with --auto-create flag."
12
+ option :hub, default: ENV.fetch("BUMP_HUB_ID", ""), desc: "Hub id or slug"
13
+ option :token, default: ENV.fetch("BUMP_TOKEN", ""), desc: "Documentation or Hub token"
11
14
  option :specification, desc: "Specification of the definition"
12
15
  option :validation, desc: "Validation mode", values: %w(basic strict), default: 'basic'
16
+ option :'auto-create', type: :boolean, default: false, desc: 'Automatically create the documentation if needed (only available with a hub and when specifying a slug for documentation)'
13
17
 
14
- def call(file:, id:, token:, validation:, specification: nil)
18
+ def call(file:, **options)
15
19
  with_errors_rescued do
16
20
  response = post(
17
- url: API_URL + "/docs/#{id}/versions",
18
- body: body(file, specification, validation).to_json,
19
- token: token
21
+ url: API_URL + "/versions",
22
+ body: body(file, options).to_json,
23
+ token: options[:token]
20
24
  )
21
25
 
22
26
  if response.code == 201
@@ -7,11 +7,11 @@ module Bump
7
7
  option :specification, desc: "Specification of the definition"
8
8
  option :validation, desc: "Validation mode", values: %w(basic strict), default: 'basic'
9
9
 
10
- def call(file:, validation:, specification: nil)
10
+ def call(file:, **options)
11
11
  with_errors_rescued do
12
12
  response = post(
13
13
  url: API_URL + "/previews",
14
- body: body(file, specification, validation).to_json
14
+ body: body(file, options).to_json
15
15
  )
16
16
 
17
17
  if response.code == 201
@@ -6,17 +6,21 @@ module Bump
6
6
  class Validate < Base
7
7
  desc "Validate a given file against its schema definition"
8
8
  argument :file, required: true, desc: "Path or URL to your API documentation file. OpenAPI (2.0 to 3.0.2) and AsyncAPI (2.0) specifications are currently supported."
9
- option :id, default: ENV.fetch("BUMP_ID", ""), desc: "Documentation public id"
10
- option :token, default: ENV.fetch("BUMP_TOKEN", ""), desc: "Documentation private token"
9
+ option :id, default: ENV.fetch("BUMP_ID", ""), desc: "[DEPRECATED] Documentation id. Use `documentation` option instead"
10
+ option :doc, default: ENV.fetch("BUMP_ID", ""), desc: "Documentation public id or slug"
11
+ option :'doc-name', desc: "Documentation name. Used with --auto-create flag."
12
+ option :hub, desc: "Hub id or slug"
13
+ option :token, default: ENV.fetch("BUMP_TOKEN", ""), desc: "Documentation or Hub token"
11
14
  option :specification, desc: "Specification of the definition"
12
15
  option :validation, desc: "Validation mode", values: %w(basic strict), default: 'basic'
16
+ option :'auto-create', type: :boolean, default: false, desc: 'Automatically create the documentation if needed (only available with a hub and when specifying a slug for documentation)'
13
17
 
14
- def call(file:, id:, token:, validation:, specification: nil)
18
+ def call(file:, **options)
15
19
  with_errors_rescued do
16
20
  response = post(
17
- url: API_URL + "/docs/#{id}/validations",
18
- body: body(file, specification, validation).to_json,
19
- token: token
21
+ url: API_URL + "/validations",
22
+ body: body(file, options).to_json,
23
+ token: options[:token]
20
24
  )
21
25
 
22
26
  if response.code == 200
@@ -0,0 +1,13 @@
1
+ module Bump
2
+ class CLI
3
+ module Tools
4
+ class UUID
5
+ REGEXP = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
6
+
7
+ def self.valid?(string)
8
+ string.to_s =~ REGEXP
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  module Bump
2
2
  class CLI
3
- VERSION = "0.4.1"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bump-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mehdi Lahmam
@@ -9,10 +9,10 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-02-11 00:00:00.000000000 Z
12
+ date: 2020-04-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: hanami-cli
15
+ name: dry-cli
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
@@ -43,16 +43,22 @@ dependencies:
43
43
  name: bundler
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - "~>"
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
48
  version: '1'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '3'
49
52
  type: :development
50
53
  prerelease: false
51
54
  version_requirements: !ruby/object:Gem::Requirement
52
55
  requirements:
53
- - - "~>"
56
+ - - ">="
54
57
  - !ruby/object:Gem::Version
55
58
  version: '1'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '3'
56
62
  - !ruby/object:Gem::Dependency
57
63
  name: byebug
58
64
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +155,7 @@ files:
149
155
  - lib/bump/cli/commands/deploy.rb
150
156
  - lib/bump/cli/commands/preview.rb
151
157
  - lib/bump/cli/commands/validate.rb
158
+ - lib/bump/cli/tools/uuid.rb
152
159
  - lib/bump/cli/version.rb
153
160
  homepage: https://bump.sh
154
161
  licenses: