html_gen 0.0.7 → 0.0.8

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
  SHA1:
3
- metadata.gz: c9753960ad1d9d4235acd59b7e1ccd83655ac7ca
4
- data.tar.gz: 3dbb63796e2e4596c36e72d24b12adf513cbe214
3
+ metadata.gz: 5ca7ca82d9a45a1dc1208d8635acfa91f4a3d950
4
+ data.tar.gz: 16ffb22120f4dc9eae6e81f265bd27ecc00694c1
5
5
  SHA512:
6
- metadata.gz: 14e3119b2fa1b40980901d12d32abab0e4ddfc64dce190f1917180d461ce79e70fb90a94ea25358ba0f725d2576e026ac7bd4e1ce9c77e805165a716f153de98
7
- data.tar.gz: 2421cc2f43cb78eee2a63338b4911a46ede4025f7c96ba83dd28cb1e9ea5d1980dccda4e728afd85b70a95f9d248c8cc1ea19e5ef471d7966efc92b5f9530f11
6
+ metadata.gz: 67e9f9a315d26e6c85c938e7ce6eba41855592c5c4b48d8d17b163bb6cbcf1eb6010974e32e1d1a35e458733e7d59e8418dd4b0c0e8bae88d3ef01411a618940
7
+ data.tar.gz: 540ea4bb36340410039276fef5251c0edd83ba7ea545a8294655a0ae32cf344f6a9cbcccefc33575faea5c89c20bbb032e4b5b0a04971eff49a98839206fb134
data/.rubocop.yml ADDED
@@ -0,0 +1,54 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ DisplayCopNames: true
5
+ DisplayStyleGuide: true
6
+ Exclude:
7
+ - db/schema.rb
8
+ - spec/dummy/db/schema.rb
9
+ - html_gen.gemspec
10
+
11
+ # https://github.com/AtomLinter/linter-rubocop/issues/2
12
+ Style/FileName:
13
+ Enabled: false
14
+
15
+ Metrics/ClassLength:
16
+ Max: 250
17
+
18
+ Style/AccessModifierIndentation:
19
+ EnforcedStyle: outdent
20
+
21
+ Style/ClassAndModuleChildren:
22
+ EnforcedStyle: compact
23
+
24
+ Style/Documentation:
25
+ Enabled: false
26
+
27
+ Style/EmptyLines:
28
+ Enabled: false
29
+
30
+ Style/StringLiterals:
31
+ EnforcedStyle: double_quotes
32
+
33
+ Style/StringLiteralsInInterpolation:
34
+ Enabled: false
35
+
36
+ Style/NilComparison:
37
+ Enabled: false
38
+
39
+ Style/SignalException:
40
+ EnforcedStyle: only_raise
41
+
42
+ Style/MultilineOperationIndentation:
43
+ EnforcedStyle: indented
44
+
45
+ Style/SpaceInsideHashLiteralBraces:
46
+ EnforcedStyle: no_space
47
+
48
+ Style/TrivialAccessors:
49
+ ExactNameMatch: true
50
+ Enabled: true
51
+
52
+ # Disabled on purpose: https://github.com/bbatsov/rubocop/issues/1758
53
+ Style/ClosingParenthesisIndentation:
54
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,74 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-01-20 15:14:18 +0100 using RuboCop version 0.36.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 6
10
+ # Configuration parameters: AllowSafeAssignment.
11
+ Lint/AssignmentInCondition:
12
+ Exclude:
13
+ - 'lib/html_gen/parser.rb'
14
+
15
+ # Offense count: 3
16
+ # Cop supports --auto-correct.
17
+ # Configuration parameters: AlignWith, SupportedStyles, AutoCorrect.
18
+ # SupportedStyles: keyword, variable, start_of_line
19
+ Lint/EndAlignment:
20
+ Enabled: false
21
+
22
+ # Offense count: 1
23
+ Lint/UselessAssignment:
24
+ Exclude:
25
+ - 'lib/html_gen/element.rb'
26
+
27
+ # Offense count: 3
28
+ Metrics/AbcSize:
29
+ Max: 82
30
+
31
+ # Offense count: 3
32
+ Metrics/CyclomaticComplexity:
33
+ Max: 35
34
+
35
+ # Offense count: 3
36
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
37
+ # URISchemes: http, https
38
+ Metrics/LineLength:
39
+ Max: 189
40
+
41
+ # Offense count: 1
42
+ # Configuration parameters: CountComments.
43
+ Metrics/MethodLength:
44
+ Max: 72
45
+
46
+ # Offense count: 5
47
+ Metrics/PerceivedComplexity:
48
+ Max: 41
49
+
50
+ # Offense count: 6
51
+ # Configuration parameters: MinBodyLength.
52
+ Style/GuardClause:
53
+ Exclude:
54
+ - 'lib/html_gen/element.rb'
55
+ - 'lib/html_gen/parser.rb'
56
+
57
+ # Offense count: 5
58
+ Style/IdenticalConditionalBranches:
59
+ Exclude:
60
+ - 'lib/html_gen/element.rb'
61
+ - 'lib/html_gen/parser.rb'
62
+
63
+ # Offense count: 1
64
+ Style/IfInsideElse:
65
+ Exclude:
66
+ - 'lib/html_gen/parser.rb'
67
+
68
+ # Offense count: 3
69
+ # Cop supports --auto-correct.
70
+ # Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
71
+ # SupportedStyles: slashes, percent_r, mixed
72
+ Style/RegexpLiteral:
73
+ Exclude:
74
+ - 'lib/html_gen/parser.rb'
data/Gemfile CHANGED
@@ -13,4 +13,6 @@ group :development do
13
13
  gem "rdoc", "~> 3.12"
