coconductor 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64ea0f132cb287e2e1041e75d11b39323edfe687fed7d8fa4fb9a9b36bef0085
4
- data.tar.gz: 2606c0d12060499e5e7b9bbd6c1af97bd13caa2f1b89d676fbb78017715b61d6
3
+ metadata.gz: 295cf8fe4384c753c323d0617abf9b74436ad0887ae3558b4684b90819aabad1
4
+ data.tar.gz: cb50009fe71804e04ab800c3ab9e1d1e3d7490002d06d1e4f9d36121c67eab52
5
5
  SHA512:
6
- metadata.gz: 946313def06f3e404d007883b99381acea3d5998aafe8a54ac7c0fc2fa635714b541ae374396c260a40a3a9d5b8caf4b7cfa76bbe6cdb8df8ee8b2a23a2684e3
7
- data.tar.gz: 9926a2eb336283cdd1f4e17bba5a68ebae77a71076f7b60874367f36fb06f4df457749017c83c98828573817545f90fd48ed12113a7815158d795743b84ae677
6
+ metadata.gz: dfa120239578da0cc879d7029c54e3c2420270d3e07482113cba126bf8acaaa16d7d6222af94f00da03b0e685a27b2376c086d721db2fba821e7210d17ac9ab3
7
+ data.tar.gz: '081cc970eb3bfa46838849cc5e504d3af04dc2b8d007c8b8d4114993011fd862859392121ad3d25373c8cf84d8a41f838e5261799742752e2e2974cfcd17ffa9'
@@ -3,26 +3,20 @@ require 'toml'
3
3
  module Coconductor
4
4
  class InvalidCodeOfConduct < ArgumentError; end
5
5
  class CodeOfConduct
