bootic_cli 0.2.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd50a52e936001ba2e5617b9348fc09d02f06c32
4
- data.tar.gz: 4c1627e9cefa13c331c26d4c0be4d313732ac656
3
+ metadata.gz: 14a54ce4a89784dff4a594eb5d16ee9b9a3bc10e
4
+ data.tar.gz: 3ccae9ef9c150991409e60ec8ffd2763728eaab9
5
5
  SHA512:
6
- metadata.gz: 8abeb01f0803e325263d202299f320983e1ee06f573595aba050de7707976430515d69f96f34e9585cf0893da687e1f37a6bcf8e489da5c39720f276c0e05c8d
7
- data.tar.gz: 71385f3e902cfe3ececa8bf88ff6dee593288c0eae8c299ee9330e41ddaadd618d291e2e52e237cc634f1fb2d9b0459c92cd284400077a754f20195c544baa67
6
+ metadata.gz: d0571df846d44ca03ca5385573a9e0f5dae6928bda9dbe210f3c8a403b8fbed3518c68996fd54d15fb4bfd8d9eed6c24a30cc9a5db37c5fa5a3b72adecbded13
7
+ data.tar.gz: 29d21d81ef59ac13ce3e832f099fa90aa453e36769646e738957ffe672d6521e1e8b2d2f2d62fea47c3b265966ff0c88650aa464572da8638d2920fe469335f2
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bootic_cli/cli"
4
-
3
+ require "bootic_cli"
5
4
  BooticCli::CLI.start
data/bootic_cli.gemspec CHANGED
@@ -7,17 +7,17 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "bootic_cli"
8
8
  spec.version = BooticCli::VERSION
9
9
  spec.authors = ["Ismael Celis"]
10
- spec.email = ["ismaelct@gmail.com"]
10
+ spec.email = ["ismael@bootic.io"]
11
11
 
12
- spec.summary = %q{Bootic command line.}
13
- spec.description = %q{Bootic command line.}
14
- spec.homepage = "http://www.bootic.net"
12
+ spec.summary = %q{Bootic command-line client.}
13
+ spec.description = %q{Bootic command-line client.}
14
+ spec.homepage = "http://www.bootic.io"
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
18
+ spec.bindir = 'bin'
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_dependency 'thor', '~> 0'
23
23
  spec.add_dependency 'bootic_client', "~> 0.0.19"
@@ -31,9 +31,10 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "byebug", "~> 9"
32
32
 
33
33
  spec.post_install_message = <<-END
34
- Bootic client installed.
35
- Try running:
36
- btc help
34
+ -------------------------------------------------------------
35
+ Woot! You've just installed the Bootic command-line client!
36
+ Please run `bootic setup` to configure your credentials.
37
+ -------------------------------------------------------------
37
38
  END
38
39
 
39
40
  end
@@ -1,32 +1,78 @@
1
1
  require 'thor'
2
+ require 'bootic_cli/version'
2
3
  require 'bootic_cli/connectivity'
3
4
  require 'bootic_cli/formatters'
4
5
 
5
6
  module BooticCli
7
+
6
8
  class CLI < Thor
7
9
  include Thor::Actions
8
10
  include BooticCli::Connectivity
9
11
 
10
- DEFAULT_ENV = 'production'.freeze
11
12
  CUSTOM_COMMANDS_DIR = ENV.fetch("BTC_CUSTOM_COMMANDS_PATH") { File.join(ENV["HOME"], "btc") }
12
13
 
13
- class_option :environment, type: :string, default: DEFAULT_ENV, aliases: :e, banner: '<production>'
14
+ # override Thor's help method to print banner and check for keys
15
+ def help
16
+ say "Bootic CLI v#{BooticCli::VERSION}\n\n", :bold
17
+ super
18
+ check_client_keys
19
+ end
20
+
21
+ map %w[--version -v] => :__print_version
22
+ desc "--version, -v", "Prints package version"
23
+ def __print_version
24
+ puts BooticCli::VERSION
25
+ end
14
26
 
15
- desc 'setup', 'Setup OAuth2 application credentials'
27
+ desc 'setup', 'Setup Bootic application credentials'
16
28
  def setup
