Class: Jeanny::Dictionary

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/jeanny/engine.rb

Overview

Класс-попытка реализовать что нибудь похожее на упорядоченный хэш

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash = { }) ⇒ Dictionary

Returns a new instance of Dictionary.



121
122
123
124
125
126
127
128
129
# File 'lib/jeanny/engine.rb', line 121

def initialize hash = {  }
    
    @keys = [ ]
    @values = [ ]

    hash.each_pair { |key, val| append key, val } if hash.kind_of? Hash
    hash.each { |item| append item[0], item[1]  } if hash.kind_of? Array

end

Instance Attribute Details

#keysObject (readonly)

Returns the value of attribute keys.



119
120
121
# File 'lib/jeanny/engine.rb', line 119

def keys
  @keys
end

#valuesObject (readonly)

Returns the value of attribute values.



119
120
121
# File 'lib/jeanny/engine.rb', line 119

def values
  @values
end

Instance Method Details

#[](key) ⇒ Object



131
132
133
134
135
136
137
# File 'lib/jeanny/engine.rb', line 131

def [](key)
    if include? key
        @values[@keys.index(key)]
    else
        nil
    end
end

#[]=(key, value) ⇒ Object



139
140
141
142
143
144
145
# File 'lib/jeanny/engine.rb', line 139

def []=(key, value)
    if include? key
        @values[@keys.index(key)] = value
    else
        append key, value
    end
end

#append(key, value) ⇒ Object



147
148
149
150
# File 'lib/jeanny/engine.rb', line 147

def append key, value
    @keys << key
    @values << value
end

#eachObject



162
163
164
165
166
# File 'lib/jeanny/engine.rb', line 162

def each
    @keys.length.times do |i|
        yield @keys[i], @values[i]
    end
end

#empty?Boolean

Returns:

  • (Boolean)


158
159
160
# File 'lib/jeanny/engine.rb', line 158

def empty?
    @keys.empty?
end

#include?(class_name) ⇒ Boolean Also known as: has_key?

Returns:

  • (Boolean)


152
153
154
# File 'lib/jeanny/engine.rb', line 152

def include? class_name
    @keys.include? class_name
end

#lastObject



188
189
190
191
192
# File 'lib/jeanny/engine.rb', line 188

def last
    unless @keys.empty?
        [@keys.last, @values.last]
    end
end

#lengthObject



184
185
186
# File 'lib/jeanny/engine.rb', line 184

def length
    @keys.length
end

#select_keys_if(&block) ⇒ Object



175
176
177
178
179
180
181
182
# File 'lib/jeanny/engine.rb', line 175

def select_keys_if &block
    array = []
    @keys.length.times do |i|
        need_append = yield @keys[i], @values[i]
        array << @keys[i] if need_append
    end
    array
end

#sort!Object



168
169
170
171
172
173
# File 'lib/jeanny/engine.rb', line 168

def sort!
    @keys.map { |x| [x, @values[@keys.index(x)]] }.sort_by { |x| x[0].length }.reverse.each_with_index do |x, i|
        @keys[i] = x[0]
        @values[i] = x[1]
    end
end

#to_aObject



200
201
202
# File 'lib/jeanny/engine.rb', line 200

def to_a
    @keys.map { |x| [x, @values[@keys.index(x)]] }
end

#to_sObject



194
195
196
197
198
# File 'lib/jeanny/engine.rb', line 194

def to_s
    each do |key, val|
        puts key.ljust(40) + val
    end
end

#to_yamlObject



204
205
206
207
208
209
210
# File 'lib/jeanny/engine.rb', line 204

def to_yaml
    yaml = []
    each do |key, val|
        yaml.push({ key => val })
    end
    yaml.to_yaml
end