global_registry_models 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/global_registry_models.gemspec +1 -1
  3. data/lib/.DS_Store +0 -0
  4. data/lib/global_registry/subscription.rb +5 -0
  5. data/lib/global_registry/system_methods.rb +13 -0
  6. data/lib/global_registry_models/api_operations/finders.rb +2 -1
  7. data/lib/global_registry_models/api_operations/persistence.rb +26 -10
  8. data/lib/global_registry_models/api_operations/reset_access_token.rb +11 -0
  9. data/lib/global_registry_models/api_operations/search.rb +2 -3
  10. data/lib/global_registry_models/collection.rb +5 -0
  11. data/lib/global_registry_models/common_base.rb +9 -9
  12. data/lib/global_registry_models/entity/base.rb +11 -0
  13. data/lib/global_registry_models/entity_type/base.rb +6 -4
  14. data/lib/global_registry_models/entity_type/entity_type.rb +5 -1
  15. data/lib/global_registry_models/entity_type/field.rb +3 -1
  16. data/lib/global_registry_models/measurement_type/base.rb +4 -0
  17. data/lib/global_registry_models/measurement_type/measurement_type.rb +4 -2
  18. data/lib/global_registry_models/relationship_type/base.rb +5 -0
  19. data/lib/global_registry_models/relationship_type/relationship_type.rb +7 -1
  20. data/lib/global_registry_models/response_parser.rb +1 -1
  21. data/lib/global_registry_models/subscription/base.rb +21 -0
  22. data/lib/global_registry_models/subscription/subscription.rb +17 -0
  23. data/lib/global_registry_models/system/base.rb +22 -0
  24. data/lib/global_registry_models/system/system.rb +26 -0
  25. data/lib/global_registry_models/version.rb +1 -1
  26. data/lib/global_registry_models.rb +11 -0
  27. metadata +11 -3
  28. data/lib/global_registry_models/entity/entity_collection.rb +0 -66
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c518ac0e203b6a04fc6b0bda68eaf25868dfaca0
4
- data.tar.gz: b55a75d8c3a979b1aea24e68d4dc1dcf9d4101f9
3
+ metadata.gz: 32aa339085d76059fde7b418d54786e0b4f8f4f4
4
+ data.tar.gz: 19c3710e713263f513cff738410b09c81123f8a2
5
5
  SHA512:
6
- metadata.gz: b49abcf9efaf39871fa279b5e3f2729192f46e2758f622bc0c152e2e059d2b875ac671ac1a6686bcf038a24ccf811b72ea4d92bce52f9f61c94c1480b1a4cf4d
7
- data.tar.gz: 7f040286f685e9b54a0862d896e1a54baa5a40b227c8d5338796b36b02864ac6e533da119c7618a6fc59fe33e3e041d0d12bc7a9a5e7ffdbe2ea9ab824be0243
6
+ metadata.gz: e7b91626fc49b935df140f14435bbec0dda5f431bb73d5a03109f7dc1d38261c7bb1724d529d453412775296a249e2da5db84b52f5368d5f26355847bebb79e6
7
+ data.tar.gz: adcab3518d5715d63cc9afd95290433a1a1880f20ef6e00d78fda96225f75fb49490fa1e006b8e1f67826d52a71d64ddb22b454cc6d7cb84bd55b2606c47f041
@@ -6,7 +6,7 @@ require 'global_registry_models/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'global_registry_models'
8
8
  spec.version = GlobalRegistryModels::VERSION
9
- spec.authors = ['Sheldon Dueck']
9
+ spec.authors = ['Sheldon Dueck','Daniel Fugere']
10
10
  spec.email = ['sheldon.dueck@gmail.com']
11
11
 
12
12
  spec.summary = %q{Data models for the Global Registry.}
data/lib/.DS_Store ADDED
Binary file
@@ -0,0 +1,5 @@
1
+ module GlobalRegistry
2
+ class Subscription < Base
3
+
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ module GlobalRegistry
2
+ class System < Base
3
+
4
+ def self.reset_access_token(system_id)
5
+ request(:post, nil, "systems/reset_access_token#{parametrized(system_id)}")
6
+ end
7
+
8
+ def self.parametrized(system_id)
9
+ "?id=#{system_id}" if system_id
10
+ end
11
+
12
+ end
13
+ end
@@ -24,7 +24,8 @@ module GlobalRegistryModels
24
24
  end