17
- say "Please create an OAuth2 app and get its credentials at https://auth.bootic.net/dev/apps or the relevant auth app for your environment", :yellow
18
- if options[:environment] != DEFAULT_ENV
19
- auth_host = ask("Enter auth endpoint host (#{BooticClient::AUTH_HOST}):").chomp
20
- api_root = ask("Enter API root (#{BooticClient::API_ROOT}):").chomp
29
+ apps_host = "auth.bootic.net"
30
+ dev_app_url = "#{apps_host}/dev/cli"
31
+
32
+ if session.setup?
33
+ input = ask "Looks like you're already set up. Do you want to re-enter your app's credentials? [n]", :magenta
34
+ if input != 'y'
35
+ say 'Thought so. Bye!'
36
+ exit(1)
37
+ end
38
+ else
39
+ say "This CLI uses the #{bold('Bootic API')} in order to interact with your shop's data."
40
+ say "This means you need to create a Bootic app at #{bold(dev_app_url)} to access the API and use the CLI.\n"
41
+ end
42
+
43
+ input = ask "Have you created a Bootic app yet? [n]"
44
+ if input == 'y'
45
+ say "Great. Remember you can get your app's credentials at #{bold(dev_app_url)}."
46
+ else
47
+ say "Please visit https://#{bold(dev_app_url)} and hit the 'Create' button."
48
+ sleep 2
49
+ # Launchy.open(apps_url)
50
+ say ""
51
+ end
52
+
53
+ if current_env != DEFAULT_ENV
54
+ auth_host = ask("Enter auth endpoint host (#{BooticClient::AUTH_HOST}):", :bold).chomp
55
+ api_root = ask("Enter API root (#{BooticClient::API_ROOT}):", :bold).chomp
21
56
  auth_host = nil if auth_host == ""
22
57
  api_root = nil if api_root == ""
23
58
  end
24
- client_id = ask("Enter your application's client_id:")
25
- client_secret = ask("Enter your application's client_secret:")
59
+
60
+ client_id = ask("Enter your application's client_id:", :bold)
61
+ client_secret = ask("Enter your application's client_secret:", :bold)
26
62
 
27
63
  session.setup(client_id, client_secret, auth_host: auth_host, api_root: api_root)
28
64
 
29
- say "Credentials stored for #{options[:environment]} environment. client_id: #{client_id}"
65
+ if current_env == DEFAULT_ENV
66
+ say "Credentials stored!", :magenta
67
+ else
68
+ say "Credentials stored for #{current_env} env.", :magenta
69
+ end
70
+
71
+ return if ENV['nologin']
72
+
73
+ say ""
74
+ sleep 3
75
+ login
30
76
  end
31
77
 
32
78
  desc 'login', 'Login to your Bootic account'
@@ -36,44 +82,67 @@ module BooticCli
36
82
  invoke :setup, []
37
83
  end
38
84
 
39
- username = ask("Enter your Bootic email")
40
- pwd = ask("Enter your Bootic password:", echo: false)
85
+ if session.logged_in?
86
+ input = ask "Looks like you're already logged in. Do you want to redo this step? [n]", :magenta
87
+ if input != 'y'
88
+ say 'Thought so. Bye!'
89
+ exit(1)
90
+ end
91
+ end
92
+
93
+ username = ask("Enter your Bootic email:", :bold)
94
+ pwd = ask("Enter your Bootic password:", :bold, echo: false)
41
95
 
42
- say "Loging in as #{username}. Getting access token..."
96
+ if username.strip == '' or pwd.strip == ''
97
+ say "\nPlease make sure to enter valid data.", :red
98
+ exit 1
99
+ end
100
+
101
+ say "\n\nAlrighty! Getting access token for #{username}...\n"
43
102
 
44
103
  begin
45
- session.login username, pwd, scope
46
- say "Logged in as #{username} (#{scope})"
47
- say "try: btc help"
104
+ session.login(username, pwd, scope)
105
+ say "Great success! You're now logged in as #{username} (#{scope})", :green
106
+ say "For a list of available commands, run `bootic help`."
48
107
  rescue StandardError => e
49
- say e.message
108
+ say e.message, :red
109
+ if e.message['No application with client ID']
110
+ sleep 2
111
+ say "\nTry running `bootic setup` again. Or perhaps you missed the ENV variable?", :magenta
112
+ end
50
113
  end
51
114
  end
