sleipnir-api 0.2.1 → 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.
- data/History.txt +32 -0
- data/Manifest.txt +20 -3
- data/Rakefile +11 -1
- data/TODO.txt +4 -10
- data/bin/grepnir +1 -1
- data/examples/close_dup.rb +1 -1
- data/examples/close_err.rb +12 -0
- data/examples/command_list.rb +135 -0
- data/examples/open_last_url_by_firefox.rb +44 -0
- data/examples/open_selected_links.rb +40 -0
- data/helper/rake.rb +3 -57
- data/helper/rake/rake.rb +58 -0
- data/helper/{rake_sh_filter.rb → rake/rake_sh_filter.rb} +0 -0
- data/helper/{util.rb → rake/util.rb} +0 -0
- data/lib/sleipnir_api/cli/grepnir.rb +2 -3
- data/lib/sleipnir_api/command.rb +126 -0
- data/lib/sleipnir_api/commands.rb +264 -0
- data/lib/sleipnir_api/profile.rb +166 -27
- data/lib/sleipnir_api/profile/ini.rb +202 -0
- data/lib/sleipnir_api/profile/key.rb +120 -0
- data/lib/sleipnir_api/profile/section.rb +147 -0
- data/lib/sleipnir_api/profile/util.rb +82 -0
- data/lib/sleipnir_api/searcher.rb +133 -0
- data/lib/sleipnir_api/security.rb +88 -18
- data/lib/sleipnir_api/sleipnir.rb +91 -7
- data/lib/sleipnir_api/tab.rb +68 -2
- data/lib/sleipnir_api/tabbed_ie.rb +33 -0
- data/lib/sleipnir_api/util.rb +25 -0
- data/lib/sleipnir_api/version.rb +2 -2
- data/scripts/gesture2rb.rb +42 -0
- data/scripts/make_gesture.rb +271 -0
- data/scripts/subcategory.csv +253 -0
- data/spec/sleipnir_api/profile_mock_spec.rb +80 -6
- data/spec/sleipnir_api/profile_section_mock_spec.rb +143 -0
- data/spec/sleipnir_api/profile_spec.rb +191 -0
- data/spec/sleipnir_api/security_spec.rb +58 -0
- data/spec/sleipnir_api/tab_mock_spec.rb +0 -5
- data/spec/sleipnir_api/tab_spec.rb +27 -0
- data/spec/spec_helper.rb +20 -0
- metadata +22 -5
- data/helper/helper.rb +0 -3
data/lib/sleipnir_api/profile.rb
CHANGED
@@ -1,46 +1,150 @@
|
|
1
1
|
require "sleipnir_api/util"
|
2
|
+
require "sleipnir_api/profile/ini"
|
3
|
+
require "sleipnir_api/profile/section"
|
4
|
+
require "sleipnir_api/profile/key"
|
2
5
|
|
3
6
|
module SleipnirAPI
|
4
7
|
|
5
8
|
#
|
6
9
|
# このクラスは Sleipnir の COM オブジェクト (Sleipnir.API) の wrapper クラスです。
|
7
|
-
# Sleipnir の ini
|
10
|
+
# Sleipnir の ini ファイルを操作する低レベルな API を定義しています。
|
11
|
+
#
|
12
|
+
# ini ファイル・セクション・キーに対応するオブジェクトを用意してあるので
|
13
|
+
# 通常はそちらを利用してください。
|
14
|
+
#
|
15
|
+
# * SleipnirAPI::Profile::Ini
|
16
|
+
# * SleipnirAPI::Profile::Section
|
17
|
+
# * SleipnirAPI::Profile::Key
|
8
18
|
#
|
9
19
|
# このオブジェクトは SleipnirAPI::Sleipnir#profile で取得します。
|
10
20
|
#
|
11
|
-
#
|
21
|
+
# === 高レベル API の例
|
22
|
+
#
|
23
|
+
# pnir = SleipnirAPI.new
|
24
|
+
# prof = pnir.profile
|
25
|
+
#
|
26
|
+
# # デフォルト値
|
27
|
+
# bar = prof.script.foo_section.bar_key
|
28
|
+
# # 以下と同じ
|
29
|
+
# # bar = prof.ini("Script.ini").section("foo_section").key("bar_key")
|
30
|
+
#
|
31
|
+
# bar.write_string("foobar")
|
32
|
+
# bar.get_string #=> "foobar"
|
33
|
+
# bar.delete
|
34
|
+
# bar.get_string(:default => "default value") #=> "default value"
|
35
|
+
#
|
36
|
+
# # 暗号化
|
37
|
+
# bar_cipher = prof.script.foo_section.bar_key(:cipher => true)
|
38
|
+
# bar_cipher.write_string("foobar")
|
39
|
+
# bar_cipher.get_string #=> "foobar"
|
40
|
+
# bar.get_string #=> "tibv&DmD[vq)"
|
41
|
+
# bar_cipher.get_string(:cipher => false) #=> "tibv&DmD[vq)"
|
42
|
+
#
|
43
|
+
# # 連番データの取得
|
44
|
+
# history = prof.History.History2.key("URL-data0").list("URLCount")
|
45
|
+
#
|
46
|
+
# === 低レベル API の例
|
12
47
|
#
|
13
48
|
# pnir = SleipnirAPI.new
|
14
|
-
#
|
49
|
+
# prof = pnir.profile
|
15
50
|
#
|
16
51
|
# # デフォルト値
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
52
|
+
# prof.write_string("section_foo", key_bar, "foobar")
|
53
|
+
# prof.get_string("section_foo", key_bar) #=> "foobar"
|
54
|
+
# prof.delete("section_foo", key_bar)
|
55
|
+
# prof.get_string("section_foo", key_bar, :default => "default value") #=> "default value"
|
21
56
|
#
|
22
57
|
# # 暗号化
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
58
|
+
# prof.write_string("section_foo", key_bar, "foobar", :cipher => true)
|
59
|
+
# prof.get_string("section_foo", key_bar, :cipher => true) #=> "foobar"
|
60
|
+
# prof.get_string("section_foo", key_bar) #=> "tF4DxDH)[uUu"
|
26
61
|
#
|
27
|
-
# #
|
28
|
-
#
|
29
|
-
# (0...count).each do |i|
|
30
|
-
# p ini.get_string("Proxy", "Proxy#{i}_Title", :ini => "proxy.ini")
|
31
|
-
# end
|
62
|
+
# # 連番データの取得
|
63
|
+
# history = prof.list("History2", "URL-data0", "URLCount", :ini => "History.ini")
|
32
64
|
#
|
33
65
|
class Profile
|
34
66
|
include SleipnirAPI::Util
|
67
|
+
include OptionArgument
|
68
|
+
include DataUtil
|
35
69
|
|
36
70
|
# SleipnirAPI::Sleipnir object
|
37
|
-
attr_reader :sleipnir
|
71
|
+
attr_reader :sleipnir, :default_opts
|
38
72
|
|
39
|
-
def initialize(sleipnir)
|
73
|
+
def initialize(sleipnir, default_opts = nil)
|
40
74
|
@sleipnir = sleipnir
|
75
|
+
@user_path = sleipnir.user_path
|
76
|
+
@default_opts = default_opts
|
41
77
|
end
|
42
78
|
|
79
|
+
|
80
|
+
# call-seq:
|
81
|
+
# list(section, keyfmt, countkey="Count")
|
82
|
+
# list(section, keyfmt, countkey="Count", :default => "default value")
|
83
|
+
# list(section, keyfmt, countkey="Count", :cipher => true)
|
84
|
+
# list(section, keyfmt, countkey="Count", :cipher => true, :default => "default value")
|
85
|
+
# list(section, keyfmt, countkey="Count", :ini => ini_filename)
|
86
|
+
# list(section, keyfmt, countkey="Count", :ini => ini_filename, :default => "default value")
|
87
|
+
#
|
88
|
+
# 以下のような連番キーのデータをすべて読み込み配列で返します。
|
89
|
+
#
|
90
|
+
# [History2]
|
91
|
+
# SearchCount=2
|
92
|
+
# Search-data0="Ruby"
|
93
|
+
# Search-data1="Sleipnir"
|
94
|
+
#
|
95
|
+
# * +keyfmt+ には連番キーを生成するためのテンプレート文字列を指定します。
|
96
|
+
# テンプレート文字列からフォーマット文字列への変換ルールは #list_key_format を参照してください。
|
97
|
+
# * +countkey+ には連番キーの個数を記録しているキー名を指定します。
|
98
|
+
# デフォルトは "Count" です。
|
99
|
+
# * +opts+ の説明は #get_string を参照してください。
|
100
|
+
# * +block+ を指定するとフォーマットされた連番キー(文字列)を引数に block を評価して
|
101
|
+
# その結果を返します。
|
102
|
+
#
|
103
|
+
# 例:
|
104
|
+
#
|
105
|
+
# pnir = SleipnirAPI.connect
|
106
|
+
# prof = pnir.profile
|
107
|
+
# prof.list("History2", "Search-data0", "SearchCount", :ini => "History.ini") #=> ["Ruby", "Sleipnir"]
|
108
|
+
#
|
109
|
+
# See Also: #list_key_format
|
110
|
+
def list(section, keyfmt, countkey="Count", opts = nil, &block)
|
111
|
+
keyfmt = list_key_format(keyfmt)
|
112
|
+
block ||= lambda {|key| get_string(section, key, opts) }
|
113
|
+
(0...get_int(section, countkey, opts)).map{|i| keyfmt % i }.map(&block)
|
114
|
+
end
|
115
|
+
|
116
|
+
# 連番キーを生成するためのフォーマット文字列を返します。
|
117
|
+
#
|
118
|
+
# フォーマット文字列は以下のルールで生成します。
|
43
119
|
#
|
120
|
+
# * 引数に「%(数字)d」が含まれていればそのまま返す。
|
121
|
+
# * 引数に連続する 0 があれば、そこを連番箇所と判断して %d に変換して返す。
|
122
|
+
# * 0 が複数箇所に存在する場合は最後の 0 が利用される
|
123
|
+
# * 連続する 0 の場合、幅指定のフォーマットになる
|
124
|
+
# * 0 が存在しない場合は、以下の場所を連番箇所と判断して %d に変換して返す。
|
125
|
+
# * 最初のアンダースコアの前
|
126
|
+
# * 文字列末尾
|
127
|
+
#
|
128
|
+
# 例:
|
129
|
+
#
|
130
|
+
# list_key_format("Search-data%d") #=> Search-data%d
|
131
|
+
#
|
132
|
+
# list_key_format("Foo_Bar0_Name") #=> Foo_Bar%d_Name
|
133
|
+
# list_key_format("Foo0_Bar0_Name") #=> Foo0_Bar%d_Name
|
134
|
+
# list_key_format("Foo0_Bar000_Name") #=> Foo0_Bar%03d_Name
|
135
|
+
#
|
136
|
+
# list_key_format("Foo_Bar_Name") #=> Foo%d_Bar_Name
|
137
|
+
# list_key_format("Name") #=> Name%d
|
138
|
+
#
|
139
|
+
def list_key_format(keyfmt)
|
140
|
+
return keyfmt if keyfmt =~ /%\d*d/
|
141
|
+
return keyfmt if keyfmt.sub!(/(0+)(\D*)\z/) {
|
142
|
+
n = $1.length
|
143
|
+
(n == 1) ? "%d#{$2}" : "%0#{n}d#{$2}"
|
144
|
+
}
|
145
|
+
return keyfmt.sub(/(_|\z)/) { "%d#{$1}" }
|
146
|
+
end
|
147
|
+
|
44
148
|
# call-seq:
|
45
149
|
# get_string(section, key)
|
46
150
|
# get_string(section, key, :default => "default value")
|
@@ -61,7 +165,8 @@ module SleipnirAPI
|
|
61
165
|
# 同時に指定した場合 <tt>:cipher</tt> は無視されます。
|
62
166
|
#
|
63
167
|
def get_string(section, key, opts = nil)
|
64
|
-
|
168
|
+
section, key = str(section, key)
|
169
|
+
opts = options(opts, :cipher, :ini, :default)
|
65
170
|
if opts[:ini]
|
66
171
|
api.GetProfileStringEx(section, key, opts[:default], expand_user_path(opts[:ini]))
|
67
172
|
elsif opts[:cipher]
|
@@ -71,7 +176,6 @@ module SleipnirAPI
|
|
71
176
|
end
|
72
177
|
end
|
73
178
|
|
74
|
-
#
|
75
179
|
# call-seq:
|
76
180
|
# get_int(section, key)
|
77
181
|
# get_int(section, key, :default => -1)
|
@@ -84,7 +188,8 @@ module SleipnirAPI
|
|
84
188
|
# 詳細は get_string を参照してください。
|
85
189
|
#
|
86
190
|
def get_int(section, key, opts = nil)
|
87
|
-
|
191
|
+
section, key = str(section, key)
|
192
|
+
opts = options(opts, :cipher, :ini, :default)
|
88
193
|
if opts[:ini]
|
89
194
|
api.GetProfileIntEx(section, key, opts[:default], expand_user_path(opts[:ini]))
|
90
195
|
elsif opts[:cipher]
|
@@ -94,7 +199,6 @@ module SleipnirAPI
|
|
94
199
|
end
|
95
200
|
end
|
96
201
|
|
97
|
-
#
|
98
202
|
# call-seq:
|
99
203
|
# write_string(section, key, data)
|
100
204
|
# write_string(section, key, data, :cipher => true)
|
@@ -104,7 +208,9 @@ module SleipnirAPI
|
|
104
208
|
# * <tt>:cipher</tt> に true を指定すると暗号化してデータを書き込みます。
|
105
209
|
#
|
106
210
|
def write_string(section, key, data, opts = nil)
|
107
|
-
|
211
|
+
section, key = str(section, key)
|
212
|
+
check_data(section, key, data, String)
|
213
|
+
opts = options(opts, :cipher)
|
108
214
|
if opts[:cipher]
|
109
215
|
api.WriteProfileStringCipher(section, key, data)
|
110
216
|
else
|
@@ -112,7 +218,6 @@ module SleipnirAPI
|
|
112
218
|
end
|
113
219
|
end
|
114
220
|
|
115
|
-
#
|
116
221
|
# call-seq:
|
117
222
|
# write_int(section, key, data)
|
118
223
|
# write_int(section, key, data, :cipher => true)
|
@@ -122,7 +227,9 @@ module SleipnirAPI
|
|
122
227
|
# * <tt>:cipher</tt> に true を指定すると暗号化してデータを書き込みます。
|
123
228
|
#
|
124
229
|
def write_int(section, key, data, opts = nil)
|
125
|
-
|
230
|
+
section, key = str(section, key)
|
231
|
+
check_data(section, key, data, Integer)
|
232
|
+
opts = options(opts, :cipher)
|
126
233
|
if opts[:cipher]
|
127
234
|
api.WriteProfileIntCipher(section, key, data)
|
128
235
|
else
|
@@ -132,19 +239,51 @@ module SleipnirAPI
|
|
132
239
|
|
133
240
|
# <ini_dir>\script.ini から指定されたキーを削除します。
|
134
241
|
def delete(section, key)
|
242
|
+
section, key = str(section, key)
|
135
243
|
api.DeleteProfileKey(section, key)
|
136
244
|
end
|
137
245
|
|
138
|
-
#
|
246
|
+
# SleipnirAPI::Sleipnir#user_path から expand_path します。
|
247
|
+
#
|
248
|
+
# * 引数は to_s で文字列に変換されます。
|
249
|
+
# * 拡張子がなければ .ini を付与します。
|
250
|
+
#
|
139
251
|
def expand_user_path(ini)
|
140
|
-
|
252
|
+
raise ArgumentError, "Invalid ini file name: #{ini.inspect}" if ini.nil? or ini == ""
|
253
|
+
ini = ini.to_s
|
254
|
+
if File.extname(ini) == ""
|
255
|
+
ini = File.basename(ini, ".*") + ".ini"
|
256
|
+
end
|
257
|
+
File.expand_path(ini, @user_path)
|
141
258
|
end
|
142
259
|
|
143
260
|
# <ini_dir>\script.ini のパスを返します。
|
144
|
-
def
|
261
|
+
def script_ini_path
|
145
262
|
expand_user_path("script.ini")
|
146
263
|
end
|
147
264
|
|
265
|
+
# 指定された ini ファイルを操作する Sleipnir::Profile::Ini オブジェクトを返します。
|
266
|
+
#
|
267
|
+
# pnir = SleipnirAPI.connect
|
268
|
+
# proxy = pnir.profile.ini("Proxy.ini", :default => 123)
|
269
|
+
# proxy.get_int("Proxy", "Count")
|
270
|
+
#
|
271
|
+
# See Also: #method_missing
|
272
|
+
def ini(name, opts = nil)
|
273
|
+
Ini.new(self, str(name), options(opts))
|
274
|
+
end
|
275
|
+
|
276
|
+
# メソッド名を ini ファイル名とみなして Sleipnir::Profile::Ini オブジェクトを返します。
|
277
|
+
#
|
278
|
+
# pnir = SleipnirAPI.connect
|
279
|
+
# proxy = pnir.profile.Proxy(:default => 123)
|
280
|
+
# proxy.get_int("Proxy", "Count")
|
281
|
+
#
|
282
|
+
# See Also: #ini
|
283
|
+
def method_missing(mid, *args, &block)
|
284
|
+
ini(mid.to_s, *args, &block)
|
285
|
+
end
|
286
|
+
|
148
287
|
end
|
149
288
|
end
|
150
289
|
|
@@ -0,0 +1,202 @@
|
|
1
|
+
require "sleipnir_api/util"
|
2
|
+
require "sleipnir_api/profile/util"
|
3
|
+
|
4
|
+
module SleipnirAPI
|
5
|
+
class Profile
|
6
|
+
|
7
|
+
# ini ファイルに対応するオブジェクトです。
|
8
|
+
# このオブジェクトは SleipnirAPI::Sleipnir#profile で
|
9
|
+
# または SleipnirAPI::Profile#ini で取得します。
|
10
|
+
#
|
11
|
+
# pnir = SleipnirAPI.new
|
12
|
+
# ini = pnir.profile("CloseURL.ini")
|
13
|
+
# ini.get_string("ClosedURL2", "URL0") #=> "http://hogehoge"
|
14
|
+
#
|
15
|
+
# #section でこの ini ファイル内のセクションに対応する SleipnirAPI::Profile::Section
|
16
|
+
# オブジェクトを取得できます。
|
17
|
+
class Ini < ProfileElement
|
18
|
+
|
19
|
+
# SleipnirAPI::Profile オブジェクトを返します。
|
20
|
+
attr_reader :profile
|
21
|
+
|
22
|
+
# ini ファイル名を返します。
|
23
|
+
# これは、SleipnirAPI::Profile#ini に指定した値をそのまま返します。
|
24
|
+
# フルパスを得たい場合は #path を利用してください。
|
25
|
+
attr_reader :name
|
26
|
+
|
27
|
+
# #get_string などに指定するデフォルトの引数を取得します。
|
28
|
+
# 値は #profile から引き継いでいます。
|
29
|
+
attr_reader :default_opts
|
30
|
+
|
31
|
+
def initialize(profile, name, default_opts = nil)
|
32
|
+
super(nil, default_opts)
|
33
|
+
@profile = profile
|
34
|
+
@name = (name == "" ? nil : name)
|
35
|
+
end
|
36
|
+
|
37
|
+
# call-seq:
|
38
|
+
# list(section, keyfmt, countkey="Count")
|
39
|
+
# list(section, keyfmt, countkey="Count", :default => "default value")
|
40
|
+
# list(section, keyfmt, countkey="Count", :cipher => true)
|
41
|
+
# list(section, keyfmt, countkey="Count", :cipher => true, :default => "default value")
|
42
|
+
#
|
43
|
+
# この ini ファイルから連番キーのデータをすべて読み込み配列で返します。
|
44
|
+
#
|
45
|
+
# 例:
|
46
|
+
#
|
47
|
+
# pnir = SleipnirAPI.connect
|
48
|
+
# proxy_ini = pnir.profile.proxy
|
49
|
+
# proxy_ini.list("Proxy", "Proxy0_Title")
|
50
|
+
#
|
51
|
+
# See Also: SleipnirAPI::Profile#list
|
52
|
+
def list(section, keyfmt, countkey="Count", opts = nil, &block)
|
53
|
+
@profile.list(section, keyfmt, countkey, get_options(opts), &block)
|
54
|
+
end
|
55
|
+
|
56
|
+
# call-seq:
|
57
|
+
# get_string(section, key)
|
58
|
+
# get_string(section, key, :default => "default value")
|
59
|
+
# get_string(section, key, :cipher => true)
|
60
|
+
# get_string(section, key, :cipher => true, :default => "default value")
|
61
|
+
#
|
62
|
+
# この ini ファイルから string 型データを読み込みます。
|
63
|
+
#
|
64
|
+
# See Also: SleipnirAPI::Profile#get_string
|
65
|
+
def get_string(section, key, opts = nil)
|
66
|
+
@profile.get_string(section, key, get_options(opts))
|
67
|
+
end
|
68
|
+
|
69
|
+
# call-seq:
|
70
|
+
# get_int(section, key)
|
71
|
+
# get_int(section, key, :default => -1)
|
72
|
+
# get_int(section, key, :cipher => true)
|
73
|
+
# get_int(section, key, :cipher => true, :default => -1)
|
74
|
+
#
|
75
|
+
# この ini ファイルから int 型データを読み込みます。
|
76
|
+
#
|
77
|
+
# See Also: SleipnirAPI::Profile#get_int
|
78
|
+
def get_int(section, key, opts = nil)
|
79
|
+
@profile.get_int(section, key, get_options(opts))
|
80
|
+
end
|
81
|
+
|
82
|
+
# call-seq:
|
83
|
+
# write_string(section, key, data)
|
84
|
+
# write_string(section, key, data, :cipher => true)
|
85
|
+
#
|
86
|
+
# <ini_dir>\script.ini に string 型データを書き込みます。
|
87
|
+
# script.ini でない場合は SleipnirAPI::Profile::ReadOnlyError を raise します。
|
88
|
+
#
|
89
|
+
# * <tt>:cipher</tt> に true を指定すると暗号化してデータを書き込みます。
|
90
|
+
#
|
91
|
+
# See Also: SleipnirAPI::Profile#write_string
|
92
|
+
def write_string(section, key, data, opts = nil)
|
93
|
+
check_writable
|
94
|
+
@profile.write_string(section, key, data, write_options(opts))
|
95
|
+
end
|
96
|
+
|
97
|
+
# call-seq:
|
98
|
+
# write_int(section, key, data)
|
99
|
+
# write_int(section, key, data, :cipher => true)
|
100
|
+
#
|
101
|
+
# <ini_dir>\script.ini に int 型データを書き込みます。
|
102
|
+
# script.ini でない場合は SleipnirAPI::Profile::ReadOnlyError を raise します。
|
103
|
+
#
|
104
|
+
# * <tt>:cipher</tt> に true を指定すると暗号化してデータを書き込みます。
|
105
|
+
#
|
106
|
+
# See Also: SleipnirAPI::Profile#write_int
|
107
|
+
def write_int(section, key, data, opts = nil)
|
108
|
+
check_writable
|
109
|
+
@profile.write_int(section, key, data, write_options(opts))
|
110
|
+
end
|
111
|
+
|
112
|
+
# <ini_dir>\script.ini から指定されたキーを削除します。
|
113
|
+
#
|
114
|
+
# script.ini でない場合は SleipnirAPI::Profile::ReadOnlyError を raise します。
|
115
|
+
#
|
116
|
+
# See Also: SleipnirAPI::Profile#delete
|
117
|
+
def delete(section, key)
|
118
|
+
check_writable
|
119
|
+
@profile.delete(section, key)
|
120
|
+
end
|
121
|
+
|
122
|
+
# script.ini でない場合は SleipnirAPI::Profile::ReadOnlyError を raise します。
|
123
|
+
def check_writable
|
124
|
+
raise ReadOnlyError, "`#{path}' is not writable" if read_only?
|
125
|
+
end
|
126
|
+
|
127
|
+
# この ini ファイルのフルパスを返します。
|
128
|
+
def path
|
129
|
+
if script_ini?
|
130
|
+
@profile.script_ini_path
|
131
|
+
else
|
132
|
+
@profile.expand_user_path(@name)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
alias to_s path
|
136
|
+
|
137
|
+
# <ini_dir>\script.ini なら true を返します。
|
138
|
+
def script_ini?
|
139
|
+
return true if @name.nil?
|
140
|
+
a = @profile.expand_user_path(@name)
|
141
|
+
b = @profile.script_ini_path
|
142
|
+
a.match(/\A#{Regexp.quote(b)}\z/i) ? true : false
|
143
|
+
end
|
144
|
+
|
145
|
+
# <ini_dir>\script.ini 以外なら true を返します。
|
146
|
+
def read_only?
|
147
|
+
not script_ini?
|
148
|
+
end
|
149
|
+
|
150
|
+
# 指定されたセクションを操作する Sleipnir::Profile::Section オブジェクトを返します。
|
151
|
+
#
|
152
|
+
# pnir = SleipnirAPI.connect
|
153
|
+
# proxy = pnir.profile.ini("Proxy.ini", :default => 123)
|
154
|
+
# sec = proxy.section("Proxy")
|
155
|
+
# sec.get_int("Count")
|
156
|
+
#
|
157
|
+
# See Also: #method_missing
|
158
|
+
def section(name, opts = nil)
|
159
|
+
Section.new(self, str(name), options(opts))
|
160
|
+
end
|
161
|
+
|
162
|
+
# メソッド名をセクション名とみなして Sleipnir::Profile::Section オブジェクトを返します。
|
163
|
+
#
|
164
|
+
# pnir = SleipnirAPI.connect
|
165
|
+
# proxy = pnir.profile.Proxy(:default => 123)
|
166
|
+
# sec = proxy.Proxy
|
167
|
+
# sec.get_int("Count")
|
168
|
+
#
|
169
|
+
# See Also: #section
|
170
|
+
def method_missing(mid, *args, &block)
|
171
|
+
section(mid.to_s, *args, &block)
|
172
|
+
end
|
173
|
+
|
174
|
+
|
175
|
+
def get_options(opts = nil)
|
176
|
+
args = options(opts, :cipher, :ini, :default)
|
177
|
+
|
178
|
+
r = {}
|
179
|
+
r[:default] = args.delete(:default) if args.key?(:default)
|
180
|
+
if script_ini?
|
181
|
+
r[:cipher] = args.delete(:cipher) if args.key?(:cipher)
|
182
|
+
else
|
183
|
+
r[:ini] = @name
|
184
|
+
end
|
185
|
+
|
186
|
+
unless args.empty?
|
187
|
+
raise ArgumentError, "Invalid argument: #{args.inspect} (#{path})"
|
188
|
+
end
|
189
|
+
r
|
190
|
+
end
|
191
|
+
private :get_options
|
192
|
+
|
193
|
+
def write_options(opts = nil)
|
194
|
+
r = get_options(opts)
|
195
|
+
r.delete(:default)
|
196
|
+
r
|
197
|
+
end
|
198
|
+
private :write_options
|
199
|
+
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|