ihoka-friendly 0.6.2

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