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.
Files changed (4) hide show
  1. data/CHANGES.txt +4 -0
  2. data/caesars.gemspec +3 -2
  3. data/lib/orderedhash.rb +199 -0
  4. metadata +4 -3
data/CHANGES.txt CHANGED
@@ -1,6 +1,10 @@
1
1
  CAESARS -- CHANGES
2
2
 
3
3
 
4
+ #### 0.6.5 (2009-05-10) ###############################
5
+
6
+ * FIXED: OrderHash was missing from 0.6.4 release
7
+
4
8
  #### 0.6.4 (2009-05-10) ###############################
5
9
 
6
10
  * CHANGE: OrderedHash support for Ruby 1.8 and JRuby
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"
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/caesar}
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"]
@@ -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
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-09 00:00:00 -04:00
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/caesar
38
+ homepage: http://github.com/delano/caesars
38
39
  licenses: []
39
40
 
40
41
  post_install_message: