consul 1.3.2 → 2.0.0

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.
data/Gemfile.8-0.lock ADDED
@@ -0,0 +1,174 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ consul (2.0.0)
5
+ activerecord (>= 6.0)
6
+ activesupport (>= 6.0)
7
+ edge_rider (>= 0.3.0)
8
+ memoized (>= 1.0.2)
9
+ railties (>= 6.0)
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ actionpack (8.0.1)
15
+ actionview (= 8.0.1)
16
+ activesupport (= 8.0.1)
17
+ nokogiri (>= 1.8.5)
18
+ rack (>= 2.2.4)
19
+ rack-session (>= 1.0.1)
20
+ rack-test (>= 0.6.3)
21
+ rails-dom-testing (~> 2.2)
22
+ rails-html-sanitizer (~> 1.6)
23
+ useragent (~> 0.16)
24
+ actionview (8.0.1)
25
+ activesupport (= 8.0.1)
26
+ builder (~> 3.1)
27
+ erubi (~> 1.11)
28
+ rails-dom-testing (~> 2.2)
29
+ rails-html-sanitizer (~> 1.6)
30
+ activemodel (8.0.1)
31
+ activesupport (= 8.0.1)
32
+ activerecord (8.0.1)
33
+ activemodel (= 8.0.1)
34
+ activesupport (= 8.0.1)
35
+ timeout (>= 0.4.0)
36
+ activesupport (8.0.1)
37
+ base64
38
+ benchmark (>= 0.3)
39
+ bigdecimal
40
+ concurrent-ruby (~> 1.0, >= 1.3.1)
41
+ connection_pool (>= 2.2.5)
42
+ drb
43
+ i18n (>= 1.6, < 2)
44
+ logger (>= 1.4.2)
45
+ minitest (>= 5.1)
46
+ securerandom (>= 0.3)
47
+ tzinfo (~> 2.0, >= 2.0.5)
48
+ uri (>= 0.13.1)
49
+ assignable_values (1.0.0)
50
+ activerecord (>= 2.3)
51
+ base64 (0.2.0)
52
+ benchmark (0.4.0)
53
+ bigdecimal (3.1.8)
54
+ builder (3.3.0)
55
+ concurrent-ruby (1.3.3)
56
+ connection_pool (2.4.1)
57
+ crass (1.0.6)
58
+ database_cleaner (2.0.2)
59
+ database_cleaner-active_record (>= 2, < 3)
60
+ database_cleaner-active_record (2.2.0)
61
+ activerecord (>= 5.a)
62
+ database_cleaner-core (~> 2.0.0)
63
+ database_cleaner-core (2.0.1)
64
+ date (3.4.1)
65
+ diff-lcs (1.5.1)
66
+ drb (2.2.1)
67
+ edge_rider (2.3.0)
68
+ activerecord (>= 3.2)
69
+ erubi (1.13.0)
70
+ gemika (0.8.3)
71
+ i18n (1.14.5)
72
+ concurrent-ruby (~> 1.0)
73
+ io-console (0.8.0)
74
+ irb (1.14.3)
75
+ rdoc (>= 4.0.0)
76
+ reline (>= 0.4.2)
77
+ logger (1.6.1)
78
+ loofah (2.22.0)
79
+ crass (~> 1.0.2)
80
+ nokogiri (>= 1.12.0)
81
+ memoized (1.1.1)
82
+ mini_portile2 (2.8.8)
83
+ minitest (5.24.1)
84
+ nokogiri (1.16.6)
85
+ mini_portile2 (~> 2.8.2)
86
+ racc (~> 1.4)
87
+ psych (5.2.2)
88
+ date
89
+ stringio
90
+ racc (1.8.0)
91
+ rack (3.1.7)
92
+ rack-session (2.0.0)
93
+ rack (>= 3.0.0)
94
+ rack-test (2.1.0)
95
+ rack (>= 1.3)
96
+ rackup (2.2.1)
97
+ rack (>= 3)
98
+ rails-dom-testing (2.2.0)
99
+ activesupport (>= 5.0.0)
100
+ minitest
101
+ nokogiri (>= 1.6)
102
+ rails-html-sanitizer (1.6.0)
103
+ loofah (~> 2.21)
104
+ nokogiri (~> 1.14)
105
+ railties (8.0.1)
106
+ actionpack (= 8.0.1)
107
+ activesupport (= 8.0.1)
108
+ irb (~> 1.13)
109
+ rackup (>= 1.0.0)
110
+ rake (>= 12.2)
111
+ thor (~> 1.0, >= 1.2.2)
112
+ zeitwerk (~> 2.6)
113
+ rake (13.2.1)
114
+ rdoc (6.10.0)
115
+ psych (>= 4.0.0)
116
+ reline (0.6.0)
117
+ io-console (~> 0.5)
118
+ rspec (3.13.0)
119
+ rspec-core (~> 3.13.0)
120
+ rspec-expectations (~> 3.13.0)
121
+ rspec-mocks (~> 3.13.0)
122
+ rspec-core (3.13.0)
123
+ rspec-support (~> 3.13.0)
124
+ rspec-expectations (3.13.1)
125
+ diff-lcs (>= 1.2.0, < 2.0)
126
+ rspec-support (~> 3.13.0)
127
+ rspec-mocks (3.13.1)
128
+ diff-lcs (>= 1.2.0, < 2.0)
129
+ rspec-support (~> 3.13.0)
130
+ rspec-rails (6.1.3)
131
+ actionpack (>= 6.1)
132
+ activesupport (>= 6.1)
133
+ railties (>= 6.1)
134
+ rspec-core (~> 3.13)
135
+ rspec-expectations (~> 3.13)
136
+ rspec-mocks (~> 3.13)
137
+ rspec-support (~> 3.13)
138
+ rspec-support (3.13.1)
139
+ rspec_candy (0.5.1)
140
+ rspec
141
+ sneaky-save
142
+ securerandom (0.3.2)
143
+ shoulda-matchers (6.2.0)
144
+ activesupport (>= 5.2.0)
145
+ sneaky-save (0.1.3)
146
+ activerecord (>= 3.2.0)
147
+ sqlite3 (2.4.1)
148
+ mini_portile2 (~> 2.8.0)
149
+ stringio (3.1.2)
150
+ thor (1.3.2)
151
+ timeout (0.4.1)
152
+ tzinfo (2.0.6)
153
+ concurrent-ruby (~> 1.0)
154
+ uri (1.0.2)
155
+ useragent (0.16.10)
156
+ zeitwerk (2.7.1)
157
+
158
+ PLATFORMS
159
+ ruby
160
+
161
+ DEPENDENCIES
162
+ assignable_values
163
+ consul!
164
+ database_cleaner
165
+ gemika (>= 0.8.1)
166
+ railties (~> 8.0)
167
+ rspec
168
+ rspec-rails
169
+ rspec_candy
170
+ shoulda-matchers
171
+ sqlite3
172
+
173
+ BUNDLED WITH
174
+ 2.5.15
data/Gemfile.lock CHANGED
@@ -1 +1 @@
1
- Gemfile.7-1.lock
1
+ Gemfile.8-0.lock
data/README.md CHANGED
@@ -1,13 +1,27 @@
1
- # Consul — A next gen authorization solution
2
-
3
- [![Tests](https://github.com/makandra/consul/workflows/Tests/badge.svg)](https://github.com/makandra/consul/actions) [![Code Climate](https://codeclimate.com/github/makandra/consul.png)](https://codeclimate.com/github/makandra/consul)
1
+ <p>
2
+ <a href="https://makandra.de/">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: light)" srcset="media/makandra-with-bottom-margin.light.svg">
5
+ <source media="(prefers-color-scheme: dark)" srcset="media/makandra-with-bottom-margin.dark.svg">
6
+ <img align="right" width="25%" alt="makandra" src="media/makandra-with-bottom-margin.light.svg">
7
+ </picture>
8
+ </a>
9
+
10
+ <picture>
11
+ <source media="(prefers-color-scheme: light)" srcset="media/logo.light.shapes.svg">
12
+ <source media="(prefers-color-scheme: dark)" srcset="media/logo.dark.shapes.svg">
13
+ <img width="155" alt="consul" role="heading" aria-level="1" src="media/logo.light.shapes.svg">
14
+ </picture>
15
+ </p>
16
+
17
+ [![Tests](https://github.com/makandra/consul/workflows/Tests/badge.svg)](https://github.com/makandra/consul/actions)
4
18
 
5
19
  Consul is an authorization solution for Ruby on Rails where you describe _sets of accessible things_ to control what a user can see or edit.
6
20
 
7
21
  We have used Consul in combination with [assignable_values](https://github.com/makandra/assignable_values) to solve a variety of authorization requirements ranging from boring to bizarre.
8
22
  Also see our crash course video: [Solving bizare authorization requirements with Rails](http://bizarre-authorization.talks.makandra.com/).
9
23
 
10
- Consul is tested with Rails 5.2, 6.1, 7.0, 7.1 on Ruby 2.5, 2.7, 3.2, 3.3 (only if supported, for each Ruby/Rails combination). If you need support for Rails 3.2, please use [v0.13.2](https://github.com/makandra/consul/tree/v0.13.2).
24
+ Consul is tested with Rails 6.1, 7.1, 7.2 and 8.0 on Ruby 2.5, 2.7, 3.2, 3.3 (only if supported, for each Ruby/Rails combination). If you need support for Rails 3.2, please use [v0.13.2](https://github.com/makandra/consul/tree/v0.13.2).
11
25
 
12
26
  ## Describing access to your application
13
27
 
@@ -820,11 +834,11 @@ Now run `bundle install` to lock the gem into your project.
820
834
 
821
835
  ## Development
822
836
 
823
- We currently develop using Ruby 2.5.3 (see `.ruby-version`) since that version works for current versions of ActiveRecord that we support. GitHub Actions will test additional Ruby versions (2.3.8, 2.4.5, and 3.0.1).
837
+ We currently develop using Ruby 3.4.1 (see `.ruby-version`) since that version works for current versions of ActiveRecord that we support. GitHub Actions will test additional Ruby versions (2.7.3, 3.2.0).
824
838
 
825
839
  There are tests in `spec`. We only accept PRs with tests. To run tests:
826
840
 
827
- - Install Ruby 2.5.3
841
+ - Install Ruby 3.4.1
828
842
  - run `bundle install`
829
843
  - Put your database credentials into `spec/support/database.yml`. There's a `database.sample.yml` you can use as a template.
830
844
  - There are gem bundles in the project root for each rails version that we support.
data/consul.gemspec CHANGED
@@ -26,8 +26,8 @@ Gem::Specification.new do |s|
26
26
  s.require_paths = ["lib"]
27
27
 
28
28
  s.add_dependency('memoized', '>=1.0.2')
29
- s.add_dependency('activerecord', '>= 3.2')
30
- s.add_dependency('activesupport', '>= 3.2')
31
- s.add_dependency('railties', '>= 3.2')
29
+ s.add_dependency('activerecord', '>= 6.0')
30
+ s.add_dependency('activesupport', '>= 6.0')
31
+ s.add_dependency('railties', '>= 6.0')
32
32
  s.add_dependency('edge_rider', '>= 0.3.0')
33
33
  end
data/lib/consul/util.rb CHANGED
@@ -3,11 +3,7 @@ module Consul
3
3
  extend self
4
4
 
5
5
  def scope_selects_all_records?(scope)
6
- if Rails.version.to_i < 3
7
- scope = scope.scoped({})
8
- else
9
- scope = scope.scoped
10
- end
6
+ scope = scope.scoped
11
7
  scope_sql = scope.to_sql
12
8
  quoted_table_name = Regexp.quote(scope.connection.quote_table_name(scope.table_name))
13
9
  all_sql_pattern = /\ASELECT (#{quoted_table_name}\.)?\* FROM #{quoted_table_name}\z/
@@ -23,26 +19,17 @@ module Consul
23
19
  end
24
20
 
25
21
  def define_scope(klass, name, lambda)
26
- if Rails.version.to_i < 4 # Rails 2/3
27
- scope_definition = Rails.version.to_i < 3 ? :named_scope : :scope
28
- klass.send scope_definition, name, lambda
29
- else
30
- klass.send :scope, name, lambda { |*args|
31
- options = lambda.call(*args)
32
- klass.scoped(options.slice *EdgeRider::Scoped::VALID_FIND_OPTIONS)
33
- }
34
- end
22
+ klass.send :scope, name, lambda { |*args|
23
+ options = lambda.call(*args)
24
+ klass.scoped(options.slice *EdgeRider::Scoped::VALID_FIND_OPTIONS)
25
+ }
35
26
  end
36
27
 
37
28
  # This method does not support dynamic default scopes via lambdas
38
29
  # (as does #define_scope), because it is currently not required.
39
30
  def define_default_scope(klass, conditions)
40
- if Rails.version.to_i < 4 # Rails 2/3
41
- klass.send :default_scope, conditions
42
- else
43
- klass.send :default_scope do
44
- klass.scoped(conditions)
45
- end
31
+ klass.send :default_scope do
32
+ klass.scoped(conditions)
46
33
  end
47
34
  end
48
35
 
@@ -58,33 +45,19 @@ module Consul
58
45
  end
59
46
 
60
47
  def skip_before_action(controller_class, name, options)
61
- if Rails.version.to_i < 4
62
- controller_class.skip_before_filter name, options
63
- elsif Rails.version.to_i < 5
64
- controller_class.skip_before_action name, options
65
- else
66
- # Every `power` in a controller will skip the power check filter. After the 1st time, Rails 5+ will raise
67
- # an error because there is no `unchecked_power` action to skip any more.
68
- # To avoid this, we add the following extra option. Note that it must not be added in Rails 4 to avoid errors.
69
- # See http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-skip_callback
70
- controller_class.skip_before_action name, { :raise => false }.merge!(options)
71
- end
48
+ # Every `power` in a controller will skip the power check filter. After the 1st time, Rails will raise
49
+ # an error because there is no `unchecked_power` action to skip any more.
50
+ # To avoid this, we add the following extra option.
51
+ # See http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-skip_callback
52
+ controller_class.skip_before_action name, { :raise => false }.merge!(options)
72
53
  end
73
54
 
74
55
  def before_action(controller_class, *args, &block)
75
- if Rails.version.to_i < 4
76
- controller_class.before_filter *args, &block
77
- else
78
- controller_class.before_action *args, &block
79
- end
56
+ controller_class.before_action *args, &block
80
57
  end
81
58
 
82
59
  def around_action(controller_class, *args, &block)
83
- if Rails.version.to_i < 4
84
- controller_class.around_filter *args, &block
85
- else
86
- controller_class.around_action *args, &block
87
- end
60
+ controller_class.around_action *args, &block
88
61
  end
89
62
 
90
63
  end
@@ -1,3 +1,3 @@
1
1
  module Consul
2
- VERSION = '1.3.2'
2
+ VERSION = '2.0.0'
3
3
  end
@@ -0,0 +1,125 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:xlink="http://www.w3.org/1999/xlink"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ width="39.306458mm"
14
+ height="14.056225mm"
15
+ viewBox="0 0 39.306457 14.056225"
16
+ version="1.1"
17
+ id="svg838"
18
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
19
+ sodipodi:docname="logo.dark.shapes.svg"
20
+ inkscape:export-filename="/home/henning/Projects/capybara-lockstep/media/capybara-lockstep.dark.png"
21
+ inkscape:export-xdpi="196"
22
+ inkscape:export-ydpi="196">
23
+ <defs
24
+ id="defs832">
25
+ <linearGradient
26
+ inkscape:collect="always"
27
+ id="linearGradient1406">
28
+ <stop
29
+ style="stop-color:#ff0844;stop-opacity:1"
30
+ offset="0"
31
+ id="stop1402" />
32
+ <stop
33
+ style="stop-color:#ffb199;stop-opacity:1"
34
+ offset="1"
35
+ id="stop1404" />
36
+ </linearGradient>
37
+ <linearGradient
38
+ inkscape:collect="always"
39
+ xlink:href="#linearGradient1406"
40
+ id="linearGradient1408"
41
+ x1="22.054907"
42
+ y1="91.071762"
43
+ x2="88.956696"
44
+ y2="91.071762"
45
+ gradientUnits="userSpaceOnUse"
46
+ gradientTransform="matrix(0.58751979,0,0,0.08820435,-12.957695,57.908781)" />
47
+ </defs>
48
+ <sodipodi:namedview
49
+ id="base"
50
+ pagecolor="#ffffff"
51
+ bordercolor="#666666"
52
+ borderopacity="1.0"
53
+ inkscape:pageopacity="0.0"
54
+ inkscape:pageshadow="2"
55
+ inkscape:zoom="4"
56
+ inkscape:cx="17.132757"
57
+ inkscape:cy="-43.059445"
58
+ inkscape:document-units="mm"
59
+ inkscape:current-layer="layer1"
60
+ showgrid="false"
61
+ fit-margin-top="0"
62
+ fit-margin-left="0"
63
+ fit-margin-right="0"
64
+ fit-margin-bottom="0"
65
+ inkscape:window-width="2560"
66
+ inkscape:window-height="1391"
67
+ inkscape:window-x="1920"
68
+ inkscape:window-y="0"
69
+ inkscape:window-maximized="1"
70
+ inkscape:pagecheckerboard="true" />
71
+ <metadata
72
+ id="metadata835">
73
+ <rdf:RDF>
74
+ <cc:Work
75
+ rdf:about="">
76
+ <dc:format>image/svg+xml</dc:format>
77
+ <dc:type
78
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
79
+ <dc:title></dc:title>
80
+ </cc:Work>
81
+ </rdf:RDF>
82
+ </metadata>
83
+ <g
84
+ inkscape:label="Layer 1"
85
+ inkscape:groupmode="layer"
86
+ id="layer1"
87
+ transform="translate(0,-52.518951)">
88
+ <g
89
+ aria-label="CONSUL"
90
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
91
+ id="text1385">
92
+ <path
93
+ d="m 3.8629165,58.191618 q 0.4868334,0 0.8837084,-0.142875 0.4021666,-0.142875 0.5979583,-0.280459 l 0.6773333,1.344084 q -0.2487083,0.211666 -0.8519583,0.428625 -0.5979583,0.216958 -1.4234583,0.216958 -0.7725833,0 -1.4499166,-0.269875 Q 1.6192499,59.218201 1.1006666,58.731368 0.58737498,58.239243 0.29104166,57.583076 0,56.921618 0,56.149034 0,55.376451 0.29104166,54.714993 0.58208331,54.048243 1.095375,53.556118 q 0.5185833,-0.492125 1.1959166,-0.762 0.682625,-0.275167 1.4552083,-0.275167 0.8255,0 1.4234583,0.216958 0.60325,0.216959 0.8519583,0.428625 L 5.3445832,54.508618 Q 5.1487915,54.365743 4.7466249,54.228159 4.3497499,54.085284 3.8629165,54.085284 q -0.5397499,0 -0.9419166,0.169334 -0.4021666,0.164041 -0.6720416,0.455083 -0.269875,0.291042 -0.4021667,0.656167 -0.1322917,0.365125 -0.1322917,0.767291 0,0.407459 0.1322917,0.777875 0.1322917,0.365125 0.4021667,0.656167 0.269875,0.291042 0.6720416,0.460375 0.4021667,0.164042 0.9419166,0.164042 z"
94
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
95
+ id="path822" />
96
+ <path
97
+ d="m 8.4084457,56.133159 q 0,0.597959 0.2434166,1.084792 0.2487084,0.481542 0.682625,0.767292 0.4392083,0.28575 1.0159997,0.28575 0.576792,0 1.010709,-0.28575 0.439208,-0.28575 0.682625,-0.767292 0.248708,-0.486833 0.248708,-1.084792 0,-0.597958 -0.248708,-1.0795 -0.243417,-0.481541 -0.682625,-0.767291 -0.433917,-0.291042 -1.010709,-0.291042 -0.5767914,0 -1.0159997,0.291042 -0.4339166,0.28575 -0.682625,0.767291 -0.2434166,0.481542 -0.2434166,1.0795 z m -1.6457083,0 q 0,-0.762 0.269875,-1.418166 0.269875,-0.661459 0.7567083,-1.153584 0.4868333,-0.492125 1.143,-0.767291 0.6561666,-0.275167 1.4181663,-0.275167 0.772584,0 1.423459,0.275167 0.656166,0.275166 1.137708,0.767291 0.486833,0.492125 0.751417,1.153584 0.269875,0.656166 0.269875,1.418166 0,0.767292 -0.259292,1.42875 -0.259292,0.656167 -0.740833,1.153584 -0.481542,0.492125 -1.137709,0.767291 -0.656166,0.275167 -1.444625,0.275167 -0.804333,0 -1.4657913,-0.275167 Q 8.228529,59.207618 7.752279,58.715493 7.2760291,58.218076 7.0167374,57.561909 q -0.254,-0.661458 -0.254,-1.42875 z"
98
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
99
+ id="path824" />
100
+ <path
101
+ d="m 16.303598,54.095868 0.116417,0.02117 v 5.513917 h -1.582208 v -6.985 h 2.159 l 2.831041,5.503333 -0.116416,0.02117 v -5.5245 h 1.582208 v 6.985 h -2.169583 z"
102
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
103
+ id="path826" />
104
+ <path
105
+ d="m 25.034843,52.518951 q 0.650875,0 1.137709,0.142875 0.486833,0.142875 0.783166,0.301625 0.296334,0.15875 0.359834,0.211667 l -0.762,1.275291 q -0.08467,-0.0635 -0.291042,-0.185208 -0.201083,-0.121708 -0.481542,-0.216958 -0.275166,-0.09525 -0.576791,-0.09525 -0.407459,0 -0.661459,0.148166 -0.248708,0.142875 -0.248708,0.428625 0,0.195792 0.132292,0.354542 0.137583,0.153458 0.41275,0.296333 0.280458,0.137584 0.709083,0.301625 0.391583,0.142875 0.735542,0.338667 0.343958,0.195792 0.60325,0.465667 0.264583,0.264583 0.418041,0.613833 0.153459,0.34925 0.153459,0.79375 0,0.529167 -0.216959,0.92075 -0.216958,0.386292 -0.592666,0.640292 -0.370417,0.254 -0.846667,0.375708 -0.470958,0.127 -0.978958,0.127 -0.719667,0 -1.291167,-0.164042 -0.566208,-0.164041 -0.915458,-0.354541 -0.34925,-0.1905 -0.418042,-0.254 l 0.788458,-1.328209 q 0.0635,0.04762 0.243417,0.153459 0.185208,0.105833 0.449792,0.22225 0.264583,0.111125 0.560916,0.1905 0.301625,0.07937 0.592667,0.07937 0.486833,0 0.73025,-0.185209 0.243417,-0.1905 0.243417,-0.497416 0,-0.227542 -0.153459,-0.407459 -0.153458,-0.179916 -0.460375,-0.338666 -0.306916,-0.164042 -0.767291,-0.343959 -0.460375,-0.185208 -0.862542,-0.449791 -0.396875,-0.264584 -0.645583,-0.661459 -0.248709,-0.396875 -0.248709,-0.98425 0,-0.587375 0.328084,-1.016 0.333375,-0.433916 0.873125,-0.66675 0.545041,-0.232833 1.164166,-0.232833 z"
106
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
107
+ id="path828" />
108
+ <path
109
+ d="m 32.448465,52.645951 h 1.582208 v 4.291542 q 0,0.862541 -0.338667,1.497541 -0.338666,0.629709 -0.968375,0.978959 -0.629708,0.343958 -1.502833,0.343958 -0.878417,0 -1.513417,-0.343958 -0.635,-0.34925 -0.973666,-0.978959 -0.333375,-0.635 -0.333375,-1.497541 v -4.291542 h 1.576916 v 4.206875 q 0,0.47625 0.148167,0.804333 0.153458,0.328084 0.433917,0.497417 0.280458,0.164042 0.661458,0.164042 0.375708,0 0.650875,-0.164042 0.275167,-0.169333 0.423333,-0.497417 0.153459,-0.328083 0.153459,-0.804333 z"
110
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
111
+ id="path830" />
112
+ <path
113
+ d="m 35.189541,52.645951 h 1.582208 v 5.598583 h 2.534708 v 1.386417 h -4.116916 z"
114
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
115
+ id="path832" />
116
+ </g>
117
+ <rect
118
+ style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02276438;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
119
+ id="rect1387"
120
+ width="39.306122"
121
+ height="1.2668874"
122
+ x="-3.5527137e-15"
123
+ y="65.308289" />
124
+ </g>
125
+ </svg>
@@ -0,0 +1,107 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:xlink="http://www.w3.org/1999/xlink"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ width="39.306458mm"
14
+ height="14.056225mm"
15
+ viewBox="0 0 39.306457 14.056225"
16
+ version="1.1"
17
+ id="svg838"
18
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
19
+ sodipodi:docname="logo.dark.text.svg"
20
+ inkscape:export-filename="/home/henning/Projects/capybara-lockstep/media/capybara-lockstep.dark.png"
21
+ inkscape:export-xdpi="196"
22
+ inkscape:export-ydpi="196">
23
+ <defs
24
+ id="defs832">
25
+ <linearGradient
26
+ inkscape:collect="always"
27
+ id="linearGradient1406">
28
+ <stop
29
+ style="stop-color:#ff0844;stop-opacity:1"
30
+ offset="0"
31
+ id="stop1402" />
32
+ <stop
33
+ style="stop-color:#ffb199;stop-opacity:1"
34
+ offset="1"
35
+ id="stop1404" />
36
+ </linearGradient>
37
+ <linearGradient
38
+ inkscape:collect="always"
39
+ xlink:href="#linearGradient1406"
40
+ id="linearGradient1408"
41
+ x1="22.054907"
42
+ y1="91.071762"
43
+ x2="88.956696"
44
+ y2="91.071762"
45
+ gradientUnits="userSpaceOnUse"
46
+ gradientTransform="matrix(0.58751979,0,0,0.08820435,-12.957695,57.908781)" />
47
+ </defs>
48
+ <sodipodi:namedview
49
+ id="base"
50
+ pagecolor="#ffffff"
51
+ bordercolor="#666666"
52
+ borderopacity="1.0"
53
+ inkscape:pageopacity="0.0"
54
+ inkscape:pageshadow="2"
55
+ inkscape:zoom="4"
56
+ inkscape:cx="17.132757"
57
+ inkscape:cy="-43.059445"
58
+ inkscape:document-units="mm"
59
+ inkscape:current-layer="layer1"
60
+ showgrid="false"
61
+ fit-margin-top="0"
62
+ fit-margin-left="0"
63
+ fit-margin-right="0"
64
+ fit-margin-bottom="0"
65
+ inkscape:window-width="2560"
66
+ inkscape:window-height="1391"
67
+ inkscape:window-x="1920"
68
+ inkscape:window-y="0"
69
+ inkscape:window-maximized="1"
70
+ inkscape:pagecheckerboard="true" />
71
+ <metadata
72
+ id="metadata835">
73
+ <rdf:RDF>
74
+ <cc:Work
75
+ rdf:about="">
76
+ <dc:format>image/svg+xml</dc:format>
77
+ <dc:type
78
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
79
+ <dc:title></dc:title>
80
+ </cc:Work>
81
+ </rdf:RDF>
82
+ </metadata>
83
+ <g
84
+ inkscape:label="Layer 1"
85
+ inkscape:groupmode="layer"
86
+ id="layer1"
87
+ transform="translate(0,-52.518951)">
88
+ <text
89
+ xml:space="preserve"
90
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
91
+ x="-0.27516666"
92
+ y="59.630951"
93
+ id="text1385"><tspan
94
+ sodipodi:role="line"
95
+ id="tspan1383"
96
+ x="-0.27516666"
97
+ y="59.630951"
98
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">CONSUL</tspan></text>
99
+ <rect
100
+ style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02276438;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
101
+ id="rect1387"
102
+ width="39.306122"
103
+ height="1.2668874"
104
+ x="-3.5527137e-15"
105
+ y="65.308289" />
106
+ </g>
107
+ </svg>
@@ -0,0 +1,89 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:xlink="http://www.w3.org/1999/xlink"
9
+ id="svg838"
10
+ version="1.1"
11
+ viewBox="0 0 39.306457 14.056225"
12
+ height="14.056225mm"
13
+ width="39.306458mm">
14
+ <defs
15
+ id="defs832">
16
+ <linearGradient
17
+ id="linearGradient1406">
18
+ <stop
19
+ id="stop1402"
20
+ offset="0"
21
+ style="stop-color:#ff0844;stop-opacity:1" />
22
+ <stop
23
+ id="stop1404"
24
+ offset="1"
25
+ style="stop-color:#ffb199;stop-opacity:1" />
26
+ </linearGradient>
27
+ <linearGradient
28
+ gradientTransform="matrix(0.58755687,0,0,0.08820435,-12.958513,57.908781)"
29
+ gradientUnits="userSpaceOnUse"
30
+ y2="91.071762"
31
+ x2="88.956696"
32
+ y1="91.071762"
33
+ x1="22.054907"
34
+ id="linearGradient1408"
35
+ xlink:href="#linearGradient1406" />
36
+ </defs>
37
+ <metadata
38
+ id="metadata835">
39
+ <rdf:RDF>
40
+ <cc:Work
41
+ rdf:about="">
42
+ <dc:format>image/svg+xml</dc:format>
43
+ <dc:type
44
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
45
+ <dc:title></dc:title>
46
+ </cc:Work>
47
+ </rdf:RDF>
48
+ </metadata>
49
+ <g
50
+ transform="translate(0,-52.518951)"
51
+ id="layer1">
52
+ <g
53
+ id="text1385"
54
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#141210;fill-opacity:1;stroke:none;stroke-width:0.26458332"
55
+ aria-label="CONSUL">
56
+ <path
57
+ id="path822"
58
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
59
+ d="m 3.8629165,58.191618 q 0.4868334,0 0.8837084,-0.142875 0.4021666,-0.142875 0.5979583,-0.280459 l 0.6773333,1.344084 q -0.2487083,0.211666 -0.8519583,0.428625 -0.5979583,0.216958 -1.4234583,0.216958 -0.7725833,0 -1.4499166,-0.269875 Q 1.6192499,59.218201 1.1006666,58.731368 0.58737498,58.239243 0.29104166,57.583076 0,56.921618 0,56.149034 0,55.376451 0.29104166,54.714993 0.58208331,54.048243 1.095375,53.556118 q 0.5185833,-0.492125 1.1959166,-0.762 0.682625,-0.275167 1.4552083,-0.275167 0.8255,0 1.4234583,0.216958 0.60325,0.216959 0.8519583,0.428625 L 5.3445832,54.508618 Q 5.1487915,54.365743 4.7466249,54.228159 4.3497499,54.085284 3.8629165,54.085284 q -0.5397499,0 -0.9419166,0.169334 -0.4021666,0.164041 -0.6720416,0.455083 -0.269875,0.291042 -0.4021667,0.656167 -0.1322917,0.365125 -0.1322917,0.767291 0,0.407459 0.1322917,0.777875 0.1322917,0.365125 0.4021667,0.656167 0.269875,0.291042 0.6720416,0.460375 0.4021667,0.164042 0.9419166,0.164042 z" />
60
+ <path
61
+ id="path824"
62
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
63
+ d="m 8.4084457,56.133159 q 0,0.597959 0.2434166,1.084792 0.2487084,0.481542 0.682625,0.767292 0.4392083,0.28575 1.0159997,0.28575 0.576792,0 1.010709,-0.28575 0.439208,-0.28575 0.682625,-0.767292 0.248708,-0.486833 0.248708,-1.084792 0,-0.597958 -0.248708,-1.0795 -0.243417,-0.481541 -0.682625,-0.767291 -0.433917,-0.291042 -1.010709,-0.291042 -0.5767914,0 -1.0159997,0.291042 -0.4339166,0.28575 -0.682625,0.767291 -0.2434166,0.481542 -0.2434166,1.0795 z m -1.6457083,0 q 0,-0.762 0.269875,-1.418166 0.269875,-0.661459 0.7567083,-1.153584 0.4868333,-0.492125 1.143,-0.767291 0.6561666,-0.275167 1.4181663,-0.275167 0.772584,0 1.423459,0.275167 0.656166,0.275166 1.137708,0.767291 0.486833,0.492125 0.751417,1.153584 0.269875,0.656166 0.269875,1.418166 0,0.767292 -0.259292,1.42875 -0.259292,0.656167 -0.740833,1.153584 -0.481542,0.492125 -1.137709,0.767291 -0.656166,0.275167 -1.444625,0.275167 -0.804333,0 -1.4657913,-0.275167 Q 8.228529,59.207618 7.752279,58.715493 7.2760291,58.218076 7.0167374,57.561909 q -0.254,-0.661458 -0.254,-1.42875 z" />
64
+ <path
65
+ id="path826"
66
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
67
+ d="m 16.303598,54.095868 0.116417,0.02117 v 5.513917 h -1.582208 v -6.985 h 2.159 l 2.831041,5.503333 -0.116416,0.02117 v -5.5245 h 1.582208 v 6.985 h -2.169583 z" />
68
+ <path
69
+ id="path828"
70
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
71
+ d="m 25.034843,52.518951 q 0.650875,0 1.137709,0.142875 0.486833,0.142875 0.783166,0.301625 0.296334,0.15875 0.359834,0.211667 l -0.762,1.275291 q -0.08467,-0.0635 -0.291042,-0.185208 -0.201083,-0.121708 -0.481542,-0.216958 -0.275166,-0.09525 -0.576791,-0.09525 -0.407459,0 -0.661459,0.148166 -0.248708,0.142875 -0.248708,0.428625 0,0.195792 0.132292,0.354542 0.137583,0.153458 0.41275,0.296333 0.280458,0.137584 0.709083,0.301625 0.391583,0.142875 0.735542,0.338667 0.343958,0.195792 0.60325,0.465667 0.264583,0.264583 0.418041,0.613833 0.153459,0.34925 0.153459,0.79375 0,0.529167 -0.216959,0.92075 -0.216958,0.386292 -0.592666,0.640292 -0.370417,0.254 -0.846667,0.375708 -0.470958,0.127 -0.978958,0.127 -0.719667,0 -1.291167,-0.164042 -0.566208,-0.164041 -0.915458,-0.354541 -0.34925,-0.1905 -0.418042,-0.254 l 0.788458,-1.328209 q 0.0635,0.04762 0.243417,0.153459 0.185208,0.105833 0.449792,0.22225 0.264583,0.111125 0.560916,0.1905 0.301625,0.07937 0.592667,0.07937 0.486833,0 0.73025,-0.185209 0.243417,-0.1905 0.243417,-0.497416 0,-0.227542 -0.153459,-0.407459 -0.153458,-0.179916 -0.460375,-0.338666 -0.306916,-0.164042 -0.767291,-0.343959 -0.460375,-0.185208 -0.862542,-0.449791 -0.396875,-0.264584 -0.645583,-0.661459 -0.248709,-0.396875 -0.248709,-0.98425 0,-0.587375 0.328084,-1.016 0.333375,-0.433916 0.873125,-0.66675 0.545041,-0.232833 1.164166,-0.232833 z" />
72
+ <path
73
+ id="path830"
74
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
75
+ d="m 32.448465,52.645951 h 1.582208 v 4.291542 q 0,0.862541 -0.338667,1.497541 -0.338666,0.629709 -0.968375,0.978959 -0.629708,0.343958 -1.502833,0.343958 -0.878417,0 -1.513417,-0.343958 -0.635,-0.34925 -0.973666,-0.978959 -0.333375,-0.635 -0.333375,-1.497541 v -4.291542 h 1.576916 v 4.206875 q 0,0.47625 0.148167,0.804333 0.153458,0.328084 0.433917,0.497417 0.280458,0.164042 0.661458,0.164042 0.375708,0 0.650875,-0.164042 0.275167,-0.169333 0.423333,-0.497417 0.153459,-0.328083 0.153459,-0.804333 z" />
76
+ <path
77
+ id="path832"
78
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
79
+ d="m 35.189541,52.645951 h 1.582208 v 5.598583 h 2.534708 v 1.386417 h -4.116916 z" />
80
+ </g>
81
+ <rect
82
+ y="65.308289"
83
+ x="-3.5527137e-15"
84
+ height="1.2668874"
85
+ width="39.308605"
86
+ id="rect1387"
87
+ style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02276511;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
88
+ </g>
89
+ </svg>