discourse_theme 0.3.2 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +50 -0
- data/.gitignore +0 -10
- data/.rubocop.yml +7 -1
- data/Gemfile +1 -0
- data/Guardfile +1 -0
- data/README.md +11 -5
- data/Rakefile +1 -0
- data/bin/discourse_theme +1 -0
- data/discourse_theme.gemspec +11 -9
- data/lib/discourse_theme.rb +1 -0
- data/lib/discourse_theme/cli.rb +27 -4
- data/lib/discourse_theme/client.rb +9 -3
- data/lib/discourse_theme/config.rb +9 -0
- data/lib/discourse_theme/downloader.rb +1 -0
- data/lib/discourse_theme/scaffold.rb +1 -0
- data/lib/discourse_theme/uploader.rb +4 -2
- data/lib/discourse_theme/version.rb +2 -1
- data/lib/discourse_theme/watcher.rb +10 -1
- metadata +76 -48
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b049cb77cb8542cd1991928a60dab7567f11e8a89c8c4ddaba8e297c05938f6c
|
4
|
+
data.tar.gz: c799d67427d340e1ce920c8deaebd9ae34b0af598905bf6176421ed816c3eade
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6936df70b44ba83c191cb2b37a0897fa9caaf00614e3d1caa70d9f033e796eba29b8c9276e90ec8b9523af200d1f18b053c06957cefa3a6b3ab435a91b748c87
|
7
|
+
data.tar.gz: 0d7f183e24fb26fefed3000b4b7d681bfb51326dd1c7a9e5693fcc940dd077eb5bf31a79fa6ec287a76dd4989c60e135e3b23fb08dbce26a953aefd26d5486d4
|
@@ -0,0 +1,50 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
push:
|
6
|
+
branches:
|
7
|
+
- master
|
8
|
+
- main
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
build:
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
|
14
|
+
strategy:
|
15
|
+
matrix:
|
16
|
+
ruby:
|
17
|
+
- 2.5
|
18
|
+
- 2.6
|
19
|
+
- 2.7
|
20
|
+
- 3.0
|
21
|
+
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v2
|
24
|
+
|
25
|
+
- name: Setup ruby
|
26
|
+
uses: ruby/setup-ruby@v1
|
27
|
+
with:
|
28
|
+
ruby-version: ${{ matrix.ruby }}
|
29
|
+
bundler-cache: true
|
30
|
+
|
31
|
+
- name: Lint
|
32
|
+
run: bundle exec rubocop
|
33
|
+
|
34
|
+
- name: Tests
|
35
|
+
run: bundle exec rake test
|
36
|
+
|
37
|
+
publish:
|
38
|
+
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')
|
39
|
+
needs: build
|
40
|
+
runs-on: ubuntu-latest
|
41
|
+
|
42
|
+
steps:
|
43
|
+
- uses: actions/checkout@v2
|
44
|
+
|
45
|
+
- name: Release Gem
|
46
|
+
uses: discourse/publish-rubygems-action@v2-beta
|
47
|
+
env:
|
48
|
+
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
49
|
+
GIT_EMAIL: team@discourse.org
|
50
|
+
GIT_NAME: discoursebot
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Discourse Theme
|
2
2
|
|
3
|
-
This CLI contains helpers for creating [Discourse themes](https://meta.discourse.org/c/theme).
|
3
|
+
This CLI contains helpers for creating [Discourse themes](https://meta.discourse.org/c/theme) and theme components.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -10,7 +10,7 @@ To install the CLI use:
|
|
10
10
|
|
11
11
|
## Why this gem exists?
|
12
12
|
|
13
|
-
This gem allows you to use your editor of choice when developing Discourse themes. As you save files the CLI will update the remote theme and changes to it will appear live!
|
13
|
+
This gem allows you to use your editor of choice when developing Discourse themes and theme components. As you save files the CLI will update the remote theme or component and changes to it will appear live!
|
14
14
|
|
15
15
|
## Usage
|
16
16
|
|
@@ -20,11 +20,17 @@ For help run:
|
|
20
20
|
discourse_theme
|
21
21
|
```
|
22
22
|
|
23
|
-
|
23
|
+
### `discourse_theme new PATH`
|
24
24
|
|
25
|
-
|
25
|
+
Creates a new blank theme. The CLI will guide you through the process.
|
26
26
|
|
27
|
-
|
27
|
+
### `discourse_theme download PATH`
|
28
|
+
|
29
|
+
Downloads a theme from the server and stores in the designated directory.
|
30
|
+
|
31
|
+
### `discourse_theme watch PATH`
|
32
|
+
|
33
|
+
Monitors a theme or component for changes. When changed the program will synchronize the theme or component to your Discourse of choice.
|
28
34
|
|
29
35
|
## Contributing
|
30
36
|
|
data/Rakefile
CHANGED
data/bin/discourse_theme
CHANGED
data/discourse_theme.gemspec
CHANGED
@@ -23,18 +23,20 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
24
24
|
spec.require_paths = ["lib"]
|
25
25
|
|
26
|
+
spec.required_ruby_version = '>= 2.5.0'
|
27
|
+
|
28
|
+
spec.add_runtime_dependency "minitar", "~> 0.6"
|
29
|
+
spec.add_runtime_dependency "listen", "~> 3.1"
|
30
|
+
spec.add_runtime_dependency "multipart-post", "~> 2.0"
|
31
|
+
spec.add_runtime_dependency "tty-prompt", "~> 0.18"
|
32
|
+
spec.add_runtime_dependency "rubyzip", "~> 1.2"
|
33
|
+
|
26
34
|
spec.add_development_dependency "bundler", "~> 2.0"
|
27
|
-
spec.add_development_dependency "rake", "~>
|
35
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
28
36
|
spec.add_development_dependency "minitest", "~> 5.0"
|
29
37
|
spec.add_development_dependency "guard", "~> 2.14"
|
30
38
|
spec.add_development_dependency "guard-minitest", "~> 2.4"
|
31
39
|
spec.add_development_dependency "webmock", "~> 3.5"
|
32
|
-
|
33
|
-
spec.
|
34
|
-
spec.add_dependency "listen", "~> 3.1"
|
35
|
-
spec.add_dependency "multipart-post", "~> 2.0"
|
36
|
-
spec.add_dependency "tty-prompt", "~> 0.18"
|
37
|
-
spec.add_dependency "rubyzip", "~> 1.2"
|
38
|
-
|
39
|
-
spec.required_ruby_version = '>= 2.2.0'
|
40
|
+
spec.add_development_dependency "rubocop"
|
41
|
+
spec.add_development_dependency "rubocop-discourse"
|
40
42
|
end
|
data/lib/discourse_theme.rb
CHANGED
data/lib/discourse_theme/cli.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module DiscourseTheme
|
2
3
|
class Cli
|
3
4
|
|
@@ -37,9 +38,9 @@ module DiscourseTheme
|
|
37
38
|
def usage
|
38
39
|
puts "Usage: discourse_theme COMMAND [--reset]"
|
39
40
|
puts
|
40
|
-
puts "discourse_theme new DIR
|
41
|
-
puts "discourse_theme download DIR
|
42
|
-
puts "discourse_theme watch DIR
|
41
|
+
puts "discourse_theme new DIR - Creates a new theme in the designated directory"
|
42
|
+
puts "discourse_theme download DIR - Downloads a theme from the server and stores in the designated directory"
|
43
|
+
puts "discourse_theme watch DIR - Watches the theme directory and synchronizes with Discourse"
|
43
44
|
puts
|
44
45
|
puts "Use --reset to change the configuration for a directory"
|
45
46
|
exit 1
|
@@ -57,6 +58,7 @@ module DiscourseTheme
|
|
57
58
|
settings = config[dir]
|
58
59
|
|
59
60
|
theme_id = settings.theme_id
|
61
|
+
components = settings.components
|
60
62
|
|
61
63
|
if command == "new"
|
62
64
|
raise DiscourseTheme::ThemeError.new "'#{dir} is not empty" if Dir.exists?(dir) && !Dir.empty?(dir)
|
@@ -87,14 +89,35 @@ module DiscourseTheme
|
|
87
89
|
themes = render_theme_list(theme_list)
|
88
90
|
choice = Cli.select('Which theme would you like to sync with?', themes)
|
89
91
|
theme_id = extract_theme_id(choice)
|
92
|
+
theme = theme_list.find { |t| t["id"] == theme_id }
|
90
93
|
end
|
91
94
|
|
92
|
-
|
95
|
+
about_json = JSON.parse(File.read(File.join(dir, 'about.json'))) rescue nil
|
96
|
+
already_uploaded = !!theme
|
97
|
+
is_component = theme&.[]("component")
|
98
|
+
component_count = about_json&.[]("components")&.length || 0
|
99
|
+
|
100
|
+
if !already_uploaded && !is_component && component_count > 0
|
101
|
+
options = {}
|
102
|
+
options["Yes"] = :sync
|
103
|
+
options["No"] = :none
|
104
|
+
options = options.sort_by { |_, b| b == components.to_sym ? 0 : 1 }.to_h if components
|
105
|
+
choice = Cli.select('Would you like to update child theme components?', options.keys)
|
106
|
+
settings.components = components = options[choice].to_s
|
107
|
+
end
|
108
|
+
|
109
|
+
uploader = DiscourseTheme::Uploader.new(dir: dir, client: client, theme_id: theme_id, components: components)
|
93
110
|
|
94
111
|
Cli.progress "Uploading theme from #{dir}"
|
95
112
|
settings.theme_id = theme_id = uploader.upload_full_theme
|
96
113
|
|
97
114
|
Cli.success "Theme uploaded (id:#{theme_id})"
|
115
|
+
Cli.info "Preview: #{client.root}/?preview_theme_id=#{theme_id}"
|
116
|
+
if client.is_theme_creator
|
117
|
+
Cli.info "Manage: #{client.root}/my/themes"
|
118
|
+
else
|
119
|
+
Cli.info "Manage: #{client.root}/admin/customize/themes/#{theme_id}"
|
120
|
+
end
|
98
121
|
watcher = DiscourseTheme::Watcher.new(dir: dir, uploader: uploader)
|
99
122
|
|
100
123
|
Cli.progress "Watching for changes in #{dir}..."
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module DiscourseTheme
|
2
3
|
class Client
|
3
4
|
THEME_CREATOR_REGEX = /^https:\/\/theme-creator.discourse.org$/i
|
@@ -79,7 +80,7 @@ module DiscourseTheme
|
|
79
80
|
request(put)
|
80
81
|
end
|
81
82
|
|
82
|
-
def upload_full_theme(tgz, theme_id:)
|
83
|
+
def upload_full_theme(tgz, theme_id:, components:)
|
83
84
|
endpoint = root +
|
84
85
|
if @is_theme_creator
|
85
86
|
"/user_themes/import.json"
|
@@ -90,6 +91,7 @@ module DiscourseTheme
|
|
90
91
|
post = Net::HTTP::Post::Multipart.new(
|
91
92
|
endpoint,
|
92
93
|
"theme_id" => theme_id,
|
94
|
+
"components" => components,
|
93
95
|
"bundle" => UploadIO.new(tgz, "application/tar+gzip", "bundle.tar.gz")
|
94
96
|
)
|
95
97
|
request(post)
|
@@ -102,12 +104,16 @@ module DiscourseTheme
|
|
102
104
|
json["about"]["version"]
|
103
105
|
end
|
104
106
|
|
105
|
-
private
|
106
|
-
|
107
107
|
def root
|
108
108
|
@url
|
109
109
|
end
|
110
110
|
|
111
|
+
def is_theme_creator
|
112
|
+
@is_theme_creator
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
111
117
|
def request(request, never_404: false)
|
112
118
|
uri = URI.parse(@url)
|
113
119
|
http = Net::HTTP.new(uri.host, uri.port)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
class DiscourseTheme::Config
|
2
3
|
|
3
4
|
class PathSetting
|
@@ -30,6 +31,14 @@ class DiscourseTheme::Config
|
|
30
31
|
set("theme_id", theme_id.to_i)
|
31
32
|
end
|
32
33
|
|
34
|
+
def components
|
35
|
+
safe_config["components"]
|
36
|
+
end
|
37
|
+
|
38
|
+
def components=(val)
|
39
|
+
set("components", val)
|
40
|
+
end
|
41
|
+
|
33
42
|
protected
|
34
43
|
|
35
44
|
def set(name, val)
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module DiscourseTheme
|
2
3
|
class Uploader
|
3
4
|
|
4
5
|
THEME_CREATOR_REGEX = /^https:\/\/theme-creator.discourse.org$/i
|
5
6
|
|
6
|
-
def initialize(dir:, client:, theme_id: nil)
|
7
|
+
def initialize(dir:, client:, theme_id: nil, components: nil)
|
7
8
|
@dir = dir
|
8
9
|
@client = client
|
9
10
|
@theme_id = theme_id
|
11
|
+
@components = components
|
10
12
|
end
|
11
13
|
|
12
14
|
def compress_dir(gzip, dir)
|
@@ -66,7 +68,7 @@ module DiscourseTheme
|
|
66
68
|
compress_dir(filename, @dir)
|
67
69
|
|
68
70
|
File.open(filename) do |tgz|
|
69
|
-
response = @client.upload_full_theme(tgz, theme_id: @theme_id)
|
71
|
+
response = @client.upload_full_theme(tgz, theme_id: @theme_id, components: @components)
|
70
72
|
|
71
73
|
json = JSON.parse(response.body)
|
72
74
|
@theme_id = json["theme"]["id"]
|
@@ -1,5 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module DiscourseTheme
|
2
3
|
class Watcher
|
4
|
+
def self.return_immediately!
|
5
|
+
@return_immediately = true
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.return_immediately?
|
9
|
+
!!@return_immediately
|
10
|
+
end
|
11
|
+
|
3
12
|
def initialize(dir:, uploader:)
|
4
13
|
@dir = dir
|
5
14
|
@uploader = uploader
|
@@ -40,7 +49,7 @@ module DiscourseTheme
|
|
40
49
|
end
|
41
50
|
|
42
51
|
listener.start
|
43
|
-
sleep
|
52
|
+
sleep unless self.class.return_immediately?
|
44
53
|
end
|
45
54
|
|
46
55
|
protected
|
metadata
CHANGED
@@ -1,169 +1,197 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: discourse_theme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: minitar
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '0.6'
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: listen
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
type: :
|
33
|
+
version: '3.1'
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '3.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: multipart-post
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :
|
47
|
+
version: '2.0'
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '2.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: tty-prompt
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
62
|
-
type: :
|
61
|
+
version: '0.18'
|
62
|
+
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0.18'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rubyzip
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '2
|
76
|
-
type: :
|
75
|
+
version: '1.2'
|
76
|
+
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '2
|
82
|
+
version: '1.2'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '2.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '2.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '0
|
104
|
-
type: :
|
103
|
+
version: '13.0'
|
104
|
+
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0
|
110
|
+
version: '13.0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: minitest
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
118
|
-
type: :
|
117
|
+
version: '5.0'
|
118
|
+
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
124
|
+
version: '5.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: guard
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '2.
|
132
|
-
type: :
|
131
|
+
version: '2.14'
|
132
|
+
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
136
|
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '2.
|
138
|
+
version: '2.14'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: guard-minitest
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
146
|
-
type: :
|
145
|
+
version: '2.4'
|
146
|
+
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: '
|
152
|
+
version: '2.4'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: webmock
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
157
|
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
160
|
-
type: :
|
159
|
+
version: '3.5'
|
160
|
+
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: '
|
166
|
+
version: '3.5'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rubocop
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rubocop-discourse
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
167
195
|
description: CLI helper for creating Discourse themes
|
168
196
|
email:
|
169
197
|
- sam.saffron@gmail.com
|
@@ -172,9 +200,9 @@ executables:
|
|
172
200
|
extensions: []
|
173
201
|
extra_rdoc_files: []
|
174
202
|
files:
|
203
|
+
- ".github/workflows/ci.yml"
|
175
204
|
- ".gitignore"
|
176
205
|
- ".rubocop.yml"
|
177
|
-
- ".travis.yml"
|
178
206
|
- CODE_OF_CONDUCT.md
|
179
207
|
- Gemfile
|
180
208
|
- Guardfile
|
@@ -204,14 +232,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
204
232
|
requirements:
|
205
233
|
- - ">="
|
206
234
|
- !ruby/object:Gem::Version
|
207
|
-
version: 2.
|
235
|
+
version: 2.5.0
|
208
236
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
209
237
|
requirements:
|
210
238
|
- - ">="
|
211
239
|
- !ruby/object:Gem::Version
|
212
240
|
version: '0'
|
213
241
|
requirements: []
|
214
|
-
rubygems_version: 3.
|
242
|
+
rubygems_version: 3.1.4
|
215
243
|
signing_key:
|
216
244
|
specification_version: 4
|
217
245
|
summary: CLI helper for creating Discourse themes
|