twog 0.3.5 → 0.3.6
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 +4 -4
- data/.github/FUNDING.yml +12 -0
- data/.github/workflows/ruby.yml +12 -9
- data/.ruby-version +1 -1
- data/Gemfile +13 -9
- data/Gemfile.lock +88 -56
- data/Rakefile +15 -14
- data/VERSION.yml +4 -4
- data/bin/twog +39 -33
- data/lib/twog.rb +10 -7
- data/lib/twog/blog_posts_handler.rb +4 -1
- data/lib/twog/post.rb +6 -4
- data/lib/twog/rss_entry_to_twog_post_mapper.rb +2 -0
- data/lib/twog/rss_parser.rb +5 -4
- data/lib/twog/twitter_handler.rb +17 -13
- data/spec/spec_helper.rb +30 -30
- data/spec/twog/blog_posts_handler_spec.rb +8 -6
- data/spec/twog/post_spec.rb +24 -23
- data/spec/twog/rss_entry_to_twog_post_mapper_spec.rb +11 -9
- data/spec/twog/rss_parser_spec.rb +8 -6
- data/spec/twog/twitter_handler_spec.rb +18 -17
- data/spec/twog/twog_spec.rb +3 -1
- data/twog.gemspec +25 -20
- metadata +60 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 553b805d489c88a2ba32e4110fd7fda676310db26252ce6cfadf69aa0bec0be6
|
4
|
+
data.tar.gz: 115642dc76c809d8bd2fbc85da1f6d2eadba8e27a081806b0748676a28a2fe22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9122ab0d5fcb98900e77a7ec203553a9fd6a825a76318dce5acadce62117bfbebdd65da11bd6246c16134b1b2e94801dee9015c365e64e1adaa8b1545f4e5fb
|
7
|
+
data.tar.gz: b8323633414456d36ff7a513b75a39b11e12c0ddc66769af5cf3512a473e88abd83f512ef0e0b932204b565fa14852ff70c2cddac60c4f484085a09b23b67105
|
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# These are supported funding model platforms
|
2
|
+
|
3
|
+
github: [jmeridth] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
4
|
+
patreon: # Replace with a single Patreon username
|
5
|
+
open_collective: # Replace with a single Open Collective username
|
6
|
+
ko_fi: # Replace with a single Ko-fi username
|
7
|
+
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
8
|
+
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
9
|
+
liberapay: # Replace with a single Liberapay username
|
10
|
+
issuehunt: # Replace with a single IssueHunt username
|
11
|
+
otechie: # Replace with a single Otechie username
|
12
|
+
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
data/.github/workflows/ruby.yml
CHANGED
@@ -3,18 +3,21 @@ name: Ruby
|
|
3
3
|
on: [push]
|
4
4
|
|
5
5
|
jobs:
|
6
|
-
|
6
|
+
test:
|
7
7
|
|
8
8
|
runs-on: ubuntu-latest
|
9
9
|
|
10
|
+
strategy:
|
11
|
+
matrix:
|
12
|
+
ruby-version: [3.0.x, 2.7.x, 2.6.x]
|
13
|
+
|
10
14
|
steps:
|
11
|
-
- uses: actions/checkout@
|
12
|
-
- name: Set up Ruby
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
13
17
|
uses: actions/setup-ruby@v1
|
14
18
|
with:
|
15
|
-
ruby-version:
|
16
|
-
- name:
|
17
|
-
run:
|
18
|
-
|
19
|
-
|
20
|
-
bundle exec rspec
|
19
|
+
ruby-version: ${{ matrix.ruby-version }}
|
20
|
+
- name: Install dependencies
|
21
|
+
run: bundle install
|
22
|
+
- name: Run tests
|
23
|
+
run: bundle exec rspec
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0
|
data/Gemfile
CHANGED
@@ -1,16 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'http://rubygems.org'
|
2
|
-
ruby '
|
4
|
+
ruby '3.0'
|
3
5
|
|
4
|
-
gem '
|
5
|
-
gem '
|
6
|
-
gem '
|
7
|
-
gem '
|
8
|
-
gem '
|
9
|
-
gem '
|
10
|
-
gem '
|
6
|
+
gem 'activesupport'
|
7
|
+
gem 'bitly'
|
8
|
+
gem 'juwelier'
|
9
|
+
gem 'nokogiri'
|
10
|
+
gem 'rack'
|
11
|
+
gem 'rss'
|
12
|
+
gem 'twitter_oauth'
|
13
|
+
gem 'whenever'
|
11
14
|
|
12
15
|
group :development, :test do
|
13
16
|
gem 'rake'
|
14
|
-
gem 'rspec'
|
17
|
+
gem 'rspec'
|
18
|
+
gem 'rubocop'
|
15
19
|
gem 'simplecov'
|
16
20
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,38 +1,42 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (6.
|
4
|
+
activesupport (6.1.3.1)
|
5
5
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
6
|
-
i18n (>=
|
7
|
-
minitest (
|
8
|
-
tzinfo (~>
|
9
|
-
zeitwerk (~> 2.
|
6
|
+
i18n (>= 1.6, < 2)
|
7
|
+
minitest (>= 5.1)
|
8
|
+
tzinfo (~> 2.0)
|
9
|
+
zeitwerk (~> 2.3)
|
10
10
|
addressable (2.7.0)
|
11
11
|
public_suffix (>= 2.0.2, < 5.0)
|
12
|
-
|
12
|
+
ast (2.4.2)
|
13
|
+
bitly (2.0.1)
|
13
14
|
oauth2 (>= 0.5.0, < 2.0)
|
14
15
|
builder (3.2.4)
|
15
16
|
chronic (0.10.2)
|
16
|
-
concurrent-ruby (1.1.
|
17
|
+
concurrent-ruby (1.1.8)
|
17
18
|
descendants_tracker (0.0.4)
|
18
19
|
thread_safe (~> 0.3, >= 0.3.1)
|
19
|
-
diff-lcs (1.
|
20
|
-
docile (1.3.
|
21
|
-
faraday (
|
20
|
+
diff-lcs (1.4.4)
|
21
|
+
docile (1.3.5)
|
22
|
+
faraday (1.3.0)
|
23
|
+
faraday-net_http (~> 1.0)
|
22
24
|
multipart-post (>= 1.2, < 3)
|
23
|
-
|
25
|
+
ruby2_keywords
|
26
|
+
faraday-net_http (1.0.1)
|
27
|
+
git (1.8.1)
|
24
28
|
rchardet (~> 1.8)
|
25
|
-
github_api (0.
|
29
|
+
github_api (0.19.0)
|
26
30
|
addressable (~> 2.4)
|
27
31
|
descendants_tracker (~> 0.0.4)
|
28
|
-
faraday (
|
32
|
+
faraday (>= 0.8, < 2)
|
29
33
|
hashie (~> 3.5, >= 3.5.2)
|
30
34
|
oauth2 (~> 1.0)
|
31
35
|
hashie (3.6.0)
|
32
36
|
highline (2.0.3)
|
33
|
-
i18n (1.8.
|
37
|
+
i18n (1.8.9)
|
34
38
|
concurrent-ruby (~> 1.0)
|
35
|
-
json (2.
|
39
|
+
json (2.5.1)
|
36
40
|
juwelier (2.4.9)
|
37
41
|
builder
|
38
42
|
bundler
|
@@ -45,76 +49,104 @@ GEM
|
|
45
49
|
rake
|
46
50
|
rdoc
|
47
51
|
semver2
|
48
|
-
jwt (2.2.
|
52
|
+
jwt (2.2.2)
|
49
53
|
kamelcase (0.0.2)
|
50
54
|
semver2 (~> 3)
|
51
|
-
mime-types (
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
+
mime-types (3.3.1)
|
56
|
+
mime-types-data (~> 3.2015)
|
57
|
+
mime-types-data (3.2021.0225)
|
58
|
+
minitest (5.14.4)
|
59
|
+
multi_json (1.15.0)
|
55
60
|
multi_xml (0.6.0)
|
56
61
|
multipart-post (2.1.1)
|
57
|
-
nokogiri (1.
|
58
|
-
|
59
|
-
oauth (0.5.
|
60
|
-
oauth2 (1.4.
|
62
|
+
nokogiri (1.11.2-x86_64-darwin)
|
63
|
+
racc (~> 1.4)
|
64
|
+
oauth (0.5.5)
|
65
|
+
oauth2 (1.4.7)
|
61
66
|
faraday (>= 0.8, < 2.0)
|
62
67
|
jwt (>= 1.0, < 3.0)
|
63
68
|
multi_json (~> 1.3)
|
64
69
|
multi_xml (~> 0.5)
|
65
70
|
rack (>= 1.2, < 3)
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
71
|
+
parallel (1.20.1)
|
72
|
+
parser (3.0.0.0)
|
73
|
+
ast (~> 2.4.1)
|
74
|
+
psych (3.3.1)
|
75
|
+
public_suffix (4.0.6)
|
76
|
+
racc (1.5.2)
|
77
|
+
rack (2.2.3)
|
78
|
+
rainbow (3.0.0)
|
79
|
+
rake (13.0.3)
|
70
80
|
rchardet (1.8.0)
|
71
|
-
rdoc (6.
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
rspec-
|
76
|
-
|
77
|
-
rspec-
|
78
|
-
rspec-
|
81
|
+
rdoc (6.3.0)
|
82
|
+
regexp_parser (2.1.1)
|
83
|
+
rexml (3.2.4)
|
84
|
+
rspec (3.10.0)
|
85
|
+
rspec-core (~> 3.10.0)
|
86
|
+
rspec-expectations (~> 3.10.0)
|
87
|
+
rspec-mocks (~> 3.10.0)
|
88
|
+
rspec-core (3.10.1)
|
89
|
+
rspec-support (~> 3.10.0)
|
90
|
+
rspec-expectations (3.10.1)
|
79
91
|
diff-lcs (>= 1.2.0, < 2.0)
|
80
|
-
rspec-support (~> 3.
|
81
|
-
rspec-mocks (3.
|
92
|
+
rspec-support (~> 3.10.0)
|
93
|
+
rspec-mocks (3.10.2)
|
82
94
|
diff-lcs (>= 1.2.0, < 2.0)
|
83
|
-
rspec-support (~> 3.
|
84
|
-
rspec-support (3.
|
95
|
+
rspec-support (~> 3.10.0)
|
96
|
+
rspec-support (3.10.2)
|
97
|
+
rss (0.2.9)
|
98
|
+
rexml
|
99
|
+
rubocop (1.12.0)
|
100
|
+
parallel (~> 1.10)
|
101
|
+
parser (>= 3.0.0.0)
|
102
|
+
rainbow (>= 2.2.2, < 4.0)
|
103
|
+
regexp_parser (>= 1.8, < 3.0)
|
104
|
+
rexml
|
105
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
106
|
+
ruby-progressbar (~> 1.7)
|
107
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
108
|
+
rubocop-ast (1.4.1)
|
109
|
+
parser (>= 2.7.1.5)
|
110
|
+
ruby-progressbar (1.11.0)
|
111
|
+
ruby2_keywords (0.0.4)
|
85
112
|
semver2 (3.4.2)
|
86
|
-
simplecov (0.
|
113
|
+
simplecov (0.21.2)
|
87
114
|
docile (~> 1.1)
|
88
115
|
simplecov-html (~> 0.11)
|
89
|
-
|
116
|
+
simplecov_json_formatter (~> 0.1)
|
117
|
+
simplecov-html (0.12.3)
|
118
|
+
simplecov_json_formatter (0.1.2)
|
90
119
|
thread_safe (0.3.6)
|
91
120
|
twitter_oauth (0.4.94)
|
92
121
|
json (>= 1.8.0)
|
93
122
|
mime-types (>= 1.16)
|
94
123
|
oauth (>= 0.4.7)
|
95
|
-
tzinfo (
|
96
|
-
|
124
|
+
tzinfo (2.0.4)
|
125
|
+
concurrent-ruby (~> 1.0)
|
126
|
+
unicode-display_width (2.0.0)
|
97
127
|
whenever (1.0.0)
|
98
128
|
chronic (>= 0.6.3)
|
99
|
-
zeitwerk (2.
|
129
|
+
zeitwerk (2.4.2)
|
100
130
|
|
101
131
|
PLATFORMS
|
102
|
-
|
132
|
+
x86_64-darwin-20
|
103
133
|
|
104
134
|
DEPENDENCIES
|
105
|
-
activesupport
|
106
|
-
bitly
|
107
|
-
juwelier
|
108
|
-
nokogiri
|
109
|
-
rack
|
135
|
+
activesupport
|
136
|
+
bitly
|
137
|
+
juwelier
|
138
|
+
nokogiri
|
139
|
+
rack
|
110
140
|
rake
|
111
|
-
rspec
|
141
|
+
rspec
|
142
|
+
rss
|
143
|
+
rubocop
|
112
144
|
simplecov
|
113
|
-
twitter_oauth
|
114
|
-
whenever
|
145
|
+
twitter_oauth
|
146
|
+
whenever
|
115
147
|
|
116
148
|
RUBY VERSION
|
117
|
-
ruby
|
149
|
+
ruby 3.0.0p0
|
118
150
|
|
119
151
|
BUNDLED WITH
|
120
|
-
2.
|
152
|
+
2.2.3
|
data/Rakefile
CHANGED
@@ -1,44 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rubygems'
|
2
4
|
require 'rspec/core/rake_task'
|
3
5
|
require 'rubygems/package_task'
|
4
|
-
|
5
|
-
task :
|
6
|
+
|
7
|
+
task default: ['spec:coverage']
|
6
8
|
|
7
9
|
namespace :twog do
|
8
|
-
desc
|
10
|
+
desc 'Clean out the coverage and the pkg'
|
9
11
|
task :clean do
|
10
12
|
rm_rf 'coverage'
|
11
13
|
rm_rf 'pkg'
|
12
14
|
end
|
13
15
|
end
|
14
16
|
|
15
|
-
desc
|
17
|
+
desc 'Run all specs in spec directory'
|
16
18
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
17
19
|
spec.pattern = FileList['spec/**/*_spec.rb']
|
18
20
|
spec.rspec_opts = ['--color']
|
19
21
|
end
|
20
22
|
|
21
|
-
namespace :spec do
|
22
|
-
desc
|
23
|
+
namespace :spec do
|
24
|
+
desc 'Run coverage on the spec files'
|
23
25
|
RSpec::Core::RakeTask.new(:coverage) do |spec|
|
24
26
|
spec.pattern = FileList['spec/**/*_spec.rb']
|
25
27
|
spec.rspec_opts = ['--color']
|
26
|
-
ENV['COVERAGE'] =
|
28
|
+
ENV['COVERAGE'] = 'true'
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
30
32
|
begin
|
31
33
|
require 'juwelier'
|
32
34
|
Juwelier::Tasks.new do |s|
|
33
|
-
s.name =
|
34
|
-
s.summary = %
|
35
|
-
s.email = [
|
36
|
-
s.homepage =
|
37
|
-
s.description =
|
38
|
-
s.authors = [
|
35
|
+
s.name = 'twog'
|
36
|
+
s.summary = %(Tool to tweet blog posts)
|
37
|
+
s.email = ['jmeridth@gmail.com']
|
38
|
+
s.homepage = 'http://github.com/jmeridth/twog'
|
39
|
+
s.description = 'Tool to tweet blog posts'
|
40
|
+
s.authors = ['Jason Meridth']
|
39
41
|
end
|
40
42
|
rescue LoadError
|
41
43
|
puts "Juwelier not available. Install it with: sudo gem install juwelier --version '>= 2.4.9'"
|
42
44
|
exit(1)
|
43
45
|
end
|
44
|
-
|
data/VERSION.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
major: 0
|
3
|
+
minor: 3
|
4
|
+
patch: 6
|
5
|
+
build:
|
data/bin/twog
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
|
-
|
4
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
4
5
|
|
5
6
|
require 'tempfile'
|
6
7
|
require 'twog'
|
@@ -11,69 +12,74 @@ require 'fileutils'
|
|
11
12
|
include Twog::Twog
|
12
13
|
|
13
14
|
twog_dir = "#{ENV['HOME']}/.twog"
|
14
|
-
FileUtils.mkdir_p twog_dir unless File.
|
15
|
+
FileUtils.mkdir_p twog_dir unless File.exist?(twog_dir)
|
15
16
|
twog_cron_schedule_file = "#{twog_dir}/schedule.rb"
|
16
17
|
twog_cron_schedule_log = "#{twog_dir}/cron.log"
|
17
|
-
twog_cron_identifier =
|
18
|
+
twog_cron_identifier = 'twog'
|
18
19
|
legacy_conf_file_name = "#{ENV['HOME']}/.twog.yaml"
|
19
20
|
twog_conf_file = "#{twog_dir}/conf.yaml"
|
20
21
|
|
21
22
|
def help
|
22
|
-
puts
|
23
|
+
puts 'Invalid options. Run `twog --help` for assistance.'
|
23
24
|
end
|
24
25
|
|
25
26
|
def get_conf(conf)
|
26
|
-
raise "please run 'twog --conf' to create the #{conf} file" unless File.
|
27
|
+
raise "please run 'twog --conf' to create the #{conf} file" unless File.exist?(conf)
|
28
|
+
|
27
29
|
YAML.load_file(conf)
|
28
30
|
end
|
29
31
|
|
30
32
|
options = {}
|
31
33
|
opts = OptionParser.new do |opts|
|
32
|
-
opts.banner =
|
34
|
+
opts.banner = 'Twog is a tool to tweet blog posts'
|
33
35
|
|
34
|
-
opts.on(
|
35
|
-
puts "Twog "
|
36
|
+
opts.on('-v', '--version', 'Display current version') do
|
37
|
+
puts "Twog #{version}"
|
36
38
|
exit 0
|
37
39
|
end
|
38
40
|
|
39
|
-
opts.on(
|
41
|
+
opts.on('--cronadd N', 'Add crontab job to run twog every N minutes') do |n|
|
40
42
|
twog_cron_schedule_content = <<-EOS
|
41
43
|
set :output, "#{twog_cron_schedule_log}"
|
42
44
|
every #{n}.minutes do
|
43
45
|
command "twog"
|
44
46
|
end
|
45
47
|
EOS
|
46
|
-
|
47
|
-
answer =
|
48
|
-
if File.
|
48
|
+
|
49
|
+
answer = ''
|
50
|
+
if File.exist?(twog_cron_schedule_file)
|
49
51
|
puts "Cron schedule file (#{twog_cron_schedule_file}) already exists. Overwrite? [Y/n]"
|
50
52
|
answer = gets
|
51
53
|
end
|
52
|
-
|
53
|
-
File.open(twog_cron_schedule_log, 'w') {|f| f.write("") } unless File.exists?(twog_cron_schedule_log)
|
54
|
-
File.open(twog_cron_schedule_file, 'w') {|f| f.write(twog_cron_schedule_content) } if ["Y","y",""].include?(answer.chomp)
|
55
54
|
|
56
|
-
|
55
|
+
File.open(twog_cron_schedule_log, 'w') { |f| f.write('') } unless File.exist?(twog_cron_schedule_log)
|
56
|
+
if ['Y', 'y', ''].include?(answer.chomp)
|
57
|
+
File.open(twog_cron_schedule_file, 'w') do |f|
|
58
|
+
f.write(twog_cron_schedule_content)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
cron_options = { file: twog_cron_schedule_file, identifier: twog_cron_identifier, update: true }
|
57
63
|
Whenever::CommandLine.execute(cron_options)
|
58
64
|
exit 0
|
59
65
|
end
|
60
|
-
|
61
|
-
opts.on(
|
62
|
-
File.open(twog_cron_schedule_file, 'w') {|f| f.write(
|
63
|
-
cron_options = {:
|
66
|
+
|
67
|
+
opts.on('--cronrm', 'Remove twog crontab job') do
|
68
|
+
File.open(twog_cron_schedule_file, 'w') { |f| f.write('') }
|
69
|
+
cron_options = { file: twog_cron_schedule_file, identifier: twog_cron_identifier, update: true }
|
64
70
|
Whenever::CommandLine.execute(cron_options)
|
65
|
-
puts
|
71
|
+
puts 'Twog cron job removed successfully'
|
66
72
|
exit 0
|
67
73
|
end
|
68
74
|
|
69
|
-
opts.on(
|
70
|
-
posts = get_posts_to_tweet(get_conf(twog_conf_file))
|
71
|
-
puts
|
72
|
-
posts.each {|post| puts "#{post.title} (#{Time.parse(post.date.to_s)})"; puts
|
75
|
+
opts.on('-o', '--output', 'View the blog posts that will be tweeted') do
|
76
|
+
posts = get_posts_to_tweet(get_conf(twog_conf_file))
|
77
|
+
puts 'No posts to tweet' if posts.length.zero?
|
78
|
+
posts.each { |post| puts "#{post.title} (#{Time.parse(post.date.to_s)})"; puts post.link.to_s }
|
73
79
|
exit 0
|
74
80
|
end
|
75
81
|
|
76
|
-
opts.on(
|
82
|
+
opts.on('-c', '--conf', 'Create default conf file') do
|
77
83
|
conf_file_contents = <<-EOS
|
78
84
|
rss_feed: 'http://url.com/feed.rss'
|
79
85
|
consumer_key: 'consumer key'
|
@@ -85,18 +91,18 @@ opts = OptionParser.new do |opts|
|
|
85
91
|
last_blog_post_tweeted:
|
86
92
|
EOS
|
87
93
|
|
88
|
-
FileUtils.mv(legacy_conf_file_name, twog_conf_file) if File.
|
89
|
-
if File.
|
90
|
-
puts "#{twog_conf_file} already exists"
|
91
|
-
exit 0
|
94
|
+
FileUtils.mv(legacy_conf_file_name, twog_conf_file) if File.exist?(legacy_conf_file_name)
|
95
|
+
if File.exist?(twog_conf_file)
|
96
|
+
puts "#{twog_conf_file} already exists"
|
97
|
+
exit 0
|
92
98
|
end
|
93
99
|
|
94
|
-
File.open(twog_conf_file, 'w') {|f| f.write(conf_file_contents) }
|
100
|
+
File.open(twog_conf_file, 'w') { |f| f.write(conf_file_contents) }
|
95
101
|
puts "Default configuration file created at #{twog_conf_file}"
|
96
102
|
exit 0
|
97
103
|
end
|
98
|
-
|
99
|
-
opts.on(
|
104
|
+
|
105
|
+
opts.on('-h', '-?', '--help', 'Display help') do
|
100
106
|
puts opts
|
101
107
|
exit 0
|
102
108
|
end
|