romantic_text 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="