origen 0.7.5 → 0.7.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/version.rb +1 -1
- data/lib/c99/nvm.rb +5 -0
- data/lib/origen.rb +10 -1
- data/lib/origen/application/lsf_manager.rb +3 -0
- data/lib/origen/commands/web.rb +4 -0
- data/lib/origen/generator/compiler.rb +18 -5
- data/lib/origen/generator/renderer.rb +3 -1
- data/lib/origen/global_methods.rb +5 -1
- data/lib/origen/registers.rb +3 -0
- data/lib/origen/registers/bit_collection.rb +1 -1
- data/lib/origen/registers/reg.rb +89 -67
- data/lib/origen/specs.rb +12 -1
- data/templates/nanoc/lib/search_filter.rb +5 -2
- data/templates/nanoc_dynamic/content/search.js.erb +16 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 273cd4ec500be111fe541e1bd647d1d4a5d33116
|
4
|
+
data.tar.gz: 8aa30d894b3822c2b7475bdb6c87c94a75107e4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ff01e3074e12fb22bfe92f41fd9f740436978708c583c6a05d3cbdd7004e80d82ff1ad73e6157ef7f996df25a07799798f98fb8b855f53b8676184178b6c39e
|
7
|
+
data.tar.gz: bff1eb0b296d486b59232cf5d3a3ae6cefaf537ffcacfa903bd6a945a5f3b6c2e0d6206b648c4c8acebdaf86e4e5c05114450cfba78ccdd93b442d41416bd004
|
data/config/version.rb
CHANGED
data/lib/c99/nvm.rb
CHANGED
data/lib/origen.rb
CHANGED
@@ -456,7 +456,16 @@ unless defined? RGen::ORIGENTRANSITION
|
|
456
456
|
|
457
457
|
# Compile the given file and return the result as a string
|
458
458
|
def compile(file, options = {})
|
459
|
-
|
459
|
+
# This has to operate on a new instance so that helper methods can use the inline
|
460
|
+
# compiler within an isolated context
|
461
|
+
c = Origen::Generator::Compiler.new
|
462
|
+
# It needs to be placed on the stack so that the global render method references
|
463
|
+
# the correct compiler instance
|
464
|
+
$_compiler_stack ||= []
|
465
|
+
$_compiler_stack << c
|
466
|
+
r = c.compile_inline(file, options)
|
467
|
+
$_compiler_stack.pop
|
468
|
+
r
|
460
469
|
end
|
461
470
|
|
462
471
|
def interfaces
|
data/lib/origen/commands/web.rb
CHANGED
@@ -140,6 +140,7 @@ The following options are available:
|
|
140
140
|
else
|
141
141
|
Origen.set_development_mode
|
142
142
|
end
|
143
|
+
options[:files] = ARGV.dup
|
143
144
|
if ARGV.empty?
|
144
145
|
_build_web_dir
|
145
146
|
Dir.chdir Origen.root do
|
@@ -152,6 +153,9 @@ The following options are available:
|
|
152
153
|
Origen.app.listeners_for(:after_web_compile).each do |listener|
|
153
154
|
listener.after_web_compile(options)
|
154
155
|
end
|
156
|
+
Origen.app.listeners_for(:after_web_site_compile).each do |listener|
|
157
|
+
listener.after_web_site_compile(options)
|
158
|
+
end
|
155
159
|
end
|
156
160
|
|
157
161
|
else
|
@@ -20,6 +20,8 @@ module Origen
|
|
20
20
|
# it as a string to the caller (i.e. without creating an output file)
|
21
21
|
#
|
22
22
|
# It expects an absolute path to a single template file as the file argument.
|
23
|
+
#
|
24
|
+
# @api private
|
23
25
|
def compile_inline(file, options = {})
|
24
26
|
initial_options = options.merge({})
|
25
27
|
options = {
|
@@ -28,7 +30,9 @@ module Origen
|
|
28
30
|
collect_stats: false,
|
29
31
|
initial_options: initial_options
|
30
32
|
}.merge(options)
|
31
|
-
|
33
|
+
@scope = options[:scope]
|
34
|
+
file = Pathname.new(file) unless options[:string]
|
35
|
+
run_erb(file, options).strip
|
32
36
|
end
|
33
37
|
|
34
38
|
# Compile all files found under the source directory, non-erb files will be copied
|
@@ -39,6 +43,7 @@ module Origen
|
|
39
43
|
sub_template: false,
|
40
44
|
collect_stats: true
|
41
45
|
}.merge(options)
|
46
|
+
@scope = options[:scope]
|
42
47
|
# Doing here so the output_directory (requiring target load) doesn't get hit if
|
43
48
|
# it is already defined
|
44
49
|
options[:output_directory] ||= output_directory
|
@@ -140,10 +145,18 @@ module Origen
|
|
140
145
|
options[:file] = file
|
141
146
|
options[:top_level_file] = current_file
|
142
147
|
b = _get_binding(opts, &block)
|
148
|
+
if opts[:string]
|
149
|
+
content = file
|
150
|
+
@current_buffer = '@_string_template'
|
151
|
+
buffer = @current_buffer
|
152
|
+
else
|
153
|
+
content = File.read(file.to_s)
|
154
|
+
buffer = buffer_name_for(file)
|
155
|
+
end
|
143
156
|
if block_given?
|
144
|
-
content = ERB.new(
|
157
|
+
content = ERB.new(content, 0, '%<>', buffer).result(b)
|
145
158
|
else
|
146
|
-
content = ERB.new(
|
159
|
+
content = ERB.new(content, 0, Origen.config.erb_trim_mode, buffer).result(b)
|
147
160
|
end
|
148
161
|
insert(content)
|
149
162
|
end
|
@@ -172,11 +185,11 @@ module Origen
|
|
172
185
|
end
|
173
186
|
|
174
187
|
def current_buffer
|
175
|
-
instance_variable_get(@current_buffer || '@_anonymous')
|
188
|
+
(@scope || self).instance_variable_get(@current_buffer || '@_anonymous')
|
176
189
|
end
|
177
190
|
|
178
191
|
def current_buffer=(text)
|
179
|
-
instance_variable_set(@current_buffer || '@_anonymous', text)
|
192
|
+
(@scope || self).instance_variable_set(@current_buffer || '@_anonymous', text)
|
180
193
|
end
|
181
194
|
|
182
195
|
# Returns the ERB buffer name for the given file, something like "@my_file_name"
|
@@ -4,6 +4,7 @@ module Origen
|
|
4
4
|
# and source files
|
5
5
|
module Renderer
|
6
6
|
def render(file, options = {}, &block)
|
7
|
+
fail 'File argument is nil' unless file
|
7
8
|
file = Origen.file_handler.clean_path_to_sub_template(file)
|
8
9
|
current_pipeline << { file: file, options: options,
|
9
10
|
placeholder: placeholder, block: block,
|
@@ -45,7 +46,8 @@ module Origen
|
|
45
46
|
self.current_buffer = ''
|
46
47
|
output = compile(current[:file],
|
47
48
|
sub_template: true,
|
48
|
-
block: current[:block]
|
49
|
+
block: current[:block],
|
50
|
+
scope: @scope
|
49
51
|
)
|
50
52
|
if current[:indent] && current[:indent] > 0
|
51
53
|
indent = ' ' * current[:indent]
|
@@ -31,7 +31,11 @@ module Origen
|
|
31
31
|
|
32
32
|
# Render an ERB template
|
33
33
|
def render(*args, &block)
|
34
|
-
|
34
|
+
if $_compiler_stack && $_compiler_stack.last
|
35
|
+
$_compiler_stack.last.render(*args, &block)
|
36
|
+
else
|
37
|
+
Origen.generator.compiler.render(*args, &block)
|
38
|
+
end
|
35
39
|
end
|
36
40
|
|
37
41
|
def dut
|
data/lib/origen/registers.rb
CHANGED
@@ -296,6 +296,9 @@ module Origen
|
|
296
296
|
#
|
297
297
|
# Can be called on any object to add a register to it
|
298
298
|
def add_reg(id, address, size = nil, bit_info = {}, &_block)
|
299
|
+
if address.is_a?(Hash)
|
300
|
+
fail 'add_reg requires the address to be supplied as the 2nd argument, e.g. add_reg :my_reg, 0x1000'
|
301
|
+
end
|
299
302
|
size, bit_info = nil, size if size.is_a?(Hash)
|
300
303
|
size ||= bit_info.delete(:size) || 32
|
301
304
|
description = bit_info.delete(:description)
|
data/lib/origen/registers/reg.rb
CHANGED
@@ -120,19 +120,30 @@ module Origen
|
|
120
120
|
def inspect
|
121
121
|
bit_width = 13
|
122
122
|
desc = ["\n0x%X - :#{name}" % address]
|
123
|
-
|
123
|
+
r = size % 8
|
124
|
+
if r == 0
|
125
|
+
desc << (' ' + ('=' * (bit_width + 1) * 8)).chop
|
126
|
+
else
|
127
|
+
desc << (' ' + (' ' * (bit_width + 1) * (8 - r)) + ('=' * (bit_width + 1) * r)).chop
|
128
|
+
end
|
124
129
|
|
125
130
|
# "<#{self.class}: #{self.name}>"
|
126
|
-
(size / 8).
|
131
|
+
num_bytes = (size / 8.0).ceil
|
132
|
+
num_bytes.times do |byte_index|
|
127
133
|
# Need to add support for little endian regs here?
|
128
|
-
byte_number =
|
129
|
-
max_bit =
|
134
|
+
byte_number = num_bytes - byte_index
|
135
|
+
max_bit = (byte_number * 8) - 1
|
130
136
|
min_bit = max_bit - 8 + 1
|
131
137
|
|
132
|
-
line = ' '
|
133
138
|
# BIT INDEX ROW
|
139
|
+
line = ' '
|
134
140
|
8.times do |i|
|
135
|
-
|
141
|
+
bit_num = (byte_number * 8) - i - 1
|
142
|
+
if bit_num > size - 1
|
143
|
+
line << ' ' + ''.center(bit_width)
|
144
|
+
else
|
145
|
+
line << '|' + "#{bit_num}".center(bit_width)
|
146
|
+
end
|
136
147
|
end
|
137
148
|
line += '|'
|
138
149
|
desc << line
|
@@ -141,6 +152,12 @@ module Origen
|
|
141
152
|
line = ' '
|
142
153
|
named_bits include_spacers: true do |name, bit, bitcounter|
|
143
154
|
if _bit_in_range?(bit, max_bit, min_bit)
|
155
|
+
if max_bit > (size - 1)
|
156
|
+
(max_bit - (size - 1)).times do
|
157
|
+
line << ' ' * (bit_width + 1)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
144
161
|
if bit.size > 1
|
145
162
|
|
146
163
|
if name
|
@@ -179,61 +196,16 @@ module Origen
|
|
179
196
|
line += '|'
|
180
197
|
desc << line
|
181
198
|
|
182
|
-
## BIT ACCESS ROW
|
183
|
-
# line = "Access "
|
184
|
-
# self.named_bits :include_spacers => true do |name, bit|
|
185
|
-
# if _bit_in_range?(bit, max_bit, min_bit)
|
186
|
-
# if bit.size > 1
|
187
|
-
# if name
|
188
|
-
# access = _bit_rw(bit)
|
189
|
-
# bit_span = _num_bits_in_range(bit, max_bit, min_bit)
|
190
|
-
# width = bit_width * bit_span
|
191
|
-
# line << "|" + access.center(width + bit_span - 1)
|
192
|
-
# else
|
193
|
-
# bit.shift_out_left do |bit|
|
194
|
-
# if _index_in_range?(bit.position, max_bit, min_bit)
|
195
|
-
# line << "|" + "".center(bit_width)
|
196
|
-
# end
|
197
|
-
# end
|
198
|
-
# end
|
199
|
-
# else
|
200
|
-
# access = _bit_rw(bit)
|
201
|
-
# line << "|" + access.center(bit_width)
|
202
|
-
# end
|
203
|
-
# end
|
204
|
-
# end
|
205
|
-
# line += "|"
|
206
|
-
# desc << line
|
207
|
-
|
208
|
-
## BIT RESET ROW
|
209
|
-
# line = "Reset "
|
210
|
-
# self.named_bits :include_spacers => true do |name, bit|
|
211
|
-
# if _bit_in_range?(bit, max_bit, min_bit)
|
212
|
-
# if bit.size > 1
|
213
|
-
# if name
|
214
|
-
# value = "0x%X" % bit.reset_val[_max_bit_in_range(bit, max_bit, min_bit).._min_bit_in_range(bit, max_bit, min_bit)]
|
215
|
-
# bit_span = _num_bits_in_range(bit, max_bit, min_bit)
|
216
|
-
# width = bit_width * bit_span
|
217
|
-
# line << "|" + value.center(width + bit_span - 1)
|
218
|
-
# else
|
219
|
-
# bit.shift_out_left do |bit|
|
220
|
-
# if _index_in_range?(bit.position, max_bit, min_bit)
|
221
|
-
# line << "|" + "".center(bit_width)
|
222
|
-
# end
|
223
|
-
# end
|
224
|
-
# end
|
225
|
-
# else
|
226
|
-
# line << "|" + "#{bit.reset_val}".center(bit_width)
|
227
|
-
# end
|
228
|
-
# end
|
229
|
-
# end
|
230
|
-
# line += "|"
|
231
|
-
# desc << line
|
232
|
-
|
233
199
|
# BIT STATE ROW
|
234
200
|
line = ' '
|
235
201
|
named_bits include_spacers: true do |name, bit, _bitcounter|
|
236
202
|
if _bit_in_range?(bit, max_bit, min_bit)
|
203
|
+
if max_bit > (size - 1)
|
204
|
+
(max_bit - (size - 1)).times do
|
205
|
+
line << ' ' * (bit_width + 1)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
237
209
|
if bit.size > 1
|
238
210
|
if name
|
239
211
|
if bit.has_known_value?
|
@@ -278,7 +250,16 @@ module Origen
|
|
278
250
|
line += '|'
|
279
251
|
desc << line
|
280
252
|
|
281
|
-
|
253
|
+
if size >= 8
|
254
|
+
r = size % 8
|
255
|
+
if byte_index == 0 && r != 0
|
256
|
+
desc << (' ' + ('=' * (bit_width + 1) * (8 - r)).chop + ' ' + ('-' * (bit_width + 1) * r)).chop
|
257
|
+
else
|
258
|
+
desc << (' ' + ('-' * (bit_width + 1) * 8)).chop
|
259
|
+
end
|
260
|
+
else
|
261
|
+
desc << (' ' + (' ' * (bit_width + 1) * (8 - size)) + ('-' * (bit_width + 1) * size)).chop
|
262
|
+
end
|
282
263
|
end
|
283
264
|
desc.join("\n")
|
284
265
|
end
|
@@ -394,8 +375,9 @@ module Origen
|
|
394
375
|
File.readlines(define_file).each do |line|
|
395
376
|
if line =~ /^\s*#(.*)/
|
396
377
|
desc << Regexp.last_match[1].strip
|
397
|
-
|
398
|
-
|
378
|
+
# http://rubular.com/r/D8lg2P5kK1 http://rubular.com/r/XP4ydPV8Fd
|
379
|
+
elsif line =~ /^\s*reg\(?\s*[:"'](\w+)["']?\s*,.*\sdo/ || line =~ /^\s*add_reg\(?\s*[:"'](\w+)["']?\s*,.*/
|
380
|
+
@current_reg_name = Regexp.last_match[1].to_sym
|
399
381
|
description_lookup[define_file] ||= {}
|
400
382
|
description_lookup[define_file][@current_reg_name] ||= {}
|
401
383
|
description_lookup[define_file][@current_reg_name][:_reg] = desc.dup
|
@@ -484,6 +466,7 @@ module Origen
|
|
484
466
|
options = {
|
485
467
|
include_spacers: false
|
486
468
|
}.merge(options)
|
469
|
+
result = []
|
487
470
|
|
488
471
|
# test if @lookup has any values stored as an array
|
489
472
|
# if so it means there is a split group of bits
|
@@ -500,20 +483,38 @@ module Origen
|
|
500
483
|
pos = details[:bits] + details[:pos]
|
501
484
|
if options[:include_spacers] && (pos != current_pos)
|
502
485
|
collection = BitCollection.dummy(self, nil, size: current_pos - pos, pos: pos)
|
503
|
-
|
486
|
+
unless collection.size == 0
|
487
|
+
if block_given?
|
488
|
+
yield nil, collection
|
489
|
+
else
|
490
|
+
result << [nil, collection]
|
491
|
+
end
|
492
|
+
end
|
504
493
|
end
|
505
494
|
collection = BitCollection.new(self, name)
|
506
495
|
details[:bits].times do |i|
|
507
496
|
collection << @bits[details[:pos] + i]
|
508
497
|
end
|
509
|
-
|
498
|
+
unless collection.size == 0
|
499
|
+
if block_given?
|
500
|
+
yield name, collection
|
501
|
+
else
|
502
|
+
result << [name, collection]
|
503
|
+
end
|
504
|
+
end
|
510
505
|
current_pos = details[:pos]
|
511
506
|
end
|
512
507
|
if options[:include_spacers] && current_pos != 0
|
513
508
|
collection = BitCollection.dummy(self, nil, size: current_pos, pos: 0)
|
514
|
-
|
509
|
+
unless collection.size == 0
|
510
|
+
if block_given?
|
511
|
+
yield nil, collection
|
512
|
+
else
|
513
|
+
result << [nil, collection]
|
514
|
+
end
|
515
|
+
end
|
515
516
|
end
|
516
|
-
elsif split_bits == true # if there are split bits, need to convert all
|
517
|
+
elsif split_bits == true # if there are split bits, need to convert all register bit values to array elements to allow sorting
|
517
518
|
|
518
519
|
# if the register has bits split up across it, then store the bits in order of decreasing reg position
|
519
520
|
# but first, stuff all the bits in a simple array, as single bits, or ranges of bits
|
@@ -569,20 +570,41 @@ module Origen
|
|
569
570
|
pos = details[:bits] + details[:pos]
|
570
571
|
if options[:include_spacers] && (pos != current_pos)
|
571
572
|
collection = BitCollection.dummy(self, nil, size: current_pos - pos, pos: pos)
|
572
|
-
|
573
|
+
unless collection.size == 0
|
574
|
+
if block_given?
|
575
|
+
yield nil, collection, bitcounter
|
576
|
+
else
|
577
|
+
result << [nil, collection, bitcounter]
|
578
|
+
end
|
579
|
+
end
|
573
580
|
end
|
574
581
|
collection = BitCollection.new(self, name)
|
575
582
|
details[:bits].times do |i|
|
576
583
|
collection << @bits[details[:pos] + i]
|
577
584
|
end
|
578
|
-
|
585
|
+
unless collection.size == 0
|
586
|
+
if block_given?
|
587
|
+
yield name, collection, bitcounter
|
588
|
+
else
|
589
|
+
result << [name, collection, bitcounter]
|
590
|
+
end
|
591
|
+
end
|
579
592
|
current_pos = details[:pos]
|
580
593
|
end
|
581
594
|
if options[:include_spacers] && current_pos != 0
|
582
595
|
collection = BitCollection.dummy(self, nil, size: current_pos, pos: 0)
|
583
|
-
|
596
|
+
unless collection.size == 0
|
597
|
+
if block_given?
|
598
|
+
yield nil, collection, bitcounter
|
599
|
+
else
|
600
|
+
result << [nil, collection, bitcounter]
|
601
|
+
end
|
602
|
+
end
|
584
603
|
end
|
585
604
|
end
|
605
|
+
unless block_given?
|
606
|
+
result
|
607
|
+
end
|
586
608
|
end
|
587
609
|
|
588
610
|
# Returns each named bit collection contained in self
|
data/lib/origen/specs.rb
CHANGED
@@ -48,6 +48,7 @@ module Origen
|
|
48
48
|
sub_type: nil,
|
49
49
|
mode: current_mode.nil? ? nil : current_mode.name,
|
50
50
|
spec: nil,
|
51
|
+
symbol: false,
|
51
52
|
creating_spec: false
|
52
53
|
}.update(options || {})
|
53
54
|
_specs
|
@@ -102,6 +103,7 @@ module Origen
|
|
102
103
|
sub_type: nil,
|
103
104
|
mode: current_mode.nil? ? nil : current_mode.name,
|
104
105
|
spec: nil,
|
106
|
+
symbol: false,
|
105
107
|
creating_spec: false
|
106
108
|
}.update(options)
|
107
109
|
if @_specs.nil? || @_specs == {}
|
@@ -124,6 +126,7 @@ module Origen
|
|
124
126
|
sub_type: nil,
|
125
127
|
mode: current_mode.nil? ? nil : current_mode.name,
|
126
128
|
spec: nil,
|
129
|
+
symbol: false,
|
127
130
|
creating_spec: false
|
128
131
|
}.update(options)
|
129
132
|
options[:spec] = s
|
@@ -639,14 +642,22 @@ module Origen
|
|
639
642
|
sub_type: nil,
|
640
643
|
specs_to_be_shown: SpecArray.new,
|
641
644
|
owner: nil,
|
645
|
+
symbol: false,
|
642
646
|
creating_spec: false
|
643
647
|
}.update(options)
|
648
|
+
options[:symbol] ? symbol = options.delete(:spec) : symbol = nil
|
644
649
|
specs_to_be_shown = options[:specs_to_be_shown]
|
645
650
|
filter_hash(_specs, options[:spec]).each do |_spec, hash|
|
646
651
|
filter_hash(hash, options[:mode]).each do |_mode, hash_|
|
647
652
|
filter_hash(hash_, options[:type]).each do |_type, hash__|
|
648
653
|
filter_hash(hash__, options[:sub_type]).each do |_sub_type, spec|
|
649
|
-
|
654
|
+
if symbol
|
655
|
+
if spec.symbol && (spec.symbol.gsub(/<.*?>/, '').downcase.to_sym == symbol)
|
656
|
+
specs_to_be_shown << spec
|
657
|
+
end
|
658
|
+
else
|
659
|
+
specs_to_be_shown << spec
|
660
|
+
end
|
650
661
|
end
|
651
662
|
end
|
652
663
|
end
|
@@ -33,8 +33,11 @@ class SearchFilter < Nanoc::Filter
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def search_file
|
36
|
-
|
37
|
-
@site.config[:
|
36
|
+
if item[:search_id]
|
37
|
+
File.join(@site.config[:output_dir], "search_#{item[:search_id]}.json")
|
38
|
+
else
|
39
|
+
File.join(@site.config[:output_dir], 'search.json')
|
40
|
+
end
|
38
41
|
end
|
39
42
|
|
40
43
|
def extract_first(doc, path)
|
@@ -1,4 +1,12 @@
|
|
1
|
-
|
1
|
+
var search_json;
|
2
|
+
|
3
|
+
if (window.origen_search_id) {
|
4
|
+
search_json = "search_" + window.origen_search_id + ".json";
|
5
|
+
} else {
|
6
|
+
search_json = "search.json";
|
7
|
+
}
|
8
|
+
|
9
|
+
$.getJSON("<%= path '' %>" + "/" + search_json, function(json) {
|
2
10
|
window.index = lunr(function() {
|
3
11
|
this.field("title", {boost: 10});
|
4
12
|
this.field("subtitle", {boost: 5});
|
@@ -87,6 +95,12 @@ $(document).ready(function() {
|
|
87
95
|
|
88
96
|
if (params.highlight) {
|
89
97
|
var term = unescape(params.highlight);
|
90
|
-
$('article')
|
98
|
+
var articles = $('article');
|
99
|
+
articles.highlight(term);
|
100
|
+
if (articles[0]) {
|
101
|
+
var top = $($("span.highlight:contains(" + params.highlight + ")")[0]).offset().top;
|
102
|
+
|
103
|
+
$('html,body').animate({scrollTop: top - 350}, 500);
|
104
|
+
}
|
91
105
|
}
|
92
106
|
});
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|