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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -2
  3. data/.ruby-version +1 -0
  4. data/Gemfile.lock +106 -89
  5. data/aro.gemspec +10 -11
  6. data/bin/oss_om +15 -0
  7. data/checksums/aro-0.2.5.gem.sha512 +1 -0
  8. data/checksums/aro-0.2.6.gem.sha512 +1 -0
  9. data/locale/en.cards.yml +1 -1
  10. data/locale/en.cmd.yml +34 -0
  11. data/locale/en.cor.yml +5 -8
  12. data/locale/en.menu_items.yml +2 -0
  13. data/locale/en.menus.yml +2 -0
  14. data/locale/en.usage.yml +21 -98
  15. data/locale/en.yml +61 -50
  16. data/sys/aro/cmd.rb +96 -0
  17. data/sys/{aos → aro}/cor.rb +224 -268
  18. data/sys/aro/d.rb +4 -3
  19. data/sys/aro/db/migrate/.DS_Store +0 -0
  20. data/sys/aro/db/migrate/1793913747_create_data_bases.rb +13 -0
  21. data/sys/aro/db/migrate/1793913777_create_data_base_directories.rb +14 -0
  22. data/sys/aro/db/migrate/1793913796_create_data_base_files.rb +12 -0
  23. data/sys/aro/db/migrate/1793913841_create_menus.rb +11 -0
  24. data/sys/aro/db/migrate/1793913861_create_menu_items.rb +14 -0
  25. data/sys/aro/db.rb +72 -33
  26. data/sys/aro/designer.rb +281 -0
  27. data/sys/aro/locale.rb +136 -0
  28. data/sys/aro/ma_ain.rb +54 -0
  29. data/sys/aro/mancy.rb +53 -28
  30. data/sys/aro/models/concerns/.keep +0 -0
  31. data/sys/aro/models/concerns/uuid.rb +29 -0
  32. data/sys/aro/models/data_base.rb +97 -0
  33. data/sys/aro/models/directory.rb +44 -0
  34. data/sys/aro/models/file.rb +27 -0
  35. data/sys/aro/models/menu.rb +27 -0
  36. data/sys/aro/models/menu_item.rb +47 -0
  37. data/sys/aro/models/teck.rb +19 -28
  38. data/sys/aro/p.rb +6 -3
  39. data/sys/aro/r.rb +1 -2
  40. data/sys/aro/store.rb +147 -0
  41. data/sys/aro/v.rb +2 -2
  42. data/sys/aro/views/base.rb +25 -0
  43. data/sys/aro/views/teck.rb +30 -0
  44. data/sys/aro.rb +1 -2
  45. data/sys/cli/constants.rb +1 -6
  46. data/sys/cli/create.rb +3 -3
  47. data/sys/cli/nterface.rb +8 -8
  48. data/sys/cli/teck.rb +17 -18
  49. data/sys/cli/usage.rb +4 -8
  50. data/sys/cli.rb +0 -1
  51. data/sys/reiquire.rb +146 -25
  52. data/sys/shr/.DS_Store +0 -0
  53. data/sys/shr/prompt.rb +8 -2
  54. data/sys/shr/t.rb +5 -5
  55. data/sys/shr/version.rb +9 -2
  56. data/tasks/make.rake +2 -1
  57. metadata +53 -116
  58. data/bin/aos +0 -31
  59. data/bin/aro +0 -50
  60. data/bin/ino +0 -22
  61. data/ino_rules_todo.txt +0 -28
  62. data/locale/en.abot.yml +0 -81
  63. data/locale/en.amg.yml +0 -44
  64. data/locale/en.aos.yml +0 -40
  65. data/locale/en.data.yml +0 -30
  66. data/locale/en.dom.yml +0 -47
  67. data/locale/en.flie.yml +0 -29
  68. data/locale/en.ino.yml +0 -9
  69. data/sys/aos/abot.rb +0 -254
  70. data/sys/aos/amg.rb +0 -184
  71. data/sys/aos/aos.rb +0 -672
  72. data/sys/aos/data.rb +0 -117
  73. data/sys/aos/db/migrate/1765148774_create_yous.rb +0 -20
  74. data/sys/aos/db/migrate/1765762724_create_ilibs.rb +0 -22
  75. data/sys/aos/db/migrate/1765907766_create_ilogs.rb +0 -18
  76. data/sys/aos/db/migrate/1765933985_create_agodos.rb +0 -22
  77. data/sys/aos/db/migrate/1766203888_create_fpxies.rb +0 -18
  78. data/sys/aos/db.rb +0 -105
  79. data/sys/aos/flie.rb +0 -144
  80. data/sys/aos/models/agodo.rb +0 -103
  81. data/sys/aos/models/fpxy.rb +0 -26
  82. data/sys/aos/models/ilib.rb +0 -46
  83. data/sys/aos/models/ilog.rb +0 -27
  84. data/sys/aos/models/you.rb +0 -138
  85. data/sys/aos/s.rb +0 -26
  86. data/sys/aos/vws/base.rb +0 -159
  87. data/sys/aos/vws/dom.rb +0 -32
  88. data/sys/aos/vws/games/abot.rb +0 -21
  89. data/sys/aos/vws/games/ino.rb +0 -21
  90. data/sys/aos/vws/games/teck.rb +0 -122
  91. data/sys/aos/vws/games.rb +0 -19
  92. data/sys/aos/vws/home.rb +0 -23
  93. data/sys/aos/vws/know/body.rb +0 -19
  94. data/sys/aos/vws/know/mind.rb +0 -19
  95. data/sys/aos/vws/know/spirit.rb +0 -19
  96. data/sys/aos/vws/know.rb +0 -19
  97. data/sys/aos/vws/root/amg.rb +0 -21
  98. data/sys/aos/vws/root/config.rb +0 -21
  99. data/sys/aos/vws/root/data.rb +0 -21
  100. data/sys/aos/vws/root/flie.rb +0 -21
  101. data/sys/aos/vws/root.rb +0 -19
  102. data/sys/aos/vws/welcome/waite.rb +0 -31
  103. data/sys/aos/vws/welcome/winner.rb +0 -19
  104. data/sys/aos/vws/welcome.rb +0 -66
  105. data/sys/aro/db/migrate/1768856981_create_scrolls.rb +0 -20
  106. data/sys/aro/db/migrate/1768858841_create_legends.rb +0 -16
  107. data/sys/aro/db/migrate/1768858967_create_stories.rb +0 -17
  108. data/sys/aro/db/migrate/1768859060_create_chapters.rb +0 -15
  109. data/sys/aro/db/migrate/1768859126_create_statements.rb +0 -22
  110. data/sys/aro/db/migrate/1768859144_create_players.rb +0 -18
  111. data/sys/aro/ino.rb +0 -64
  112. data/sys/aro/models/chapter.rb +0 -18
  113. data/sys/aro/models/legend.rb +0 -28
  114. data/sys/aro/models/player.rb +0 -17
  115. data/sys/aro/models/scroll.rb +0 -46
  116. data/sys/aro/models/statement.rb +0 -14
  117. data/sys/aro/models/story.rb +0 -28
  118. data/sys/cli/dom.rb +0 -43
  119. data/sys/dom/d.rb +0 -138
  120. data/sys/dom/dom.rb +0 -215
  121. data/sys/dom/p.rb +0 -17
  122. data/sys/fpx.rb +0 -104
  123. data/sys/shr/ilib/crs/CMakeLists.txt +0 -12
  124. data/sys/shr/ilib/crs/compile.sh +0 -5
  125. data/sys/shr/ilib/crs/crs.c +0 -24
  126. data/sys/shr/ilib/crs/crs.o +0 -0
  127. 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
