apidae 1.3.18 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 404091c3c4aeea7ead657d6f94d1c87729df31a856e1e2c84926e8e9dbe19367
4
- data.tar.gz: de47d5b8f2526a44586b55207d3dd466b867590a3ab78874b78d5179a37fdf6c
3
+ metadata.gz: acfd5f037ca1ba885ab7fc2d2ed11618947a96e8bb8847e051baee377a0181ec
4
+ data.tar.gz: 8f6a40a4382092ab12d4d356d0b8ca5a6d991a164ce8ce30fbbae5b48818f5c5
5
5
  SHA512:
6
- metadata.gz: 7dff3c671ee521d5fc73dd9d9a0061bf8d3815f6df24d121e677574d2406d2582533533b46b22505da22d4d639e206d228b66fdfbcfc6cc21bad8a956922c90a
7
- data.tar.gz: bad3ccfea997dcc9e2674b9bb0fc882581ef66391c0a11e8fbc3eed79ab599b1fedd2620e70330998d886694c54b9e2575a80497aab11cd8e976b0c676513f00
6
+ metadata.gz: 56a436f4892053be5b30c06535d95da37534986ce4c0283d3de0306a5184a96dbbd5a431589d1971b85a29fb27b9bac4482f99e946a3cefac1aa47fcbcb4df9e
7
+ data.tar.gz: 54df029782ed8fa2a7550702459f976b5768d2e8f01983e67a7bdb99d638094f6d195101b30e8e1eded29b77e115d6e1f6433a5105cb60e328a74419e6ee8a2e
@@ -214,21 +214,22 @@ module Apidae
214
214
  def self.parse_location_data(location_hash, type_data_hash, territories)
215
215
  loc_data = {}
216
216
  unless location_hash.blank?
217
- address_hash = location_hash[:adresse]
217
+ address_hash = location_hash[:adresse] || {}
218
218
  computed_address = []
219
219
  unless address_hash.blank?
220
- computed_address << address_hash[:adresse1] unless address_hash[:adresse1].blank?
221
- computed_address << address_hash[:adresse2] unless address_hash[:adresse2].blank?
222
- computed_address << address_hash[:adresse3] unless address_hash[:adresse3].blank?
220
+ computed_address << address_hash[:adresse1]
221
+ computed_address << address_hash[:adresse2]
222
+ computed_address << address_hash[:adresse3]
223
223
  end
224
224
  loc_data.merge!({address: computed_address})
225
- loc_data.merge!({place: type_data_hash[:nomLieu]}) if type_data_hash
225
+ loc_data.merge!({place: (type_data_hash ? type_data_hash[:nomLieu] : nil) || address_hash[:nomDuLieu]})
226
226
  geoloc_details = location_hash[:geolocalisation]
227
227
  if geoloc_details && geoloc_details[:valide] && geoloc_details[:geoJson]
228
228
  loc_data[:latitude] = geoloc_details[:geoJson][:coordinates][1]
229
229
  loc_data[:longitude] = geoloc_details[:geoJson][:coordinates][0]
230
230
  end
231
231
  loc_data[:map_reference] = geoloc_details[:reperePlan]
232
+ loc_data[:valid] = geoloc_details[:valide] == true
232
233
  loc_data[:altitude] = geoloc_details[:altitude] if geoloc_details
233
234
  loc_data[:access] = node_value(geoloc_details, :complement) if geoloc_details
234
235
  loc_data[:environments] = location_hash[:environnements].map {|e| e[:id]} if location_hash[:environnements]
@@ -10,7 +10,7 @@ module Apidae
10
10
  attr_accessor :obj_versions
11
11
 
12
12
  store_accessor :title_data, :title
13
- store_accessor :owner_data, :owner_name, :owner_id
13
+ store_accessor :owner_data, :owner_name, :owner_id, :polls
14
14
  store_accessor :description_data, :short_desc, :long_desc, :theme_desc, :private_desc
15
15
  store_accessor :pictures_data, :pictures
16
16
  store_accessor :attachments_data, :attachments
@@ -28,6 +28,8 @@ module Apidae
28
28
  store_accessor :tags_data, :promo, :internal, :linked
29
29
  store_accessor :version_data, :versioned_fields
30
30
 
31
+ before_update :archive_updated_fields
32
+
31
33
  ALL_FIELDS.each do |f|
32
34
  alias_method :"get_#{f}", :"#{f}"
33
35
  alias_method :"set_#{f}", :"#{f}="
@@ -105,6 +107,10 @@ module Apidae
105
107
  @obj_versions = {}
106
108
  end
107
109
 
110
+ def self.default_scope
111
+ where(root_obj_id: nil)
112
+ end
113
+
108
114
  def root_obj
109
115
  Obj.unscoped.where(id: root_obj_id).first
110
116
  end
