romantic_text 0.1.0 → 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: 21d6578acdda679ea72dd1ec7eb1c577c49afee17896496a90a884ae47058119
4
- data.tar.gz: 457453820720e812ccecd82a6a4454d9419203b0161bdefb38259c622c5c8b25
3
+ metadata.gz: 8222be09ca5695fb0b4a0a09159af28de9ba5df2b3eed963a8f70516618c240f
4
+ data.tar.gz: '0093a3192ad344671d58066bd4ebb5da2f44e850705e451cd920fc9e59d74545'
5
5
  SHA512:
6
- metadata.gz: a71c59dc64fba8d4576d8702eba1e948ed917588771fdf51fddba6e83dbcc71abccd5efc34a18af3b01795adb733f745622a7fad0fb4fd6bfbccfb763c93032a
7
- data.tar.gz: cba936040efe1ec973edf74575d8447d4990e2c4148410f28100621cac3aff72d6e351c16ca8f2bd381b029fcaa1384b70c20ada8eb269a40c9a8b398cfbd9a6
6
+ metadata.gz: a17f765f361d4bc4add24dd75fc456333d618ba541f83e5dc23347f09bab220d7e185bc3eca842739d2db07b522b915ddb43164e6d1f8c3271488819d48ee40f
7
+ data.tar.gz: 6f4097fa07228e33163c7a45b8cdd45c80f03aa4d333c50a29b2cd8f478aa8155cc9440ce39bb671dd0b2f71483fc8cf3421bb6fca90700be52cff43ffdbe390
data/.rubocop.yml CHANGED
@@ -33,3 +33,9 @@ Metrics/LineLength:
33
33
  # my preference :(
34
34
  Metrics/MethodLength:
35
35
  Max: 20
36
+
37
+ # bye :)
38
+ Naming/BinaryOperatorParameterName:
39
+ Enabled: false
40
+ Lint/MultipleCompare:
41
+ Enabled: false
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- romantic_text (0.1.0)
4
+ romantic_text (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -11,6 +11,7 @@
11
11
  - [Attributes](#attributes)
12
12
  - [Shorthand id / class](#shorthand-id--class)
13
13
  - [Escape HTML](#escape-html)
14
+ - [`>` syntax](#-syntax)
14
15
  - [Use `h` method](#use-h-method)
15
16
  - [Motivation](#motivation)
16
17
  - [Contributing](#contributing)
@@ -110,6 +111,15 @@ end
110
111
  html.to_s # => <div><script>alert(1)</script></div>
111
112
  ```
112
113
 
114
+ ### `>` syntax
115
+
116
+ ```ruby
117
+ html = RomanticText.markup do
118
+ `table` > `tr` > `td`[class: 'red'] > 'item'
119
+ end
120
+ html.to_s # => <table><tr><td class="red">item</td></tr></table>
121
+ ```
122
+
113
123
  ### Use `h` method
114
124
 
115
125
  ```ruby
data/lib/romantic_text.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'romantic_text/version'
4
4
  require 'romantic_text/utils'
5
+ require 'romantic_text/html_node'
5
6
  require 'romantic_text/element'
6
7
 
7
8
  module RomanticText
@@ -7,10 +7,12 @@ module RomanticText
7
7
  @attributes = pick_id_and_classes(subject)
8
8
  merge_attributes!(attributes)
9
9
  @children = []
10
+ @parent = nil
10
11
  end
12
+ attr_accessor :parent
11
13
 
12
14
  def `(name)
13
- Element.new(name).tap { |e| @children.push(e) }
15
+ Element.new(name).tap { |e| append_child(e) }
14
16
  end
15
17
 
16
18
  def h(name, attributes = {}, &block)
@@ -18,13 +20,21 @@ module RomanticText
18
20
  end
19
21
 
20
22
  def <<(str)
21
- @children.push Utils.escape(str)
23
+ append_child HTMLNode.new(Utils.escape(str))
22
24
  end
23
25
  alias_method :text, :<<
24
26
  alias_method :_, :<<
25
27
 
28
+ def >(element_or_str)
29
+ unless element_or_str.is_a?(Element) || element_or_str.is_a?(HTMLNode)
30
+ element_or_str = HTMLNode.new(element_or_str)
31
+ end
32
+ append_child(element_or_str)
33
+ element_or_str
34
+ end
35
+
26
36
  def dangerous_raw_html(str)
27
- @children.push str.to_s
37
+ append_child HTMLNode.new(str.to_s)
28
38
  end
29
39
 
30
40
  def render(attributes = {}, &block)
@@ -41,6 +51,19 @@ module RomanticText
41
51
  generate_tag(@name, @attributes, inner)
42
52
  end
43
53
 
54
+ def append_child(element)
55
+ element.parent&.remove_child(element)
56
+ element.parent = self
57
+ @children.push(element)
58
+ end
59
+
60
+ def remove_child(element)
61
+ return unless @children.include?(element)
62
+
63
+ element.parent = nil
64
+ @children.delete(element)
65
+ end
66
+
44
67
  private
45
68
 
46
69
  def pick_element_name(subject)
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'delegate'
4
+
5
+ module RomanticText
6
+ class HTMLNode < SimpleDelegator
7
+ def initialize(text)
8
+ super(text)
9
+ @parent = nil
10
+ end
11
+ attr_accessor :parent
12
+ end
13
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RomanticText
4
- VERSION = '0.1.0'
4
+ VERSION = '0.2.0'
5
5
  end
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
+ spec.required_ruby_version = '>= 2.5.0'
25
+
24
26
  spec.add_development_dependency 'bundler', '~> 1.17'
25
27
  spec.add_development_dependency 'rake', '~> 10.0'
26
28
  spec.add_development_dependency 'rubocop', '0.72.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: romantic_text
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ru_shalm
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-05 00:00:00.000000000 Z
11
+ date: 2019-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,6 +98,7 @@ files:
98
98
  - bin/setup
99
99
  - lib/romantic_text.rb
100
100
  - lib/romantic_text/element.rb
101
+ - lib/romantic_text/html_node.rb
101
102
  - lib/romantic_text/utils.rb
102
103
  - lib/romantic_text/version.rb
103
104
  - romantic_text.gemspec
@@ -113,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
114
  requirements:
114
115
  - - ">="
115
116
  - !ruby/object:Gem::Version
116
- version: '0'
117
+ version: 2.5.0
117
118
  required_rubygems_version: !ruby/object:Gem::Requirement
118
119
  requirements:
119
120
  - - ">="