phlexite-cli 0.1.0 → 0.1.2

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
  SHA256:
3
- metadata.gz: fef2e0e8f9b0a78d5084843ae4880dfbdca540848baa74c1db688d5e42249c71
4
- data.tar.gz: 0fabe535b18e62a44d296c3daf86538eacd08027d05817ed6cda426747e9a453
3
+ metadata.gz: 5b99dc0fc598467cf53962828a0109b18accd8a1fabc7e273691a1a67fe439e9
4
+ data.tar.gz: 8d380f4330ee4374fe9313ef4596f75332eaf1cc2c33f97a2be7374af293242d
5
5
  SHA512:
6
- metadata.gz: cf7447df9adf8193d97d5bb80bd1bdd4d0847b7e9e9061d3dbf94a3a72d128a518b823a9750b08b12b297319b31b349562ae0a3c45168fd6dfa49f12dadcbebf
7
- data.tar.gz: 4901c6588c9d1b4e7dabe81bdcdafd3cc09a8f30f51387b88adc9c3bd0f174c7bc7b8addfc548667dbfe223ad50ec4734f93423ce746c08c90f1a4368780cf72
6
+ metadata.gz: e0d1a158a0d33ce9d31383474968ddac640971059a57a3ddd0eebf396636314dc9d290866f876860440ed5a29d31c485a47d1c77ff1ea3a6b7e6e00e53d72be8
7
+ data.tar.gz: f4d1f3848a0177b50c0d3b1bc7bb37779158a2382347d4cffa58ed69719c8ac19b754553b860fef8b016d00fe1272e9edbdf0ba478148777683568f920f39d74
data/.build.yml CHANGED
@@ -3,6 +3,7 @@ image: alpine/edge
3
3
  packages:
4
4
  - ruby
5
5
  - ruby-dev
6
+ - musl-dev
6
7
  - yaml-dev
7
8
  - ruby-bundler
8
9
 
@@ -1,26 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "thor"
4
- require "filewatcher"
4
+ require "listen"
5
+ require "whirly"
6
+ require "paint"
5
7
  require_relative "version"
6
8
  require_relative "server"
9
+ require_relative "glob"
10
+
11
+ Whirly.configure spinner: "dots"
7
12
 
8
13
  module Phlexite
9
14
  module Cli
10
15
  class Cli < Thor
11
16
  class Error < StandardError; end
12
17
 
18
+ def spin
19
+ Whirly.start status: "Building", stop: Paint["✓", :green] do
20
+ yield
21
+ end
22
+ end
23
+
13
24
  desc "build", "Build your site"
14
25
  option :script
15
26
  def build
16
- puts "\e[1m==> starting build\e[0m"
17
- file = options[:script] || "./build.rb"
18
- cmd = "#{RbConfig.ruby} #{file}"
19
- cmd = "bundle exec #{cmd}" if File.file? "Gemfile"
20
-
21
- system(cmd)
27
+ spin do
28
+ file = options[:script] || "./build.rb"
29
+ cmd = "#{RbConfig.ruby} #{file}"
30
+ cmd = "bundle exec #{cmd}" if File.file? "Gemfile"
22
31
 
23
- puts "\e[1m==> build finished\e[0m"
32
+ system(cmd)
33
+ end
24
34
  end
25
35
 
26
36
  desc "dev", "Run a development server to watch your files"
@@ -33,17 +43,19 @@ module Phlexite
33
43
  build
34
44
 
35
45
  port = options[:port] || 3000
36
- puts "\e[1m=> Starting server on port #{port}\e[0m"
37
- Server.start port, build_dir
38
-
39
- puts "\e[1m=> Starting watcher (excluding #{build_dir} and gitignored files)\e[0m"
40
- Filewatcher
41
- .new("**/*.*", exclude:
42
- [File.join(build_dir, "**", "*.*")] +
43
- (File.read(".gitignore") || "").split("\n"))
44
- .watch do
45
- build
46
- end
46
+ puts "\e[1m> Starting server on port #{port}\e[0m"
47
+ server = Server.start port, build_dir
48
+
49
+ puts "\e[1m> Starting watcher (excluding #{build_dir} and gitignored files)\e[0m"
50
+
51
+ excluded_paths = ([File.join(build_dir, "**", "*.*")] +
52
+ (File.read(".gitignore") || "").split("\n"))
53
+ .map { |p| Glob.new(p).to_regexp }
54
+ listener = Listen.to(".", ignore: excluded_paths) do |modified, added, removed|
55
+ build
56
+ end
57
+ listener.start
58
+ server.join
47
59
  end