25
25
 
26
26
  def find(id)
27
- new global_registry_resource.find(id)['entity'][name]
27
+ response_hash = global_registry_resource.find(id)[ressource_type]
28
+ response_hash.has_key?(name) ? (new response_hash[name]) : (new response_hash)
28
29
  end
29
30
 
30
31
  def page(page_number = 1)
@@ -4,12 +4,26 @@ module GlobalRegistryModels
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  module ClassMethods
7
+
8
+ def prepare_parameters(object, attributes)
9
+ attribute_keys = attributes.keys.collect(&:to_sym) & writeable_attributes
10
+ prepared_attributes = object.attributes.with_indifferent_access.slice(*attribute_keys)
11
+ prepared_attributes
12
+ end
13
+
14
+ def ressource_type
15
+ global_registry_resource.to_s.demodulize.underscore
16
+ end
17
+
7
18
  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 global_registry_resource.post({ entity: { name => create_attributes }})['entity'][name]
19
+ object = new(attributes.with_indifferent_access.except(:id))
20
+ if object.valid?
21
+ create_attributes = prepare_parameters(object, attributes)
22
+ response = global_registry_resource.post(attributes_hash(create_attributes))
23
+ if response.present?
24
+ response_hash = response[ressource_type]
25
+ response_hash.has_key?(name) ? (new response_hash[name]) : (new response_hash)
26
+ end
13
27
  else
14
28
  raise GlobalRegistryModels::RecordInvalid.new
15
29
  end
@@ -22,11 +36,11 @@ module GlobalRegistryModels
22
36
  end
23
37
 
24
38
  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 global_registry_resource.put(id, { entity: { name => update_attributes }})['entity'][name]
39
+ object = new(attributes)
40
+ if object.valid?
41
+ update_attributes = prepare_parameters(object, attributes)
42
+ response_hash = global_registry_resource.put(id, attributes_hash(update_attributes))[ressource_type]
43
+ response_hash.has_key?(name) ? (new response_hash[name]) : (new response_hash)
30
44
  else
31
45
  raise GlobalRegistryModels::RecordInvalid.new
32
46
  end
@@ -37,6 +51,7 @@ module GlobalRegistryModels
37
51
  rescue GlobalRegistryModels::RecordInvalid
38
52
  false
39
53
  end
54
+
40
55
  end
41
56
 
42
57
  def save
@@ -52,6 +67,7 @@ module GlobalRegistryModels
52
67
  self.class.update! id, { client_integration_id: client_integration_id }.with_indifferent_access.merge(update_attributes)
53
68
  end
54
69
 
70
+
55
71
  end
56
72
  end
57
73
  end
@@ -0,0 +1,11 @@
1
+ module GlobalRegistryModels
2
+ module APIOperations
3
+ module ResetAccessToken
4
+
5
+ def reset_access_token
6
+ System::System.new GlobalRegistry::System.reset_access_token(self.id)['system']
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -17,10 +17,9 @@ module GlobalRegistryModels
17
17
  }).delete_if { |_, v| v.blank? }
18
18
 
19
19
  params = clean_params(filters, params)
20
-
21
20
  response = GlobalRegistryModels::ResponseParser.new(global_registry_resource.get(params))
22
-
23
- Collection.new meta: response.meta, list: response.objects
21
+ Collection.new meta: response.meta, list: response.objects
22
+
24
23
  end
25
24
 
26
25
  def clean_params( filters, params )
@@ -16,6 +16,11 @@ module GlobalRegistryModels
16
16
  @list.each { |object| yield object }
17
17
  end
18
18
 
19
+ def order(attribute)
20
+ @list = @list.sort_by {|obj| obj.send attribute}
21
+ return self
22
+ end
23
+
19
24
  def first
20
25
  @list.first
21
26
  end
@@ -6,8 +6,10 @@ require 'virtus'
6
6
 
