hubrise_app 0.1.2 → 1.1.1

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +21 -0
  3. data/README.md +78 -2
  4. data/app/controllers/hubrise_app/application_controller/app_instance_methods.rb +28 -0
  5. data/app/controllers/hubrise_app/application_controller/hubrise_gateway_methods.rb +25 -0
  6. data/app/controllers/hubrise_app/application_controller/session_methods.rb +33 -0
  7. data/app/controllers/hubrise_app/application_controller.rb +3 -66
  8. data/app/controllers/hubrise_app/callback_controller/action_disconnect.rb +5 -0
  9. data/app/controllers/hubrise_app/callback_controller/action_event.rb +5 -0
  10. data/app/controllers/hubrise_app/callback_controller.rb +19 -14
  11. data/app/controllers/hubrise_app/oauth_controller/action_authorize_callback.rb +13 -0
  12. data/app/controllers/hubrise_app/oauth_controller/action_connect_callback.rb +12 -0
  13. data/app/controllers/hubrise_app/oauth_controller/action_login_callback.rb +7 -0
  14. data/app/controllers/hubrise_app/oauth_controller.rb +8 -33
  15. data/app/controllers/hubrise_app/sessions_controller.rb +9 -0
  16. data/app/lib/hubrise_app/config_loader.rb +5 -0
  17. data/app/lib/hubrise_app/hubrise_gateway.rb +48 -24
  18. data/app/lib/hubrise_app/refresher/account.rb +15 -0
  19. data/app/lib/hubrise_app/refresher/app_instance.rb +24 -0
  20. data/app/lib/hubrise_app/refresher/base.rb +45 -0
  21. data/app/lib/hubrise_app/refresher/catalog.rb +13 -0
  22. data/app/lib/hubrise_app/refresher/customer_list.rb +13 -0
  23. data/app/lib/hubrise_app/refresher/location.rb +13 -0
  24. data/app/lib/hubrise_app/refresher/user.rb +16 -0
  25. data/app/lib/hubrise_app/services/assign_app_instance.rb +8 -0
  26. data/app/lib/hubrise_app/services/connect_app_instance.rb +3 -4
  27. data/app/lib/hubrise_app/services/resolve_app_instance.rb +5 -0
  28. data/app/models/account.rb +2 -0
  29. data/app/models/app_instance.rb +2 -0
  30. data/app/models/catalog.rb +2 -0
  31. data/app/models/customer_list.rb +2 -0
  32. data/app/models/hubrise_app/account_base.rb +7 -0
  33. data/app/models/hubrise_app/app_instance_base.rb +10 -0
  34. data/app/models/hubrise_app/catalog_base.rb +7 -0
  35. data/app/models/hubrise_app/customer_list_base.rb +7 -0
  36. data/app/models/hubrise_app/location_base.rb +11 -0
  37. data/app/models/hubrise_app/user_app_instance_base.rb +12 -0
  38. data/app/models/hubrise_app/user_base.rb +18 -0
  39. data/app/models/location.rb +2 -0
  40. data/app/models/user.rb +2 -0
  41. data/app/models/user_app_instance.rb +2 -0
  42. data/config/initializers/hubrise_app_config.rb +1 -1
  43. data/config/routes.rb +2 -0
  44. data/db/migrate/20190116155419_create_base_tables.rb +27 -23
  45. data/db/migrate/20200829091933_add_locations_timezone.rb +5 -0
  46. data/db/migrate/20210120142001_add_api_json_column.rb +6 -0
  47. data/db/migrate/20210121150253_remove_replaced_by_api_data_columns.rb +9 -0
  48. data/db/migrate/20210419120038_add_catalogs_and_customer_lists.rb +28 -0
  49. data/lib/hubrise_app/spec_support.rb +3 -0
  50. data/lib/hubrise_app/version.rb +1 -1
  51. metadata +46 -21
  52. data/MIT-LICENSE +0 -20
  53. data/app/lib/hubrise_app/services/disconnect_app_instance.rb +0 -6
  54. data/app/lib/hubrise_app/services/handle_event.rb +0 -22
  55. data/app/lib/hubrise_app/services/override/connect_app_instance.rb +0 -1
  56. data/app/lib/hubrise_app/services/override/disconnect_app_instance.rb +0 -1
  57. data/app/lib/hubrise_app/services/override/handle_event.rb +0 -1
  58. data/app/models/concerns/hubrise_app/hr_api_resource.rb +0 -29
  59. data/app/models/hubrise_app/hr_account.rb +0 -19
  60. data/app/models/hubrise_app/hr_app_instance.rb +0 -35
  61. data/app/models/hubrise_app/hr_location.rb +0 -11
  62. data/app/models/hubrise_app/hr_user.rb +0 -35
  63. data/app/models/hubrise_app/hr_user_app_instance.rb +0 -14
  64. data/app/models/hubrise_app/override/hr_user.rb +0 -1
