apidae 1.2.13 → 1.3.3
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.
- 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
|