48
60
  end
49
61
  end
@@ -0,0 +1,85 @@
1
+ # https://github.com/alexch/rerun/blob/master/lib/rerun/glob.rb
2
+
3
+ module Phlexite
4
+ module Cli
5
+ class Glob
6
+ NO_LEADING_DOT = '(?=[^\.])' # todo
7
+ START_OF_FILENAME = '(\A|\/)' # beginning of string or a slash
8
+ END_OF_STRING = '\z'
9
+
10
+ def initialize glob_string
11
+ @glob_string = glob_string
12
+ end
13
+
14
+ def to_regexp_string
15
+ chars = @glob_string.chars
16
+
17
+ chars = smoosh(chars)
18
+
19
+ curlies = 0
20
+ escaping = false
21
+ string = chars.map do |char|
22
+ if escaping
23
+ escaping = false
24
+ char
25
+ else
26
+ case char
27
+ when "**"
28
+ "([^/]+/)*"
29
+ when "*"
30
+ ".*"
31
+ when "?"
32
+ "."
33
+ when "."
34
+ "\\."
35
+
36
+ when "{"
37
+ curlies += 1
38
+ "("
39
+ when "}"
40
+ if curlies > 0
41
+ curlies -= 1
42
+ ")"
43
+ else
44
+ char
45
+ end
46
+ when ","
47
+ if curlies > 0
48
+ "|"
49
+ else
50
+ char
51
+ end
52
+ when "\\"
53
+ escaping = true
54
+ "\\"
55
+
56
+ else
57
+ char
58
+
59
+ end
60
+ end
61
+ end.join
62
+ START_OF_FILENAME + string + END_OF_STRING
63
+ end
64
+
65
+ def to_regexp
66
+ Regexp.new(to_regexp_string)
67
+ end
68
+
69
+ def smoosh chars
70
+ out = []
71
+ until chars.empty?
72
+ char = chars.shift
73
+ if char == "*" && chars.first == "*"
74
+ chars.shift
75
+ chars.shift if chars.first == "/"
76
+ out.push("**")
77
+ else
78
+ out.push(char)
79
+ end
80
+ end
81
+ out
82
+ end
83
+ end
84
+ end
85
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Phlexite
4
4
  module Cli
5
- VERSION = "0.1.0"
5
+ VERSION = "0.1.2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlexite-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleks Rutins
@@ -24,19 +24,19 @@ dependencies:
24
24
  - !ruby/object:Gem::Version
25
25
  version: '1.4'
26
26
  - !ruby/object:Gem::Dependency
27
- name: filewatcher
27
+ name: listen
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '2.1'
32
+ version: '3.10'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '2.1'
39
+ version: '3.10'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: webrick
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -51,6 +51,34 @@ dependencies:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
53
  version: '1.9'
54
+ - !ruby/object:Gem::Dependency
55
+ name: whirly
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: paint
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
54
82
  email:
55
83
  - keeper@farthergate.com
56
84
  executables:
@@ -66,6 +94,7 @@ files:
66
94
  - exe/phlexite
67
95
  - lib/phlexite/cli.rb
68
96
  - lib/phlexite/cli/cli.rb
97
+ - lib/phlexite/cli/glob.rb
69
98
  - lib/phlexite/cli/server.rb
70
99
  - lib/phlexite/cli/version.rb
71
100
  - sig/phlexite/cli.rbs
@@ -91,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
120
  - !ruby/object:Gem::Version
92
121
  version: '0'
93
122
  requirements: []
94
- rubygems_version: 3.6.9
123
+ rubygems_version: 4.0.3
95
124
  specification_version: 4
96
125
  summary: A CLI for Phlexite
97
126
  test_files: []