@@ -0,0 +1,16 @@
1
+ module HubriseApp::Refresher
2
+ class User < Base
3
+ class << self
4
+ def fetch_attributes(resource, api_client)
5
+ api_data = api_client.get_user.data
6
+ {
7
+ access_token: api_client.access_token,
8
+ email: api_data["email"],
9
+ first_name: api_data["first_name"],
10
+ last_name: api_data["last_name"],
11
+ locales: api_data["locales"]
12
+ }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ class HubriseApp::Services::AssignAppInstance
2
+ def self.run(hr_user, hr_app_instance, _ctx)
3
+ UserAppInstance.find_or_initialize_by(
4
+ hr_app_instance_id: hr_app_instance.hr_id,
5
+ hr_user_id: hr_user.hr_id
6
+ ).update!(refreshed_at: Time.now)
7
+ end
8
+ end
@@ -1,6 +1,5 @@
1
1
  class HubriseApp::Services::ConnectAppInstance
2
- prepend HubriseApp::Services::Override::ConnectAppInstance
3
-
4
- class << self; delegate :run, to: :new; end
5
- def run(hr_app_instance, hubrise_callback_event_url:); end
2
+ def self.run(api_client, _ctx)
3
+ HubriseApp::Refresher::AppInstance.from_api_client(api_client)
4
+ end
6
5
  end