14
14
  gem "bundler", ">= 1.0.0"
15
15
  gem "jeweler", "~> 1.8.4"
16
+ gem "best_practice_project", github: "kaspernj/best_practice_project"
17
+ gem "rubocop"
16
18
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,17 @@
1
+ GIT
2
+ remote: git://github.com/kaspernj/best_practice_project.git
3
+ revision: 85edcdab3e63de1374de10f01fcf4a621099aae2
4
+ specs:
5
+ best_practice_project (0.0.8)
6
+ auto_autoloader
7
+
1
8
  GEM
2
9
  remote: http://rubygems.org/
3
10
  specs:
4
11
  addressable (2.3.7)
12
+ ast (2.2.0)
13
+ auto_autoloader (0.0.4)
14
+ string-cases
5
15
  builder (3.2.2)
6
16
  codeclimate-test-reporter (0.4.6)
7
17
  simplecov (>= 0.7.1, < 1.0.0)
@@ -40,7 +50,11 @@ GEM
40
50
  multi_json (~> 1.3)
41
51
  multi_xml (~> 0.5)
42
52
  rack (~> 1.2)
53
+ parser (2.3.0.1)
54
+ ast (~> 2.2)
55
+ powerpack (0.1.1)
43
56
  rack (1.6.0)
57
+ rainbow (2.0.0)
44
58
  rake (10.4.2)
45
59
  rdoc (3.12.2)
46
60
  json (~> 1.4)
@@ -52,6 +66,12 @@ GEM
52
66
  rspec-expectations (2.8.0)
53
67
  diff-lcs (~> 1.1.2)
54
68
  rspec-mocks (2.8.0)
69
+ rubocop (0.36.0)
70
+ parser (>= 2.3.0.0, < 3.0)
71
+ powerpack (~> 0.1)
72
+ rainbow (>= 1.99.1, < 3.0)
73
+ ruby-progressbar (~> 1.7)
74
+ ruby-progressbar (1.7.5)
55
75
  simplecov (0.9.1)
56
76
  docile (~> 1.1.0)
57
77
  multi_json (~> 1.0)
@@ -63,9 +83,14 @@ PLATFORMS
63
83
  ruby
64
84
 
65
85
  DEPENDENCIES
86
+ best_practice_project!
66
87
  bundler (>= 1.0.0)
67
88
  codeclimate-test-reporter
68
89
  jeweler (~> 1.8.4)
69
90
  rdoc (~> 3.12)
70
91
  rspec (~> 2.8.0)
92
+ rubocop
71
93
  string-cases
94
+
95
+ BUNDLED WITH
96
+ 1.11.2
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
- require 'bundler'
3
+ require "rubygems"
4
+ require "bundler"
5
5
  begin
6
6
  Bundler.setup(:default, :development)
7
7
  rescue Bundler::BundlerError => e
@@ -9,41 +9,44 @@ rescue Bundler::BundlerError => e
9
9
  $stderr.puts "Run `bundle install` to install missing gems"
10
10
  exit e.status_code
11
11
  end
12
- require 'rake'
12
+ require "rake"
13
13
 
14
- require 'jeweler'
14
+ require "jeweler"
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
17
  gem.name = "html_gen"
18
18
  gem.homepage = "http://github.com/kaspernj/html_gen"
19
19
  gem.license = "MIT"