7
7
  module GlobalRegistryModels
8
8
  class CommonBase
9
+
9
10
  include ActiveModel::Model
10
11
  include ActiveModel::Validations
12
+ include ActiveModel::Validations::Callbacks
11
13
  include Virtus.model
12
14
 
13
15
  include GlobalRegistryModels::APIOperations::Persistence
@@ -15,12 +17,8 @@ module GlobalRegistryModels
15
17
  include GlobalRegistryModels::APIOperations::Search
16
18
  include GlobalRegistryModels::APIOperations::Delete
17
19
 
18
-
19
20
  attribute :id, String
20
- attribute :client_integration_id, String
21
-
22
- validates_presence_of :client_integration_id
23
-
21
+
24
22
  def self.title
25
23
  name.titleize
26
24
  end
@@ -41,10 +39,12 @@ module GlobalRegistryModels
41
39
  attribute_names - [:id]
42
40
  end
43
41
 
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
42
+ private
43
+
44
+ def underscore_name
45
+ self.name = self.name.downcase.tr(' ','_') if self.name
46
+ end
48
47
 
49
48
  end
49
+
50
50
  end
@@ -6,6 +6,8 @@
6
6
  module GlobalRegistryModels
7
7
  module Entity
8
8
  class Base < CommonBase
9
+ attribute :client_integration_id, String
10
+ validates_presence_of :client_integration_id
9
11
 
10
12
  def self.search_params