@@ -0,0 +1,5 @@
1
+ class HubriseApp::Services::ResolveAppInstance
2
+ def self.run(scope, id, _ctx)
3
+ scope.where(hr_id: id).take
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ class Account < HubriseApp::AccountBase
2
+ end
@@ -0,0 +1,2 @@
1
+ class AppInstance < HubriseApp::AppInstanceBase
2
+ end
@@ -0,0 +1,2 @@
1
+ class Catalog < HubriseApp::CatalogBase
2
+ end
@@ -0,0 +1,2 @@
1
+ class CustomerList < HubriseApp::CustomerListBase
2
+ end
@@ -0,0 +1,7 @@
1
+ module HubriseApp
2
+ class AccountBase < HubriseApp::ApplicationRecord
3
+ self.abstract_class = true
4
+
5
+ store_accessor :api_data, :name, :currency
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ module HubriseApp
2
+ class AppInstanceBase < HubriseApp::ApplicationRecord
3
+ self.abstract_class = true
4
+
5
+ belongs_to :account, optional: true, primary_key: :hr_id, foreign_key: :hr_account_id
6
+ belongs_to :location, optional: true, primary_key: :hr_id, foreign_key: :hr_location_id
7
+ belongs_to :catalog, optional: true, primary_key: :hr_id, foreign_key: :hr_catalog_id
8
+ belongs_to :customer_list, optional: true, primary_key: :hr_id, foreign_key: :hr_customer_list_id
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module HubriseApp
2
+ class CatalogBase < HubriseApp::ApplicationRecord
3
+ self.abstract_class = true
4
+
5
+ store_accessor :api_data, :name
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module HubriseApp
2
+ class CustomerListBase < HubriseApp::ApplicationRecord
3
+ self.abstract_class = true
4
+
5
+ store_accessor :api_data, :name
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ module HubriseApp
2
+ class LocationBase < HubriseApp::ApplicationRecord
3
+ self.abstract_class = true
4
+
5
+ store_accessor :api_data, :name, :country
6
+
7
+ def timezone
8
+ api_data.dig("timezone", "name")
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module HubriseApp
2
+ class UserAppInstanceBase < HubriseApp::ApplicationRecord
3
+ self.abstract_class = true
4
+
5
+ belongs_to :app_instance, primary_key: :hr_id, foreign_key: :hr_app_instance_id
6
+
7
+ REFRESH_THRESHOLD = 1.day
8
+ def self.fresh(time: Time.now)
9
+ where("user_app_instances.refreshed_at > ?", time - REFRESH_THRESHOLD)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ module HubriseApp
2
+ class UserBase < HubriseApp::ApplicationRecord
3
+ self.abstract_class = true
4
+
5
+ has_many :user_app_instances, -> { fresh }, primary_key: :hr_id, foreign_key: :hr_user_id
6
+ has_many :app_instances, through: :user_app_instances
7
+
8
+ serialize :locales
9
+
10
+ def primary_locale
11
+ locales.first
12
+ end
13
+
14
+ def full_name
15
+ [first_name, last_name].join(" ")
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,2 @@
1
+ class Location < HubriseApp::LocationBase
2
+ end
@@ -0,0 +1,2 @@
1
+ class User < HubriseApp::UserBase
2
+ end
@@ -0,0 +1,2 @@
1
+ class UserAppInstance < HubriseApp::UserAppInstanceBase
2
+ end
@@ -1 +1 @@
1
- HubriseApp::CONFIG = Rails.application.config_for("hubrise_app/config").deep_symbolize_keys
1
+ HubriseApp::CONFIG = HubriseApp::ConfigLoader.load
data/config/routes.rb CHANGED
@@ -9,4 +9,6 @@ HubriseApp::Engine.routes.draw do
9
9
  post :event
10
10
  get :disconnect
11
11
  end
12
+
13
+ resource :sessions, only: :destroy
12
14
  end
@@ -1,44 +1,48 @@
1
1
  class CreateBaseTables < ActiveRecord::Migration[5.2]
2
2
  def change
3
- create_table :hr_accounts do |t|
4
- t.string :hr_id, null: false, index: { unique: true }
5
- t.json :hr_api_data, null: false
3
+ create_table :accounts do |t|
4
+ t.string :hr_id, null: false, index: { unique: true }
5
+ t.string :name, null: false
6
+ t.string :currency, null: false
6
7
  t.datetime :refreshed_at, null: false
7
8
  end
8
9
 
9
- create_table :hr_locations do |t|
10
- t.string :hr_id, null: false, index: { unique: true }
11
- t.json :hr_api_data, null: false
10
+ create_table :locations do |t|
11
+ t.string :hr_id, null: false, index: { unique: true }
12
+ t.string :name, null: false
12
13
  t.datetime :refreshed_at, null: false
13
14
  end
14
15
 
15
- create_table :hr_app_instances do |t|
16
+ create_table :app_instances do |t|
16
17
  t.string :hr_id, null: false, index: { unique: true }
17
- t.string :hr_account_id, index: true
18
+ t.string :hr_account_id, index: true
18
19
  t.string :hr_location_id, index: true
19
20
  t.string :hr_catalog_id
20
21
  t.string :hr_customer_list_id
21
- t.string :hr_access_token, null: false
22
+ t.string :access_token, null: false
22
23
  end
23
24
 
24
- add_foreign_key :hr_app_instances, :hr_accounts, primary_key: :hr_id
25
- add_foreign_key :hr_app_instances, :hr_locations, primary_key: :hr_id
25
+ add_foreign_key :app_instances, :accounts, primary_key: :hr_id, column: :hr_account_id
26
+ add_foreign_key :app_instances, :locations, primary_key: :hr_id, column: :hr_location_id
26
27
 