20
- gem.summary = %Q{A small framework for generating HTML.}
21
- gem.description = %Q{A small framework for generating HTML.}
20
+ gem.summary = %(A small framework for generating HTML.)
21
+ gem.description = %(A small framework for generating HTML.)
22
22
  gem.email = "k@spernj.org"
23
23
  gem.authors = ["Kasper Johansen"]
24
24
  # dependencies defined in Gemfile
25
25
  end
26
26
  Jeweler::RubygemsDotOrgTasks.new
27
27
 
28
- require 'rspec/core'
29
- require 'rspec/core/rake_task'
28
+ require "rspec/core"
29
+ require "rspec/core/rake_task"
30
30
  RSpec::Core::RakeTask.new(:spec) do |spec|
31
- spec.pattern = FileList['spec/**/*_spec.rb']
31
+ spec.pattern = FileList["spec/**/*_spec.rb"]
32
32
  end
33
33
 
34
34
  RSpec::Core::RakeTask.new(:rcov) do |spec|
35
- spec.pattern = 'spec/**/*_spec.rb'
35
+ spec.pattern = "spec/**/*_spec.rb"
36
36
  spec.rcov = true
37
37
  end
38
38
 
39
39
  task default: :spec
40
40
 
41
- require 'rdoc/task'
41
+ require "rdoc/task"
42
42
  Rake::RDocTask.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
43
+ version = File.exist?("VERSION") ? File.read("VERSION") : ""
44
44
 
45
- rdoc.rdoc_dir = 'rdoc'
45
+ rdoc.rdoc_dir = "rdoc"
46
46
  rdoc.title = "html_gen #{version}"
47
- rdoc.rdoc_files.include('README*')
48
- rdoc.rdoc_files.include('lib/**/*.rb')
47
+ rdoc.rdoc_files.include("README*")
48
+ rdoc.rdoc_files.include("lib/**/*.rb")
49
49
  end
50
+
51
+ require "best_practice_project"
52
+ BestPracticeProject.load_tasks
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
data/html_gen.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: html_gen 0.0.7 ruby lib
5
+ # stub: html_gen 0.0.8 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "html_gen"
9
- s.version = "0.0.7"
9
+ s.version = "0.0.8"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Kasper Johansen"]
14
- s.date = "2016-01-17"
14
+ s.date = "2016-01-20"
15
15
  s.description = "A small framework for generating HTML."
16
16
  s.email = "k@spernj.org"