11
13
  {
@@ -16,6 +18,15 @@ module GlobalRegistryModels
16
18
  def self.global_registry_resource
17
19
  GlobalRegistry::Entity
18
20
  end
21
+
22
+ def self.attributes_hash(attributes)
23
+ {'entity'.to_sym => { name => attributes }}
24
+ end
25
+
26
+ # The name of the entity class. The entity name is required in the api responses and requests, hence the need for this class method.
27
+ def self.name
28
+ to_s.gsub(/.*::/, '').underscore
29
+ end
19
30
 
20
31
  end
21
32
  end
@@ -1,7 +1,3 @@
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
1
  module GlobalRegistryModels
6
2
  module EntityType
7
3
  class Base < CommonBase
@@ -16,6 +12,12 @@ module GlobalRegistryModels
16
12
  GlobalRegistry::EntityType
17
13
  end
18
14
 
15
+ def self.attributes_hash(attributes)
16
+ {
17
+ 'entity_type' => attributes
18
+ }
19
+ end
20
+
19
21
  end
20
22
  end
21
23
  end
@@ -9,6 +9,10 @@ module GlobalRegistryModels
9
9
  attribute :data_visibility, String
10
10
  attribute :enum_values, Array
11
11
  attribute :unique_value, Boolean
12
+ attribute :parent_id, String
13
+
14
+ validates_presence_of :name
15
+ after_validation :underscore_name
12
16
 
13
17
  def initialize(params = {})
14
18
  super(params)
@@ -25,7 +29,7 @@ module GlobalRegistryModels
25
29
  end
26
30
 
27
31
  def self.identifying_attributes
28
- [:name, :description, :is_editable, :field_type, :data_visibility]
32
+ [:name, :description, :is_editable, :field_type, :data_visibility, :parent_id]
29
33
  end
30
34
 
31
35
  private
@@ -6,6 +6,8 @@ module GlobalRegistryModels
6
6
  attribute :description, String
7
7
  attribute :is_editable, Boolean
8
8
  attribute :field_type, String
9
+ attribute :data_visibility, String
10
+ attribute :parent_id, String
9
11
 
10
12
  def initialize(params = {})
11
13
  super(params)
@@ -17,7 +19,7 @@ module GlobalRegistryModels
17
19
  end
18
20
 
19
21
  def self.identifying_attributes
20
- [:name, :description, :is_editable, :field_type]
22
+ [:name, :description, :is_editable, :field_type, :data_visibility, :parent_id]
21
23
  end
22
24
 
23
25
  private
@@ -14,6 +14,10 @@ module GlobalRegistryModels
14
14
  GlobalRegistry::MeasurementType
15
15
  end
16
16
 
17
+ def self.attributes_hash(attributes)
18
+ { 'measurement_type' => attributes }
19
+ end
20
+
17
21
  end
18
22
  end
19
23
  end
@@ -9,11 +9,13 @@ module GlobalRegistryModels
9
9
  attribute :perm_link, String
10
10
  attribute :unit, String
11
11
 
12
+ validates_presence_of :frequency, :unit, :perm_link, :related_entity_type_id, :name
13
+ after_validation :underscore_name
14
+
12
15
  def self.identifying_attributes
13
- [:name, :description, :frequency, :perm_link, :unit]
16
+ [:related_entity_type_id, :name, :description, :frequency, :perm_link, :unit]
14
17
  end
15
18
 
16
-
17
19
  end
18
20
  end
19
21
  end
@@ -5,6 +5,7 @@
5
5
  module GlobalRegistryModels
6
6
  module RelationshipType
7
7
  class Base < CommonBase
8
+ validates_presence_of :entity_type1_id, :relationship1, :entity_type2_id, :relationship2
8
9
 
9
10
  def self.search_params
10
11
  {}
@@ -14,6 +15,10 @@ module GlobalRegistryModels
14
15
  GlobalRegistry::RelationshipType
15
16
  end
16
17
 
18
+ def self.attributes_hash(attributes)
19
+ { 'relationship_type' => attributes }
20
+ end
21
+
17
22
  end
18
23
  end
19
24
  end
@@ -2,10 +2,16 @@ module GlobalRegistryModels
2
2
  module RelationshipType
3
3
  class RelationshipType < Base
4
4
  attribute :id, String
5
+ attribute :entity_type1_id
6
+ attribute :entity_type2_id
7
+ attribute :relationship1
8
+ attribute :relationship2
9
+
10
+ validates_presence_of :entity_type1_id, :relationship1, :entity_type2_id, :relationship2
5
11
 
6
12
  def initialize(params = {})
7
13
  super(params)
8
- create_involved_types([params["relationship1"],params["relationship2"]]) if params["relationship1"] && params["relationship2"]
14
+ create_involved_types([params["relationship1"],params["relationship2"]]) if params["relationship1"] && params["relationship2"] && !params["entity_type1_id"]
9
15
  end
10
16
 
11
17
  def involved_types
@@ -6,7 +6,7 @@ module GlobalRegistryModels
6
6
  end
7
7
 
8
8
  def meta
9
- @response_hash['meta']
9
+ @response_hash['meta'] if @response_hash['meta']
10
10
  end
11
11
 
12
12
  def objects
@@ -0,0 +1,21 @@
1
+ module GlobalRegistryModels
2
+ module Subscription
3
+ class Base < CommonBase
4
+
5
+ def self.search_params
6
+ {}
7
+ end
8
+
9
+ def self.global_registry_resource
10
+ GlobalRegistry::Subscription
11
+ end
12
+
13
+ def self.attributes_hash(attributes)
14
+ {
15
+ 'subscription' => attributes
16
+ }
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module GlobalRegistryModels
2
+ module Subscription
3
+ class Subscription < Base
4
+ attribute :id, String
5
+ attribute :entity_type_id, String
6
+ attribute :endpoint, String
7
+ attribute :format, String
8
+
9
+ validates_presence_of :entity_type_id, :endpoint
10
+
11
+ def self.identifying_attributes
12
+ [:id, :entity_type_id]
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ module GlobalRegistryModels
2
+ module System
3
+ class Base < CommonBase
4
+ include GlobalRegistryModels::APIOperations::ResetAccessToken
5
+
6
+ def self.search_params
7
+ {}
8
+ end
9
+
10
+ def self.global_registry_resource
11
+ GlobalRegistry::System
12
+ end
13
+
14
+ def self.attributes_hash(attributes)
15
+ {
16
+ 'system' => attributes
17
+ }
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ module GlobalRegistryModels
2
+ module System
3
+ class System < Base
4
+ attribute :name, String
5
+ attribute :created_at, DateTime
6
+ attribute :updated_at, DateTime
7
+ attribute :contact_name, String
8
+ attribute :contact_email, String
9
+ attribute :permalink, String
10
+ attribute :root, Boolean
11
+ attribute :access_token, String
12
+ attribute :trusted_ips, Array
13
+
14
+ validates_presence_of :name
15
+
16
+ def self.identifying_attributes
17
+ [:id, :name, :contact_name, :contact_email, :permalink, :trusted_ips]
18
+ end
19
+
20
+ def self.identifying_root_attributes
21
+ [:id, :name, :contact_name, :contact_email, :permalink, :trusted_ips, :root, :access_token]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module GlobalRegistryModels
2
- VERSION = '0.8.1'
2
+ VERSION = '0.8.2'
3
3
  end
@@ -1,5 +1,8 @@
1
1
  require 'active_support/all'
2
2
 
3
+ require 'global_registry/subscription'
4
+ require 'global_registry/system_methods'
5
+
3
6
  require 'global_registry_models/version'
4
7
 
5
8
  require 'global_registry_models/response_parser'
@@ -12,6 +15,8 @@ require 'global_registry_models/api_operations/persistence'
12
15
  require 'global_registry_models/api_operations/finders'
13
16
  require 'global_registry_models/api_operations/search'
14
17
  require 'global_registry_models/api_operations/delete'
18
+ require 'global_registry_models/api_operations/reset_access_token'
19
+
15
20
 
16
21
  require 'global_registry_models/common_base'
17
22
 
@@ -33,5 +38,11 @@ require 'global_registry_models/relationship_type/involved_type'
33
38
  require 'global_registry_models/measurement_type/base'
34
39
  require 'global_registry_models/measurement_type/measurement_type'
35
40
 
41
+ require 'global_registry_models/subscription/base'
42
+ require 'global_registry_models/subscription/subscription'
43
+
44
+ require 'global_registry_models/system/base'
45
+ require 'global_registry_models/system/system'
46
+
36
47
  module GlobalRegistryModels
37
48
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: global_registry_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sheldon Dueck
8
+ - Daniel Fugere
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2016-02-05 00:00:00.000000000 Z
12
+ date: 2016-02-09 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activemodel
@@ -141,18 +142,21 @@ files:
141
142
  - bin/console
142
143
  - bin/setup
143
144
  - global_registry_models.gemspec
145
+ - lib/.DS_Store
146
+ - lib/global_registry/subscription.rb
147
+ - lib/global_registry/system_methods.rb
144
148
  - lib/global_registry_models.rb
145
149
  - lib/global_registry_models/.DS_Store
146
150
  - lib/global_registry_models/api_operations/delete.rb
147
151
  - lib/global_registry_models/api_operations/finders.rb
148
152
  - lib/global_registry_models/api_operations/persistence.rb
153
+ - lib/global_registry_models/api_operations/reset_access_token.rb
149
154
  - lib/global_registry_models/api_operations/search.rb
150
155
  - lib/global_registry_models/collection.rb
151
156
  - lib/global_registry_models/common_base.rb
152
157
  - lib/global_registry_models/entity/.DS_Store
153
158
  - lib/global_registry_models/entity/area.rb
154
159
  - lib/global_registry_models/entity/base.rb
155
- - lib/global_registry_models/entity/entity_collection.rb
156
160
  - lib/global_registry_models/entity/global_mcc.rb
157
161
  - lib/global_registry_models/entity/iso_country.rb
158
162
  - lib/global_registry_models/entity/ministry.rb
@@ -171,6 +175,10 @@ files:
171
175
  - lib/global_registry_models/relationship_type/relationship_type.rb
172
176
  - lib/global_registry_models/response_parser.rb
173
177
  - lib/global_registry_models/retryer.rb
178
+ - lib/global_registry_models/subscription/base.rb
179
+ - lib/global_registry_models/subscription/subscription.rb
180
+ - lib/global_registry_models/system/base.rb
181
+ - lib/global_registry_models/system/system.rb
174
182
  - lib/global_registry_models/version.rb
175
183
  homepage: https://github.com/sheldond/global_registry_models
176
184
  licenses:
@@ -1,66 +0,0 @@
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