Class: JIJI::Output

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/jiji/output.rb

Overview

グラフデータの出力先を作成するためのクラス

エージェントでグラフを描画するには、JIJI::Output#getを呼び出してJIJI::GraphOutを取得し、グラフデータを出力します。

# output から出力先を作成。 }) …(略)

# グラフのデータを出力。 # 出力先作成時にデータ数は2としているので、2つのデータを指定可能。 @out.put( 33, 39 ) @out.put( 45, 43 ) @out.put( 60, 69 )

Constant Summary collapse

PROPERTIES_FILE_NAME =

プロパティファイル名

"properties.yaml"
META_FILE_NAME =

メタ情報ファイル名

"meta.yaml"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(agent_id, dir, scales = []) ⇒ Output

:nodoc:



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/jiji/output.rb', line 38

def initialize( agent_id, dir, scales=[] ) #:nodoc:
  @dir = "#{dir}/#{agent_id}" # 「ベースディレクトリ/エージェントID/出力名」に保存する。
  FileUtils.mkdir_p @dir

  @outs = {}
  @scales = scales
  @agent_id = agent_id

  # 既存データの読み込み
  DirLock.new( @dir ).writelock {
    Dir.glob( "#{@dir}/*" ) {|d|
      meta = "#{d}/#{META_FILE_NAME}"
      next unless File.directory? d
      next unless File.exist? meta
      props = YAML.load_file meta
      @outs[props[:name]] =
        create_output( d, props[:name], props[:type].to_sym, props )
    }
  }

  # 名前の読み込み
  file = properties_file
  if File.exist? file
    properties = YAML.load_file(file)
    @agent_name = properties[:agent_name]
  end
end

Instance Attribute Details

#agent_idObject (readonly)

エージェントID



129
130
131
# File 'lib/jiji/output.rb', line 129

def agent_id
  @agent_id
end

#scalesObject

スケール



127
128
129
# File 'lib/jiji/output.rb', line 127

def scales
  @scales
end

#timeObject

現在時刻



125
126
127
# File 'lib/jiji/output.rb', line 125

def time
  @time
end

Instance Method Details

#agent_nameObject

エージェント名を取得する



75
76
77
# File 'lib/jiji/output.rb', line 75

def agent_name #:nodoc:
  @agent_name
end

#agent_name=(name) ⇒ Object

エージェント名を設定する



67
68
69
70
71
72
# File 'lib/jiji/output.rb', line 67

def agent_name=(name) #:nodoc:
  @agent_name = name
  FileLock.new( properties_file ).writelock { |f|
    f.write( YAML.dump({:agent_name=>name}) )
  }
end

#each(&block) ⇒ Object

出力先を列挙する



107
108
109
# File 'lib/jiji/output.rb', line 107

def each( &block ) #:nodoc:
  @outs.each( &block )
end

#exist?(name) ⇒ Boolean

出力先をが存在するか評価する

Returns:

  • (Boolean)


112
113
114
# File 'lib/jiji/output.rb', line 112

def exist?( name ) #:nodoc:
  @outs.key? name
end

#get(name, type = :graph, options = {}) ⇒ Object

グラフの出力先オブジェクトを取得します。

name

名前(UIでの表示名)

type

種別。:graph を指定してください。

option

補足情報。以下が指定可能です

- 「:column_count」 .. グラフのカラム数を整数値で指定します。(<b>必須</b>)
- 「:graph_type」 .. グラフの種類を指定します。以下の値が指定可能です。
  - :rate ..  レート情報に重ねて表示(移動平均線やボリンジャーバンド向け)。グラフは、ローソク足描画領域に描画される。
  - :zero_base ..  0を中心線とした線グラフ(RCIやMACD向け)。グラフは、グラフ描画領域に描画される。
  - :line ..  線グラフとして描画する。(デフォルト)。グラフは、グラフ描画領域に描画される。
- 「:colors」 .. グラフの色を「#FFFFFF」形式の文字列の配列で指定します。指定を省略した場合「0x557777」で描画されます。
return

出力先



91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/jiji/output.rb', line 91

def get( name, type=:graph, options={} )
  raise "illegal Name. name=#{name}" if name =~ /[\x00-\x1F\x7F\\\/\r\n\t]/
  return @outs[name] if @outs.key? name
  DirLock.new( @dir ).writelock {
    sub_dir = "#{@dir}/#{JIJI::Util.encode(name).gsub(/\//, "_")}"
    FileUtils.mkdir_p sub_dir
    options[:type] = type.to_s
    options[:name] = name
    @outs[name] = create_output( sub_dir, name, type, options )
    @outs[name].time = time
    @outs[name].save
  }
  @outs[name]
end