Class: AlPersistSh

Inherits:
AlPersist show all
Defined in:
lib/al_persist_sh.rb

Overview

Note:

sh設定ファイルへのAlPersistインターフェース

擬似的にAlPersistのインターフェースを真似ているが、 データの性質は違うので注意する。 このクラスでは、イメージ的にはRDBでいうところの 横持ち構造になっていて、1行のみデータが存在する。

Constant Summary

REX_DATA =
/\A\s*(\w+)=["'](.*)["']/

Instance Attribute Summary (collapse)

Attributes inherited from AlPersist

#persist_base, #pkeys, #result, #search_condition, #values

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods inherited from AlPersist

#[], #[]=, #get_next_offset, #get_previous_offset, #pkey

Constructor Details

- (AlPersistSh) initialize(fname)

constructor

Parameters:

  • fname (String)

    ファイルネーム



46
47
48
49
# File 'lib/al_persist_sh.rb', line 46

def initialize( fname )
  super( nil, nil )
  @filename = fname
end

Instance Attribute Details

- (String) filename (readonly)

Returns 保存ファイル名

Returns:

  • (String)

    保存ファイル名



39
40
41
# File 'lib/al_persist_sh.rb', line 39

def filename
  @filename
end

Class Method Details

+ (AlPersistSh) connect(conn_info = nil)

ファクトリ

Parameters:

  • conn_info (String) (defaults to: nil)

    ファイル名

Returns:



33
34
35
# File 'lib/al_persist_sh.rb', line 33

def self.connect( conn_info = nil )
  return self.new( conn_info )
end

Instance Method Details

- (Boolean) create(values = nil) Also known as: entry

Note:

新規登録

引数の指定があれば、その値を一旦内部値(@values)にしたうえで登録する。 キーの合致するデータがあれば更新し、なければ新規登録する。

Parameters:

  • values (Hash) (defaults to: nil)

    保存する値のHash

Returns:

  • (Boolean)

    成功/失敗



130
131
132
# File 'lib/al_persist_sh.rb', line 130

def create( values = nil )
  entry_main( :create, values )
end

- (Boolean) delete(values = nil)

Note:

削除

ファイル中の、キーの合致するデータを削除する。 他のPersistクラスと、動作が違うので注意する。 引数の指定があれば、その値を一旦内部値(@values)にしたうえで削除する。 消すための処理は、keyが合致することだけをみていて、値は必要ではない。 ファイルが存在しなかったり、項目が存在せずに値を消すことができなくても成功とする。

Parameters:

  • values (Hash) (defaults to: nil)

    消す項目のhash

Returns:

  • (Boolean)

    成功/失敗



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/al_persist_sh.rb', line 94

def delete( values = nil )
  @values = values  if values

  begin
    file = open( @filename, 'r' )
  rescue Errno::ENOENT
    return true
  end
  fout = Tempfile.new( "al-temp", File.dirname(@filename) )

  while text = file.gets
    if REX_DATA =~ text
      k = $1
      next if @values.has_key?( k )
      next if @values.has_key?( k.to_sym )
    end
    fout.write( text )
  end

  file.close()
  File.rename( fout.path, @filename )
  fout.close()

  return true
end

- (Boolean) read(values = nil)

Note:

データを読み込み、内部(@values) に保持する。

ファイルが存在しなくても、成功とする。

Parameters:

  • values (Hash) (defaults to: nil)

    ダミー

Returns:

  • (Boolean)

    成功/失敗



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/al_persist_sh.rb', line 60

def read( values = nil )
  @values = {}
  begin
    file = open( @filename, 'r' )
  rescue Errno::ENOENT
    return true
  end

  while text = file.gets
    next if REX_DATA !~ text
    k = $1
    v = $2.gsub(/\\(u\{[\da-fA-F]+\}|x[\da-fA-F]{2}|\d{3}|[a-zA-Z\\"'])/) {
      eval( %Q("\\#{$1}") )
    }
    @values[k.to_sym] = v
  end
  file.close()

  return true
end

- (Array<AlPersist>) search(param = {}) Also known as: all

Note:

データを読み込む。

他のPersistクラスとの互換性の為に定義する。

Parameters:

  • param (Hash) (defaults to: {})

    検索パラメータ(ダミー)

Returns:

  • (Array<AlPersist>)

    Persistオブジェクトの配列



157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/al_persist_sh.rb', line 157

def search( param = {} )
  obj = self.dup()
  obj.read()
  if obj.values.empty?
    @search_condition[:total_rows] = 0
    @search_condition[:num_rows] = 0
    return []
  else
    @search_condition[:total_rows] = 1
    @search_condition[:num_rows] = 1
    return [obj]
  end
end

- (Boolean) update(values = nil)

Note:

更新

引数の指定があれば、その値を一旦内部値(@values)にしたうえで登録する。

Parameters:

  • values (Hash) (defaults to: nil)

    保存する値のHash

Returns:

  • (Boolean)

    成功/失敗



144
145
146
# File 'lib/al_persist_sh.rb', line 144

def update( values = nil )
  entry_main( :update, values )
end