aro 0.2.5 → 0.2.6
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 +2 -2
- data/.ruby-version +1 -0
- data/Gemfile.lock +106 -89
- data/aro.gemspec +10 -11
- data/bin/oss_om +15 -0
- data/checksums/aro-0.2.5.gem.sha512 +1 -0
- data/checksums/aro-0.2.6.gem.sha512 +1 -0
- data/locale/en.cards.yml +1 -1
- data/locale/en.cmd.yml +34 -0
- data/locale/en.cor.yml +5 -8
- data/locale/en.menu_items.yml +2 -0
- data/locale/en.menus.yml +2 -0
- data/locale/en.usage.yml +21 -98
- data/locale/en.yml +61 -50
- data/sys/aro/cmd.rb +96 -0
- data/sys/{aos → aro}/cor.rb +224 -268
- data/sys/aro/d.rb +4 -3
- data/sys/aro/db/migrate/.DS_Store +0 -0
- data/sys/aro/db/migrate/1793913747_create_data_bases.rb +13 -0
- data/sys/aro/db/migrate/1793913777_create_data_base_directories.rb +14 -0
- data/sys/aro/db/migrate/1793913796_create_data_base_files.rb +12 -0
- data/sys/aro/db/migrate/1793913841_create_menus.rb +11 -0
- data/sys/aro/db/migrate/1793913861_create_menu_items.rb +14 -0
- data/sys/aro/db.rb +72 -33
- data/sys/aro/designer.rb +281 -0
- data/sys/aro/locale.rb +136 -0
- data/sys/aro/ma_ain.rb +54 -0
- data/sys/aro/mancy.rb +53 -28
- data/sys/aro/models/concerns/.keep +0 -0
- data/sys/aro/models/concerns/uuid.rb +29 -0
- data/sys/aro/models/data_base.rb +97 -0
- data/sys/aro/models/directory.rb +44 -0
- data/sys/aro/models/file.rb +27 -0
- data/sys/aro/models/menu.rb +27 -0
- data/sys/aro/models/menu_item.rb +47 -0
- data/sys/aro/models/teck.rb +19 -28
- data/sys/aro/p.rb +6 -3
- data/sys/aro/r.rb +1 -2
- data/sys/aro/store.rb +147 -0
- data/sys/aro/v.rb +2 -2
- data/sys/aro/views/base.rb +25 -0
- data/sys/aro/views/teck.rb +30 -0
- data/sys/aro.rb +1 -2
- data/sys/cli/constants.rb +1 -6
- data/sys/cli/create.rb +3 -3
- data/sys/cli/nterface.rb +8 -8
- data/sys/cli/teck.rb +17 -18
- data/sys/cli/usage.rb +4 -8
- data/sys/cli.rb +0 -1
- data/sys/reiquire.rb +146 -25
- data/sys/shr/.DS_Store +0 -0
- data/sys/shr/prompt.rb +8 -2
- data/sys/shr/t.rb +5 -5
- data/sys/shr/version.rb +9 -2
- data/tasks/make.rake +2 -1
- metadata +53 -116
- data/bin/aos +0 -31
- data/bin/aro +0 -50
- data/bin/ino +0 -22
- data/ino_rules_todo.txt +0 -28
- data/locale/en.abot.yml +0 -81
- data/locale/en.amg.yml +0 -44
- data/locale/en.aos.yml +0 -40
- data/locale/en.data.yml +0 -30
- data/locale/en.dom.yml +0 -47
- data/locale/en.flie.yml +0 -29
- data/locale/en.ino.yml +0 -9
- data/sys/aos/abot.rb +0 -254
- data/sys/aos/amg.rb +0 -184
- data/sys/aos/aos.rb +0 -672
- data/sys/aos/data.rb +0 -117
- data/sys/aos/db/migrate/1765148774_create_yous.rb +0 -20
- data/sys/aos/db/migrate/1765762724_create_ilibs.rb +0 -22
- data/sys/aos/db/migrate/1765907766_create_ilogs.rb +0 -18
- data/sys/aos/db/migrate/1765933985_create_agodos.rb +0 -22
- data/sys/aos/db/migrate/1766203888_create_fpxies.rb +0 -18
- data/sys/aos/db.rb +0 -105
- data/sys/aos/flie.rb +0 -144
- data/sys/aos/models/agodo.rb +0 -103
- data/sys/aos/models/fpxy.rb +0 -26
- data/sys/aos/models/ilib.rb +0 -46
- data/sys/aos/models/ilog.rb +0 -27
- data/sys/aos/models/you.rb +0 -138
- data/sys/aos/s.rb +0 -26
- data/sys/aos/vws/base.rb +0 -159
- data/sys/aos/vws/dom.rb +0 -32
- data/sys/aos/vws/games/abot.rb +0 -21
- data/sys/aos/vws/games/ino.rb +0 -21
- data/sys/aos/vws/games/teck.rb +0 -122
- data/sys/aos/vws/games.rb +0 -19
- data/sys/aos/vws/home.rb +0 -23
- data/sys/aos/vws/know/body.rb +0 -19
- data/sys/aos/vws/know/mind.rb +0 -19
- data/sys/aos/vws/know/spirit.rb +0 -19
- data/sys/aos/vws/know.rb +0 -19
- data/sys/aos/vws/root/amg.rb +0 -21
- data/sys/aos/vws/root/config.rb +0 -21
- data/sys/aos/vws/root/data.rb +0 -21
- data/sys/aos/vws/root/flie.rb +0 -21
- data/sys/aos/vws/root.rb +0 -19
- data/sys/aos/vws/welcome/waite.rb +0 -31
- data/sys/aos/vws/welcome/winner.rb +0 -19
- data/sys/aos/vws/welcome.rb +0 -66
- data/sys/aro/db/migrate/1768856981_create_scrolls.rb +0 -20
- data/sys/aro/db/migrate/1768858841_create_legends.rb +0 -16
- data/sys/aro/db/migrate/1768858967_create_stories.rb +0 -17
- data/sys/aro/db/migrate/1768859060_create_chapters.rb +0 -15
- data/sys/aro/db/migrate/1768859126_create_statements.rb +0 -22
- data/sys/aro/db/migrate/1768859144_create_players.rb +0 -18
- data/sys/aro/ino.rb +0 -64
- data/sys/aro/models/chapter.rb +0 -18
- data/sys/aro/models/legend.rb +0 -28
- data/sys/aro/models/player.rb +0 -17
- data/sys/aro/models/scroll.rb +0 -46
- data/sys/aro/models/statement.rb +0 -14
- data/sys/aro/models/story.rb +0 -28
- data/sys/cli/dom.rb +0 -43
- data/sys/dom/d.rb +0 -138
- data/sys/dom/dom.rb +0 -215
- data/sys/dom/p.rb +0 -17
- data/sys/fpx.rb +0 -104
- data/sys/shr/ilib/crs/CMakeLists.txt +0 -12
- data/sys/shr/ilib/crs/compile.sh +0 -5
- data/sys/shr/ilib/crs/crs.c +0 -24
- data/sys/shr/ilib/crs/crs.o +0 -0
- data/sys/shr/ilib/crs/libcrs.so +0 -0
data/sys/aro/d.rb
CHANGED
|
@@ -15,12 +15,13 @@ module Aro
|
|
|
15
15
|
class D < Aro::Prompt
|
|
16
16
|
def self.say(message)
|
|
17
17
|
return unless Aro::D.should_print?
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
super("#{Aro::Mancy.ps1_display(Aro::D.name)}#{normalize_message(message)}")
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def self.should_print?
|
|
22
|
-
return false unless
|
|
23
|
-
|
|
23
|
+
return false unless Aro::Cor.ivar(:ENV).present?
|
|
24
|
+
Aro::Cor::DBG_MODES.include?(Aro::Cor.ivar(:ENV)&.to_sym)
|
|
24
25
|
end
|
|
25
26
|
end
|
|
26
27
|
end
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class CreateDataBases < ActiveRecord::Migration[8.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :data_bases do |t|
|
|
4
|
+
t.string :unix_path, null: false
|
|
5
|
+
t.string :uuid, null: false
|
|
6
|
+
|
|
7
|
+
t.timestamps
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
add_index :data_bases, :uuid, unique: true
|
|
11
|
+
add_index :data_bases, :unix_path, unique: true
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class CreateDataBaseDirectories < ActiveRecord::Migration[8.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :data_base_directories do |t|
|
|
4
|
+
t.string :unix_path, null: false
|
|
5
|
+
t.belongs_to :data_base, null: false, foreign_key: true
|
|
6
|
+
t.string :uuid, null: false
|
|
7
|
+
|
|
8
|
+
t.timestamps
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
add_index :data_base_directories, :uuid, unique: true
|
|
12
|
+
add_index :data_base_directories, [:data_base_id, :unix_path], unique: true
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
class CreateDataBaseFiles < ActiveRecord::Migration[8.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :data_base_files do |t|
|
|
4
|
+
t.belongs_to :data_base_directory, null: false, foreign_key: true
|
|
5
|
+
t.string :uuid, null: false
|
|
6
|
+
|
|
7
|
+
t.timestamps
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
add_index :data_base_files, :uuid, unique: true
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class CreateMenuItems < ActiveRecord::Migration[8.1]
|
|
2
|
+
def change
|
|
3
|
+
create_table :menu_items do |t|
|
|
4
|
+
t.belongs_to :menu, null: false, foreign_key: true
|
|
5
|
+
t.string :uuid, null: false
|
|
6
|
+
t.string :tty_name
|
|
7
|
+
|
|
8
|
+
t.timestamps
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
add_index :menu_items, :uuid, unique: true
|
|
12
|
+
add_index :menu_items, [:menu_id, :tty_name], unique: true
|
|
13
|
+
end
|
|
14
|
+
end
|
data/sys/aro/db.rb
CHANGED
|
@@ -8,92 +8,131 @@
|
|
|
8
8
|
|
|
9
9
|
=end
|
|
10
10
|
|
|
11
|
-
require_relative :"./mancy".to_s
|
|
12
|
-
require_relative :"../aos/cor".to_s
|
|
13
|
-
|
|
14
11
|
module Aro
|
|
15
12
|
class Db
|
|
16
13
|
include Singleton
|
|
17
14
|
|
|
15
|
+
attr_accessor :active_record_connection_instance
|
|
16
|
+
HEARTBEAT_DURATION = 11
|
|
18
17
|
DATABASE_YML = :"database.yml"
|
|
19
|
-
GEM_DB_PATH = :"sys/aro/db"
|
|
20
|
-
MIGRATIONS_DIR = :"db/migrate"
|
|
21
18
|
SCHEMA_FILE = :"schema.rb"
|
|
22
|
-
SQL_FILE = :"
|
|
19
|
+
SQL_FILE = :"base.sql"
|
|
20
|
+
|
|
21
|
+
def self.ensure_connected!
|
|
22
|
+
return if self.instance.connected?
|
|
23
23
|
|
|
24
|
-
def self.load
|
|
25
24
|
Aro::Db.configure_logger
|
|
26
25
|
if Aro::Mancy.in_aro?
|
|
27
26
|
self.instance.setup_local_aro
|
|
28
27
|
end
|
|
29
28
|
end
|
|
30
29
|
|
|
30
|
+
def connected?
|
|
31
|
+
!self.active_record_connection_instance.nil? &&
|
|
32
|
+
self.active_record_connection_instance.connected?
|
|
33
|
+
end
|
|
34
|
+
|
|
31
35
|
def self.configure_logger
|
|
32
|
-
if
|
|
36
|
+
if Aro::Cor.ivar(:LOG_DATABASE).to_s == Aro::Cor::BOOLS[:TRUE].to_s
|
|
33
37
|
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
|
34
38
|
else
|
|
35
39
|
ActiveRecord::Base.logger = nil
|
|
36
40
|
end
|
|
37
41
|
end
|
|
38
42
|
|
|
39
|
-
def self.
|
|
40
|
-
|
|
41
|
-
return "#{
|
|
43
|
+
def self.base_db_dir
|
|
44
|
+
db_dir = File.join(Aro::Mancy.root_dir, :db.to_s)
|
|
45
|
+
return "#{db_dir}_#{Aro::Cor::ENVS[:TEST]}" if Aro::Cor.is_test?
|
|
46
|
+
db_dir
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.migrate_dir
|
|
50
|
+
File.join(Aro::Db.base_db_dir, :migrate.to_s)
|
|
51
|
+
end
|
|
42
52
|
|
|
43
|
-
|
|
53
|
+
def self.sql_filepath
|
|
54
|
+
File.join(Aro::Db.base_db_dir, Aro::Db::SQL_FILE.to_s)
|
|
44
55
|
end
|
|
45
56
|
|
|
46
57
|
def db_config_filepath
|
|
47
|
-
|
|
58
|
+
File.join(Aro::Db.base_db_dir, Aro::Db::DATABASE_YML.to_s)
|
|
48
59
|
end
|
|
49
60
|
|
|
50
61
|
def setup_local_aro
|
|
51
|
-
|
|
52
|
-
|
|
62
|
+
aro_name = Aro::Mancy.in_aro? ? Aro::Mancy.aro_mancy_name : nil
|
|
63
|
+
# todo: exit here if error
|
|
64
|
+
return if aro_name.nil?
|
|
53
65
|
|
|
54
66
|
# create local .aro/ directory
|
|
55
|
-
unless File.exist?(Aro::Db.
|
|
56
|
-
Aro::P.say("creating #{Aro::
|
|
57
|
-
FileUtils.
|
|
67
|
+
unless File.exist?(Aro::Db.base_db_dir)
|
|
68
|
+
Aro::P.say("creating #{Aro::Db.base_db_dir} directory...")
|
|
69
|
+
FileUtils.mkdir_p(Aro::Db.base_db_dir)
|
|
58
70
|
end
|
|
59
71
|
|
|
60
72
|
unless File.exist?(db_config_filepath)
|
|
73
|
+
pw = Aro::P.p.ask(I18n.t("messages.base_db_password_prompt", aro_name: aro_name, sql_filepath: self.class.sql_filepath))
|
|
74
|
+
pw = aro_name unless pw.present?
|
|
61
75
|
# create database config yaml file
|
|
62
76
|
c = {
|
|
63
77
|
adapter: :sqlite3.to_s,
|
|
64
|
-
database:
|
|
65
|
-
username:
|
|
66
|
-
password:
|
|
67
|
-
pool:
|
|
78
|
+
database: self.class.sql_filepath,
|
|
79
|
+
username: aro_name,
|
|
80
|
+
password: pw,
|
|
81
|
+
pool: 11
|
|
68
82
|
}.to_yaml
|
|
69
83
|
File.open(db_config_filepath, "w") do |file|
|
|
70
84
|
file.write(c)
|
|
71
85
|
end
|
|
86
|
+
Aro::P.say("set #{self.class.sql_filepath} password to #{pw}")
|
|
87
|
+
Aro::P.say(Psych.load_file(db_config_filepath))
|
|
72
88
|
end
|
|
73
89
|
|
|
74
90
|
connect
|
|
75
|
-
migrate
|
|
91
|
+
migrate
|
|
76
92
|
end
|
|
77
93
|
|
|
78
94
|
def connect
|
|
79
|
-
ActiveRecord::Base.establish_connection(
|
|
95
|
+
self.active_record_connection_instance = ActiveRecord::Base.establish_connection(
|
|
80
96
|
YAML.load_file(db_config_filepath)
|
|
81
97
|
)
|
|
98
|
+
Aro::D.say("#{self}#{__method__}#{self.active_record_connection_instance.inspect}")
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def self.migrations_filepaths
|
|
102
|
+
File.join(Aro::Db.migrate_dir, "*.rb")
|
|
82
103
|
end
|
|
83
104
|
|
|
84
|
-
def
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
105
|
+
def self.gem_migrations_filepaths
|
|
106
|
+
File.join(Reiquire.gem_migrations_path, :migrate.to_s, "*.rb")
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def migrate
|
|
110
|
+
puts __method__
|
|
111
|
+
migration_file_names = Dir[self.class.migrations_filepaths].map{|fp| File.basename(fp)}
|
|
112
|
+
puts "migration_file_names: #{migration_file_names}"
|
|
113
|
+
gem_migration_file_names = Dir[self.class.gem_migrations_filepaths].map{|fp| File.basename(fp)}
|
|
114
|
+
puts "gem_migration_file_names: #{gem_migration_file_names}"
|
|
115
|
+
mfs_all = gem_migration_file_names.all?{|gmf|
|
|
116
|
+
migration_file_names.include?(gmf)
|
|
117
|
+
}
|
|
118
|
+
puts "mfs_all: #{mfs_all}"
|
|
119
|
+
|
|
120
|
+
unless Dir.exist?(Aro::Db.migrate_dir) && mfs_all
|
|
121
|
+
puts "Reiquire.copy_db_migrations_from_gem!"
|
|
122
|
+
puts "ls #{Aro::Db.migrate_dir}"
|
|
123
|
+
puts migration_file_names
|
|
124
|
+
Reiquire.copy_db_migrations_from_gem!
|
|
89
125
|
end
|
|
90
126
|
|
|
91
|
-
migration_version =
|
|
92
|
-
|
|
127
|
+
migration_version = migration_file_names.map{|n|
|
|
128
|
+
n.to_s.split("_")[0].to_i
|
|
93
129
|
}.max
|
|
94
|
-
ActiveRecord::MigrationContext.new(
|
|
130
|
+
ActiveRecord::MigrationContext.new(Aro::Db.migrate_dir).migrate(migration_version)
|
|
131
|
+
dump_schema!
|
|
132
|
+
end
|
|
95
133
|
|
|
96
|
-
|
|
134
|
+
def dump_schema!
|
|
135
|
+
filename = File.join(Aro::Db.base_db_dir, Aro::Db::SCHEMA_FILE.to_s)
|
|
97
136
|
File.open(filename, "w+") do |f|
|
|
98
137
|
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection_pool, f)
|
|
99
138
|
end
|
data/sys/aro/designer.rb
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
|
|
3
|
+
designer.rb
|
|
4
|
+
|
|
5
|
+
aro dom designer.
|
|
6
|
+
|
|
7
|
+
by i2097i
|
|
8
|
+
|
|
9
|
+
=end
|
|
10
|
+
|
|
11
|
+
module Aro
|
|
12
|
+
module Dom
|
|
13
|
+
class Designer
|
|
14
|
+
ACTION_LJUST = 22
|
|
15
|
+
CLASS_LJUST = 33
|
|
16
|
+
|
|
17
|
+
def self.design_aro
|
|
18
|
+
env_home_val = ENV[:HOME.to_s]
|
|
19
|
+
Aro::P.say(:"checking for bash env var $HOME in ruby ENV".to_s)
|
|
20
|
+
Aro::P.say(:"$HOME is set to #{env_home_val}".to_s)
|
|
21
|
+
abs_home = Aro::P.p.ask(:"use alternative aro_root? (empty to use $HOME): ".to_s)
|
|
22
|
+
raise "missing required value for aro_root!" if abs_home.nil? && env_home_val.nil?
|
|
23
|
+
aro_home_dir = abs_home || env_home_val
|
|
24
|
+
oss_om_base_dir = ::File.join(aro_home_dir, Aro::Mancy::ARO_DIRECTORY.to_s)
|
|
25
|
+
Aro::P.say("FileUtils.mkdir_p(#{oss_om_base_dir})")
|
|
26
|
+
FileUtils.mkdir_p(oss_om_base_dir)
|
|
27
|
+
Aro::P.say("FileUtils.chdir(#{aro_home_dir})")
|
|
28
|
+
FileUtils.chdir(aro_home_dir) do
|
|
29
|
+
Aro::P.say("Aro::Cor.instance.load_env")
|
|
30
|
+
Aro::Cor.instance.load_env
|
|
31
|
+
Aro::P.say("Aro::Cor.set_ivar(:OSS_OM_HOME, #{File.absolute_path(aro_home_dir)})")
|
|
32
|
+
Aro::Cor.set_ivar(:OSS_OM_HOME, File.absolute_path(aro_home_dir))
|
|
33
|
+
Aro::P.say("Aro::Db.ensure_connected!")
|
|
34
|
+
Aro::Db.ensure_connected!
|
|
35
|
+
Aro::P.say("Aro::Mancy.init(#{aro_home_dir})")
|
|
36
|
+
Aro::Mancy.init(aro_home_dir)
|
|
37
|
+
Aro::P.say("Reiquire.reload_i18n!")
|
|
38
|
+
Reiquire.reload_i18n!
|
|
39
|
+
# design_menu(Aro::Dom::Menu.first)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if File.absolute_path(Dir.pwd) != Aro::Cor.ivar(:OSS_OM_HOME)
|
|
43
|
+
Aro::P.say("user needs to cd")
|
|
44
|
+
Aro::P.say("enter $ cd #{Aro::Cor.ivar(:OSS_OM_HOME)}")
|
|
45
|
+
exit
|
|
46
|
+
end
|
|
47
|
+
design
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def self.design
|
|
52
|
+
if Aro::Cor.ivar(:OSS_OM_HOME).nil?
|
|
53
|
+
design_aro
|
|
54
|
+
return
|
|
55
|
+
end
|
|
56
|
+
Aro::Dom::Ma_ain.instance.current_menu = Aro::Dom::DataBase.open_menu(:ma_ain)
|
|
57
|
+
|
|
58
|
+
loop do
|
|
59
|
+
selected_menu_item_uuid = Aro::P.p.select(
|
|
60
|
+
"#{Aro::Dom::Ma_ain.instance.current_menu.localized_name}",
|
|
61
|
+
[{name: :open_menu, value: :open_menu}] + Aro::Dom::Ma_ain.instance.current_menu.menu_items.map{|mi| mi.as_tty},
|
|
62
|
+
show_help: :always,
|
|
63
|
+
cycle: true,
|
|
64
|
+
per_page: 11
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
if selected_menu_item_uuid == :open_menu
|
|
68
|
+
Aro::Dom::Designer.design_menu(Aro::Dom::Ma_ain.instance.current_menu)
|
|
69
|
+
else
|
|
70
|
+
Aro::Dom::Designer.design_menu_item(
|
|
71
|
+
selected_menu_item_uuid,
|
|
72
|
+
Aro::Dom::Ma_ain.instance.current_menu
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def self.create_menu
|
|
79
|
+
new_name = get_new_value_from_user(
|
|
80
|
+
"#{Aro::Dom::Menu.name} #{I18n.t("open_menu.designer.#{__method__}")}"
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
unless new_name.nil? ||
|
|
84
|
+
new_name.empty? ||
|
|
85
|
+
new_name.kind_of?(FalseClass)
|
|
86
|
+
|
|
87
|
+
# create menu active record with i18n_display_key
|
|
88
|
+
new_menu = Aro::Dom::DataBase.open_menu(Aro::Dom::Locale.i18n_keyify_text(new_name))
|
|
89
|
+
|
|
90
|
+
# open new menu in designer
|
|
91
|
+
design_menu(new_menu)
|
|
92
|
+
else
|
|
93
|
+
Aro::P.say("#{new_name.inspect} is invalid")
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def self.create_menu_item(menu)
|
|
98
|
+
return create_menu if menu.nil?
|
|
99
|
+
|
|
100
|
+
new_name = get_new_value_from_user(
|
|
101
|
+
"#{__method__} #{Aro::Dom::MenuItem.name} for menu: '#{I18n.t(menu.full_i18n_path)}'"
|
|
102
|
+
)
|
|
103
|
+
unless new_name.nil? ||
|
|
104
|
+
new_name.empty? ||
|
|
105
|
+
new_name.kind_of?(FalseClass)
|
|
106
|
+
|
|
107
|
+
menu_item = menu.menu_items.create(tty_name: Aro::Dom::Locale.i18n_keyify_text(new_name))
|
|
108
|
+
Aro::Dom::Locale.add_i18n_key(
|
|
109
|
+
new_name,
|
|
110
|
+
library_name: :menu_items,
|
|
111
|
+
new_i18n_display_key: menu_item.uuid,
|
|
112
|
+
)
|
|
113
|
+
else
|
|
114
|
+
Aro::P.say("#{new_name.inspect} is invalid")
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
design_menu(menu)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def self.design_menu(menu = nil)
|
|
121
|
+
return create_menu if menu.nil?
|
|
122
|
+
|
|
123
|
+
# action,class,value
|
|
124
|
+
options = [
|
|
125
|
+
{
|
|
126
|
+
name: :back,
|
|
127
|
+
value: :back
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: "(edit_title)".ljust(ACTION_LJUST) +
|
|
131
|
+
"#{menu.class.name}(#{menu.id})".ljust(CLASS_LJUST) +
|
|
132
|
+
"#{menu.localized_name}",
|
|
133
|
+
value: :edit_title
|
|
134
|
+
}
|
|
135
|
+
] + menu.menu_items.map{|mi|
|
|
136
|
+
{
|
|
137
|
+
name: "(edit_item)".ljust(ACTION_LJUST) +
|
|
138
|
+
"#{mi.class.name}(#{mi.id})".ljust(CLASS_LJUST) +
|
|
139
|
+
"#{mi.localized_name}",
|
|
140
|
+
value: mi.uuid
|
|
141
|
+
}
|
|
142
|
+
} + [
|
|
143
|
+
{
|
|
144
|
+
name: "(create_item)".ljust(ACTION_LJUST) +
|
|
145
|
+
"#{Aro::Dom::MenuItem.name}(+)".ljust(CLASS_LJUST),
|
|
146
|
+
value: :create_item
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
|
|
150
|
+
v = Aro::P.p.select(
|
|
151
|
+
I18n.t("open_menu.edit_menu_localized_name", localized_name: menu.localized_name),
|
|
152
|
+
options
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
case v.to_sym
|
|
156
|
+
when :edit_title
|
|
157
|
+
new_name = get_new_value_from_user(
|
|
158
|
+
"rename #{menu.class} '#{menu.localized_name}'"
|
|
159
|
+
)
|
|
160
|
+
unless new_name.nil? ||
|
|
161
|
+
new_name.empty? ||
|
|
162
|
+
new_name.kind_of?(FalseClass)
|
|
163
|
+
|
|
164
|
+
Aro::Dom::Locale.update_i18n_key(
|
|
165
|
+
new_name,
|
|
166
|
+
menu.uuid
|
|
167
|
+
)
|
|
168
|
+
else
|
|
169
|
+
Aro::P.say("#{new_name.inspect} is invalid")
|
|
170
|
+
end
|
|
171
|
+
when :create_item
|
|
172
|
+
create_menu_item(menu)
|
|
173
|
+
when :back
|
|
174
|
+
return
|
|
175
|
+
else
|
|
176
|
+
design_menu_item(v, menu)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def self.design_menu_item(menu_item_uuid = nil, menu)
|
|
181
|
+
return create_menu_item(menu) if menu_item_uuid.nil?
|
|
182
|
+
|
|
183
|
+
menu_item = menu.menu_items.find_by(uuid: menu_item_uuid)
|
|
184
|
+
|
|
185
|
+
# new_name = get_new_value_from_user(
|
|
186
|
+
# "rename #{menu_item.class} '#{I18n.t(menu_item.full_i18n_path)}'"
|
|
187
|
+
# )
|
|
188
|
+
# unless new_name.nil? ||
|
|
189
|
+
# new_name.empty? ||
|
|
190
|
+
# new_name.kind_of?(FalseClass)
|
|
191
|
+
|
|
192
|
+
# Aro::Dom::Locale.update_i18n_key(
|
|
193
|
+
# new_name,
|
|
194
|
+
# menu_item.uuid,
|
|
195
|
+
# library_name: :menu_items
|
|
196
|
+
# )
|
|
197
|
+
# else
|
|
198
|
+
# Aro::P.say("#{new_name.inspect} is invalid")
|
|
199
|
+
# end
|
|
200
|
+
|
|
201
|
+
# action,class,value
|
|
202
|
+
options = [
|
|
203
|
+
{
|
|
204
|
+
name: :back,
|
|
205
|
+
value: :back
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: "(edit_title)".ljust(ACTION_LJUST) +
|
|
209
|
+
"#{menu_item.class.name}(#{menu_item.id})".ljust(CLASS_LJUST) +
|
|
210
|
+
"#{menu_item.localized_name}",
|
|
211
|
+
value: :edit_title
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: "(edit_action)".ljust(ACTION_LJUST) +
|
|
215
|
+
"Aro::Dom::MenuItem::Action(+)".ljust(CLASS_LJUST),
|
|
216
|
+
value: :edit_action
|
|
217
|
+
}
|
|
218
|
+
]
|
|
219
|
+
|
|
220
|
+
v = Aro::P.p.select(
|
|
221
|
+
I18n.t("open_menu.edit_menu_item_localized_name", localized_name: menu_item.localized_name),
|
|
222
|
+
options
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
case v.to_sym
|
|
226
|
+
when :edit_title
|
|
227
|
+
new_name = get_new_value_from_user(
|
|
228
|
+
"rename #{menu_item.class} '#{menu_item.localized_name}'"
|
|
229
|
+
)
|
|
230
|
+
unless new_name.nil? ||
|
|
231
|
+
new_name.empty? ||
|
|
232
|
+
new_name.kind_of?(FalseClass)
|
|
233
|
+
|
|
234
|
+
Aro::Dom::Locale.update_i18n_key(
|
|
235
|
+
new_name,
|
|
236
|
+
menu_item.uuid,
|
|
237
|
+
library_name: :menu_items
|
|
238
|
+
)
|
|
239
|
+
else
|
|
240
|
+
Aro::P.say("#{new_name.inspect} is invalid")
|
|
241
|
+
end
|
|
242
|
+
when :edit_action
|
|
243
|
+
puts "this is where i am working"
|
|
244
|
+
return
|
|
245
|
+
when :back
|
|
246
|
+
return
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
# this is for updating data stores
|
|
250
|
+
# todo:
|
|
251
|
+
# Aro::P.say([
|
|
252
|
+
# to_s,
|
|
253
|
+
# "=> writing property :tty_name => '#{new_name}'",
|
|
254
|
+
# "=> to #{menu_item.aro_file.class}(#{menu_item.aro_file.uuid})",
|
|
255
|
+
# "=> in #{Aro::Dom::DataBase.name} #{menu_item.aro_file.aro_file_path}",
|
|
256
|
+
# "=> for #{menu_item.class}(#{menu_item.uuid})"
|
|
257
|
+
# ].join("\n"))
|
|
258
|
+
|
|
259
|
+
# menu_item.aro_file.write!({tty_name: new_name})
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
private
|
|
263
|
+
|
|
264
|
+
def self.get_new_value_from_user(ask_text)
|
|
265
|
+
Aro::P.say(__method__)
|
|
266
|
+
new_val = nil
|
|
267
|
+
user_cancelled = false
|
|
268
|
+
while new_val.nil? && !user_cancelled
|
|
269
|
+
Aro::P.say(ask_text)
|
|
270
|
+
new_val = Aro::P.p.ask(I18n.t("open_menu.get_new_value_from_user"))
|
|
271
|
+
user_cancelled = new_val.nil? || new_val.empty?
|
|
272
|
+
new_val = nil if user_cancelled
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
return user_cancelled if user_cancelled
|
|
276
|
+
return new_val
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
data/sys/aro/locale.rb
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
|
|
3
|
+
locale.rb
|
|
4
|
+
|
|
5
|
+
aro dom locale.
|
|
6
|
+
|
|
7
|
+
by i2097i
|
|
8
|
+
|
|
9
|
+
=end
|
|
10
|
+
|
|
11
|
+
module Aro
|
|
12
|
+
module Dom
|
|
13
|
+
class Locale
|
|
14
|
+
|
|
15
|
+
def self.add_i18n_key(user_input_text, library_name: :menus, new_i18n_display_key: nil)
|
|
16
|
+
Aro::P.say(__method__)
|
|
17
|
+
library_yaml = load_library(library_name: library_name)
|
|
18
|
+
new_i18n_display_key = i18n_keyify_text(user_input_text) if new_i18n_display_key.nil?
|
|
19
|
+
|
|
20
|
+
library_yaml[
|
|
21
|
+
I18n.default_locale.to_s
|
|
22
|
+
][
|
|
23
|
+
library_name.to_s
|
|
24
|
+
][
|
|
25
|
+
new_i18n_display_key
|
|
26
|
+
] = i18n_valuify_text(user_input_text)
|
|
27
|
+
|
|
28
|
+
# update library_yaml with new_i18n_display_key
|
|
29
|
+
write_library!(library_named(library_name), library_yaml)
|
|
30
|
+
|
|
31
|
+
# return new i18n_display_key
|
|
32
|
+
return new_i18n_display_key
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.update_i18n_key(user_input_text, i18n_path, library_name: :menus)
|
|
36
|
+
raise I18n.t("open_menu.errors.invalid_i18n_path") if i18n_path&.to_s.empty?
|
|
37
|
+
Aro::P.say(__method__)
|
|
38
|
+
library_yaml = load_library(library_name: library_name)
|
|
39
|
+
if library_yaml.nil?
|
|
40
|
+
Aro::D.say("todo: handle parse error")
|
|
41
|
+
return
|
|
42
|
+
end
|
|
43
|
+
Aro::V.say("before:")
|
|
44
|
+
Aro::V.say(library_yaml.inspect)
|
|
45
|
+
if library_yaml[I18n.default_locale.to_s][i18n_path].nil?
|
|
46
|
+
add_i18n_key(user_input_text, library_name: library_name, new_i18n_display_key: i18n_path)
|
|
47
|
+
return
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
library_yaml[
|
|
51
|
+
I18n.default_locale.to_s
|
|
52
|
+
][
|
|
53
|
+
library_name.to_s
|
|
54
|
+
][
|
|
55
|
+
i18n_path
|
|
56
|
+
] = i18n_valuify_text(user_input_text)
|
|
57
|
+
|
|
58
|
+
write_library!(library_named(library_name), library_yaml)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def self.locale_dir
|
|
62
|
+
::File.join(Aro::Mancy.root_dir, :locale.to_s)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.locales_filepaths
|
|
66
|
+
::File.join(locale_dir, "*.yml")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.i18n_keyify_text(text)
|
|
70
|
+
# downcase'd, gsub non-word characters with "_"
|
|
71
|
+
text.downcase.gsub(/[\W]/, "_")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def self.i18n_valuify_text(text)
|
|
75
|
+
# gsub non-word characters with " "
|
|
76
|
+
text.gsub(/[\W]/, " ")
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def self.write_library!(library_path, library_yaml)
|
|
82
|
+
# todo: validate yaml
|
|
83
|
+
::File.open(library_path, "w+") {|f|
|
|
84
|
+
f.write(library_yaml.to_yaml)
|
|
85
|
+
}
|
|
86
|
+
Reiquire.configure_i18n
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def self.valid_library!(library_yaml, library_name: :menus)
|
|
90
|
+
if library_yaml.nil?
|
|
91
|
+
FileUtils.rm_rf(locale_dir)
|
|
92
|
+
Reiquire.configure_i18n
|
|
93
|
+
return false
|
|
94
|
+
end
|
|
95
|
+
puts library_yaml.inspect
|
|
96
|
+
|
|
97
|
+
default_locale = library_yaml[
|
|
98
|
+
I18n.default_locale.to_s
|
|
99
|
+
]
|
|
100
|
+
raise "default_locale!" if default_locale.nil?
|
|
101
|
+
library = default_locale[library_name.to_s]
|
|
102
|
+
library_yaml[
|
|
103
|
+
I18n.default_locale.to_s
|
|
104
|
+
][
|
|
105
|
+
library_name.to_s
|
|
106
|
+
] = {} if library.nil?
|
|
107
|
+
|
|
108
|
+
library_yaml
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def self.library_named(library_name)
|
|
112
|
+
::File.join(locale_dir, "#{I18n.default_locale}.#{library_name}.yml")
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def self.load_library(library_name: :menus)
|
|
116
|
+
library_filepath = library_named(library_name)
|
|
117
|
+
unless ::File.exist?(library_filepath)
|
|
118
|
+
FileUtils.touch(library_filepath)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
loaded_file = nil
|
|
122
|
+
begin
|
|
123
|
+
Aro::P.say("Psych.load_file(#{library_filepath})")
|
|
124
|
+
loaded_file = Psych.load_file(library_filepath)
|
|
125
|
+
rescue Psych::SyntaxError => e
|
|
126
|
+
Aro::P.say(I18n.t("errors.locale_load_error", named: library_name))
|
|
127
|
+
Aro::P.say(e.inspect)
|
|
128
|
+
Aro::P.say(e.message)
|
|
129
|
+
return nil
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
return valid_library!(loaded_file, library_name: library_name)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|