27
- create_table :hr_users do |t|
28
- t.string :hr_id, null: false, index: { unique: true }
29
- t.json :hr_api_data, null: false
30
- t.string :hr_access_token, null: false
31
- t.datetime :refreshed_at, null: false
28
+ create_table :users do |t|
29
+ t.string :hr_id, null: false, index: { unique: true }
30
+ t.string :access_token, null: false
31
+ t.string :email
32
+ t.string :first_name
33
+ t.string :last_name
34
+ t.string :locales, array: true
35
+ t.datetime :refreshed_at, null: false
32
36
  end
33
37
 
34
- create_table :hr_user_app_instances do |t|
35
- t.string :hr_user_id, index: true
36
- t.string :hr_app_instance_id, index: true
37
- t.datetime :refreshed_at, null: false
38
+ create_table :user_app_instances do |t|
39
+ t.string :hr_user_id, index: true
40
+ t.string :hr_app_instance_id, index: true
41
+ t.datetime :refreshed_at, null: false
38
42
  end
39
43
 
40
- add_foreign_key :hr_user_app_instances, :hr_users, primary_key: :hr_id
41
- add_foreign_key :hr_user_app_instances, :hr_app_instances, primary_key: :hr_id
42
- add_index :hr_user_app_instances, %i[hr_user_id hr_app_instance_id refreshed_at], name: :index_user_app_instances, using: :btree
44
+ add_foreign_key :user_app_instances, :users, primary_key: :hr_id, column: :hr_user_id
45
+ add_foreign_key :user_app_instances, :app_instances, primary_key: :hr_id, column: :hr_app_instance_id
46
+ add_index :user_app_instances, %i[hr_user_id hr_app_instance_id refreshed_at], name: :index_user_app_instances, using: :btree
43
47
  end
44
48
  end
@@ -0,0 +1,5 @@
1
+ class AddLocationsTimezone < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :locations, :timezone, :string, null: false, default: Time.zone.name
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddApiJsonColumn < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :accounts, :api_data, :json, after: :hr_id
4
+ add_column :locations, :api_data, :json, after: :hr_id
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ class RemoveReplacedByApiDataColumns < ActiveRecord::Migration[6.0]
2
+ def change
3
+ remove_column :accounts, :name
4
+ remove_column :accounts, :currency
5
+
6
+ remove_column :locations, :name
7
+ remove_column :locations, :timezone
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ class AddCatalogsAndCustomerLists < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :catalogs do |t|
4
+ t.string :hr_id, null: false
5
+ t.json :api_data
6
+ t.datetime :refreshed_at, null: false
7
+ t.index :hr_id, unique: true
8
+ end
9
+
10
+ create_table :customer_lists do |t|
11
+ t.string :hr_id, null: false
12
+ t.json :api_data
13
+ t.datetime :refreshed_at, null: false
14
+ t.index :hr_id, unique: true
15
+ end
16
+
17
+ AppInstance.distinct.pluck(:hr_catalog_id).each do |hr_catalog_id|
18
+ Catalog.create!(hr_id: hr_catalog_id, refreshed_at: Date.new(2000)) if hr_catalog_id.present?
19
+ end
20
+
21
+ AppInstance.distinct.pluck(:hr_customer_list_id).each do |hr_customer_list_id|
22
+ CustomerList.create!(hr_id: hr_customer_list_id, refreshed_at: Date.new(2000)) if hr_customer_list_id.present?
23
+ end
24
+
25
+ add_foreign_key :app_instances, :catalogs, primary_key: :hr_id, column: :hr_catalog_id
26
+ add_foreign_key :app_instances, :customer_lists, primary_key: :hr_id, column: :hr_customer_list_id
27
+ end
28
+ end
@@ -0,0 +1,3 @@
1
+ class HubriseApp::SpecSupport
2
+ FACTORIES_PATH = File.expand_path("../../spec/factories", __dir__)
3
+ end
@@ -1,3 +1,3 @@
1
1
  module HubriseApp
