ihoka-friendly 0.6.2

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.
@@ -0,0 +1,149 @@
1
+ require 'friendly/time'
2
+ require 'friendly/attribute'
3
+ require 'rufus-json'
4
+
5
+ # This class was extracted from the cassandra gem by Evan Weaver
6
+ # As such, it is distributed under the terms of the apache license.
7
+ # See the APACHE-LICENSE file in the root of this project for more information.
8
+ #
9
+ module Friendly
10
+ # UUID format version 1, as specified in RFC 4122, with jitter in place of the mac address and sequence counter.
11
+ class UUID
12
+
13
+ class InvalidVersion < StandardError; end
14
+ class TypeError < ::TypeError; end
15
+
16
+ GREGORIAN_EPOCH_OFFSET = 0x01B2_1DD2_1381_4000 # Oct 15, 1582
17
+
18
+ VARIANT = 0b1000_0000_0000_0000
19
+
20
+ def initialize(bytes = nil)
21
+ case bytes
22
+ when self.class # UUID
23
+ @bytes = bytes.to_s
24
+ when String
25
+ case bytes.size
26
+ when 16 # Raw byte array
27
+ @bytes = bytes
28
+ when 36 # Human-readable UUID representation; inverse of #to_guid
29
+ elements = bytes.split("-")
30
+ raise TypeError, "Expected #{bytes.inspect} to cast to a #{self.class} (malformed UUID representation)" if elements.size != 5
31
+ @bytes = Array(elements.join).pack('H32')
32
+ else
33
+ raise TypeError, "Expected #{bytes.inspect} to cast to a #{self.class} (invalid bytecount)"
34
+ end
35
+
36
+ when Integer
37
+ raise TypeError, "Expected #{bytes.inspect} to cast to a #{self.class} (integer out of range)" if bytes < 0 or bytes > 2**128
38
+ @bytes = [
39
+ (bytes >> 96) & 0xFFFF_FFFF,
40
+ (bytes >> 64) & 0xFFFF_FFFF,
41
+ (bytes >> 32) & 0xFFFF_FFFF,
42
+ bytes & 0xFFFF_FFFF
43
+ ].pack("NNNN")
44
+
45
+ when NilClass, Time
46
+ time = (bytes || Time).stamp * 10 + GREGORIAN_EPOCH_OFFSET
47
+ # See http://github.com/spectra/ruby-uuid/
48
+ @bytes = [
49
+ time & 0xFFFF_FFFF,
50
+ time >> 32,
51
+ ((time >> 48) & 0x0FFF) | 0x1000,
52
+ # Top 3 bytes reserved
53
+ rand(2**13) | VARIANT,
54
+ rand(2**16),
55
+ rand(2**32)
56
+ ].pack("NnnnnN")
57
+
58
+ else
59
+ raise TypeError, "Expected #{bytes.inspect} to cast to a #{self.class} (unknown source class)"
60
+ end
61
+ end
62
+
63
+ def to_i
64
+ ints = @bytes.unpack("NNNN")
65
+ (ints[0] << 96) +
66
+ (ints[1] << 64) +
67
+ (ints[2] << 32) +
68
+ ints[3]
69
+ end
70
+
71
+ def version
72
+ time_high = @bytes.unpack("NnnQ")[2]
73
+ version = (time_high & 0xF000).to_s(16)[0].chr.to_i
74
+ version > 0 and version < 6 ? version : -1
75
+ end
76
+
77
+ def variant
78
+ @bytes.unpack('QnnN')[1] >> 13
79
+ end
80
+
81
+ def to_guid
82
+ elements = @bytes.unpack("NnnCCa6")
83
+ node = elements[-1].unpack('C*')
84
+ elements[-1] = '%02x%02x%02x%02x%02x%02x' % node
85
+ "%08x-%04x-%04x-%02x%02x-%s" % elements
86
+ end
87
+
88
+ def to_json(*args)
89
+ Rufus::Json.encode(to_guid)
90
+ end
91
+
92
+ def seconds
93
+ total_usecs / 1_000_000
94
+ end
95
+
96
+ def usecs
97
+ total_usecs % 1_000_000
98
+ end
99
+
100
+ def <=>(other)
101
+ total_usecs <=> other.send(:total_usecs)
102
+ end
103
+
104
+ def inspect(long = false)
105
+ "<Friendly::UUID##{object_id} time: #{
106
+ Time.at(seconds).inspect
107
+ }, usecs: #{
108
+ usecs
109
+ } jitter: #{
110
+ @bytes.unpack('QQ')[1]
111
+ }" + (long ? ", version: #{version}, variant: #{variant}, guid: #{to_guid}>" : ">")
112
+ end
113
+
114
+ def <=>(other)
115
+ self.to_i <=> other.to_i
116
+ end
117
+
118
+ def hash
119
+ @bytes.hash
120
+ end
121
+
122
+ def eql?(other)
123
+ other.is_a?(Comparable) and @bytes == other.to_s
124
+ end
125
+
126
+ def ==(other)
127
+ self.to_s == other.to_s
128
+ end
129
+
130
+ def to_s
131
+ @bytes
132
+ end
133
+
134
+ def sql_literal(dataset)
135
+ dataset.literal(to_s.to_sequel_blob)
136
+ end
137
+
138
+ private
139
+
140
+ def total_usecs
141
+ elements = @bytes.unpack("NnnQ")
142
+ (elements[0] + (elements[1] << 32) + ((elements[2] & 0x0FFF) << 48) - GREGORIAN_EPOCH_OFFSET) / 10
143
+ end
144
+ end
145
+ end
146
+
147
+ Friendly::Attribute.register_type(Friendly::UUID, 'binary(16)') do |s|
148
+ Friendly::UUID.new(s)
149
+ end
data/rails/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ config = YAML.load(File.read(RAILS_ROOT + "/config/friendly.yml"))[RAILS_ENV]
2
+ Friendly.configure(config)
3
+
metadata ADDED
@@ -0,0 +1,522 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ihoka-friendly
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 6
9
+ - 2
10
+ version: 0.6.2
11
+ platform: ruby
12
+ authors:
13
+ - James Golick
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-04-10 00:00:00 +03:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ type: :development
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 23
29
+ segments:
30
+ - 1
31
+ - 0
32
+ - 0
33
+ version: 1.0.0
34
+ name: bundler
35
+ version_requirements: *id001
36
+ prerelease: false
37
+ - !ruby/object:Gem::Dependency
38
+ type: :development
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 45
45
+ segments:
46
+ - 2
47
+ - 8
48
+ - 1
49
+ version: 2.8.1
50
+ name: mysql
51
+ version_requirements: *id002
52
+ prerelease: false
53
+ - !ruby/object:Gem::Dependency
54
+ type: :development
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 23
61
+ segments:
62
+ - 2
63
+ - 3
64
+ - 10
65
+ version: 2.3.10
66
+ name: activesupport
67
+ version_requirements: *id003
68
+ prerelease: false
69
+ - !ruby/object:Gem::Dependency
70
+ type: :development
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 71
77
+ segments:
78
+ - 3
79
+ - 16
80
+ - 0
81
+ version: 3.16.0
82
+ name: sequel
83
+ version_requirements: *id004
84
+ prerelease: false
85
+ - !ruby/object:Gem::Dependency
86
+ type: :development
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ hash: 17
93
+ segments:
94
+ - 0
95
+ - 2
96
+ - 3
97
+ version: 0.2.3
98
+ name: rufus-json
99
+ version_requirements: *id005
100
+ prerelease: false
101
+ - !ruby/object:Gem::Dependency
102
+ type: :development
103
+ requirement: &id006 !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ~>
107
+ - !ruby/object:Gem::Version
108
+ hash: 77
109
+ segments:
110
+ - 0
111
+ - 20
112
+ - 1
113
+ version: 0.20.1
114
+ name: memcached
115
+ version_requirements: *id006
116
+ prerelease: false
117
+ - !ruby/object:Gem::Dependency
118
+ type: :development
119
+ requirement: &id007 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ hash: 29
125
+ segments:
126
+ - 2
127
+ - 3
128
+ - 15
129
+ version: 2.3.15
130
+ name: will_paginate
131
+ version_requirements: *id007
132
+ prerelease: false
133
+ - !ruby/object:Gem::Dependency
134
+ type: :development
135
+ requirement: &id008 !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ~>
139
+ - !ruby/object:Gem::Version
140
+ hash: 13
141
+ segments:
142
+ - 0
143
+ - 7
144
+ - 7
145
+ version: 0.7.7
146
+ name: yajl-ruby
147
+ version_requirements: *id008
148
+ prerelease: false
149
+ - !ruby/object:Gem::Dependency
150
+ type: :development
151
+ requirement: &id009 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ~>
155
+ - !ruby/object:Gem::Version
156
+ hash: 25
157
+ segments:
158
+ - 1
159
+ - 3
160
+ - 1
161
+ version: 1.3.1
162
+ name: rspec
163
+ version_requirements: *id009
164
+ prerelease: false
165
+ - !ruby/object:Gem::Dependency
166
+ type: :development
167
+ requirement: &id010 !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ~>
171
+ - !ruby/object:Gem::Version
172
+ hash: 40201052224313
173
+ segments:
174
+ - 0
175
+ - 9
176
+ - 8
177
+ - 20100526112143
178
+ version: 0.9.8.20100526112143
179
+ name: jferris-mocha
180
+ version_requirements: *id010
181
+ prerelease: false
182
+ - !ruby/object:Gem::Dependency
183
+ type: :development
184
+ requirement: &id011 !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ~>
188
+ - !ruby/object:Gem::Version
189
+ hash: 41
190
+ segments:
191
+ - 0
192
+ - 9
193
+ - 9
194
+ version: 0.9.9
195
+ name: rcov
196
+ version_requirements: *id011
197
+ prerelease: false
198
+ - !ruby/object:Gem::Dependency
199
+ type: :development
200
+ requirement: &id012 !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ~>
204
+ - !ruby/object:Gem::Version
205
+ hash: 7
206
+ segments:
207
+ - 1
208
+ - 5
209
+ - 2
210
+ version: 1.5.2
211
+ name: jeweler
212
+ version_requirements: *id012
213
+ prerelease: false
214
+ - !ruby/object:Gem::Dependency
215
+ type: :development
216
+ requirement: &id013 !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ~>
220
+ - !ruby/object:Gem::Version
221
+ hash: 45
222
+ segments:
223
+ - 2
224
+ - 8
225
+ - 1
226
+ version: 2.8.1
227
+ name: mysql
228
+ version_requirements: *id013
229
+ prerelease: false
230
+ - !ruby/object:Gem::Dependency
231
+ type: :development
232
+ requirement: &id014 !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ~>
236
+ - !ruby/object:Gem::Version
237
+ hash: 23
238
+ segments:
239
+ - 2
240
+ - 3
241
+ - 10
242
+ version: 2.3.10
243
+ name: activesupport
244
+ version_requirements: *id014
245
+ prerelease: false
246
+ - !ruby/object:Gem::Dependency
247
+ type: :development
248
+ requirement: &id015 !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ~>
252
+ - !ruby/object:Gem::Version
253
+ hash: 71
254
+ segments:
255
+ - 3
256
+ - 16
257
+ - 0
258
+ version: 3.16.0
259
+ name: sequel
260
+ version_requirements: *id015
261
+ prerelease: false
262
+ - !ruby/object:Gem::Dependency
263
+ type: :development
264
+ requirement: &id016 !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - ~>
268
+ - !ruby/object:Gem::Version
269
+ hash: 17
270
+ segments:
271
+ - 0
272
+ - 2
273
+ - 3
274
+ version: 0.2.3
275
+ name: rufus-json
276
+ version_requirements: *id016
277
+ prerelease: false
278
+ - !ruby/object:Gem::Dependency
279
+ type: :development
280
+ requirement: &id017 !ruby/object:Gem::Requirement
281
+ none: false
282
+ requirements:
283
+ - - ~>
284
+ - !ruby/object:Gem::Version
285
+ hash: 77
286
+ segments:
287
+ - 0
288
+ - 20
289
+ - 1
290
+ version: 0.20.1
291
+ name: memcached
292
+ version_requirements: *id017
293
+ prerelease: false
294
+ - !ruby/object:Gem::Dependency
295
+ type: :development
296
+ requirement: &id018 !ruby/object:Gem::Requirement
297
+ none: false
298
+ requirements:
299
+ - - ~>
300
+ - !ruby/object:Gem::Version
301
+ hash: 29
302
+ segments:
303
+ - 2
304
+ - 3
305
+ - 15
306
+ version: 2.3.15
307
+ name: will_paginate
308
+ version_requirements: *id018
309
+ prerelease: false
310
+ - !ruby/object:Gem::Dependency
311
+ type: :development
312
+ requirement: &id019 !ruby/object:Gem::Requirement
313
+ none: false
314
+ requirements:
315
+ - - ~>
316
+ - !ruby/object:Gem::Version
317
+ hash: 13
318
+ segments:
319
+ - 0
320
+ - 7
321
+ - 7
322
+ version: 0.7.7
323
+ name: yajl-ruby
324
+ version_requirements: *id019
325
+ prerelease: false
326
+ - !ruby/object:Gem::Dependency
327
+ type: :development
328
+ requirement: &id020 !ruby/object:Gem::Requirement
329
+ none: false
330
+ requirements:
331
+ - - ~>
332
+ - !ruby/object:Gem::Version
333
+ hash: 25
334
+ segments:
335
+ - 1
336
+ - 3
337
+ - 1
338
+ version: 1.3.1
339
+ name: rspec
340
+ version_requirements: *id020
341
+ prerelease: false
342
+ - !ruby/object:Gem::Dependency
343
+ type: :development
344
+ requirement: &id021 !ruby/object:Gem::Requirement
345
+ none: false
346
+ requirements:
347
+ - - ~>
348
+ - !ruby/object:Gem::Version
349
+ hash: 40201052224313
350
+ segments:
351
+ - 0
352
+ - 9
353
+ - 8
354
+ - 20100526112143
355
+ version: 0.9.8.20100526112143
356
+ name: jferris-mocha
357
+ version_requirements: *id021
358
+ prerelease: false
359
+ - !ruby/object:Gem::Dependency
360
+ type: :development
361
+ requirement: &id022 !ruby/object:Gem::Requirement
362
+ none: false
363
+ requirements:
364
+ - - ~>
365
+ - !ruby/object:Gem::Version
366
+ hash: 7
367
+ segments:
368
+ - 1
369
+ - 5
370
+ - 2
371
+ version: 1.5.2
372
+ name: jeweler
373
+ version_requirements: *id022
374
+ prerelease: false
375
+ - !ruby/object:Gem::Dependency
376
+ type: :runtime
377
+ requirement: &id023 !ruby/object:Gem::Requirement
378
+ none: false
379
+ requirements:
380
+ - - ">="
381
+ - !ruby/object:Gem::Version
382
+ hash: 27
383
+ segments:
384
+ - 3
385
+ - 7
386
+ - 0
387
+ version: 3.7.0
388
+ name: sequel
389
+ version_requirements: *id023
390
+ prerelease: false
391
+ - !ruby/object:Gem::Dependency
392
+ type: :runtime
393
+ requirement: &id024 !ruby/object:Gem::Requirement
394
+ none: false
395
+ requirements:
396
+ - - ~>
397
+ - !ruby/object:Gem::Version
398
+ hash: 9
399
+ segments:
400
+ - 2
401
+ - 3
402
+ - 5
403
+ version: 2.3.5
404
+ name: activesupport
405
+ version_requirements: *id024
406
+ prerelease: false
407
+ - !ruby/object:Gem::Dependency
408
+ type: :runtime
409
+ requirement: &id025 !ruby/object:Gem::Requirement
410
+ none: false
411
+ requirements:
412
+ - - ~>
413
+ - !ruby/object:Gem::Version
414
+ hash: 3
415
+ segments:
416
+ - 2
417
+ - 3
418
+ - 0
419
+ version: 2.3.0
420
+ name: will_paginate
421
+ version_requirements: *id025
422
+ prerelease: false
423
+ - !ruby/object:Gem::Dependency
424
+ type: :runtime
425
+ requirement: &id026 !ruby/object:Gem::Requirement
426
+ none: false
427
+ requirements:
428
+ - - "="
429
+ - !ruby/object:Gem::Version
430
+ hash: 17
431
+ segments:
432
+ - 0
433
+ - 2
434
+ - 3
435
+ version: 0.2.3
436
+ name: rufus-json
437
+ version_requirements: *id026
438
+ prerelease: false
439
+ description: ""
440
+ email: istvan.hoka@gmail.com
441
+ executables: []
442
+
443
+ extensions: []
444
+
445
+ extra_rdoc_files:
446
+ - LICENSE
447
+ - README.md
448
+ files:
449
+ - CHANGELOG.md
450
+ - CONTRIBUTORS.md
451
+ - LICENSE
452
+ - README.md
453
+ - lib/friendly.rb
454
+ - lib/friendly/associations.rb
455
+ - lib/friendly/associations/association.rb
456
+ - lib/friendly/associations/set.rb
457
+ - lib/friendly/attribute.rb
458
+ - lib/friendly/boolean.rb
459
+ - lib/friendly/cache.rb
460
+ - lib/friendly/cache/by_id.rb
461
+ - lib/friendly/data_store.rb
462
+ - lib/friendly/document.rb
463
+ - lib/friendly/document/associations.rb
464
+ - lib/friendly/document/attributes.rb
465
+ - lib/friendly/document/convenience.rb
466
+ - lib/friendly/document/mixin.rb
467
+ - lib/friendly/document/scoping.rb
468
+ - lib/friendly/document/storage.rb
469
+ - lib/friendly/document_table.rb
470
+ - lib/friendly/index.rb
471
+ - lib/friendly/indexer.rb
472
+ - lib/friendly/memcached.rb
473
+ - lib/friendly/newrelic.rb
474
+ - lib/friendly/query.rb
475
+ - lib/friendly/scope.rb
476
+ - lib/friendly/scope_proxy.rb
477
+ - lib/friendly/sequel_monkey_patches.rb
478
+ - lib/friendly/storage.rb
479
+ - lib/friendly/storage_factory.rb
480
+ - lib/friendly/storage_proxy.rb
481
+ - lib/friendly/table.rb
482
+ - lib/friendly/table_creator.rb
483
+ - lib/friendly/time.rb
484
+ - lib/friendly/translator.rb
485
+ - lib/friendly/uuid.rb
486
+ - rails/init.rb
487
+ has_rdoc: true
488
+ homepage: http://friendlyorm.com
489
+ licenses: []
490
+
491
+ post_install_message:
492
+ rdoc_options: []
493
+
494
+ require_paths:
495
+ - lib
496
+ required_ruby_version: !ruby/object:Gem::Requirement
497
+ none: false
498
+ requirements:
499
+ - - ">="
500
+ - !ruby/object:Gem::Version
501
+ hash: 3
502
+ segments:
503
+ - 0
504
+ version: "0"
505
+ required_rubygems_version: !ruby/object:Gem::Requirement
506
+ none: false
507
+ requirements:
508
+ - - ">="
509
+ - !ruby/object:Gem::Version
510
+ hash: 3
511
+ segments:
512
+ - 0
513
+ version: "0"
514
+ requirements: []
515
+
516
+ rubyforge_project:
517
+ rubygems_version: 1.6.2
518
+ signing_key:
519
+ specification_version: 3
520
+ summary: NoSQL with MySQL in Ruby
521
+ test_files: []
522
+