nightcrawler_swift 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +4 -1
- data/Changelog.md +12 -2
- data/Gemfile.lock +11 -1
- data/README.md +112 -7
- data/bin/nswift +1 -1
- data/lib/nightcrawler_swift/cli/commands/url_for.rb +9 -0
- data/lib/nightcrawler_swift/cli/formatters/basic.rb +40 -0
- data/lib/nightcrawler_swift/cli/opt_parser.rb +81 -0
- data/lib/nightcrawler_swift/cli/runner.rb +127 -0
- data/lib/nightcrawler_swift/cli.rb +16 -173
- data/lib/nightcrawler_swift/command.rb +5 -14
- data/lib/nightcrawler_swift/commands/delete.rb +4 -6
- data/lib/nightcrawler_swift/commands/download.rb +4 -6
- data/lib/nightcrawler_swift/commands/list.rb +0 -6
- data/lib/nightcrawler_swift/commands/upload.rb +1 -4
- data/lib/nightcrawler_swift/connection.rb +15 -15
- data/lib/nightcrawler_swift/exceptions.rb +2 -1
- data/lib/nightcrawler_swift/gateway.rb +68 -0
- data/lib/nightcrawler_swift/version.rb +1 -1
- data/lib/nightcrawler_swift.rb +7 -2
- data/nightcrawler_swift.gemspec +1 -0
- data/spec/lib/nightcrawler_swift/cli/commands/url_for_spec.rb +34 -0
- data/spec/lib/nightcrawler_swift/cli/formatters/basic_spec.rb +117 -0
- data/spec/lib/nightcrawler_swift/cli/opt_parser_spec.rb +135 -0
- data/spec/lib/nightcrawler_swift/{cli_spec.rb → cli/runner_spec.rb} +133 -136
- data/spec/lib/nightcrawler_swift/command_spec.rb +17 -32
- data/spec/lib/nightcrawler_swift/commands/delete_spec.rb +8 -29
- data/spec/lib/nightcrawler_swift/commands/download_spec.rb +8 -29
- data/spec/lib/nightcrawler_swift/commands/list_spec.rb +14 -44
- data/spec/lib/nightcrawler_swift/commands/upload_spec.rb +1 -8
- data/spec/lib/nightcrawler_swift/connection_spec.rb +26 -9
- data/spec/lib/nightcrawler_swift/gateway_spec.rb +139 -0
- data/spec/lib/nightcrawler_swift_spec.rb +15 -2
- data/spec/spec_helper.rb +3 -0
- metadata +31 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce783e76729a865b6b3cd1fffbed84cc287234e9
|
4
|
+
data.tar.gz: 922f51e1130d4bb27b84bde8de018793c5b5a1c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba0dc5e45b62d8011f321aba5c0e28487d5b496cde054a2197db3db5baeb2c9936a542ef5ef02ad9b3d324261b8677b6520140df048045ed4f579fd5bdb8db8e
|
7
|
+
data.tar.gz: a55710e1eddf95712cb5c3821b1853854b815ecf066ee6bf22c7b259e66f1dd7ad65f1f10405e4b8fe88b0b7c3482dbea3e05faaf9a1343fc1c7425af4152da1
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,4 +1,7 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
|
3
|
+
- 2.1.2
|
4
4
|
script: bundle exec rspec
|
5
|
+
env:
|
6
|
+
global:
|
7
|
+
secure: C1/OCk7bQxlGogDpgYf0vp6e5P/+TsFvO3bnJdfUoMlO3FAZafqq+xarWNZ/caaNEkYUQ2OaQmLYKZ32yVUAPoE1mUou9vijkOIi+m/JHr1sfeJykNYZYVqi7JQ/PILw2Qs80bZ3I0AS7hWCRIADeQUPuWul06uxYEUV1SB6mQI=
|
data/Changelog.md
CHANGED
@@ -1,11 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.5.0
|
4
|
+
|
5
|
+
- CLI now supports ```-b/--bucket``` to override the default bucket/container (issue #10)
|
6
|
+
- CLI command for printing the public url of a given path (issue #18)
|
7
|
+
- CLI better treatment for errors and invalid commands
|
8
|
+
- Bugfix: CLI when receives a invalid command doesn't shows that it is an invalid command (issue #20)
|
9
|
+
- Configurable ```admin_url``` and ```public_url``` (issue #14)
|
10
|
+
- Included "public" directive in ```Cache-Control``` header
|
11
|
+
- Each request will retry X times before failing, the number of retries and the max waiting time can be configured through options
|
12
|
+
|
3
13
|
## 0.4.0
|
4
14
|
|
5
15
|
- Better catalog selection
|
6
16
|
- Treatment for no catalogs returned
|
7
|
-
- Splited asset_sync task in two other tasks: sync and asset_sync
|
8
|
-
- Configurable verify_ssl and timeout
|
17
|
+
- Splited asset_sync task in two other tasks: ```sync``` and ```asset_sync```
|
18
|
+
- Configurable ```verify_ssl``` and ```timeout```
|
9
19
|
- Automatic connect/reconnect of commands
|
10
20
|
- Bugfix: download command was not using the bucket/container name
|
11
21
|
- Bugfix: the etag header must not be quoted
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nightcrawler_swift (0.
|
4
|
+
nightcrawler_swift (0.5.0)
|
5
5
|
multi_mime (>= 1.0.1)
|
6
6
|
rest-client
|
7
7
|
|
@@ -11,10 +11,14 @@ GEM
|
|
11
11
|
byebug (3.2.0)
|
12
12
|
columnize (~> 0.8)
|
13
13
|
debugger-linecache (~> 1.2)
|
14
|
+
codeclimate-test-reporter (0.4.0)
|
15
|
+
simplecov (>= 0.7.1, < 1.0.0)
|
14
16
|
columnize (0.8.9)
|
15
17
|
debugger-linecache (1.2.0)
|
16
18
|
diff-lcs (1.2.5)
|
19
|
+
docile (1.1.5)
|
17
20
|
mime-types (2.3)
|
21
|
+
multi_json (1.10.1)
|
18
22
|
multi_mime (1.0.1)
|
19
23
|
netrc (0.7.7)
|
20
24
|
rake (10.3.2)
|
@@ -33,6 +37,11 @@ GEM
|
|
33
37
|
rspec-mocks (3.0.4)
|
34
38
|
rspec-support (~> 3.0.0)
|
35
39
|
rspec-support (3.0.4)
|
40
|
+
simplecov (0.9.0)
|
41
|
+
docile (~> 1.1.0)
|
42
|
+
multi_json
|
43
|
+
simplecov-html (~> 0.8.0)
|
44
|
+
simplecov-html (0.8.0)
|
36
45
|
|
37
46
|
PLATFORMS
|
38
47
|
ruby
|
@@ -40,6 +49,7 @@ PLATFORMS
|
|
40
49
|
DEPENDENCIES
|
41
50
|
bundler (~> 1.6)
|
42
51
|
byebug
|
52
|
+
codeclimate-test-reporter
|
43
53
|
nightcrawler_swift!
|
44
54
|
rake
|
45
55
|
rspec
|
data/README.md
CHANGED
@@ -6,18 +6,28 @@ Like the X-Men nightcrawler this gem teleports your assets to a OpenStack Swift
|
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
|
9
|
+
```ruby
|
10
|
+
gem 'nightcrawler_swift'
|
11
|
+
```
|
10
12
|
|
11
13
|
And then execute:
|
12
14
|
|
13
|
-
|
15
|
+
```sh
|
16
|
+
$ bundle
|
17
|
+
```
|
14
18
|
|
15
19
|
Or install it yourself as:
|
16
20
|
|
17
|
-
|
21
|
+
```sh
|
22
|
+
$ gem install nightcrawler_swift
|
23
|
+
```
|
18
24
|
|
19
25
|
## Usage
|
20
26
|
|
27
|
+
* [With Rails](https://github.com/tulios/nightcrawler_swift#with-rails)
|
28
|
+
* [Programatically](https://github.com/tulios/nightcrawler_swift#programatically)
|
29
|
+
* [Command Line](https://github.com/tulios/nightcrawler_swift#command-line)
|
30
|
+
|
21
31
|
### With Rails
|
22
32
|
#### 1) Configure your swift credentials and options
|
23
33
|
|
@@ -37,20 +47,36 @@ __Optional configurations:__
|
|
37
47
|
config.nightcrawler_swift.max_age = 3600 # default: nil
|
38
48
|
config.nightcrawler_swift.verify_ssl = true # default: false
|
39
49
|
config.nightcrawler_swift.timeout = 10 # in seconds, default: nil
|
50
|
+
config.nightcrawler_swift.admin_url = "https://api.host.com/v1/AUTH_1234" # default: uses the admin_url returned by authentication
|
51
|
+
config.nightcrawler_swift.public_url = "http://asset.host.com/v1/AUTH_1234" # default: uses the public_url returned by authentication
|
52
|
+
config.nightcrawler_swift.retries = 3 # default: 5, to disable set it to false
|
53
|
+
config.nightcrawler_swift.max_retry_time = 64 # in seconds, default: 30
|
40
54
|
```
|
41
55
|
|
42
|
-
_max_age_ will be used to define *Cache-Control:max-age=<value>* header.
|
43
|
-
|
44
56
|
By default it will use ```Rails.logger``` as logger, to change that use a different logger in configurations, like:
|
45
57
|
|
46
58
|
```ruby
|
47
59
|
config.nightcrawler_swift.logger = Logger.new(STDOUT)
|
48
60
|
```
|
49
61
|
|
62
|
+
##### further explanation of configurations
|
63
|
+
|
64
|
+
> max_age
|
65
|
+
|
66
|
+
It will be used to define *Cache-Control:max-age=<value>* header.
|
67
|
+
|
68
|
+
> retries
|
69
|
+
|
70
|
+
The number of times to retry the request before failing. To disable this feature set it to __false__.
|
71
|
+
|
72
|
+
> max_retry_time
|
73
|
+
|
74
|
+
Maximum delay in seconds between each retry. The delay will start with 1s and will double for each retry until this value.
|
75
|
+
|
50
76
|
#### 2) Profit!
|
51
77
|
|
52
78
|
```sh
|
53
|
-
rake nightcrawler_swift:rails:asset_sync
|
79
|
+
$ rake nightcrawler_swift:rails:asset_sync
|
54
80
|
```
|
55
81
|
|
56
82
|
It will invoke ```rake assets:precompile``` and will copy your public directory to swift bucket/container. To sync the public directory without the asset precompilation use the task: ```nightcrawler_swift:rails:sync```
|
@@ -74,7 +100,11 @@ __Optional configurations:__
|
|
74
100
|
```ruby
|
75
101
|
max_age: 3600,
|
76
102
|
verify_ssl: true,
|
77
|
-
timeout: 10
|
103
|
+
timeout: 10, # in seconds
|
104
|
+
admin_url: "https://api.host.com/v1/AUTH_1234", # default: uses the admin_url returned by authentication
|
105
|
+
public_url: "http://asset.host.com/v1/AUTH_1234", # default: uses the public_url returned by authentication
|
106
|
+
retries: 3, # default: 5, to disable set it to false
|
107
|
+
max_retry_time: 64 # in seconds, default: 30
|
78
108
|
```
|
79
109
|
|
80
110
|
By default it will use ```Logger.new(STDOUT)``` as logger, to change that use:
|
@@ -89,6 +119,58 @@ NightcrawlerSwift.logger = Logger.new(StringIO.new)
|
|
89
119
|
NightcrawlerSwift.sync File.expand_path("./my-dir")
|
90
120
|
```
|
91
121
|
|
122
|
+
### Command Line
|
123
|
+
|
124
|
+
The NightcrawlerSwift shell command (CLI) allows you to interact with your buckets/containers easily, it has the same commands of the gem. To see the help, use the cli without arguments or use the _-h_/_--help_ switch.
|
125
|
+
|
126
|
+
```sh
|
127
|
+
$ nswift # or nswift -h
|
128
|
+
```
|
129
|
+
|
130
|
+
```nswift``` will use the configurations stored at the file __.nswiftrc__ located at your home directory. If you try to use any command without the file, it will create a sample configuration for you, but you can create your own.
|
131
|
+
|
132
|
+
The configuration is a __json__ file, named __.nswiftrc__. You can include any configuration available to the gem (see the other usages example to know each option available). Follow the format:
|
133
|
+
|
134
|
+
```json
|
135
|
+
{
|
136
|
+
"bucket": "<bucket/container name>",
|
137
|
+
"tenant_name": "<tenant name>",
|
138
|
+
"username": "<username>",
|
139
|
+
"password": "<password>",
|
140
|
+
"auth_url": "<auth url, ex: https://auth.url.com:123/v2.0/tokens>"
|
141
|
+
}
|
142
|
+
```
|
143
|
+
|
144
|
+
The following commands are available through the cli:
|
145
|
+
|
146
|
+
```sh
|
147
|
+
$ nswift list
|
148
|
+
```
|
149
|
+
```sh
|
150
|
+
$ nswift upload <real_path> <swift_path> # nswift upload robots.txt assets/robots.txt
|
151
|
+
```
|
152
|
+
```sh
|
153
|
+
$ nswift download <swift_path> # nswift download assets/robots.txt > my-robots.txt
|
154
|
+
```
|
155
|
+
```sh
|
156
|
+
$ nswift delete <swift_path> # nswift delete assets/robots.txt
|
157
|
+
```
|
158
|
+
```sh
|
159
|
+
$ nswift url-for <swift_path> # nswift url-for assets/robots.txt
|
160
|
+
```
|
161
|
+
|
162
|
+
For any commands you could provide a different configuration file through the _-c_/_--config_ switch, as:
|
163
|
+
|
164
|
+
```sh
|
165
|
+
$ nswift list -c /dir/my-nswift-rc
|
166
|
+
```
|
167
|
+
|
168
|
+
and a different bucket/container name through the _-b_/_--bucket_ switch, as:
|
169
|
+
|
170
|
+
```sh
|
171
|
+
$ nwift list -b rogue
|
172
|
+
```
|
173
|
+
|
92
174
|
## Commands
|
93
175
|
|
94
176
|
NightcrawlerSwift has some useful built-in commands. All commands require the configuration and will __automatically__ connect/reconnect to keystone when necessary.
|
@@ -129,6 +211,13 @@ delete.execute "my_file_path.txt"
|
|
129
211
|
# true / false
|
130
212
|
```
|
131
213
|
|
214
|
+
### Sync
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
sync = NightcrawlerSwift::Sync.new
|
218
|
+
sync.execute "/dir/to/synchronize"
|
219
|
+
```
|
220
|
+
|
132
221
|
## Connection
|
133
222
|
|
134
223
|
To manually establish the connection with keystone, use:
|
@@ -145,6 +234,22 @@ NightcrawlerSwift.connection.connected?
|
|
145
234
|
|
146
235
|
To reconnect just use ```NightcrawlerSwift.connection.connect!``` again.
|
147
236
|
|
237
|
+
## Options
|
238
|
+
|
239
|
+
After configure the NightcrawlerSwift you can access your configurations through the __options__ method, like:
|
240
|
+
|
241
|
+
```ruby
|
242
|
+
NightcrawlerSwift.options
|
243
|
+
```
|
244
|
+
|
245
|
+
The only difference is that you will access each configuration as a method instead of a hash style, like:
|
246
|
+
|
247
|
+
```ruby
|
248
|
+
NightcrawlerSwift.configure tenant_name: "rogue"
|
249
|
+
|
250
|
+
# Can be used as:
|
251
|
+
NightcrawlerSwift.options.tenant_name # "rogue"
|
252
|
+
```
|
148
253
|
|
149
254
|
## Contributing
|
150
255
|
|
data/bin/nswift
CHANGED
@@ -0,0 +1,40 @@
|
|
1
|
+
module NightcrawlerSwift::CLI
|
2
|
+
module Formatters
|
3
|
+
class Basic
|
4
|
+
|
5
|
+
def initialize runner
|
6
|
+
@runner = runner
|
7
|
+
end
|
8
|
+
|
9
|
+
def command_list command
|
10
|
+
array = command.new.execute
|
11
|
+
array.each {|hash| @runner.log hash["name"]}
|
12
|
+
end
|
13
|
+
|
14
|
+
def command_download command
|
15
|
+
filepath = @runner.argv.first
|
16
|
+
@runner.log command.new.execute(filepath)
|
17
|
+
end
|
18
|
+
|
19
|
+
def command_upload command
|
20
|
+
realpath = @runner.argv.shift
|
21
|
+
swiftpath = @runner.argv.shift
|
22
|
+
|
23
|
+
uploaded = command.new.execute swiftpath, File.open(File.expand_path(realpath), "r")
|
24
|
+
@runner.log(uploaded ? "success" : "failure")
|
25
|
+
end
|
26
|
+
|
27
|
+
def command_delete command
|
28
|
+
filepath = @runner.argv.first
|
29
|
+
deleted = command.new.execute(filepath).to_json
|
30
|
+
@runner.log(deleted ? "success" : "failure")
|
31
|
+
end
|
32
|
+
|
33
|
+
def command_url_for command
|
34
|
+
filepath = @runner.argv.first
|
35
|
+
@runner.log command.new.execute(filepath)
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module NightcrawlerSwift::CLI
|
2
|
+
class OptParser
|
3
|
+
|
4
|
+
attr_reader :parser
|
5
|
+
|
6
|
+
def initialize runner
|
7
|
+
@runner = runner
|
8
|
+
@parser = OptionParser.new
|
9
|
+
configure_instructions
|
10
|
+
configure_options
|
11
|
+
end
|
12
|
+
|
13
|
+
def parse!
|
14
|
+
@parser.parse!(@runner.argv)
|
15
|
+
end
|
16
|
+
|
17
|
+
def help
|
18
|
+
@parser.help
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def configure_instructions
|
23
|
+
@parser.banner = "nswift #{NightcrawlerSwift::VERSION}"
|
24
|
+
@parser.separator "Usage: nswift command [options]"
|
25
|
+
@parser.separator ""
|
26
|
+
@parser.separator "commands:"
|
27
|
+
COMMANDS.keys.each do |key|
|
28
|
+
@parser.separator " #{key}\t\t\t #{COMMANDS[key][:description]}"
|
29
|
+
end
|
30
|
+
|
31
|
+
@parser.separator ""
|
32
|
+
end
|
33
|
+
|
34
|
+
def configure_options
|
35
|
+
@parser.separator "options:"
|
36
|
+
configure_option_bucket
|
37
|
+
configure_option_config
|
38
|
+
configure_option_help
|
39
|
+
configure_option_version
|
40
|
+
end
|
41
|
+
|
42
|
+
def configure_option_bucket
|
43
|
+
desc = "Alternative bucket/container name, overrides the '#{NightcrawlerSwift::CLI::CONFIG_FILE}' configuration"
|
44
|
+
@parser.on("-b", "--bucket=NAME", String, desc) do |name|
|
45
|
+
bucket = name.strip
|
46
|
+
@runner.options.bucket = bucket
|
47
|
+
@runner.log "Using bucket: #{@runner.options.bucket}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def configure_option_config
|
52
|
+
@parser.on("-c", "--config=PATH", String, "Alternative '#{NightcrawlerSwift::CLI::CONFIG_FILE}' file") do |path|
|
53
|
+
path = File.expand_path(path.strip)
|
54
|
+
|
55
|
+
unless File.exist?(path)
|
56
|
+
@runner.log "Error: No such file or directory - #{path}"
|
57
|
+
exit 1
|
58
|
+
end
|
59
|
+
|
60
|
+
@runner.log "Using custom config file at: #{path}"
|
61
|
+
@runner.options.config_file = path
|
62
|
+
@runner.options.default_config_file = false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def configure_option_help
|
67
|
+
@parser.on_tail("-h", "--help", "Show this message") do
|
68
|
+
@runner.log help
|
69
|
+
exit
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def configure_option_version
|
74
|
+
@parser.on_tail("-v", "--version", "Show version") do
|
75
|
+
@runner.log NightcrawlerSwift::VERSION
|
76
|
+
exit
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
module NightcrawlerSwift::CLI
|
2
|
+
class Runner
|
3
|
+
attr_reader :opt_parser, :options
|
4
|
+
attr_accessor :argv
|
5
|
+
|
6
|
+
def initialize argv
|
7
|
+
@argv = argv
|
8
|
+
configure_logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
configure_default_options
|
13
|
+
configure_opt_parser
|
14
|
+
parse_parameters
|
15
|
+
@command_name = argv.shift
|
16
|
+
validate_command_and_options
|
17
|
+
execute_command if @command_name
|
18
|
+
end
|
19
|
+
|
20
|
+
def log string
|
21
|
+
NightcrawlerSwift.logger.info string
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def configure_logger
|
26
|
+
STDOUT.sync = true
|
27
|
+
NightcrawlerSwift.logger.formatter = lambda {|severity, datetime, progname, msg| "#{msg}\n"}
|
28
|
+
end
|
29
|
+
|
30
|
+
def configure_default_options
|
31
|
+
user_home_dir = Dir.home
|
32
|
+
@options = OpenStruct.new
|
33
|
+
@options.configured = true
|
34
|
+
@options.default_config_file = true
|
35
|
+
@options.config_file = File.expand_path(File.join(user_home_dir, CONFIG_FILE))
|
36
|
+
@options.cache_file = File.expand_path(File.join(user_home_dir, CACHE_FILE))
|
37
|
+
@options.bucket = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
def validate_command_and_options
|
41
|
+
if @command_name.nil? or argv.nil?
|
42
|
+
log @opt_parser.help
|
43
|
+
exit
|
44
|
+
end
|
45
|
+
|
46
|
+
unless COMMANDS.include?(@command_name)
|
47
|
+
log "Error: Unknown command '#{@command_name}'"
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
|
51
|
+
unless options.configured
|
52
|
+
log "You must configure your swift credentials, take a look at:\n #{options.config_file}"
|
53
|
+
exit 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def config_hash
|
58
|
+
@config_hash ||= JSON.parse(File.read(options.config_file))
|
59
|
+
end
|
60
|
+
|
61
|
+
def execute_command
|
62
|
+
NightcrawlerSwift.configure config_hash
|
63
|
+
NightcrawlerSwift.options.bucket = @options.bucket if @options.bucket
|
64
|
+
|
65
|
+
connect_and_execute do
|
66
|
+
command_method = "command_#{command_name_normalized}"
|
67
|
+
command_class = COMMANDS[@command_name][:command]
|
68
|
+
Formatters::Basic.new(self).send(command_method, command_class)
|
69
|
+
end
|
70
|
+
|
71
|
+
rescue NightcrawlerSwift::Exceptions::BaseError, Errno::ENOENT => e
|
72
|
+
log "Error: #{e.message}"
|
73
|
+
exit 1
|
74
|
+
end
|
75
|
+
|
76
|
+
def command_name_normalized
|
77
|
+
@command_name.downcase.gsub(/-/, "_")
|
78
|
+
end
|
79
|
+
|
80
|
+
def connect_and_execute &block
|
81
|
+
path = options.cache_file
|
82
|
+
if File.exist?(path)
|
83
|
+
hash = JSON.parse File.read(path)
|
84
|
+
NightcrawlerSwift.connection.auth_response = OpenStruct.new(hash)
|
85
|
+
NightcrawlerSwift.connection.configure
|
86
|
+
|
87
|
+
token_id = NightcrawlerSwift.connection.token_id
|
88
|
+
NightcrawlerSwift.logger.debug "Cache found, restablishing connection with token_id: #{token_id}"
|
89
|
+
end
|
90
|
+
|
91
|
+
begin
|
92
|
+
block.call
|
93
|
+
ensure
|
94
|
+
File.open(path, "w") do |f|
|
95
|
+
f.write(NightcrawlerSwift.connection.auth_response.to_h.to_json)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def parse_parameters
|
101
|
+
@opt_parser.parse!
|
102
|
+
check_rcfile if options.default_config_file
|
103
|
+
|
104
|
+
rescue OptionParser::InvalidOption => e
|
105
|
+
log e.message
|
106
|
+
exit 1
|
107
|
+
end
|
108
|
+
|
109
|
+
def configure_opt_parser
|
110
|
+
@opt_parser = OptParser.new self
|
111
|
+
end
|
112
|
+
|
113
|
+
def check_rcfile
|
114
|
+
sample = NightcrawlerSwift::CLI.sample_rcfile
|
115
|
+
unless File.exist?(options.config_file)
|
116
|
+
File.open(options.config_file, "w") { |f|
|
117
|
+
f.write(sample)
|
118
|
+
}
|
119
|
+
end
|
120
|
+
|
121
|
+
if sample == File.read(options.config_file)
|
122
|
+
options.configured = false
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
end
|