52
115
 
53
116
  desc 'logout', 'Log out (delete access token)'
54
117
  def logout
55
- session.logout!
56
- say_status 'Logged out', 'You are now logged out', :red
118
+ if session.logged_in?
119
+ session.logout!
120
+ say 'Done. You are now logged out.', :magenta
121
+ else
122
+ say "You're not logged in. Did you mean `bootic login` perhaps?", :red
123
+ end
57
124
  end
58
125
 
59
126
  desc "erase", "clear all credentials from this computer"
60
127
  def erase
61
- session.erase!
62
- say "all credentials erased from this computer"
128
+ if session.setup?
129
+ session.erase!
130
+ say "Ok mister. All credentials have been erased.", :magenta
131
+ else
132
+ say "Couldn't find any stored credentials.", :red
133
+ end
63
134
  end
64
135
 
65
- desc 'info', 'Test API connectivity'
66
- def info
136
+ desc 'check', 'Test API connectivity'
137
+ def check
67
138
  logged_in_action do
139
+ say "Yup, API connection is working!\n\n", :green
140
+
68
141
  print_table([
69
- ['username', root.user_name],
70
- ['email', root.email],
71
- ['scopes', root.scopes],
72
- ['shop', "#{shop.url} (#{shop.subdomain})"],
73
- ['custom commands dir', CUSTOM_COMMANDS_DIR]
142
+ [bold('Email'), root.email],
143
+ [bold('Shop'), "#{shop.url} (#{shop.subdomain})"],
144
+ [bold('Scopes'), root.scopes]
74
145
  ])
75
-
76
- say_status 'OK', 'API connection is working', :green
77
146
  end
78
147
  end
79
148
 
@@ -119,6 +188,10 @@ module BooticCli
119
188
 
120
189
  private
121
190
 
191
+ def bold(str)
192
+ set_color(str, :bold)
193
+ end
194
+
122
195
  def self.underscore(str)
123
196
  str.gsub(/::/, '/').
124
197
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
@@ -6,6 +6,14 @@ module BooticCli
6
6
  include Thor::Actions
7
7
  include BooticCli::Connectivity
8
8
 
9
+ # override Thor's help method to print banner and check for keys
10
+ def help(some, arg)
11
+ say "Bootic CLI v#{BooticCli::VERSION}\n\n", :bold
12
+ super
13
+
14
+ examples if respond_to?(:examples)
15
+ end
16
+
9
17
  def self.declare(klass, descr)
10
18
  BooticCli::CLI.sub klass, descr
11
19
  end
@@ -75,7 +75,7 @@ module BooticCli
75
75
  end
76
76
  end
77
77
 
78
- declare self, "manage orders"
78
+ declare self, "Manage shop orders"
79
79
  end
80
80
  end
81
81
  end
@@ -5,12 +5,19 @@ require 'bootic_cli/themes/theme_selector'
5
5
  module BooticCli
6
6
  module Commands
7
7
  class Themes < BooticCli::Command
8
- desc 'clone [shop] [dir]', 'Clone remote [shop] theme into directory [dir] (shop subdomain by default)'
8
+
9
+ # def examples
10
+ # say "Note: By [shop] we always mean the shop's subdomain. For example:"
11
+ # say "bootic themes clone dir --shop=foobar (assuming my shop runs at foobar.bootic.net)"
12
+ # end
13
+
14
+ desc 'clone [dir]', 'Clone remote theme into directory [dir]'
15
+ option :shop, banner: '<shop_subdomain>', type: :string
9
16
  option :destroy, banner: '<true|false>', type: :boolean, default: true
10
17
  option :public, banner: '<true|false>', type: :boolean, default: false, aliases: '-p'
11
- def clone(subdomain = nil, dir = nil)
18
+ def clone(dir = nil)
12
19
  logged_in_action do
13
- local_theme, remote_theme = theme_selector.setup_theme_pair(subdomain, dir, options['public'])
20
+ local_theme, remote_theme = theme_selector.setup_theme_pair(options['shop'], dir, options['public'])
14
21
  workflows.pull(local_theme, remote_theme, destroy: options['destroy'])
15
22
  end
16
23
  end
@@ -18,9 +25,9 @@ module BooticCli
18
25
  desc 'pull', 'Pull remote changes into current theme directory'
