caesars 0.6.4 → 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
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: