bunto 3.0.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +124 -76
  3. data/README.markdown +49 -12
  4. data/{bin → exe}/bunto +18 -14
  5. data/lib/bunto.rb +83 -78
  6. data/lib/bunto/cleaner.rb +10 -8
  7. data/lib/bunto/collection.rb +33 -17
  8. data/lib/bunto/command.rb +19 -13
  9. data/lib/bunto/commands/build.rb +22 -14
  10. data/lib/bunto/commands/clean.rb +9 -8
  11. data/lib/bunto/commands/doctor.rb +10 -8
  12. data/lib/bunto/commands/help.rb +4 -3
  13. data/lib/bunto/commands/new.rb +30 -21
  14. data/lib/bunto/commands/new_theme.rb +36 -0
  15. data/lib/bunto/commands/serve.rb +26 -20
  16. data/lib/bunto/commands/serve/servlet.rb +4 -5
  17. data/lib/bunto/configuration.rb +187 -125
  18. data/lib/bunto/converters/markdown.rb +19 -9
  19. data/lib/bunto/converters/markdown/kramdown_parser.rb +12 -5
  20. data/lib/bunto/converters/markdown/rdiscount_parser.rb +4 -4
  21. data/lib/bunto/converters/markdown/redcarpet_parser.rb +90 -84
  22. data/lib/bunto/convertible.rb +38 -25
  23. data/lib/bunto/deprecator.rb +11 -6
  24. data/lib/bunto/desktop.ini +2 -0
  25. data/lib/bunto/document.rb +53 -51
  26. data/lib/bunto/drops/bunto_drop.rb +12 -0
  27. data/lib/bunto/drops/document_drop.rb +40 -5
  28. data/lib/bunto/drops/drop.rb +49 -10
  29. data/lib/bunto/drops/excerpt_drop.rb +15 -0
  30. data/lib/bunto/drops/site_drop.rb +4 -2
  31. data/lib/bunto/drops/url_drop.rb +4 -4
  32. data/lib/bunto/entry_filter.rb +64 -19
  33. data/lib/bunto/errors.rb +6 -3
  34. data/lib/bunto/excerpt.rb +4 -6
  35. data/lib/bunto/external.rb +4 -4
  36. data/lib/bunto/filters.rb +72 -39
  37. data/lib/bunto/frontmatter_defaults.rb +45 -38
  38. data/lib/bunto/hooks.rb +21 -21
  39. data/lib/bunto/layout.rb +4 -8
  40. data/lib/bunto/liquid_renderer.rb +14 -3
  41. data/lib/bunto/liquid_renderer/file.rb +5 -1
  42. data/lib/bunto/liquid_renderer/table.rb +11 -11
  43. data/lib/bunto/log_adapter.rb +2 -2
  44. data/lib/bunto/page.rb +10 -10
  45. data/lib/bunto/plugin.rb +5 -5
  46. data/lib/bunto/plugin_manager.rb +12 -8
  47. data/lib/bunto/publisher.rb +1 -1
  48. data/lib/bunto/reader.rb +11 -7
  49. data/lib/bunto/readers/data_reader.rb +9 -9
  50. data/lib/bunto/readers/layout_reader.rb +7 -7
  51. data/lib/bunto/readers/page_reader.rb +3 -1
  52. data/lib/bunto/readers/post_reader.rb +9 -10
  53. data/lib/bunto/readers/static_file_reader.rb +3 -1
  54. data/lib/bunto/regenerator.rb +50 -28
  55. data/lib/bunto/related_posts.rb +1 -1
  56. data/lib/bunto/renderer.rb +33 -23
  57. data/lib/bunto/site.rb +94 -51
  58. data/lib/bunto/static_file.rb +33 -26
  59. data/lib/bunto/stevenson.rb +6 -5
  60. data/lib/bunto/tags/highlight.rb +50 -35
  61. data/lib/bunto/tags/include.rb +42 -31
  62. data/lib/bunto/tags/link.rb +11 -4
  63. data/lib/bunto/tags/post_url.rb +8 -7
  64. data/lib/bunto/theme.rb +10 -8
  65. data/lib/bunto/theme_builder.rb +117 -0
  66. data/lib/bunto/url.rb +21 -14
  67. data/lib/bunto/utils.rb +57 -28
  68. data/lib/bunto/utils/ansi.rb +9 -9
  69. data/lib/bunto/utils/platforms.rb +2 -2
  70. data/lib/bunto/version.rb +1 -1
  71. data/lib/site_template/_config.yml +3 -1
  72. data/lib/site_template/_posts/0000-00-00-welcome-to-bunto.markdown.erb +3 -3
  73. data/lib/site_template/about.md +3 -3
  74. data/lib/site_template/css/main.scss +3 -17
  75. data/lib/theme_template/CODE_OF_CONDUCT.md.erb +74 -0
  76. data/lib/theme_template/Gemfile +2 -0
  77. data/lib/theme_template/LICENSE.txt.erb +21 -0
  78. data/lib/theme_template/README.md.erb +48 -0
  79. data/lib/theme_template/_layouts/default.html +1 -0
  80. data/lib/theme_template/_layouts/page.html +5 -0
  81. data/lib/theme_template/_layouts/post.html +5 -0
  82. data/lib/theme_template/example/_config.yml.erb +1 -0
  83. data/lib/theme_template/example/_post.md +12 -0
  84. data/lib/theme_template/example/index.html +14 -0
  85. data/lib/theme_template/example/style.scss +7 -0
  86. data/lib/theme_template/gitignore.erb +4 -0
  87. data/lib/theme_template/theme.gemspec.erb +18 -0
  88. metadata +40 -19
  89. data/lib/site_template/_includes/footer.html +0 -38
  90. data/lib/site_template/_includes/head.html +0 -12
  91. data/lib/site_template/_includes/header.html +0 -27
  92. data/lib/site_template/_includes/icon-github.html +0 -1
  93. data/lib/site_template/_includes/icon-github.svg +0 -1
  94. data/lib/site_template/_includes/icon-twitter.html +0 -1
  95. data/lib/site_template/_includes/icon-twitter.svg +0 -1
  96. data/lib/site_template/_layouts/default.html +0 -20
  97. data/lib/site_template/_layouts/page.html +0 -14
  98. data/lib/site_template/_layouts/post.html +0 -15
  99. data/lib/site_template/_sass/_base.scss +0 -200
  100. data/lib/site_template/_sass/_layout.scss +0 -242
  101. data/lib/site_template/_sass/_syntax-highlighting.scss +0 -71