17
17
  s.extra_rdoc_files = [
@@ -21,6 +21,8 @@ Gem::Specification.new do |s|
21
21
  s.files = [
22
22
  ".document",
23
23
  ".rspec",
24
+ ".rubocop.yml",
25
+ ".rubocop_todo.yml",
24
26
  "Gemfile",
25
27
  "Gemfile.lock",
26
28
  "LICENSE.txt",
@@ -51,12 +53,16 @@ Gem::Specification.new do |s|
51
53
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
52
54
  s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
53
55
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
56
+ s.add_development_dependency(%q<best_practice_project>, [">= 0"])
57
+ s.add_development_dependency(%q<rubocop>, [">= 0"])
54
58
  else
55
59
  s.add_dependency(%q<string-cases>, [">= 0"])
56
60
  s.add_dependency(%q<rspec>, ["~> 2.8.0"])
57
61
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
58
62
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
59
63
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
64
+ s.add_dependency(%q<best_practice_project>, [">= 0"])
65
+ s.add_dependency(%q<rubocop>, [">= 0"])
60
66
  end
61
67
  else
62
68
  s.add_dependency(%q<string-cases>, [">= 0"])
@@ -64,6 +70,8 @@ Gem::Specification.new do |s|
64
70
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
65
71
  s.add_dependency(%q<bundler>, [">= 1.0.0"])
66
72
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
73
+ s.add_dependency(%q<best_practice_project>, [">= 0"])
74
+ s.add_dependency(%q<rubocop>, [">= 0"])
67
75
  end
68
76
  end
69
77
 
@@ -1,4 +1,4 @@
1
- #This class can be used to generate HTML.
1
+ # This class can be used to generate HTML.
2
2
  #===Examples
3
3
  # ele = HtmlGen::Element.new(:a) #=> #<HtmlGen::Element:0x00000000e5f650 @attr={}, @name=:a, @classes=[], @str_html="", @str="", @css={}, @eles=[], @nl="\n", @inden="\t">
4
4
  # ele.classes << "custom_link"
@@ -10,48 +10,48 @@
10
10
  #
11
11
  # ele.html #=> "<a href=\"http://www.youtube.com\" style=\"font-weight: bold;\" class=\"custom_link\">\n\t<b>\n\t\tTitle of link\n\t</b>\n</a>\n"
12
12
  class HtmlGen::Element
13
- FORBIDDEN_SHORT = ["script"]
13
+ FORBIDDEN_SHORT = ["script"].freeze
14
14
 
15
- #Attributes hash which will be used to generate attributes-elements.
15
+ # Attributes hash which will be used to generate attributes-elements.
16
16
  #===Example
17
17
  # element.attr[:href] = "http://www.youtube.com"
18
18
  attr_reader :attr
19
19
 
20
- #CSS-hash which will be used to generate the 'style'-attribute.
20
+ # CSS-hash which will be used to generate the 'style'-attribute.
21
21
  #===Example
22
22
  # element.css["font-weight"] = "bold"
23
23
  attr_reader :css
24
24
 
25
- #Data hash which will nest keys.
25
+ # Data hash which will nest keys.
26
26
  attr_reader :data
27
27
 
28
- #Classes-array which will be used to generate the 'class'-attribute.
28
+ # Classes-array which will be used to generate the 'class'-attribute.
29
29
  #===Example
30
30
  # element.classes += ["class1", "class2"]
31
31
  # element.html #=> ... class="class1 class2"...
32
32
  attr_reader :classes
33
33
 
34
- #This string is used to generate the value of an element. It will be HTML-escaped.
34
+ # This string is used to generate the value of an element. It will be HTML-escaped.
35
35
  #===Example
36
36
  # element = HtmlGen::Element.new("b")
37
37
  # element.str = "Te<i>s</i>t"
38
38
  # element.html(pretty: false) #=> "<b>Te&lt;i&gt;s&lt;/i&gt;t</b>"
39
39
  attr_accessor :str
40
40
 
41
- #This string is used to generate the value of an element. It will not be HTML-escaped.
41
+ # This string is used to generate the value of an element. It will not be HTML-escaped.
42
42
  #===Example
43
43
  # element = HtmlGen::Element.new("b")
44
44
  # element.str_html = "Te<i>s</i>t"
45
45
  # element.html #=> "<b>Te<i>s</i>t</b>"
46
46
  attr_accessor :str_html
47
47
 
48
- #An array holding all the sub-elements of this element.
48
+ # An array holding all the sub-elements of this element.
49
49
  attr_accessor :eles
50
50
 
51
- #The name of the element. "a" for <a> and such.
51
+ # The name of the element. "a" for <a> and such.
52
52
  attr_accessor :name
53
53
 
54
- #You can give various arguments as shortcuts to calling the methods. You can also decide what should be used for newline and indentation.
54
+ # You can give various arguments as shortcuts to calling the methods. You can also decide what should be used for newline and indentation.
55
55
  # HtmlGen::Element.new(:b, {
56
56
  # css: {"font-weight" => "bold"},
57
57
  # attr: {"href" => "http://www.youtube.com"},
@@ -63,7 +63,7 @@ class HtmlGen::Element
63
63
  # eles: [HtmlGen::Element.new("i", str: "Hello world!")
64
64
  # })
65
65
  def initialize(name, args = {})
66
- raise "'name' should be a string or a symbol but was a '#{name.class.name}'."if !name.is_a?(String) && !name.is_a?(Symbol)
66
+ raise "'name' should be a string or a symbol but was a '#{name.class.name}'." if !name.is_a?(String) && !name.is_a?(Symbol)
67
67
  @name = name
68
68
 
69
69
  {attr: {}, data: {}, classes: [], str_html: "", str: "", css: {}, eles: [], nl: "\n", inden: "\t"}.each do |arg, default_val|
@@ -76,10 +76,10 @@ class HtmlGen::Element
76
76
  args.delete(arg)
77
77
  end
78
78
 
79
- raise "Unknown arguments: '#{args.keys.join(",")}'." if !args.empty?
79
+ raise "Unknown arguments: '#{args.keys.join(",")}'." unless args.empty?
80
80
  end
81
81
 
82
- #Adds a sub-element to the element.
82
+ # Adds a sub-element to the element.
83
83
  #===Examples
84
84
  # element = HtmlGen::Element.new("a")
85
85
  # another_ele = element.add_ele("b")
@@ -88,58 +88,58 @@ class HtmlGen::Element
88
88
  def add_ele(name, args = {})
89
89
  ele = HtmlGen::Element.new(name, args.merge(nl: @nl, inden: @inden))
90
90
  @eles << ele
91
- return ele
91
+ ele
92
92
  end
93
93
 
94
94
  alias add add_ele
95
95
 
96
- #Add a text-element to the element.
96
+ # Add a text-element to the element.
97
97
  def add_str(str)
98
98
  ele = HtmlGen::TextEle.new(str: str, inden: @inden, nl: @nl)
99
99
  @eles << ele
100
- return ele
100
+ ele
101
101
  end
102
102
 
103
- #Add a text-element to the element.
103
+ # Add a text-element to the element.
104
104
  def add_html(html)
105
105
  ele = HtmlGen::TextEle.new(html: html, inden: @inden, nl: @nl)
106
106
  @eles << ele
107
- return ele
107
+ ele
108
108
  end
109
109
 
110
110
  # Returns the HTML for the element.
111
111
  # To avoid indentation and newlines you can use the 'pretty'-argument:
112
112
  # element.html(pretty: false)
113
113
  def html(args = {})
114
- if args[:level]
115
- level = args[:level]
116
- else
117
- level = 0
114
+ level = if args[:level]
115
+ args[:level]
116
+ else
117
+ 0
118
118
  end
119
119
 
120
- if args.key?(:pretty)
121
- pretty = args[:pretty]
122
- else
123
- pretty = true
120
+ pretty = if args.key?(:pretty)
121
+ args[:pretty]
122
+ else
123
+ true
124
124
  end
125
125
 
126
- #Used for keeping 'pretty'-value and correct indentation according to parent elements.
126
+ # Used for keeping 'pretty'-value and correct indentation according to parent elements.
127
127
  pass_args = {level: (level + 1), pretty: pretty, inden: @inden}
128
128
 
129
- #Clone the attributes-hash since we are going to add stuff to it, and it shouldnt be reflected (if 'html' is called multiple times, it will bug unless we clone).
129
+ # Clone the attributes-hash since we are going to add stuff to it, and it shouldnt be reflected (if 'html' is called multiple times, it will bug unless we clone).
130
130
  attr = @attr.clone
131
131
 
132
- #Start generating the string with HTML (possible go give a custom 'str'-variable where the content should be pushed to).
133
- if args[:str]
134
- str = args[:str]
135
- else
136
- str = ""
132
+ # Start generating the string with HTML (possible go give a custom 'str'-variable where the content should be pushed to).
133
+ str = if args[:str]
134
+ args[:str]
135
+ else
136
+ ""
137
137
  end
138
138
 
139
139
  str << @inden * level if pretty && level > 0
140
140
  str << "<#{@name}"
141
141
 
142
- #Add content from the 'css'-hash to the 'style'-attribute in the right format.
142
+ # Add content from the 'css'-hash to the 'style'-attribute in the right format.
143
143
  unless @css.empty?
144
144
  style = ""
145
145
  @css.each do |key, val|
@@ -154,7 +154,7 @@ class HtmlGen::Element
154
154
  end
155
155
  end
156
156
 
157
- #Add content from the 'classes'-array to the 'class'-attribute in the right format.
157
+ # Add content from the 'classes'-array to the 'class'-attribute in the right format.
158
158
  unless @classes.empty?
159
159
  class_str = @classes.join(" ")
160
160
 
@@ -165,7 +165,7 @@ class HtmlGen::Element
165
165
  end
166
166
  end
167
167
 
168
- #Write out the attributes to the string.
168
+ # Write out the attributes to the string.
169
169
  attr.each do |key, val|
170
170
  str << " #{key}=\"#{HtmlGen.escape_html(val)}\""
171
171
  end
@@ -176,11 +176,11 @@ class HtmlGen::Element
176
176
  skip_pretty = false
177
177
 
178
178
  if @eles.empty? && @str.empty? && @str_html.empty? && !forbidden_short
179
- #If no sub-string, sub-HTML or sub-elements are given, we should end the HTML with " />".
179
+ # If no sub-string, sub-HTML or sub-elements are given, we should end the HTML with " />".
180
180
  str << " />"
181
181
  str << @nl if pretty
182
182
  else
183
- #Write end-of-element and then all sub-elements.
183
+ # Write end-of-element and then all sub-elements.
184
184
  str << ">"
185
185
 
186
186
  if @eles.empty? && @str.empty? && @str_html.empty? && forbidden_short
@@ -210,21 +210,20 @@ class HtmlGen::Element
210
210
  str << @nl if pretty
211
211
  end
212
212
 
213
- #Returns the string.
214
- return str
213
+ str
215
214
  end
216
215
 
217
- #Returns the names of all sub-elements in an array.
216
+ # Returns the names of all sub-elements in an array.
218
217
  def eles_names
219
218
  names = []
220
219
  @eles.each do |ele|
221
220
  names << ele.name
222
221
  end
223
222
 
224
- return names
223
+ names
225
224
  end
226
225
 
227
- #Converts the content of the 'style'-attribute to css-hash-content.
226
+ # Converts the content of the 'style'-attribute to css-hash-content.
228
227
  def convert_style_to_css
229
228
  if !@attr[:style].to_s.strip.empty?
230
229
  style = @attr[:style]
@@ -235,13 +234,13 @@ class HtmlGen::Element
235
234
  end
236
235
 
237
236
  loop do
238
- if match = style.match(/\A\s*(\S+?):\s*(.+?)\s*(;|\Z)/)
237
+ if (match = style.match(/\A\s*(\S+?):\s*(.+?)\s*(;|\Z)/))
239
238
  style.gsub!(match[0], "")
240
239
  key = match[1]
241
240
  val = match[2]
242
241
  raise "Such a key already exists in CSS-hash: '#{key}'." if @css.key?(key)
243
242
  @css[key] = val
244
- elsif match = style.slice!(/\A\s*\Z/)
243
+ elsif (match = style.slice!(/\A\s*\Z/))
245
244
  break
246
245
  else
247
246
  raise "Dont know what to do with style-variable: '#{style}'."
@@ -276,15 +275,17 @@ private
276
275
  def data_attributes(data_hash, prev_key)
277
276
  html = ""
278
277
  data_hash.each do |key, value|
278
+ key = key.to_s.tr("_", "-") if key.is_a?(Symbol)
279
+
279
280
  if value.is_a?(Hash)
280
281
  html << " " unless html.empty?
281
- html << "#{data_attributes(value, "#{prev_key}-#{key}")}"
282
+ html << data_attributes(value, "#{prev_key}-#{key}").to_s
282
283
  else
283
284
  html << " " unless html.empty?
284
285
  html << "#{prev_key}-#{key}=\"#{HtmlGen.escape_html(value)}\""
285
286
  end
286
287
  end
287
288
 
288
- return html
289
+ html
289
290
  end
290
291
  end
@@ -1,13 +1,13 @@
1
- #A simple, lightweight and pure-Ruby class for parsing HTML-strings into elements.
1
+ # A simple, lightweight and pure-Ruby class for parsing HTML-strings into elements.
2
2
  #===Examples
3
3
  # doc = HtmlGen::Parser.new(str: a_html_variable)
4
4
  # html_ele = doc.eles.first
5
5
  # html_ele.name #=> "html"
6
6
  class HtmlGen::Parser
7
- #An array that holds all the parsed root-elements.
7
+ # An array that holds all the parsed root-elements.
8
8
  attr_reader :eles
9
9
 
10
- #The constructor. See class documentation for usage of this.
10
+ # The constructor. See class documentation for usage of this.
11
11
  def initialize(args)
12
12
  if args[:io]
13
13
  @io = args[:io]
@@ -24,17 +24,15 @@ class HtmlGen::Parser
24
24
  @eles_t = []
25
25
  @debug = args[:debug]
26
26
 
27
- while !@eof || !@buffer.empty?
28
- parse_tag
29
- end
27
+ parse_tag while !@eof || !@buffer.empty?
30
28
  end
31
29
 
32
30
  private
33
31
 
34
- #Ensures at least 16kb of data is loaded into the buffer.
32
+ # Ensures at least 16kb of data is loaded into the buffer.
35
33
  def ensure_buffer
36
- while @buffer.length < 16384 && !@eof
37
- str = @io.gets(16384)
34
+ while @buffer.length < 16_384 && !@eof
35
+ str = @io.gets(16_384)
38
36
  if !str
39
37
  @eof = true
40
38
  else
@@ -43,7 +41,7 @@ private
43
41
  end
44
42
  end
45
43
 
46
- #Searches for a given regex. If found the contents is removed from the buffer.
44
+ # Searches for a given regex. If found the contents is removed from the buffer.
47
45
  def search(regex)
48
46
  ensure_buffer
49
47
 
@@ -53,10 +51,10 @@ private
53
51
  return match
54
52
  end
55
53
 
56
- return false
54
+ false
57
55
  end
58
56
 
59
- #Asumes a tag is the next to be parsed and adds it to document-data.
57
+ # Asumes a tag is the next to be parsed and adds it to document-data.
60
58
  def parse_tag(args = {})
61
59
  if match = search(/\A\s*<\s*(\/|)\s*(\S+?)(\s+|\/\s*>|>)/)
62
60
  tag_name = match[2].to_s.strip.downcase
@@ -78,7 +76,7 @@ private
78
76
  @eles_t << ele
79
77
  puts "New element-match: #{match.to_a}" if @debug
80
78
 
81
- if end_sign.match(/^\/\s*>$/)
79
+ if end_sign =~ /^\/\s*>$/
82
80
  puts "End of element '#{tag_name}' for '#{@eles_t.last.name}'." if @debug
83
81
  ele = @eles_t.pop
84
82
  raise "Expected ele-name to be: '#{tag_name}' but it wasnt: '#{ele.name}'." if ele.name.to_s != tag_name
@@ -101,7 +99,7 @@ private
101
99
  end
102
100
  end
103
101
 
104
- #Parses all attributes of the current tag.
102
+ # Parses all attributes of the current tag.
105
103
  def parse_attr_of_tag(ele, tag_name)
106
104
  loop do
107
105
  if match = search(/\A\s*(\S+)=(\"|'|)/)
@@ -129,21 +127,21 @@ private
129
127
  end
130
128
  end
131
129
 
132
- #Parses an attribute-value until a given quote-char is reached.
130
+ # Parses an attribute-value until a given quote-char is reached.
133
131
  def parse_attr_until_quote(quote_char, quote_val)
134
132
  val = ""
135
133
 
136
134
  loop do
137
135
  ensure_buffer
138
136
  char = @buffer.slice!(0)
139
- break if !char
137
+ break unless char
140
138
 
141
139
  if char == "\\"
142
140
  val << char
143
141
  val << @buffer.slice!(0)
144
142
  elsif char =~ quote_char
145
143
  break
146
- elsif char == ">" and quote_val == :whitespace
144
+ elsif char == ">" && quote_val == :whitespace
147
145
  @buffer = char + @buffer
148
146
  break
149
147
  else
@@ -151,13 +149,13 @@ private
151
149
  end
152
150
  end
153
151
 
154
- return val
152
+ val
155
153
  end
156
154
 
157
- #Assumes some content of a tag is next to be parsed and parses it.
155
+ # Assumes some content of a tag is next to be parsed and parses it.
158
156
  def parse_content_of_tag(ele, tag_name)
159
157
  raise "Empty tag-name given: '#{tag_name}'." if tag_name.to_s.strip.empty?
160
- raise "No 'ele' was given." if !ele
158
+ raise "No 'ele' was given." unless ele
161
159
 
162
160
  loop do
163
161
  if search(/\A\s*\Z/)
@@ -170,15 +168,15 @@ private
170
168
  break
171
169
  elsif new_ele = parse_tag(false: true)
172
170
  puts "Found new element '#{new_ele.name}' and adding it to '#{ele.name}'." if @debug
173
- #ele.eles << new_ele
171
+ # ele.eles << new_ele
174
172
  elsif match = search(/\A(.+?)(<|\Z)/)
175
173
  puts "Text-content-match: '#{match.to_a}'." if @debug
176
174
 
177
- #Put end back into buffer.
175
+ # Put end back into buffer.
178
176
  @buffer = match[2] + @buffer
179
177
  puts "Buffer after text-match: #{@buffer}" if @debug
180
178
 
181
- #Add text element to list as finished.
179
+ # Add text element to list as finished.
182
180
  ele.eles << HtmlGen::TextEle.new(str: match[1])
183
181
  else
184
182
  raise "Dont know what to do with buffer: '#{@buffer}'."
@@ -8,36 +8,37 @@ class HtmlGen::TextEle
8
8
  @nl = args[:nl]
9
9
  end
10
10
 
11
- #Returns the text that this element holds.
12
- def str
13
- return @str
14
- end
11
+ # Returns the text that this element holds.
12
+ attr_reader :str
15
13
 
16
- #Returns the text HTML-escaped.
14
+ # Returns the text HTML-escaped.
17
15
  def html(args)
18
- if args[:level]
19
- level = args[:level]
20
- else
21
- level = 0
22
- end
16
+ str = ""
17
+ str << @inden * level(args) if pretty?(args)
18
+ str << html_content
19
+ str << @nl if pretty?(args)
20
+ str
21
+ end
23
22
 
24
- if !args.key?(:pretty) or args[:pretty]
25
- pretty = true
23
+ private
24
+
25
+ def pretty?(args)
26
+ !args.key?(:pretty) || args[:pretty]
27
+ end
28
+
29
+ def level
30
+ if args[:level]
31
+ args[:level]
26
32
  else
27
- pretty = false
33
+ 0
28
34
  end
35
+ end
29
36
 
30
- str = ""
31
- str << @inden * level if pretty
32
-
37
+ def html_content
33
38
  if @str
34
- str << HtmlGen.escape_html(@str)
39
+ HtmlGen.escape_html(@str)
35
40
  else
36
- str << @html
41
+ @html
37
42
  end
38
-
39
- str << @nl if pretty
40
-
41
- return str
42
43
  end
43
44
  end
data/lib/html_gen.rb CHANGED
@@ -6,7 +6,7 @@ class HtmlGen
6
6
  def self.const_missing(name)
7
7
  file_path = "#{File.dirname(__FILE__)}/html_gen/#{::StringCases.camel_to_snake(name)}.rb"
8
8
 
9
- if File.exists?(file_path)
9
+ if File.exist?(file_path)
10
10
  require file_path
11
11
  return HtmlGen.const_get(name) if HtmlGen.const_defined?(name)
12
12
  end
@@ -16,6 +16,6 @@ class HtmlGen
16
16
 
17
17
  # Escapes HTML from the given string. This is to avoid any dependencies and should not be used by other libs.
18
18
  def self.escape_html(string)
19
- return string.to_s.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
19
+ string.to_s.gsub(/&/, "&amp;").gsub(/\"/, "&quot;").gsub(/>/, "&gt;").gsub(/</, "&lt;")
20
20
  end
21
21
  end
data/shippable.yml CHANGED
@@ -2,8 +2,9 @@ language: ruby
2
2
  cache: bundler
3
3
  archive: true
4
4
  rvm:
5
- - 2.1.2
5
+ - 2.1.7
6
6
  script:
7
7
  - CODECLIMATE_REPO_TOKEN=81bf37d5bc3daf65852d6763dda5dbe2f39d5273dd23ac85a91d3efd41cd74d3 bundle exec rspec
8
+ - bundle exec rake best_practice_project:run
8
9
  notifications:
9
10
  email: false
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
2
 
3
3
  describe "Parser" do
4
4
  let(:parser) { HtmlGen::Parser.new(str: "<html><head><title>Test</title></head><body>This is the body</body></html>") }
@@ -55,11 +55,11 @@ describe "HtmlGen" do
55
55
  end
56
56
 
57
57
  it "supports data attributes" do
58
- div_ele = HtmlGen::Element.new(:div, str: "Test", data: {test: "value"})
58
+ HtmlGen::Element.new(:div, str: "Test", data: {test: "value"})
59
59
  end
60
60
 
61
61
  it "supports nested data attributes" do
62
- div_ele = HtmlGen::Element.new(:div, str: "Test", data: {deep: {nested: {test: "value"}}})
63
- div_ele.html(pretty: false).should eq "<div data-deep-nested-test=\"value\">Test</div>"
62
+ div_ele = HtmlGen::Element.new(:div, str: "Test", data: {deep: {nested: {test: "value", test_underscoe: "test"}}})
63
+ div_ele.html(pretty: false).should eq "<div data-deep-nested-test=\"value\" data-deep-nested-test-underscoe=\"test\">Test</div>"
64
64
  end
65
65
  end
data/spec/spec_helper.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  require "codeclimate-test-reporter"
2
2
  CodeClimate::TestReporter.start
3
3
 
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
5
5
  $LOAD_PATH.unshift(File.dirname(__FILE__))
6
- require 'rspec'
7
- require 'html_gen'
6
+ require "rspec"
7
+ require "html_gen"
8
8
 
9
9
  # Requires supporting files with custom matchers and macros, etc,
10
10
  # in ./support/ and its subdirectories.
11
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
12
12
 
13
13
  RSpec.configure do |config|
14
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: html_gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kasper Johansen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-17 00:00:00.000000000 Z
11
+ date: 2016-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: string-cases
@@ -80,6 +80,34 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.8.4
83
+ - !ruby/object:Gem::Dependency
84
+ name: best_practice_project
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
83
111
  description: A small framework for generating HTML.
84
112
  email: k@spernj.org
85
113
  executables: []
@@ -90,6 +118,8 @@ extra_rdoc_files:
90
118
  files:
91
119
  - ".document"
92
120
  - ".rspec"
121
+ - ".rubocop.yml"
122
+ - ".rubocop_todo.yml"
93
123
  - Gemfile
94
124
  - Gemfile.lock
95
125
  - LICENSE.txt