@@ -138,12 +144,61 @@ module Apidae
138
144
  elsif root_val.respond_to?(:dig)
139
145
  root_val.dig(*nested_keys)
140
146
  else
141
- raise ArgumentError.new('Cannot call dig with these args')
147
+ raise ArgumentError.new('Cannot call dig with these args: ' + keys.to_s)
142
148
  end
143
149
  end
144
150
 
145
- def self.default_scope
146
- where(root_obj_id: nil)
151
+ def archive_updated_fields
152
+ self.prev_data ||= {}
153
+ ignored_root_attributes = ['prev_data', 'updated_at']
154
+ changed_attributes.each_pair do |attr, prev_value|
155
+ unless ignored_root_attributes.include?(attr)
156
+ if prev_value.is_a?(Hash)
157
+ archive_hash_value(prev_value)
158
+ else
159
+ self.prev_data[attr] = {'prev' => prev_value, 'ts' => Time.current.to_i}
160
+ end
161
+ end
162
+ end
163
+ end
164
+
165
+ def archive_hash_value(prev_value, parent = nil)
166
+ ts = Time.current.to_i
167
+ ignored_sub_attributes = ['opening_days']
168
+ prev_value.each_pair do |sub_attr, prev_sub_val|
169
+ if Apidae::ALL_LOCALES.include?(sub_attr) && parent
170
+ new_val = in_locale(sub_attr).send(parent)
171
+ elsif /^\d+$/.match?(sub_attr) && parent
172
+ # Note : email / website / telephone etc... case - To be improved using changes method and a proper Hash/Array diff
173
+ new_val = in_locale(Apidae::DEFAULT_LOCALE)[parent]
174
+ else
175
+ new_val = parent ? in_locale(Apidae::DEFAULT_LOCALE).dig(parent, sub_attr) : (respond_to?(sub_attr) ? in_locale(Apidae::DEFAULT_LOCALE).send(sub_attr) : in_locale(Apidae::DEFAULT_LOCALE)[sub_attr])
176
+ end
177
+ unless ignored_sub_attributes.include?(sub_attr) || new_val == prev_sub_val
178
+ if parent
179
+ self.prev_data[parent][sub_attr] ||= {}
180
+ else
181
+ self.prev_data[sub_attr] ||= {}
182
+ end
183
+ if prev_sub_val.is_a?(Hash) && parent.nil?
184
+ archive_hash_value(prev_sub_val, sub_attr)
185
+ elsif prev_sub_val.is_a?(Array) && prev_sub_val.all? {|v| v.is_a?(Hash) && (v['id'] || v['identifiant'])}
186
+ archived_val = {'prev' => prev_sub_val.map {|v| v['id'] || v['identifiant']}, 'ts' => ts}
187
+ if parent
188
+ self.prev_data[parent][sub_attr] = archived_val
189
+ else
190
+ self.prev_data[sub_attr] = archived_val
191
+ end
192
+ else
193
+ archived_val = {'prev' => prev_sub_val, 'ts' => ts}
194
+ if parent
195
+ self.prev_data[parent][sub_attr] = archived_val
196
+ else
197
+ self.prev_data[sub_attr] = archived_val
198
+ end
199
+ end
200
+ end
201
+ end
147
202
  end
148
203
 
149
204
  def self.add_object(object_data, locales, versions)
@@ -0,0 +1,5 @@
1
+ class AddPrevDataToApidaeObjs < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :apidae_objs, :prev_data, :jsonb
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Apidae
2
- VERSION = "1.3.18"
2
+ VERSION = "1.4.0"
3
3
  end
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 2021_06_07_214647) do
13
+ ActiveRecord::Schema.define(version: 2023_02_06_113335) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -69,6 +69,7 @@ ActiveRecord::Schema.define(version: 2021_06_07_214647) do
69
69
  t.datetime "last_update"
70
70
  t.jsonb "owner_data"
71
71
  t.jsonb "version_data"
72
+ t.jsonb "prev_data"
72
73
  t.index ["apidae_id"], name: "apidae_objs_apidae_id"
73
74
  t.index ["root_obj_id", "version"], name: "index_apidae_objs_on_root_obj_id_and_version", unique: true
74
75
  t.index ["root_obj_id"], name: "apidae_objs_root_obj_id"
@@ -19,177 +19,19 @@ callback this way:
19
19
  That block runs when the application boots, and every time there is a reload.
20
20
  For historical reasons, it may run twice, so it has to be idempotent.
21
21
 