19
26
  option :public, banner: '<true|false>', type: :boolean, default: false, aliases: '-p'
20
27
  option :destroy, banner: '<true|false>', type: :boolean, default: true
21
- def pull(subdomain = nil, dir = '.')
22
- logged_in_action do
23
- local_theme, remote_theme = theme_selector.select_theme_pair(subdomain, dir, options['public'])
28
+ def pull
29
+ within_theme do
30
+ local_theme, remote_theme = theme_selector.select_theme_pair(default_subdomain, current_dir, options['public'])
24
31
  workflows.pull(local_theme, remote_theme, destroy: options['destroy'])
25
32
  end
26
33
  end
@@ -28,67 +35,88 @@ module BooticCli
28
35
  desc 'push', 'Push all local theme files in current dir to remote shop'
29
36
  option :public, banner: '<true|false>', type: :boolean, default: false, aliases: '-p'
30
37
  option :destroy, banner: '<true|false>', type: :boolean, default: true
31
- def push(subdomain = nil, dir = '.')
32
- logged_in_action do
33
- local_theme, remote_theme = theme_selector.select_theme_pair(subdomain, dir, options['public'])
38
+ def push
39
+ within_theme do
40
+ local_theme, remote_theme = theme_selector.select_theme_pair(default_subdomain, current_dir, options['public'])
34
41
  workflows.push(local_theme, remote_theme, destroy: options['destroy'])
35
42
  end
36
43
  end
37
44
 
38
45
  desc 'sync', 'Sync local theme copy in local dir with remote shop'
39
46
  option :public, banner: '<true|false>', type: :boolean, default: false, aliases: '-p'
40
- def sync(subdomain = nil, dir = '.')
41
- logged_in_action do
42
- local_theme, remote_theme = theme_selector.select_theme_pair(subdomain, dir, options['public'])
47
+ def sync
48
+ within_theme do
49
+ local_theme, remote_theme = theme_selector.select_theme_pair(default_subdomain, current_dir, options['public'])
43
50
  workflows.sync(local_theme, remote_theme)
44
51
  end
45
52
  end
46
53
 
47
54
  desc 'compare', 'Show differences between local and remote copies'
48
55
  option :public, banner: '<true|false>', type: :boolean, default: false, aliases: '-p'
49
- def compare(subdomain = nil, dir = '.')
50
- logged_in_action do
51
- local_theme, remote_theme = theme_selector.select_theme_pair(subdomain, dir, options['public'])
56
+ def compare
57
+ within_theme do
58
+ local_theme, remote_theme = theme_selector.select_theme_pair(default_subdomain, current_dir, options['public'])
52
59
  workflows.compare(local_theme, remote_theme)
53
60
  end
54
61
  end
55
62
 
56
- desc 'watch', 'Watch theme directory at ./ and create/update/delete the one in remote shop when changed'
63
+ desc 'watch', 'Watch local theme directory and create/update/delete remote one when any file changes'
57
64
  option :public, banner: '<true|false>', type: :boolean, default: false, aliases: '-p'
58
- def watch(subdomain = nil, dir = '.')
59
- logged_in_action do
60
- _, remote_theme = theme_selector.select_theme_pair(subdomain, dir, options['public'])
61
- workflows.watch(dir, remote_theme)
65
+ def watch
66
+ within_theme do
67
+ _, remote_theme = theme_selector.select_theme_pair(default_subdomain, current_dir, options['public'])
68
+ workflows.watch(current_dir, remote_theme)
62
69
  end
63
70
  end
64
71
 
65
72
  desc 'publish', 'Publish local files to remote public theme'
66
- def publish(subdomain = nil, dir = '.')
67
- logged_in_action do
68
- local_theme, remote_theme = theme_selector.select_theme_pair(subdomain, dir, false)
73
+ def publish
74
+ within_theme do
75
+ local_theme, remote_theme = theme_selector.select_theme_pair(default_subdomain, current_dir, false)
69
76
  workflows.publish(local_theme, remote_theme)
70
77
  end
71
78
  end
72
79
 
73
80
  desc 'open', 'Open theme preview URL in a browser'
74
81
  option :public, banner: '<true|false>', type: :boolean, default: false, aliases: '-p'
