contentful_bootstrap 0.0.7 → 1.1.0

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/Gemfile +1 -0
  4. data/README.md +28 -19
  5. data/bin/contentful_bootstrap +10 -11
  6. data/contentful_bootstrap.gemspec +3 -2
  7. data/lib/contentful/bootstrap.rb +5 -0
  8. data/lib/contentful/bootstrap/commands.rb +135 -0
  9. data/lib/contentful/bootstrap/constants.rb +8 -0
  10. data/lib/contentful/bootstrap/server.rb +97 -0
  11. data/lib/contentful/bootstrap/support.rb +14 -0
  12. data/lib/contentful/bootstrap/templates.rb +3 -0
  13. data/lib/contentful/bootstrap/templates/base.rb +118 -0
  14. data/lib/contentful/bootstrap/templates/blog.rb +77 -0
  15. data/lib/contentful/bootstrap/templates/catalogue.rb +189 -0
  16. data/lib/contentful/bootstrap/templates/gallery.rb +119 -0
  17. data/lib/contentful/bootstrap/templates/links.rb +2 -0
  18. data/lib/contentful/bootstrap/templates/links/asset.rb +15 -0
  19. data/lib/contentful/bootstrap/templates/links/base.rb +18 -0
  20. data/lib/contentful/bootstrap/templates/links/entry.rb +15 -0
  21. data/lib/contentful/bootstrap/token.rb +58 -0
  22. data/lib/contentful/bootstrap/version.rb +5 -0
  23. metadata +32 -18
  24. data/lib/contentful_bootstrap.rb +0 -5
  25. data/lib/contentful_bootstrap/commands.rb +0 -120
  26. data/lib/contentful_bootstrap/constants.rb +0 -6
  27. data/lib/contentful_bootstrap/server.rb +0 -95
  28. data/lib/contentful_bootstrap/support.rb +0 -12
  29. data/lib/contentful_bootstrap/templates.rb +0 -3
  30. data/lib/contentful_bootstrap/templates/base.rb +0 -116
  31. data/lib/contentful_bootstrap/templates/blog.rb +0 -75
  32. data/lib/contentful_bootstrap/templates/catalogue.rb +0 -187
  33. data/lib/contentful_bootstrap/templates/gallery.rb +0 -117
  34. data/lib/contentful_bootstrap/templates/links.rb +0 -2
  35. data/lib/contentful_bootstrap/templates/links/asset.rb +0 -13
  36. data/lib/contentful_bootstrap/templates/links/base.rb +0 -16
  37. data/lib/contentful_bootstrap/templates/links/entry.rb +0 -13
  38. data/lib/contentful_bootstrap/token.rb +0 -23
  39. data/lib/contentful_bootstrap/version.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3722c92f03d28db69baa4bfc4811c9f470ed3933
4
- data.tar.gz: bc92ff0935223a804eee9a4772dbda0204988555
3
+ metadata.gz: a1889695468ff7c1a8250d9fa14e88d81167df6a
4
+ data.tar.gz: 5e6634f55c894b036d5580d8b31d9d5e8f207d13
5
5
  SHA512:
6
- metadata.gz: c8fcceb2946f37f5a613ae785959e7ed01105f1306e087e20b3dcc0a6a7822a29153f3c4c2117166e15667364ca7ab333ca14f10496a1c13e56a90ff0dbb2bf1
7
- data.tar.gz: c51f6badb7f23fcaa0ce7fb580d599d6acbec1ebf4df4e26345eb16ad8f43cc5f35d53f36b41c4f8582e8158d8622468eb6add0a0e6eff2f830fbddb58f7b16a
6
+ metadata.gz: 81a56b64246f4b7bea76a0161d7d8c361090f643a8d0b2e8f0fa63c5dec0cc394560b940d0ba1d6b5d1e76f817bdf880fa61d63a99f6d121f21df50c04803ebb
7
+ data.tar.gz: 00d5ab1fb4dc4a68e4a97f421875c7b6d3422c0a2d5fe8255844b4e3cb70b3115ecc8640b18544c7329eb67f001edace299bcc87d96ccd940706a5dd3d0f0f98
@@ -1,6 +1,27 @@
1
1
  # Change Log
2
2
  ## Unreleased
3
3
 
