cuprum-rails 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +145 -0
  3. data/DEVELOPMENT.md +20 -0
  4. data/README.md +356 -63
  5. data/lib/cuprum/rails/action.rb +32 -16
  6. data/lib/cuprum/rails/actions/create.rb +62 -15
  7. data/lib/cuprum/rails/actions/destroy.rb +23 -7
  8. data/lib/cuprum/rails/actions/edit.rb +23 -7
  9. data/lib/cuprum/rails/actions/index.rb +30 -10
  10. data/lib/cuprum/rails/actions/middleware/associations/cache.rb +112 -0
  11. data/lib/cuprum/rails/actions/middleware/associations/find.rb +23 -0
  12. data/lib/cuprum/rails/actions/middleware/associations/parent.rb +70 -0
  13. data/lib/cuprum/rails/actions/middleware/associations/query.rb +140 -0
  14. data/lib/cuprum/rails/actions/middleware/associations.rb +12 -0
  15. data/lib/cuprum/rails/actions/middleware/log_request.rb +126 -0
  16. data/lib/cuprum/rails/actions/middleware/log_result.rb +51 -0
  17. data/lib/cuprum/rails/actions/middleware/resources/find.rb +44 -0
  18. data/lib/cuprum/rails/actions/middleware/resources/query.rb +91 -0
  19. data/lib/cuprum/rails/actions/middleware/resources.rb +11 -0
  20. data/lib/cuprum/rails/actions/middleware.rb +13 -0
  21. data/lib/cuprum/rails/actions/new.rb +16 -4
  22. data/lib/cuprum/rails/actions/parameter_validation.rb +60 -0
  23. data/lib/cuprum/rails/actions/resource_action.rb +119 -42
  24. data/lib/cuprum/rails/actions/show.rb +23 -7
  25. data/lib/cuprum/rails/actions/update.rb +70 -22
  26. data/lib/cuprum/rails/actions.rb +11 -7
  27. data/lib/cuprum/rails/collection.rb +27 -47
  28. data/lib/cuprum/rails/command.rb +3 -1
  29. data/lib/cuprum/rails/commands/destroy_one.rb +10 -6
  30. data/lib/cuprum/rails/commands/find_many.rb +8 -1
  31. data/lib/cuprum/rails/commands/find_matching.rb +1 -1
  32. data/lib/cuprum/rails/commands/find_one.rb +8 -0
  33. data/lib/cuprum/rails/commands/insert_one.rb +17 -6
  34. data/lib/cuprum/rails/commands/update_one.rb +16 -5
  35. data/lib/cuprum/rails/constraints/parameters_contract.rb +14 -0
  36. data/lib/cuprum/rails/constraints.rb +10 -0
  37. data/lib/cuprum/rails/controller.rb +12 -2
  38. data/lib/cuprum/rails/controllers/action.rb +100 -0
  39. data/lib/cuprum/rails/controllers/class_methods/actions.rb +33 -7
  40. data/lib/cuprum/rails/controllers/class_methods/configuration.rb +36 -0
  41. data/lib/cuprum/rails/controllers/class_methods/middleware.rb +88 -0
  42. data/lib/cuprum/rails/controllers/class_methods/validations.rb +2 -2
  43. data/lib/cuprum/rails/controllers/configuration.rb +41 -1
  44. data/lib/cuprum/rails/controllers/middleware.rb +59 -0
  45. data/lib/cuprum/rails/controllers.rb +2 -0
  46. data/lib/cuprum/rails/errors/invalid_parameters.rb +55 -0
  47. data/lib/cuprum/rails/errors/invalid_statement.rb +11 -0
  48. data/lib/cuprum/rails/errors/missing_parameter.rb +42 -0
  49. data/lib/cuprum/rails/errors/resource_error.rb +46 -0
  50. data/lib/cuprum/rails/errors.rb +6 -1
  51. data/lib/cuprum/rails/map_errors.rb +29 -1
  52. data/lib/cuprum/rails/query.rb +1 -1
  53. data/lib/cuprum/rails/repository.rb +12 -25
  54. data/lib/cuprum/rails/request.rb +149 -60
  55. data/lib/cuprum/rails/resource.rb +119 -85
  56. data/lib/cuprum/rails/responders/base_responder.rb +78 -0
  57. data/lib/cuprum/rails/responders/html/plural_resource.rb +9 -39
  58. data/lib/cuprum/rails/responders/html/rendering.rb +81 -0
  59. data/lib/cuprum/rails/responders/html/resource.rb +107 -0
  60. data/lib/cuprum/rails/responders/html/singular_resource.rb +9 -38
  61. data/lib/cuprum/rails/responders/html.rb +2 -0
  62. data/lib/cuprum/rails/responders/html_responder.rb +8 -52
  63. data/lib/cuprum/rails/responders/json/resource.rb +3 -3
  64. data/lib/cuprum/rails/responders/json_responder.rb +31 -16
  65. data/lib/cuprum/rails/responders/matching.rb +29 -27
  66. data/lib/cuprum/rails/responders/serialization.rb +11 -9
  67. data/lib/cuprum/rails/responders.rb +1 -0
  68. data/lib/cuprum/rails/responses/head_response.rb +24 -0
  69. data/lib/cuprum/rails/responses/html/redirect_back_response.rb +55 -0
  70. data/lib/cuprum/rails/responses/html/redirect_response.rb +19 -4
  71. data/lib/cuprum/rails/responses/html/render_response.rb +17 -5
  72. data/lib/cuprum/rails/responses/html.rb +6 -2
  73. data/lib/cuprum/rails/responses.rb +1 -0
  74. data/lib/cuprum/rails/result.rb +36 -0
  75. data/lib/cuprum/rails/routes.rb +36 -23
  76. data/lib/cuprum/rails/rspec/contract_helpers.rb +57 -0
  77. data/lib/cuprum/rails/rspec/contracts/action_contracts.rb +754 -0
  78. data/lib/cuprum/rails/rspec/contracts/actions/create_contracts.rb +289 -0
  79. data/lib/cuprum/rails/rspec/contracts/actions/destroy_contracts.rb +164 -0
  80. data/lib/cuprum/rails/rspec/contracts/actions/edit_contracts.rb +73 -0
  81. data/lib/cuprum/rails/rspec/contracts/actions/index_contracts.rb +108 -0
  82. data/lib/cuprum/rails/rspec/contracts/actions/new_contracts.rb +111 -0
  83. data/lib/cuprum/rails/rspec/contracts/actions/show_contracts.rb +72 -0
  84. data/lib/cuprum/rails/rspec/contracts/actions/update_contracts.rb +263 -0
  85. data/lib/cuprum/rails/rspec/contracts/actions.rb +8 -0
  86. data/lib/cuprum/rails/rspec/contracts/command_contracts.rb +479 -0
  87. data/lib/cuprum/rails/rspec/contracts/responder_contracts.rb +232 -0
  88. data/lib/cuprum/rails/rspec/contracts/routes_contracts.rb +363 -0
  89. data/lib/cuprum/rails/rspec/contracts/serializers_contracts.rb +70 -0
  90. data/lib/cuprum/rails/rspec/contracts.rb +8 -0
  91. data/lib/cuprum/rails/rspec/matchers/be_a_result_matcher.rb +64 -0
  92. data/lib/cuprum/rails/rspec/matchers.rb +41 -0
  93. data/lib/cuprum/rails/serializers/base_serializer.rb +60 -0
  94. data/lib/cuprum/rails/serializers/context.rb +84 -0
  95. data/lib/cuprum/rails/serializers/json/active_record_serializer.rb +2 -2
  96. data/lib/cuprum/rails/serializers/json/array_serializer.rb +9 -8
  97. data/lib/cuprum/rails/serializers/json/attributes_serializer.rb +95 -172
  98. data/lib/cuprum/rails/serializers/json/error_serializer.rb +2 -2
  99. data/lib/cuprum/rails/serializers/json/hash_serializer.rb +9 -8
  100. data/lib/cuprum/rails/serializers/json/identity_serializer.rb +3 -3
  101. data/lib/cuprum/rails/serializers/json/properties_serializer.rb +252 -0
  102. data/lib/cuprum/rails/serializers/json.rb +2 -1
  103. data/lib/cuprum/rails/serializers.rb +3 -1
  104. data/lib/cuprum/rails/version.rb +1 -1
  105. data/lib/cuprum/rails.rb +19 -16
  106. metadata +73 -131
  107. data/lib/cuprum/rails/controller_action.rb +0 -121
  108. data/lib/cuprum/rails/errors/missing_parameters.rb +0 -33
  109. data/lib/cuprum/rails/errors/missing_primary_key.rb +0 -46
  110. data/lib/cuprum/rails/errors/undefined_permitted_attributes.rb +0 -34
  111. data/lib/cuprum/rails/rspec/command_contract.rb +0 -460
  112. data/lib/cuprum/rails/rspec/define_route_contract.rb +0 -84
  113. data/lib/cuprum/rails/serializers/json/serializer.rb +0 -66
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: adc7e510f5f1c0b00c820bf755253cbe3d651a65aa946ee7468b8f7efd401b00
4
- data.tar.gz: ed528cc1be9febe6f4f746ba2b1dc37a249b201c58c11cb4d2c1e7ea3086b9a1
3
+ metadata.gz: 1a11b779042715de20325d94601faa030c4c87222255feb97413f3394dbcd616
4
+ data.tar.gz: 7515ee3e188e48489b04e0cca7ac91a0f2a282a783a294ccdd10b920ae91c0d1
5
5
  SHA512:
