bunto 3.0.0 → 3.2.1

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