4
+ ## v1.1.0
5
+ ### Removed
6
+ * Removed `init` command as `v1.0.0` refactor removed it's necessity
7
+
8
+ ## v1.0.1 [YANKED]
9
+ ### Fixed
10
+ * Release is now on `master`
11
+
12
+ ## v1.0.0 [YANKED]
13
+ ### Changed
14
+ * Changed namespace from `ContentfulBootstrap` to `Contentful::Bootstrap` to mimic other libraries
15
+ * Changed repository name from `contentful_bootstrap.rb` to `contentful-bootstrap.rb` to mimic other libraries
16
+ * Delivery API Token will always get created when using `contentful_bootstrap` commands to create a space
17
+ * Configuration now read from `~/.contentfulrc`
18
+ * Tool now requests user to allow to write configuration files
19
+
20
+ ### Added
21
+ * `contentful-bootstrap.rb` version number to API Token description
22
+ * `inifile` as runtime dependency
23
+ * Add optional `--config CONFIG_PATH` parameter to commands
24
+
4
25
  ## v0.0.7
5
26
  ### Fixed
6
27
  * Redirected Favicon fetch to Contentful's favicon, as some browsers would ping the server indefinitely
data/Gemfile CHANGED
@@ -2,4 +2,5 @@
2
2
  source "https://rubygems.org"
3
3
 
4
4
  gem "launchy"
5
+ gem "inifile"
5
6
  gem "contentful-management"
data/README.md CHANGED
@@ -4,7 +4,7 @@ A small CLI tool for getting started with Contentful
4
4
 
5
5
  ## Contentful