@@ -1,4 +1,4 @@
1
- require 'uri'
1
+ require "uri"
2
2
 
3
3
  # Public: Methods that generate a URL for a resource such as a Post or a Page.
4
4
  #
@@ -35,8 +35,15 @@ module Bunto
35
35
  # The generated relative URL of the resource
36
36
  #
37
37
  # Returns the String URL
38
+ # Raises a Bunto::Errors::InvalidURLError if the relative URL contains a colon
38
39
  def to_s
39
- sanitize_url(generated_permalink || generated_url)
40
+ sanitized_url = sanitize_url(generated_permalink || generated_url)
41
+ if sanitized_url.include?(":")
42
+ raise Bunto::Errors::InvalidURLError,
43
+ "The URL #{sanitized_url} is invalid because it contains a colon."
44
+ else
45
+ sanitized_url
46
+ end
40
47
  end
41
48
 
42
49
  # Generates a URL from the permalink
@@ -67,32 +74,32 @@ module Bunto
67
74
 
68
75
  def generate_url_from_hash(template)
69
76
  @placeholders.inject(template) do |result, token|
70
- break result if result.index(':').nil?
77
+ break result if result.index(":").nil?
71
78
  if token.last.nil?
72
- # Remove leading '/' to avoid generating urls with `//`
73
- result.gsub(/\/:#{token.first}/, '')
79
+ # Remove leading "/" to avoid generating urls with `//`
80
+ result.gsub(%r!/:#{token.first}!, "")
74
81
  else
75
- result.gsub(/:#{token.first}/, self.class.escape_path(token.last))
82
+ result.gsub(%r!:#{token.first}!, self.class.escape_path(token.last))
76
83
  end
77
84
  end
78
85
  end
79
86
 
80
87
  def generate_url_from_drop(template)
81
- template.gsub(/:([a-z_]+)/.freeze) do |match|
82
- replacement = @placeholders.public_send(match.sub(':'.freeze, ''.freeze))
88
+ template.gsub(%r!:([a-z_]+)!) do |match|
89
+ replacement = @placeholders.public_send(match.sub(":".freeze, "".freeze))
83
90
  if replacement.nil?
84
- ''.freeze
91
+ "".freeze
85
92
  else
86
93
  self.class.escape_path(replacement)
87
94
  end
88
- end.gsub(/\/\//.freeze, '/'.freeze)
95
+ end.gsub(%r!//!, "/".freeze)
89
96
  end
90
97
 
91
98
  # Returns a sanitized String URL, stripping "../../" and multiples of "/",
92
99
  # as well as the beginning "/" so we can enforce and ensure it.
93
100
 
94
101
  def sanitize_url(str)
95
- "/" + str.gsub(/\/{2,}/, "/").gsub(/\.+\/|\A\/+/, "")
102
+ "/" + str.gsub(%r!/{2,}!, "/").gsub(%r!\.+/|\A/+!, "")
96
103
  end
97
104
 
98
105
  # Escapes a path to be a valid URL path segment
@@ -106,7 +113,7 @@ module Bunto
106
113
  #
107
114
  # Returns the escaped path.
108
115
  def self.escape_path(path)
109
- # Because URI.escape doesn't escape '?', '[' and ']' by default,
116
+ # Because URI.escape doesn't escape "?", "[" and "]" by default,
110
117
  # specify unsafe string (except unreserved, sub-delims, ":", "@" and "/").
111
118
  #
112
119
  # URI path segment is defined in RFC 3986 as follows:
@@ -116,7 +123,7 @@ module Bunto
116
123
  # pct-encoded = "%" HEXDIG HEXDIG
117
124
  # sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
118
125
  # / "*" / "+" / "," / ";" / "="
119
- URI.escape(path, /[^a-zA-Z\d\-._~!$&'()*+,;=:@\/]/).encode('utf-8')
126
+ URI.escape(path, %r{[^a-zA-Z\d\-._~!$&'()*+,;=:@\/]}).encode("utf-8")
120
127
  end
121
128
 
122
129
  # Unescapes a URL path segment
@@ -130,7 +137,7 @@ module Bunto
130
137
  #
131
138
  # Returns the unescaped path.
132
139
  def self.unescape_path(path)
133
- URI.unescape(path.encode('utf-8'))
140
+ URI.unescape(path.encode("utf-8"))
134
141
  end
135
142
  end
136
143
  end
@@ -2,27 +2,25 @@
2
2
  module Bunto
3
3
  module Utils
4
4
  extend self
5
- autoload :Platforms, 'bunto/utils/platforms'
5
+ autoload :Platforms, "bunto/utils/platforms"
6
6
  autoload :Ansi, "bunto/utils/ansi"
7
7
 
8
8
  # Constants for use in #slugify
9
- SLUGIFY_MODES = %w(raw default pretty)
9
+ SLUGIFY_MODES = %w(raw default pretty).freeze
10
10
  SLUGIFY_RAW_REGEXP = Regexp.new('\\s+').freeze
11
- SLUGIFY_DEFAULT_REGEXP = Regexp.new('[^[:alnum:]]+').freeze
11
+ SLUGIFY_DEFAULT_REGEXP = Regexp.new("[^[:alnum:]]+").freeze
12
12
  SLUGIFY_PRETTY_REGEXP = Regexp.new("[^[:alnum:]._~!$&'()+,;=@]+").freeze
13
13
 
14
14
  # Takes an indented string and removes the preceding spaces on each line
15
15
 
16
16
  def strip_heredoc(str)
17
- str.gsub(/^[ \t]{#{(str.scan(/^[ \t]*(?=\S)/).min || "").size}}/, "")
17
+ str.gsub(%r!^[ \t]{#{(str.scan(%r!^[ \t]*(?=\S)!).min || "").size}}!, "")
18
18
  end
19
19
 
20
20
  # Takes a slug and turns it into a simple title.
21
21
 
22
22
  def titleize_slug(slug)
23
- slug.split("-").map! do |val|
24
- val.capitalize
25
- end.join(" ")
23
+ slug.split("-").map!(&:capitalize).join(" ")
26
24
  end
27
25
 
28
26
  # Non-destructive version of deep_merge_hashes! See that method.
@@ -42,17 +40,9 @@ module Bunto
42
40
  #
43
41
  # Thanks to whoever made it.
44
42
  def deep_merge_hashes!(target, overwrite)
45
- target.merge!(overwrite) do |key, old_val, new_val|
46
- if new_val.nil?
47
- old_val
48
- else
49
- mergable?(old_val) && mergable?(new_val) ? deep_merge_hashes(old_val, new_val) : new_val
50
- end
51
- end
52
-
53
- if target.respond_to?(:default_proc) && overwrite.respond_to?(:default_proc) && target.default_proc.nil?
54
- target.default_proc = overwrite.default_proc
55
- end
43
+ merge_values(target, overwrite)
44
+ merge_default_proc(target, overwrite)
45
+ duplicate_frozen_values(target)
56
46
 
57
47
  target
58
48
  end
@@ -61,6 +51,15 @@ module Bunto
61
51
  value.is_a?(Hash) || value.is_a?(Drops::Drop)
62
52
  end
63
53
 
54
+ def duplicable?(obj)
55
+ case obj
56
+ when nil, false, true, Symbol, Numeric
57
+ false
58
+ else
59
+ true
60
+ end
61
+ end
62
+
64
63
  # Read array from the supplied hash favouring the singular key
65
64
  # and then the plural key, and handling any nil entries.
66
65
  #
@@ -71,7 +70,9 @@ module Bunto
71
70
  # Returns an array
72
71
  def pluralized_array_from_hash(hash, singular_key, plural_key)
73
72
  [].tap do |array|
74
- array << (value_from_singular_key(hash, singular_key) || value_from_plural_key(hash, plural_key))
73
+ value = value_from_singular_key(hash, singular_key)
74
+ value ||= value_from_plural_key(hash, plural_key)
75
+ array << value
75
76
  end.flatten.compact
76
77
  end
77
78
 
@@ -133,17 +134,19 @@ module Bunto
133
134
  # Determines whether a given file has
134
135
  #
135
136
  # Returns true if the YAML front matter is present.
137
+ # rubocop: disable PredicateName
136
138
  def has_yaml_header?(file)
137
- !!(File.open(file, 'rb') { |f| f.readline } =~ /\A---\s*\r?\n/)
139
+ !!(File.open(file, "rb", &:readline) =~ %r!\A---\s*\r?\n!)
138
140
  rescue EOFError
139
141
  false
140
142
  end
143
+ # rubocop: enable PredicateName
141
144
 
142
145
  # Slugify a filename or title.
143
146
  #
144
147
  # string - the filename or title to slugify
145
148
  # mode - how string is slugified
146
- # cased - whether to replace all uppercase letters with their
149
+ # cased - whether to replace all uppercase letters with their
147
150
  # lowercase counterparts
148
151
  #
149
152
  # When mode is "none", return the given string.
@@ -172,7 +175,7 @@ module Bunto
172
175
  #
173
176
  # Returns the slugified string.
174
177
  def slugify(string, mode: nil, cased: false)
175
- mode ||= 'default'
178
+ mode ||= "default"
176
179
  return nil if string.nil?
177
180
 
178
181
  unless SLUGIFY_MODES.include?(mode)
@@ -182,21 +185,21 @@ module Bunto
182
185
  # Replace each character sequence with a hyphen
183
186
  re =
184
187
  case mode
185
- when 'raw'
188
+ when "raw"
186
189
  SLUGIFY_RAW_REGEXP
187
- when 'default'
190
+ when "default"
188
191
  SLUGIFY_DEFAULT_REGEXP
189
- when 'pretty'
192
+ when "pretty"
190
193
  # "._~!$&'()+,;=@" is human readable (not URI-escaped) in URL
191
194
  # and is allowed in both extN and NTFS.
192
195
  SLUGIFY_PRETTY_REGEXP
193
196
  end
194
197
 
195
198
  # Strip according to the mode
196
- slug = string.gsub(re, '-')
199
+ slug = string.gsub(re, "-")
197
200
 
198
201
  # Remove leading/trailing hyphen
199
- slug.gsub!(/^\-|\-$/i, '')
202
+ slug.gsub!(%r!^\-|\-$!i, "")
200
203
 
201
204
  slug.downcase! unless cased
202
205
  slug
@@ -267,7 +270,7 @@ module Bunto
267
270
  # Returns matched pathes
268
271
  def safe_glob(dir, patterns, flags = 0)
269
272
  return [] unless Dir.exist?(dir)
270
- pattern = File.join(Array patterns)
273
+ pattern = File.join(Array(patterns))
271
274
  return [dir] if pattern.empty?
272
275
  Dir.chdir(dir) do
273
276
  Dir.glob(pattern, flags).map { |f| File.join(dir, f) }
@@ -284,5 +287,31 @@ module Bunto
284
287
  merged
285
288
  end
286
289
 
290
+ private
291
+ def merge_values(target, overwrite)
292
+ target.merge!(overwrite) do |_key, old_val, new_val|
293
+ if new_val.nil?
294
+ old_val
295
+ elsif mergable?(old_val) && mergable?(new_val)
296
+ deep_merge_hashes(old_val, new_val)
297
+ else
298
+ new_val
299
+ end
300
+ end
301
+ end
302
+
303
+ private
304
+ def merge_default_proc(target, overwrite)
305
+ if target.is_a?(Hash) && overwrite.is_a?(Hash) && target.default_proc.nil?
306
+ target.default_proc = overwrite.default_proc
307
+ end
308
+ end
309
+
310
+ private
311
+ def duplicate_frozen_values(target)
312
+ target.each do |key, val|
313
+ target[key] = val.dup if val.frozen? && duplicable?(val)
314
+ end
315
+ end
287
316
  end
288
317
  end
@@ -8,17 +8,17 @@ module Bunto
8
8
  extend self
9
9
 
10
10
  ESCAPE = format("%c", 27)
11
- MATCH = /#{ESCAPE}\[(?:\d+)(?:;\d+)*(j|k|m|s|u|A|B|G)|\e\(B\e\[m/ix.freeze
11
+ MATCH = %r!#{ESCAPE}\[(?:\d+)(?:;\d+)*(j|k|m|s|u|A|B|G)|\e\(B\e\[m!ix
12
12
  COLORS = {
13
- :red => 31,
14
- :green => 32,
15
- :black => 30,
13
+ :red => 31,
14
+ :green => 32,
15
+ :black => 30,
16
16
  :magenta => 35,
17
- :yellow => 33,
18
- :white => 37,
19
- :blue => 34,
20
- :cyan => 36
21
- }
17
+ :yellow => 33,
18
+ :white => 37,
19
+ :blue => 34,
20
+ :cyan => 36
21
+ }.freeze
22
22
 
23
23
  # Strip ANSI from the current string. It also strips cursor stuff,
24
24
  # well some of it, and it also strips some other stuff that a lot of
@@ -17,8 +17,8 @@ module Bunto
17
17
  # platforms. This is mostly useful for `bunto doctor` and for testing
18
18
  # where we kick off certain tests based on the platform.
19
19
 
20
- { :windows? => /mswin|mingw|cygwin/, :linux? => /linux/, \
21
- :osx? => /darwin|mac os/, :unix? => /solaris|bsd/ }.each do |k, v|
20
+ { :windows? => %r!mswin|mingw|cygwin!, :linux? => %r!linux!, \
21
+ :osx? => %r!darwin|mac os!, :unix? => %r!solaris|bsd! }.each do |k, v|
22
22
  define_method k do
23
23
  !!(
24
24
  RbConfig::CONFIG["host_os"] =~ v
@@ -1,3 +1,3 @@
1
1
  module Bunto
2
- VERSION = '3.0.0'
2
+ VERSION = "3.2.1".freeze
3
3
  end
@@ -4,6 +4,7 @@
4
4
  # which you are expected to set up once and rarely edit after that. If you find
5
5
  # yourself editing these this file very often, consider using Bunto's data files
6
6
  # feature for the data you need to update frequently.
7
+ #
7
8
  # For technical reasons, this file is *NOT* reloaded automatically when you use
8
9
  # 'bunto serve'. If you change this file, please restart the server process.
9
10
 
@@ -20,8 +21,9 @@ description: > # this means to ignore newlines until "baseurl:"
20
21
  Google search results) and in your feed.xml site description.
21
22
  baseurl: "" # the subpath of your site, e.g. /blog
22
23
  url: "http://example.com" # the base hostname & protocol for your site
23
- twitter_username: buntorb
24
+ twitter_username: buntowaf
24
25
  github_username: bunto
25
26
 
26
27
  # Build settings
27
28
  markdown: kramdown
29
+ theme: minima
@@ -14,12 +14,12 @@ Bunto also offers powerful support for code snippets:
14
14
  def print_hi(name)
15
15
  puts "Hi, #{name}"
16
16
  end
17
- print_hi('Suriyaa')
18
- #=> prints 'Hi, Suriyaa' to STDOUT.
17
+ print_hi('Tom')
18
+ #=> prints 'Hi, Tom' to STDOUT.
19
19
  {% endhighlight %}
20
20
 
21
21
  Check out the [Bunto docs][bunto-docs] for more info on how to get the most out of Bunto. File all bugs/feature requests at [Bunto’s GitHub repo][bunto-gh]. If you have questions, you can ask them on [Bunto Talk][bunto-talk].
22
22
 
23
23
  [bunto-docs]: http://bunto.github.io/docs/home
24
24
  [bunto-gh]: https://github.com/bunto/bunto
25
- [bunto-talk]: https://bunto.github.io/talk/
25
+ [bunto-talk]: https://talk.bunto.github.io/
@@ -4,11 +4,11 @@ title: About
4
4
  permalink: /about/
5
5
  ---
6
6
 
7
- This is the base Bunto theme. You can find out more info about customizing your Bunto theme, as well as basic Bunto usage documentation at [buntorb.com](https://bunto.github.io/)
7
+ This is the base Bunto theme. You can find out more info about customizing your Bunto theme, as well as basic Bunto usage documentation at [bunto.github.io](http://bunto.github.io/)
8
8
 
9
9
  You can find the source code for the Bunto new theme at:
10
- {% include icon-github.html username="SuriyaaKudoIsc" %} /
11
- [bunto-new](https://github.com/SuriyaaKudoIsc/bunto-new)
10
+ {% include icon-github.html username="bunto" %} /
11
+ [minima](https://github.com/bunto/minima)
12
12
 
13
13
  You can find the source code for Bunto at
14
14
  {% include icon-github.html username="bunto" %} /
@@ -3,8 +3,6 @@
3
3
  ---
4
4
  @charset "utf-8";
5
5
 
6
-
7
-
8
6
  // Our variables
9
7
  $base-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
10
8
  $base-font-size: 16px;
@@ -28,8 +26,7 @@ $content-width: 800px;
28
26
  $on-palm: 600px;
29
27
  $on-laptop: 800px;
30
28
 
31
-
32
-
29
+ // Minima also includes a mixin for defining media queries.
33
30
  // Use media queries like this:
34
31
  // @include media-query($on-palm) {
35
32
  // .wrapper {
@@ -37,17 +34,6 @@ $on-laptop: 800px;
37
34
  // padding-left: $spacing-unit / 2;
38
35
  // }
39
36
  // }
40
- @mixin media-query($device) {
41
- @media screen and (max-width: $device) {
42
- @content;
43
- }
44
- }
45
-
46
-
47
37
 
48
- // Import partials from `sass_dir` (defaults to `_sass`)
49
- @import
50
- "base",
51
- "layout",
52
- "syntax-highlighting"
53
- ;
38
+ // Import partials from the `minima` theme.
39
+ @import "minima";
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at <%= user_email %>. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/