brut 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/CODE_OF_CONDUCT.txt +99 -0
  4. data/Dockerfile.dx +32 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +133 -0
  7. data/LICENSE.txt +370 -0
  8. data/README.md +21 -0
  9. data/Rakefile +1 -0
  10. data/bin/bin_kit.rb +39 -0
  11. data/bin/rake +27 -0
  12. data/bin/setup +145 -0
  13. data/brut.gemspec +60 -0
  14. data/docker-compose.dx.yml +16 -0
  15. data/dx/build +26 -0
  16. data/dx/docker-compose.env +22 -0
  17. data/dx/dx.sh.lib +24 -0
  18. data/dx/exec +58 -0
  19. data/dx/prune +19 -0
  20. data/dx/setupkit.sh.lib +144 -0
  21. data/dx/show-help-in-app-container-then-wait.sh +38 -0
  22. data/dx/start +30 -0
  23. data/dx/stop +23 -0
  24. data/lib/brut/back_end/action.rb +3 -0
  25. data/lib/brut/back_end/result.rb +46 -0
  26. data/lib/brut/back_end/seed_data.rb +24 -0
  27. data/lib/brut/back_end/validator.rb +3 -0
  28. data/lib/brut/back_end/validators/form_validator.rb +37 -0
  29. data/lib/brut/cli/app.rb +130 -0
  30. data/lib/brut/cli/app_runner.rb +219 -0
  31. data/lib/brut/cli/apps/build_assets.rb +123 -0
  32. data/lib/brut/cli/apps/db.rb +279 -0
  33. data/lib/brut/cli/apps/scaffold.rb +256 -0
  34. data/lib/brut/cli/apps/test.rb +200 -0
  35. data/lib/brut/cli/command.rb +130 -0
  36. data/lib/brut/cli/error.rb +12 -0
  37. data/lib/brut/cli/execution_results.rb +81 -0
  38. data/lib/brut/cli/executor.rb +37 -0
  39. data/lib/brut/cli/options.rb +46 -0
  40. data/lib/brut/cli/output.rb +30 -0
  41. data/lib/brut/cli.rb +24 -0
  42. data/lib/brut/factory_bot.rb +20 -0
  43. data/lib/brut/framework/app.rb +55 -0
  44. data/lib/brut/framework/config.rb +415 -0
  45. data/lib/brut/framework/container.rb +190 -0
  46. data/lib/brut/framework/errors/abstract_method.rb +9 -0
  47. data/lib/brut/framework/errors/bug.rb +14 -0
  48. data/lib/brut/framework/errors/not_found.rb +10 -0
  49. data/lib/brut/framework/errors.rb +14 -0
  50. data/lib/brut/framework/fussy_type_enforcement.rb +50 -0
  51. data/lib/brut/framework/mcp.rb +215 -0
  52. data/lib/brut/framework/project_environment.rb +18 -0
  53. data/lib/brut/framework.rb +13 -0
  54. data/lib/brut/front_end/asset_metadata.rb +76 -0
  55. data/lib/brut/front_end/component.rb +213 -0
  56. data/lib/brut/front_end/components/form_tag.rb +71 -0
  57. data/lib/brut/front_end/components/i18n_translations.rb +36 -0
  58. data/lib/brut/front_end/components/input.rb +13 -0
  59. data/lib/brut/front_end/components/inputs/csrf_token.rb +8 -0
  60. data/lib/brut/front_end/components/inputs/select.rb +100 -0
  61. data/lib/brut/front_end/components/inputs/text_field.rb +63 -0
  62. data/lib/brut/front_end/components/inputs/textarea.rb +51 -0
  63. data/lib/brut/front_end/components/locale_detection.rb +25 -0
  64. data/lib/brut/front_end/components/page_identifier.rb +13 -0
  65. data/lib/brut/front_end/components/timestamp.rb +33 -0
  66. data/lib/brut/front_end/download.rb +23 -0
  67. data/lib/brut/front_end/flash.rb +57 -0
  68. data/lib/brut/front_end/form.rb +171 -0
  69. data/lib/brut/front_end/forms/constraint_violation.rb +39 -0
  70. data/lib/brut/front_end/forms/input.rb +119 -0
  71. data/lib/brut/front_end/forms/input_definition.rb +100 -0
  72. data/lib/brut/front_end/forms/validity_state.rb +36 -0
  73. data/lib/brut/front_end/handler.rb +48 -0
  74. data/lib/brut/front_end/handlers/csp_reporting_handler.rb +11 -0
  75. data/lib/brut/front_end/handlers/locale_detection_handler.rb +22 -0
  76. data/lib/brut/front_end/handling_results.rb +14 -0
  77. data/lib/brut/front_end/http_method.rb +33 -0
  78. data/lib/brut/front_end/http_status.rb +16 -0
  79. data/lib/brut/front_end/middleware.rb +7 -0
  80. data/lib/brut/front_end/middlewares/reload_app.rb +31 -0
  81. data/lib/brut/front_end/page.rb +47 -0
  82. data/lib/brut/front_end/request_context.rb +82 -0
  83. data/lib/brut/front_end/route_hook.rb +15 -0
  84. data/lib/brut/front_end/route_hooks/age_flash.rb +8 -0
  85. data/lib/brut/front_end/route_hooks/csp_no_inline_scripts.rb +17 -0
  86. data/lib/brut/front_end/route_hooks/csp_no_inline_styles_or_scripts.rb +46 -0
  87. data/lib/brut/front_end/route_hooks/locale_detection.rb +24 -0
  88. data/lib/brut/front_end/route_hooks/setup_request_context.rb +11 -0
  89. data/lib/brut/front_end/routing.rb +236 -0
  90. data/lib/brut/front_end/session.rb +56 -0
  91. data/lib/brut/front_end/template.rb +32 -0
  92. data/lib/brut/front_end/templates/block_filter.rb +60 -0
  93. data/lib/brut/front_end/templates/erb_engine.rb +26 -0
  94. data/lib/brut/front_end/templates/erb_parser.rb +84 -0
  95. data/lib/brut/front_end/templates/escapable_filter.rb +18 -0
  96. data/lib/brut/front_end/templates/html_safe_string.rb +40 -0
  97. data/lib/brut/i18n/base_methods.rb +168 -0
  98. data/lib/brut/i18n/for_cli.rb +4 -0
  99. data/lib/brut/i18n/for_html.rb +4 -0
  100. data/lib/brut/i18n/http_accept_language.rb +68 -0
  101. data/lib/brut/i18n.rb +6 -0
  102. data/lib/brut/instrumentation/basic.rb +66 -0
  103. data/lib/brut/instrumentation/event.rb +19 -0
  104. data/lib/brut/instrumentation/http_event.rb +5 -0
  105. data/lib/brut/instrumentation/subscriber.rb +41 -0
  106. data/lib/brut/instrumentation.rb +11 -0
  107. data/lib/brut/junk_drawer.rb +88 -0
  108. data/lib/brut/sinatra_helpers.rb +183 -0
  109. data/lib/brut/spec_support/component_support.rb +49 -0
  110. data/lib/brut/spec_support/flash_support.rb +7 -0
  111. data/lib/brut/spec_support/general_support.rb +18 -0
  112. data/lib/brut/spec_support/handler_support.rb +7 -0
  113. data/lib/brut/spec_support/matcher.rb +9 -0
  114. data/lib/brut/spec_support/matchers/be_a_bug.rb +14 -0
  115. data/lib/brut/spec_support/matchers/be_page_for.rb +14 -0
  116. data/lib/brut/spec_support/matchers/be_routing_for.rb +11 -0
  117. data/lib/brut/spec_support/matchers/have_constraint_violation.rb +56 -0
  118. data/lib/brut/spec_support/matchers/have_html_attribute.rb +69 -0
  119. data/lib/brut/spec_support/matchers/have_rendered.rb +20 -0
  120. data/lib/brut/spec_support/matchers/have_returned_http_status.rb +27 -0
  121. data/lib/brut/spec_support/session_support.rb +3 -0
  122. data/lib/brut/spec_support.rb +12 -0
  123. data/lib/brut/version.rb +3 -0
  124. data/lib/brut.rb +38 -0
  125. data/lib/sequel/extensions/brut_instrumentation.rb +37 -0
  126. data/lib/sequel/extensions/brut_migrations.rb +98 -0
  127. data/lib/sequel/plugins/created_at.rb +14 -0
  128. data/lib/sequel/plugins/external_id.rb +45 -0
  129. data/lib/sequel/plugins/find_bang.rb +13 -0
  130. data/lib/sequel/plugins.rb +3 -0
  131. metadata +484 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c756b30db51ff455ac587492ee974356c0dbe4084483fc562854ce682cca8014
