apidae 1.2.13 → 1.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/apidae/import_controller.rb +2 -40
- data/app/helpers/apidae/application_helper.rb +1 -1
- data/app/helpers/apidae/extendable_helper.rb +4 -0
- data/app/models/apidae/apidae_data_parser.rb +6 -14
- data/app/models/apidae/export.rb +41 -0
- data/app/models/apidae/obj.rb +9 -16
- data/app/models/apidae/reference.rb +1 -1
- data/app/models/apidae/selection.rb +4 -3
- data/app/models/apidae/territory.rb +18 -0
- data/config/initializers/constants.rb +4 -7
- data/db/migrate/20201112080847_create_apidae_territories.rb +10 -0
- data/db/migrate/20210607214647_add_apidae_type_to_apidae_territories.rb +5 -0
- data/lib/apidae/version.rb +1 -1
- metadata +16 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1f8d7ad0798847cc0b3882958e5f557f1f01219
|
4
|
+
data.tar.gz: 94d139b245115c273ec4c73b385c380bf816da87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47dea0045600b59233e78a4616396aee8341de70e9121a335741fbe66d39ffea03e18503564a83c4cd9fe496ebe7058b7ba13690c902f794f46967146d65b16d
|
7
|
+
data.tar.gz: 2350154e37a3fac1d56eed268eb322309842fcf8b349c2e2b28c63af4605aa3cb15c1b629f31a60d740ffe6ec6b9778e9c2a9ae4f03414ae9c86a3023661c719
|
@@ -37,7 +37,7 @@ module Apidae
|
|
37
37
|
def run
|
38
38
|
success = true
|
39
39
|
Export.pending.each do |e|
|
40
|
-
success &&= import_data
|
40
|
+
success &&= e.import_data
|
41
41
|
end
|
42
42
|
success ? head(:ok) : head(:internal_server_error)
|
43
43
|
end
|
@@ -48,7 +48,7 @@ module Apidae
|
|
48
48
|
|
49
49
|
def create
|
50
50
|
@export = Export.new(export_params)
|
51
|
-
if @export.save &&
|
51
|
+
if @export.save && @export.import_data
|
52
52
|
redirect_to apidae.root_url, notice: 'Le fichier a bien été importé.'
|
53
53
|
else
|
54
54
|
flash.now[:alert] = "Une erreur s'est produite lors de l'import du fichier."
|
@@ -61,43 +61,5 @@ module Apidae
|
|
61
61
|
def export_params
|
62
62
|
params.require(:export).permit(:project_id, :file_url, :status)
|
63
63
|
end
|
64
|
-
|
65
|
-
def import_data(e)
|
66
|
-
success = true
|
67
|
-
begin
|
68
|
-
open(e.file_url) do |f|
|
69
|
-
begin
|
70
|
-
FileImport.import(f, e.project_id)
|
71
|
-
unless e.confirm_url.blank?
|
72
|
-
uri = URI(e.confirm_url)
|
73
|
-
req = Net::HTTP::Post.new(uri)
|
74
|
-
Net::HTTP.start(uri.hostname, uri.port) do |http|
|
75
|
-
http.request(req)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
e.update(status: Export::COMPLETE)
|
79
|
-
if Rails.application.config.respond_to?(:apidae_import_callback)
|
80
|
-
Rails.application.config.apidae_import_callback.call(e)
|
81
|
-
end
|
82
|
-
rescue Exception => ex
|
83
|
-
logger.error("Failed to import export file : #{e.file_url}")
|
84
|
-
logger.error("Error is : #{ex} \n#{ex.backtrace.join("\n") unless ex.backtrace.blank?}")
|
85
|
-
success = false
|
86
|
-
e.update(status: Export::CANCELLED)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
rescue OpenURI::HTTPError => err
|
90
|
-
logger.error("Failed to download export file : #{e.file_url}")
|
91
|
-
logger.error("Error is : #{err}")
|
92
|
-
success = false
|
93
|
-
e.update(status: Export::CANCELLED)
|
94
|
-
rescue Exception => e
|
95
|
-
logger.error "Failed to import file : #{e.file_url}"
|
96
|
-
logger.error("Error is : #{err}")
|
97
|
-
success = false
|
98
|
-
e.update(status: Export::CANCELLED)
|
99
|
-
end
|
100
|
-
success
|
101
|
-
end
|
102
64
|
end
|
103
65
|
end
|
@@ -151,7 +151,6 @@ module Apidae
|
|
151
151
|
name: localized_value(att, :nom, locale),
|
152
152
|
url: att[:traductionFichiers][0][:url].gsub('http:', 'https:'),
|
153
153
|
type: att[:type],
|
154
|
-
link: att[:link],
|
155
154
|
description: localized_value(att, :legende, locale)
|
156
155
|
}
|
157
156
|
end
|
@@ -223,7 +222,6 @@ module Apidae
|
|
223
222
|
loc_data[:latitude] = geoloc_details[:geoJson][:coordinates][1]
|
224
223
|
loc_data[:longitude] = geoloc_details[:geoJson][:coordinates][0]
|
225
224
|
end
|
226
|
-
loc_data[:altitude] = geoloc_details[:altitude] if geoloc_details
|
227
225
|
loc_data[:access] = node_value(geoloc_details, :complement) if geoloc_details
|
228
226
|
loc_data[:environments] = location_hash[:environnements].map {|e| e[:id]} if location_hash[:environnements]
|
229
227
|
end
|
@@ -238,7 +236,6 @@ module Apidae
|
|
238
236
|
openings_desc: node_value(openings_hash, :periodeEnClair, *locales),
|
239
237
|
openings_desc_mode: openings_hash[:periodeEnClairGenerationMode] == 'AUTOMATIQUE' ? MODE_AUTO : MODE_MANUAL,
|
240
238
|
openings: build_openings(openings_hash, *locales),
|
241
|
-
all_year_long: openings_hash[:ouvertTouteLAnnee] == 'OUVERT_TOUTE_L_ANNEE' ? 'true' : 'false',
|
242
239
|
time_periods: lists_ids(openings_hash[:indicationsPeriode]),
|
243
240
|
openings_extra: lists_ids(openings_hash[:ouverturesComplementaires])
|
244
241
|
}
|
@@ -278,8 +275,7 @@ module Apidae
|
|
278
275
|
(node_id(data_hash, :typeLabel) ? [node_id(data_hash, :typeLabel)] : []),
|
279
276
|
chains: lists_ids(data_hash[:chaines]) + nodes_ids(data_hash[:chaineEtLabel]),
|
280
277
|
area: apidae_obj.apidae_type == Obj::DOS ? data_hash.except(:classification) : node_value(data_hash, :lieuDePratique),
|
281
|
-
track: apidae_obj.apidae_type == Obj::EQU ?
|
282
|
-
tricky_sections: apidae_obj.apidae_type == Obj::EQU ? data_hash.dig(:itineraire, :passagesDelicats) : nil,
|
278
|
+
track: apidae_obj.apidae_type == Obj::EQU ? data_hash[:itineraire] : nil,
|
283
279
|
products: lists_ids(data_hash[:typesProduit], data_hash[:aopAocIgps], data_hash[:specialites]),
|
284
280
|
audience: lists_ids(prestations_hash[:typesClientele]),
|
285
281
|
animals: {allowed: prestations_hash[:animauxAcceptes] == 'ACCEPTES', desc: node_value(prestations_hash, :descriptifAnimauxAcceptes, *locales),
|
@@ -321,17 +317,13 @@ module Apidae
|
|
321
317
|
tags
|
322
318
|
end
|
323
319
|
|
324
|
-
def self.parse_booking(reservation_hash,
|
325
|
-
booking_hash = {}
|
320
|
+
def self.parse_booking(reservation_hash, *locales)
|
326
321
|
if reservation_hash
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
booking_hash[:visits_allowed] = visits_hash[:visitable] == true
|
332
|
-
booking_hash[:visits_desc] = node_value(visits_hash, :complementVisite, *locales)
|
322
|
+
{
|
323
|
+
booking_desc: node_value(reservation_hash, :complement, *locales),
|
324
|
+
booking_entities: reservation_hash[:organismes]
|
325
|
+
}
|
333
326
|
end
|
334
|
-
booking_hash
|
335
327
|
end
|
336
328
|
|
337
329
|
def self.parse_town(location_hash)
|
data/app/models/apidae/export.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'net/http'
|
3
|
+
|
1
4
|
module Apidae
|
2
5
|
class Export < ActiveRecord::Base
|
3
6
|
|
@@ -20,5 +23,43 @@ module Apidae
|
|
20
23
|
def self.pending
|
21
24
|
where(remote_status: 'SUCCESS', status: PENDING).order(:id)
|
22
25
|
end
|
26
|
+
|
27
|
+
def import_data
|
28
|
+
success = true
|
29
|
+
begin
|
30
|
+
open(file_url) do |f|
|
31
|
+
begin
|
32
|
+
FileImport.import(f, project_id)
|
33
|
+
unless confirm_url.blank?
|
34
|
+
uri = URI(confirm_url)
|
35
|
+
req = Net::HTTP::Post.new(uri)
|
36
|
+
Net::HTTP.start(uri.hostname, uri.port) do |http|
|
37
|
+
http.request(req)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
update(status: Export::COMPLETE)
|
41
|
+
if Rails.application.config.respond_to?(:apidae_import_callback)
|
42
|
+
Rails.application.config.apidae_import_callback.call(self)
|
43
|
+
end
|
44
|
+
rescue Exception => ex
|
45
|
+
logger.error("Failed to import export file : #{file_url}")
|
46
|
+
logger.error("Error is : #{ex} \n#{ex.backtrace.join("\n") unless ex.backtrace.blank?}")
|
47
|
+
success = false
|
48
|
+
update(status: Export::CANCELLED)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
rescue OpenURI::HTTPError => err
|
52
|
+
logger.error("Failed to download export file : #{file_url}")
|
53
|
+
logger.error("Error is : #{err}")
|
54
|
+
success = false
|
55
|
+
update(status: Export::CANCELLED)
|
56
|
+
rescue Exception => e
|
57
|
+
logger.error "Failed to import file : #{e.file_url}"
|
58
|
+
logger.error("Error is : #{err}")
|
59
|
+
success = false
|
60
|
+
e.update(status: Export::CANCELLED)
|
61
|
+
end
|
62
|
+
success
|
63
|
+
end
|
23
64
|
end
|
24
65
|
end
|
data/app/models/apidae/obj.rb
CHANGED
@@ -7,7 +7,6 @@ module Apidae
|
|
7
7
|
|
8
8
|
attr_accessor :locale
|
9
9
|
attr_accessor :obj_version
|
10
|
-
attr_accessor :obj_versions
|
11
10
|
|
12
11
|
store_accessor :title_data, :title
|
13
12
|
store_accessor :owner_data, :owner_name, :owner_id
|
@@ -15,15 +14,15 @@ module Apidae
|
|
15
14
|
store_accessor :pictures_data, :pictures
|
16
15
|
store_accessor :attachments_data, :attachments
|
17
16
|
store_accessor :type_data, :categories, :themes, :capacity, :classification, :labels, :chains, :area, :track,
|
18
|
-
:
|
17
|
+
:products, :audience, :animals, :animals_desc, :extra, :duration, :certifications, :business
|
19
18
|
store_accessor :entity_data, :entity_id, :entity_name, :service_provider_id, :is_service_provider
|
20
19
|
store_accessor :contact_data, :telephone, :email, :website, :google, :facebook, :twitter, :yelp, :trip_advisor, :fax,
|
21
20
|
:mobile_website, :shorty_url, :contacts
|
22
|
-
store_accessor :location_data, :address, :place, :latitude, :longitude, :access, :territories, :environments
|
21
|
+
store_accessor :location_data, :address, :place, :latitude, :longitude, :access, :territories, :environments
|
23
22
|
store_accessor :openings_data, :openings_desc, :openings_desc_mode, :openings, :time_periods, :openings_extra
|
24
23
|
store_accessor :rates_data, :rates_desc, :rates_desc_mode, :rates, :payment_methods, :includes, :excludes, :rates_extra
|
25
24
|
store_accessor :service_data, :services, :equipments, :comfort, :activities, :challenged, :languages
|
26
|
-
store_accessor :booking_data, :booking_desc, :booking_entities
|
25
|
+
store_accessor :booking_data, :booking_desc, :booking_entities
|
27
26
|
store_accessor :tags_data, :promo, :internal, :linked
|
28
27
|
store_accessor :version_data, :versioned_fields
|
29
28
|
|
@@ -84,7 +83,7 @@ module Apidae
|
|
84
83
|
COS => {node: :informationsCommerceEtService, subtype: :commerceEtServiceType},
|
85
84
|
DEG => {node: :informationsDegustation, subtype: :degustationType},
|
86
85
|
DOS => {node: :informationsDomaineSkiable, subtype: :domaineSkiableType},
|
87
|
-
EQU => {node: :informationsEquipement, subtype: :
|
86
|
+
EQU => {node: :informationsEquipement, subtype: :equipementType},
|
88
87
|
FEM => {node: :informationsFeteEtManifestation, subtype: :feteEtManifestationType},
|
89
88
|
HCO => {node: :informationsHebergementCollectif, subtype: :hebergementCollectifType},
|
90
89
|
HLO => {node: :informationsHebergementLocatif, subtype: :hebergementLocatifType},
|
@@ -101,7 +100,6 @@ module Apidae
|
|
101
100
|
after_initialize do
|
102
101
|
@locale = DEFAULT_LOCALE
|
103
102
|
@obj_version = DEFAULT_VERSION
|
104
|
-
@obj_versions = {}
|
105
103
|
end
|
106
104
|
|
107
105
|
def root_obj
|
@@ -113,15 +111,11 @@ module Apidae
|
|
113
111
|
end
|
114
112
|
|
115
113
|
def in_version(v)
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
else
|
120
|
-
if @obj_versions[v].nil?
|
121
|
-
@obj_versions[v] = versions.where(version: v).first
|
122
|
-
end
|
123
|
-
@obj_versions[v]
|
114
|
+
@cached_versions ||= {}
|
115
|
+
if @cached_versions[v].nil?
|
116
|
+
@cached_versions[v] = versions.where(version: v).first
|
124
117
|
end
|
118
|
+
@cached_versions[v]
|
125
119
|
end
|
126
120
|
|
127
121
|
def in_locale(l)
|
@@ -170,7 +164,6 @@ module Apidae
|
|
170
164
|
apidae_obj
|
171
165
|
end
|
172
166
|
|
173
|
-
# Note : overrides existing fields (not a merge)
|
174
167
|
def self.populate_fields(apidae_obj, object_data, locales)
|
175
168
|
type_fields = TYPES_DATA[object_data[:type]]
|
176
169
|
apidae_obj.last_update = DateTime.parse(object_data[:gestion][:dateModification]) unless object_data[:gestion].blank?
|
@@ -185,7 +178,7 @@ module Apidae
|
|
185
178
|
apidae_obj.town = ApidaeDataParser.parse_town(object_data[:localisation])
|
186
179
|
apidae_obj.openings_data = ApidaeDataParser.parse_openings(object_data[:ouverture], *locales)
|
187
180
|
apidae_obj.rates_data = ApidaeDataParser.parse_rates(object_data[:descriptionTarif], *locales)
|
188
|
-
apidae_obj.booking_data = ApidaeDataParser.parse_booking(object_data[:reservation],
|
181
|
+
apidae_obj.booking_data = ApidaeDataParser.parse_booking(object_data[:reservation], *locales)
|
189
182
|
apidae_obj.type_data = ApidaeDataParser.parse_type_data(apidae_obj, object_data[type_fields[:node]], object_data[:prestations],
|
190
183
|
object_data[:tourismeAffaires], *locales)
|
191
184
|
apidae_obj.pictures_data = ApidaeDataParser.parse_pictures_data(object_data[:illustrations], *locales)
|
@@ -10,7 +10,7 @@ module Apidae
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.import(refs_json)
|
13
|
-
|
13
|
+
locales = Rails.application.config.respond_to?(:apidae_locales) ? Rails.application.config.apidae_locales : [DEFAULT_LOCALE]
|
14
14
|
locales_map = Hash[locales.map {|loc| ["libelle#{loc.camelize.gsub('-', '')}".to_sym, loc]}]
|
15
15
|
refs_hashes = JSON.parse(refs_json, symbolize_names: true)
|
16
16
|
if refs_hashes.length != where("apidae_type != ?", INTERNAL).count
|
@@ -69,7 +69,7 @@ module Apidae
|
|
69
69
|
key = cache_key(:agenda, from, to)
|
70
70
|
res = $apidae_cache.read(key)
|
71
71
|
unless res
|
72
|
-
query_args = build_args(AGENDA_ENDPOINT, {selection_ids: [apidae_id], from: from, to: to})
|
72
|
+
query_args = build_args(AGENDA_ENDPOINT, {selection_ids: [apidae_id], from: from, to: to, count: 200})
|
73
73
|
res = query_api(query_args, true)
|
74
74
|
$apidae_cache.write(key, res)
|
75
75
|
end
|
@@ -142,14 +142,15 @@ module Apidae
|
|
142
142
|
|
143
143
|
if all_results
|
144
144
|
loops = 0
|
145
|
+
max_loops = only_ids ? 50 : MAX_LOOPS
|
145
146
|
query_args[:first] = 0
|
146
|
-
query_args[:count]
|
147
|
+
query_args[:count] ||= MAX_COUNT
|
147
148
|
query_args[:locales] ||= apidae_project && !apidae_project.locales.blank? ? apidae_project.locales : [DEFAULT_LOCALE]
|
148
149
|
response = JSON.parse get_response(query_args), symbolize_names: false
|
149
150
|
total = response['numFound']
|
150
151
|
query_result[:results] = (only_ids ? response['objetTouristiqueIds'] : response['objetsTouristiques']) || {}
|
151
152
|
|
152
|
-
while total > results_count(query_result) && loops <
|
153
|
+
while total > results_count(query_result) && loops < max_loops
|
153
154
|
loops += 1
|
154
155
|
query_args[:first] += MAX_COUNT
|
155
156
|
response = JSON.parse get_response(query_args), symbolize_names: false
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Apidae
|
2
|
+
class Territory < ApplicationRecord
|
3
|
+
def self.import(territories_json)
|
4
|
+
territories_hashes = JSON.parse(territories_json, symbolize_names: true)
|
5
|
+
territories_hashes.each do |t_data|
|
6
|
+
t = Territory.find_or_initialize_by(apidae_id: t_data[:id])
|
7
|
+
t.name = t_data.dig(:nom, :libelleFr)
|
8
|
+
|
9
|
+
t.save!
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.import_file(json_file)
|
14
|
+
territories_json = File.read(json_file)
|
15
|
+
import(territories_json)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -25,11 +25,8 @@ module Apidae
|
|
25
25
|
ALL_VERSIONS = [STANDARD_VERSION, WINTER_VERSION, SUMMER_VERSION, CHALLENGED_VERSION, BUSINESS_VERSION,
|
26
26
|
GROUPS_VERSION, ACTIVITIES_VERSION]
|
27
27
|
|
28
|
-
LOCALIZED_FIELDS = [:title, :short_desc, :long_desc, :pictures, :attachments,
|
29
|
-
:
|
30
|
-
ALL_FIELDS = LOCALIZED_FIELDS + [:theme_desc, :private_desc, :capacity, :telephone, :email, :website,
|
31
|
-
:
|
32
|
-
:openings, :openings_extra, :rates, :services, :payment_methods, :categories, :themes,
|
33
|
-
:labels, :chains, :classification, :challenged, :environments, :languages, :products,
|
34
|
-
:animals, :equipments, :comfort, :activities, :promo, :internal, :linked]
|
28
|
+
LOCALIZED_FIELDS = [:title, :short_desc, :long_desc, :pictures, :attachments, :openings_desc, :rates_desc,
|
29
|
+
:includes, :excludes, :extra, :booking_desc]
|
30
|
+
ALL_FIELDS = LOCALIZED_FIELDS + [:theme_desc, :private_desc, :capacity, :telephone, :email, :website, :services,
|
31
|
+
:equipments, :comfort, :activities, :promo, :internal, :linked]
|
35
32
|
end
|
data/lib/apidae/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apidae
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean-Baptiste Vilain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '6.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pg
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -31,6 +31,9 @@ dependencies:
|
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.1'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '2.0'
|
34
37
|
type: :runtime
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -38,20 +41,23 @@ dependencies:
|
|
38
41
|
- - "~>"
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '1.1'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.0'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: rubyzip
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '2.0'
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '2.0'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: jbuilder
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -91,6 +97,7 @@ files:
|
|
91
97
|
- app/helpers/apidae/apidae_helper.rb
|
92
98
|
- app/helpers/apidae/application_helper.rb
|
93
99
|
- app/helpers/apidae/dashboard_helper.rb
|
100
|
+
- app/helpers/apidae/extendable_helper.rb
|
94
101
|
- app/helpers/apidae/import_helper.rb
|
95
102
|
- app/helpers/apidae/objects_helper.rb
|
96
103
|
- app/helpers/apidae/references_helper.rb
|
@@ -104,6 +111,7 @@ files:
|
|
104
111
|
- app/models/apidae/reference.rb
|
105
112
|
- app/models/apidae/selection.rb
|
106
113
|
- app/models/apidae/selection_object.rb
|
114
|
+
- app/models/apidae/territory.rb
|
107
115
|
- app/models/apidae/town.rb
|
108
116
|
- app/views/apidae/dashboard/index.html.erb
|
109
117
|
- app/views/apidae/import/_form.html.erb
|
@@ -181,6 +189,8 @@ files:
|
|
181
189
|
- db/migrate/20200312150904_add_version_index_on_apidae_objs.rb
|
182
190
|
- db/migrate/20200522124205_rename_objs_contact_to_contact_data.rb
|
183
191
|
- db/migrate/20200528101957_add_is_active_to_apidae_references.rb
|
192
|
+
- db/migrate/20201112080847_create_apidae_territories.rb
|
193
|
+
- db/migrate/20210607214647_add_apidae_type_to_apidae_territories.rb
|
184
194
|
- lib/apidae.rb
|
185
195
|
- lib/apidae/engine.rb
|
186
196
|
- lib/apidae/version.rb
|