adminterface 0.2.0 → 0.3.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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +19 -109
  3. data/README.md +33 -27
  4. data/Rakefile +1 -1
  5. data/app/assets/stylesheets/adminterface/components/_form.scss +1 -0
  6. data/app/assets/stylesheets/adminterface/mixins/_utilities.scss +4 -0
  7. data/app/assets/stylesheets/adminterface/vendors/bootstrap/_all.scss +1 -0
  8. data/app/assets/stylesheets/adminterface/vendors/bootstrap/components/_breadcrumb.scss +1 -0
  9. data/app/assets/stylesheets/adminterface/vendors/flatpickr/{main.scss → _main.scss} +6 -0
  10. data/app/javascript/adminterface/initializers/header_toggler.js +1 -1
  11. data/app/javascript/adminterface/initializers/plugins/flatpickr.js +1 -1
  12. data/app/javascript/adminterface/initializers/plugins/input_counter.js +1 -1
  13. data/app/javascript/adminterface/initializers/plugins/password_visibility.js +1 -1
  14. data/app/javascript/adminterface/initializers/plugins/tom_select.js +1 -1
  15. data/app/javascript/adminterface/lib/__tests__/checkbox_toggler.html +5 -0
  16. data/app/javascript/adminterface/lib/__tests__/checkbox_toggler.spec.js +110 -0
  17. data/app/javascript/adminterface/lib/__tests__/detached_dropdown.spec.js +69 -70
  18. data/app/javascript/adminterface/lib/__tests__/filters.spec.js +0 -1
  19. data/app/javascript/adminterface/lib/__tests__/has_many.html +14 -0
  20. data/app/javascript/adminterface/lib/__tests__/has_many.spec.js +224 -0
  21. data/app/javascript/adminterface/lib/__tests__/header_toggler.html +2 -0
  22. data/app/javascript/adminterface/lib/__tests__/header_toggler.spec.js +212 -0
  23. data/app/javascript/adminterface/lib/__tests__/per_page.spec.js +75 -0
  24. data/app/javascript/adminterface/lib/__tests__/utils.spec.js +0 -1
  25. data/app/javascript/adminterface/lib/has_many.js +41 -38
  26. data/app/javascript/adminterface/lib/header_toggler.js +10 -8
  27. data/app/views/layouts/active_admin_logged_out.html.erb +1 -1
  28. data/lib/adminterface/configs.rb +5 -1
  29. data/lib/adminterface/engine.rb +0 -7
  30. data/lib/adminterface/extensions/base_controller.rb +16 -12
  31. data/lib/adminterface/extensions/namespace_settings.rb +3 -0
  32. data/lib/adminterface/extensions/view_helpers/alert_helper.rb +3 -1
  33. data/lib/adminterface/extensions/views/components/dropdown_menu.rb +4 -1
  34. data/lib/adminterface/extensions/views/components/menu_item.rb +8 -3
  35. data/lib/adminterface/extensions/views/components/tabs.rb +38 -13
  36. data/lib/adminterface/extensions/views/header.rb +2 -1
  37. data/lib/adminterface/extensions/views/pages/base.rb +4 -1
  38. data/lib/adminterface/initializers/configurations.rb +1 -1
  39. data/lib/adminterface/version.rb +1 -1
  40. data/lib/adminterface.rb +0 -31
  41. data/lib/generators/adminterface/comments/comments_generator.rb +4 -0
  42. data/lib/generators/adminterface/configs/configs_generator.rb +2 -2
  43. data/lib/generators/adminterface/install/install_generator.rb +21 -23
  44. data/lib/generators/adminterface/views/views_generator.rb +2 -2
  45. data/lib/generators/adminterface/webpacker/webpacker_generator.rb +20 -6
  46. metadata +16 -14
  47. data/lib/adminterface/encryption/encryptor.rb +0 -26
  48. data/lib/adminterface/license.rb +0 -18
  49. data/lib/adminterface/licensing/base.rb +0 -99
  50. data/lib/adminterface/licensing/commercial.rb +0 -7
  51. data/lib/adminterface/licensing/notice.rb +0 -54
  52. data/lib/adminterface/licensing/personal.rb +0 -13
  53. data/lib/adminterface/public.pem +0 -9
