contentful_bootstrap 3.4.0 → 3.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
  SHA1:
3
- metadata.gz: 4672f655b4d3a32b439e75feec5b7d5fddbcfb5e
4
- data.tar.gz: 75bcb4e3054e0a5cbc1abe6a2e7c0083f7a718fe
3
+ metadata.gz: 3069a4e110431c036457ac8839dc3e01d48146e3
4
+ data.tar.gz: 9fdeed19e3bdd8c97d77424e029b3f76b65a78e3
5
5
  SHA512:
6
- metadata.gz: c54a6ad2254d281a207b7764a419313b69b4caf1eff76cd03fb01bc01b757b8f537f73d538122345ccae69ae5b89f782748a22509278881d2122403b19e62140
7
- data.tar.gz: 230b8f6a1b6413ce6888bad8a0252435bbc3602a183d31e4aaef66bab51894ceaab68943b4492352bfb3517c4ed984c2d873b8e15056afb844bc2789918e723d
6
+ metadata.gz: 1a29cc6c70e7e062bc0224b0831a1b3841059ba99e1954690cdf8dfe702bde14cd8090d7c8cad8d52766cef84d81df1e7a9e7bbd3352efced2b7c48a857924ac
7
+ data.tar.gz: b8638c2bbc11a3f8cb2f5c4a99e763c2220d8b318eccaea6c8e1a01c7123c7807b90aa2b852ea50b8d40229ba81ae3bf197fae3b1c1119b75eb31aa2da2a11d8
data/CHANGELOG.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v3.5.0
6
+
7
+ ### Added
8
+ * Add `-q` and `--quiet` flags to the CLI Tool and their respective command classes [#48](https://github.com/contentful/contentful-bootstrap.rb/issues/48)
9
+ * Add `:no_input` option to library commands [#48](https://github.com/contentful/contentful-bootstrap.rb/issues/48)
10
+
11
+ ### Changed
12
+ * Refactored internals to allow more option flexibility and simplified the `CommandRunner`.
13
+ * Updated dependencies to the newest available SDKs
14
+
15
+ ### Fixed
16
+ * Fixed Object Field parsing for JSON Templates [#51](https://github.com/contentful/contentful-bootstrap.rb/issues/51)
17
+
18
+
5
19
  ## v3.4.0
6
20
  ### Added
7
21
  * Add `-v` and `--version` flags to output current version
data/Gemfile CHANGED
@@ -6,5 +6,5 @@ gemspec
6
6
  gem "launchy"
7
7
  gem "inifile"
8
8
  gem "contentful-management"
9
- gem "contentful", "~> 0.7", ">= 0.7.3"
9
+ gem "contentful"
10
10
  gem 'pry'
data/README.md CHANGED
@@ -26,25 +26,25 @@ $ gem install contentful_bootstrap
26
26
  You can create spaces by doing:
27
27
 
28
28
  ```bash
29
- $ contentful_bootstrap create_space <space_name> [--template template_name] [--json-template template_path] [--mark-processed] [--config CONFIG_PATH]
29
+ $ contentful_bootstrap create_space <space_name> [--template template_name] [--json-template template_path] [--mark-processed] [--config CONFIG_PATH] [--quiet]
30
30
  ```
31
31
 
32
32
  You can also generate new Delivery API Tokens by doing:
33
33
 
34
34
  ```bash
35
- $ contentful_bootstrap generate_token <space_id> [--name token_name] [--config CONFIG_PATH]
35
+ $ contentful_bootstrap generate_token <space_id> [--name token_name] [--config CONFIG_PATH] [--quiet]
36
36
  ```
37
37
 
38
38
  You can also generate JSON Templates from existing spaces by doing:
39
39
 
40
40
  ```bash
41
- $ contentful_bootstrap generate_json <space_id> <delivery_api_access_token> [--output-file OUTPUT PATH] [--content-types-only]
41
+ $ contentful_bootstrap generate_json <space_id> <delivery_api_access_token> [--output-file OUTPUT PATH] [--content-types-only] [--quiet]
42
42
  ```
43
43
 
44
44
  You can update existing spaces from JSON Templates by doing:
45
45
 
46
46
  ```bash
47
- $ contentful_bootstrap update_space <space_id> -j template_path [--mark-processed] [--skip-content-types]
47
+ $ contentful_bootstrap update_space <space_id> -j template_path [--mark-processed] [--skip-content-types] [--quiet]
48
48
  ```
49
49
 
50
50
  ### Built-in templates
@@ -88,7 +88,9 @@ options = {
88
88
  template: "blog", # Will use one of the predefined templates and create Content Types, Assets and Entries
89
89
  json_template: "/path/to/template.json", # Will use the JSON file specified as a Template
90
90
  mark_processed: false, # if true will mark all resources as 'bootstrapProcessed' and will be avoided for update_space calls (doesnt affect create_space)
91
- trigger_oauth: true # if true will trigger OAuth process
91
+ trigger_oauth: true, # if true will trigger OAuth process
92
+ quiet: false, # if true will not output to STDOUT
93
+ no_input: false # if true all input operations won't be done, exceptions thrown with alternatives through configuration file in cases in which it cannot proceed
92
94
  }
93
95
  Contentful::Bootstrap::CommandRunner.new.create_space("space_name", options)
94
96
  ```
@@ -101,6 +103,8 @@ options = {
101
103
  mark_processed: false, # if true will mark all resources as 'bootstrapProcessed and will be avoided on future update_space calls
102
104
  trigger_oauth: true, # if true will trigger OAuth process
103
105
  skip_content_types: false, # if true will avoid creating the content types
106
+ quiet: false, # if true will not output to STDOUT
107
+ no_input: false # if true all input operations won't be done, exceptions thrown with alternatives through configuration file in cases in which it cannot proceed
104
108
  }
105
109
  Contentful::Bootstrap::CommandRunner.new.update_space("space_id", options)
106
110
  ```
@@ -116,7 +120,9 @@ Additionally, you can send an options hash with the following keys:
116
120
  ```ruby
117
121
  options = {
118
122
  name: "Some Nice Token Name", # Will Create the Delivery API Token with the specified name
119
- trigger_oauth: true # if true will trigger OAuth process
123
+ trigger_oauth: true, # if true will trigger OAuth process
124
+ quiet: false, # if true will not output to STDOUT
125
+ no_input: false # if true all input operations won't be done, exceptions thrown with alternatives through configuration file in cases in which it cannot proceed
120
126
  }
121
127
  Contentful::Bootstrap::CommandRunner.new.generate_token("space_id", options)
122
128
  ```
@@ -127,7 +133,9 @@ To Generate a JSON Template from an exising Space
127
133
  Contentful::Bootstrap::CommandRunner.new.generate_json(
128
134
  "space_id",
129
135
  access_token: "delivery_api_access_token",
130
- content_types_only: false # if true will not fetch Entries and Assets
136
+ filename: nil, # path to file in which to store JSON
137
+ content_types_only: false, # if true will not fetch Entries and Assets
138
+ quiet: false # if true will not output to STDOUT - only when filename is provided
131
139
  )
132
140
  ```
133
141
 
@@ -137,7 +145,9 @@ Additionally, you can send an options hash with the following keys:
137
145
  ```ruby
138
146
  options = {
139
147
  access_token: "access_token" # REQUIRED
140
- filename: "template.json" # Will save the JSON to the specified file
148
+ filename: "template.json", # Will save the JSON to the specified file
149
+ quiet: false, # if true will not output to STDOUT
150
+ no_input: false # if true all input operations won't be done, exceptions thrown with alternatives through configuration file in cases in which it cannot proceed
141
151
  }
142
152
  Contentful::Bootstrap::CommandRunner.new.generate_json("space_id", options)
143
153
  ```
@@ -157,6 +167,7 @@ The configuration file will be in `ini` format and looks like the following
157
167
 
158
168
  ```ini
159
169
  [global]
170
+ CONTENTFUL_ORGANIZATION_ID = an_organization_id
160
171
  CONTENTFUL_MANAGEMENT_ACCESS_TOKEN = a_management_access_token
161
172
 
162
173
  [space_name]
@@ -20,6 +20,9 @@ subcommands = {
20
20
  opts.on("-c CONFIG_PATH", "--config CONFIG_PATH", "Specify Configuration Path") do |c|
21
21
  options[:config_path] = c
22
22
  end
23
+ opts.on("-q", "--quiet", "Don't output to STDOUT") do |q|
24
+ options[:quiet] = q
25
+ end
23
26
  opts.on_tail("-h", "--help", "Print this message") do
24
27
  puts opts
25
28
  end
@@ -38,6 +41,9 @@ subcommands = {
38
41
  opts.on("-c CONFIG_PATH", "--config CONFIG_PATH", "Specify Configuration Path") do |c|
39
42
  options[:config_path] = c
40
43
  end
44
+ opts.on("-q", "--quiet", "Don't output to STDOUT") do |q|
45
+ options[:quiet] = q
46
+ end
41
47
  opts.on_tail("-h", "--help", "Print this message") do
42
48
  puts opts
43
49
  end
@@ -50,6 +56,9 @@ subcommands = {
50
56
  opts.on("-c CONFIG_PATH", "--config CONFIG_PATH", "Specify Configuration Path") do |c|
51
57
  options[:config_path] = c
52
58
  end
59
+ opts.on("-q", "--quiet", "Don't output to STDOUT") do |q|
60
+ options[:quiet] = q
61
+ end
53
62
  opts.on_tail("-h", "--help", "Print this message") do
54
63
  puts opts
55
64
  end
@@ -62,6 +71,9 @@ subcommands = {
62
71
  opts.on("-o OUTPUT_PATH", "--output-file OUTPUT_PATH", "Specify Output File") do |f|
63
72
  options[:filename] = f
64
73
  end
74
+ opts.on("-q", "--quiet", "Don't output to STDOUT") do |q|
75
+ options[:quiet] = q
76
+ end
65
77
  opts.on_tail("-h", "--help", "Print this message") do
66
78
  puts opts
67
79
  end
@@ -95,7 +107,7 @@ if subcommands.key? command
95
107
  unless STDIN.tty? && STDOUT.tty?
96
108
  $stderr.write "This tool requires user interaction\n"
97
109
  $stderr.write "Exiting!\n"
98
- exit
110
+ exit(1)
99
111
  end
100
112
 
101
113
  if is_help
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "guard-rspec"
29
29
  spec.add_development_dependency 'listen', '~> 3.0.0'
30
30
  spec.add_runtime_dependency "launchy"
31
- spec.add_runtime_dependency "contentful-management", '~> 0.9'
32
- spec.add_runtime_dependency "contentful", "~> 0.7"
31
+ spec.add_runtime_dependency "contentful-management", '~> 1.0'
32
+ spec.add_runtime_dependency "contentful", "> 0", "< 3"
33
33
  spec.add_runtime_dependency "inifile"
34
34
  end
@@ -12,32 +12,20 @@ module Contentful
12
12
  end
13
13
 
14
14
  def create_space(space_name, options = {})
15
- template_name = options.fetch(:template, nil)
16
- json_template = options.fetch(:json_template, nil)
17
- mark_processed = options.fetch(:mark_processed, false)
18
- trigger_oauth = options.fetch(:trigger_oauth, true)
19
-
20
15
  Contentful::Bootstrap::Commands::CreateSpace.new(
21
- @token, space_name, template_name, json_template, mark_processed, trigger_oauth
16
+ @token, space_name, options
22
17
  ).run
23
18
  end
24
19
 
25
20
  def update_space(space_id, options = {})
26
- json_template = options.fetch(:json_template, nil)
27
- mark_processed = options.fetch(:mark_processed, false)
28
- trigger_oauth = options.fetch(:trigger_oauth, true)
29
-
30
21
  Contentful::Bootstrap::Commands::UpdateSpace.new(
31
- @token, space_id, json_template, mark_processed, trigger_oauth
22
+ @token, space_id, options
32
23
  ).run
33
24
  end
34
25
 
35
26
  def generate_token(space, options = {})
36
- token_name = options.fetch(:name, 'Bootstrap Token')
37
- trigger_oauth = options.fetch(:trigger_oauth, true)
38
-
39
27
  Contentful::Bootstrap::Commands::GenerateToken.new(
40
- @token, space, token_name, trigger_oauth
28
+ @token, space, options
41
29
  ).run
42
30
  end
43
31
 
@@ -7,11 +7,16 @@ module Contentful
7
7
  module Bootstrap
8
8
  module Commands
9
9
  class Base
10
- include Support
11
- attr_reader :space, :token
10
+ attr_reader :space, :token, :options, :quiet, :no_input, :client
11
+
12
+ def initialize(token, space, options = {})
13
+ trigger_oauth = options.fetch(:trigger_oauth, true)
12
14
 
13
- def initialize(token, space, trigger_oauth = true)
14
15
  @token = token
16
+ @options = options
17
+ @quiet = options.fetch(:quiet, false)
18
+ @no_input = options.fetch(:no_input, false)
19
+
15
20
  configuration if trigger_oauth
16
21
  management_client_init if trigger_oauth
17
22
  @space = space
@@ -21,32 +26,41 @@ module Contentful
21
26
  fail 'must implement'
22
27
  end
23
28
 
29
+ protected
30
+
31
+ def output(text = nil)
32
+ Support.output(text, @quiet)
33
+ end
34
+
24
35
  private
25
36
 
26
37
  def management_client_init
27
- ::Contentful::Bootstrap::Management.new(@token.read, raise_errors: true)
38
+ @client ||= ::Contentful::Bootstrap::Management.new(@token.read, raise_errors: true)
28
39
  end
29
40
 
30
41
  def configuration
31
42
  if @token.present?
32
- puts 'OAuth token found, moving on!'
43
+ output 'OAuth token found, moving on!'
33
44
  return
34
45
  end
35
46
 
36
- print 'OAuth Token not found, do you want to create a new configuration file? (Y/n): '
37
- if gets.chomp.downcase == 'n'
38
- puts 'Exiting!'
39
- exit
47
+ Support.input('OAuth Token not found, do you want to create a new configuration file? (Y/n): ', no_input) do |answer|
48
+ if answer.downcase == 'n'
49
+ output 'Exiting!'
50
+ exit
51
+ end
40
52
  end
41
53
 
42
- puts "Configuration will be saved on #{@token.filename}"
43
- puts 'A new tab on your browser will open for requesting OAuth permissions'
54
+ fail 'OAuth token required to proceed' if no_input
55
+
56
+ output "Configuration will be saved on #{@token.filename}"
57
+ output 'A new tab on your browser will open for requesting OAuth permissions'
44
58
  token_server
45
- puts
59
+ output
46
60
  end
47
61
 
48
62
  def token_server
49
- silence_stderr do # Don't show any WEBrick related stuff
63
+ Support.silence_stderr do # Don't show any WEBrick related stuff
50
64
  server = Contentful::Bootstrap::Server.new(@token)
51
65
 
52
66
  server.start
@@ -9,33 +9,32 @@ module Contentful
9
9
  module Commands
10
10
  class CreateSpace < Base
11
11
  attr_reader :template_name, :json_template
12
- def initialize(
13
- token, space_name, template_name = nil,
14
- json_template = nil, mark_processed = false, trigger_oauth = true)
15
- super(token, space_name, trigger_oauth)
16
- @template_name = template_name
17
- @json_template = json_template
18
- @mark_processed = mark_processed
12
+ def initialize(token, space, options = {})
13
+ @template_name = options.fetch(:template, nil)
14
+ @json_template = options.fetch(:json_template, nil)
15
+ @mark_processed = options.fetch(:mark_processed, false)
16
+
17
+ super(token, space, options)
19
18
  end
20
19
 
21
20
  def run
22
- puts "Creating Space '#{@space}'"
21
+ output "Creating Space '#{@space}'"
23
22
 
24
23
  new_space = fetch_space
25
24
 
26
- puts "Space '#{@space}' created!"
27
- puts
25
+ output "Space '#{@space}' created!"
26
+ output
28
27
 
29
28
  create_template(new_space) unless @template_name.nil?
30
29
  create_json_template(new_space) unless @json_template.nil?
31
30
 
32
31
  access_token = generate_token(new_space)
33
- puts
34
- puts "Space ID: '#{new_space.id}'"
35
- puts "Access Token: '#{access_token}'"
36
- puts
37
- puts 'You can now insert those values into your configuration blocks'
38
- puts "Manage your content at https://app.contentful.com/spaces/#{new_space.id}"
32
+ output
33
+ output "Space ID: '#{new_space.id}'"
34
+ output "Access Token: '#{access_token}'"
35
+ output
36
+ output 'You can now insert those values into your configuration blocks'
37
+ output "Manage your content at https://app.contentful.com/spaces/#{new_space.id}"
39
38
 
40
39
  new_space
41
40
  end
@@ -49,18 +48,21 @@ module Contentful
49
48
  name: @space
50
49
  }
51
50
  options[:organization_id] = @token.read_organization_id unless @token.read_organization_id.nil?
52
- new_space = Contentful::Management::Space.create(options)
51
+ new_space = client.spaces.create(options)
53
52
  rescue Contentful::Management::NotFound
54
- puts 'Your account has multiple organizations:'
55
- puts organizations.join("\n")
56
- print 'Please insert the Organization ID you\'d want to create the spaces for: '
57
- organization_id = gets.chomp
58
- @token.write_organization_id(organization_id)
59
- puts 'Your Organization ID has been stored as the default organization.'
60
- new_space = Contentful::Management::Space.create(
61
- name: @space,
62
- organization_id: organization_id
63
- )
53
+ fail "Organization ID is required, provide it in Configuration File" if no_input
54
+
55
+ output 'Your account has multiple organizations:'
56
+ output organizations.join("\n")
57
+ Support.input('Please insert the Organization ID you\'d want to create the spaces for: ', no_input) do |answer|
58
+ organization_id = answer
59
+ @token.write_organization_id(organization_id)
60
+ output 'Your Organization ID has been stored as the default organization.'
61
+ new_space = client.spaces.create(
62
+ name: @space,
63
+ organization_id: organization_id
64
+ )
65
+ end
64
66
  end
65
67
 
66
68
  new_space
@@ -71,7 +73,7 @@ module Contentful
71
73
  def organizations
72
74
  client = management_client_init
73
75
  url = client.base_url.sub('spaces', 'token')
74
- response = Contentful::Management::Client.get_http(url, nil, client.request_headers)
76
+ response = client.get_http(url, nil, client.request_headers)
75
77
  organization_ids = JSON.load(response.body.to_s)['includes']['Organization'].map do |org|
76
78
  sprintf('%-20s %s', org['name'], org['sys']['id'])
77
79
  end
@@ -88,30 +90,30 @@ module Contentful
88
90
 
89
91
  def create_template(space)
90
92
  if templates.key? @template_name.to_sym
91
- puts "Creating Template '#{@template_name}'"
93
+ output "Creating Template '#{@template_name}'"
92
94
 
93
- templates[@template_name.to_sym].new(space).run
94
- puts "Template '#{@template_name}' created!"
95
+ templates[@template_name.to_sym].new(space, quiet).run
96
+ output "Template '#{@template_name}' created!"
95
97
  else
96
- puts "Template '#{@template_name}' not found. Valid templates are '#{templates.keys.map(&:to_s).join('\', \'')}'"
98
+ output "Template '#{@template_name}' not found. Valid templates are '#{templates.keys.map(&:to_s).join('\', \'')}'"
97
99
  end
98
- puts
100
+ output
99
101
  end
100
102
 
101
103
  def create_json_template(space)
102
104
  if ::File.exist?(@json_template)
103
- puts "Creating JSON Template '#{@json_template}'"
104
- Templates::JsonTemplate.new(space, @json_template, @mark_processed).run
105
- puts "JSON Template '#{@json_template}' created!"
105
+ output "Creating JSON Template '#{@json_template}'"
106
+ Templates::JsonTemplate.new(space, @json_template, @mark_processed, true, quiet).run
107
+ output "JSON Template '#{@json_template}' created!"
106
108
  else
107
- puts "JSON Template '#{@json_template}' does not exist. Please check that you specified the correct file name."
109
+ output "JSON Template '#{@json_template}' does not exist. Please check that you specified the correct file name."
108
110
  end
109
- puts
111
+ output
110
112
  end
111
113
 
112
114
  def generate_token(space)
113
115
  Contentful::Bootstrap::Commands::GenerateToken.new(
114
- @token, space, 'Bootstrap Token', false
116
+ @token, space, options
115
117
  ).run
116
118
  end
117
119
  end
@@ -6,11 +6,12 @@ module Contentful
6
6
  module Commands
7
7
  class GenerateJson
8
8
  attr_reader :space_id, :filename, :access_token, :content_types_only
9
- def initialize(space_id, access_token, filename = nil, content_types_only = false)
9
+ def initialize(space_id, access_token, filename = nil, content_types_only = false, quiet = false)
10
10
  @space_id = space_id
11
11
  @access_token = access_token
12
12
  @filename = filename
13
13
  @content_types_only = content_types_only
14
+ @quiet = quiet
14
15
  end
15
16
 
16
17
  def run
@@ -32,7 +33,7 @@ module Contentful
32
33
  if filename.nil?
33
34
  puts "#{json}\n"
34
35
  else
35
- puts "Saving JSON template to '#{filename}'"
36
+ puts "Saving JSON template to '#{filename}'" unless @quiet
36
37
  ::File.write(filename, json)
37
38
  end
38
39
  end