caesars 0.6.4 → 0.6.5
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/CHANGES.txt +4 -0
- data/caesars.gemspec +3 -2
- data/lib/orderedhash.rb +199 -0
- metadata +4 -3
data/CHANGES.txt
CHANGED
data/caesars.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
@spec = Gem::Specification.new do |s|
|
2
2
|
s.name = "caesars"
|
3
3
|
s.rubyforge_project = "caesars"
|
4
|
-
s.version = "0.6.
|
4
|
+
s.version = "0.6.5"
|
5
5
|
s.specification_version = 1 if s.respond_to? :specification_version=
|
6
6
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
7
7
|
|
@@ -22,12 +22,13 @@
|
|
22
22
|
bin/party.conf
|
23
23
|
caesars.gemspec
|
24
24
|
lib/caesars.rb
|
25
|
+
lib/orderedhash.rb
|
25
26
|
)
|
26
27
|
|
27
28
|
# s.add_dependency ''
|
28
29
|
|
29
30
|
s.has_rdoc = true
|
30
|
-
s.homepage = %q{http://github.com/delano/
|
31
|
+
s.homepage = %q{http://github.com/delano/caesars}
|
31
32
|
s.extra_rdoc_files = %w[README.rdoc LICENSE.txt CHANGES.txt]
|
32
33
|
s.rdoc_options = ["--line-numbers", "--title", "Caesars: Rapid DSL prototyping in Ruby.", "--main", "README.rdoc"]
|
33
34
|
s.require_paths = ["lib"]
|
data/lib/orderedhash.rb
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
# AUTHOR
|
2
|
+
# jan molic /mig/at/1984/dot/cz/
|
3
|
+
#
|
4
|
+
# DESCRIPTION
|
5
|
+
# Hash with preserved order and some array-like extensions
|
6
|
+
# Public domain.
|
7
|
+
#
|
8
|
+
# THANKS
|
9
|
+
# Andrew Johnson for his suggestions and fixes of Hash[],
|
10
|
+
# merge, to_a, inspect and shift
|
11
|
+
class OrderedHash < ::Hash
|
12
|
+
attr_accessor :order
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def [] *args
|
16
|
+
hsh = OrderedHash.new
|
17
|
+
if Hash === args[0]
|
18
|
+
hsh.replace args[0]
|
19
|
+
elsif (args.size % 2) != 0
|
20
|
+
raise ArgumentError, "odd number of elements for Hash"
|
21
|
+
else
|
22
|
+
0.step(args.size - 1, 2) do |a|
|
23
|
+
b = a + 1
|
24
|
+
hsh[args[a]] = args[b]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
hsh
|
28
|
+
end
|
29
|
+
end
|
30
|
+
def initialize(*a, &b)
|
31
|
+
super
|
32
|
+
@order = []
|
33
|
+
end
|
34
|
+
def store_only a,b
|
35
|
+
store a,b
|
36
|
+
end
|
37
|
+
alias orig_store store
|
38
|
+
def store a,b
|
39
|
+
@order.push a unless has_key? a
|
40
|
+
super a,b
|
41
|
+
end
|
42
|
+
alias []= store
|
43
|
+
def == hsh2
|
44
|
+
return false if @order != hsh2.order
|
45
|
+
super hsh2
|
46
|
+
end
|
47
|
+
def clear
|
48
|
+
@order = []
|
49
|
+
super
|
50
|
+
end
|
51
|
+
def delete key
|
52
|
+
@order.delete key
|
53
|
+
super
|
54
|
+
end
|
55
|
+
def each_key
|
56
|
+
@order.each { |k| yield k }
|
57
|
+
self
|
58
|
+
end
|
59
|
+
def each_value
|
60
|
+
@order.each { |k| yield self[k] }
|
61
|
+
self
|
62
|
+
end
|
63
|
+
def each
|
64
|
+
@order.each { |k| yield k,self[k] }
|
65
|
+
self
|
66
|
+
end
|
67
|
+
alias each_pair each
|
68
|
+
def delete_if
|
69
|
+
@order.clone.each { |k|
|
70
|
+
delete k if yield(k)
|
71
|
+
}
|
72
|
+
self
|
73
|
+
end
|
74
|
+
def values
|
75
|
+
ary = []
|
76
|
+
@order.each { |k| ary.push self[k] }
|
77
|
+
ary
|
78
|
+
end
|
79
|
+
def keys
|
80
|
+
@order
|
81
|
+
end
|
82
|
+
def first
|
83
|
+
{@order.first => self[@order.first]}
|
84
|
+
end
|
85
|
+
def last
|
86
|
+
{@order.last => self[@order.last]}
|
87
|
+
end
|
88
|
+
def invert
|
89
|
+
hsh2 = Hash.new
|
90
|
+
@order.each { |k| hsh2[self[k]] = k }
|
91
|
+
hsh2
|
92
|
+
end
|
93
|
+
def reject &block
|
94
|
+
self.dup.delete_if &block
|
95
|
+
end
|
96
|
+
def reject! &block
|
97
|
+
hsh2 = reject &block
|
98
|
+
self == hsh2 ? nil : hsh2
|
99
|
+
end
|
100
|
+
def replace hsh2
|
101
|
+
@order = hsh2.keys
|
102
|
+
super hsh2
|
103
|
+
end
|
104
|
+
def shift
|
105
|
+
key = @order.first
|
106
|
+
key ? [key,delete(key)] : super
|
107
|
+
end
|
108
|
+
def unshift k,v
|
109
|
+
unless self.include? k
|
110
|
+
@order.unshift k
|
111
|
+
orig_store(k,v)
|
112
|
+
true
|
113
|
+
else
|
114
|
+
false
|
115
|
+
end
|
116
|
+
end
|
117
|
+
def push k,v
|
118
|
+
unless self.include? k
|
119
|
+
@order.push k
|
120
|
+
orig_store(k,v)
|
121
|
+
true
|
122
|
+
else
|
123
|
+
false
|
124
|
+
end
|
125
|
+
end
|
126
|
+
def pop
|
127
|
+
key = @order.last
|
128
|
+
key ? [key,delete(key)] : nil
|
129
|
+
end
|
130
|
+
def to_a
|
131
|
+
ary = []
|
132
|
+
each { |k,v| ary << [k,v] }
|
133
|
+
ary
|
134
|
+
end
|
135
|
+
def to_s
|
136
|
+
self.to_a.to_s
|
137
|
+
end
|
138
|
+
def inspect
|
139
|
+
ary = []
|
140
|
+
each {|k,v| ary << k.inspect + "=>" + v.inspect}
|
141
|
+
'{' + ary.join(", ") + '}'
|
142
|
+
end
|
143
|
+
def update hsh2
|
144
|
+
hsh2.each { |k,v| self[k] = v }
|
145
|
+
self
|
146
|
+
end
|
147
|
+
alias :merge! update
|
148
|
+
def merge hsh2
|
149
|
+
self.dup update(hsh2)
|
150
|
+
end
|
151
|
+
def select
|
152
|
+
ary = []
|
153
|
+
each { |k,v| ary << [k,v] if yield k,v }
|
154
|
+
ary
|
155
|
+
end
|
156
|
+
def class
|
157
|
+
Hash
|
158
|
+
end
|
159
|
+
def __class__
|
160
|
+
OrderedHash
|
161
|
+
end
|
162
|
+
|
163
|
+
attr_accessor "to_yaml_style"
|
164
|
+
def yaml_inline= bool
|
165
|
+
if respond_to?("to_yaml_style")
|
166
|
+
self.to_yaml_style = :inline
|
167
|
+
else
|
168
|
+
unless defined? @__yaml_inline_meth
|
169
|
+
@__yaml_inline_meth =
|
170
|
+
lambda {|opts|
|
171
|
+
YAML::quick_emit(object_id, opts) {|emitter|
|
172
|
+
emitter << '{ ' << map{|kv| kv.join ': '}.join(', ') << ' }'
|
173
|
+
}
|
174
|
+
}
|
175
|
+
class << self
|
176
|
+
def to_yaml opts = {}
|
177
|
+
begin
|
178
|
+
@__yaml_inline ? @__yaml_inline_meth[ opts ] : super
|
179
|
+
rescue
|
180
|
+
@to_yaml_style = :inline
|
181
|
+
super
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
@__yaml_inline = bool
|
188
|
+
end
|
189
|
+
def yaml_inline!() self.yaml_inline = true end
|
190
|
+
|
191
|
+
def each_with_index
|
192
|
+
@order.each_with_index { |k, index| yield k, self[k], index }
|
193
|
+
self
|
194
|
+
end
|
195
|
+
end # class OrderedHash
|
196
|
+
|
197
|
+
def OrderedHash(*a, &b)
|
198
|
+
OrderedHash.new(*a, &b)
|
199
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caesars
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Delano Mandelbaum
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05-
|
12
|
+
date: 2009-05-10 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -33,8 +33,9 @@ files:
|
|
33
33
|
- bin/party.conf
|
34
34
|
- caesars.gemspec
|
35
35
|
- lib/caesars.rb
|
36
|
+
- lib/orderedhash.rb
|
36
37
|
has_rdoc: true
|
37
|
-
homepage: http://github.com/delano/
|
38
|
+
homepage: http://github.com/delano/caesars
|
38
39
|
licenses: []
|
39
40
|
|
40
41
|
post_install_message:
|