2
- VERSION = "0.1.2".freeze
2
+ VERSION = "1.1.1".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubrise_app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antoine Monnier
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-05-31 00:00:00.000000000 Z
12
+ date: 2022-07-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hubrise_client
@@ -17,26 +17,26 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 2.0.0
20
+ version: 2.0.6
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 2.0.0
27
+ version: 2.0.6
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rails
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">"
33
33
  - !ruby/object:Gem::Version
34
34
  version: 5.2.2
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">"
40
40
  - !ruby/object:Gem::Version
41
41
  version: 5.2.2
42
42
  description:
@@ -45,36 +45,62 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - MIT-LICENSE
48
+ - LICENSE
49
49
  - README.md
50
50
  - Rakefile
51
51
  - app/assets/config/hubrise_app_manifest.js
52
52
  - app/assets/stylesheets/hubrise_app/application.css
53
53
  - app/controllers/hubrise_app/application_controller.rb
54
+ - app/controllers/hubrise_app/application_controller/app_instance_methods.rb
55
+ - app/controllers/hubrise_app/application_controller/hubrise_gateway_methods.rb
56
+ - app/controllers/hubrise_app/application_controller/session_methods.rb
54
57
  - app/controllers/hubrise_app/callback_controller.rb
58
+ - app/controllers/hubrise_app/callback_controller/action_disconnect.rb
59
+ - app/controllers/hubrise_app/callback_controller/action_event.rb
55
60
  - app/controllers/hubrise_app/oauth_controller.rb
61
+ - app/controllers/hubrise_app/oauth_controller/action_authorize_callback.rb
62
+ - app/controllers/hubrise_app/oauth_controller/action_connect_callback.rb
63
+ - app/controllers/hubrise_app/oauth_controller/action_login_callback.rb
64
+ - app/controllers/hubrise_app/sessions_controller.rb
65
+ - app/lib/hubrise_app/config_loader.rb
56
66
  - app/lib/hubrise_app/hubrise_gateway.rb
67
+ - app/lib/hubrise_app/refresher/account.rb
68
+ - app/lib/hubrise_app/refresher/app_instance.rb
69
+ - app/lib/hubrise_app/refresher/base.rb
70
+ - app/lib/hubrise_app/refresher/catalog.rb
71
+ - app/lib/hubrise_app/refresher/customer_list.rb
72
+ - app/lib/hubrise_app/refresher/location.rb
73
+ - app/lib/hubrise_app/refresher/user.rb
74
+ - app/lib/hubrise_app/services/assign_app_instance.rb
57
75
  - app/lib/hubrise_app/services/connect_app_instance.rb
58
- - app/lib/hubrise_app/services/disconnect_app_instance.rb
59
- - app/lib/hubrise_app/services/handle_event.rb
60
- - app/lib/hubrise_app/services/override/connect_app_instance.rb
61
- - app/lib/hubrise_app/services/override/disconnect_app_instance.rb
62
- - app/lib/hubrise_app/services/override/handle_event.rb
63
- - app/models/concerns/hubrise_app/hr_api_resource.rb
76
+ - app/lib/hubrise_app/services/resolve_app_instance.rb
77
+ - app/models/account.rb
78
+ - app/models/app_instance.rb
79
+ - app/models/catalog.rb
80
+ - app/models/customer_list.rb
81
+ - app/models/hubrise_app/account_base.rb
82
+ - app/models/hubrise_app/app_instance_base.rb
64
83
  - app/models/hubrise_app/application_record.rb
65
- - app/models/hubrise_app/hr_account.rb
66
- - app/models/hubrise_app/hr_app_instance.rb
67
- - app/models/hubrise_app/hr_location.rb
68
- - app/models/hubrise_app/hr_user.rb
69
- - app/models/hubrise_app/hr_user_app_instance.rb
70
- - app/models/hubrise_app/override/hr_user.rb
84
+ - app/models/hubrise_app/catalog_base.rb
85
+ - app/models/hubrise_app/customer_list_base.rb
86
+ - app/models/hubrise_app/location_base.rb
87
+ - app/models/hubrise_app/user_app_instance_base.rb
88
+ - app/models/hubrise_app/user_base.rb
89
+ - app/models/location.rb
90
+ - app/models/user.rb
91
+ - app/models/user_app_instance.rb
71
92
  - app/views/hubrise_app/application/root.html.haml
