activity_notification 2.4.1 → 2.5.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.
Files changed (250) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/app/jobs/activity_notification/cascading_notification_job.rb +123 -0
  4. data/docs/Functions.md +197 -1
  5. data/lib/activity_notification/apis/cascading_notification_api.rb +208 -0
  6. data/lib/activity_notification/apis/notification_api.rb +3 -0
  7. data/lib/activity_notification/config.rb +10 -0
  8. data/lib/activity_notification/mailers/helpers.rb +27 -1
  9. data/lib/activity_notification/version.rb +1 -1
  10. data/lib/generators/templates/activity_notification.rb +8 -0
  11. metadata +5 -441
  12. data/.codeclimate.yml +0 -33
  13. data/.coveralls.yml +0 -1
  14. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -22
  15. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -17
  16. data/.github/pull_request_template.md +0 -13
  17. data/.github/workflows/build.yml +0 -100
  18. data/.gitignore +0 -74
  19. data/.rspec +0 -3
  20. data/.rubocop.yml +0 -1157
  21. data/.yardopts +0 -6
  22. data/CHANGELOG.md +0 -452
  23. data/Gemfile +0 -31
  24. data/Procfile +0 -2
  25. data/Rakefile +0 -28
  26. data/activity_notification.gemspec +0 -44
  27. data/ai-curated-specs/issues/172/design.md +0 -220
  28. data/ai-curated-specs/issues/172/tasks.md +0 -326
  29. data/ai-curated-specs/issues/188/design.md +0 -227
  30. data/ai-curated-specs/issues/188/requirements.md +0 -78
  31. data/ai-curated-specs/issues/188/tasks.md +0 -203
  32. data/ai-curated-specs/issues/188/upstream-contributions.md +0 -592
  33. data/ai-curated-specs/issues/50/design.md +0 -235
  34. data/ai-curated-specs/issues/50/requirements.md +0 -49
  35. data/ai-curated-specs/issues/50/tasks.md +0 -232
  36. data/bin/_dynamodblocal +0 -4
  37. data/bin/bundle_update.sh +0 -7
  38. data/bin/deploy_on_heroku.sh +0 -16
  39. data/bin/install_dynamodblocal.sh +0 -5
  40. data/bin/start_dynamodblocal.sh +0 -47
  41. data/bin/stop_dynamodblocal.sh +0 -34
  42. data/gemfiles/Gemfile.rails-5.0 +0 -25
  43. data/gemfiles/Gemfile.rails-5.1 +0 -25
  44. data/gemfiles/Gemfile.rails-5.2 +0 -24
  45. data/gemfiles/Gemfile.rails-6.0 +0 -23
  46. data/gemfiles/Gemfile.rails-6.1 +0 -22
  47. data/gemfiles/Gemfile.rails-7.0 +0 -25
  48. data/gemfiles/Gemfile.rails-7.1 +0 -23
  49. data/gemfiles/Gemfile.rails-7.2 +0 -23
  50. data/gemfiles/Gemfile.rails-8.0 +0 -24
  51. data/package.json +0 -8
  52. data/spec/channels/notification_api_channel_shared_examples.rb +0 -59
  53. data/spec/channels/notification_api_channel_spec.rb +0 -49
  54. data/spec/channels/notification_api_with_devise_channel_spec.rb +0 -76
  55. data/spec/channels/notification_channel_shared_examples.rb +0 -59
  56. data/spec/channels/notification_channel_spec.rb +0 -48
  57. data/spec/channels/notification_with_devise_channel_spec.rb +0 -97
  58. data/spec/concerns/apis/notification_api_spec.rb +0 -1627
  59. data/spec/concerns/apis/subscription_api_spec.rb +0 -474
  60. data/spec/concerns/common_spec.rb +0 -213
  61. data/spec/concerns/models/group_spec.rb +0 -61
  62. data/spec/concerns/models/notifiable_spec.rb +0 -782
  63. data/spec/concerns/models/notifier_spec.rb +0 -71
  64. data/spec/concerns/models/subscriber_spec.rb +0 -800
  65. data/spec/concerns/models/target_spec.rb +0 -1285
  66. data/spec/concerns/renderable_spec.rb +0 -129
  67. data/spec/config_spec.rb +0 -85
  68. data/spec/controllers/common_controller_spec.rb +0 -25
  69. data/spec/controllers/controller_spec_utility.rb +0 -100
  70. data/spec/controllers/dummy_common_controller.rb +0 -5
  71. data/spec/controllers/notifications_api_controller_shared_examples.rb +0 -619
  72. data/spec/controllers/notifications_api_controller_spec.rb +0 -19
  73. data/spec/controllers/notifications_api_with_devise_controller_spec.rb +0 -60
  74. data/spec/controllers/notifications_controller_shared_examples.rb +0 -743
  75. data/spec/controllers/notifications_controller_spec.rb +0 -11
  76. data/spec/controllers/notifications_with_devise_controller_spec.rb +0 -97
  77. data/spec/controllers/subscriptions_api_controller_shared_examples.rb +0 -750
  78. data/spec/controllers/subscriptions_api_controller_spec.rb +0 -19
  79. data/spec/controllers/subscriptions_api_with_devise_controller_spec.rb +0 -60
  80. data/spec/controllers/subscriptions_controller_shared_examples.rb +0 -946
  81. data/spec/controllers/subscriptions_controller_spec.rb +0 -11
  82. data/spec/controllers/subscriptions_with_devise_controller_spec.rb +0 -97
  83. data/spec/factories/admins.rb +0 -5
  84. data/spec/factories/articles.rb +0 -5
  85. data/spec/factories/comments.rb +0 -6
  86. data/spec/factories/dummy/dummy_group.rb +0 -4
  87. data/spec/factories/dummy/dummy_notifiable.rb +0 -4
  88. data/spec/factories/dummy/dummy_notifier.rb +0 -4
  89. data/spec/factories/dummy/dummy_subscriber.rb +0 -4
  90. data/spec/factories/dummy/dummy_target.rb +0 -4
  91. data/spec/factories/notifications.rb +0 -7
  92. data/spec/factories/subscriptions.rb +0 -8
  93. data/spec/factories/users.rb +0 -11
  94. data/spec/generators/controllers_generator_spec.rb +0 -85
  95. data/spec/generators/install_generator_spec.rb +0 -43
  96. data/spec/generators/migration/migration_generator_spec.rb +0 -80
  97. data/spec/generators/models_generator_spec.rb +0 -96
  98. data/spec/generators/views_generator_spec.rb +0 -195
  99. data/spec/helpers/polymorphic_helpers_spec.rb +0 -89
  100. data/spec/helpers/view_helpers_spec.rb +0 -547
  101. data/spec/jobs/notification_resilience_job_spec.rb +0 -167
  102. data/spec/jobs/notify_all_job_spec.rb +0 -23
  103. data/spec/jobs/notify_job_spec.rb +0 -23
  104. data/spec/jobs/notify_to_job_spec.rb +0 -23
  105. data/spec/mailers/mailer_spec.rb +0 -214
  106. data/spec/mailers/notification_resilience_spec.rb +0 -263
  107. data/spec/models/dummy/dummy_group_spec.rb +0 -10
  108. data/spec/models/dummy/dummy_notifiable_spec.rb +0 -10
  109. data/spec/models/dummy/dummy_notifier_spec.rb +0 -10
  110. data/spec/models/dummy/dummy_subscriber_spec.rb +0 -8
  111. data/spec/models/dummy/dummy_target_spec.rb +0 -10
  112. data/spec/models/notification_spec.rb +0 -472
  113. data/spec/models/subscription_spec.rb +0 -215
  114. data/spec/optional_targets/action_cable_api_channel_spec.rb +0 -34
  115. data/spec/optional_targets/action_cable_channel_spec.rb +0 -41
  116. data/spec/optional_targets/amazon_sns_spec.rb +0 -47
  117. data/spec/optional_targets/base_spec.rb +0 -45
  118. data/spec/optional_targets/slack_spec.rb +0 -44
  119. data/spec/orm/dynamoid_spec.rb +0 -115
  120. data/spec/rails_app/Rakefile +0 -15
  121. data/spec/rails_app/app/assets/config/manifest.js +0 -3
  122. data/spec/rails_app/app/assets/images/.keep +0 -0
  123. data/spec/rails_app/app/assets/javascripts/application.js +0 -3
  124. data/spec/rails_app/app/assets/javascripts/cable.js +0 -12
  125. data/spec/rails_app/app/assets/stylesheets/application.css +0 -15
  126. data/spec/rails_app/app/assets/stylesheets/reset.css +0 -85
  127. data/spec/rails_app/app/assets/stylesheets/style.css +0 -244
  128. data/spec/rails_app/app/controllers/admins_controller.rb +0 -21
  129. data/spec/rails_app/app/controllers/application_controller.rb +0 -5
  130. data/spec/rails_app/app/controllers/articles_controller.rb +0 -67
  131. data/spec/rails_app/app/controllers/comments_controller.rb +0 -36
  132. data/spec/rails_app/app/controllers/concerns/.keep +0 -0
  133. data/spec/rails_app/app/controllers/spa_controller.rb +0 -7
  134. data/spec/rails_app/app/controllers/users/notifications_controller.rb +0 -2
  135. data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +0 -2
  136. data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +0 -2
  137. data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +0 -2
  138. data/spec/rails_app/app/controllers/users_controller.rb +0 -26
  139. data/spec/rails_app/app/helpers/application_helper.rb +0 -2
  140. data/spec/rails_app/app/helpers/devise_helper.rb +0 -2
  141. data/spec/rails_app/app/javascript/App.vue +0 -40
  142. data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +0 -82
  143. data/spec/rails_app/app/javascript/components/Top.vue +0 -98
  144. data/spec/rails_app/app/javascript/components/notifications/Index.vue +0 -200
  145. data/spec/rails_app/app/javascript/components/notifications/Notification.vue +0 -133
  146. data/spec/rails_app/app/javascript/components/notifications/NotificationContent.vue +0 -122
  147. data/spec/rails_app/app/javascript/components/subscriptions/Index.vue +0 -279
  148. data/spec/rails_app/app/javascript/components/subscriptions/NewSubscription.vue +0 -112
  149. data/spec/rails_app/app/javascript/components/subscriptions/NotificationKey.vue +0 -141
  150. data/spec/rails_app/app/javascript/components/subscriptions/Subscription.vue +0 -226
  151. data/spec/rails_app/app/javascript/config/development.js +0 -5
  152. data/spec/rails_app/app/javascript/config/environment.js +0 -7
  153. data/spec/rails_app/app/javascript/config/production.js +0 -5
  154. data/spec/rails_app/app/javascript/config/test.js +0 -5
  155. data/spec/rails_app/app/javascript/packs/application.js +0 -18
  156. data/spec/rails_app/app/javascript/packs/spa.js +0 -14
  157. data/spec/rails_app/app/javascript/router/index.js +0 -73
  158. data/spec/rails_app/app/javascript/store/index.js +0 -37
  159. data/spec/rails_app/app/mailers/.keep +0 -0
  160. data/spec/rails_app/app/mailers/custom_notification_mailer.rb +0 -5
  161. data/spec/rails_app/app/models/admin.rb +0 -35
  162. data/spec/rails_app/app/models/article.rb +0 -54
  163. data/spec/rails_app/app/models/comment.rb +0 -81
  164. data/spec/rails_app/app/models/dummy/dummy_base.rb +0 -11
  165. data/spec/rails_app/app/models/dummy/dummy_group.rb +0 -23
  166. data/spec/rails_app/app/models/dummy/dummy_notifiable.rb +0 -15
  167. data/spec/rails_app/app/models/dummy/dummy_notifiable_target.rb +0 -27
  168. data/spec/rails_app/app/models/dummy/dummy_notifier.rb +0 -15
  169. data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +0 -14
  170. data/spec/rails_app/app/models/dummy/dummy_target.rb +0 -16
  171. data/spec/rails_app/app/models/user.rb +0 -73
  172. data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +0 -1
  173. data/spec/rails_app/app/views/activity_notification/notifications/default/article/_update.html.erb +0 -146
  174. data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_path_test.html.erb +0 -1
  175. data/spec/rails_app/app/views/activity_notification/notifications/default/custom/_test.html.erb +0 -1
  176. data/spec/rails_app/app/views/activity_notification/notifications/users/_custom_index.html.erb +0 -1
  177. data/spec/rails_app/app/views/activity_notification/notifications/users/custom/_test.html.erb +0 -1
  178. data/spec/rails_app/app/views/activity_notification/notifications/users/overridden/custom/_test.html.erb +0 -1
  179. data/spec/rails_app/app/views/activity_notification/optional_targets/admins/amazon_sns/comment/_default.text.erb +0 -10
  180. data/spec/rails_app/app/views/articles/_form.html.erb +0 -24
  181. data/spec/rails_app/app/views/articles/edit.html.erb +0 -8
  182. data/spec/rails_app/app/views/articles/index.html.erb +0 -113
  183. data/spec/rails_app/app/views/articles/new.html.erb +0 -7
  184. data/spec/rails_app/app/views/articles/show.html.erb +0 -49
  185. data/spec/rails_app/app/views/layouts/_header.html.erb +0 -46
  186. data/spec/rails_app/app/views/layouts/application.html.erb +0 -15
  187. data/spec/rails_app/app/views/spa/index.html.erb +0 -2
  188. data/spec/rails_app/babel.config.js +0 -72
  189. data/spec/rails_app/bin/bundle +0 -3
  190. data/spec/rails_app/bin/rails +0 -4
  191. data/spec/rails_app/bin/rake +0 -4
  192. data/spec/rails_app/bin/setup +0 -29
  193. data/spec/rails_app/bin/webpack +0 -18
  194. data/spec/rails_app/bin/webpack-dev-server +0 -18
  195. data/spec/rails_app/config/application.rb +0 -54
  196. data/spec/rails_app/config/boot.rb +0 -5
  197. data/spec/rails_app/config/cable.yml +0 -8
  198. data/spec/rails_app/config/database.yml +0 -36
  199. data/spec/rails_app/config/dynamoid.rb +0 -13
  200. data/spec/rails_app/config/environment.rb +0 -26
  201. data/spec/rails_app/config/environments/development.rb +0 -60
  202. data/spec/rails_app/config/environments/production.rb +0 -85
  203. data/spec/rails_app/config/environments/test.rb +0 -53
  204. data/spec/rails_app/config/initializers/activity_notification.rb +0 -104
  205. data/spec/rails_app/config/initializers/assets.rb +0 -11
  206. data/spec/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  207. data/spec/rails_app/config/initializers/cookies_serializer.rb +0 -3
  208. data/spec/rails_app/config/initializers/copy_it.aws.rb.template +0 -6
  209. data/spec/rails_app/config/initializers/devise.rb +0 -278
  210. data/spec/rails_app/config/initializers/devise_token_auth.rb +0 -55
  211. data/spec/rails_app/config/initializers/filter_parameter_logging.rb +0 -4
  212. data/spec/rails_app/config/initializers/inflections.rb +0 -16
  213. data/spec/rails_app/config/initializers/mime_types.rb +0 -4
  214. data/spec/rails_app/config/initializers/mysql.rb +0 -9
  215. data/spec/rails_app/config/initializers/session_store.rb +0 -3
  216. data/spec/rails_app/config/initializers/wrap_parameters.rb +0 -14
  217. data/spec/rails_app/config/initializers/zeitwerk.rb +0 -10
  218. data/spec/rails_app/config/locales/activity_notification.en.yml +0 -26
  219. data/spec/rails_app/config/locales/devise.en.yml +0 -62
  220. data/spec/rails_app/config/mongoid.yml +0 -13
  221. data/spec/rails_app/config/routes.rb +0 -50
  222. data/spec/rails_app/config/secrets.yml +0 -22
  223. data/spec/rails_app/config/webpack/development.js +0 -5
  224. data/spec/rails_app/config/webpack/environment.js +0 -7
  225. data/spec/rails_app/config/webpack/loaders/vue.js +0 -6
  226. data/spec/rails_app/config/webpack/production.js +0 -5
  227. data/spec/rails_app/config/webpack/test.js +0 -5
  228. data/spec/rails_app/config/webpacker.yml +0 -97
  229. data/spec/rails_app/config.ru +0 -4
  230. data/spec/rails_app/db/migrate/20160716000000_create_test_tables.rb +0 -42
  231. data/spec/rails_app/db/migrate/20181209000000_create_activity_notification_tables.rb +0 -33
  232. data/spec/rails_app/db/migrate/20191201000000_add_tokens_to_users.rb +0 -10
  233. data/spec/rails_app/db/schema.rb +0 -98
  234. data/spec/rails_app/db/seeds.rb +0 -95
  235. data/spec/rails_app/lib/custom_optional_targets/console_output.rb +0 -16
  236. data/spec/rails_app/lib/custom_optional_targets/raise_error.rb +0 -14
  237. data/spec/rails_app/lib/custom_optional_targets/wrong_target.rb +0 -13
  238. data/spec/rails_app/lib/mailer_previews/mailer_preview.rb +0 -29
  239. data/spec/rails_app/package.json +0 -23
  240. data/spec/rails_app/postcss.config.js +0 -12
  241. data/spec/rails_app/public/404.html +0 -67
  242. data/spec/rails_app/public/422.html +0 -67
  243. data/spec/rails_app/public/500.html +0 -66
  244. data/spec/rails_app/public/favicon.ico +0 -0
  245. data/spec/roles/acts_as_group_spec.rb +0 -30
  246. data/spec/roles/acts_as_notifiable_spec.rb +0 -432
  247. data/spec/roles/acts_as_notifier_spec.rb +0 -30
  248. data/spec/roles/acts_as_target_spec.rb +0 -36
  249. data/spec/spec_helper.rb +0 -56
  250. data/spec/version_spec.rb +0 -31