75
- def open(subdomain = nil, dir = '.')
76
- logged_in_action do
77
- _, remote_theme = theme_selector.select_theme_pair(subdomain, dir, options['public'])
82
+ def open
83
+ within_theme do
84
+ _, remote_theme = theme_selector.select_theme_pair(default_subdomain, current_dir, options['public'])
78
85
  Launchy.open remote_theme.path
79
86
  end
80
87
  end
81
88
 
82
- desc 'pair [shop]', 'Pair this directory to remote [shop]'
83
- def pair(subdomain, dir = '.')
84
- logged_in_action do
85
- local_theme = theme_selector.pair(subdomain, dir)
86
- say "Directory #{local_theme.path} paired with shop #{subdomain}", :yellow
89
+ desc 'pair', 'Pair this directory to remote [shop]'
90
+ option :shop, banner: '<shop_subdomain>', type: :string, required: true
91
+ def pair
92
+ within_theme do
93
+ local_theme = theme_selector.pair(options['shop'], current_dir)
94
+ prompt.say "Directory #{local_theme.path} paired with shop #{options['shop']}", :green
87
95
  end
88
96
  end
89
97
 
90
98
  private
91
99
 
100
+ def within_theme(&block)
101
+ dir = File.expand_path(current_dir)
102
+ unless File.exist?(File.join(dir, 'layout.html'))
103
+ prompt.say "This directory doesn't look like a Bootic theme! (#{dir})", :magenta
104
+ abort
105
+ end
106
+
107
+ logged_in_action do
108
+ yield
109
+ end
110
+ end
111
+
112
+ def current_dir
113
+ '.'
114
+ end
115
+
116
+ def default_subdomain
117
+ nil
118
+ end
119
+
92
120
  def prompt
93
121
  @prompt ||= Prompt.new
94
122
  end
@@ -108,29 +136,29 @@ module BooticCli
108
136
 
109
137
  def yes_or_no?(question, default_answer)
110
138
  default_char = default_answer ? 'y' : 'n'
111
- input = shell.ask("\n#{question} [#{default_char}]").strip
139
+ input = shell.ask("#{question} [#{default_char}]").strip
112
140
  return default_answer if input == '' || input.downcase == default_char
113
141
  !default_answer
114
142
  end
115
143
 
116
144
  def notice(str)
117
145
  parts = [" --->", str]
118
- highlight parts.join(' ')
119
- end
120
-
121
- def highlight(str, color = :bold)
122
- say str, color
146
+ puts highlight parts.join(' ')
123
147
  end
124
148
 
125
149
  def say(str, color = nil)
126
150
  shell.say str, color
127
151
  end
128
152
 
153
+ def highlight(str, color = :bold)
154
+ shell.set_color str, color
155
+ end
156
+
129
157
  private
130
158
  attr_reader :shell
131
159
  end
132
160
 
133
- declare self, 'manage shop themes'
161
+ declare self, 'Manage shop themes'
134
162
  end
135
163
  end
136
164
  end
@@ -4,15 +4,21 @@ require 'bootic_cli/session'
4
4
  module BooticCli
5
5
  module Connectivity
6
6
 
7
+ DEFAULT_ENV = 'production'.freeze
8
+
7
9
  private
8
10
 
9
11
  def session
10
12
  @session ||= (
11
- store = BooticCli::Store.new(base_dir: ENV['HOME'], namespace: options[:environment])
13
+ store = BooticCli::Store.new(base_dir: ENV['HOME'], namespace: current_env)
12
14
  BooticCli::Session.new(store)
13
15
  )
14
16
  end
15
17
 
18
+ def current_env
19
+ ENV['ENV'] || DEFAULT_ENV
20
+ end
21
+
16
22
  def root
17
23
  @root ||= session.client.root
18
24
  end
@@ -22,26 +28,35 @@ module BooticCli
22
28
  end
23
29
 
24
30
  def logged_in_action(&block)
25
- if session.needs_upgrade?
26
- say_status "WARNING", "old store data structure, restructuring to support multiple environments"
27
- session.upgrade!
28
- end
29
-
30
- if !session.setup?
31
- say_status "ERROR", "No app credentials. Run btc setup -e #{options[:environment]}", :red
32
- return
33
- end
31
+ check_client_keys!
32
+ check_access_token!
33
+ yield
34
+ rescue StandardError => e
35
+ say e.message, :red
36
+ nil
37
+ end
34
38
 