6
6
  [Contentful](http://www.contentful.com) is a content management platform for web applications,
7
- mobile apps and connected devices. It allows you to create, edit  manage content in the cloud
7
+ mobile apps and connected devices. It allows you to create, edit & manage content in the cloud
8
8
  and publish it anywhere via powerful API. Contentful offers tools for managing editorial
9
9
  teams and enabling cooperation between organizations.
10
10
 
@@ -20,24 +20,19 @@ in a single command
20
20
  $ gem install contentful_bootstrap
21
21
  ```
22
22
 
23
- ### First Usage
24
-
25
- ```bash
26
- $ contentful_bootstrap init <space_name> [--template template_name]
27
- ```
23
+ ### Usage
28
24
 
29
-
30
- Then you can create other spaces by doing:
25
+ You can create spaces by doing
31
26
 
32
27
  ```bash
33
- $ contentful_bootstrap create_space <space_name> [--template template_name]
28
+ $ contentful_bootstrap create_space <space_name> [--template template_name] [--config CONFIG_PATH]
34
29
  ```
35
30
 
36
31
 
37
32
  You can also generate new Delivery API Tokens by doing:
38
33
 
39
34
  ```bash
40
- $ contentful_bootstrap generate_token <space_id> [--name token_name]
35
+ $ contentful_bootstrap generate_token <space_id> [--name token_name] [--config CONFIG_PATH]
41
36
  ```
42
37
 
43
38
  ### Available templates
@@ -64,24 +59,38 @@ gem "contentful_bootstrap"
64
59
  Require `contentful_bootstrap`
65
60
 
66
61
  ```ruby
67
- require 'contentful_bootstrap'
62
+ require 'contentful/bootstrap'
68
63
  ```
69
64
 
70
- To do the complete `init` process
65
+ To Create a new Space
71
66
 
72
67
  ```ruby
73
- ContentfulBootstrap::Commands.new.init("space_name", "template_name") # Template Name is optional
68
+ Contentful::Bootstrap::Commands.new.create_space("space_name", "template_name") # Template Name is optional
74
69
  ```
75
70
 
76
-
77
- To create a new Space or Token. *This operations require a CMA Token located in `File.join(Dir.pwd, '.contentful_token')`*
71
+ To Create a new Delivery API Token
78
72
 
79
73
  ```ruby
80
- # Create a new Space
81
- ContentfulBootstrap::Commands.new.create_space("space_name", "template_name") # Template Name is optional
74
+ Contentful::Bootstrap::Commands.new.generate_token("space_id", "token_name") # Token Name is optional
75
+ ```
76
+
77
+ Optionally, `Commands#new` will take a parameter for specifying a configuration path
78
+
79
+ ### Configuration
80
+
81
+ Contentful Bootstrap will read by default from `~/.contentfulrc`, but you can provide your own
82
+ file by using the `--config CONFIG_PATH` parameter
83
+
84
+ If you don't have `~/.contentfulrc` created, you will be prompted if you want to create it
85
+
86
+ #### Configuration Format
87
+
88
+ The configuration file will be in `ini` format and looks like the following
82
89
 
83
- # Create a new CDA Access Token
84
- ContentfulBootstrap::Commands.new.generate_token("space_id", "token_name") # Token Name is optional
90
+ ```ini
91
+ [global]
92
+ CONTENTFUL_MANAGEMENT_ACCESS_TOKEN = a_management_access_token
93
+ CONTENTFUL_DELIVERY_ACCESS_TOKEN = a_delivery_acces_token ; Delivery Access Token is not required for this tool, but can be generated by it
85
94
  ```
86
95
 
87
96
  ## Contributing
@@ -1,37 +1,37 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'optparse'
4
- require 'contentful_bootstrap/commands'
4
+ require 'contentful/bootstrap/commands'
5
5
 
6
6
  options = {}
7
7
  global = OptionParser.new do |opts|
8
- opts.banner = "Usage: contentful_bootstrap <command> <space_name> [--template TEMPLATE_NAME]"
8
+ opts.banner = "Usage: contentful_bootstrap <command> <space_name> [--template TEMPLATE_NAME] [--config CONFIG_PATH]"
9
9
  opts.separator ""
10
10
  opts.separator <<-HELP
11
11
  Available commands are:
12
- init
13
12
  create_space
13
+ generate_token
14
14
  HELP
15
15
  end
16
16
 
17
17
  subcommands = {
18
- 'init' => OptionParser.new do |opts|
19
- opts.banner = "Usage: init <space_name> [--template TEMPLATE_NAME]"
20
- opts.on("-t TEMPLATE", "--template TEMPLATE", "Specify Template", "blog, catalogue, gallery") do |t|
21
- options[:name] = t
22
- end
23
- end,
24
18
  'create_space' => OptionParser.new do |opts|
25
19
  opts.banner = "Usage: init <space_name> [--template TEMPLATE_NAME]"
26
20
  opts.on("-t TEMPLATE", "--template TEMPLATE", "Specify Template", "blog, catalogue, gallery") do |t|
27
21
  options[:name] = t
28
22
  end
23
+ opts.on("-c CONFIG_PATH", "--config CONFIG_PATH", "Specify Configuration Path") do |c|
24
+ options[:config_path] = c
25
+ end
29
26
  end,
30
27
  'generate_token' => OptionParser.new do |opts|
31
28
  opts.banner = "Usage: generate_token <space_id> [--name TOKEN_NAME]"
32
29
  opts.on("-n NAME", "--name TEMPLATE", "Specify Token Name") do |n|
33
30
  options[:name] = n
34
31
  end
32
+ opts.on("-c CONFIG_PATH", "--config CONFIG_PATH", "Specify Configuration Path") do |c|
33
+ options[:config_path] = c
34
+ end
35
35
  end
36
36
  }
37
37
 
@@ -49,14 +49,13 @@ if subcommands.has_key? command
49
49
  exit
50
50
  end
51
51
 
52
- ContentfulBootstrap::Commands.new.send(command, space, options.fetch(:name, nil))
52
+ Contentful::Bootstrap::Commands.new(options.fetch(:config_path, "")).send(command, space, options.fetch(:name, nil))
53
53
  else
54
54
  puts "Usage: contentful_bootstrap <command> <space> [options]"
55
55
  puts
56
56
  puts <<-HELP
57
57
  Subcommand not available or missing
58
58
  Available commands are:
59
- init
60
59
  create_space
61
60
  generate_token
62
61
  HELP
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'contentful_bootstrap/version'
4
+ require 'contentful/bootstrap/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "contentful_bootstrap"
8
- spec.version = ContentfulBootstrap::VERSION
8
+ spec.version = Contentful::Bootstrap::VERSION
9
9
  spec.authors = ["David Litvak Bruno"]
10
10
  spec.email = ["david.litvakb@gmail.com"]
11
11
  spec.summary = %q{Contentful CLI tool for getting started with Contentful}
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "rake"
22
22
  spec.add_runtime_dependency "launchy"
23
23
  spec.add_runtime_dependency "contentful-management"
24
+ spec.add_runtime_dependency "inifile"
24
25
  end
@@ -0,0 +1,5 @@
1
+ require "contentful/bootstrap/version"
2
+ require "contentful/bootstrap/server"
3
+ require "contentful/bootstrap/commands"
4
+ require "contentful/bootstrap/templates"
5
+ require "contentful/bootstrap/token"
@@ -0,0 +1,135 @@
1
+ require "net/http"
2
+ require "contentful/management"
3
+ require "contentful/management/request"
4
+ require "contentful/management/error"
5
+ require "contentful/bootstrap/token"
6
+ require "contentful/bootstrap/server"
7
+ require "contentful/bootstrap/support"
8
+ require "contentful/bootstrap/templates"
9
+ require "contentful/bootstrap/version"
10
+
11
+ module Contentful
12
+ module Bootstrap
13
+ class Commands
14
+ include Support
15
+
16
+ def initialize(config_path = "")
17
+ Token.set_path!(config_path)
18
+ end
19
+
20
+ def create_space(space_name, template_name = nil, from_command = true)
21
+ get_configuration if from_command
22
+
23
+ management_client_init
24
+
25
+ puts "Creating Space '#{space_name}'"
26
+ space = nil
27
+ begin
28
+ space = Contentful::Management::Space.create(name: space_name)
29
+ rescue Contentful::Management::NotFound
30
+ puts "Your account has multiple organizations"
31
+ print "Please insert the Organization ID you'd want to create the spaces for: "
32
+ organization_id = gets.chomp
33
+ space = Contentful::Management::Space.create(name: space_name, organization_id: organization_id)
34
+ end
35
+
36
+ puts "Space '#{space_name}' created!"
37
+ puts
38
+
39
+ unless template_name.nil?
40
+ if templates.has_key? template_name.to_sym
41
+ puts "Creating Template '#{template_name}'"
42
+
43
+ templates[template_name.to_sym].new(space).run
44
+ puts "Template '#{template_name}' created!"
45
+ else
46
+ puts "Template '#{template_name}' not found. Valid templates are '#{templates.keys.map(&:to_s).join('\', \'')}'"
47
+ end
48
+ end
49
+
50
+ token = generate_token(space, "Bootstrap Token", false)
51
+ puts
52
+ puts "Space ID: '#{space.id}'"
53
+ puts "Access Token: '#{token}'"
54
+ puts
55
+ puts "You can now insert those values into your configuration blocks"
56
+ end
57
+
58
+ def generate_token(space, token_name = "Bootstrap Token", from_command = true)
59
+ get_configuration if from_command
60
+ management_client_init if from_command
61
+
62
+ if space.is_a?(String)
63
+ space = Contentful::Management::Space.find(space)
64
+ end
65
+
66
+ puts
67
+ puts "Creating Delivery API Token"
68
+
69
+ response = Contentful::Management::Request.new(
70
+ "/#{space.id}/api_keys",
71
+ 'name' => token_name,
72
+ 'description' => "Created with 'contentful_bootstrap.rb v#{Contentful::Bootstrap::VERSION}'"
73
+ ).post
74
+ fail response if response.object.is_a?(Contentful::Management::Error)
75
+ token = response.object["accessToken"]
76
+
77
+ puts "Token '#{token_name}' created! - '#{token}'"
78
+ print "Do you want to write the Delivery Token to your configuration file? (Y/n): "
79
+ Token.write_access_token(token) unless gets.chomp.downcase == "n"
80
+
81
+ token
82
+ end
83
+
84
+ private
85
+ def get_configuration
86
+ if !Token.present?
87
+ print "OAuth Token not found, do you want to create a new configuration file? (Y/n): "
88
+ if gets.chomp.downcase == "n"
89
+ puts "Exiting!"
90
+ return
91
+ end
92
+ puts "Configuration will be saved on #{Token.filename}"
93
+
94
+ puts "A new tab on your browser will open for requesting OAuth permissions"
95
+ get_token
96
+ else
97
+ puts "OAuth token found, moving on!"
98
+ end
99
+ puts
100
+ end
101
+
102
+ def management_client_init
103
+ Contentful::Management::Client.new(Token.read, raise_errors: true)
104
+ end
105
+
106
+ def get_token
107
+ silence_stderr do # Don't show any WEBrick related stuff
108
+ server = Server.new
109
+
110
+ server.start
111
+
112
+ while !server.running? # Wait for Server Init
113
+ sleep(1)
114
+ end
115
+
116
+ Net::HTTP.get(URI('http://localhost:5123'))
117
+
118
+ while !Token.present? # Wait for User to do OAuth cycle
119
+ sleep(1)
120
+ end
121
+
122
+ server.stop
123
+ end
124
+ end
125
+
126
+ def templates
127
+ {
128
+ blog: Templates::Blog,
129
+ gallery: Templates::Gallery,
130
+ catalogue: Templates::Catalogue
131
+ }
132
+ end
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,8 @@
1
+ module Contentful
2
+ module Bootstrap
3
+ module Constants
4
+ OAUTH_APP_ID = "a19770bea126e6d596d8599ff42e14173409e3e252895b78d0cb289c10586276".freeze
5
+ OAUTH_CALLBACK_URL = "http://localhost:5123/oauth_callback".freeze
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,97 @@
1
+ require "thread"
2
+ require "webrick"
3
+ require "launchy"
4
+ require "contentful/bootstrap/constants"
5
+ require "contentful/bootstrap/token"
6
+
7
+ module Contentful
8
+ module Bootstrap
9
+ class OAuthEchoView
10
+ def render
11
+ <<-JS
12
+ <html><head>
13
+ <link rel="shortcut icon" type="image/png" href="https://www.contentful.com/assets/images/favicons/favicon-47dc5f9d.png"/>
14
+ <link rel="shortcut icon" type="image/png" href="https://www.contentful.com/assets/images/favicons/favicon-47dc5f9d.png"/>
15
+ </head><body>
16
+ <script type="text/javascript">
17
+ (function() {
18
+ var access_token = window.location.hash.split('&')[0].split('=')[1];
19
+ window.location.replace('http://localhost:5123/save_token?token=' + access_token);
20
+ })();
21
+ </script>
22
+ </body></html>
23
+ JS
24
+ end
25
+ end
26
+
27
+ class ThanksView
28
+ def render
29
+ <<-HTML
30
+ <html><head>
31
+ <link rel="shortcut icon" type="image/png" href="https://www.contentful.com/assets/images/favicons/favicon-47dc5f9d.png"/>
32
+ <link rel="shortcut icon" type="image/png" href="https://www.contentful.com/assets/images/favicons/favicon-47dc5f9d.png"/>
33
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />
34
+ </head><body>
35
+ <div class="container">
36
+ <div class="jumbotron">
37
+ <h1>Contentful Bootstrap</h1>
38
+ <h4>Thanks! The OAuth Token has been generated</h4>
39
+ <p>The Space you specified will now start to create. You can close this window freely</p>
40
+ </div>
41
+ </div>
42
+ </body></html>
43
+ HTML
44
+ end
45
+ end
46
+
47
+ class IndexController < WEBrick::HTTPServlet::AbstractServlet
48
+ def do_GET(request, response)
49
+ client_id = Contentful::Bootstrap::Constants::OAUTH_APP_ID
50
+ redirect_uri = Contentful::Bootstrap::Constants::OAUTH_CALLBACK_URL
51
+ scope = "content_management_manage"
52
+ Launchy.open("https://be.contentful.com/oauth/authorize?response_type=token&client_id=#{client_id}&redirect_uri=#{redirect_uri}&scope=#{scope}")
53
+ response.status = 200
54
+ response.body = ""
55
+ end
56
+ end
57
+
58
+ class OAuthCallbackController < WEBrick::HTTPServlet::AbstractServlet
59
+ def do_GET(request, response)
60
+ response.status = 200
61
+ response.content_type = "text/html"
62
+ response.body = OAuthEchoView.new.render
63
+ end
64
+ end
65
+
66
+ class SaveTokenController < WEBrick::HTTPServlet::AbstractServlet
67
+ def do_GET(request, response)
68
+ Token.write(request.query["token"])
69
+ response.status = 200
70
+ response.content_type = "text/html"
71
+ response.body = ThanksView.new.render
72
+ end
73
+ end
74
+
75
+ class Server
76
+ attr_reader :server
77
+ def initialize
78
+ @server = WEBrick::HTTPServer.new(:Port => 5123)
79
+ @server.mount "/", IndexController
80
+ @server.mount "/oauth_callback", OAuthCallbackController
81
+ @server.mount "/save_token", SaveTokenController
82
+ end
83
+
84
+ def start
85
+ Thread.new { @server.start }
86
+ end
87
+
88
+ def stop
89
+ @server.shutdown
90
+ end
91
+
92
+ def running?
93
+ @server.status != :Stop
94
+ end
95
+ end
96
+ end
97
+ end