22
- Check the "Autoloading and Reloading Constants" guide to learn more about how
23
- Rails autoloads and reloads.
24
- (called from <top (required)> at /Users/jbvilain/workspace/apidae-engine-rails/test/dummy/config/environment.rb:5)
25
- DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
26
-
27
- Being able to do this is deprecated. Autoloading during initialization is going
28
- to be an error condition in future versions of Rails.
29
-
30
- Reloading does not reboot the application, and therefore code executed during
31
- initialization does not run again. So, if you reload Apidae::ApidaeHelper, for example,
32
- the expected changes won't be reflected in that stale Module object.
33
-
34
- `config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
35
-
36
- In order to autoload safely at boot time, please wrap your code in a reloader
37
- callback this way:
38
-
39
- Rails.application.reloader.to_prepare do
40
- # Autoload classes and modules needed at boot time here.
41
- end
42
-
43
- That block runs when the application boots, and every time there is a reload.
44
- For historical reasons, it may run twice, so it has to be idempotent.
45
-
46
- Check the "Autoloading and Reloading Constants" guide to learn more about how
47
- Rails autoloads and reloads.
48
- (called from <top (required)> at /Users/jbvilain/workspace/code/apidae-engine-rails/test/dummy/config/environment.rb:5)
49
- DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
50
-
51
- Being able to do this is deprecated. Autoloading during initialization is going
52
- to be an error condition in future versions of Rails.
53
-
54
- Reloading does not reboot the application, and therefore code executed during
55
- initialization does not run again. So, if you reload Apidae::ApidaeHelper, for example,
56
- the expected changes won't be reflected in that stale Module object.
57
-
58
- `config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
59
-
60
- In order to autoload safely at boot time, please wrap your code in a reloader
61
- callback this way:
62
-
63
- Rails.application.reloader.to_prepare do
64
- # Autoload classes and modules needed at boot time here.
65
- end
66
-
67
- That block runs when the application boots, and every time there is a reload.
68
- For historical reasons, it may run twice, so it has to be idempotent.
69
-
70
- Check the "Autoloading and Reloading Constants" guide to learn more about how
71
- Rails autoloads and reloads.
72
- (called from <top (required)> at /Users/jbvilain/workspace/code/apidae-engine-rails/test/dummy/config/environment.rb:5)
73
- DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
74
-
75
- Being able to do this is deprecated. Autoloading during initialization is going
76
- to be an error condition in future versions of Rails.
77
-
78
- Reloading does not reboot the application, and therefore code executed during
79
- initialization does not run again. So, if you reload Apidae::ApidaeHelper, for example,
80
- the expected changes won't be reflected in that stale Module object.
81
-
82
- `config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
83
-
84
- In order to autoload safely at boot time, please wrap your code in a reloader
85
- callback this way:
86
-
87
- Rails.application.reloader.to_prepare do
88
- # Autoload classes and modules needed at boot time here.
89
- end
90
-
91
- That block runs when the application boots, and every time there is a reload.
92
- For historical reasons, it may run twice, so it has to be idempotent.
93
-
94
- Check the "Autoloading and Reloading Constants" guide to learn more about how
95
- Rails autoloads and reloads.
96
- (called from <top (required)> at /Users/jbvilain/workspace/code/apidae-engine-rails/test/dummy/config/environment.rb:5)
97
- DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
98
-
99
- Being able to do this is deprecated. Autoloading during initialization is going
100
- to be an error condition in future versions of Rails.
101
-
102
- Reloading does not reboot the application, and therefore code executed during
103
- initialization does not run again. So, if you reload Apidae::ApidaeHelper, for example,
104
- the expected changes won't be reflected in that stale Module object.
105
-
106
- `config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
107
-
108
- In order to autoload safely at boot time, please wrap your code in a reloader
109
- callback this way:
110
-
111
- Rails.application.reloader.to_prepare do
112
- # Autoload classes and modules needed at boot time here.
113
- end
114
-
115
- That block runs when the application boots, and every time there is a reload.
116
- For historical reasons, it may run twice, so it has to be idempotent.
117
-
118
- Check the "Autoloading and Reloading Constants" guide to learn more about how
119
- Rails autoloads and reloads.
120
- (called from <top (required)> at /Users/jbvilain/workspace/code/apidae-engine-rails/test/dummy/config/environment.rb:5)
121
- DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
122
-
123
- Being able to do this is deprecated. Autoloading during initialization is going
124
- to be an error condition in future versions of Rails.
125
-
126
- Reloading does not reboot the application, and therefore code executed during
127
- initialization does not run again. So, if you reload Apidae::ApidaeHelper, for example,
128
- the expected changes won't be reflected in that stale Module object.
129
-
130
- `config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
131
-
132
- In order to autoload safely at boot time, please wrap your code in a reloader
133
- callback this way:
134
-
135
- Rails.application.reloader.to_prepare do
136
- # Autoload classes and modules needed at boot time here.
137
- end
138
-
139
- That block runs when the application boots, and every time there is a reload.
140
- For historical reasons, it may run twice, so it has to be idempotent.
141
-
142
- Check the "Autoloading and Reloading Constants" guide to learn more about how
143
- Rails autoloads and reloads.
144
- (called from <top (required)> at /Users/jbvilain/workspace/code/apidae-engine-rails/test/dummy/config/environment.rb:5)
145
- DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
146
-
147
- Being able to do this is deprecated. Autoloading during initialization is going
148
- to be an error condition in future versions of Rails.
149
-
150
- Reloading does not reboot the application, and therefore code executed during
151
- initialization does not run again. So, if you reload Apidae::ApidaeHelper, for example,
152
- the expected changes won't be reflected in that stale Module object.
153
-
154
- `config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
155
-
156
- In order to autoload safely at boot time, please wrap your code in a reloader
157
- callback this way:
158
-
159
- Rails.application.reloader.to_prepare do
160
- # Autoload classes and modules needed at boot time here.
161
- end
162
-
163
- That block runs when the application boots, and every time there is a reload.
164
- For historical reasons, it may run twice, so it has to be idempotent.
165
-
166
- Check the "Autoloading and Reloading Constants" guide to learn more about how
167
- Rails autoloads and reloads.
168
- (called from <top (required)> at /Users/jbvilain/workspace/code/apidae-engine-rails/test/dummy/config/environment.rb:5)
169
- DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
170
-
171
- Being able to do this is deprecated. Autoloading during initialization is going
172
- to be an error condition in future versions of Rails.
173
-
174
- Reloading does not reboot the application, and therefore code executed during
175
- initialization does not run again. So, if you reload Apidae::ApidaeHelper, for example,
176
- the expected changes won't be reflected in that stale Module object.
177
-
178
- `config.autoloader` is set to `classic`. These autoloaded constants would have been unloaded if `config.autoloader` had been set to `:zeitwerk`.
179
-
180
- In order to autoload safely at boot time, please wrap your code in a reloader
181
- callback this way:
182
-
183
- Rails.application.reloader.to_prepare do
184
- # Autoload classes and modules needed at boot time here.
185
- end
186
-
187
- That block runs when the application boots, and every time there is a reload.
188
- For historical reasons, it may run twice, so it has to be idempotent.
189
-
190
22
  Check the "Autoloading and Reloading Constants" guide to learn more about how