- super([">[#{Aro::Mancy::I2097I}]>: #{message}"])
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 Aos::Cor.ivar(:ENV).present?
23
- Aos::Cor::DBG_MODES.include?(Aos::Cor.ivar(:ENV)&.to_sym)
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,11 @@
1
+ class CreateMenus < ActiveRecord::Migration[8.1]
2
+ def change
3
+ create_table :menus do |t|
4
+ t.string :uuid, null: false
5
+
6
+ t.timestamps
7
+ end
8
+
9
+ add_index :menus, :uuid, unique: true
10
+ end
11
+ 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 = :"aro.sql"
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 Aos::Cor.ivar(:LOG_ARO_DB).to_s == Aos::Cor::BOOLS[:TRUE].to_s
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.base_aro_dir
40
- base_aro_file = Aro::Mancy::ARO_FILE.to_s
41
- return "#{base_aro_file}_#{Aos::Cor::ENVS[:TEST]}" if Aos::Cor.is_test?
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
- base_aro_file
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
- @db_config_filepath ||= File.join(Aro::Db.base_aro_dir, Aro::Db::DATABASE_YML.to_s)
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
- name = Aro::Mancy.in_aro? ? Aro::Mancy.aro_mancy_name : nil
52
- return if name.nil? || name.to_sym == Aos::Os::CMDS[:ABOT][:key]
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.base_aro_dir)
56
- Aro::P.say("creating #{Aro::Mancy::ARO_FILE.to_s} directory...")
57
- FileUtils.mkdir(Aro::Db.base_aro_dir)
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: File.join(Aro::Db.base_aro_dir, Aro::Db::SQL_FILE.to_s),
65
- username: name,
66
- password: name,
67
- pool: Aos::Os::DB_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(name)
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 migrate(name)
85
- local_migrate_dir = File.join(Aro::Db.base_aro_dir, Aro::Db::MIGRATIONS_DIR.to_s)
86
- unless Dir.exist?(local_migrate_dir)
87
- gem_dir = Dir[Reiquire::GEM_PATH || '.'].first
88
- FileUtils.cp_r(File.join(gem_dir, Aro::Db::GEM_DB_PATH.to_s), Aro::Db.base_aro_dir)
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 = Dir["#{local_migrate_dir}/*.rb"].map{|n|
92
- Pathname.new(n).basename.to_s.split("_")[0].to_i
127
+ migration_version = migration_file_names.map{|n|
128
+ n.to_s.split("_")[0].to_i
93
129
  }.max
94
- ActiveRecord::MigrationContext.new(local_migrate_dir).migrate(migration_version)
130
+ ActiveRecord::MigrationContext.new(Aro::Db.migrate_dir).migrate(migration_version)
131
+ dump_schema!
132
+ end
95
133
 
96
- filename = File.join(Aro::Db.base_aro_dir, Aro::Db::SCHEMA_FILE.to_s)
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
@@ -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