6
- VENDORED_CODES_OF_CONDUCT = %w[
7
- citizen-code-of-conduct
8
- contributor-covenant
9
- ].freeze
10
-
11
- KEY_REGEX = %r{
12
- (?<family>#{Regexp.union(VENDORED_CODES_OF_CONDUCT)})
13
- /version
14
- /(?<major>\d)/(?<minor>\d)(/(?<patch>\d))?
15
- /#{Coconductor::ProjectFiles::CodeOfConductFile::FILENAME_REGEX}
16
- }ix
17
- FIELD_REGEX = /\[(?<name>[A-Z_ ]{2,}).*\]/
18
-
19
6
  class << self
20
7
  def all
21
8
  @all ||= keys.map { |key| new(key) }
22
9
  end
23
10
 
24
- def find(key)
25
- all.find { |coc| coc.key == key }
11
+ def latest
12
+ @latest ||= families.map { |family| find(family) }
13
+ end
14
+
15
+ # Returns the code of conduct specified by the key with version,
16
+ # or the latest in the family if only the family is specified
17
+ def find(key_or_family)
18
+ match = all.find { |coc| coc.key == key_or_family }
19
+ match || latest_in_family(key_or_family)
26
20
  end
27
21
  alias [] find
28
22
  alias find_by_key find
@@ -40,17 +34,38 @@ module Coconductor
40
34
  end
41
35
  end
42
36
 
37
+ def latest_in_family(family, language: nil)
38
+ cocs = all.select do |coc|
39
+ coc.language == language && coc.family == family
40
+ end
41
+ cocs.max_by(&:version)
42
+ end
43
+
44
+ def families
45
+ @families ||= Dir["#{vendor_dir}/*"].map do |dir|
46
+ File.basename(dir)
47
+ end
48
+ end
49
+
43
50
  private
44
51
 
45
52
  def vendored_codes_of_conduct
46
53
  @vendored_codes_of_conduct ||= begin
47
- cocs = "{#{VENDORED_CODES_OF_CONDUCT.join(',')}}"
54
+ cocs = "{#{families.join(',')}}"
48
55
  path = File.join vendor_dir, cocs, '**', '*.md'
49
56
  Dir.glob(path)
50
57
  end
51
58
  end
52
59
  end
53
60
 
61
+ KEY_REGEX = %r{
62
+ (?<family>#{Regexp.union(CodeOfConduct.families)})
63
+ /version
64
+ /(?<major>\d)/(?<minor>\d)(/(?<patch>\d))?
65
+ /#{Coconductor::ProjectFiles::CodeOfConductFile::FILENAME_REGEX}
66
+ }ix
67
+ FIELD_REGEX = /\[(?<name>[A-Z_ ]{2,}).*\]/
68
+
54
69
  attr_reader :key
55
70
  attr_writer :content
56
71
  include Licensee::ContentHelper
@@ -87,6 +102,7 @@ module Coconductor
87
102
  def content
88
103
  @content ||= parts.last
89
104
  end
105
+ alias body content
90
106
 
91
107
  def inspect
92
108
  "#<Licensee::CodeOfConduct key=#{key}>"
@@ -104,6 +120,10 @@ module Coconductor
104
120
  family == 'citizen-code-of-conduct'
105
121
  end
106
122
 
123
+ def no_code_of_conduct?
124
+ family == 'no-code-of-conduct'
125
+ end
126
+
107
127
  def fields
108
128
  content.scan(FIELD_REGEX).flatten
109
129
  end
@@ -111,11 +131,13 @@ module Coconductor
111
131
  private
112
132
 
113
133
  def filename
114
- if contributor_covenant?
115
- filename = 'code-of-conduct'
116
- elsif citizen_code_of_conduct?
117
- filename = 'citizen_code_of_conduct'
118
- end
134
+ filename = if contributor_covenant?
135
+ 'code-of-conduct'
136
+ elsif citizen_code_of_conduct?
137
+ 'citizen_code_of_conduct'
138
+ else
139
+ 'CODE_OF_CONDUCT'
140
+ end
119
141
 
120
142
  filename << '.' + language if language
121
143
  filename << '.md'
@@ -1,3 +1,3 @@
1
1
  module Coconductor
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
@@ -4,18 +4,32 @@ require 'fileutils'
4
4
  require 'open-uri'
5
5
  require 'toml'
6
6
 
7
+ def mkdir(dir)
8
+ FileUtils.rm_rf(dir)
9
+ FileUtils.mkdir_p(dir)
10
+ end
11
+
12
+ def download_and_write(url, version: '1.0', dir: '', file: 'CODE_OF_CONDUCT.md')
13
+ content = URI.open(url).read
14
+ meta = { 'version' => version }
15
+ toml = TOML::Generator.new(meta).body
16
+ content = ['+++', toml, '+++', content].join("\n")
17
+ path = File.join(dir, 'version', *version.split('.'), file)
18
+ FileUtils.mkdir_p File.dirname(path)
19
+ File.write(path, content)
20
+ end
21
+
7
22
  repo = 'ContributorCovenant/contributor_covenant'
8
- dir = File.expand_path 'vendor/contributor-covenant'
23
+ dir = File.expand_path '../vendor/contributor-covenant', __dir__
9
24
  include_path = '*/content/version'
10
25
 
11
- FileUtils.rm_rf(dir)
12
- FileUtils.mkdir_p(dir)
26
+ mkdir(dir)
13
27
 
14
28
  tar_args = "--include=#{include_path} --strip-components=2 -C #{dir}"
15
29
  `curl -L "https://api.github.com/repos/#{repo}/tarball" | tar xf - #{tar_args}`
16
30
 
17
31
  repo = 'stumpsyn/policies'
18
- dir = 'vendor/citizen-code-of-conduct'
32
+ dir = File.expand_path '../vendor/citizen-code-of-conduct', __dir__
19
33
  file = 'citizen_code_of_conduct.md'
20
34
  versions = {
21
35
  '2.0' => 'd0594789ea324a42e26b495034952b6ce08d9f51',
@@ -24,16 +38,18 @@ versions = {
24
38
  '2.3' => 'b1eb8deb5da073c2bd02a8e742e017edfc422554'
25
39
  }
26
40
 
27
- FileUtils.rm_rf(dir)
28
- FileUtils.mkdir_p(dir)
41
+ mkdir(dir)
29
42
 
30
43
  versions.each do |version, sha|
31
44
  url = "https://github.com/#{repo}/raw/#{sha}/#{file}"
32
- content = URI.open(url).read
33
- meta = { 'version' => version }
34
- toml = TOML::Generator.new(meta).body
35
- content = ['+++', toml, '+++', content].join("\n")
36
- path = File.join(dir, 'version', *version.split('.'), file)
37
- FileUtils.mkdir_p File.dirname(path)
38
- File.write(path, content)
45
+ download_and_write(url, version: version, dir: dir, file: file)
39
46
  end
47
+
48
+ repo = 'domgetter/NCoC'
49
+ dir = 'vendor/no-code-of-conduct'
50
+ file = 'CODE_OF_CONDUCT.md'
51
+
52
+ mkdir(dir)
53
+
54
+ url = "https://github.com/#{repo}/raw/master/#{file}"
55
+ download_and_write(url, dir: dir, file: file)
@@ -8,7 +8,7 @@ aliases = ["/version/1/4/uk"]
8
8
  ## Наші зобовʼязання
9
9
 
10
10
  В інтересах зміцнення відкритого і дружнього середовища, ми, як учасники та
11
- супроводжувачі, зобовʼязуємось прймати участь в розбудові нашого проекту та
11
+ супроводжувачі, зобовʼязуємось приймати участь в розбудові нашого проекту та
12
12
  спільноти навколо нього, уникаючи будь-яких образ та притискань в залежності
13
13
  від віку, статури, особливих потреб, етнічної та гендерної приналежності,
14
14
  самовираження, досвіду, національності, зовнішнього вигляду, раси, сексуальної
@@ -20,7 +20,7 @@ aliases = ["/version/1/4/uk"]
20
20
 
21
21
  * Використання доброзичливої та зрозумілої мови
22
22
  * Повага до різних точок зору та досвіду
23
- * Вічливе сприйняття конструктивної критики
23
+ * Ввічливе сприйняття конструктивної критики
24
24
  * Зосередження уваги на тому, що краще для спільноти
25
25
  * Демонстрація співпереживання по відношенню до інших членів спільноти
26
26
 
@@ -28,44 +28,44 @@ aliases = ["/version/1/4/uk"]
28
28
 
29
29
  * Використання виразів і зображень сексуального характеру, небажана увага
30
30
  сексуального характеру чи вислови
31
- * Тролінг, або образливі/принизливі коментарі або персональні чи політичні
31
+ * Тролінг, образливі/принизливі коментарі або персональні чи політичні
32
32
  випади
33
33
  * Публічні чи приватні домагання
34
34
  * Оприлюднення приватної інформації інших осіб, наприклад поштової чи
35
35
  електронної адреси, без явної на те згоди
36
- * Інша поведінка, яка обґрунтовано може вважатись недоречної в професійному оточені
36
+ * Інша поведінка, яка обґрунтовано може вважатись недоречною в професійному оточенні
37
37
 
38
38
  ## Наші обовʼязки
39
39
 
40
40
  Супроводжувачі проекту несуть відповідальність за розʼяснення стандартів
41
- прийнятної поведінки і очікують у віповідь, на належне і справедливе
41
+ прийнятної поведінки, і від них очікується належне і справедливе
42
42
  виправлення у відповідь на будь-які випадки неприйнятної поведінки.
43
43
 
44
44
  Супроводжувачі проекту несуть відповідальність та мають право вилучати,
45
- змінювати або відхиляти коментарі, коміти, код, зміни у вікі, в проблеми, а
46
- також ішний вклад в проект, що невідповідає Кодексу поведінки, чи блокувати
45
+ змінювати або відхиляти коментарі, коміти, код, зміни у вікі, записи
46
+ та інший вклад в проект, що не відповідає Кодексу поведінки, чи блокувати
47
47
  тимчасово або назавжди будь-якого учасника за його поведінку, якщо вони
48
48
  вважають такі дії недоцільними, загрозливими, образливими або шкідливими.
49
49
 
50
50
  ## Сфера застосування
51
51
 
52
- Цей Кодекс поведінки застосовується як в середині проекту так і публічно,
52
+ Цей Кодекс поведінки застосовується як в середині проекту, так і публічно,
53
53
  коли особа представляє проект або його спільноту. Приклади представлення
54
54
  проекту або його спільноти включають використання офіційної адреси
55
55
  електронної пошти, публікації в соцальних мережах від імені проекта, або виступи
56
- на оналайн чи оффлайн подіях в якості представника проекту. Способи
56
+ на онлайн чи оффлайн подіях в якості представника проекту. Способи
57
57
  представництва можуть бути уточнені супроводжувачами проекта.
58
58
 
59
59
  ## Правозастосування
60
60
 
61
- Про випадки образливого, або іншого неприпустимого поводження можна повідомити
61
+ Про випадки образливого або іншого неприпустимого поводження можна повідомити,
62
62
  надіславши листа до команди проекта за адресою [АДРЕСА_Е-ПОШТИ]. Всі скарги
63
63
  будуть розглянуті та перевірені, що призведе до реакції, що вважається
64
64
  необхідною і доцільною відповідно до обставин. Команда проекту зобовʼязується
65
- зберігати конфеденційність позивача. Інші деталі, щодо правозастосування можуть
65
+ зберігати конфеденційність позивача. Інші деталі щодо правозастосування можуть
66
66
  оприлюднюватись окремо.
67
67
 
68
- Супроводжувачі проекту, які не дотримуються або порушують Кодекс поведінки
68
+ Супроводжувачі проекту, які не дотримуються або порушують Кодекс поведінки,
69
69
  можуть зіткнутися з тимчасовими або постійними наслідками, які визначені членами
70
70
  керівництва проекту.
71
71
 
@@ -0,0 +1,9 @@
1
+ +++
2
+ version = "1.0"
3
+
4
+ +++
5
+ # Contributor Code of Conduct
6
+
7
+ This project adheres to No Code of Conduct. We are all adults. We accept anyone's contributions. Nothing else matters.
8
+
9
+ For more information please visit the [No Code of Conduct](https://github.com/domgetter/NCoC) homepage.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coconductor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Balter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-30 00:00:00.000000000 Z
11
+ date: 2018-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: licensee
@@ -226,6 +226,7 @@ files:
226
226
  - vendor/contributor-covenant/version/1/4/code-of-conduct.uk.md
227
227
  - vendor/contributor-covenant/version/1/4/code-of-conduct.zh-cn.md
228
228
  - vendor/contributor-covenant/version/1/4/code-of-conduct.zh-tw.md
229
+ - vendor/no-code-of-conduct/version/1/0/CODE_OF_CONDUCT.md
229
230
  homepage: https://github.com/benbalter/coconductor
230
231
  licenses:
231
232
  - MIT