39
+ def check_access_token!
35
40
  if !session.logged_in?
36
- say_status "ERROR", "No access token. Run btc login -e #{options[:environment]}", :red
37
- return
41
+ raise "No access token found! Please run `bootic login`."
38
42
  end
43
+ end
39
44
 
40
- yield
45
+ def check_client_keys
46
+ has_client_keys? or say "CLI not configured yet! Please run `bootic setup`.", :magenta
47
+ end
41
48
 
42
- rescue StandardError => e
43
- say_status "ERROR", e.message, :red
44
- nil
49
+ def check_client_keys!
50
+ has_client_keys? or raise "CLI not configured yet! Please run `bootic setup`."
51
+ end
52
+
53
+ def has_client_keys?
54
+ if session.needs_upgrade?
55
+ say "Old store data structure, restructuring to support multiple environments...", :cyan
56
+ session.upgrade!
57
+ end
58
+
59
+ session.setup?
45
60
  end
46
61
  end
47
62
  end
@@ -11,30 +11,30 @@ module BooticCli
11
11
 
12
12
  def setup_theme_pair(subdomain, dir = nil, production = false)
13
13
  shop = find_remote_shop(subdomain)
14
- raise "no shop with subdomain #{subdomain}" unless shop
14
+ raise "No shop with subdomain #{subdomain}" unless shop
15
15
 
16
16
  path = dir || shop.subdomain
17
17
  local_theme = select_local_theme(path, shop.subdomain)
18
18
  remote_theme = select_remote_theme(shop, production)
19
19
 
20
20
  prompt.say "Cloning theme files into #{local_theme.path}"
21
- prompt.say "Preview remote theme at #{remote_theme.path}", :yellow
21
+ prompt.say "Preview this theme at #{remote_theme.path}", :magenta
22
22
  [local_theme, remote_theme]
23
23
  end
24
24
 
25
25
  def select_theme_pair(subdomain, dir, production = false)
26
26
  local_theme = select_local_theme(dir)
27
27
  shop = find_remote_shop(local_theme.subdomain)
28
- raise "no shop with subdomain #{local_theme.subdomain}" unless shop
28
+ raise "No shop with subdomain #{local_theme.subdomain}" unless shop
29
29
  remote_theme = select_remote_theme(shop, production)
30
30
 
31
- prompt.say "Preview remote theme at #{remote_theme.path}", :yellow
31
+ prompt.say "Preview this theme at #{remote_theme.path}", :magenta
32
32
  [local_theme, remote_theme]
33
33
  end
34
34
 
35
35
  def pair(subdomain, dir)
36
36
  shop = find_remote_shop(subdomain)
37
- raise "no shop with subdomain #{subdomain}" unless shop
37
+ raise "No shop with subdomain #{subdomain}" unless shop
38
38
  select_local_theme(dir, subdomain)
39
39
  end
40
40
 
@@ -63,11 +63,11 @@ module BooticCli
63
63
 
64
64
  def resolve_remote_theme(shop, production = false)
65
65
  if production
66
- prompt.say "Working on production theme", :red
66
+ prompt.say "Working on public theme of shop #{shop.subdomain}", :red
67
67
  return shop.theme
68
68
  end
69
69
 
70
- prompt.say "Working on development theme", :green
70
+ prompt.say "Working on development theme of shop #{shop.subdomain}", :green
71
71
  themes = shop.themes
72
72
  if themes.has?(:dev_theme)
73
73
  themes.dev_theme
@@ -185,15 +185,15 @@ module BooticCli
185
185
  end
186
186
 
187
187
  def publish(local_theme, remote_theme)
188
- keep_old_theme = prompt.yes_or_no?("Do you want to keep the dev theme as the old public one?", false)
188
+ keep_old_theme = prompt.yes_or_no?("Do you want to keep your old public theme as your dev theme?", false)
189
189
  # first push local files to dev theme
190
- prompt.say "pushing local changes to development theme"
190
+ prompt.say "Pushing local changes to development theme"
191
191
  push local_theme, remote_theme, destroy: true
192
192
  # now publish remote dev theme
193
193
  # let it fail if remote_theme doesn't respond to #publish
