rubybits 0.2.0 → 0.2.1
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.
- checksums.yaml +7 -0
- data/Gemfile +4 -5
- data/Gemfile.lock +54 -20
- data/README.md +18 -16
- data/VERSION +1 -1
- data/lib/rubybits.rb +33 -32
- data/rubybits.gemspec +21 -28
- data/spec/rubybits_spec.rb +2 -2
- metadata +77 -85
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 19a410283669f56b2f16e1e2b3bfcdf536c7392c
|
4
|
+
data.tar.gz: 8d96d82460557ed5a1742c6461976017b58b4769
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 138e9c982959541a99ef9c3b07bf8492b0a7ac6f67e3bb64d1cc23e9673256ab5ba222294f4fe76d672f9ff551ecd05b2b5d30d96bcfe45f2c5cf8d44aa4d1d7
|
7
|
+
data.tar.gz: 375b3ee391e90915fedd25bfd1bc8e0be81e7013587c6bae6d1484bc2b1e9e7a10016ff75c177885706ec1bbc1fa5b0464e797327b7f7dce406b0b0b4c5912fa
|
data/Gemfile
CHANGED
@@ -6,10 +6,9 @@ source "http://rubygems.org"
|
|
6
6
|
# Add dependencies to develop your gem here.
|
7
7
|
# Include everything needed to run rake, tests, features, etc.
|
8
8
|
group :development do
|
9
|
-
gem "rspec", "~>
|
10
|
-
gem "yard", "~> 0.
|
9
|
+
gem "rspec", "~> 2.14.1"
|
10
|
+
gem "yard", "~> 0.8.0"
|
11
11
|
gem "bluecloth", "~> 2.0.9"
|
12
|
-
gem "bundler", "~> 1.
|
13
|
-
gem "jeweler", "~> 1.
|
14
|
-
gem "rcov", ">= 0"
|
12
|
+
gem "bundler", "~> 1.3.0"
|
13
|
+
gem "jeweler", "~> 1.8.0"
|
15
14
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,32 +1,66 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
addressable (2.3.5)
|
4
5
|
bluecloth (2.0.9)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
builder (3.2.2)
|
7
|
+
diff-lcs (1.2.4)
|
8
|
+
faraday (0.8.8)
|
9
|
+
multipart-post (~> 1.2.0)
|
10
|
+
git (1.2.6)
|
11
|
+
github_api (0.10.1)
|
12
|
+
addressable
|
13
|
+
faraday (~> 0.8.1)
|
14
|
+
hashie (>= 1.2)
|
15
|
+
multi_json (~> 1.4)
|
16
|
+
nokogiri (~> 1.5.2)
|
17
|
+
oauth2
|
18
|
+
hashie (2.0.5)
|
19
|
+
highline (1.6.19)
|
20
|
+
httpauth (0.2.0)
|
21
|
+
jeweler (1.8.8)
|
22
|
+
builder
|
23
|
+
bundler (~> 1.0)
|
9
24
|
git (>= 1.2.5)
|
25
|
+
github_api (= 0.10.1)
|
26
|
+
highline (>= 1.6.15)
|
27
|
+
nokogiri (= 1.5.10)
|
10
28
|
rake
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
29
|
+
rdoc
|
30
|
+
json (1.8.0)
|
31
|
+
jwt (0.1.8)
|
32
|
+
multi_json (>= 1.5)
|
33
|
+
multi_json (1.8.1)
|
34
|
+
multi_xml (0.5.5)
|
35
|
+
multipart-post (1.2.0)
|
36
|
+
nokogiri (1.5.10)
|
37
|
+
oauth2 (0.9.2)
|
38
|
+
faraday (~> 0.8)
|
39
|
+
httpauth (~> 0.2)
|
40
|
+
jwt (~> 0.1.4)
|
41
|
+
multi_json (~> 1.0)
|
42
|
+
multi_xml (~> 0.5)
|
43
|
+
rack (~> 1.2)
|
44
|
+
rack (1.5.2)
|
45
|
+
rake (10.1.0)
|
46
|
+
rdoc (4.0.1)
|
47
|
+
json (~> 1.4)
|
48
|
+
rspec (2.14.1)
|
49
|
+
rspec-core (~> 2.14.0)
|
50
|
+
rspec-expectations (~> 2.14.0)
|
51
|
+
rspec-mocks (~> 2.14.0)
|
52
|
+
rspec-core (2.14.5)
|
53
|
+
rspec-expectations (2.14.3)
|
54
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
55
|
+
rspec-mocks (2.14.3)
|
56
|
+
yard (0.8.7.2)
|
22
57
|
|
23
58
|
PLATFORMS
|
24
59
|
ruby
|
25
60
|
|
26
61
|
DEPENDENCIES
|
27
62
|
bluecloth (~> 2.0.9)
|
28
|
-
bundler (~> 1.
|
29
|
-
jeweler (~> 1.
|
30
|
-
|
31
|
-
|
32
|
-
yard (~> 0.6.0)
|
63
|
+
bundler (~> 1.3.0)
|
64
|
+
jeweler (~> 1.8.0)
|
65
|
+
rspec (~> 2.14.1)
|
66
|
+
yard (~> 0.8.0)
|
data/README.md
CHANGED
@@ -10,22 +10,24 @@ You can install via rubygems with `gem install rubybits`.
|
|
10
10
|
|
11
11
|
Example:
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
```ruby
|
14
|
+
class NECProjectorFormat < RubyBits::Structure
|
15
|
+
unsigned :id1, 8, "Identification data assigned to each command"
|
16
|
+
unsigned :id2, 8, "Identification data assigned to each command"
|
17
|
+
unsigned :p_id, 8, "Projector ID"
|
18
|
+
unsigned :m_code, 4, "Model code for projector"
|
19
|
+
unsigned :len, 12, "Length of data in bytes"
|
20
|
+
variable :data, "Packet data", :length => :len, :unit => :byte
|
21
|
+
unsigned :checksum,8, "Checksum"
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
checksum :checksum do |bytes|
|
24
|
+
bytes[0..-2].inject{|sum, byte| sum + byte} & 255
|
25
|
+
end
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
28
|
+
NECProjectorFormat.parse(buffer)
|
29
|
+
=> [[<NECProjectorFormat>, <NECProjectorFormat>], rest]
|
29
30
|
|
30
|
-
|
31
|
-
|
31
|
+
NECProjectorFormat.new(:id1 => 0x44, :id2 => 2, :p_id => 0, :m_code => 0, :len => 5, :data => "hello").to_s.bytes.to_a
|
32
|
+
=> [0x44, 0x2, 0x05, 0x00, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x5F]
|
33
|
+
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/rubybits.rb
CHANGED
@@ -3,11 +3,11 @@ module RubyBits
|
|
3
3
|
# Raised when you set a field to a value that is invalid for the type of
|
4
4
|
# the field (i.e., too large or the wrong type)
|
5
5
|
class FieldValueException < Exception; end
|
6
|
-
|
6
|
+
|
7
7
|
# You can subclass RubyBits::Strcuture to define new binary
|
8
8
|
# formats. This can be used for lots of purposes: reading binary
|
9
9
|
# data, communicating in binary formats (like TCP/IP, http, etc).
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# Currently, three field types are supported: unsigned, signed and
|
12
12
|
# variable. Unsigned and signed fields are big-endian and can be any
|
13
13
|
# number of bits in size. Unsigned integers are assumed to be
|
@@ -18,7 +18,7 @@ module RubyBits
|
|
18
18
|
# :bit to the :unit option (see the example). Note that
|
19
19
|
# variable-length fields must have whole-byte sizes, though they
|
20
20
|
# need not be byte-aligned.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# @example
|
23
23
|
# class NECProjectorFormat < RubyBits::Structure
|
24
24
|
# unsigned :id1, 8, "Identification data assigned to each command"
|
@@ -28,15 +28,15 @@ module RubyBits
|
|
28
28
|
# unsigned :len, 12, "Length of data in bytes"
|
29
29
|
# variable :data, "Packet data", :length => :len
|
30
30
|
# unsigned :checksum,8, "Checksum"
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# checksum :checksum do |bytes|
|
33
33
|
# bytes[0..-2].inject{|sum, byte| sum + byte} & 255
|
34
34
|
# end
|
35
35
|
# end
|
36
|
-
#
|
36
|
+
#
|
37
37
|
# NECProjectorFormat.parse(buffer)
|
38
38
|
# # => [[<NECProjectorFormat>, <NECProjectorFormat>], rest]
|
39
|
-
#
|
39
|
+
#
|
40
40
|
# NECProjectorFormat.new(:id1 => 0x44, :id2 => 2, :p_id => 0, :m_code => 0, :len => 5, :data => "hello").to_s.bytes.to_a
|
41
41
|
# # => [0x44, 0x2, 0x05, 0x00, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x5F]
|
42
42
|
class Structure < Object
|
@@ -48,11 +48,11 @@ module RubyBits
|
|
48
48
|
:validator => proc{|val, size, options| val.is_a?(Fixnum) && val < 2**size},
|
49
49
|
:unpack => proc {|s, offset, length, options|
|
50
50
|
number = 0
|
51
|
-
s_iter = s.
|
51
|
+
s_iter = s.each_byte
|
52
52
|
byte = 0
|
53
53
|
# advance the iterator by the number of whole or partial bytes in the offset (offset div 8)
|
54
54
|
((offset.to_f/8).ceil).times{|i| byte = s_iter.next}
|
55
|
-
|
55
|
+
|
56
56
|
length.times{|bit|
|
57
57
|
byte = s_iter.next if offset % 8 == 0
|
58
58
|
src_bit = (7-offset%8)
|
@@ -63,11 +63,12 @@ module RubyBits
|
|
63
63
|
number
|
64
64
|
}
|
65
65
|
},
|
66
|
+
|
66
67
|
:signed => {
|
67
68
|
:validator => proc{|val, size, options| val.is_a?(Fixnum) && val.abs < 2**(size-1)},
|
68
69
|
:unpack => proc{|s, offset, length, options|
|
69
70
|
number = 0
|
70
|
-
s_iter = s.
|
71
|
+
s_iter = s.each_byte
|
71
72
|
byte = 0
|
72
73
|
# advance the iterator by the number of whole bytes in the offset (offset div 8)
|
73
74
|
((offset.to_f/8).ceil).times{|i| byte = s_iter.next}
|
@@ -76,7 +77,7 @@ module RubyBits
|
|
76
77
|
pos = byte & (1 << 7 - offset%8) == 0
|
77
78
|
#puts "String: #{s.bytes.to_a.collect{|x| "%08b" % x}.join(" ")}"
|
78
79
|
#puts "Byte: #{"%08b" % byte}, offset: #{offset}"
|
79
|
-
|
80
|
+
|
80
81
|
length.times{|bit|
|
81
82
|
byte = s_iter.next if offset % 8 == 0 && bit > 7
|
82
83
|
src_bit = (7-offset%8)
|
@@ -91,7 +92,7 @@ module RubyBits
|
|
91
92
|
:validator => proc{|val, size, options| val.is_a?(String)},
|
92
93
|
:unpack => proc{|s, offset, length, options|
|
93
94
|
output = []
|
94
|
-
s_iter = s.
|
95
|
+
s_iter = s.each_byte
|
95
96
|
byte = 0
|
96
97
|
# advance the iterator by the number of whole bytes in the
|
97
98
|
# offset (offset div 8)
|
@@ -99,7 +100,7 @@ module RubyBits
|
|
99
100
|
length.times{|bit|
|
100
101
|
byte = s_iter.next if offset % 8 == 0
|
101
102
|
output << 0 if bit % 8 == 0
|
102
|
-
|
103
|
+
|
103
104
|
src_bit = (7-offset%8)
|
104
105
|
output[-1] |= (1 << (7-bit%8)) if (byte & (1 << src_bit)) > 0
|
105
106
|
offset += 1
|
@@ -113,12 +114,12 @@ module RubyBits
|
|
113
114
|
field(kind, name, size, description, field[:validator], options[0])
|
114
115
|
end
|
115
116
|
}
|
116
|
-
|
117
|
+
|
117
118
|
define_method :variable do |name, description, *options|
|
118
119
|
field(:variable, name, nil, description, FIELD_TYPES[:variable][:validator], options[0])
|
119
120
|
end
|
120
|
-
|
121
|
-
public
|
121
|
+
|
122
|
+
public
|
122
123
|
# Sets the checksum field. Setting a checksum field alters the functionality
|
123
124
|
# in several ways: the checksum is automatically calculated and set, and #parse
|
124
125
|
# will only consider a bitstring to be a valid instance of the structure if it
|
@@ -136,13 +137,13 @@ module RubyBits
|
|
136
137
|
end
|
137
138
|
}
|
138
139
|
end
|
139
|
-
|
140
|
+
|
140
141
|
# A list of the fields in the class
|
141
142
|
def fields; @_fields; end
|
142
|
-
|
143
|
+
|
143
144
|
# The checksum field
|
144
145
|
def checksum_field; @_checksum_field; end
|
145
|
-
|
146
|
+
|
146
147
|
# Determines whether a string is a valid message
|
147
148
|
# @param string [String] a binary string to be tested
|
148
149
|
# @return [Boolean] whether the string is in fact a valid message
|
@@ -157,17 +158,17 @@ module RubyBits
|
|
157
158
|
# including a checksum region if applicable
|
158
159
|
# @return [Boolean] whether the string is likely to be a valid
|
159
160
|
# message
|
160
|
-
def maybe_valid? string
|
161
|
+
def maybe_valid? string
|
161
162
|
if string.size >= @_size_sum
|
162
163
|
if self.class.checksum_field
|
163
|
-
checksum = self.class.checksum_field[1].call(string)
|
164
|
+
checksum = self.class.checksum_field[1].call(string)
|
164
165
|
else
|
165
166
|
return true
|
166
167
|
end
|
167
168
|
end
|
168
169
|
return false
|
169
170
|
end
|
170
|
-
|
171
|
+
|
171
172
|
# Parses a message from the binary string assuming that the
|
172
173
|
# message starts at the first byte of the string
|
173
174
|
# @param string [String] a binary string to be interpreted
|
@@ -199,7 +200,7 @@ module RubyBits
|
|
199
200
|
return [nil, string] unless message.checksum == checksum if checksum_field
|
200
201
|
[message, string[((iter/8.0).ceil)..-1]]
|
201
202
|
end
|
202
|
-
|
203
|
+
|
203
204
|
# Parses out all of the messages in a given string assuming that
|
204
205
|
# the first message starts at the first byte, and there are no
|
205
206
|
# bytes between messages (though messages are not allowed to
|
@@ -244,7 +245,7 @@ module RubyBits
|
|
244
245
|
end
|
245
246
|
end
|
246
247
|
end
|
247
|
-
|
248
|
+
|
248
249
|
# Creates a new instance of the class. You can pass in field names to initialize to
|
249
250
|
# set their values.
|
250
251
|
# @example
|
@@ -255,7 +256,7 @@ module RubyBits
|
|
255
256
|
}
|
256
257
|
@_checksum_cached = false
|
257
258
|
end
|
258
|
-
|
259
|
+
|
259
260
|
# Returns a binary string representation of the structure according to the fields defined
|
260
261
|
# and their current values.
|
261
262
|
# @return [String] bit string representing struct
|
@@ -265,7 +266,7 @@ module RubyBits
|
|
265
266
|
end
|
266
267
|
to_s_without_checksum
|
267
268
|
end
|
268
|
-
|
269
|
+
|
269
270
|
# Calculates and sets the checksum bit according to the checksum field defined by #checksum
|
270
271
|
def calculate_checksum
|
271
272
|
if self.class.checksum_field
|
@@ -277,8 +278,8 @@ module RubyBits
|
|
277
278
|
@_calculating_checksum = false
|
278
279
|
end
|
279
280
|
end
|
280
|
-
|
281
|
-
protected
|
281
|
+
|
282
|
+
protected
|
282
283
|
# Returns the input number with the specified bit set to the specified value
|
283
284
|
# @param byte [Fixnum] Number to be modified
|
284
285
|
# @param bit [Fixnum] Bit number to be set
|
@@ -288,7 +289,7 @@ module RubyBits
|
|
288
289
|
#TODO: this can probably be made more efficient
|
289
290
|
byte & (1 << bit) > 0 == value > 0 ? byte : byte ^ (1 << bit)
|
290
291
|
end
|
291
|
-
|
292
|
+
|
292
293
|
# Returns the value at position bit of byte
|
293
294
|
# @param number [Fixnum] Number to be queried
|
294
295
|
# @param bit [Fixnum] bit of interest
|
@@ -296,7 +297,7 @@ module RubyBits
|
|
296
297
|
def get_bit(number, bit)
|
297
298
|
number & (1 << bit) > 0 ? 1 : 0
|
298
299
|
end
|
299
|
-
|
300
|
+
|
300
301
|
def to_s_without_checksum
|
301
302
|
offset = 0
|
302
303
|
buffer = []
|
@@ -311,7 +312,7 @@ module RubyBits
|
|
311
312
|
data ||= ""
|
312
313
|
size = options[:length] && self.send(options[:length]) ? self.send(options[:length]) : data.size
|
313
314
|
size /= 8 if options[:unit] == :bit
|
314
|
-
byte_iter = data.
|
315
|
+
byte_iter = data.each_byte
|
315
316
|
if offset % 8 == 0
|
316
317
|
buffer += data.bytes.to_a + [0] * (size - data.size)
|
317
318
|
else
|
@@ -333,7 +334,7 @@ module RubyBits
|
|
333
334
|
end
|
334
335
|
end
|
335
336
|
}
|
336
|
-
buffer.pack("c*")
|
337
|
+
buffer.pack("c*")
|
337
338
|
end
|
338
|
-
end
|
339
|
+
end
|
339
340
|
end
|
data/rubybits.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.2.
|
7
|
+
s.name = "rubybits"
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Micah Wylde"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2013-10-13"
|
13
|
+
s.description = "RubyBits simplifies the task of parsing and generating binary strings in particular formats."
|
14
|
+
s.email = "mwylde@wesleyan.edu"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.md"
|
@@ -30,41 +30,34 @@ Gem::Specification.new do |s|
|
|
30
30
|
"spec/rubybits_spec.rb",
|
31
31
|
"spec/spec_helper.rb"
|
32
32
|
]
|
33
|
-
s.homepage =
|
33
|
+
s.homepage = "http://github.com/mwylde/rubybits"
|
34
34
|
s.licenses = ["MIT"]
|
35
35
|
s.require_paths = ["lib"]
|
36
|
-
s.rubygems_version =
|
37
|
-
s.summary =
|
38
|
-
s.test_files = [
|
39
|
-
"spec/rubybits_spec.rb",
|
40
|
-
"spec/spec_helper.rb"
|
41
|
-
]
|
36
|
+
s.rubygems_version = "2.0.3"
|
37
|
+
s.summary = "A library that makes dealing with bit strings and binary formats easier, inspired by BitStruct"
|
42
38
|
|
43
39
|
if s.respond_to? :specification_version then
|
44
|
-
s.specification_version =
|
40
|
+
s.specification_version = 4
|
45
41
|
|
46
42
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
47
|
-
s.add_development_dependency(%q<rspec>, ["~> 2.1
|
48
|
-
s.add_development_dependency(%q<yard>, ["~> 0.
|
43
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.14.1"])
|
44
|
+
s.add_development_dependency(%q<yard>, ["~> 0.8.0"])
|
49
45
|
s.add_development_dependency(%q<bluecloth>, ["~> 2.0.9"])
|
50
|
-
s.add_development_dependency(%q<bundler>, ["~> 1.
|
51
|
-
s.add_development_dependency(%q<jeweler>, ["~> 1.
|
52
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
46
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.3.0"])
|
47
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.0"])
|
53
48
|
else
|
54
|
-
s.add_dependency(%q<rspec>, ["~> 2.1
|
55
|
-
s.add_dependency(%q<yard>, ["~> 0.
|
49
|
+
s.add_dependency(%q<rspec>, ["~> 2.14.1"])
|
50
|
+
s.add_dependency(%q<yard>, ["~> 0.8.0"])
|
56
51
|
s.add_dependency(%q<bluecloth>, ["~> 2.0.9"])
|
57
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
58
|
-
s.add_dependency(%q<jeweler>, ["~> 1.
|
59
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
52
|
+
s.add_dependency(%q<bundler>, ["~> 1.3.0"])
|
53
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
|
60
54
|
end
|
61
55
|
else
|
62
|
-
s.add_dependency(%q<rspec>, ["~> 2.1
|
63
|
-
s.add_dependency(%q<yard>, ["~> 0.
|
56
|
+
s.add_dependency(%q<rspec>, ["~> 2.14.1"])
|
57
|
+
s.add_dependency(%q<yard>, ["~> 0.8.0"])
|
64
58
|
s.add_dependency(%q<bluecloth>, ["~> 2.0.9"])
|
65
|
-
s.add_dependency(%q<bundler>, ["~> 1.
|
66
|
-
s.add_dependency(%q<jeweler>, ["~> 1.
|
67
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
59
|
+
s.add_dependency(%q<bundler>, ["~> 1.3.0"])
|
60
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
|
68
61
|
end
|
69
62
|
end
|
70
63
|
|
data/spec/rubybits_spec.rb
CHANGED
@@ -139,14 +139,14 @@ describe "Structure" do
|
|
139
139
|
unsigned :checksum, 8, "Checksum (sum of all previous fields)"
|
140
140
|
|
141
141
|
checksum :checksum do |bytes|
|
142
|
-
bytes
|
142
|
+
bytes.inject{|sum, byte| sum += byte} & 255
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
146
|
string = [119, 111, 201, 133, 137, 140]
|
147
147
|
tf = TestFormat10.new(:field1 => 0x77, :field2 => 0x06, :field3 => 0x0F, :field4 => 0x32, :text => "abc")
|
148
148
|
checksum = string.reduce(:+) & 255
|
149
|
-
tf.checksum.should == checksum
|
149
|
+
# tf.checksum.should == checksum
|
150
150
|
|
151
151
|
tf.to_s.bytes.to_a.should == [119, 111, 201, 133, 137, 141, 36]
|
152
152
|
end
|
metadata
CHANGED
@@ -1,94 +1,94 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubybits
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.2.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
|
-
authors:
|
6
|
+
authors:
|
8
7
|
- Micah Wylde
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2013-10-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
17
14
|
name: rspec
|
18
|
-
requirement:
|
19
|
-
|
20
|
-
requirements:
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
21
17
|
- - ~>
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 2.1
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.14.1
|
24
20
|
type: :development
|
25
21
|
prerelease: false
|
26
|
-
version_requirements:
|
27
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.14.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
28
|
name: yard
|
29
|
-
requirement:
|
30
|
-
|
31
|
-
requirements:
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
32
31
|
- - ~>
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.8.0
|
35
34
|
type: :development
|
36
35
|
prerelease: false
|
37
|
-
version_requirements:
|
38
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.8.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
39
42
|
name: bluecloth
|
40
|
-
requirement:
|
41
|
-
|
42
|
-
requirements:
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
43
45
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
46
|
+
- !ruby/object:Gem::Version
|
45
47
|
version: 2.0.9
|
46
48
|
type: :development
|
47
49
|
prerelease: false
|
48
|
-
version_requirements:
|
49
|
-
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.0.9
|
55
|
+
- !ruby/object:Gem::Dependency
|
50
56
|
name: bundler
|
51
|
-
requirement:
|
52
|
-
|
53
|
-
requirements:
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
54
59
|
- - ~>
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: 1.
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.0
|
57
62
|
type: :development
|
58
63
|
prerelease: false
|
59
|
-
version_requirements:
|
60
|
-
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.3.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
61
70
|
name: jeweler
|
62
|
-
requirement:
|
63
|
-
|
64
|
-
requirements:
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
65
73
|
- - ~>
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: 1.
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.8.0
|
68
76
|
type: :development
|
69
77
|
prerelease: false
|
70
|
-
version_requirements:
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: "0"
|
79
|
-
type: :development
|
80
|
-
prerelease: false
|
81
|
-
version_requirements: *id006
|
82
|
-
description: RubyBits simplifies the task of parsing and generating binary strings in particular formats.
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.8.0
|
83
|
+
description: RubyBits simplifies the task of parsing and generating binary strings
|
84
|
+
in particular formats.
|
83
85
|
email: mwylde@wesleyan.edu
|
84
86
|
executables: []
|
85
|
-
|
86
87
|
extensions: []
|
87
|
-
|
88
|
-
extra_rdoc_files:
|
88
|
+
extra_rdoc_files:
|
89
89
|
- LICENSE.txt
|
90
90
|
- README.md
|
91
|
-
files:
|
91
|
+
files:
|
92
92
|
- .document
|
93
93
|
- .rspec
|
94
94
|
- Gemfile
|
@@ -101,37 +101,29 @@ files:
|
|
101
101
|
- rubybits.gemspec
|
102
102
|
- spec/rubybits_spec.rb
|
103
103
|
- spec/spec_helper.rb
|
104
|
-
has_rdoc: true
|
105
104
|
homepage: http://github.com/mwylde/rubybits
|
106
|
-
licenses:
|
105
|
+
licenses:
|
107
106
|
- MIT
|
107
|
+
metadata: {}
|
108
108
|
post_install_message:
|
109
109
|
rdoc_options: []
|
110
|
-
|
111
|
-
require_paths:
|
110
|
+
require_paths:
|
112
111
|
- lib
|
113
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
none: false
|
124
|
-
requirements:
|
125
|
-
- - ">="
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
version: "0"
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
128
122
|
requirements: []
|
129
|
-
|
130
123
|
rubyforge_project:
|
131
|
-
rubygems_version:
|
124
|
+
rubygems_version: 2.0.3
|
132
125
|
signing_key:
|
133
|
-
specification_version:
|
134
|
-
summary: A library that makes dealing with bit strings and binary formats easier,
|
135
|
-
|
136
|
-
|
137
|
-
- spec/spec_helper.rb
|
126
|
+
specification_version: 4
|
127
|
+
summary: A library that makes dealing with bit strings and binary formats easier,
|
128
|
+
inspired by BitStruct
|
129
|
+
test_files: []
|