@@ -1,227 +0,0 @@
1
- # Design Document
2
-
3
- ## Overview
4
-
5
- This design outlines the approach for upgrading activity_notification's Dynamoid dependency from v3.1.0 to v3.11.0. The upgrade involves updating namespace references, method signatures, and class hierarchies that have changed between these versions, while maintaining backward compatibility and preparing useful enhancements for upstream contribution to Dynamoid.
6
-
7
- ## Architecture
8
-
9
- ### Current Architecture
10
- - **Dynamoid Extension**: `lib/activity_notification/orm/dynamoid/extension.rb` contains monkey patches extending Dynamoid v3.1.0
11
- - **ORM Integration**: `lib/activity_notification/orm/dynamoid.rb` provides ActivityNotification-specific query methods
12
- - **Dependency Management**: Gemspec pins Dynamoid to exactly v3.1.0
13
-
14
- ### Target Architecture
15
- - **Updated Extension**: Refactored extension file compatible with Dynamoid v3.11.0 namespaces
16
- - **Backward Compatibility**: Maintained API surface for existing applications
17
- - **Upstream Preparation**: Clean, well-documented code ready for Dynamoid contribution
18
- - **Flexible Dependency**: Version range allowing v3.11.0+ while preventing breaking v4.0 changes
19
-
20
- ## Components and Interfaces
21
-
22
- ### 1. Gemspec Update
23
- **File**: `activity_notification.gemspec`
24
- **Changes**:
25
- - Update Dynamoid dependency from development dependency `'3.1.0'` to runtime dependency `'>= 3.11.0', '< 4.0'`
26
- - Change dependency type from `add_development_dependency` to `add_dependency` for production use
27
- - Ensure compatibility with Rails version constraints
28
-
29
- ### 2. Extension Module Refactoring
30
- **File**: `lib/activity_notification/orm/dynamoid/extension.rb`
31
-
32
- #### 2.1 Critical Namespace Changes
33
- Based on analysis of Dynamoid v3.1.0 vs v3.11.0:
34
-
35
- **Query and Scan Class Locations**:
36
- - **v3.1.0**: `Dynamoid::AdapterPlugin::Query` and `Dynamoid::AdapterPlugin::Scan`
37
- - **v3.11.0**: `Dynamoid::AdapterPlugin::AwsSdkV3::Query` and `Dynamoid::AdapterPlugin::AwsSdkV3::Scan`
38
-
39
- **Method Signature Changes**:
40
- - **v3.1.0**: `Query.new(client, table, opts = {})`
41
- - **v3.11.0**: `Query.new(client, table, key_conditions, non_key_conditions, options)`
42
-
43
- #### 2.2 Removed Constants and Methods
44
- **Constants removed in v3.11.0**:
45
- - `FIELD_MAP` - Used for condition mapping
46
- - `RANGE_MAP` - Used for range condition mapping
47
- - `attribute_value_list()` method - No longer exists
48
-
49
- **New Architecture in v3.11.0**:
50
- - Uses `FilterExpressionConvertor` for building filter expressions
51
- - Uses expression attribute names and values instead of legacy condition format
52
- - Middleware pattern for handling backoff, limits, and pagination
53
-
54
- #### 2.3 Class Hierarchy Updates Required
55
- - Update inheritance from `::Dynamoid::AdapterPlugin::Query` to `::Dynamoid::AdapterPlugin::AwsSdkV3::Query`
56
- - Update inheritance from `::Dynamoid::AdapterPlugin::Scan` to `::Dynamoid::AdapterPlugin::AwsSdkV3::Scan`
57
- - Remove references to `FIELD_MAP`, `RANGE_MAP`, and `attribute_value_list()`
58
- - Adapt to new filter expression format
59
-
60
- ### 3. Core Functionality Preservation
61
- **Methods to Maintain**:
62
- - `none()` - Returns empty result set
63
- - `limit()` - Aliases to `record_limit()`
64
- - `exists?()` - Checks if records exist
65
- - `update_all()` - Batch update operations
66
- - `serializable_hash()` - Array serialization
67
- - Null/not_null operators for query filtering
68
- - Uniqueness validation support
69
-
70
- ### 4. Upstream Contribution Preparation
71
- **Target Methods for Contribution**:
72
- - `Chain#none` - Useful empty result pattern
73
- - `Chain#limit` - More intuitive alias for `record_limit`
74
- - `Chain#exists?` - Common query pattern
75
- - `Chain#update_all` - Batch operations
76
- - Null operator extensions - Enhanced query capabilities
77
- - Uniqueness validator - Common validation need
78
-
79
- ## Data Models
80
-
81
- ### Extension Points
82
- ```ruby
83
- # Current structure (v3.1.0)
84
- module Dynamoid
85
- module Criteria
86
- class Chain
87
- # Extension methods work with @query hash
88
- end
89
- end
90
-
91
- module AdapterPlugin
92
- class AwsSdkV3
93
- class Query < ::Dynamoid::AdapterPlugin::Query
94
- # Uses FIELD_MAP, RANGE_MAP, attribute_value_list
95
- def query_filter
96
- # Legacy condition format
97
- end
98
- end
99
- end
100
- end
101
- end
102
-
103
- # Target structure (v3.11.0) - CONFIRMED
104
- module Dynamoid
105
- module Criteria
106
- class Chain
107
- # Extension methods work with @where_conditions object
108
- # Uses KeyFieldsDetector and WhereConditions classes
109
- end
110
- end
111
-
112
- module AdapterPlugin
113
- class AwsSdkV3
114
- class Query < ::Dynamoid::AdapterPlugin::AwsSdkV3::Query # CHANGED NAMESPACE
115
- # Uses FilterExpressionConvertor instead of FIELD_MAP
116
- # No more query_filter method - uses filter_expression
117
- def initialize(client, table, key_conditions, non_key_conditions, options)
118
- # CHANGED SIGNATURE
119
- end
120
- end
121
- end
122
- end
123
- end
124
- ```
125
-
126
- ### Critical Breaking Changes
127
- 1. **Query/Scan inheritance path changed**: `::Dynamoid::AdapterPlugin::Query` → `::Dynamoid::AdapterPlugin::AwsSdkV3::Query`
128
- 2. **Constructor signature changed**: Single options hash → separate key/non-key conditions + options
129
- 3. **Filter building changed**: `FIELD_MAP`/`RANGE_MAP` → `FilterExpressionConvertor`
130
- 4. **Method removal**: `attribute_value_list()`, `query_filter()`, `scan_filter()` methods removed
131
-
132
- ### Configuration Changes
133
- - No breaking changes to ActivityNotification configuration
134
- - Maintain existing API for `acts_as_notification_target`, `acts_as_notifiable`, etc.
135
- - Preserve all existing query method signatures
136
-
137
- ## Error Handling
138
-
139
- ### Migration Strategy
140
- 1. **Gradual Rollout**: Support version range to allow gradual adoption
141
- 2. **Fallback Mechanisms**: Detect Dynamoid version and use appropriate code paths if needed
142
- 3. **Clear Error Messages**: Provide helpful errors if incompatible versions are used
143
-
144
- ### Exception Handling
145
- - **NameError**: Handle missing classes/modules gracefully
146
- - **NoMethodError**: Provide fallbacks for changed method signatures
147
- - **ArgumentError**: Handle parameter changes in Dynamoid methods
148
-
149
- ### Validation
150
- - Runtime checks for critical Dynamoid functionality
151
- - Test coverage for all supported Dynamoid versions
152
- - Integration tests with real DynamoDB operations
153
-
154
- ## Testing Strategy
155
-
156
- ### Unit Tests
157
- - Test all extension methods with Dynamoid v3.11.0
158
- - Verify namespace resolution works correctly
159
- - Test error handling for edge cases
160
-
161
- ### Integration Tests
162
- - Full ActivityNotification workflow with DynamoDB
163
- - Performance regression testing
164
- - Memory usage validation
165
-
166
- ### Compatibility Tests
167
- - Test with multiple Dynamoid versions in range
168
- - Verify no breaking changes for existing applications
169
- - Test upgrade path from v3.1.0 to v3.11.0
170
-
171
- ### Upstream Preparation Tests
172
- - Isolated tests for each method proposed for contribution
173
- - Documentation examples that work standalone
174
- - Performance benchmarks for contributed methods
175
-
176
- ## Implementation Phases
177
-
178
- ### Phase 1: Research and Analysis ✅ COMPLETED
179
- - ✅ Compare Dynamoid v3.1.0 vs v3.11.0 source code
180
- - ✅ Identify all namespace and method signature changes
181
- - ✅ Create compatibility matrix
182
-
183
- **Key Findings**:
184
- - Query/Scan classes moved from `AdapterPlugin::` to `AdapterPlugin::AwsSdkV3::`
185
- - Constructor signatures completely changed
186
- - FIELD_MAP/RANGE_MAP constants removed
187
- - Filter building now uses FilterExpressionConvertor
188
- - Legacy query_filter/scan_filter methods removed
189
-
190
- ### Phase 2: Core Updates
191
- - Update gemspec dependency
192
- - Refactor extension.rb for new namespaces
193
- - Maintain existing functionality
194
-
195
- ### Phase 3: Testing and Validation
196
- - Update test suite for new Dynamoid version
197
- - Run comprehensive integration tests using `AN_ORM=dynamoid bundle exec rspec`
198
- - Fix failing tests to ensure all Dynamoid-related functionality works
199
- - Performance validation
200
- - Verify all existing test scenarios pass with new Dynamoid version
201
-
202
- ### Phase 4: Upstream Preparation
203
- - Extract reusable methods into separate modules
204
- - Create documentation and examples
205
- - Prepare pull requests for Dynamoid project
206
-
207
- ### Phase 5: Documentation and Release
208
- - Update CHANGELOG with breaking changes
209
- - Update README with version requirements
210
- - Release new version with proper semantic versioning
211
-
212
- ## Risk Mitigation
213
-
214
- ### Breaking Changes
215
- - Use version range to prevent automatic v4.0 adoption
216
- - Provide clear upgrade documentation
217
- - Maintain backward compatibility where possible
218
-
219
- ### Performance Impact
220
- - Benchmark critical query operations
221
- - Monitor memory usage changes
222
- - Test with large datasets
223
-
224
- ### Upstream Contribution Risks
225
- - Prepare contributions as optional enhancements
226
- - Ensure activity_notification works without upstream acceptance
227
- - Maintain local implementations as fallbacks
@@ -1,78 +0,0 @@
1
- # Requirements Document
2
-
3
- ## Introduction
4
-
5
- This feature involves upgrading the activity_notification gem's Dynamoid dependency from the outdated v3.1.0 to the latest v3.11.0. The upgrade requires updating namespace references and method calls that have changed between these versions, while maintaining backward compatibility and ensuring all existing functionality continues to work correctly.
6
-
7
- ## Requirements
8
-
9
- ### Requirement 1
10
-
11
- **User Story:** As a developer using activity_notification with DynamoDB, I want the gem to support the latest Dynamoid version so that I can benefit from bug fixes, performance improvements, and security updates.
12
-
13
- #### Acceptance Criteria
14
-
15
- 1. WHEN the gemspec is updated THEN the Dynamoid dependency SHALL be changed from development dependency '3.1.0' to runtime dependency '>= 3.11.0', '< 4.0'
16
- 2. WHEN the gem is installed THEN it SHALL successfully resolve dependencies with Dynamoid v3.11.0
17
- 3. WHEN existing applications upgrade THEN they SHALL continue to work without breaking changes
18
-
19
- ### Requirement 2
20
-
21
- **User Story:** As a maintainer of activity_notification, I want to update the Dynamoid extension code to use the correct namespaces and method signatures so that the gem works with the latest Dynamoid version.
22
-
23
- #### Acceptance Criteria
24
-
25
- 1. WHEN the extension file is updated THEN all namespace references SHALL match Dynamoid v3.11.0 structure
26
- 2. WHEN Dynamoid classes are referenced THEN they SHALL use the correct module paths from v3.11.0
27
- 3. WHEN adapter plugin classes are extended THEN they SHALL use the updated class hierarchy from v3.11.0
28
- 4. WHEN the code is executed THEN it SHALL not raise any NameError or NoMethodError exceptions
29
-
30
- ### Requirement 3
31
-
32
- **User Story:** As a developer using activity_notification with DynamoDB, I want all existing functionality to continue working after the Dynamoid upgrade so that my application remains stable.
33
-
34
- #### Acceptance Criteria
35
-
36
- 1. WHEN the none() method is called THEN it SHALL return an empty result set as before
37
- 2. WHEN the limit() method is called THEN it SHALL properly limit query results
38
- 3. WHEN the exists?() method is called THEN it SHALL correctly determine if records exist
39
- 4. WHEN the update_all() method is called THEN it SHALL update all matching records
40
- 5. WHEN null and not_null operators are used THEN they SHALL filter records correctly
41
- 6. WHEN uniqueness validation is performed THEN it SHALL prevent duplicate records
42
-
43
- ### Requirement 4
44
-
45
- **User Story:** As a developer running tests for activity_notification, I want all existing tests to pass with the new Dynamoid version so that I can be confident the upgrade doesn't break functionality.
46
-
47
- #### Acceptance Criteria
48
-
49
- 1. WHEN the test suite is run THEN all Dynamoid-related tests SHALL pass
50
- 2. WHEN integration tests are executed THEN they SHALL work with the new Dynamoid version
51
- 3. WHEN edge cases are tested THEN they SHALL behave consistently with the previous version
52
- 4. WHEN performance tests are run THEN they SHALL show no significant regression
53
-
54
- ### Requirement 5
55
-
56
- **User Story:** As a maintainer of activity_notification, I want to contribute useful enhancements back to the Dynamoid upstream project so that the broader community can benefit from the improvements we've developed.
57
-
58
- #### Acceptance Criteria
59
-
60
- 1. WHEN extension methods are identified as generally useful THEN they SHALL be prepared for upstream contribution
61
- 2. WHEN the none() method implementation is stable THEN it SHALL be proposed as a pull request to Dynamoid
62
- 3. WHEN the limit() method enhancement is validated THEN it SHALL be contributed to Dynamoid upstream
63
- 4. WHEN the exists?() method is proven useful THEN it SHALL be submitted to Dynamoid for inclusion
64
- 5. WHEN the update_all() method is optimized THEN it SHALL be offered as a contribution to Dynamoid
65
- 6. WHEN null/not_null operators are refined THEN they SHALL be proposed for Dynamoid core
66
- 7. WHEN uniqueness validator improvements are made THEN they SHALL be contributed upstream
67
-
68
- ### Requirement 6
69
-
70
- **User Story:** As a developer upgrading activity_notification, I want clear documentation about the Dynamoid version change so that I can understand any potential impacts on my application.
71
-
72
- #### Acceptance Criteria
73
-
74
- 1. WHEN the CHANGELOG is updated THEN it SHALL document the Dynamoid version upgrade
75
- 2. WHEN breaking changes exist THEN they SHALL be clearly documented with migration instructions
76
- 3. WHEN new features are available THEN they SHALL be documented with usage examples
77
- 4. WHEN version compatibility is checked THEN the supported Dynamoid versions SHALL be clearly stated
78
- 5. WHEN upstream contributions are made THEN they SHALL be documented with links to pull requests
@@ -1,203 +0,0 @@
1
- # Implementation Plan
2
-
3
- ## Source Code References
4
-
5
- **Important Context**: The following source code locations are available for reference during implementation:
6
-
7
- - **Dynamoid v3.1.0 source**: `pkg/gems/gems/dynamoid-3.1.0/`
8
- - **Dynamoid v3.11.0 source**: `pkg/gems/gems/dynamoid-3.11.0/`
9
-
10
- These directories contain the complete source code for both versions and should be referenced when:
11
- - Understanding breaking changes between versions
12
- - Implementing compatibility fixes
13
- - Verifying method signatures and class hierarchies
14
- - Debugging namespace and inheritance issues
15
-
16
- ## Implementation Tasks
17
-
18
- - [x] 1. Update Dynamoid dependency in gemspec
19
- - Change dependency from development dependency `'3.1.0'` to runtime dependency `'>= 3.11.0', '< 4.0'` in activity_notification.gemspec
20
- - Change from `add_development_dependency` to `add_dependency` for production use
21
- - Ensure compatibility with existing Rails version constraints
22
- - _Requirements: 1.1, 1.2_
23
-
24
- - [x] 2. Fix namespace references in extension file
25
- - [x] 2.1 Update Query class inheritance
26
- - Change `class Query < ::Dynamoid::AdapterPlugin::Query` to `class Query < ::Dynamoid::AdapterPlugin::AwsSdkV3::Query`
27
- - Update require statement to use new path structure
28
- - _Requirements: 2.1, 2.2_
29
-
30
- - [x] 2.2 Update Scan class inheritance
31
- - Change `class Scan < ::Dynamoid::AdapterPlugin::Scan` to `class Scan < ::Dynamoid::AdapterPlugin::AwsSdkV3::Scan`
32
- - Update require statement to use new path structure
33
- - _Requirements: 2.1, 2.2_
34
-
35
- - [x] 3. Remove deprecated constants and methods
36
- - [x] 3.1 Remove FIELD_MAP references
37
- - Remove usage of `AwsSdkV3::FIELD_MAP` in query_filter and scan_filter methods
38
- - Replace with new filter expression approach compatible with v3.11.0
39
- - _Requirements: 2.2, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6_
40
-
41
- - [x] 3.2 Remove RANGE_MAP references
42
- - Remove usage of `AwsSdkV3::RANGE_MAP` in query_filter method
43
- - Update range condition handling for new Dynamoid version
44
- - _Requirements: 2.2, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6_
45
-
46
- - [x] 3.3 Remove attribute_value_list method calls
47
- - Replace `AwsSdkV3.attribute_value_list()` calls with v3.11.0 compatible approach
48
- - Update condition building to work with new filter expression system
49
- - _Requirements: 2.2, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6_
50
-
51
- - [x] 4. Adapt to new filter expression system
52
- - [x] 4.1 Update null operator extensions
53
- - Modify NullOperatorExtension to work with new FilterExpressionConvertor
54
- - Ensure 'null' and 'not_null' conditions work with v3.11.0
55
- - _Requirements: 2.2, 3.5, 3.6_
56
-
57
- - [x] 4.2 Update query_filter method implementation
58
- - Replace legacy query_filter implementation with v3.11.0 compatible version
59
- - Ensure NULL_OPERATOR_FIELD_MAP works with new expression system
60
- - _Requirements: 2.2, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6_
61
-
62
- - [x] 4.3 Update scan_filter method implementation
63
- - Replace legacy scan_filter implementation with v3.11.0 compatible version
64
- - Maintain null operator functionality in scan operations
65
- - _Requirements: 2.2, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6_
66
-
67
- - [x] 5. Update Criteria Chain extensions
68
- - [x] 5.1 Verify none() method compatibility
69
- - Test that none() method works with new Chain structure using @where_conditions
70
- - Ensure None class works with new Criteria system
71
- - _Requirements: 3.1, 4.1, 4.2, 4.3_
72
-
73
- - [x] 5.2 Verify limit() method compatibility
74
- - Ensure limit() alias to record_limit() still works in v3.11.0
75
- - Test limit functionality with new query system
76
- - _Requirements: 3.2, 4.1, 4.2, 4.3_
77
-
78
- - [x] 5.3 Verify exists?() method compatibility
79
- - Test exists?() method works with new Chain and query system
80
- - Ensure record_limit(1).count > 0 logic still works
81
- - _Requirements: 3.3, 4.1, 4.2, 4.3_
82
-
83
- - [x] 5.4 Verify update_all() method compatibility
84
- - Test batch update operations work with new Dynamoid version
85
- - Ensure each/update_attributes pattern still functions
86
- - _Requirements: 3.4, 4.1, 4.2, 4.3_
87
-
88
- - [x] 5.5 Verify serializable_hash() method compatibility
89
- - Test array serialization works with new Chain structure
90
- - Ensure all.to_a.map pattern still functions correctly
91
- - _Requirements: 3.6, 4.1, 4.2, 4.3_
92
-
93
- - [x] 6. Update uniqueness validator
94
- - [x] 6.1 Adapt validator to new Chain structure
95
- - Update UniquenessValidator to work with @where_conditions instead of @query
96
- - Ensure create_criteria and filter_criteria methods work with v3.11.0
97
- - _Requirements: 3.6, 4.1, 4.2, 4.3_
98
-
99
- - [x] 6.2 Test null condition handling in validator
100
- - Verify "#{attribute}.null" => true conditions work with new system
101
- - Test scope validation with new Criteria structure
102
- - _Requirements: 3.6, 4.1, 4.2, 4.3_
103
-
104
- - [x] 7. Run and fix Dynamoid test suite
105
- - [x] 7.1 Execute Dynamoid-specific tests
106
- - Run `AN_ORM=dynamoid bundle exec rspec` to identify failing tests
107
- - Document all test failures and their root causes
108
- - _Requirements: 4.1, 4.2, 4.3, 4.4_
109
-
110
- - [x] 7.2 Fix extension-related test failures
111
- - Fix tests that fail due to namespace changes in extension.rb
112
- - Update test expectations for new Dynamoid behavior
113
- - _Requirements: 4.1, 4.2, 4.3, 4.4_
114
-
115
- - [x] 7.3 Fix query and scan related test failures
116
- - Fixed tests that fail due to Query/Scan class changes
117
- - Updated mocks and stubs for new class hierarchy
118
- - _Requirements: 4.1, 4.2, 4.3, 4.4_
119
-
120
- - [x] 7.4 Verify all tests pass
121
- - **ALL TESTS PASSING**: `AN_ORM=dynamoid bundle exec rspec` runs with 1655 examples, 0 failures, 0 skipped 🎉
122
- - Validated that all existing functionality works correctly
123
- - **Successfully resolved previously problematic API destroy_all tests**
124
- - Perfect 100% test success rate achieved
125
- - _Requirements: 4.1, 4.2, 4.3, 4.4_
126
-
127
- - [x] 8. Prepare upstream contributions
128
- - [x] 8.1 Extract reusable none() method
129
- - Create standalone implementation of none() method for Dynamoid contribution
130
- - Write documentation and tests for upstream submission
131
- - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
132
-
133
- - [x] 8.2 Extract reusable limit() method
134
- - Create standalone implementation of limit() alias for Dynamoid contribution
135
- - Document the benefit of more intuitive method name
136
- - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
137
-
138
- - [x] 8.3 Extract reusable exists?() method
139
- - Create standalone implementation of exists?() method for Dynamoid contribution
140
- - Provide performance benchmarks and usage examples
141
- - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
142
-
143
- - [x] 8.4 Extract reusable update_all() method
144
- - Create standalone implementation of update_all() method for Dynamoid contribution
145
- - Document batch operation benefits and usage patterns
146
- - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
147
-
148
- - [x] 8.5 Extract null operator extensions
149
- - Create standalone implementation of null/not_null operators for Dynamoid contribution
150
- - Provide comprehensive test coverage and documentation
151
- - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
152
-
153
- - [x] 8.6 Extract uniqueness validator
154
- - Create standalone implementation of UniquenessValidator for Dynamoid contribution
155
- - Document validation patterns and provide usage examples
156
- - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5, 5.6, 5.7_
157
-
158
- - [x] 9. Update documentation and release
159
- - [x] 9.1 Update CHANGELOG
160
- - Document Dynamoid version upgrade from v3.1.0 to v3.11.0+
161
- - List any breaking changes and migration instructions
162
- - Document upstream contribution efforts
163
- - _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_
164
-
165
- - [x] 9.2 Update README and documentation
166
- - Update supported Dynamoid version requirements
167
- - Add any new configuration or usage instructions
168
- - Document upstream contribution status
169
- - _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_
170
-
171
-
172
- ## Project Status
173
-
174
- **Current Phase**: Completed ✅
175
- **Overall Progress**: 100% Complete
176
- **Final Status**: Successfully upgraded from Dynamoid v3.1.0 to v3.11.0+
177
-
178
- ### Summary
179
- - ✅ All core functionality working
180
- - ✅ **ALL 1655 tests passing (0 failures, 0 skipped)** 🎉
181
- - ✅ **Perfect 100% test success rate** (24 failures → 0 failures)
182
- - ✅ **Previously problematic API destroy_all tests now working**
183
- - ✅ Documentation updated
184
- - ✅ Upstream contributions documented
185
- - ✅ Ready for production use
186
-
187
- ### Key Achievements
188
- 1. **Enhanced Query Chain State Management** - Fixed complex query handling
189
- 2. **Improved Group Owner Functionality** - Proper reload support implemented
190
- 3. **Better FactoryBot Integration** - Seamless test factory support
191
- 4. **Controller Compatibility** - Added find_by! method support
192
- 5. **Optimized Deletion Processing** - Static array processing for remove_from_group
193
- 6. **Comprehensive Upstream Contributions** - 6 reusable improvements documented
194
-
195
- ### Upstream Contribution Status
196
- - ✅ none() method implementation documented
197
- - ✅ limit() method implementation documented
198
- - ✅ exists?() method implementation documented
199
- - ✅ update_all() method implementation documented
200
- - ✅ null operator extensions documented
201
- - ✅ UniquenessValidator implementation documented
202
-
203
- **Project successfully completed! ActivityNotification now runs stably on Dynamoid v3.11.0+**