global_registry_models 0.1.0 → 0.7.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/global_registry_models/.DS_Store +0 -0
- data/lib/global_registry_models/api_operations/delete.rb +22 -0
- data/lib/global_registry_models/api_operations/finders.rb +37 -0
- data/lib/global_registry_models/api_operations/persistence.rb +58 -0
- data/lib/global_registry_models/api_operations/search.rb +44 -0
- data/lib/global_registry_models/collection.rb +74 -0
- data/lib/global_registry_models/common_base.rb +50 -0
- data/lib/global_registry_models/entity/.DS_Store +0 -0
- data/lib/global_registry_models/entity/base.rb +9 -60
- data/lib/global_registry_models/entity/entity_collection.rb +66 -0
- data/lib/global_registry_models/entity/ministry.rb +37 -5
- data/lib/global_registry_models/entity/target_area.rb +5 -1
- data/lib/global_registry_models/entity_type/.DS_Store +0 -0
- data/lib/global_registry_models/entity_type/base.rb +21 -0
- data/lib/global_registry_models/entity_type/entity_type.rb +49 -0
- data/lib/global_registry_models/entity_type/field.rb +34 -0
- data/lib/global_registry_models/errors/record_invalid.rb +4 -0
- data/lib/global_registry_models/measurement_type/.DS_Store +0 -0
- data/lib/global_registry_models/measurement_type/base.rb +19 -0
- data/lib/global_registry_models/measurement_type/measurement_type.rb +19 -0
- data/lib/global_registry_models/relationship_type/.DS_Store +0 -0
- data/lib/global_registry_models/relationship_type/base.rb +19 -0
- data/lib/global_registry_models/relationship_type/involved_type.rb +10 -0
- data/lib/global_registry_models/relationship_type/relationship_type.rb +26 -0
- data/lib/global_registry_models/response_parser.rb +15 -6
- data/lib/global_registry_models/version.rb +1 -1
- data/lib/global_registry_models.rb +20 -4
- metadata +23 -6
- data/lib/global_registry_models/entity/api_operations/delete.rb +0 -24
- data/lib/global_registry_models/entity/api_operations/finders.rb +0 -39
- data/lib/global_registry_models/entity/api_operations/search.rb +0 -37
- data/lib/global_registry_models/entity/collection.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7895360323ba09f09b55f58dea945f55788c670f
|
4
|
+
data.tar.gz: a6271ef03712e14a098d51b9da697bd6c19cd59e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a14f13b4bbf2dbc55752e938a9763afdb266840030d808b64cdb3a0a1467381416103af25bb166a629580105dc5addaa4de9ef26ca332700cc47f91ae2e7d9b2
|
7
|
+
data.tar.gz: d61dcaba0c28ebb714e7a02a8d378c5ad73e06d229cdc1c7b51c95a8f4109d4772131c036a5cb0cc50c1c860df9372f55c2b0419423181c54a3f88ccd0a88a3c
|
data/.gitignore
CHANGED
Binary file
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module GlobalRegistryModels
|
2
|
+
module APIOperations
|
3
|
+
module Delete
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def delete(id)
|
8
|
+
GlobalRegistry::Entity.delete id
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def delete
|
13
|
+
if id.present?
|
14
|
+
self.class.delete id
|
15
|
+
else
|
16
|
+
false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'global_registry'
|
3
|
+
require 'global_registry_models/retryer'
|
4
|
+
|
5
|
+
module GlobalRegistryModels
|
6
|
+
module APIOperations
|
7
|
+
module Finders
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
|
12
|
+
def all!(filters: nil, start_page: 1, per_page: nil, order: nil, fields: nil, ruleset: nil, max_attempts: 1)
|
13
|
+
GlobalRegistryModels::Collection.new(meta: {}, list: []).tap do |collection|
|
14
|
+
page_num = start_page
|
15
|
+
loop do
|
16
|
+
sub_collection = GlobalRegistryModels::Retryer.new(RestClient::InternalServerError, max_attempts: max_attempts).try do
|
17
|
+
self.search(filters: filters, page: page_num, per_page: per_page, order: order, fields: fields, ruleset: ruleset)
|
18
|
+
end
|
19
|
+
break if sub_collection.blank?
|
20
|
+
collection.concat sub_collection.all
|
21
|
+
page_num += 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def find(id)
|
27
|
+
new GlobalRegistry::Entity.find(id)['entity'][name]
|
28
|
+
end
|
29
|
+
|
30
|
+
def page(page_number = 1)
|
31
|
+
search page: page_number
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module GlobalRegistryModels
|
2
|
+
module APIOperations
|
3
|
+
module Persistence
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def create!(attributes)
|
8
|
+
entity = new(attributes.with_indifferent_access.except(:id))
|
9
|
+
if entity.valid?
|
10
|
+
attribute_keys_to_create = attributes.keys.collect(&:to_sym) & writeable_attributes
|
11
|
+
create_attributes = entity.attributes.with_indifferent_access.slice(*attribute_keys_to_create)
|
12
|
+
new GlobalRegistry::Entity.post({ entity: { name => create_attributes }})['entity'][name]
|
13
|
+
else
|
14
|
+
raise GlobalRegistryModels::RecordInvalid.new
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def create(attributes)
|
19
|
+
create! attributes
|
20
|
+
rescue GlobalRegistryModels::RecordInvalid
|
21
|
+
false
|
22
|
+
end
|
23
|
+
|
24
|
+
def update!(id, attributes)
|
25
|
+
entity = new(attributes)
|
26
|
+
if entity.valid?
|
27
|
+
attribute_keys_to_update = (attributes.keys.collect(&:to_sym) << :client_integration_id) & writeable_attributes
|
28
|
+
update_attributes = entity.attributes.with_indifferent_access.slice(*attribute_keys_to_update)
|
29
|
+
new GlobalRegistry::Entity.put(id, { entity: { name => update_attributes }})['entity'][name]
|
30
|
+
else
|
31
|
+
raise GlobalRegistryModels::RecordInvalid.new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def update(id, attributes)
|
36
|
+
update! id, attributes
|
37
|
+
rescue GlobalRegistryModels::RecordInvalid
|
38
|
+
false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def save
|
43
|
+
if valid?
|
44
|
+
result = id.present? ? self.class.update(id, attributes) : self.class.create(attributes)
|
45
|
+
result ? self.id = result.id : false
|
46
|
+
else
|
47
|
+
false
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def update!(update_attributes)
|
52
|
+
self.class.update! id, { client_integration_id: client_integration_id }.with_indifferent_access.merge(update_attributes)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module GlobalRegistryModels
|
2
|
+
module APIOperations
|
3
|
+
module Search
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
|
8
|
+
def search(filters: nil, page: nil, per_page: nil, order: nil, fields: nil, ruleset: nil)
|
9
|
+
#params = search_params(filters, name, page, per_page, order, fields, ruleset)
|
10
|
+
|
11
|
+
params = search_params.merge({
|
12
|
+
page: page,
|
13
|
+
per_page: per_page,
|
14
|
+
order: order,
|
15
|
+
fields: fields,
|
16
|
+
ruleset: ruleset
|
17
|
+
}).delete_if { |_, v| v.blank? }
|
18
|
+
|
19
|
+
params = clean_params(filters, params)
|
20
|
+
|
21
|
+
response = GlobalRegistryModels::ResponseParser.new(global_registry_resource.get(params))
|
22
|
+
|
23
|
+
Collection.new meta: response.meta, list: response.objects
|
24
|
+
end
|
25
|
+
|
26
|
+
def clean_params( filters, params )
|
27
|
+
filters.try(:reject!) { |_, v| v.blank? }
|
28
|
+
if filters.present?
|
29
|
+
# We need to generate a hash like this: { 'filters[name]' => 'name query', 'filters[attribute][nested_attribute]' => 'nested_attribute query' }
|
30
|
+
# It just so happens we can use CGI::parse to do it.
|
31
|
+
filter_params_hash = CGI::parse({ filters: filters }.to_query)
|
32
|
+
filter_params_hash.each { |k, v| filter_params_hash[k] = v.first if v.is_a?(Array) } # CGI::parse returns values as arrays, we just want string values
|
33
|
+
|
34
|
+
params.merge! filter_params_hash
|
35
|
+
end
|
36
|
+
|
37
|
+
params
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
module GlobalRegistryModels
|
4
|
+
class Collection
|
5
|
+
include Enumerable
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
def_delegators :@list, :[], :size, :concat, :blank?, :present?
|
9
|
+
|
10
|
+
def initialize(meta:, list:)
|
11
|
+
@meta = meta
|
12
|
+
@list = list
|
13
|
+
end
|
14
|
+
|
15
|
+
def each
|
16
|
+
@list.each { |object| yield object }
|
17
|
+
end
|
18
|
+
|
19
|
+
def first
|
20
|
+
@list.first
|
21
|
+
end
|
22
|
+
|
23
|
+
def last
|
24
|
+
@list.last
|
25
|
+
end
|
26
|
+
|
27
|
+
def all
|
28
|
+
@list
|
29
|
+
end
|
30
|
+
|
31
|
+
def page
|
32
|
+
@meta['page']
|
33
|
+
end
|
34
|
+
|
35
|
+
def last_page?
|
36
|
+
!@meta['next_page']
|
37
|
+
end
|
38
|
+
|
39
|
+
def first_page?
|
40
|
+
page == 1
|
41
|
+
end
|
42
|
+
|
43
|
+
def next_page
|
44
|
+
last_page? ? nil : page + 1
|
45
|
+
end
|
46
|
+
|
47
|
+
def prev_page
|
48
|
+
first_page? ? nil : page - 1
|
49
|
+
end
|
50
|
+
|
51
|
+
def from
|
52
|
+
@meta['from']
|
53
|
+
end
|
54
|
+
|
55
|
+
def to
|
56
|
+
@meta['to']
|
57
|
+
end
|
58
|
+
|
59
|
+
def per
|
60
|
+
(to - from) + 1
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_csv
|
64
|
+
CSV.generate do |csv|
|
65
|
+
attributes = @list.first.attributes.collect(&:first).sort
|
66
|
+
csv << attributes
|
67
|
+
@list.each do |entity|
|
68
|
+
csv << attributes.collect { |attribute| entity.attributes[attribute] }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# A base class providing CRUD for GlobalRegistry Entities.
|
2
|
+
# API doc at https://github.com/CruGlobal/global_registry_docs/wiki/Entities
|
3
|
+
|
4
|
+
require 'active_model'
|
5
|
+
require 'virtus'
|
6
|
+
|
7
|
+
module GlobalRegistryModels
|
8
|
+
class CommonBase
|
9
|
+
include ActiveModel::Model
|
10
|
+
include ActiveModel::Validations
|
11
|
+
include Virtus.model
|
12
|
+
|
13
|
+
include GlobalRegistryModels::APIOperations::Persistence
|
14
|
+
include GlobalRegistryModels::APIOperations::Finders
|
15
|
+
include GlobalRegistryModels::APIOperations::Search
|
16
|
+
include GlobalRegistryModels::APIOperations::Delete
|
17
|
+
|
18
|
+
|
19
|
+
attribute :id, String
|
20
|
+
attribute :client_integration_id, String
|
21
|
+
|
22
|
+
validates_presence_of :client_integration_id
|
23
|
+
|
24
|
+
def self.title
|
25
|
+
name.titleize
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.attribute_names
|
29
|
+
attribute_set.collect(&:name)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.filterable_attributes
|
33
|
+
attribute_names - [:id]
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.identifying_attributes
|
37
|
+
[:id]
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.writeable_attributes
|
41
|
+
attribute_names - [:id]
|
42
|
+
end
|
43
|
+
|
44
|
+
# The name of the entity class. The entity name is required in the api responses and requests, hence the need for this class method.
|
45
|
+
def self.name
|
46
|
+
to_s.gsub(/.*::/, '').underscore
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
Binary file
|
@@ -1,73 +1,22 @@
|
|
1
1
|
# A base class providing CRUD for GlobalRegistry Entities.
|
2
2
|
# API doc at https://github.com/CruGlobal/global_registry_docs/wiki/Entities
|
3
3
|
|
4
|
-
|
5
|
-
require 'virtus'
|
4
|
+
|
6
5
|
|
7
6
|
module GlobalRegistryModels
|
8
7
|
module Entity
|
9
|
-
class Base
|
10
|
-
include ActiveModel::Model
|
11
|
-
include ActiveModel::Validations
|
12
|
-
include Virtus.model
|
13
|
-
|
14
|
-
include GlobalRegistryModels::Entity::APIOperations::Finders
|
15
|
-
include GlobalRegistryModels::Entity::APIOperations::Search
|
16
|
-
include GlobalRegistryModels::Entity::APIOperations::Delete
|
17
|
-
|
18
|
-
attribute :id, String
|
19
|
-
attribute :client_integration_id, String
|
8
|
+
class Base < CommonBase
|
20
9
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
10
|
+
def self.search_params
|
11
|
+
{
|
12
|
+
entity_type: name
|
13
|
+
}
|
25
14
|
end
|
26
15
|
|
27
|
-
def self.
|
28
|
-
|
16
|
+
def self.global_registry_resource
|
17
|
+
GlobalRegistry::Entity
|
29
18
|
end
|
30
|
-
|
31
|
-
def self.filterable_attributes
|
32
|
-
attribute_names
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.identifying_attributes
|
36
|
-
[:id]
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.create(attributes)
|
40
|
-
attributes = attributes.except(:id)
|
41
|
-
if new(attributes).valid?
|
42
|
-
new GlobalRegistry::Entity.post({ entity: { name => attributes }})['entity'][name]
|
43
|
-
else
|
44
|
-
false
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.update(id, attributes)
|
49
|
-
attributes = attributes.except(:id)
|
50
|
-
if new(attributes).valid?
|
51
|
-
new GlobalRegistry::Entity.put(id, { entity: { name => attributes }})['entity'][name]
|
52
|
-
else
|
53
|
-
false
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
# The name of the entity class. The entity name is required in the api responses and requests, hence the need for this class method.
|
58
|
-
def self.name
|
59
|
-
to_s.gsub(/.*::/, '').underscore
|
60
|
-
end
|
61
|
-
|
62
|
-
def save
|
63
|
-
if valid?
|
64
|
-
result = id.present? ? self.class.update(id, attributes) : self.class.create(attributes)
|
65
|
-
result ? self.id = result.id : false
|
66
|
-
else
|
67
|
-
false
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
19
|
+
|
71
20
|
end
|
72
21
|
end
|
73
22
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
module GlobalRegistryModels
|
4
|
+
class EntityCollection < Collection
|
5
|
+
include Enumerable
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
def_delegators :list, :[], :size, :concat, :blank?, :present?
|
9
|
+
|
10
|
+
def initialize(meta:, list:)
|
11
|
+
@meta = meta
|
12
|
+
@list = list
|
13
|
+
end
|
14
|
+
|
15
|
+
def each
|
16
|
+
@entities.each { |entity| yield entity }
|
17
|
+
end
|
18
|
+
|
19
|
+
def all
|
20
|
+
@entities
|
21
|
+
end
|
22
|
+
|
23
|
+
def page
|
24
|
+
@meta['page']
|
25
|
+
end
|
26
|
+
|
27
|
+
def last_page?
|
28
|
+
!@meta['next_page']
|
29
|
+
end
|
30
|
+
|
31
|
+
def first_page?
|
32
|
+
page == 1
|
33
|
+
end
|
34
|
+
|
35
|
+
def next_page
|
36
|
+
last_page? ? nil : page + 1
|
37
|
+
end
|
38
|
+
|
39
|
+
def prev_page
|
40
|
+
first_page? ? nil : page - 1
|
41
|
+
end
|
42
|
+
|
43
|
+
def from
|
44
|
+
@meta['from']
|
45
|
+
end
|
46
|
+
|
47
|
+
def to
|
48
|
+
@meta['to']
|
49
|
+
end
|
50
|
+
|
51
|
+
def per
|
52
|
+
(to - from) + 1
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_csv
|
56
|
+
CSV.generate do |csv|
|
57
|
+
attributes = @entities.first.attributes.collect(&:first).sort
|
58
|
+
csv << attributes
|
59
|
+
@entities.each do |entity|
|
60
|
+
csv << attributes.collect { |attribute| entity.attributes[attribute] }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
@@ -1,13 +1,47 @@
|
|
1
1
|
module GlobalRegistryModels
|
2
2
|
module Entity
|
3
3
|
class Ministry < Base
|
4
|
-
attribute :
|
4
|
+
attribute :abbreviation, String
|
5
|
+
attribute :address1, String
|
6
|
+
attribute :address2, String
|
5
7
|
attribute :city, String
|
6
|
-
attribute :
|
8
|
+
attribute :country, String
|
9
|
+
attribute :currency_code, String
|
10
|
+
attribute :currency_symbol, String
|
11
|
+
attribute :dataserver_url, String
|
12
|
+
attribute :dta, String
|
13
|
+
attribute :fiscal_start_month, Integer
|
14
|
+
attribute :gma_status, String
|
15
|
+
attribute :has_ds, Boolean
|
16
|
+
attribute :has_gcm, Boolean
|
17
|
+
attribute :has_lim, Boolean
|
18
|
+
attribute :has_slm, Boolean
|
19
|
+
attribute :is_active, Boolean
|
20
|
+
attribute :is_fcx, Boolean
|
21
|
+
attribute :is_secure, Boolean
|
22
|
+
attribute :lane, String
|
23
|
+
attribute :last_dataserver_donation, String
|
24
|
+
attribute :last_dataserver_transaction, String
|
25
|
+
attribute :last_financial_report, String
|
26
|
+
attribute :lmi_hide, String
|
27
|
+
attribute :lmi_show, String
|
7
28
|
attribute :location, String
|
29
|
+
attribute :location_zoom, Integer
|
30
|
+
attribute :logo_url, String
|
31
|
+
attribute :measurement_status, String
|
8
32
|
attribute :min_code, String
|
9
|
-
attribute :
|
33
|
+
attribute :ministry_brand, String
|
34
|
+
attribute :ministry_scope, String
|
10
35
|
attribute :ministry_type, String
|
36
|
+
attribute :name, String
|
37
|
+
attribute :note, String
|
38
|
+
attribute :phone, String
|
39
|
+
attribute :registered_name, String
|
40
|
+
attribute :sp_phone, String
|
41
|
+
attribute :stage, Integer
|
42
|
+
attribute :state, String
|
43
|
+
attribute :url, String
|
44
|
+
attribute :zip, String
|
11
45
|
|
12
46
|
def self.identifying_attributes
|
13
47
|
[:name, :country, :city, :min_code]
|
@@ -19,5 +53,3 @@ module GlobalRegistryModels
|
|
19
53
|
end
|
20
54
|
end
|
21
55
|
end
|
22
|
-
|
23
|
-
|
@@ -35,7 +35,11 @@ module GlobalRegistryModels
|
|
35
35
|
attribute :zip, String
|
36
36
|
|
37
37
|
def self.identifying_attributes
|
38
|
-
[:name, :country, :state
|
38
|
+
[:name, :country, :state]
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.writeable_attributes
|
42
|
+
super - [:gate, :highest_offering, :institution_type, :is_closed]
|
39
43
|
end
|
40
44
|
|
41
45
|
def to_s
|
Binary file
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# A base class providing CRUD for GlobalRegistry Entities.
|
2
|
+
# API doc at https://github.com/CruGlobal/global_registry_docs/wiki/Entities
|
3
|
+
|
4
|
+
|
5
|
+
module GlobalRegistryModels
|
6
|
+
module EntityType
|
7
|
+
class Base < CommonBase
|
8
|
+
|
9
|
+
def self.search_params
|
10
|
+
{
|
11
|
+
field_type: "entity"
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.global_registry_resource
|
16
|
+
GlobalRegistry::EntityType
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module GlobalRegistryModels
|
2
|
+
module EntityType
|
3
|
+
class EntityType < Base
|
4
|
+
attribute :id, String
|
5
|
+
attribute :name, String
|
6
|
+
attribute :description, Boolean
|
7
|
+
attribute :is_editable, Boolean
|
8
|
+
attribute :field_type, String
|
9
|
+
attribute :data_visibility, String
|
10
|
+
attribute :enum_values, Array
|
11
|
+
attribute :unique_value, Boolean
|
12
|
+
|
13
|
+
def initialize(params = {})
|
14
|
+
super(params)
|
15
|
+
create_fields(params["fields"]) if params["fields"]
|
16
|
+
create_relationships(params["relationships"]) if params["relationships"]
|
17
|
+
end
|
18
|
+
|
19
|
+
def fields
|
20
|
+
@fields
|
21
|
+
end
|
22
|
+
|
23
|
+
def relationships
|
24
|
+
@relationships
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.identifying_attributes
|
28
|
+
[:name, :description, :is_editable, :field_type, :data_visibility]
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def create_fields fields
|
34
|
+
@fields=[]
|
35
|
+
fields.collect do |field|
|
36
|
+
@fields << Field.new(field)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def create_relationships relationships
|
41
|
+
@relationships=[]
|
42
|
+
relationships.collect do |relationship|
|
43
|
+
@relationships << GlobalRegistryModels::RelationshipType::RelationshipType.new(relationship["relationship_type"])
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module GlobalRegistryModels
|
2
|
+
module EntityType
|
3
|
+
class Field < Base
|
4
|
+
attribute :id, String
|
5
|
+
attribute :name, String
|
6
|
+
attribute :description, String
|
7
|
+
attribute :is_editable, Boolean
|
8
|
+
attribute :field_type, String
|
9
|
+
|
10
|
+
def initialize(params = {})
|
11
|
+
super(params)
|
12
|
+
create_children(params["fields"]) if params["fields"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def fields
|
16
|
+
@fields
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.identifying_attributes
|
20
|
+
[:name, :description, :is_editable, :field_type]
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def create_children fields
|
26
|
+
@fields=[]
|
27
|
+
fields.collect do |field|
|
28
|
+
@fields << Field.new(field)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# A base class providing CRUD for GlobalRegistry Entities.
|
2
|
+
# API doc at https://github.com/CruGlobal/global_registry_docs/wiki/Entities
|
3
|
+
|
4
|
+
|
5
|
+
module GlobalRegistryModels
|
6
|
+
module MeasurementType
|
7
|
+
class Base < CommonBase
|
8
|
+
|
9
|
+
def self.search_params
|
10
|
+
{}
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.global_registry_resource
|
14
|
+
GlobalRegistry::MeasurementType
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module GlobalRegistryModels
|
2
|
+
module MeasurementType
|
3
|
+
class MeasurementType < Base
|
4
|
+
attribute :id, String
|
5
|
+
attribute :name, String
|
6
|
+
attribute :description, String
|
7
|
+
attribute :related_entity_type_id, String
|
8
|
+
attribute :frequency, String
|
9
|
+
attribute :perm_link, String
|
10
|
+
attribute :unit, String
|
11
|
+
|
12
|
+
def self.identifying_attributes
|
13
|
+
[:name, :description, :frequency, :perm_link, :unit]
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# A base class providing CRUD for GlobalRegistry Entities.
|
2
|
+
# API doc at https://github.com/CruGlobal/global_registry_docs/wiki/Entities
|
3
|
+
|
4
|
+
|
5
|
+
module GlobalRegistryModels
|
6
|
+
module RelationshipType
|
7
|
+
class Base < CommonBase
|
8
|
+
|
9
|
+
def self.search_params
|
10
|
+
{}
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.global_registry_resource
|
14
|
+
GlobalRegistry::RelationshipType
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module GlobalRegistryModels
|
2
|
+
module RelationshipType
|
3
|
+
class RelationshipType < Base
|
4
|
+
attribute :id, String
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
super(params)
|
8
|
+
create_involved_types([params["relationship1"],params["relationship2"]]) if params["relationship1"] && params["relationship2"]
|
9
|
+
end
|
10
|
+
|
11
|
+
def involved_types
|
12
|
+
@involved_types
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def create_involved_types relationships
|
18
|
+
@involved_types=[]
|
19
|
+
relationships.each do |relationship|
|
20
|
+
@involved_types << InvolvedType.new(relationship)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -9,20 +9,29 @@ module GlobalRegistryModels
|
|
9
9
|
@response_hash['meta']
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
13
|
-
@
|
12
|
+
def objects
|
13
|
+
@objects ||= build_entities if @response_hash['entities']
|
14
|
+
@objects ||= build_other_types unless @response_hash['entities']
|
15
|
+
@objects
|
14
16
|
end
|
15
17
|
|
16
18
|
private
|
17
19
|
|
18
20
|
def build_entities
|
19
|
-
@response_hash['entities'].collect(&:flatten).collect do |
|
20
|
-
entity_class(
|
21
|
+
@response_hash['entities'].collect(&:flatten).collect do |object_type, object_attributes|
|
22
|
+
entity_class('Entity', object_type).new(object_attributes)
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
|
-
def
|
25
|
-
|
26
|
+
def build_other_types
|
27
|
+
objects_type, objects = @response_hash.first
|
28
|
+
objects.collect do |object_attributes|
|
29
|
+
entity_class(objects_type, objects_type).new(object_attributes)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def entity_class(module_type, object_type)
|
34
|
+
return "GlobalRegistryModels::#{ module_type.classify }::#{ object_type.classify }".constantize
|
26
35
|
end
|
27
36
|
end
|
28
37
|
end
|
@@ -4,18 +4,34 @@ require 'global_registry_models/version'
|
|
4
4
|
|
5
5
|
require 'global_registry_models/response_parser'
|
6
6
|
require 'global_registry_models/retryer'
|
7
|
+
require 'global_registry_models/collection'
|
7
8
|
|
8
|
-
require 'global_registry_models/
|
9
|
-
|
10
|
-
require 'global_registry_models/
|
9
|
+
require 'global_registry_models/errors/record_invalid'
|
10
|
+
|
11
|
+
require 'global_registry_models/api_operations/persistence'
|
12
|
+
require 'global_registry_models/api_operations/finders'
|
13
|
+
require 'global_registry_models/api_operations/search'
|
14
|
+
require 'global_registry_models/api_operations/delete'
|
15
|
+
|
16
|
+
require 'global_registry_models/common_base'
|
11
17
|
|
12
18
|
require 'global_registry_models/entity/base'
|
13
19
|
require 'global_registry_models/entity/area'
|
14
|
-
require 'global_registry_models/entity/collection'
|
15
20
|
require 'global_registry_models/entity/global_mcc'
|
16
21
|
require 'global_registry_models/entity/iso_country'
|
17
22
|
require 'global_registry_models/entity/ministry'
|
18
23
|
require 'global_registry_models/entity/target_area'
|
19
24
|
|
25
|
+
require 'global_registry_models/entity_type/base'
|
26
|
+
require 'global_registry_models/entity_type/entity_type'
|
27
|
+
require 'global_registry_models/entity_type/field'
|
28
|
+
|
29
|
+
require 'global_registry_models/relationship_type/base'
|
30
|
+
require 'global_registry_models/relationship_type/relationship_type'
|
31
|
+
require 'global_registry_models/relationship_type/involved_type'
|
32
|
+
|
33
|
+
require 'global_registry_models/measurement_type/base'
|
34
|
+
require 'global_registry_models/measurement_type/measurement_type'
|
35
|
+
|
20
36
|
module GlobalRegistryModels
|
21
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: global_registry_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sheldon Dueck
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -142,16 +142,33 @@ files:
|
|
142
142
|
- bin/setup
|
143
143
|
- global_registry_models.gemspec
|
144
144
|
- lib/global_registry_models.rb
|
145
|
-
- lib/global_registry_models
|
146
|
-
- lib/global_registry_models/
|
147
|
-
- lib/global_registry_models/
|
145
|
+
- lib/global_registry_models/.DS_Store
|
146
|
+
- lib/global_registry_models/api_operations/delete.rb
|
147
|
+
- lib/global_registry_models/api_operations/finders.rb
|
148
|
+
- lib/global_registry_models/api_operations/persistence.rb
|
149
|
+
- lib/global_registry_models/api_operations/search.rb
|
150
|
+
- lib/global_registry_models/collection.rb
|
151
|
+
- lib/global_registry_models/common_base.rb
|
152
|
+
- lib/global_registry_models/entity/.DS_Store
|
148
153
|
- lib/global_registry_models/entity/area.rb
|
149
154
|
- lib/global_registry_models/entity/base.rb
|
150
|
-
- lib/global_registry_models/entity/
|
155
|
+
- lib/global_registry_models/entity/entity_collection.rb
|
151
156
|
- lib/global_registry_models/entity/global_mcc.rb
|
152
157
|
- lib/global_registry_models/entity/iso_country.rb
|
153
158
|
- lib/global_registry_models/entity/ministry.rb
|
154
159
|
- lib/global_registry_models/entity/target_area.rb
|
160
|
+
- lib/global_registry_models/entity_type/.DS_Store
|
161
|
+
- lib/global_registry_models/entity_type/base.rb
|
162
|
+
- lib/global_registry_models/entity_type/entity_type.rb
|
163
|
+
- lib/global_registry_models/entity_type/field.rb
|
164
|
+
- lib/global_registry_models/errors/record_invalid.rb
|
165
|
+
- lib/global_registry_models/measurement_type/.DS_Store
|
166
|
+
- lib/global_registry_models/measurement_type/base.rb
|
167
|
+
- lib/global_registry_models/measurement_type/measurement_type.rb
|
168
|
+
- lib/global_registry_models/relationship_type/.DS_Store
|
169
|
+
- lib/global_registry_models/relationship_type/base.rb
|
170
|
+
- lib/global_registry_models/relationship_type/involved_type.rb
|
171
|
+
- lib/global_registry_models/relationship_type/relationship_type.rb
|
155
172
|
- lib/global_registry_models/response_parser.rb
|
156
173
|
- lib/global_registry_models/retryer.rb
|
157
174
|
- lib/global_registry_models/version.rb
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module GlobalRegistryModels
|
2
|
-
module Entity
|
3
|
-
module APIOperations
|
4
|
-
module Delete
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
module ClassMethods
|
8
|
-
def delete(id)
|
9
|
-
GlobalRegistry::Entity.delete id
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def delete
|
14
|
-
if id.present?
|
15
|
-
self.class.delete id
|
16
|
-
else
|
17
|
-
false
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'active_support'
|
2
|
-
require 'global_registry'
|
3
|
-
require 'global_registry_models/retryer'
|
4
|
-
|
5
|
-
module GlobalRegistryModels
|
6
|
-
module Entity
|
7
|
-
module APIOperations
|
8
|
-
module Finders
|
9
|
-
extend ActiveSupport::Concern
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
|
13
|
-
def all!(filters: nil, start_page: 1, per_page: nil, order: nil, fields: nil, ruleset: nil)
|
14
|
-
GlobalRegistryModels::Entity::Collection.new(meta: {}, entities: []).tap do |collection|
|
15
|
-
page_num = start_page
|
16
|
-
loop do
|
17
|
-
sub_collection = GlobalRegistryModels::Retryer.new(RestClient::InternalServerError).try do
|
18
|
-
self.search(filters: filters, page: page_num, per_page: per_page, order: order, fields: fields, ruleset: ruleset)
|
19
|
-
end
|
20
|
-
break if sub_collection.blank?
|
21
|
-
collection.concat sub_collection.all
|
22
|
-
page_num += 1
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def find(id)
|
28
|
-
new GlobalRegistry::Entity.find(id)['entity'][name]
|
29
|
-
end
|
30
|
-
|
31
|
-
def page(page_number = 1)
|
32
|
-
search page: page_number
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module GlobalRegistryModels
|
2
|
-
module Entity
|
3
|
-
module APIOperations
|
4
|
-
module Search
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
module ClassMethods
|
8
|
-
|
9
|
-
def search(filters: nil, page: nil, per_page: nil, order: nil, fields: nil, ruleset: nil)
|
10
|
-
params = {
|
11
|
-
entity_type: name,
|
12
|
-
page: page,
|
13
|
-
per_page: per_page,
|
14
|
-
order: order,
|
15
|
-
fields: fields,
|
16
|
-
ruleset: ruleset
|
17
|
-
}.delete_if { |_, v| v.blank? }
|
18
|
-
|
19
|
-
filters.try(:reject!) { |_, v| v.blank? }
|
20
|
-
if filters.present?
|
21
|
-
# We need to generate a hash like this: { 'filters[name]' => 'name query', 'filters[attribute][nested_attribute]' => 'nested_attribute query' }
|
22
|
-
# It just so happens we can use CGI::parse to do it.
|
23
|
-
filter_params_hash = CGI::parse({ filters: filters }.to_query)
|
24
|
-
filter_params_hash.each { |k, v| filter_params_hash[k] = v.first if v.is_a?(Array) } # CGI::parse returns values as arrays, we just want string values
|
25
|
-
|
26
|
-
params.merge! filter_params_hash
|
27
|
-
end
|
28
|
-
|
29
|
-
response = GlobalRegistryModels::ResponseParser.new Retryer.new(RestClient::InternalServerError).try { GlobalRegistry::Entity.get(params) }
|
30
|
-
Entity::Collection.new meta: response.meta, entities: response.entities
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'csv'
|
2
|
-
|
3
|
-
module GlobalRegistryModels
|
4
|
-
module Entity
|
5
|
-
class Collection
|
6
|
-
include Enumerable
|
7
|
-
extend Forwardable
|
8
|
-
|
9
|
-
def_delegators :@entities, :[], :size, :concat, :blank?, :present?
|
10
|
-
|
11
|
-
def initialize(meta:, entities:)
|
12
|
-
@meta = meta
|
13
|
-
@entities = entities
|
14
|
-
end
|
15
|
-
|
16
|
-
def each
|
17
|
-
@entities.each { |entity| yield entity }
|
18
|
-
end
|
19
|
-
|
20
|
-
def all
|
21
|
-
@entities
|
22
|
-
end
|
23
|
-
|
24
|
-
def page
|
25
|
-
@meta['page']
|
26
|
-
end
|
27
|
-
|
28
|
-
def last_page?
|
29
|
-
!@meta['next_page']
|
30
|
-
end
|
31
|
-
|
32
|
-
def first_page?
|
33
|
-
page == 1
|
34
|
-
end
|
35
|
-
|
36
|
-
def next_page
|
37
|
-
last_page? ? nil : page + 1
|
38
|
-
end
|
39
|
-
|
40
|
-
def prev_page
|
41
|
-
first_page? ? nil : page - 1
|
42
|
-
end
|
43
|
-
|
44
|
-
def from
|
45
|
-
@meta['from']
|
46
|
-
end
|
47
|
-
|
48
|
-
def to
|
49
|
-
@meta['to']
|
50
|
-
end
|
51
|
-
|
52
|
-
def per
|
53
|
-
(to - from) + 1
|
54
|
-
end
|
55
|
-
|
56
|
-
def to_csv
|
57
|
-
CSV.generate do |csv|
|
58
|
-
attributes = @entities.first.attributes.collect(&:first).sort
|
59
|
-
csv << attributes
|
60
|
-
@entities.each do |entity|
|
61
|
-
csv << attributes.collect { |attribute| entity.attributes[attribute] }
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|