html_gen 0.0.7 → 0.0.8

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
  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