Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

refine config treatment

* have a default config as a Hash literal
* enable to override config from prompt
* new command `:config` to show or set config
  • Loading branch information...
commit 6fbeffa75e98ab8ecea2e2f1f6cb4e4c6f497adc 1 parent 110c775
@no6v no6v authored
Showing with 63 additions and 14 deletions.
  1. +14 −0 README.md
  2. +23 −0 lib/earthquake/commands.rb
  3. +26 −14 lib/earthquake/core.rb
View
14 README.md
@@ -142,6 +142,20 @@ Commands
# return to normal user stream
⚡ :filter off
+### Show config
+
+ # All config
+ ⚡ :config
+
+ # config for :key
+ ⚡ :config key
+
+### Set config
+
+ # set config for :key to (evaluated) value
+ ⚡ :config key 1 + 1
+ 2
+
And more!
Configuration
View
23 lib/earthquake/commands.rb
@@ -42,6 +42,29 @@
⚡ :help :retweet
HELP
+ # :config
+
+ command :config do
+ ap config
+ end
+
+ command :config do |m|
+ key, value = m[1].split(/\s+/, 2)
+ key = key.to_sym
+ if value
+ value = eval(value)
+ preferred_config.store(key, value)
+ load_config
+ end
+ ap config[key]
+ end
+
+ help :config, 'show or set config', <<-HELP
+ ⚡ :config
+ ⚡ :config key
+ ⚡ :config key value
+ HELP
+
# :restart
command :restart do
View
40 lib/earthquake/core.rb
@@ -7,6 +7,10 @@ def config
@config ||= {}
end
+ def preferred_config
+ @preferred_config ||= {}
+ end
+
def item_queue
@item_queue ||= []
end
@@ -49,22 +53,28 @@ def reload
_init
end
- def load_config
+ def default_config
consumer = YAML.load_file(File.expand_path('../../../consumer.yml', __FILE__))
+ dir = File.expand_path('~/.earthquake')
+ {
+ dir: dir,
+ time_format: Time::DATE_FORMATS[:short],
+ plugin_dir: File.join(dir, 'plugin'),
+ file: File.join(dir, 'config'),
+ prompt: '',
+ consumer_key: consumer['key'],
+ consumer_secret: consumer['secret'],
+ output_interval: 1,
+ history_size: 1000,
+ api: { :host => 'userstream.twitter.com', :path => '/2/user.json', :ssl => true },
+ confirm_type: :y,
+ expand_url: false,
+ thread_indent: " ",
+ }
+ end
- config[:dir] ||= File.expand_path('~/.earthquake')
- config[:time_format] ||= Time::DATE_FORMATS[:short]
- config[:plugin_dir] ||= File.join(config[:dir], 'plugin')
- config[:file] ||= File.join(config[:dir], 'config')
- config[:prompt] ||= ''
- config[:consumer_key] ||= consumer['key']
- config[:consumer_secret] ||= consumer['secret']
- config[:output_interval] ||= 1
- config[:history_size] ||= 1000
- config[:api] ||= { :host => 'userstream.twitter.com', :path => '/2/user.json', :ssl => true }
- config[:confirm_type] ||= :y
- config[:expand_url] ||= false
- config[:thread_indent] ||= " "
+ def load_config
+ config.reverse_update(default_config)
[config[:dir], config[:plugin_dir]].each do |dir|
unless File.exists?(dir)
@@ -78,6 +88,8 @@ def load_config
File.open(config[:file], 'w')
end
+ config.update(preferred_config)
+
get_access_token unless self.config[:token] && self.config[:secret]
end

4 comments on commit 6fbeffa

@jugyo
Owner

プラグインの設定で config[:foo][:bar] = 'baz' とかやりたいケースがあるのでそういうのにも対応できると嬉しいっすねぇ。
例えば、

⚡ :config foo.bar baz

とかですかねぇ。。

@no6v
Collaborator
:config foo {bar: "baz"}
{
    :bar => "baz"
}
⚡ :config foo
{
    :bar => "baz"
}
⚡ :eval config.slice(:foo)
{
    :foo => {
        :bar => "baz"
    }
}

キーの後ろの空白以降はまるっぽ eval してるので何でも書けるんですけどどうでしょう?

@jugyo
Owner

ネストした Hash において、設定の一部を変えるっていうのができないのが辛いところです。。
keyword プラグインとか設定項目複数あるので。。

@no6v
Collaborator

eval した結果はキーに対して store してるだけなので、:notify や :filter だけならいけますが、
:ignore の配列をいじるのは難しいですね。:eval するしかないかなぁ。
表示はちょっと分かり難いというかおかしいですね。もう少し見てみます。

:config keyword 
{
    :ignore => [],
    :notify => true,
    :filter => false
}
⚡ :config keyword {notify: false}
{
    :notify => false
}
⚡ :config keyword 
{
    :notify => false,
    :ignore => [],
    :filter => false
}

セットした時にも最後の例のように表示されればいいんかな。

Please sign in to comment.
Something went wrong with that request. Please try again.