cuprum-rails 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +98 -0
  3. data/CODE_OF_CONDUCT.md +132 -0
  4. data/DEVELOPMENT.md +28 -0
  5. data/LICENSE +22 -0
  6. data/README.md +1045 -0
  7. data/lib/cuprum/rails/action.rb +45 -0
  8. data/lib/cuprum/rails/actions/create.rb +49 -0
  9. data/lib/cuprum/rails/actions/destroy.rb +22 -0
  10. data/lib/cuprum/rails/actions/edit.rb +22 -0
  11. data/lib/cuprum/rails/actions/index.rb +55 -0
  12. data/lib/cuprum/rails/actions/new.rb +19 -0
  13. data/lib/cuprum/rails/actions/resource_action.rb +75 -0
  14. data/lib/cuprum/rails/actions/show.rb +22 -0
  15. data/lib/cuprum/rails/actions/update.rb +59 -0
  16. data/lib/cuprum/rails/actions.rb +16 -0
  17. data/lib/cuprum/rails/collection.rb +115 -0
  18. data/lib/cuprum/rails/command.rb +137 -0
  19. data/lib/cuprum/rails/commands/assign_one.rb +66 -0
  20. data/lib/cuprum/rails/commands/build_one.rb +55 -0
  21. data/lib/cuprum/rails/commands/destroy_one.rb +43 -0
  22. data/lib/cuprum/rails/commands/find_many.rb +60 -0
  23. data/lib/cuprum/rails/commands/find_matching.rb +121 -0
  24. data/lib/cuprum/rails/commands/find_one.rb +50 -0
  25. data/lib/cuprum/rails/commands/insert_one.rb +41 -0
  26. data/lib/cuprum/rails/commands/update_one.rb +49 -0
  27. data/lib/cuprum/rails/commands/validate_one.rb +68 -0
  28. data/lib/cuprum/rails/commands.rb +18 -0
  29. data/lib/cuprum/rails/controller.rb +50 -0
  30. data/lib/cuprum/rails/controller_action.rb +121 -0
  31. data/lib/cuprum/rails/controllers/class_methods/actions.rb +57 -0
  32. data/lib/cuprum/rails/controllers/class_methods/configuration.rb +64 -0
  33. data/lib/cuprum/rails/controllers/class_methods/validations.rb +30 -0
  34. data/lib/cuprum/rails/controllers/class_methods.rb +15 -0
  35. data/lib/cuprum/rails/controllers/configuration.rb +53 -0
  36. data/lib/cuprum/rails/controllers.rb +10 -0
  37. data/lib/cuprum/rails/errors/missing_parameters.rb +33 -0
  38. data/lib/cuprum/rails/errors/missing_primary_key.rb +46 -0
  39. data/lib/cuprum/rails/errors/undefined_permitted_attributes.rb +34 -0
  40. data/lib/cuprum/rails/errors.rb +8 -0
  41. data/lib/cuprum/rails/map_errors.rb +44 -0
  42. data/lib/cuprum/rails/query.rb +77 -0
  43. data/lib/cuprum/rails/query_builder.rb +78 -0
  44. data/lib/cuprum/rails/repository.rb +44 -0
  45. data/lib/cuprum/rails/request.rb +105 -0
  46. data/lib/cuprum/rails/resource.rb +145 -0
  47. data/lib/cuprum/rails/responders/actions.rb +73 -0
  48. data/lib/cuprum/rails/responders/html/plural_resource.rb +62 -0
  49. data/lib/cuprum/rails/responders/html/singular_resource.rb +59 -0
  50. data/lib/cuprum/rails/responders/html.rb +11 -0
  51. data/lib/cuprum/rails/responders/html_responder.rb +129 -0
  52. data/lib/cuprum/rails/responders/json/resource.rb +60 -0
  53. data/lib/cuprum/rails/responders/json.rb +10 -0
  54. data/lib/cuprum/rails/responders/json_responder.rb +122 -0
  55. data/lib/cuprum/rails/responders/matching.rb +145 -0
  56. data/lib/cuprum/rails/responders/serialization.rb +36 -0
  57. data/lib/cuprum/rails/responders.rb +15 -0
  58. data/lib/cuprum/rails/responses/html/redirect_response.rb +29 -0
  59. data/lib/cuprum/rails/responses/html/render_response.rb +52 -0
  60. data/lib/cuprum/rails/responses/html.rb +11 -0
  61. data/lib/cuprum/rails/responses/json_response.rb +29 -0
  62. data/lib/cuprum/rails/responses.rb +11 -0
  63. data/lib/cuprum/rails/routes.rb +166 -0
  64. data/lib/cuprum/rails/routing/plural_routes.rb +26 -0
  65. data/lib/cuprum/rails/routing/singular_routes.rb +24 -0
  66. data/lib/cuprum/rails/routing.rb +11 -0
  67. data/lib/cuprum/rails/rspec/command_contract.rb +460 -0
  68. data/lib/cuprum/rails/rspec/define_route_contract.rb +84 -0
  69. data/lib/cuprum/rails/rspec.rb +8 -0
  70. data/lib/cuprum/rails/serializers/json/active_record_serializer.rb +24 -0
  71. data/lib/cuprum/rails/serializers/json/array_serializer.rb +40 -0
  72. data/lib/cuprum/rails/serializers/json/attributes_serializer.rb +217 -0
  73. data/lib/cuprum/rails/serializers/json/error_serializer.rb +24 -0
  74. data/lib/cuprum/rails/serializers/json/hash_serializer.rb +44 -0
  75. data/lib/cuprum/rails/serializers/json/identity_serializer.rb +21 -0
  76. data/lib/cuprum/rails/serializers/json/serializer.rb +66 -0
  77. data/lib/cuprum/rails/serializers/json.rb +40 -0
  78. data/lib/cuprum/rails/serializers.rb +10 -0
  79. data/lib/cuprum/rails/version.rb +59 -0
  80. data/lib/cuprum/rails.rb +31 -0
  81. metadata +286 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: adc7e510f5f1c0b00c820bf755253cbe3d651a65aa946ee7468b8f7efd401b00
