appydave-tools 0.4.0 → 0.5.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/CHANGELOG.md +21 -0
- data/lib/appydave/tools/configuration/_doc.md +5 -1
- data/lib/appydave/tools/configuration/config.rb +1 -0
- data/lib/appydave/tools/configuration/models/bank_reconciliation_config.rb +86 -0
- data/lib/appydave/tools/configuration/models/channel_projects_config.rb +67 -0
- data/lib/appydave/tools/configuration/models/channels_config.rb +76 -0
- data/lib/appydave/tools/configuration/models/config_base.rb +58 -0
- data/lib/appydave/tools/configuration/models/settings_config.rb +34 -0
- data/lib/appydave/tools/version.rb +1 -1
- data/lib/appydave/tools.rb +7 -5
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +7 -6
- data/lib/appydave/tools/configuration/channel_projects_config.rb +0 -65
- data/lib/appydave/tools/configuration/channels_config.rb +0 -74
- data/lib/appydave/tools/configuration/config_base.rb +0 -56
- data/lib/appydave/tools/configuration/settings_config.rb +0 -32
- /data/lib/appydave/tools/configuration/{settings_config copy.xrb → models/settings_config copy.xrb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38e915f4af00415a837d3951bf3b678b881617d820c57cf0842caf1751c272c0
|
4
|
+
data.tar.gz: 3ec4f4c1093872fd73fe77fa7758ab8ae0926f80c180fc29a6ca0715a26529a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08f2ed9f573f47a57b19ff3b26c1f141ec42bd4965062fa5b53953a493fb6aaea57b4480c3dc3a53fe920ed24ecf6addbd217ad731adedb0f1d5b32cdec034fd'
|
7
|
+
data.tar.gz: 26c0225c9185ccca543d3afa56b338bedeb88149989ed4b3e1440e9a9afbf234511401330d5b5d30b955f223382c2b34d724dbb103de0e092cda5023cc48ed17
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
## [0.4.1](https://github.com/klueless-io/appydave-tools/compare/v0.4.0...v0.4.1) (2024-05-26)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* move configuration models in to own namespace ([0a8dc48](https://github.com/klueless-io/appydave-tools/commit/0a8dc486c3f610a91dac1941bc986a1d5b05e24e))
|
7
|
+
|
8
|
+
# [0.4.0](https://github.com/klueless-io/appydave-tools/compare/v0.3.8...v0.4.0) (2024-05-26)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* remove from ci for now ([e4c9e22](https://github.com/klueless-io/appydave-tools/commit/e4c9e225e6fe35a00a7b4d83ff9f2795da737589))
|
14
|
+
* remove from ci for now ([30a114c](https://github.com/klueless-io/appydave-tools/commit/30a114c7cd0085ab92aeb906e1962ca3618631e8))
|
15
|
+
* remove from ci for now ([7062c3d](https://github.com/klueless-io/appydave-tools/commit/7062c3d69634ab281107b755533f3332b708eb56))
|
16
|
+
|
17
|
+
|
18
|
+
### Features
|
19
|
+
|
20
|
+
* Add line limit option and update default format handling ([a0eb426](https://github.com/klueless-io/appydave-tools/commit/a0eb426329ee2a997081cf1a5c219c05d07ff824))
|
21
|
+
|
1
22
|
## [0.3.8](https://github.com/klueless-io/appydave-tools/compare/v0.3.7...v0.3.8) (2024-05-25)
|
2
23
|
|
3
24
|
|
@@ -1,7 +1,11 @@
|
|
1
1
|
# Configuration Component
|
2
2
|
|
3
3
|
[ChatGPT conversation](https://chatgpt.com/g/g-4dMsIRK3E-ruby-script-assistant/c/d8ea5960-071b-48aa-9fd9-554ca302c7dd)
|
4
|
-
[ChatGPT
|
4
|
+
[ChatGPT conversation for Schema](https://chatgpt.com/c/bb93e7ac-f139-44f9-8b9c-4e74ac2fa461)
|
5
|
+
|
6
|
+
attr_accessor :code,
|
7
|
+
:narration
|
8
|
+
|
5
9
|
|
6
10
|
## Schema
|
7
11
|
|
@@ -29,6 +29,7 @@ module Appydave
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def method_missing(method_name, *_args)
|
32
|
+
raise Appydave::Tools::Error, 'Configuration has never been registered' if @configurations.nil?
|
32
33
|
raise Appydave::Tools::Error, "Configuration not available: #{method_name}" unless @configurations.key?(method_name)
|
33
34
|
|
34
35
|
@configurations[method_name]
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appydave
|
4
|
+
module Tools
|
5
|
+
module Configuration
|
6
|
+
module Models
|
7
|
+
# Bank reconciliation configuration
|
8
|
+
class BankReconciliationConfig < ConfigBase
|
9
|
+
# Retrieve all bank accounts
|
10
|
+
def bank_accounts
|
11
|
+
data['bank_accounts'].map do |account|
|
12
|
+
BankAccount.new(account)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def chart_of_accounts
|
17
|
+
data['chart_of_accounts'].map do |entry|
|
18
|
+
ChartOfAccount.new(entry)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_bank_account(account_number, bsb = nil)
|
23
|
+
account_data = data['bank_accounts'].find do |account|
|
24
|
+
account['account_number'] == account_number && (account['bsb'].nil? || account['bsb'] == bsb)
|
25
|
+
end
|
26
|
+
|
27
|
+
BankAccount.new(account_data) if account_data
|
28
|
+
end
|
29
|
+
|
30
|
+
# Retrieve a chart of account entry by code
|
31
|
+
def get_chart_of_account(code)
|
32
|
+
entry_data = data['chart_of_accounts'].find { |entry| entry['code'] == code }
|
33
|
+
ChartOfAccount.new(entry_data) if entry_data
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def default_data
|
39
|
+
{
|
40
|
+
'bank_accounts' => [],
|
41
|
+
'chart_of_accounts' => []
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
# Inner class to represent a bank account
|
46
|
+
class BankAccount
|
47
|
+
attr_accessor :account_number, :bsb, :name, :bank
|
48
|
+
|
49
|
+
def initialize(data)
|
50
|
+
@account_number = data['account_number']
|
51
|
+
@bsb = data['bsb']
|
52
|
+
@name = data['name']
|
53
|
+
@bank = data['bank']
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_h
|
57
|
+
{
|
58
|
+
'account_number' => @account_number,
|
59
|
+
'bsb' => @bsb,
|
60
|
+
'name' => @name,
|
61
|
+
'bank' => @bank
|
62
|
+
}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Inner class to represent a chart of account entry
|
67
|
+
class ChartOfAccount
|
68
|
+
attr_accessor :code, :narration
|
69
|
+
|
70
|
+
def initialize(data)
|
71
|
+
@code = data['code']
|
72
|
+
@narration = data['narration']
|
73
|
+
end
|
74
|
+
|
75
|
+
def to_h
|
76
|
+
{
|
77
|
+
'code' => @code,
|
78
|
+
'narration' => @narration
|
79
|
+
}
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appydave
|
4
|
+
module Tools
|
5
|
+
module Configuration
|
6
|
+
module Models
|
7
|
+
# Channel projects configuration
|
8
|
+
class ChannelProjectsConfig < ConfigBase
|
9
|
+
# Retrieve channel information by channel name (string or symbol)
|
10
|
+
def get_channel_info(channel_name)
|
11
|
+
channel_name = channel_name.to_s
|
12
|
+
ChannelInfo.new(data['channel_projects'][channel_name] || default_channel_info)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Set channel information
|
16
|
+
def set_channel_info(channel_name, channel_info)
|
17
|
+
data['channel_projects'] ||= {}
|
18
|
+
data['channel_projects'][channel_name.to_s] = channel_info.to_h
|
19
|
+
end
|
20
|
+
|
21
|
+
# Retrieve a list of all channel projects
|
22
|
+
def channel_projects
|
23
|
+
data['channel_projects'].map do |_name, info|
|
24
|
+
ChannelInfo.new(info)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def default_data
|
31
|
+
{ 'channel_projects' => {} }
|
32
|
+
end
|
33
|
+
|
34
|
+
def default_channel_info
|
35
|
+
{
|
36
|
+
'content_projects' => '',
|
37
|
+
'video_projects' => '',
|
38
|
+
'published_projects' => '',
|
39
|
+
'abandoned_projects' => ''
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
# Type-safe class to access channel info properties
|
44
|
+
class ChannelInfo
|
45
|
+
attr_accessor :content_projects, :video_projects, :published_projects, :abandoned_projects
|
46
|
+
|
47
|
+
def initialize(data)
|
48
|
+
@content_projects = data['content_projects']
|
49
|
+
@video_projects = data['video_projects']
|
50
|
+
@published_projects = data['published_projects']
|
51
|
+
@abandoned_projects = data['abandoned_projects']
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_h
|
55
|
+
{
|
56
|
+
'content_projects' => @content_projects,
|
57
|
+
'video_projects' => @video_projects,
|
58
|
+
'published_projects' => @published_projects,
|
59
|
+
'abandoned_projects' => @abandoned_projects
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appydave
|
4
|
+
module Tools
|
5
|
+
module Configuration
|
6
|
+
module Models
|
7
|
+
# Channels configuration
|
8
|
+
class ChannelsConfig < ConfigBase
|
9
|
+
# Retrieve channel information by channel code (string or symbol)
|
10
|
+
def get_channel(channel_key)
|
11
|
+
channel_key = channel_key.to_s
|
12
|
+
info = data['channels'][channel_key] || default_channel_info
|
13
|
+
ChannelInfo.new(channel_key, info)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Set channel information
|
17
|
+
def set_channel(channel_key, channel_info)
|
18
|
+
data['channels'] ||= {}
|
19
|
+
data['channels'][channel_key.to_s] = channel_info.to_h
|
20
|
+
end
|
21
|
+
|
22
|
+
# Retrieve a list of all channels
|
23
|
+
def channels
|
24
|
+
data['channels'].map do |key, info|
|
25
|
+
ChannelInfo.new(key, info)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def key?(key)
|
30
|
+
key = key.to_s
|
31
|
+
data['channels'].key?(key)
|
32
|
+
end
|
33
|
+
|
34
|
+
def code?(code)
|
35
|
+
code = code.to_s
|
36
|
+
data['channels'].values.any? { |info| info['code'] == code }
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def default_data
|
42
|
+
{ 'channels' => {} }
|
43
|
+
end
|
44
|
+
|
45
|
+
def default_channel_info
|
46
|
+
{
|
47
|
+
'code' => '',
|
48
|
+
'name' => '',
|
49
|
+
'youtube_handle' => ''
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
# Type-safe class to access channel properties
|
54
|
+
class ChannelInfo
|
55
|
+
attr_accessor :key, :code, :name, :youtube_handle
|
56
|
+
|
57
|
+
def initialize(key, data)
|
58
|
+
@key = key
|
59
|
+
@code = data['code']
|
60
|
+
@name = data['name']
|
61
|
+
@youtube_handle = data['youtube_handle']
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_h
|
65
|
+
{
|
66
|
+
'code' => @code,
|
67
|
+
'name' => @name,
|
68
|
+
'youtube_handle' => @youtube_handle
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
module Appydave
|
7
|
+
module Tools
|
8
|
+
module Configuration
|
9
|
+
module Models
|
10
|
+
# Base class for handling common configuration tasks
|
11
|
+
class ConfigBase
|
12
|
+
include KLog::Logging
|
13
|
+
|
14
|
+
attr_reader :config_path, :data
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@config_path = File.join(Config.config_path, "#{config_name}.json")
|
18
|
+
@data = load
|
19
|
+
end
|
20
|
+
|
21
|
+
def save
|
22
|
+
File.write(config_path, JSON.pretty_generate(data))
|
23
|
+
end
|
24
|
+
|
25
|
+
def load
|
26
|
+
return JSON.parse(File.read(config_path)) if File.exist?(config_path)
|
27
|
+
|
28
|
+
default_data
|
29
|
+
rescue JSON::ParserError
|
30
|
+
# log.exception e
|
31
|
+
default_data
|
32
|
+
end
|
33
|
+
|
34
|
+
def name
|
35
|
+
self.class.name.split('::')[-1].gsub(/Config$/, '')
|
36
|
+
end
|
37
|
+
|
38
|
+
def config_name
|
39
|
+
name.gsub(/([a-z])([A-Z])/, '\1-\2').downcase
|
40
|
+
end
|
41
|
+
|
42
|
+
def debug
|
43
|
+
log.kv 'Config', name
|
44
|
+
log.kv 'Path', config_path
|
45
|
+
|
46
|
+
log.json data
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def default_data
|
52
|
+
{}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Appydave
|
4
|
+
module Tools
|
5
|
+
module Configuration
|
6
|
+
module Models
|
7
|
+
# Global settings that can be referenced by other configurations or tools
|
8
|
+
class SettingsConfig < ConfigBase
|
9
|
+
def set(key, value)
|
10
|
+
data[key] = value
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(key, default = nil)
|
14
|
+
data.fetch(key, default)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Well known settings
|
18
|
+
|
19
|
+
def ecamm_recording_folder
|
20
|
+
get('ecamm-recording-folder')
|
21
|
+
end
|
22
|
+
|
23
|
+
def download_folder
|
24
|
+
get('download-folder')
|
25
|
+
end
|
26
|
+
|
27
|
+
def download_image_folder
|
28
|
+
get('download-image-folder') || download_folder
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/appydave/tools.rb
CHANGED
@@ -13,16 +13,18 @@ require 'appydave/tools/gpt_context/file_collector'
|
|
13
13
|
|
14
14
|
require 'appydave/tools/configuration/openai'
|
15
15
|
require 'appydave/tools/configuration/configurable'
|
16
|
-
require 'appydave/tools/configuration/config_base'
|
17
16
|
require 'appydave/tools/configuration/config'
|
18
|
-
require 'appydave/tools/configuration/
|
19
|
-
require 'appydave/tools/configuration/
|
20
|
-
require 'appydave/tools/configuration/
|
17
|
+
require 'appydave/tools/configuration/models/config_base'
|
18
|
+
require 'appydave/tools/configuration/models/settings_config'
|
19
|
+
require 'appydave/tools/configuration/models/bank_reconciliation_config'
|
20
|
+
require 'appydave/tools/configuration/models/channel_projects_config'
|
21
|
+
require 'appydave/tools/configuration/models/channels_config'
|
21
22
|
require 'appydave/tools/name_manager/project_name'
|
22
23
|
|
23
24
|
Appydave::Tools::Configuration::Config.set_default do |config|
|
24
25
|
config.config_path = File.expand_path('~/.config/appydave')
|
25
|
-
config.register(:settings, Appydave::Tools::Configuration::SettingsConfig)
|
26
|
+
config.register(:settings, Appydave::Tools::Configuration::Models::SettingsConfig)
|
27
|
+
config.register(:bank_reconciliation, Appydave::Tools::Configuration::Models::BankReconciliationConfig)
|
26
28
|
config.register(:channels, Appydave::Tools::Configuration::ChannelsConfig)
|
27
29
|
config.register(:channel_projects, Appydave::Tools::Configuration::ChannelProjectsConfig)
|
28
30
|
end
|
data/package-lock.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "appydave-tools",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.5.0",
|
4
4
|
"lockfileVersion": 3,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "appydave-tools",
|
9
|
-
"version": "0.
|
9
|
+
"version": "0.5.0",
|
10
10
|
"devDependencies": {
|
11
11
|
"@klueless-js/semantic-release-rubygem": "github:klueless-js/semantic-release-rubygem",
|
12
12
|
"@semantic-release/changelog": "^6.0.3",
|
data/package.json
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appydave-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Cruwys
|
@@ -92,14 +92,15 @@ files:
|
|
92
92
|
- images.log
|
93
93
|
- lib/appydave/tools.rb
|
94
94
|
- lib/appydave/tools/configuration/_doc.md
|
95
|
-
- lib/appydave/tools/configuration/channel_projects_config.rb
|
96
|
-
- lib/appydave/tools/configuration/channels_config.rb
|
97
95
|
- lib/appydave/tools/configuration/config.rb
|
98
|
-
- lib/appydave/tools/configuration/config_base.rb
|
99
96
|
- lib/appydave/tools/configuration/configurable.rb
|
97
|
+
- lib/appydave/tools/configuration/models/bank_reconciliation_config.rb
|
98
|
+
- lib/appydave/tools/configuration/models/channel_projects_config.rb
|
99
|
+
- lib/appydave/tools/configuration/models/channels_config.rb
|
100
|
+
- lib/appydave/tools/configuration/models/config_base.rb
|
101
|
+
- lib/appydave/tools/configuration/models/settings_config copy.xrb
|
102
|
+
- lib/appydave/tools/configuration/models/settings_config.rb
|
100
103
|
- lib/appydave/tools/configuration/openai.rb
|
101
|
-
- lib/appydave/tools/configuration/settings_config copy.xrb
|
102
|
-
- lib/appydave/tools/configuration/settings_config.rb
|
103
104
|
- lib/appydave/tools/gpt_context/_doc.md
|
104
105
|
- lib/appydave/tools/gpt_context/file_collector.rb
|
105
106
|
- lib/appydave/tools/name_manager/_doc.md
|
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Appydave
|
4
|
-
module Tools
|
5
|
-
module Configuration
|
6
|
-
# Channel projects configuration
|
7
|
-
class ChannelProjectsConfig < ConfigBase
|
8
|
-
# Retrieve channel information by channel name (string or symbol)
|
9
|
-
def get_channel_info(channel_name)
|
10
|
-
channel_name = channel_name.to_s
|
11
|
-
ChannelInfo.new(data['channel_projects'][channel_name] || default_channel_info)
|
12
|
-
end
|
13
|
-
|
14
|
-
# Set channel information
|
15
|
-
def set_channel_info(channel_name, channel_info)
|
16
|
-
data['channel_projects'] ||= {}
|
17
|
-
data['channel_projects'][channel_name.to_s] = channel_info.to_h
|
18
|
-
end
|
19
|
-
|
20
|
-
# Retrieve a list of all channel projects
|
21
|
-
def channel_projects
|
22
|
-
data['channel_projects'].map do |_name, info|
|
23
|
-
ChannelInfo.new(info)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def default_data
|
30
|
-
{ 'channel_projects' => {} }
|
31
|
-
end
|
32
|
-
|
33
|
-
def default_channel_info
|
34
|
-
{
|
35
|
-
'content_projects' => '',
|
36
|
-
'video_projects' => '',
|
37
|
-
'published_projects' => '',
|
38
|
-
'abandoned_projects' => ''
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
# Type-safe class to access channel info properties
|
43
|
-
class ChannelInfo
|
44
|
-
attr_accessor :content_projects, :video_projects, :published_projects, :abandoned_projects
|
45
|
-
|
46
|
-
def initialize(data)
|
47
|
-
@content_projects = data['content_projects']
|
48
|
-
@video_projects = data['video_projects']
|
49
|
-
@published_projects = data['published_projects']
|
50
|
-
@abandoned_projects = data['abandoned_projects']
|
51
|
-
end
|
52
|
-
|
53
|
-
def to_h
|
54
|
-
{
|
55
|
-
'content_projects' => @content_projects,
|
56
|
-
'video_projects' => @video_projects,
|
57
|
-
'published_projects' => @published_projects,
|
58
|
-
'abandoned_projects' => @abandoned_projects
|
59
|
-
}
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Appydave
|
4
|
-
module Tools
|
5
|
-
module Configuration
|
6
|
-
# Channels configuration
|
7
|
-
class ChannelsConfig < ConfigBase
|
8
|
-
# Retrieve channel information by channel code (string or symbol)
|
9
|
-
def get_channel(channel_key)
|
10
|
-
channel_key = channel_key.to_s
|
11
|
-
info = data['channels'][channel_key] || default_channel_info
|
12
|
-
ChannelInfo.new(channel_key, info)
|
13
|
-
end
|
14
|
-
|
15
|
-
# Set channel information
|
16
|
-
def set_channel(channel_key, channel_info)
|
17
|
-
data['channels'] ||= {}
|
18
|
-
data['channels'][channel_key.to_s] = channel_info.to_h
|
19
|
-
end
|
20
|
-
|
21
|
-
# Retrieve a list of all channels
|
22
|
-
def channels
|
23
|
-
data['channels'].map do |key, info|
|
24
|
-
ChannelInfo.new(key, info)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def key?(key)
|
29
|
-
key = key.to_s
|
30
|
-
data['channels'].key?(key)
|
31
|
-
end
|
32
|
-
|
33
|
-
def code?(code)
|
34
|
-
code = code.to_s
|
35
|
-
data['channels'].values.any? { |info| info['code'] == code }
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def default_data
|
41
|
-
{ 'channels' => {} }
|
42
|
-
end
|
43
|
-
|
44
|
-
def default_channel_info
|
45
|
-
{
|
46
|
-
'code' => '',
|
47
|
-
'name' => '',
|
48
|
-
'youtube_handle' => ''
|
49
|
-
}
|
50
|
-
end
|
51
|
-
|
52
|
-
# Type-safe class to access channel properties
|
53
|
-
class ChannelInfo
|
54
|
-
attr_accessor :key, :code, :name, :youtube_handle
|
55
|
-
|
56
|
-
def initialize(key, data)
|
57
|
-
@key = key
|
58
|
-
@code = data['code']
|
59
|
-
@name = data['name']
|
60
|
-
@youtube_handle = data['youtube_handle']
|
61
|
-
end
|
62
|
-
|
63
|
-
def to_h
|
64
|
-
{
|
65
|
-
'code' => @code,
|
66
|
-
'name' => @name,
|
67
|
-
'youtube_handle' => @youtube_handle
|
68
|
-
}
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
require 'fileutils'
|
5
|
-
|
6
|
-
module Appydave
|
7
|
-
module Tools
|
8
|
-
module Configuration
|
9
|
-
# Base class for handling common configuration tasks
|
10
|
-
class ConfigBase
|
11
|
-
include KLog::Logging
|
12
|
-
|
13
|
-
attr_reader :config_path, :data
|
14
|
-
|
15
|
-
def initialize
|
16
|
-
@config_path = File.join(Config.config_path, "#{config_name}.json")
|
17
|
-
@data = load
|
18
|
-
end
|
19
|
-
|
20
|
-
def save
|
21
|
-
File.write(config_path, JSON.pretty_generate(data))
|
22
|
-
end
|
23
|
-
|
24
|
-
def load
|
25
|
-
return JSON.parse(File.read(config_path)) if File.exist?(config_path)
|
26
|
-
|
27
|
-
default_data
|
28
|
-
rescue JSON::ParserError
|
29
|
-
# log.exception e
|
30
|
-
default_data
|
31
|
-
end
|
32
|
-
|
33
|
-
def name
|
34
|
-
self.class.name.split('::')[-1].gsub(/Config$/, '')
|
35
|
-
end
|
36
|
-
|
37
|
-
def config_name
|
38
|
-
name.gsub(/([a-z])([A-Z])/, '\1-\2').downcase
|
39
|
-
end
|
40
|
-
|
41
|
-
def debug
|
42
|
-
log.kv 'Config', name
|
43
|
-
log.kv 'Path', config_path
|
44
|
-
|
45
|
-
log.json data
|
46
|
-
end
|
47
|
-
|
48
|
-
private
|
49
|
-
|
50
|
-
def default_data
|
51
|
-
{}
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Appydave
|
4
|
-
module Tools
|
5
|
-
module Configuration
|
6
|
-
# Global settings that can be referenced by other configurations or tools
|
7
|
-
class SettingsConfig < ConfigBase
|
8
|
-
def set(key, value)
|
9
|
-
data[key] = value
|
10
|
-
end
|
11
|
-
|
12
|
-
def get(key, default = nil)
|
13
|
-
data.fetch(key, default)
|
14
|
-
end
|
15
|
-
|
16
|
-
# Well known settings
|
17
|
-
|
18
|
-
def ecamm_recording_folder
|
19
|
-
get('ecamm-recording-folder')
|
20
|
-
end
|
21
|
-
|
22
|
-
def download_folder
|
23
|
-
get('download-folder')
|
24
|
-
end
|
25
|
-
|
26
|
-
def download_image_folder
|
27
|
-
get('download-image-folder') || download_folder
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
/data/lib/appydave/tools/configuration/{settings_config copy.xrb → models/settings_config copy.xrb}
RENAMED
File without changes
|