@@ -1,99 +0,0 @@
1
- module Adminterface
2
- module Licensing
3
- class Base
4
- extend Adminterface::Callable
5
-
6
- ENDPOINT = "https://app.adminterface.io/api/v1/licenses/verify".freeze
7
- CACHE_KEY = "adminterface.licensing.response".freeze
8
- TIMEOUT = 5
9
-
10
- attr_reader :license_key
11
- delegate :cache_store, :rails6_and_up?, to: :Adminterface
12
-
13
- def initialize(license_key = Adminterface.license_key)
14
- @license_key = license_key
15
- end
16
-
17
- def call
18
- response = send_and_cache_request.with_indifferent_access
19
- Adminterface::Licensing::Notice
20
- .call(response, license_key, **{external: request?, endpoint: ENDPOINT})
21
- response
22
- end
23
-
24
- def payload
25
- {
26
- license_key: encrypted_license_key,
27
- license: license,
28
- adminterface_version: Adminterface::VERSION,
29
- rails_version: Rails::VERSION::STRING,
30
- ruby_version: RUBY_VERSION,
31
- environment: Rails.env,
32
- app_name: app_name,
33
- verified: false
34
- }
35
- end
36
-
37
- private
38
-
39
- def encrypted_license_key
40
- @encrypted_license_key ||=
41
- license_key && Adminterface::Encryption::Encryptor.call(license_key)
42
- end
43
-
44
- def send_and_cache_request
45
- return cached_response if has_cached_response?
46
- return local_response unless request?
47
-
48
- response = HTTParty.post(
49
- ENDPOINT,
50
- body: payload.to_json,
51
- headers: {'Content-type': "application/json"},
52
- timeout: TIMEOUT
53
- )
54
-
55
- case response.code
56
- when 200 then cache_response response.code, response.parsed_response
57
- else return_error response.code, response.body
58
- end
59
- rescue => e
60
- return_error e.class, e.message
61
- end
62
-
63
- def local_response
64
- payload.merge(verified: true)
65
- end
66
-
67
- def request?
68
- true
69
- end
70
-
71
- def return_error(status, exception_message = "")
72
- payload.merge(status: status, message: exception_message).stringify_keys!
73
- end
74
-
75
- def cache_response(status, response, time: 1.hour.to_i)
76
- response = payload.merge!(status: status, expiry: time, **response).stringify_keys!
77
- cache_store.write(CACHE_KEY, response, expires_in: time)
78
- response
79
- end
80
-
81
- def license
82
- self.class.name.split("::").last.underscore
83
- end
84
-
85
- def app_name
86
- klass = Rails.application.class
87
- rails6_and_up? ? klass.module_parent.name : klass.parent.name
88
- end
89
-
90
- def has_cached_response?
91
- cache_store.exist? CACHE_KEY
92
- end
93
-
94
- def cached_response
95
- cache_store.read CACHE_KEY
96
- end
97
- end
98
- end
99
- end
@@ -1,7 +0,0 @@
1
- require_relative "./base"
2
-
3
- module Adminterface
4
- module Licensing
5
- class Commercial < Base; end
6
- end
7
- end
@@ -1,54 +0,0 @@
1
- module Adminterface
2
- module Licensing
3
- class Notice
4
- extend Adminterface::Callable
5
- attr_reader :response, :license_key, :external, :endpoint
6
-
7
- def initialize(response, license_key, external: true, endpoint: nil)
8
- @response = response
9
- @license_key = license_key
10
- @external = external
11
- @endpoint = endpoint
12
- end
13
-
14
- def call
15
- return unless Rails.env.development?
16
-
17
- log("========================================")
18
- log(messages)
19
- log("========================================")
20
- end
21
-
22
- private
23
-
24
- def log(*msgs)
25
- msgs.each { |x| puts(x) }
26
- end
27
-
28
- def external?
29
- !!external
30
- end
31
-
32
- def title
33
- "Adminterface #{response[:adminterface_version]} (\"#{response[:license]}\")"
34
- end
35
-
36
- def messages
37
- return title unless external?
38
-
39
- [title, "=> Verifying license on #{endpoint}", verified].flatten
40
- end
41
-
42
- def verified
43
- if !!response[:verified]
44
- Rainbow("=> [#{response[:status]}] #{response[:message]}").green
45
- else
46
- [
47
- Rainbow("=> [#{response[:status]}] #{response[:message]}").red,
48
- Rainbow("=> license_key: #{license_key}").red
49
- ]
50
- end
51
- end
52
- end
53
- end
54
- end
@@ -1,13 +0,0 @@
1
- require_relative "./base"
2
-
3
- module Adminterface
4
- module Licensing
5
- class Personal < Base
6
- private
7
-
8
- def request?
9
- false
10
- end
11
- end
12
- end
13
- end
@@ -1,9 +0,0 @@
1
- -----BEGIN PUBLIC KEY-----
2
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuH2AdyyQycs7DhFQo1f/
3
- 9ssIqc5ek7OYZHlfwSYSFuWaTfq46HK66QZ1ebkUva/U33QzNyaxcMxYpTpRY2dF
4
- IPLtS1QNktC4U0T3Nz0sY3tZp/IwnWcE9b8MpS2FDFtMRiHu+/dtthWoG6kP6w5y
5
- P8pWDLwQuYPbPnqlLbp6yWaJB1G1qHoLmgKD1VPUxjk0gB0tGPPvaiciESObbGC3
6
- IgzeUKtz/+dhR4UBOZc1pmrftwacUfvNHrSuot0jaYCNrb98Oq8kkBpp79MgRghK
7
- SkPdTRidSlIokdxlEOrcRhoJsVka5w9fYLShJdv1yhmGh3VZdKkvSqM7MhwE+zML
8
- 0QIDAQAB
9
- -----END PUBLIC KEY-----