72
93
  - app/views/layouts/hubrise_app/application.html.erb
73
94
  - config/initializers/hubrise_app_config.rb
74
95
  - config/routes.rb
75
96
  - db/migrate/20190116155419_create_base_tables.rb
97
+ - db/migrate/20200829091933_add_locations_timezone.rb
98
+ - db/migrate/20210120142001_add_api_json_column.rb
99
+ - db/migrate/20210121150253_remove_replaced_by_api_data_columns.rb
100
+ - db/migrate/20210419120038_add_catalogs_and_customer_lists.rb
76
101
  - lib/hubrise_app.rb
77
102
  - lib/hubrise_app/engine.rb
103
+ - lib/hubrise_app/spec_support.rb
78
104
  - lib/hubrise_app/version.rb
79
105
  homepage: https://github.com/HubRise/ruby-app
80
106
  licenses:
@@ -95,8 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
121
  - !ruby/object:Gem::Version
96
122
  version: '0'
97
123
  requirements: []
98
- rubyforge_project:
99
- rubygems_version: 2.7.6
124
+ rubygems_version: 3.1.2
100
125
  signing_key:
101
126
  specification_version: 4
102
127
  summary: Rails engine to bootstrap a HubRise-based application
data/MIT-LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright 2019 nsave
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,6 +0,0 @@
1
- class HubriseApp::Services::DisconnectAppInstance
2
- prepend HubriseApp::Services::Override::DisconnectAppInstance
3
-
4
- class << self; delegate :run, to: :new; end
5
- def run(hr_app_instance); end
6
- end
@@ -1,22 +0,0 @@
1
- class HubriseApp::Services::HandleEvent
2
- prepend HubriseApp::Services::Override::HandleEvent
3
-
4
- class << self; delegate :run, to: :new; end
5
-
6
- def run(hr_app_instance, params)
7
- case params["resource_type"]
8
- when "customer"
9
- handle_customer_event(hr_app_instance, params)
10
- when "order"
11
- handle_order_event(hr_app_instance, params)
12
- else
13
- raise "Cannot handle hubrise event with type: " + params["resource_type"].to_s
14
- end
15
- end
16
-
17
- protected
18
-
19
- def handle_customer_event(hr_app_instance, params); end
20
-
21
- def handle_order_event(hr_app_instance, params); end
22
- end
@@ -1 +0,0 @@
1
- module HubriseApp::Services::Override::ConnectAppInstance; end
@@ -1 +0,0 @@
1
- module HubriseApp::Services::Override::DisconnectAppInstance; end
@@ -1 +0,0 @@
1
- module HubriseApp::Services::Override::HandleEvent; end
@@ -1,29 +0,0 @@
1
- module HubriseApp::HrApiResource
2
- REFRESH_THRESHOLD = 1.day
3
-
4
- def stale?
5
- refreshed_at.nil? || Time.now - refreshed_at > REFRESH_THRESHOLD
6
- end
7
-
8
- def refresh_via_api_client(api_client)
9
- return unless stale?
10
-
11
- refresh_with(self.class.fetch_hr_attrs(api_client, hr_id))
12
- end
13
-
14
- def refresh_with(attrs)
15
- update!(attrs.merge(refreshed_at: Time.now))
16
- end
17
-
18
- def self.included(base)
19
- base.extend(ClassMethods)
20
- end
21
-
22
- module ClassMethods
23
- def refresh_or_create_via_api_client(api_client, hr_id)
24
- hr_record = find_or_initialize_by(hr_id: hr_id)
25
- hr_record.refresh_via_api_client(api_client)
26
- hr_record
27
- end
28
- end
29
- end
@@ -1,19 +0,0 @@
1
- class HubriseApp::HrAccount < HubriseApp::ApplicationRecord
2
- self.table_name = :hr_accounts
3
-
4
- include HubriseApp::HrApiResource
5
- class << self
6
- def fetch_hr_attrs(api_client, hr_id)
7
- raise if api_client.account_id != hr_id
8
-
9
- {
10
- hr_id: hr_id,
11
- hr_api_data: if api_client.location_id
12
- api_client.get_location(api_client.location_id).data["account"]
13
- else
14
- api_client.get_account(hr_id).data
15
- end.except("id")
16
- }
17
- end
18
- end
19
- end
@@ -1,35 +0,0 @@
1
- module HubriseApp
2
- class HrAppInstance < HubriseApp::ApplicationRecord
3
- self.table_name = :hr_app_instances
4
-
5
- belongs_to :hr_account, optional: true, primary_key: :hr_id
6
- belongs_to :hr_location, optional: true, primary_key: :hr_id
7
-
8
- def api_client
9
- HubriseApp::HubriseGateway.build_api_client(
10
- access_token: hr_access_token,
11
- app_instance_id: hr_id,
12
- account_id: hr_account_id,
13
- location_id: hr_location_id,
14
- catalog_id: hr_catalog_id,
15
- customer_list_id: hr_customer_list_id
16
- )
17
- end
18
-
19
- def self.refresh_or_create_via_api_client(api_client)
20
- hr_app_instance = find_or_initialize_by(hr_id: api_client.app_instance_id)
21
- hr_account = api_client.account_id && HrAccount.refresh_or_create_via_api_client(api_client, api_client.account_id) # rubocop:disable Metrics/LineLength
22
- hr_location = api_client.location_id && HrLocation.refresh_or_create_via_api_client(api_client, api_client.location_id) # rubocop:disable Metrics/LineLength
23
-
24
- hr_app_instance.update!(
25
- hr_account: hr_account,
26
- hr_location: hr_location,
27
- hr_access_token: api_client.access_token,
28
- hr_catalog_id: api_client.catalog_id,
29
- hr_customer_list_id: api_client.customer_list_id
30
- )
31
-
32
- hr_app_instance
33
- end
34
- end
35
- end
@@ -1,11 +0,0 @@
1
- class HubriseApp::HrLocation < HubriseApp::ApplicationRecord
2
- self.table_name = :hr_locations
3
-
4
- include HubriseApp::HrApiResource
5
- def self.fetch_hr_attrs(api_client, hr_id)
6
- {
7
- hr_id: hr_id,
8
- hr_api_data: api_client.get_location(hr_id).data.except("id")
9
- }
10
- end
11
- end
@@ -1,35 +0,0 @@
1
- module HubriseApp
2
- class HrUser < HubriseApp::ApplicationRecord
3
- include HubriseApp::Override::HrUser
4
-
5
- self.table_name = :hr_users
6
-
7
- has_many :hr_user_app_instances, -> { fresh }, primary_key: :hr_id
8
- has_many :hr_app_instances, through: :hr_user_app_instances
9
-
10
- include HubriseApp::HrApiResource
11
- class << self
12
- def fetch_hr_attrs(api_client)
13
- data = api_client.get_user.data
14
- {
15
- hr_id: data.delete("id"),
16
- hr_api_data: data,
17
- hr_access_token: api_client.access_token
18
- }
19
- end
20
-
21
- def refresh_or_create_via_api_client(api_client)
22
- hr_attrs = fetch_hr_attrs(api_client)
23
- hr_user = find_or_initialize_by(hr_id: hr_attrs[:hr_id])
24
- hr_user.refresh_with(hr_attrs)
25
- hr_user
26
- end
27
- end
28
-
29
- def assign_hr_app_instance(hr_app_instance)
30
- hr_user_app_instance = HrUserAppInstance.find_or_initialize_by(hr_app_instance_id: hr_app_instance.hr_id,
31
- hr_user_id: hr_id)
32
- hr_user_app_instance.refresh!
33
- end
34
- end
35
- end