194
- prompt.notice "publishing development theme"
194
+ prompt.notice "Publishing development theme"
195
195
  remote_theme.publish(!keep_old_theme) # swap remote themes
196
- prompt.highlight "published to #{remote_theme.href}", :yellow
196
+ prompt.notice "Published to #{remote_theme.href}", :yellow
197
197
  end
198
198
 
199
199
  private
@@ -205,11 +205,11 @@ module BooticCli
205
205
 
206
206
  dupes.each do |downcased|
207
207
  arr = list.select { |f| f.file_name.downcase == downcased }
208
- highlight(" --> Name clash between files: " + arr.map(&:file_name).join(', '), :red)
208
+ prompt.say(" --> Name clash between files: " + arr.map(&:file_name).join(', '), :red)
209
209
  end
210
210
 
211
211
  if dupes.any?
212
- highlight("Please ensure there are no name clashes before continuing. Thanks!")
212
+ prompt.say("Please ensure there are no name clashes before continuing. Thanks!")
213
213
  abort
214
214
  end
215
215
  end
@@ -256,7 +256,7 @@ module BooticCli
256
256
  else
257
257
  target_asset = to.assets.find{ |t| t.file_name == a.file_name }
258
258
  if target_asset
259
- opts[:interactive] && prompt.yes_or_no?("Asset exists: #{a.file_name}. Overwrite?", false)
259
+ opts[:interactive] && prompt.yes_or_no?("Asset exists: #{highlight(a.file_name)}. Overwrite?", false)
260
260
  else
261
261
  true
262
262
  end
@@ -1,3 +1,3 @@
1
1
  module BooticCli
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/bootic_cli.rb CHANGED
@@ -1,6 +1 @@
1
- require "bootic_cli/version"
2
-
3
- module BooticCli
4
- # Your code goes here...
5
- end
6
-
1
+ require "bootic_cli/cli"
data/libexec/inspector ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ require "bundler/setup"
3
+ require "bootic_cli"
4
+ require "irb"
5
+ IRB.start
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bootic_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismael Celis
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-19 00:00:00.000000000 Z
11
+ date: 2018-01-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -136,25 +136,22 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '9'
139
- description: Bootic command line.
139
+ description: Bootic command-line client.
140
140
  email:
141
- - ismaelct@gmail.com
141
+ - ismael@bootic.io
142
142
  executables:
143
- - btc
143
+ - bootic
144
144
  extensions: []
145
145
  extra_rdoc_files: []
146
146
  files:
147
147
  - ".gitignore"
148
- - ".rspec"
149
148
  - ".travis.yml"
150
149
  - Gemfile
151
150
  - LICENSE.txt
152
151
  - README.md
153
152
  - Rakefile
154
- - bin/console
155
- - bin/setup
153
+ - bin/bootic
156
154
  - bootic_cli.gemspec
157
- - exe/btc
158
155
  - lib/bootic_cli.rb
159
156
  - lib/bootic_cli/cli.rb
160
157
  - lib/bootic_cli/command.rb
@@ -176,14 +173,16 @@ files:
176
173
  - lib/bootic_cli/themes/workflows.rb
177
174
  - lib/bootic_cli/version.rb
178
175
  - lib/bootic_cli/worker_pool.rb
179
- homepage: http://www.bootic.net
176
+ - libexec/inspector
177
+ homepage: http://www.bootic.io
180
178
  licenses:
181
179
  - MIT
182
180
  metadata: {}
183
- post_install_message: |
184
- Bootic client installed.
185
- Try running:
186
- btc help
181
+ post_install_message: |2
182
+ -------------------------------------------------------------
183
+ Woot! You've just installed the Bootic command-line client!
184
+ Please run `bootic setup` to configure your credentials.
185
+ -------------------------------------------------------------
187
186
  rdoc_options: []
188
187
  require_paths:
189
188
  - lib
@@ -202,5 +201,5 @@ rubyforge_project:
202
201
  rubygems_version: 2.6.13
203
202
  signing_key:
204
203
  specification_version: 4
205
- summary: Bootic command line.
204
+ summary: Bootic command-line client.
206
205
  test_files: []
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "bootic_cli"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
data/bin/setup DELETED
@@ -1,7 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
- bundle install
6
-
7
- # Do any other automated setup that you need to do here