parlement 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +14 -4
- data/README +25 -5
- data/Rakefile +21 -21
- data/app/controllers/account_controller.rb +5 -1
- data/app/controllers/elt_controller.rb +7 -10
- data/app/controllers/person_controller.rb +9 -0
- data/app/controllers/subscriber_controller.rb +21 -0
- data/app/helpers/elt_helper.rb +25 -13
- data/app/helpers/mailman.rb +9 -92
- data/app/helpers/subscriber_helper.rb +2 -0
- data/app/models/attachment.rb +2 -0
- data/app/models/elt.rb +64 -2
- data/app/models/mail.rb +198 -0
- data/app/models/mail_notify.rb +63 -0
- data/app/models/person.rb +8 -1
- data/app/views/account/_login.rhtml +31 -28
- data/app/views/account/_show.rhtml +4 -4
- data/app/views/elt/_elt.rhtml +23 -28
- data/app/views/elt/_list.rhtml +6 -2
- data/app/views/elt/new.rhtml +1 -1
- data/app/views/elt/show.rhtml +32 -10
- data/app/views/layouts/top.rhtml +16 -10
- data/app/views/mail_notify/publish.text.html.rhtml +46 -0
- data/app/views/mail_notify/publish.text.plain.rhtml +2 -0
- data/app/views/person/_listElts.rhtml +33 -0
- data/app/views/person/show.rhtml +21 -19
- data/config/boot.rb +2 -0
- data/config/environment.rb +19 -13
- data/config/environments/development.rb +3 -1
- data/config/environments/production.rb +2 -0
- data/config/environments/test.rb +2 -0
- data/config/routes.rb +5 -2
- data/db/ROOT/mail.txt +2 -0
- data/db/ROOT/parlement/news/release0.2.txt +8 -0
- data/db/ROOT/parlement/news/release0.3.txt +11 -0
- data/db/ROOT/parlement/test.txt +6 -1
- data/db/ROOT/parlement.txt +23 -30
- data/db/ROOT/perso.txt +17 -18
- data/db/development_structure.sql +133 -217
- data/db/schema.rb +83 -0
- data/db/schema.sql +11 -15
- data/lib/data_import.rb +3 -1
- data/public/attachment/file/architecture.png +0 -0
- data/public/attachment/file/architecture.svg +8972 -0
- data/public/attachment/file/security.svg +8960 -0
- data/public/images/Sleep-Deprivation-5.JPG +0 -0
- data/public/images/eltBackground.png +0 -0
- data/public/images/eltBackground.svg +89 -0
- data/public/images/orange_by_darren_Hester_350o.jpg +0 -0
- data/public/images/rails.png +0 -0
- data/public/images/smile.png +0 -0
- data/public/images/smile.svg +257 -0
- data/public/images/world.png +0 -0
- data/public/images/world.svg +170 -0
- data/public/javascripts/controls.js +30 -1
- data/public/javascripts/dragdrop.js +210 -145
- data/public/javascripts/effects.js +261 -399
- data/public/javascripts/ie7.js +6 -0
- data/public/javascripts/prototype.js +131 -72
- data/public/oldindex.html +270 -71
- data/public/stylesheets/default.css +189 -215
- data/script/about +1 -1
- data/script/breakpointer +1 -1
- data/script/console +1 -1
- data/script/destroy +1 -1
- data/script/generate +1 -1
- data/script/performance/benchmarker +1 -1
- data/script/performance/profiler +1 -1
- data/script/plugin +1 -1
- data/script/process/reaper +1 -1
- data/script/process/spawner +1 -1
- data/script/process/spinner +1 -1
- data/script/runner +1 -1
- data/script/server +1 -1
- data/test/fixtures/elts.yml +2 -0
- data/test/fixtures/mail/mail_ruby +27 -0
- data/test/fixtures/mail/mail_rubyChild +28 -0
- data/test/fixtures/mail/mail_rubyWithAttachment +7932 -0
- data/test/fixtures/mail/mail_rubyWithSubject +27 -0
- data/test/fixtures/mails.yml +7 -1
- data/test/fixtures/people.yml +5 -0
- data/test/fixtures/subscribers.yml +11 -0
- data/test/functional/account_controller_test.rb +38 -37
- data/test/functional/subscriber_controller_test.rb +128 -0
- data/test/test_helper.rb +44 -0
- data/test/unit/attachment_test.rb +1 -1
- data/test/unit/elt_test.rb +3 -2
- data/test/unit/mail_notify_test.rb +37 -0
- data/test/unit/mail_test.rb +124 -1
- data/test/unit/notifier_test.rb +0 -14
- data/test/unit/person_test.rb +2 -1
- data/test/unit/subscriber_test.rb +35 -0
- data/test/unit/user_test.rb +3 -3
- data/vendor/plugins/file_column/CHANGELOG +64 -0
- data/vendor/plugins/file_column/README +54 -0
- data/vendor/plugins/file_column/Rakefile +36 -0
- data/vendor/plugins/file_column/TODO +6 -0
- data/vendor/plugins/file_column/init.rb +12 -0
- data/vendor/plugins/file_column/lib/file_column.rb +719 -0
- data/vendor/plugins/file_column/lib/file_column_helper.rb +145 -0
- data/vendor/plugins/file_column/lib/file_compat.rb +28 -0
- data/vendor/plugins/file_column/lib/magick_file_column.rb +188 -0
- data/vendor/plugins/file_column/lib/validations.rb +112 -0
- data/vendor/plugins/file_column/test/abstract_unit.rb +90 -0
- data/vendor/plugins/file_column/test/connection.rb +17 -0
- data/vendor/plugins/file_column/test/file_column_helper_test.rb +97 -0
- data/vendor/plugins/file_column/test/file_column_test.rb +630 -0
- data/vendor/plugins/file_column/test/fixtures/entry.rb +32 -0
- data/vendor/plugins/file_column/test/fixtures/invalid-image.jpg +1 -0
- data/vendor/plugins/file_column/test/fixtures/kerb.jpg +0 -0
- data/vendor/plugins/file_column/test/fixtures/mysql.sql +25 -0
- data/vendor/plugins/file_column/test/fixtures/schema.rb +10 -0
- data/vendor/plugins/file_column/test/fixtures/skanthak.png +0 -0
- data/vendor/plugins/file_column/test/magick_test.rb +251 -0
- data/vendor/plugins/file_column/test/magick_view_only_test.rb +21 -0
- data/vendor/plugins/guid/README.TXT +19 -0
- data/vendor/plugins/guid/init.rb +23 -0
- data/vendor/plugins/guid/lib/usesguid.rb +37 -0
- data/vendor/plugins/guid/lib/uuid22.rb +43 -0
- data/vendor/plugins/guid/lib/uuidtools.rb +565 -0
- metadata +83 -15
- data/db/ROOT/CV.txt +0 -166
- data/lib/file_column.rb +0 -263
- data/lib/file_column_helper.rb +0 -45
- /data/{lib → vendor/plugins/file_column/lib}/rails_file_column.rb +0 -0
@@ -0,0 +1,251 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/abstract_unit'
|
2
|
+
require 'RMagick'
|
3
|
+
require File.dirname(__FILE__) + '/fixtures/entry'
|
4
|
+
|
5
|
+
|
6
|
+
class AbstractRMagickTest < Test::Unit::TestCase
|
7
|
+
def teardown
|
8
|
+
FileUtils.rm_rf File.dirname(__FILE__)+"/public/entry/"
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_truth
|
12
|
+
assert true
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def read_image(path)
|
18
|
+
Magick::Image::read(path).first
|
19
|
+
end
|
20
|
+
|
21
|
+
def assert_max_image_size(img, s)
|
22
|
+
assert img.columns <= s, "img has #{img.columns} columns, expected: #{s}"
|
23
|
+
assert img.rows <= s, "img has #{img.rows} rows, expected: #{s}"
|
24
|
+
assert_equal s, [img.columns, img.rows].max
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class RMagickSimpleTest < AbstractRMagickTest
|
29
|
+
def setup
|
30
|
+
Entry.file_column :image, :magick => { :geometry => "100x100" }
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_simple_resize_without_save
|
34
|
+
e = Entry.new
|
35
|
+
e.image = upload("kerb.jpg")
|
36
|
+
|
37
|
+
img = read_image(e.image)
|
38
|
+
assert_max_image_size img, 100
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_simple_resize_with_save
|
42
|
+
e = Entry.new
|
43
|
+
e.image = upload("kerb.jpg")
|
44
|
+
assert e.save
|
45
|
+
e.reload
|
46
|
+
|
47
|
+
img = read_image(e.image)
|
48
|
+
assert_max_image_size img, 100
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_resize_on_saved_image
|
52
|
+
Entry.file_column :image, :magick => { :geometry => "100x100" }
|
53
|
+
|
54
|
+
e = Entry.new
|
55
|
+
e.image = upload("skanthak.png")
|
56
|
+
assert e.save
|
57
|
+
e.reload
|
58
|
+
old_path = e.image
|
59
|
+
|
60
|
+
e.image = upload("kerb.jpg")
|
61
|
+
assert e.save
|
62
|
+
assert "kerb.jpg", File.basename(e.image)
|
63
|
+
assert !File.exists?(old_path), "old image '#{old_path}' still exists"
|
64
|
+
|
65
|
+
img = read_image(e.image)
|
66
|
+
assert_max_image_size img, 100
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_invalid_image
|
70
|
+
e = Entry.new
|
71
|
+
assert_nothing_raised { e.image = upload("invalid-image.jpg") }
|
72
|
+
assert !e.valid?
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_serializable
|
76
|
+
e = Entry.new
|
77
|
+
e.image = upload("skanthak.png")
|
78
|
+
assert_nothing_raised {
|
79
|
+
flash = Marshal.dump(e)
|
80
|
+
e = Marshal.load(flash)
|
81
|
+
}
|
82
|
+
assert File.exists?(e.image)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_imagemagick_still_usable
|
86
|
+
e = Entry.new
|
87
|
+
assert_nothing_raised {
|
88
|
+
img = e.load_image_with_rmagick(file_path("skanthak.png"))
|
89
|
+
assert img.kind_of?(Magick::Image)
|
90
|
+
}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class RMagickVersionsTest < AbstractRMagickTest
|
95
|
+
def setup
|
96
|
+
Entry.file_column :image, :magick => {:geometry => "200x200",
|
97
|
+
:versions => {
|
98
|
+
:thumb => "50x50",
|
99
|
+
:medium => {:geometry => "100x100", :name => "100_100"},
|
100
|
+
:large => {:geometry => "150x150", :lazy => true}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
def test_should_create_thumb
|
107
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
108
|
+
|
109
|
+
assert File.exists?(e.image("thumb")), "thumb-nail not created"
|
110
|
+
|
111
|
+
assert_max_image_size read_image(e.image("thumb")), 50
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_version_name_can_be_different_from_key
|
115
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
116
|
+
|
117
|
+
assert File.exists?(e.image("100_100"))
|
118
|
+
assert !File.exists?(e.image("medium"))
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_should_not_create_lazy_versions
|
122
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
123
|
+
assert !File.exists?(e.image("large")), "lazy versions should not be created unless needed"
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_should_create_lazy_version_on_demand
|
127
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
128
|
+
|
129
|
+
e.send(:image_state).create_magick_version_if_needed(:large)
|
130
|
+
|
131
|
+
assert File.exists?(e.image("large")), "lazy version should be created on demand"
|
132
|
+
|
133
|
+
assert_max_image_size read_image(e.image("large")), 150
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_generated_name_should_not_change
|
137
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
138
|
+
|
139
|
+
name1 = e.send(:image_state).create_magick_version_if_needed("50x50")
|
140
|
+
name2 = e.send(:image_state).create_magick_version_if_needed("50x50")
|
141
|
+
name3 = e.send(:image_state).create_magick_version_if_needed(:geometry => "50x50")
|
142
|
+
assert_equal name1, name2, "hash value has changed"
|
143
|
+
assert_equal name1, name3, "hash value has changed"
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_should_create_version_with_string
|
147
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
148
|
+
|
149
|
+
name = e.send(:image_state).create_magick_version_if_needed("32x32")
|
150
|
+
|
151
|
+
assert File.exists?(e.image(name))
|
152
|
+
|
153
|
+
assert_max_image_size read_image(e.image(name)), 32
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_should_create_safe_auto_id
|
157
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
158
|
+
|
159
|
+
name = e.send(:image_state).create_magick_version_if_needed("32x32")
|
160
|
+
|
161
|
+
assert_match /^[a-zA-Z0-9]+$/, name
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
class RMagickCroppingTest < AbstractRMagickTest
|
166
|
+
def setup
|
167
|
+
Entry.file_column :image, :magick => {:geometry => "200x200",
|
168
|
+
:versions => {
|
169
|
+
:thumb => {:crop => "1:1", :geometry => "50x50"}
|
170
|
+
}
|
171
|
+
}
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_should_crop_image_on_upload
|
175
|
+
e = Entry.new("image" => upload("skanthak.png"))
|
176
|
+
|
177
|
+
img = read_image(e.image("thumb"))
|
178
|
+
|
179
|
+
assert_equal 50, img.rows
|
180
|
+
assert_equal 50, img.columns
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
184
|
+
|
185
|
+
class UrlForImageColumnTest < AbstractRMagickTest
|
186
|
+
include FileColumnHelper
|
187
|
+
|
188
|
+
def setup
|
189
|
+
Entry.file_column :image, :magick => {
|
190
|
+
:versions => {:thumb => "50x50"}
|
191
|
+
}
|
192
|
+
@request = RequestMock.new
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_should_use_version_on_symbol_option
|
196
|
+
e = Entry.new(:image => upload("skanthak.png"))
|
197
|
+
|
198
|
+
url = url_for_image_column(e, "image", :thumb)
|
199
|
+
assert_match %r{^/entry/image/tmp/.+/thumb/skanthak.png$}, url
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_should_use_string_as_size
|
203
|
+
e = Entry.new(:image => upload("skanthak.png"))
|
204
|
+
|
205
|
+
url = url_for_image_column(e, "image", "50x50")
|
206
|
+
|
207
|
+
assert_match %r{^/entry/image/tmp/.+/.+/skanthak.png$}, url
|
208
|
+
|
209
|
+
url =~ /\/([^\/]+)\/skanthak.png$/
|
210
|
+
dirname = $1
|
211
|
+
|
212
|
+
assert_max_image_size read_image(e.image(dirname)), 50
|
213
|
+
end
|
214
|
+
|
215
|
+
def test_should_accept_version_hash
|
216
|
+
e = Entry.new(:image => upload("skanthak.png"))
|
217
|
+
|
218
|
+
url = url_for_image_column(e, "image", :size => "50x50", :crop => "1:1", :name => "small")
|
219
|
+
|
220
|
+
assert_match %r{^/entry/image/tmp/.+/small/skanthak.png$}, url
|
221
|
+
|
222
|
+
img = read_image(e.image("small"))
|
223
|
+
assert_equal 50, img.rows
|
224
|
+
assert_equal 50, img.columns
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
class RMagickPermissionsTest < AbstractRMagickTest
|
229
|
+
def setup
|
230
|
+
Entry.file_column :image, :magick => {:geometry => "200x200",
|
231
|
+
:versions => {
|
232
|
+
:thumb => {:crop => "1:1", :geometry => "50x50"}
|
233
|
+
}
|
234
|
+
}, :permissions => 0616
|
235
|
+
end
|
236
|
+
|
237
|
+
def check_permissions(e)
|
238
|
+
assert_equal 0616, (File.stat(e.image).mode & 0777)
|
239
|
+
assert_equal 0616, (File.stat(e.image("thumb")).mode & 0777)
|
240
|
+
end
|
241
|
+
|
242
|
+
def test_permissions_with_rmagick
|
243
|
+
e = Entry.new(:image => upload("skanthak.png"))
|
244
|
+
|
245
|
+
check_permissions e
|
246
|
+
|
247
|
+
assert e.save
|
248
|
+
|
249
|
+
check_permissions e
|
250
|
+
end
|
251
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/abstract_unit'
|
2
|
+
require File.dirname(__FILE__) + '/fixtures/entry'
|
3
|
+
|
4
|
+
class RMagickViewOnlyTest < Test::Unit::TestCase
|
5
|
+
include FileColumnHelper
|
6
|
+
|
7
|
+
def setup
|
8
|
+
Entry.file_column :image
|
9
|
+
@request = RequestMock.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
FileUtils.rm_rf File.dirname(__FILE__)+"/public/entry/"
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_url_for_image_column_without_model_versions
|
17
|
+
e = Entry.new(:image => upload("skanthak.png"))
|
18
|
+
|
19
|
+
assert_nothing_raised { url_for_image_column e, "image", "50x50" }
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
This plugin for ActiveRecord makes the "ID" field into a URL-safe GUID
|
2
|
+
# It is a mashup by Andy Singleton <andy@assembla.com> that includes
|
3
|
+
# * the UUID class from Bob Aman.
|
4
|
+
# * the plugin skeleton from Demetrius Nunes
|
5
|
+
# * the 22 character URL-safe format from Andy Singleton
|
6
|
+
# You can get standard 36 char UUID formats instead
|
7
|
+
# TODO: Auto-detect a character ID field and use a GUID in this case (DRY principle)
|
8
|
+
#
|
9
|
+
# This library is free software; you can redistribute it and/or modify it
|
10
|
+
# under the terms of the MIT license.
|
11
|
+
#
|
12
|
+
# TO USE
|
13
|
+
# Install as a plugin in the rails directory vendor/plugin/guid
|
14
|
+
# define ID as char(22)
|
15
|
+
# call "usesguid" in ActiveRecord class declaration, like
|
16
|
+
# class Mymodel < ActiveRecord::Base
|
17
|
+
# usesguid
|
18
|
+
#
|
19
|
+
# if your ID field is not called "ID", call "usesguid :column =>'IdColumnName' "
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Copyright (c) 2005 Assembla, Inc.
|
2
|
+
#
|
3
|
+
# This plugin for ActiveRecord makes the "ID" field into a URL-safe GUID
|
4
|
+
# It is a mashup by Andy Singleton <andy@assembla.com> that includes
|
5
|
+
# * the UUID class from Bob Aman.
|
6
|
+
# * the plugin skeleton from Demetrius Nunes
|
7
|
+
# * the 22 character URL-safe format from Andy Singleton
|
8
|
+
# You can get standard 36 char UUID formats instead
|
9
|
+
# TODO: Auto-detect a character ID field and use a GUID in this case (DRY principle)
|
10
|
+
#
|
11
|
+
# This library is free software; you can redistribute it and/or modify it
|
12
|
+
# under the terms of the MIT license.
|
13
|
+
#
|
14
|
+
# TO USE
|
15
|
+
# Install as a plugin in the rails directory vendor/plugin/guid
|
16
|
+
# define ID as char(22)
|
17
|
+
# call "usesguid" in ActiveRecord class declaration, like
|
18
|
+
# class Mymodel < ActiveRecord::Base
|
19
|
+
# usesguid
|
20
|
+
#
|
21
|
+
# if your ID field is not called "ID", call "usesguid :column =>'IdColumnName' "
|
22
|
+
|
23
|
+
require 'usesguid'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# from Demetrio Nunes
|
2
|
+
# Modified by Andy Singleton to use different GUID generator
|
3
|
+
#
|
4
|
+
# MIT License
|
5
|
+
|
6
|
+
require 'uuid22'
|
7
|
+
|
8
|
+
module ActiveRecord
|
9
|
+
module Usesguid #:nodoc:
|
10
|
+
|
11
|
+
def self.append_features(base)
|
12
|
+
super
|
13
|
+
base.extend(ClassMethods)
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
|
19
|
+
def usesguid(options = {})
|
20
|
+
|
21
|
+
class_eval do
|
22
|
+
set_primary_key options[:column] if options[:column]
|
23
|
+
|
24
|
+
def after_initialize
|
25
|
+
self.id ||= UUID.timestamp_create().to_s22
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
ActiveRecord::Base.class_eval do
|
36
|
+
include ActiveRecord::Usesguid
|
37
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Copyright (c) 2005 Assembla, Inc.
|
2
|
+
# MIT License
|
3
|
+
|
4
|
+
require 'uuidtools'
|
5
|
+
|
6
|
+
class UUID
|
7
|
+
|
8
|
+
# Make an array of 64 URL-safe characters
|
9
|
+
@@chars64=('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a + ['-','_']
|
10
|
+
#return a 22 byte URL-safe string, encoded six bits at a time using 64 characters
|
11
|
+
def to_s22
|
12
|
+
integer=self.to_i
|
13
|
+
rval=''
|
14
|
+
22.times do
|
15
|
+
c=(integer & 0x3F)
|
16
|
+
rval+=@@chars64[c]
|
17
|
+
integer =integer >> 6
|
18
|
+
end
|
19
|
+
return rval.reverse
|
20
|
+
end
|
21
|
+
# Create a new UUID from a 22char string
|
22
|
+
def self.parse22(s)
|
23
|
+
# get the integer representation
|
24
|
+
integer=0
|
25
|
+
s.each_byte {|c|
|
26
|
+
integer = integer << 6
|
27
|
+
pos=@@chars64.index(c.chr)
|
28
|
+
integer+=pos
|
29
|
+
}
|
30
|
+
|
31
|
+
time_low = (integer >> 96) & 0xFFFFFFFF
|
32
|
+
time_mid = (integer >> 80) & 0xFFFF
|
33
|
+
time_hi_and_version = (integer >> 64) & 0xFFFF
|
34
|
+
clock_seq_hi_and_reserved = (integer >> 56) & 0xFF
|
35
|
+
clock_seq_low = (integer >> 48) & 0xFF
|
36
|
+
nodes = []
|
37
|
+
for i in 0..5 do
|
38
|
+
nodes << ((integer >> (40 - (i * 8))) & 0xFF)
|
39
|
+
end
|
40
|
+
return new(time_low, time_mid, time_hi_and_version,
|
41
|
+
clock_seq_hi_and_reserved, clock_seq_low, nodes)
|
42
|
+
end
|
43
|
+
end
|