6
- metadata.gz: 2e39890f3051d9ab9e3c0c1a649cc1ac8fd7e9e0bb46c6be83981714abfa84c5612bbdec1ecd6dd7d4f07bc23b1cf61127fc0e01656e1474db9d824693b7498b
7
- data.tar.gz: 5f02b6c267edfe148b5be0559e96cec1064bad5a873ab853ab2450fef92bca84800daa5212038d2c7cdc157ecf868ab0345a9cd1f70cf26d453e104d788870aa
6
+ metadata.gz: a1e000dc78e44d587c1185361c42f5cd75a151400dde79a963d3d779aeebadf1a8257727eccad0b5c15493be301f2687ad1ecd8705059043e53f0cd615b86637
7
+ data.tar.gz: dfde0bdb1c6a265c700412ef8174a62e1f3ccba3de7841c0da8af07069c987a05566eac98fe79b6dd20ae7b132c9d6e3ac8d607a89f11da16f9fc53a50db4a73
data/CHANGELOG.md CHANGED
@@ -1,5 +1,150 @@
1
1
  # Changelog
2
2
 
3
+ ## O.2.0
4
+
5
+ ### Actions
6
+
7
+ Implemented `#transaction` method.
8
+
9
+ Refactored how actions handle required parameters.
10
+
11
+ - The validation errors for the `Create` and `Update` actions are now scoped by the resource name. The error path should now match the relative path of the corresponding form field.
12
+
13
+ - **(Breaking Change)** Action constructors no longer accept `:repository` or `:resource` keywords by default.
14
+
15
+ - **(Breaking Change)** Actions now require a `:repository` keyword when called, and can accept arbitrary keywords.
16
+
17
+ - **(Breaking Change)** Resource actions now require a `:resource` keyword when called.
18
+
19
+ #### Middleware
20
+
21
+ - Defined `Actions::Middleware::Associations::Find` for querying associations.
22
+ - Defined `Actions::Middleware::Associations::Parent` for querying a parent `belongs_to` association.
23
+ - Defines `Actions::Middleware::LogRequest` for logging request details.
24
+ - Defines `Actions::Middleware::LogResult` for logging the action result.
25
+
26
+ ### Collections
27
+
28
+ Implemented `Collection#qualified_path`, and added qualified path support to `Repository`.
29
+
30
+ #### Commands
31
+
32
+ Commands now handle invalid SQL statement exceptions by returning a failing result with a `StatementInvalid` error, rather than raising the exception.
33
+
34
+ ### Controllers
35
+
36
+ Implemented `.build_request` class method.
37
+
38
+ Implemented `.default_format` configuration option.
39
+
40
+ Refactored `Cuprum::Rails::ControllerAction` to `Cuprum::Rails::Controllers::Action`.
41
+
42
+ - **(Breaking Change)** Controller actions now require a `:controller` argument when called.
43
+
44
+ #### Middleware
45
+
46
+ Implemented controller middleware.
47
+
48
+ - `Cuprum::Rails::Controllers::Middleware`.
49
+ - `Cuprum::Rails::Controllers::ClassMethods::Middleware`.
50
+
51
+ Updated `Cuprum::Rails::Controllers::Action` to apply configured middleware.
52
+
53
+ #### Requests
54
+
55
+ Added `#context` method to access the original request controller or context.
56
+
57
+ Added `#member_action?` method to identify requests to resourceful member actions.
58
+
59
+ Added `#native_session` method to lazily access the native controller session.
60
+
61
+ Added `#properties` method to access all request properties as a Hash.
62
+
63
+ Added `#path_params` method and properly handle parameters from the request path.
64
+
65
+ **(Breaking Change)** Renamed `#method` property to `#http_method`.
66
+
67
+ #### Resources
68
+
69
+ Automatically generate a `Cuprum::Rails::Collection` when creating a resource with a `record_class` but no explicit `collection`.
70
+
71
+ Added `#actions` option, which is automatically generated for singular and plural resources.
72
+
73
+ Added `#parent` option and associated `#ancestors` and `#each_ancestors` methods.
74
+
75
+ - **(Breaking Change)** Removed `Resource#collection`.
76
+
77
+ #### Responders
78
+
79
+ Implemented `Responders::Html::Resource` to handle both singular and plural resources.
80
+
81
+ - `Cuprum::Rails::Responders::Html::PluralResource` is now deprecated.
82
+ - `Cuprum::Rails::Responders::Html::SingularResource` is now deprecated.
83
+
84
+ Updated `JsonResponder` to display full error messages in the development environment.
85
+
86
+ Extracted `Responders::BaseResponder`.
87
+
88
+ Extracted `Responders::Html::Rendering`.
89
+
90
+ **(Breaking Change)** Responders now require `:controller` and `:request` parameters on initialization.
91
+
92
+ #### Responses
93
+
94
+ Implemented `Responses::HeadResponse`.
95
+
96
+ Implemented `Responses::Html::RedirectBackResponse`.
97
+
98
+ Added Rails flash message support to HTML responses:
99
+
100
+ - `Responses::Html::RedirectBackResponse`.
101
+ - `Responses::Html::RedirectResponse`.
102
+ - `Responses::Html::RenderResponse`.
103
+
104
+ ### Results
105
+
106
+ Implemented `Cuprum::Rails::Result`, which includes a `#metadata` property for passing contextual data such as an authentication session or page configuration.
107
+
108
+ ### Routes
109
+
110
+ Route helpers not accept a wildcards hash for populating route wildcards, as an alternative to calling `routes.with_wildcards`.
111
+
112
+ Member route methods now accept a primary key value as well as an entity, or allow the key to be passed as part of the wildcards.
113
+
114
+ ### RSpec
115
+
116
+ Implemented contracts for Cuprum::Rails actions:
117
+
118
+ - `Cuprum::Rails::RSpec::Contracts::Actions::CreateContracts`
119
+ - `Cuprum::Rails::RSpec::Contracts::Actions::DestroyContracts`
120
+ - `Cuprum::Rails::RSpec::Contracts::Actions::EditContracts`
121
+ - `Cuprum::Rails::RSpec::Contracts::Actions::IndexContracts`
122
+ - `Cuprum::Rails::RSpec::Contracts::Actions::NewContracts`
123
+ - `Cuprum::Rails::RSpec::Contracts::Actions::ShowContracts`
124
+ - `Cuprum::Rails::RSpec::Contracts::Actions::UpdateContracts`
125
+
126
+ Contracts allow libraries or applications to verify their actions implement the action specifications.
127
+
128
+ Defined `Cuprum::Rails::RSpec::Contracts::SerializersContracts`:
129
+
130
+ - `ShouldSerailizeAttributesContract`: Verifies that the specified attributes are serialized with the expected values.
131
+
132
+ Implemented `Cuprum::Rails::RSpec::Matchers::BeAResultMatcher`, which adds support for a `#metadata` property to the `be_a_result` matcher.
133
+
134
+ - **(Breaking Change)** Existing contracts were moved into the `Cuprum::Rails::RSpec::Contracts` namespace and are scoped by type.
135
+ - `COMMAND_CONTRACT` is now `Contracts::CommandContracts::ShouldBeARailsCommandContract`.
136
+ - `DEFINE_ROUTE_CONTRACT` is replaced with `Contracts::RoutesContracts::ShouldDefineCollectionRouteContract` and `ShouldDefineMemberRouteContract`.
137
+
138
+ ### Serializers
139
+
140
+ Implemented `Cuprum::Rails::Serializers::Context`.
141
+
142
+ - Refactored serializers to take a `context:` keyword instead of `serializers:`.
143
+
144
+ Implemented `Cuprum::Rails::Serializers::Json::PropertiesSerializer`.
145
+
146
+ - Refactored `AttributesSerializer` to inherit from `PropertiesSerializer`. This is a breaking change for certain serializers with a block passed to `.attribute`.
147
+
3
148
  ## 0.1.0
4
149
 
5
150
  Initial version.
data/DEVELOPMENT.md CHANGED
@@ -4,6 +4,26 @@
4
4
 
5
5
  - Remove ActionController::Parameters reference in Cuprum::Rails::Action.
6
6
 
7
+ Test cases:
8
+
9
+ - #create, #update (, #new ?) with generated attributes.
10
+ - #edit, #new with related resources
11
+
12
+ ### Nested Resources
13
+
14
+ Interactions are optional - opt-in? With a DSL?
15
+
16
+ - With a required association (e.g. Chapter#book => /books/:book_id/chapters)
17
+ - All actions: require :book_id, valid Book entity, response 'book' => book
18
+ - With a singular association (e.g. Book#author => /books)
19
+ - #index: response 'books' => mapped books
20
+ - #new, #edit: response 'books' => all books
21
+ - #create, #show, #update, #destroy: response 'book' => mapped book
22
+ - With a plural association (e.g. Book#chapters)
23
+ - #create: create associated chapters, response 'chapters' => created chapters
24
+ - #show: response 'chapters' => mapped chapters
25
+ - #destroy: destroy associated chapters, response 'chapters' => destroyed chapters
26
+
7
27
  ## Controllers
8
28
 
9
29
  - Different cases for controllers.