4
+ data.tar.gz: 7ce5250e1bfac5f9cd61f3329399a5896f83ce4af9457882190a9e089cf35fcd
5
+ SHA512:
6
+ metadata.gz: 35f7f592155864b2bc178c2c8267967c95a141da0105c07e2969c3a646435fb23101a3070e686aebd5fc797e1938155e7e8d4f6af029bb93eb208350f4774014
7
+ data.tar.gz: db78b9b4ac1be3561a599cae098a2ae4c005a027d0f9c768e8d766add2c736ee87614505bc131750cb1b3af8d99b916054c427c48556ba8d2f5422c002125de8
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ # this is where the gem is built - should not be checked in
2
+ /pkg
3
+
4
+ # This contains ssh and RubyGems configuration needed to perform actions
5
+ # from inside the dev environment. As such, these are real secrets and
6
+ # should never be checked in
7
+ /dx/credentials
@@ -0,0 +1,99 @@
1
+ Contributor Covenant Code of Conduct
2
+
3
+ Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, caste, color, religion, or sexual
10
+ identity and orientation.
11
+ We pledge to act and interact in ways that contribute to an open, welcoming,
12
+ diverse, inclusive, and healthy community.
13
+ Our Standards
14
+ Examples of behavior that contributes to a positive environment for our
15
+ community include:
16
+
17
+ * Demonstrating empathy and kindness toward other people
18
+ * Being respectful of differing opinions, viewpoints, and experiences
19
+ * Giving and gracefully accepting constructive feedback
20
+ * Accepting responsibility and apologizing to those affected by our mistakes,
21
+ and learning from the experience
22
+ * Focusing on what is best not just for us as individuals, but for the overall
23
+ community
24
+
25
+ Examples of unacceptable behavior include:
26
+
27
+ * The use of sexualized language or imagery, and sexual attention or advances of
28
+ any kind
29
+ * Trolling, insulting or derogatory comments, and personal or political attacks
30
+ * Public or private harassment
31
+ * Publishing others’ private information, such as a physical or email address,
32
+ without their explicit permission
33
+ * Other conduct which could reasonably be considered inappropriate in a
34
+ professional setting
35
+
36
+ Enforcement Responsibilities
37
+ Community leaders are responsible for clarifying and enforcing our standards of
38
+ acceptable behavior and will take appropriate and fair corrective action in
39
+ response to any behavior that they deem inappropriate, threatening, offensive,
40
+ or harmful.
41
+ Community leaders have the right and responsibility to remove, edit, or reject
42
+ comments, commits, code, wiki edits, issues, and other contributions that are
43
+ not aligned to this Code of Conduct, and will communicate reasons for moderation
44
+ decisions when appropriate.
45
+ Scope
46
+ This Code of Conduct applies within all community spaces, and also applies when
47
+ an individual is officially representing the community in public spaces.
48
+ Examples of representing our community include using an official email address,
49
+ posting via an official social media account, or acting as an appointed
50
+ representative at an online or offline event.
51
+ Enforcement
52
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
53
+ reported to the community leaders responsible for enforcement at
54
+ [INSERT CONTACT METHOD].
55
+ All complaints will be reviewed and investigated promptly and fairly.
56
+ All community leaders are obligated to respect the privacy and security of the
57
+ reporter of any incident.
58
+ Enforcement Guidelines
59
+ Community leaders will follow these Community Impact Guidelines in determining
60
+ the consequences for any action they deem in violation of this Code of Conduct:
61
+ 1. Correction
62
+ Community Impact: Use of inappropriate language or other behavior deemed
63
+ unprofessional or unwelcome in the community.
64
+ Consequence: A private, written warning from community leaders, providing
65
+ clarity around the nature of the violation and an explanation of why the
66
+ behavior was inappropriate. A public apology may be requested.
67
+ 2. Warning
68
+ Community Impact: A violation through a single incident or series of
69
+ actions.
70
+ Consequence: A warning with consequences for continued behavior. No
71
+ interaction with the people involved, including unsolicited interaction with
72
+ those enforcing the Code of Conduct, for a specified period of time. This
73
+ includes avoiding interactions in community spaces as well as external channels
74
+ like social media. Violating these terms may lead to a temporary or permanent
75
+ ban.
76
+ 3. Temporary Ban
77
+ Community Impact: A serious violation of community standards, including
78
+ sustained inappropriate behavior.
79
+ Consequence: A temporary ban from any sort of interaction or public
80
+ communication with the community for a specified period of time. No public or
81
+ private interaction with the people involved, including unsolicited interaction
82
+ with those enforcing the Code of Conduct, is allowed during this period.
83
+ Violating these terms may lead to a permanent ban.
84
+ 4. Permanent Ban
85
+ Community Impact: Demonstrating a pattern of violation of community
86
+ standards, including sustained inappropriate behavior, harassment of an
87
+ individual, or aggression toward or disparagement of classes of individuals.
88
+ Consequence: A permanent ban from any sort of public interaction within the
89
+ community.
90
+ Attribution
91
+ This Code of Conduct is adapted from the Contributor Covenant,
92
+ version 2.1, available at
93
+ https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
94
+ Community Impact Guidelines were inspired by
95
+ Mozilla’s code of conduct enforcement ladder.
96
+ For answers to common questions about this code of conduct, see the FAQ at
97
+ https://www.contributor-covenant.org/faq. Translations are available at
98
+ https://www.contributor-covenant.org/translations.
99
+
data/Dockerfile.dx ADDED
@@ -0,0 +1,32 @@
1
+ FROM ruby:3.3
2
+
3
+ SHELL [ "/bin/bash", "-o", "pipefail", "-c" ]
4
+
5
+ ENV DEBIAN_FRONTEND noninteractive
6
+
7
+ # These packages are needed to set up other repos to install other
8
+ # packages and/or are useful in installing other software
9
+ RUN apt-get -y clean && \
10
+ apt-get -y update && \
11
+ apt-get install --quiet --yes ca-certificates curl gnupg rsync
12
+
13
+ # Install NODE per https://github.com/nodesource/distributions?tab=readme-ov-file#using-debian-as-root-nodejs-20
14
+ RUN curl -fsSL https://deb.nodesource.com/setup_20.x -o /tmp/nodesource_setup.sh && \
15
+ bash /tmp/nodesource_setup.sh && \
16
+ apt-get install -y nodejs
17
+
18
+ # Install Postgres client per https://www.postgresql.org/download/linux/debian/ - note that the
19
+ # automated configuration doesn't work, I think because it assumes non-root.
20
+ RUN apt-get -y install lsb-release && \
21
+ sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \
22
+ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
23
+ apt-get update && \
24
+ apt-get -y install postgresql-client-16
25
+
26
+ RUN echo "gem: --no-document" >> ~/.gemrc && \
27
+ gem update --system && \
28
+ gem install bundler
29
+
30
+ # This entrypoint produces a nice help message and waits around for you to do
31
+ # something with the container.
32
+ COPY dx/show-help-in-app-container-then-wait.sh /root
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in brut.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,133 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ brut (0.0.1)
5
+ dotenv
6
+ factory_bot
7
+ faker
8
+ i18n
9
+ nokogiri
10
+ ostruct
11
+ prism
12
+ rack-protection
13
+ rackup
14
+ rexml
15
+ semantic_logger
16
+ sequel
17
+ sinatra
18
+ temple
19
+ tilt
20
+ tzinfo
21
+ tzinfo-data
22
+ zeitwerk
23
+
24
+ GEM
25
+ remote: https://rubygems.org/
26
+ specs:
27
+ activesupport (8.0.0)
28
+ base64
29
+ benchmark (>= 0.3)
30
+ bigdecimal
31
+ concurrent-ruby (~> 1.0, >= 1.3.1)
32
+ connection_pool (>= 2.2.5)
33
+ drb
34
+ i18n (>= 1.6, < 2)
35
+ logger (>= 1.4.2)
36
+ minitest (>= 5.1)
37
+ securerandom (>= 0.3)
38
+ tzinfo (~> 2.0, >= 2.0.5)
39
+ uri (>= 0.13.1)
40
+ base64 (0.2.0)
41
+ benchmark (0.4.0)
42
+ bigdecimal (3.1.8)
43
+ concurrent-ruby (1.3.4)
44
+ connection_pool (2.4.1)
45
+ diff-lcs (1.5.1)
46
+ dotenv (3.1.4)
47
+ drb (2.2.1)
48
+ factory_bot (6.5.0)
49
+ activesupport (>= 5.0.0)
50
+ faker (3.5.1)
51
+ i18n (>= 1.8.11, < 2)
52
+ i18n (1.14.6)
53
+ concurrent-ruby (~> 1.0)
54
+ logger (1.6.1)
55
+ minitest (5.25.1)
56
+ mustermann (3.0.3)
57
+ ruby2_keywords (~> 0.0.1)
58
+ nokogiri (1.16.7-aarch64-linux)
59
+ racc (~> 1.4)
60
+ nokogiri (1.16.7-arm-linux)
61
+ racc (~> 1.4)
62
+ nokogiri (1.16.7-arm64-darwin)
63
+ racc (~> 1.4)
64
+ nokogiri (1.16.7-x86-linux)
65
+ racc (~> 1.4)
66
+ nokogiri (1.16.7-x86_64-darwin)
67
+ racc (~> 1.4)
68
+ nokogiri (1.16.7-x86_64-linux)
69
+ racc (~> 1.4)
70
+ ostruct (0.6.1)
71
+ prism (1.2.0)
72
+ racc (1.8.1)
73
+ rack (3.1.8)
74
+ rack-protection (4.0.0)
75
+ base64 (>= 0.1.0)
76
+ rack (>= 3.0.0, < 4)
77
+ rack-session (2.0.0)
78
+ rack (>= 3.0.0)
79
+ rackup (2.2.1)
80
+ rack (>= 3)
81
+ rake (13.2.1)
82
+ rexml (3.3.9)
83
+ rspec (3.13.0)
84
+ rspec-core (~> 3.13.0)
85
+ rspec-expectations (~> 3.13.0)
86
+ rspec-mocks (~> 3.13.0)
87
+ rspec-core (3.13.2)
88
+ rspec-support (~> 3.13.0)
89
+ rspec-expectations (3.13.3)
90
+ diff-lcs (>= 1.2.0, < 2.0)
91
+ rspec-support (~> 3.13.0)
92
+ rspec-mocks (3.13.2)
93
+ diff-lcs (>= 1.2.0, < 2.0)
94
+ rspec-support (~> 3.13.0)
95
+ rspec-support (3.13.1)
96
+ ruby2_keywords (0.0.5)
97
+ securerandom (0.3.2)
98
+ semantic_logger (4.16.1)
99
+ concurrent-ruby (~> 1.0)
100
+ sequel (5.86.0)
101
+ bigdecimal
102
+ sinatra (4.0.0)
103
+ mustermann (~> 3.0)
104
+ rack (>= 3.0.0, < 4)
105
+ rack-protection (= 4.0.0)
106
+ rack-session (>= 2.0.0, < 3)
107
+ tilt (~> 2.0)
108
+ temple (0.10.3)
109
+ tilt (2.4.0)
110
+ tzinfo (2.0.6)
111
+ concurrent-ruby (~> 1.0)
112
+ tzinfo-data (1.2024.2)
113
+ tzinfo (>= 1.0.0)
114
+ uri (1.0.2)
115
+ zeitwerk (2.7.1)
116
+
117
+ PLATFORMS
118
+ aarch64-linux
119
+ arm-linux
120
+ arm64-darwin
121
+ x86-linux
122
+ x86_64-darwin
123
+ x86_64-linux
124
+
125
+ DEPENDENCIES
126
+ activesupport
127
+ brut!
128
+ bundler
129
+ rake
130
+ rspec (~> 3.0)
131
+
132
+ BUNDLED WITH
133
+ 2.5.23
data/LICENSE.txt ADDED
@@ -0,0 +1,370 @@
1
+ HIPPOCRATIC LICENSE
2
+
3
+ Version 3.0, October 2021
4
+
5
+ https://firstdonoharm.dev/version/3/0/cl-eco-media-my-tal-xuar.txt
6
+
7
+ TERMS AND CONDITIONS
8
+
9
+ TERMS AND CONDITIONS FOR USE, COPY, MODIFICATION, PREPARATION OF DERIVATIVE
10
+ WORK, REPRODUCTION, AND DISTRIBUTION:
11
+
12
+ 1. DEFINITIONS:
13
+
14
+ This section defines certain terms used throughout this license agreement.
15
+
16
+ 1.1. “License” means the terms and conditions, as stated herein, for use, copy,
17
+ modification, preparation of derivative work, reproduction, and distribution of
18
+ Software (as defined below).
19
+
20
+ 1.2. “Licensor” means the copyright and/or patent owner or entity authorized by
21
+ the copyright and/or patent owner that is granting the License.
22
+
23
+ 1.3. “Licensee” means the individual or entity exercising permissions granted by
24
+ this License, including the use, copy, modification, preparation of derivative
25
+ work, reproduction, and distribution of Software (as defined below).
26
+
27
+ 1.4. “Software” means any copyrighted work, including but not limited to
28
+ software code, authored by Licensor and made available under this License.
29
+
30
+ 1.5. “Supply Chain” means the sequence of processes involved in the production
31
+ and/or distribution of a commodity, good, or service offered by the Licensee.
32
+
33
+ 1.6. “Supply Chain Impacted Party” or “Supply Chain Impacted Parties” means any
34
+ person(s) directly impacted by any of Licensee’s Supply Chain, including the
35
+ practices of all persons or entities within the Supply Chain prior to a good or
36
+ service reaching the Licensee.
37
+
38
+ 1.7. “Duty of Care” is defined by its use in tort law, delict law, and/or
39
+ similar bodies of law closely related to tort and/or delict law, including
40
+ without limitation, a requirement to act with the watchfulness, attention,
41
+ caution, and prudence that a reasonable person in the same or similar
42
+ circumstances would use towards any Supply Chain Impacted Party.
43
+
44
+ 1.8. “Worker” is defined to include any and all permanent, temporary, and agency
45
+ workers, as well as piece-rate, salaried, hourly paid, legal young (minors),
46
+ part-time, night, and migrant workers.
47
+
48
+ 2. INTELLECTUAL PROPERTY GRANTS:
49
+
50
+ This section identifies intellectual property rights granted to a Licensee.
51
+
52
+ 2.1. Grant of Copyright License: Subject to the terms and conditions of this
53
+ License, Licensor hereby grants to Licensee a worldwide, non-exclusive,
54
+ no-charge, royalty-free copyright license to use, copy, modify, prepare
55
+ derivative work, reproduce, or distribute the Software, Licensor authored
56
+ modified software, or other work derived from the Software.
57
+
58
+ 2.2. Grant of Patent License: Subject to the terms and conditions of this
59
+ License, Licensor hereby grants Licensee a worldwide, non-exclusive, no-charge,
60
+ royalty-free patent license to make, have made, use, offer to sell, sell,
61
+ import, and otherwise transfer Software.
62
+
63
+ 3. ETHICAL STANDARDS:
64
+
65
+ This section lists conditions the Licensee must comply with in order to have
66
+ rights under this License.
67
+
68
+ The rights granted to the Licensee by this License are expressly made subject to
69
+ the Licensee’s ongoing compliance with the following conditions:
70
+
71
+ * 3.1. The Licensee SHALL NOT, whether directly or indirectly, through agents
72
+ or assigns:
73
+
74
+ * 3.1.1. Infringe upon any person’s right to life or security of person,
75
+ engage in extrajudicial killings, or commit murder, without lawful cause
76
+ (See Article 3, United Nations Universal Declaration of Human Rights;
77
+ Article 6, International Covenant on Civil and Political Rights)
78
+
79
+ * 3.1.2. Hold any person in slavery, servitude, or forced labor (See Article
80
+ 4, United Nations Universal Declaration of Human Rights; Article 8,
81
+ International Covenant on Civil and Political Rights);
82
+
83
+ * 3.1.3. Contribute to the institution of slavery, slave trading, forced
84
+ labor, or unlawful child labor (See Article 4, United Nations Universal
85
+ Declaration of Human Rights; Article 8, International Covenant on Civil and
86
+ Political Rights);
87
+
88
+ * 3.1.4. Torture or subject any person to cruel, inhumane, or degrading
89
+ treatment or punishment (See Article 5, United Nations Universal
90
+ Declaration of Human Rights; Article 7, International Covenant on Civil and
91
+ Political Rights);
92
+
93
+ * 3.1.5. Discriminate on the basis of sex, gender, sexual orientation, race,
94
+ ethnicity, nationality, religion, caste, age, medical disability or
95
+ impairment, and/or any other like circumstances (See Article 7, United
96
+ Nations Universal Declaration of Human Rights; Article 2, International
97
+ Covenant on Economic, Social and Cultural Rights; Article 26, International
98
+ Covenant on Civil and Political Rights);
99
+
100
+ * 3.1.6. Prevent any person from exercising his/her/their right to seek an
101
+ effective remedy by a competent court or national tribunal (including
102
+ domestic judicial systems, international courts, arbitration bodies, and
103
+ other adjudicating bodies) for actions violating the fundamental rights
104
+ granted to him/her/them by applicable constitutions, applicable laws, or by
105
+ this License (See Article 8, United Nations Universal Declaration of Human
106
+ Rights; Articles 9 and 14, International Covenant on Civil and Political
107
+ Rights);
108
+
109
+ * 3.1.7. Subject any person to arbitrary arrest, detention, or exile (See
110
+ Article 9, United Nations Universal Declaration of Human Rights; Article 9,
111
+ International Covenant on Civil and Political Rights);
112
+
113
+ * 3.1.8. Subject any person to arbitrary interference with a person’s
114
+ privacy, family, home, or correspondence without the express written
115
+ consent of the person (See Article 12, United Nations Universal Declaration
116
+ of Human Rights; Article 17, International Covenant on Civil and Political
117
+ Rights);
118
+
119
+ * 3.1.9. Arbitrarily deprive any person of his/her/their property (See
120
+ Article 17, United Nations Universal Declaration of Human Rights);
121
+
122
+ * 3.1.10. Forcibly remove indigenous peoples from their lands or territories
123
+ or take any action with the aim or effect of dispossessing indigenous
124
+ peoples from their lands, territories, or resources, including without
125
+ limitation the intellectual property or traditional knowledge of indigenous
126
+ peoples, without the free, prior, and informed consent of indigenous
127
+ peoples concerned (See Articles 8 and 10, United Nations Declaration on the
128
+ Rights of Indigenous Peoples);
129
+
130
+ * 3.1.11. Ecocide: Commit ecocide:
131
+
132
+ * 3.1.11.1. For the purpose of this section, “ecocide” means unlawful or
133
+ wanton acts committed with knowledge that there is a substantial
134
+ likelihood of severe and either widespread or long-term damage to the
135
+ environment being caused by those acts;
136
+
137
+ * 3.1.11.2. For the purpose of further defining ecocide and the terms
138
+ contained in the previous paragraph:
139
+
140
+ * 3.1.11.2.1. “Wanton” means with reckless disregard for damage which
141
+ would be clearly excessive in relation to the social and economic
142
+ benefits anticipated;
143
+
144
+ * 3.1.11.2.2. “Severe” means damage which involves very serious adverse
145
+ changes, disruption, or harm to any element of the environment,
146
+ including grave impacts on human life or natural, cultural, or
147
+ economic resources;
148
+
149
+ * 3.1.11.2.3. “Widespread” means damage which extends beyond a limited
150
+ geographic area, crosses state boundaries, or is suffered by an entire
151
+ ecosystem or species or a large number of human beings;
152
+
153
+ * 3.1.11.2.4. “Long-term” means damage which is irreversible or which
154
+ cannot be redressed through natural recovery within a reasonable
155
+ period of time; and
156
+
157
+ * 3.1.11.2.5. “Environment” means the earth, its biosphere, cryosphere,
158
+ lithosphere, hydrosphere, and atmosphere, as well as outer space
159
+
160
+ (See Section II, Independent Expert Panel for the Legal Definition of
161
+ Ecocide, Stop Ecocide Foundation and the Promise Institute for Human
162
+ Rights at UCLA School of Law, June 2021);
163
+
164
+ * 3.1.12. Taliban: Be an individual or entity that:
165
+
166
+ * 3.1.12.1. engages in any commercial transactions with the Taliban; or
167
+
168
+ * 3.1.12.2. is a representative, agent, affiliate, successor, attorney, or
169
+ assign of the Taliban;
170
+
171
+ * 3.1.13. Myanmar: Be an individual or entity that:
172
+
173
+ * 3.1.13.1. engages in any commercial transactions with the
174
+ Myanmar/Burmese military junta; or
175
+
176
+ * 3.1.13.2. is a representative, agent, affiliate, successor, attorney, or
177
+ assign of the Myanmar/Burmese government;
178
+
179
+ * 3.1.14. Xinjiang Uygur Autonomous Region: Be an individual or entity, or a
180
+ representative, agent, affiliate, successor, attorney, or assign of any
181
+ individual or entity, that does business in, purchases goods from, or
182
+ otherwise benefits from goods produced in the Xinjiang Uygur Autonomous
183
+ Region of China;
184
+
185
+ * 3.1.15. Media: Be an individual or entity, or a representative, agent,
186
+ affiliate, successor, attorney, or assign of an individual or entity, that
187
+ broadcasts messages promoting killing, torture, or other forms of extreme
188
+ violence;
189
+
190
+ * 3.1.16. Interfere with Workers' free exercise of the right to organize and
191
+ associate (See Article 20, United Nations Universal Declaration of Human
192
+ Rights; C087 - Freedom of Association and Protection of the Right to
193
+ Organise Convention, 1948 (No. 87), International Labour Organization;
194
+ Article 8, International Covenant on Economic, Social and Cultural Rights);
195
+ and
196
+
197
+ * 3.1.17. Harm the environment in a manner inconsistent with local, state,
198
+ national, or international law.
199
+
200
+ * 3.2. The Licensee SHALL:
201
+
202
+ * 3.2.1. Provide equal pay for equal work where the performance of such work
203
+ requires equal skill, effort, and responsibility, and which are performed
204
+ under similar working conditions, except where such payment is made
205
+ pursuant to:
206
+
207
+ * 3.2.1.1. A seniority system;
208
+
209
+ * 3.2.1.2. A merit system;
210
+
211
+ * 3.2.1.3. A system which measures earnings by quantity or quality of
212
+ production; or
213
+
214
+ * 3.2.1.4. A differential based on any other factor other than sex, gender,
215
+ sexual orientation, race, ethnicity, nationality, religion, caste, age,
216
+ medical disability or impairment, and/or any other like circumstances
217
+ (See 29 U.S.C.A. § 206(d)(1); Article 23, United Nations Universal
218
+ Declaration of Human Rights; Article 7, International Covenant on
219
+ Economic, Social and Cultural Rights; Article 26, International Covenant
220
+ on Civil and Political Rights); and
221
+
222
+ * 3.2.2. Allow for reasonable limitation of working hours and periodic
223
+ holidays with pay (See Article 24, United Nations Universal Declaration of
224
+ Human Rights; Article 7, International Covenant on Economic, Social and
225
+ Cultural Rights).
226
+
227
+ 4. SUPPLY CHAIN IMPACTED PARTIES:
228
+
229
+ This section identifies additional individuals or entities that a Licensee could
230
+ harm as a result of violating the Ethical Standards section, the condition that
231
+ the Licensee must voluntarily accept a Duty of Care for those individuals or
232
+ entities, and the right to a private right of action that those individuals or
233
+ entities possess as a result of violations of the Ethical Standards section.
234
+
235
+ 4.1. In addition to the above Ethical Standards, Licensee voluntarily accepts a
236
+ Duty of Care for Supply Chain Impacted Parties of this License, including
237
+ individuals and communities impacted by violations of the Ethical Standards. The
238
+ Duty of Care is breached when a provision within the Ethical Standards section
239
+ is violated by a Licensee, one of its successors or assigns, or by an individual
240
+ or entity that exists within the Supply Chain prior to a good or service
241
+ reaching the Licensee.
242
+
243
+ 4.2. Breaches of the Duty of Care, as stated within this section, shall create a
244
+ private right of action, allowing any Supply Chain Impacted Party harmed by the
245
+ Licensee to take legal action against the Licensee in accordance with applicable
246
+ negligence laws, whether they be in tort law, delict law, and/or similar bodies
247
+ of law closely related to tort and/or delict law, regardless if Licensee is
248
+ directly responsible for the harms suffered by a Supply Chain Impacted Party.
249
+ Nothing in this section shall be interpreted to include acts committed by
250
+ individuals outside of the scope of his/her/their employment.
251
+
252
+ 5. NOTICE: This section explains when a Licensee must notify others of the
253
+ License.
254
+
255
+ 5.1. Distribution of Notice: Licensee must ensure that everyone who receives a
256
+ copy of or uses any part of Software from Licensee, with or without changes,
257
+ also receives the License and the copyright notice included with Software (and
258
+ if included by the Licensor, patent, trademark, and attribution notice).
259
+ Licensee must ensure that License is prominently displayed so that any
260
+ individual or entity seeking to download, copy, use, or otherwise receive any
261
+ part of Software from Licensee is notified of this License and its terms and
262
+ conditions. Licensee must cause any modified versions of the Software to carry
263
+ prominent notices stating that Licensee changed the Software.
264
+
265
+ 5.2. Modified Software: Licensee is free to create modifications of the Software
266
+ and distribute only the modified portion created by Licensee, however, any
267
+ derivative work stemming from the Software or its code must be distributed
268
+ pursuant to this License, including this Notice provision.
269
+
270
+ 5.3. Recipients as Licensees: Any individual or entity that uses, copies,
271
+ modifies, reproduces, distributes, or prepares derivative work based upon the
272
+ Software, all or part of the Software’s code, or a derivative work developed by
273
+ using the Software, including a portion of its code, is a Licensee as defined
274
+ above and is subject to the terms and conditions of this License.
275
+
276
+ 6. REPRESENTATIONS AND WARRANTIES:
277
+
278
+ 6.1. Disclaimer of Warranty: TO THE FULL EXTENT ALLOWED BY LAW, THIS SOFTWARE
279
+ COMES “AS IS,” WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED, AND LICENSOR SHALL NOT
280
+ BE LIABLE TO ANY PERSON OR ENTITY FOR ANY DAMAGES OR OTHER LIABILITY ARISING
281
+ FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THIS LICENSE, UNDER ANY
282
+ LEGAL CLAIM.
283
+
284
+ 6.2. Limitation of Liability: LICENSEE SHALL HOLD LICENSOR HARMLESS AGAINST ANY
285
+ AND ALL CLAIMS, DEBTS, DUES, LIABILITIES, LIENS, CAUSES OF ACTION, DEMANDS,
286
+ OBLIGATIONS, DISPUTES, DAMAGES, LOSSES, EXPENSES, ATTORNEYS' FEES, COSTS,
287
+ LIABILITIES, AND ALL OTHER CLAIMS OF EVERY KIND AND NATURE WHATSOEVER, WHETHER
288
+ KNOWN OR UNKNOWN, ANTICIPATED OR UNANTICIPATED, FORESEEN OR UNFORESEEN, ACCRUED
289
+ OR UNACCRUED, DISCLOSED OR UNDISCLOSED, ARISING OUT OF OR RELATING TO LICENSEE’S
290
+ USE OF THE SOFTWARE. NOTHING IN THIS SECTION SHOULD BE INTERPRETED TO REQUIRE
291
+ LICENSEE TO INDEMNIFY LICENSOR, NOR REQUIRE LICENSOR TO INDEMNIFY LICENSEE.
292
+
293
+ 7. TERMINATION
294
+
295
+ 7.1. Violations of Ethical Standards or Breaching Duty of Care: If Licensee
296
+ violates the Ethical Standards section or Licensee, or any other person or
297
+ entity within the Supply Chain prior to a good or service reaching the Licensee,
298
+ breaches its Duty of Care to Supply Chain Impacted Parties, Licensee must remedy
299
+ the violation or harm caused by Licensee within 30 days of being notified of the
300
+ violation or harm. If Licensee fails to remedy the violation or harm within 30
301
+ days, all rights in the Software granted to Licensee by License will be null and
302
+ void as between Licensor and Licensee.
303
+
304
+ 7.2. Failure of Notice: If any person or entity notifies Licensee in writing
305
+ that Licensee has not complied with the Notice section of this License, Licensee
306
+ can keep this License by taking all practical steps to comply within 30 days
307
+ after the notice of noncompliance. If Licensee does not do so, Licensee’s
308
+ License (and all rights licensed hereunder) will end immediately.
309
+
310
+ 7.3. Judicial Findings: In the event Licensee is found by a civil, criminal,
311
+ administrative, or other court of competent jurisdiction, or some other
312
+ adjudicating body with legal authority, to have committed actions which are in
313
+ violation of the Ethical Standards or Supply Chain Impacted Party sections of
314
+ this License, all rights granted to Licensee by this License will terminate
315
+ immediately.
316
+
317
+ 7.4. Patent Litigation: If Licensee institutes patent litigation against any
318
+ entity (including a cross-claim or counterclaim in a suit) alleging that the
319
+ Software, all or part of the Software’s code, or a derivative work developed
320
+ using the Software, including a portion of its code, constitutes direct or
321
+ contributory patent infringement, then any patent license, along with all other
322
+ rights, granted to Licensee under this License will terminate as of the date
323
+ such litigation is filed.
324
+
325
+ 7.5. Additional Remedies: Termination of the License by failing to remedy harms
326
+ in no way prevents Licensor or Supply Chain Impacted Party from seeking
327
+ appropriate remedies at law or in equity.
328
+
329
+ 8. MISCELLANEOUS:
330
+
331
+ 8.1. Conditions: Sections 3, 4.1, 5.1, 5.2, 7.1, 7.2, 7.3, and 7.4 are
332
+ conditions of the rights granted to Licensee in the License.
333
+
334
+ 8.2. Equitable Relief: Licensor and any Supply Chain Impacted Party shall be
335
+ entitled to equitable relief, including injunctive relief or specific
336
+ performance of the terms hereof, in addition to any other remedy to which they
337
+ are entitled at law or in equity.
338
+
339
+ 8.3. Copyleft: Modified software, source code, or other derivative work must be
340
+ licensed, in its entirety, under the exact same conditions as this License.
341
+
342
+ 8.4. Severability: If any term or provision of this License is determined to be
343
+ invalid, illegal, or unenforceable by a court of competent jurisdiction, any
344
+ such determination of invalidity, illegality, or unenforceability shall not
345
+ affect any other term or provision of this License or invalidate or render
346
+ unenforceable such term or provision in any other jurisdiction. If the
347
+ determination of invalidity, illegality, or unenforceability by a court of
348
+ competent jurisdiction pertains to the terms or provisions contained in the
349
+ Ethical Standards section of this License, all rights in the Software granted to
350
+ Licensee shall be deemed null and void as between Licensor and Licensee.
351
+
352
+ 8.5. Section Titles: Section titles are solely written for organizational
353
+ purposes and should not be used to interpret the language within each section.
354
+
355
+ 8.6. Citations: Citations are solely written to provide context for the source
356
+ of the provisions in the Ethical Standards.
357
+
358
+ 8.7. Section Summaries: Some sections have a brief italicized description which
359
+ is provided for the sole purpose of briefly describing the section and should
360
+ not be used to interpret the terms of the License.
361
+
362
+ 8.8. Entire License: This is the entire License between the Licensor and
363
+ Licensee with respect to the claims released herein and that the consideration
364
+ stated herein is the only consideration or compensation to be paid or exchanged
365
+ between them for this License. This License cannot be modified or amended except
366
+ in a writing signed by Licensor and Licensee.
367
+
368
+ 8.9. Successors and Assigns: This License shall be binding upon and inure to the
369
+ benefit of the Licensor’s and Licensee’s respective heirs, successors, and
370
+ assigns.
data/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # Brut - The Raw, Simple, Powerful, Standards-Based Web Framework
2
+
3
+ Brut is a way to make web apps with Ruby, captializing on the knowledge you have—HTTP, HTML, CSS, JavaScript, SQL—without requiring
4
+ *too* much extra stuff to learn.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem "brut"
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install brut
21
+
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"