4
+ data.tar.gz: ed528cc1be9febe6f4f746ba2b1dc37a249b201c58c11cb4d2c1e7ea3086b9a1
5
+ SHA512:
6
+ metadata.gz: 2e39890f3051d9ab9e3c0c1a649cc1ac8fd7e9e0bb46c6be83981714abfa84c5612bbdec1ecd6dd7d4f07bc23b1cf61127fc0e01656e1474db9d824693b7498b
7
+ data.tar.gz: 5f02b6c267edfe148b5be0559e96cec1064bad5a873ab853ab2450fef92bca84800daa5212038d2c7cdc157ecf868ab0345a9cd1f70cf26d453e104d788870aa
data/CHANGELOG.md ADDED
@@ -0,0 +1,98 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ Initial version.
6
+
7
+ ### Collections
8
+
9
+ Implemented `Cuprum::Rails::Collection`.
10
+
11
+ Implemented `Cuprum::Rails::Repository`.
12
+
13
+ #### Commands
14
+
15
+ Implemented `Cuprum::Rails::Command`.
16
+
17
+ Implemented Rails collection commands:
18
+
19
+ - `Cuprum::Rails::Commands::AssignOne`.
20
+ - `Cuprum::Rails::Commands::BuildOne`.
21
+ - `Cuprum::Rails::Commands::DestroyOne`.
22
+ - `Cuprum::Rails::Commands::FindMany`.
23
+ - `Cuprum::Rails::Commands::FindMatching`.
24
+ - `Cuprum::Rails::Commands::FindOne`.
25
+ - `Cuprum::Rails::Commands::InsertOne`.
26
+ - `Cuprum::Rails::Commands::UpdateOne`.
27
+ - `Cuprum::Rails::Commands::ValidateOne`.
28
+
29
+ ### Controllers
30
+
31
+ Implemented `Cuprum::Rails::Controller`.
32
+
33
+ Implemented `Cuprum::Rails::ControllerAction`.
34
+
35
+ Implemented `Cuprum::Rails::Controllers::Configuration`.
36
+
37
+ #### Actions
38
+
39
+ Implemented `Cuprum::Rails::Action`.
40
+
41
+ Implemented `Cuprum::Rails::Actions::ResourceAction`.
42
+
43
+ Implemented resourceful actions:
44
+
45
+ - `Cuprum::Rails::Actions::Create`.
46
+ - `Cuprum::Rails::Actions::Destroy`.
47
+ - `Cuprum::Rails::Actions::Edit`.
48
+ - `Cuprum::Rails::Actions::Index`.
49
+ - `Cuprum::Rails::Actions::New`.
50
+ - `Cuprum::Rails::Actions::Show`.
51
+ - `Cuprum::Rails::Actions::Update`.
52
+
53
+ #### Requests
54
+
55
+ Implemented `Cuprum::Rails::Request`.
56
+
57
+ #### Resources
58
+
59
+ Implemented `Cuprum::Rails::Resource`.
60
+
61
+ #### Responders
62
+
63
+ Implemented responders:
64
+
65
+ - `Cuprum::Rails::Responders::HtmlResponder`.
66
+ - `Cuprum::Rails::Responders::Html::PluralResource`.
67
+ - `Cuprum::Rails::Responders::Html::SingularResource`.
68
+ - `Cuprum::Rails::Responders::JsonResponder`.
69
+ - `Cuprum::Rails::Responders::Json::Resource`.
70
+
71
+ #### Responses
72
+
73
+ Implemented responses:
74
+
75
+ - `Cuprum::Rails::Responses::Html::RedirectResponse`
76
+ - `Cuprum::Rails::Responses::Html::RenderResponse`
77
+ - `Cuprum::Rails::Responses::JsonResponse`
78
+
79
+ #### Routes
80
+
81
+ Implemented `Cuprum::Rails::Routes`.
82
+
83
+ Implemented resourceful routes:
84
+
85
+ - `Cuprum::Rails::Routing::PluralRoutes`.
86
+ - `Cuprum::Rails::Routing::SingularRoutes`.
87
+
88
+ #### Serializers
89
+
90
+ Implemented JSON serializers:
91
+
92
+ - `Cuprum::Rails::Serializers::Json::ActiveRecordSerializer`.
93
+ - `Cuprum::Rails::Serializers::Json::ArraySerializer`.
94
+ - `Cuprum::Rails::Serializers::Json::AttributesSerializer`.
95
+ - `Cuprum::Rails::Serializers::Json::ErrorSerializer`.
96
+ - `Cuprum::Rails::Serializers::Json::HashSerializer`.
97
+ - `Cuprum::Rails::Serializers::Json::IdentitySerializer`.
98
+ - `Cuprum::Rails::Serializers::Json::Serializer`.
@@ -0,0 +1,132 @@
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, religion, or sexual identity
10
+ and orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ * Demonstrating empathy and kindness toward other people
21
+ * Being respectful of differing opinions, viewpoints, and experiences
22
+ * Giving and gracefully accepting constructive feedback
23
+ * Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ * Focusing on what is best not just for us as individuals, but for the
26
+ overall community
27
+
28
+ Examples of unacceptable behavior include:
29
+
30
+ * The use of sexualized language or imagery, and sexual attention or
31
+ advances of any kind
32
+ * Trolling, insulting or derogatory comments, and personal or political attacks
33
+ * Public or private harassment
34
+ * Publishing others' private information, such as a physical or email
35
+ address, without their explicit permission
36
+ * Other conduct which could reasonably be considered inappropriate in a
37
+ professional setting
38
+
39
+ ## Enforcement Responsibilities
40
+
41
+ Community leaders are responsible for clarifying and enforcing our standards of
42
+ acceptable behavior and will take appropriate and fair corrective action in
43
+ response to any behavior that they deem inappropriate, threatening, offensive,
44
+ or harmful.
45
+
46
+ Community leaders have the right and responsibility to remove, edit, or reject
47
+ comments, commits, code, wiki edits, issues, and other contributions that are
48
+ not aligned to this Code of Conduct, and will communicate reasons for moderation
49
+ decisions when appropriate.
50
+
51
+ ## Scope
52
+
53
+ This Code of Conduct applies within all community spaces, and also applies when
54
+ an individual is officially representing the community in public spaces.
55
+ Examples of representing our community include using an official e-mail address,
56
+ posting via an official social media account, or acting as an appointed
57
+ representative at an online or offline event.
58
+
59
+ ## Enforcement
60
+
61
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
62
+ reported to the community leaders responsible for enforcement at
63
+ merlin@sleepingkingstudios.com.
64
+ All complaints will be reviewed and investigated promptly and fairly.
65
+
66
+ All community leaders are obligated to respect the privacy and security of the
67
+ reporter of any incident.
68
+
69
+ ## Enforcement Guidelines
70
+
71
+ Community leaders will follow these Community Impact Guidelines in determining
72
+ the consequences for any action they deem in violation of this Code of Conduct:
73
+
74
+ ### 1. Correction
75
+
76
+ **Community Impact**: Use of inappropriate language or other behavior deemed
77
+ unprofessional or unwelcome in the community.
78
+
79
+ **Consequence**: A private, written warning from community leaders, providing
80
+ clarity around the nature of the violation and an explanation of why the
81
+ behavior was inappropriate. A public apology may be requested.
82
+
83
+ ### 2. Warning
84
+
85
+ **Community Impact**: A violation through a single incident or series
86
+ of actions.
87
+
88
+ **Consequence**: A warning with consequences for continued behavior. No
89
+ interaction with the people involved, including unsolicited interaction with
90
+ those enforcing the Code of Conduct, for a specified period of time. This
91
+ includes avoiding interactions in community spaces as well as external channels
92
+ like social media. Violating these terms may lead to a temporary or
93
+ permanent ban.
94
+
95
+ ### 3. Temporary Ban
96
+
97
+ **Community Impact**: A serious violation of community standards, including
98
+ sustained inappropriate behavior.
99
+
100
+ **Consequence**: A temporary ban from any sort of interaction or public
101
+ communication with the community for a specified period of time. No public or
102
+ private interaction with the people involved, including unsolicited interaction
103
+ with those enforcing the Code of Conduct, is allowed during this period.
104
+ Violating these terms may lead to a permanent ban.
105
+
106
+ ### 4. Permanent Ban
107
+
108
+ **Community Impact**: Demonstrating a pattern of violation of community
109
+ standards, including sustained inappropriate behavior, harassment of an
110
+ individual, or aggression toward or disparagement of classes of individuals.
111
+
112
+ **Consequence**: A permanent ban from any sort of public interaction within
113
+ the community.
114
+
115
+ ## Attribution
116
+
117
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118
+ version 2.0, available at
119
+ [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
120
+
121
+ Community Impact Guidelines were inspired by
122
+ [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
123
+
124
+ For answers to common questions about this code of conduct, see the FAQ at
125
+ [https://www.contributor-covenant.org/faq][FAQ]. Translations are available
126
+ at [https://www.contributor-covenant.org/translations][translations].
127
+
128
+ [homepage]: https://www.contributor-covenant.org
129
+ [v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
130
+ [Mozilla CoC]: https://github.com/mozilla/diversity
131
+ [FAQ]: https://www.contributor-covenant.org/faq
132
+ [translations]: https://www.contributor-covenant.org/translations
data/DEVELOPMENT.md ADDED
@@ -0,0 +1,28 @@
1
+ # Development
2
+
3
+ ## Actions
4
+
5
+ - Remove ActionController::Parameters reference in Cuprum::Rails::Action.
6
+
7
+ ## Controllers
8
+
9
+ - Different cases for controllers.
10
+ - Singular resource (e.g. /user => UsersController)
11
+ - Plural resource (e.g. /books => BooksController)
12
+ - Non-resourceful controllers (e.g. / => HomeController)
13
+ - Nested resources (e.g. /user/profile => UserProfilesController, /books/:id/chapters => ChaptersController)
14
+ - Stateful resources (e.g. /rockets/:id => RocketsController, assemble, fuel, launch, recover)
15
+
16
+ ## Requests
17
+
18
+ - Convert parameters to a Hash with String keys.
19
+
20
+ ## Resources
21
+
22
+ - Passing additional collections, e.g. "load a resource and associations"
23
+ - Define Resource#repository?
24
+
25
+ ## Responders
26
+
27
+ - Condense Html::PluralResource and Html::SingularResource ?
28
+ - Check Responder#member_action? in relevant match blocks
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2021 Rob Smith
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.