phlexing 0.1.1 → 0.2.0

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: 36ca848b92899d1a6c218053bc730d321b550766aed6797467018e8a7bb10fa8
4
- data.tar.gz: 145d06606a772720817fc8bc30befb4c34cd5e5685f2bf1d8911b4e66d28b8ab
3
+ metadata.gz: ffc28265f871c2d98adcd231e5c97677d186261c1f7770fa809b26bfc72490de
4
+ data.tar.gz: 9a1aad812fab3bd2c355a5a768a68feae857b38af09075225ee0be4da5764c35
5
5
  SHA512:
6
- metadata.gz: 15d9ab5288501b69858b18e054ab254c6069adb66d6420d50371f1a008677a2dd62b9d219826d114bac054a16b887937dda370e5b50bfb339e5ab5b890a90f7e
7
- data.tar.gz: 800aa986cecaadbdca99aeadd44b2b2d3f4584b28864b5cab5aa6f40f4ee2e392efa7218f5327fefd92752494022af02237227cc4e6c1c30507797302b472afb
6
+ metadata.gz: bd78f6266b1fc40d5d61631b261867141b3cdfbc876f20ec0b78605f583e8969aff2d540010842c76e9376531daa6cd51ed7b35990aabd78209001104368cf6b
7
+ data.tar.gz: f2dbaddeab5395082db642e60e8d95983af5e5a39f0687aeb2d9e1ec07761a7a4a6edac6d86fff18e206f9fe68c5bb6bb999428371b5a7e4a856501640fc6bee
data/Gemfile.lock CHANGED
@@ -45,13 +45,15 @@ GEM
45
45
  css_press
46
46
  multi_js (0.1.0)
47
47
  uglifier (~> 2)
48
- nokogiri (1.13.9-x86_64-darwin)
48
+ nokogiri (1.13.10-x86_64-darwin)
49
+ racc (~> 1.4)
50
+ nokogiri (1.13.10-x86_64-linux)
49
51
  racc (~> 1.4)
50
52
  parallel (1.22.1)
51
53
  parser (3.1.2.1)
52
54
  ast (~> 2.4.1)
53
55
  polyglot (0.3.5)
54
- racc (1.6.0)
56
+ racc (1.6.2)
55
57
  rainbow (3.1.1)
56
58
  rake (13.0.6)
57
59
  regexp_parser (2.6.0)
@@ -69,6 +71,7 @@ GEM
69
71
 
70
72
  PLATFORMS
71
73
  x86_64-darwin-19
74
+ x86_64-linux
72
75
 
73
76
  DEPENDENCIES
74
77
  minitest (~> 5.0)
data/README.md CHANGED
@@ -1,9 +1,5 @@
1
1
  # Phlexing
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/phlexing`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
6
-
7
3
  ## Installation
8
4
 
9
5
  Install the gem and add to the application's Gemfile by executing:
@@ -14,10 +10,6 @@ If bundler is not being used to manage dependencies, install the gem by executin
14
10
 
15
11
  $ gem install phlexing
16
12
 
17
- ## Usage
18
-
19
- TODO: Write usage instructions here
20
-
21
13
  ## Development
22
14
 
23
15
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -14,14 +14,15 @@ module Phlexing
14
14
 
15
15
  attr_accessor :html, :custom_elements
16
16
 
17
- def self.convert(html)
18
- new(html).buffer
17
+ def self.convert(html, **options)
18
+ new(html, **options).output
19
19
  end
20
20
 
21
- def initialize(html)
21
+ def initialize(html, **options)
22
22
  @html = html
23
23
  @buffer = StringIO.new
24
24
  @custom_elements = Set.new
25
+ @options = options
25
26
  handle_node
26
27
  end
27
28
 
@@ -30,7 +31,7 @@ module Phlexing
30
31
 
31
32
  if text.squish.empty? && text.length.positive?
32
33
  @buffer << indent(level)
33
- @buffer << "whitespace\n"
34
+ @buffer << whitespace(@options)
34
35
 
35
36
  text.strip!
36
37
  end
@@ -42,7 +43,7 @@ module Phlexing
42
43
  @buffer << "text "
43
44
  end
44
45
 
45
- @buffer << double_quote(text)
46
+ @buffer << quote(text)
46
47
  @buffer << "\n" if newline
47
48
  end
48
49
  end
@@ -99,7 +100,7 @@ module Phlexing
99
100
  def handle_comment_node(node, level)
100
101
  @buffer << indent(level)
101
102
  @buffer << "comment "
102
- @buffer << double_quote(node.text.strip)
103
+ @buffer << quote(node.text.strip)
103
104
  @buffer << "\n"
104
105
  end
105
106
 
@@ -161,6 +162,30 @@ module Phlexing
161
162
  @buffer.string.strip
162
163
  end
163
164
 
165
+ def output
166
+ buffer = StringIO.new
167
+
168
+ if @options.fetch(:phlex_class, false)
169
+ buffer << "class #{@options.fetch(:component_name, 'MyComponent')}"
170
+ buffer << "< #{@options.fetch(:parent_component, 'Phlex::HTML')}\n"
171
+
172
+ @custom_elements.each do |element|
173
+ buffer << (indent(1) + "register_element :#{element}\n")
174
+ end
175
+
176
+ buffer << ("#{indent(1)}def template\n")
177
+ buffer << (indent(2) + @buffer.string)
178
+ buffer << ("#{indent(1)}end\n")
179
+ buffer << "end\n"
180
+ else
181
+ buffer << @buffer.string
182
+ end
183
+
184
+ Rufo::Formatter.format(buffer.string.strip)
185
+ rescue Rufo::SyntaxError
186
+ buffer.string.strip
187
+ end
188
+
164
189
  def converted_erb
165
190
  ErbParser.transform_xml(html).gsub("\n", "").gsub("\r", "")
166
191
  rescue StandardError
@@ -8,6 +8,10 @@ module Phlexing
8
8
  " " * level
9
9
  end
10
10
 
11
+ def whitespace(options)
12
+ options.fetch(:whitespace, true) ? "whitespace\n" : ""
13
+ end
14
+
11
15
  def double_quote(string)
12
16
  "\"#{string}\""
13
17
  end
@@ -16,6 +20,17 @@ module Phlexing
16
20
  "'#{string}'"
17
21
  end
18
22
 
23
+ def percent_literal_string(string)
24
+ "%(#{string})"
25
+ end
26
+
27
+ def quote(string)
28
+ return double_quote(string) unless string.include?('"')
29
+ return single_quote(string) unless string.include?("'")
30
+
31
+ percent_literal_string(string)
32
+ end
33
+
19
34
  def node_name(node)
20
35
  return "template_tag" if node.name == "template"
21
36
  return node.name unless node.name.include?("-")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Phlexing
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phlexing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Roth
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-29 00:00:00.000000000 Z
11
+ date: 2023-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: erb_parser