191
23
  Rails autoloads and reloads.
192
24
  (called from <top (required)> at /Users/jbvilain/workspace/code/apidae-engine-rails/test/dummy/config/environment.rb:5)
25
+ Apidae::Obj Load (0.8ms) SELECT "apidae_objs".* FROM "apidae_objs" WHERE "apidae_objs"."root_obj_id" IS NULL ORDER BY "apidae_objs"."id" ASC LIMIT $1 [["LIMIT", 1]]
26
+ TRANSACTION (1.0ms) BEGIN
27
+ Apidae::Obj Create (8.3ms) INSERT INTO "apidae_objs" ("apidae_type", "created_at", "updated_at", "description_data") VALUES ($1, $2, $3, $4) RETURNING "id" [["apidae_type", "test"], ["created_at", "2023-02-16 21:12:52.351303"], ["updated_at", "2023-02-16 21:12:52.351303"], ["description_data", "{\"short_desc\":{\"\":\"test desc\"}}"]]
28
+ TRANSACTION (0.7ms) COMMIT
29
+ TRANSACTION (0.2ms) BEGIN
30
+ Apidae::Obj Update (1.3ms) UPDATE "apidae_objs" SET "updated_at" = $1, "description_data" = $2 WHERE "apidae_objs"."id" = $3 [["updated_at", "2023-02-16 21:16:00.968796"], ["description_data", "{\"short_desc\":{\"\":\"test desc\",\"fr\":\"updated desc\"}}"], ["id", 1]]
31
+ TRANSACTION (0.7ms) COMMIT
32
+ TRANSACTION (0.2ms) BEGIN
33
+ Apidae::Obj Create (0.9ms) INSERT INTO "apidae_objs" ("apidae_type", "created_at", "updated_at", "description_data") VALUES ($1, $2, $3, $4) RETURNING "id" [["apidae_type", "HOTELLERIE"], ["created_at", "2023-02-16 21:17:36.422310"], ["updated_at", "2023-02-16 21:17:36.422310"], ["description_data", "{\"short_desc\":{\"fr\":\"short desc fr\"}}"]]
34
+ TRANSACTION (1.4ms) COMMIT
193
35
  DEPRECATION WARNING: Initialization autoloaded the constants Apidae::ApidaeHelper, Apidae::ApplicationHelper, Apidae::ApiHelper, Apidae::DashboardHelper, Apidae::ExtendableHelper, Apidae::ImportHelper, Apidae::ObjectsHelper, Apidae::ReferencesHelper, Apidae::SelectionsHelper, and Apidae::ApplicationController.
194
36
 
195
37
  Being able to do this is deprecated. Autoloading during initialization is going