veracode 1.0.0.alpha3 → 1.0.0.alpha8

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b03b9d64575800c7e3b027e4ed2e0c11e104e6f0
4
+ data.tar.gz: 8badea25276f78bf067bf2e60c488478353c87b8
5
+ SHA512:
6
+ metadata.gz: 30068aecda34ddd2bbab105ff988ebb4ff44571bb773e2a5c8c4ba029b9e778ff9b04c163194edb98e983bf51fd70da44a52ca1e1e3bb41a27086b31edc68ec1
7
+ data.tar.gz: 6f8466ca639afea009c39c22f54190875c9080b8210c4b264fd816b6672590776ca51dc1e4acd58332590d038b31f1ff85dfcb6bfcc0debd5a5999988996111e
data/bin/veracode CHANGED
@@ -4,10 +4,10 @@ require 'optparse'
4
4
  $:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
5
5
  $:.unshift Dir.pwd
6
6
 
7
- unless File.exists?("script/rails")
8
- $stderr.puts "Current directory #{File.basename(Dir.pwd).dump} does not appear to be a Rails 3 application."
9
- exit
10
- end
7
+ #unless File.exists?("script/rails")
8
+ # $stderr.puts "Current directory #{File.basename(Dir.pwd).dump} does not appear to be a Rails 3 application."
9
+ # exit
10
+ #end
11
11
  APP_PATH = File.expand_path('config/application')
12
12
  APP_NAME = File.basename(Dir.pwd)
13
13
  COMMAND = "#{$0} #{ARGV.join(' ')}"
@@ -16,12 +16,10 @@ require 'veracode'
16
16
  require 'veracode/version'
17
17
 
18
18
  $options = {
19
- :phase1 => false,
20
- :phase2 => false,
21
- :phase3 => true,
22
19
  :archive_source => true,
23
20
  :include_inherited => false,
24
21
  :jruby => false,
22
+ :environment => false,
25
23
  }
26
24
 
27
25
  subcommand = ARGV.shift
@@ -34,22 +32,13 @@ case subcommand
34
32
  $options[:verbose] = true
35
33
  end
36
34
 
37
- opts.on("-a", "--all", "Archive objects at all stages") do
38
- $options[:phase1] = true
39
- $options[:phase2] = true
40
- end
41
-
42
- opts.on("-f", "--file", "Disassemble .rb files") do
43
- $options[:disasm] = true
44
- end
45
-
46
35
  opts.on("-j", "--jruby", "Force JRuby mode") do
47
36
  $options[:jruby] = true
48
37
  end
49
38
 
50
- opts.on("--[no-]source", "[Don't] Include source code in archive") do |s|
51
- $options[:archive_source] = s
52
- end
39
+ # opts.on("--[no-]source", "[Don't] Include source code in archive") do |s|
40
+ # $options[:archive_source] = s
41
+ # end
53
42
 
54
43
  opts.on("-D", "--debug", "Enable debug output") do
55
44
  $DEBUG = true
@@ -73,6 +62,23 @@ case subcommand
73
62
  " #{opts.program_name} help"
74
63
  end.parse!
75
64
 
65
+ when "environment", "env"
66
+ $options[:environment] = true
67
+
68
+ OptionParser.new do |opts|
69
+ opts.banner = "Usage: veracode environment [options]"
70
+
71
+ opts.on("-v", "--verbose", "Run verbosely") do
72
+ $options[:verbose] = true
73
+ end
74
+
75
+ opts.on("-D", "--debug", "Enable debug output") do
76
+ $DEBUG = true
77
+ end
78
+
79
+ end.parse!
80
+ Veracode.prepare
81
+
76
82
  else
77
83
  $stderr.puts "#{subcommand.dump} is not a valid subcommand"
78
84
 
data/lib/veracode.rb CHANGED
@@ -1,11 +1,14 @@
1
+ require 'pathname'
2
+ require 'set'
1
3
  require 'zlib'
2
- require 'zip/zip'
4
+ require 'zip'
3
5
  require 'veracode/version'
4
6
  require 'veracode/schema'
5
7
  require 'veracode/gems'
6
8
 
7
9
  module Veracode
8
10
  @run_id = nil
11
+ @required_libs = Set.new
9
12
 
10
13
  # Metadata and method disassemblies for all Modules (.txt.gz)
11
14
  @disasmlog = nil
@@ -35,8 +38,14 @@ module Veracode
35
38
 
36
39
 
37
40
  def self.init
41
+ if Gem::Dependency.new('', '~> 2.2.0').match?('', RUBY_VERSION)
42
+ $stderr.puts "Ruby 2.2 is not supported, please consult the compilation guide for all supported Ruby versions"
43
+ exit
44
+ end
45
+
38
46
  @run_id = Time.now.strftime("%Y%m%d%H%M%S")
39
47
  @archive_dirname = File.join("tmp","veracode-#{@run_id}")
48
+ @required_libs.merge(["pathname", "set", "zlib", "zip/zip", "veracode"])
40
49
 
41
50
  if !Dir.exists?("tmp")
42
51
  begin
@@ -149,28 +158,47 @@ module Veracode
149
158
  }
150
159
  }
151
160
  rescue Exception => e
152
- log_error e.message
153
- $stderr.puts "Unable to write manifest file #{@manifest_filename}: #{e.message}"
161
+ log_error "Unable to write manifest file #{@manifest_filename}: #{e.message}"
162
+ puts "Unable to write manifest file #{@manifest_filename}: #{e.message}"
154
163
  end
155
164
 
156
165
  @errorlog.flush
157
166
 
158
167
  begin
159
- Zip::ZipFile.open(@archive_filename, Zip::ZipFile::CREATE) { |zf|
160
- @manifest.each {|file|
161
-
162
- if file.start_with?(@archive_dirname)
163
- name_in_archive = file.sub(/^#{@archive_dirname + File::SEPARATOR}/,"")
164
- else
165
- name_in_archive = File.join(APP_NAME, file)
166
- end
167
-
168
- puts "Adding #{file} to archive as #{name_in_archive}" if $options[:verbose]
169
- zf.add(name_in_archive, file)
168
+ if Gem.loaded_specs.keys.include?("zipruby")
169
+ log_error "zipruby gem detected, using it instead of rubyzip for creating archive"
170
+ @errorlog.flush
171
+ Zip::Archive.open(@archive_filename, Zip::CREATE) { |ar|
172
+ @manifest.each { |file|
173
+
174
+ if file.start_with?(@archive_dirname)
175
+ name_in_archive = file.sub(/^#{@archive_dirname + File::SEPARATOR}/,"")
176
+ else
177
+ name_in_archive = File.join(APP_NAME, file)
178
+ end
179
+
180
+ puts "Adding #{file} to archive as #{name_in_archive}" if $options[:verbose]
181
+ ar.add_file(name_in_archive, file)
182
+ }
183
+ }
184
+ else
185
+ Zip::File.open(@archive_filename, Zip::File::CREATE) { |zf|
186
+ @manifest.each { |file|
187
+
188
+ if file.start_with?(@archive_dirname)
189
+ name_in_archive = file.sub(/^#{@archive_dirname + File::SEPARATOR}/,"")
190
+ else
191
+ name_in_archive = File.join(APP_NAME, file)
192
+ end
193
+
194
+ puts "Adding #{file} to archive as #{name_in_archive}" if $options[:verbose]
195
+ zf.add(name_in_archive, file)
196
+ }
170
197
  }
171
- }
198
+ end
172
199
  rescue Exception => e
173
- $stderr.puts "Unable to create archive #{@manifest_filename}: #{e.message}"
200
+ log_error "Unable to create archive #{@manifest_filename}: #{e.message}"
201
+ puts "Unable to create archive #{@manifest_filename}: #{e.message}"
174
202
  exit
175
203
  end
176
204
 
@@ -221,20 +249,38 @@ module Veracode
221
249
 
222
250
  ##############################################################################
223
251
  # Helpers
252
+ def self.cond_require(lib)
253
+ if @required_libs.add?(lib)
254
+ begin
255
+ return require lib
256
+ rescue Exception => e
257
+ puts "(failed: require #{lib} #{e.message})" if $options[:verbose]
258
+ log_error "Unable to require #{lib} (#{e.message})"
259
+ end
260
+ end
261
+ return false
262
+ end
263
+
224
264
  def self.glob_require(files)
265
+ any_new = false
266
+ total, count = 0, 0
225
267
  Dir.glob(files) do |f|
226
268
  print "Requiring #{f.to_s} " if $options[:verbose]
227
269
 
228
270
  begin
229
- require File.expand_path(f)
271
+ required = require File.expand_path(f)
230
272
  rescue Exception => e
231
273
  puts "(failed: #{e.message})" if $options[:verbose]
232
274
  log_error "Unable to require #{File.expand_path(f).to_s.dump} (#{e.message})"
233
275
  else
234
- puts "(OK)" if $options[:verbose]
276
+ puts "(OK: #{(required ? "required" : "already required")})" if $options[:verbose]
235
277
  end
236
-
278
+ any_new |= required
279
+ total += 1
280
+ count += 1 if required
237
281
  end
282
+ puts "#{count}/#{total} files were required" if $options[:verbose]
283
+ any_new
238
284
  end
239
285
 
240
286
  def self.safe_name(o)
@@ -242,7 +288,11 @@ module Veracode
242
288
  when o == ActiveSupport::TimeWithZone
243
289
  "ActiveSupport::TimeWithZone"
244
290
  when o.is_a?(Module)
245
- ( o.name.nil? ? o.to_s : o.name )
291
+ begin
292
+ ( o.name.nil? ? o.to_s : o.name.to_s )
293
+ rescue
294
+ o.to_s
295
+ end
246
296
  when o.is_a?(Method), o.is_a?(UnboundMethod)
247
297
  o.name.to_s
248
298
  else
@@ -307,7 +357,13 @@ module Veracode
307
357
  def self.prepare_archive
308
358
  @disasmlog = Zlib::GzipWriter.new(File.open(@disasmlog_filename, "wb"), nil, nil)
309
359
  @disasmlog.puts "#{RUBY_ENGINE}-#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
310
- @disasmlog.puts "# " + `rails --version`.chomp
360
+ if $options[:environment]
361
+ @disasmlog.puts "# EnvironmentDef %s-%s_rails-%s" % [RUBY_ENGINE, RUBY_VERSION, Rails.version]
362
+ else
363
+ @disasmlog.puts "# Environment %s-%s_rails-%s" % [RUBY_ENGINE, RUBY_VERSION, Rails.version]
364
+ end
365
+ @disasmlog.puts "# Ruby #{RUBY_ENGINE}-#{RUBY_VERSION}"
366
+ @disasmlog.puts "# Rails #{Rails.version}"
311
367
  @disasmlog.puts
312
368
  end
313
369
 
@@ -384,7 +440,7 @@ module Veracode
384
440
  m.included_modules.map {|m| "include #{m.inspect.dump}\n" }.join :
385
441
  ""
386
442
  ) +
387
- ( m.singleton_class.included_modules.count > 0 ?
443
+ ( m.respond_to?(:singleton_class) && m.singleton_class.included_modules.count > 0 ?
388
444
  m.singleton_class.included_modules.map {|m| "extend #{m.inspect.dump}\n" }.join :
389
445
  ""
390
446
  )
@@ -420,23 +476,26 @@ module Veracode
420
476
  end
421
477
  end
422
478
 
423
- if m.respond_to?(:global_variables)
424
- m.global_variables.each do |v_symbol|
425
- begin
426
- v = eval(v_symbol.to_s)
427
- formatted_contents += format_variable(v_symbol, v, "global")
428
- rescue Exception => e
429
- log_error "Error archiving global variable #{v_symbol.to_s.dump}: #{e.message}"
430
- formatted_contents += format_variable(v_symbol, :veracode_nil, "global")
431
- end
432
-
479
+ begin
480
+ if m == Kernel
481
+ m.global_variables.each do |v_symbol|
482
+ begin
483
+ v = eval(v_symbol.to_s)
484
+ formatted_contents += format_variable(v_symbol, v, "global")
485
+ rescue Exception => e
486
+ log_error "Error archiving global variable #{v_symbol.to_s.dump}: #{e.message}"
487
+ formatted_contents += format_variable(v_symbol, :veracode_nil, "global")
488
+ end
489
+ end
433
490
  end
491
+ rescue Exception => e
492
+ # m.respond_to?(:global_variables) was throwing exceptions
434
493
  end
435
494
 
436
495
  %w[ public protected private ].each {|p|
437
496
  get_methods = (p + "_instance_methods").to_sym
438
- if m.respond_to?(get_methods) && m.send(get_methods, $options[:include_inherited]).count > 0
439
- m.send(get_methods, $options[:include_inherited]).each do |m_symbol|
497
+ if m.respond_to?(get_methods) && m.__send__(get_methods, $options[:include_inherited]).count > 0
498
+ m.__send__(get_methods, $options[:include_inherited]).each do |m_symbol|
440
499
  begin
441
500
  method = m.instance_method(m_symbol)
442
501
  formatted_contents += format_method(method, "#{p.to_s}_instance", with_disasm)
@@ -488,7 +547,12 @@ module Veracode
488
547
  # Archiving Objects
489
548
  def self.archive(objects, with_disasm=true)
490
549
 
491
- objects = objects - [Veracode]
550
+ objects = objects - [
551
+ Veracode,
552
+ Veracode::ActiveRecord,
553
+ Veracode::ActiveRecord::Model,
554
+ Veracode::ActiveRecord::Schema,
555
+ ]
492
556
 
493
557
  if $options[:verbose]
494
558
  puts "Archiving #{objects.count.to_s} objects" + (with_disasm ? " with disassembly" : "")
@@ -517,8 +581,8 @@ module Veracode
517
581
  def self.compile_templates
518
582
 
519
583
  begin
520
- require 'action_view' unless defined? ActionView
521
- require 'action_controller' unless defined? ActionController
584
+ cond_require 'action_view' unless defined? ActionView
585
+ cond_require 'action_controller' unless defined? ActionController
522
586
  rescue Exception => e
523
587
  log_error "Unable to satisfy haml dependencies (#{e.message})"
524
588
  return
@@ -541,12 +605,13 @@ module Veracode
541
605
  return unless templates.count > 0
542
606
 
543
607
  puts "Found #{templates.count} templates" if $options[:verbose]
608
+ log_error "Found #{templates.count} templates"
544
609
 
545
610
  haml_templates = templates.grep(/\.haml$/)
546
611
  if haml_templates.any?
547
612
  begin
548
- require 'haml' unless defined? Haml
549
- require 'haml/template/plugin' unless defined? Haml::Plugin
613
+ cond_require 'haml' unless defined? Haml
614
+ cond_require 'haml/template/plugin' unless defined? Haml::Plugin
550
615
  rescue Exception => e
551
616
  puts "Unable to satisfy haml dependencies"
552
617
  log_error "Unable to satisfy haml dependencies (#{e.message})"
@@ -563,13 +628,16 @@ module Veracode
563
628
  puts "Compiling template #{template}" if $options[:verbose]
564
629
 
565
630
  begin
631
+ # This render will fail, but will trigger compilation of template
566
632
  view.render(:file => template)
567
633
  rescue Exception => e
568
634
  log_error "Compiled template #{template} #{e.message}"
569
635
  end
570
636
  }
571
637
 
572
- puts "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates " if $options[:verbose]
638
+ puts "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates" if $options[:verbose]
639
+ log_error "Compiled #{ActionView::CompiledTemplates.instance_methods.count.to_s} templates"
640
+ log_error "Not all templates were compiled" if ActionView::CompiledTemplates.instance_methods.count < templates.count
573
641
  end
574
642
 
575
643
  def self.compile_erb_templates
@@ -644,9 +712,9 @@ module Veracode
644
712
  return unless templates.count > 0
645
713
 
646
714
  begin
647
- require 'action_view'
648
- require 'haml'
649
- require 'haml/template/plugin'
715
+ cond_require 'action_view'
716
+ cond_require 'haml'
717
+ cond_require 'haml/template/plugin'
650
718
  rescue Exception => e
651
719
  log_error "Unable to satisfy haml dependencies (#{e.message})"
652
720
  return
@@ -685,6 +753,59 @@ module Veracode
685
753
 
686
754
  end
687
755
 
756
+ def self.require_libs(lib_paths)
757
+ for lib_path in lib_paths
758
+ dirsToProcess = [Pathname(lib_path)]
759
+ until dirsToProcess.count == 0 || !Dir.exists?(dirsToProcess[0])
760
+ currentDir = dirsToProcess.delete_at(0)
761
+ for child in currentDir.children
762
+ if child.directory?
763
+ dirsToProcess[dirsToProcess.count] = child
764
+ base = child.to_s.partition("#{lib_path}/")[2]
765
+ lib = ""
766
+ for part in base.split('/').reverse
767
+ lib = "#{part}/#{lib}"
768
+ lib = lib[0..lib.length-2] if lib[lib.length-1] == '/'
769
+ begin
770
+ if cond_require lib
771
+ puts "requiring #{lib}" if $options[:verbose]
772
+ end
773
+ rescue Exception => e
774
+ end
775
+ end
776
+ end
777
+ end
778
+ end
779
+ end
780
+ end
781
+
782
+ def self.require_rails(gemdir)
783
+ dirsToProcess = [Pathname(gemdir)]
784
+ until dirsToProcess.count == 0
785
+ currentDir = dirsToProcess.delete_at(0)
786
+ for child in currentDir.children
787
+ if child.directory?
788
+ dirsToProcess[dirsToProcess.count] = child
789
+ end
790
+ base = child.to_s.partition("#{gemdir}/")[2]
791
+ if base.index("action_controller") != nil || base.index("action_view") != nil || base.index("active_record") != nil
792
+ lib = ""
793
+ for part in base.split('/').reverse
794
+ lib = "#{part}/#{lib}"
795
+ lib = lib[0..lib.length-2] if lib[lib.length-1] == '/'
796
+ lib.chomp!(File.extname(lib))
797
+ begin
798
+ if cond_require lib
799
+ puts "requiring #{lib}" if $options[:verbose]
800
+ end
801
+ rescue Exception => e
802
+ end
803
+ end
804
+ end
805
+ end
806
+ end
807
+ end
808
+
688
809
 
689
810
 
690
811
 
@@ -702,16 +823,6 @@ module Veracode
702
823
  puts
703
824
  end
704
825
 
705
- if $options[:disasm]
706
- rbfiles = File.join("**", "*.rb")
707
- Dir[rbfiles].each do |f|
708
- puts RubyVM::InstructionSequence.compile_file(f).disasm
709
- puts
710
- end
711
- exit
712
- end
713
-
714
- prepare_archive
715
826
 
716
827
  ################################################################
717
828
  ## phase 1 - Create baseline
@@ -720,10 +831,6 @@ module Veracode
720
831
  puts "Phase 1 - Initial State" if $options[:verbose]
721
832
  self.stats if $options[:verbose]
722
833
 
723
- if $options[:phase1]
724
- puts "Processing and disassembling Ruby standard classes and modules"
725
- archive(@modules)
726
- end
727
834
  ## /phase 1 - Create baseline
728
835
  ################################################################
729
836
 
@@ -734,10 +841,7 @@ module Veracode
734
841
 
735
842
  puts "Phase 2 - Load Rails" if $options[:verbose]
736
843
  begin
737
- require "rails"
738
- require 'action_controller'
739
- require 'action_view'
740
- require 'active_record'
844
+ require "rails/all"
741
845
  rescue Exception => e
742
846
  puts "Unable to require rails: #{e.message}"
743
847
  log_error "Unable to require rails: #{e.message}"
@@ -746,26 +850,6 @@ module Veracode
746
850
  puts "Required rails" if $options[:verbose]
747
851
  end
748
852
 
749
- self.update
750
-
751
- self.stats if $options[:verbose]
752
-
753
- if $options[:phase2]
754
- puts "Processing and disassembling Rails classes and modules"
755
- archive(@modules)
756
- end
757
-
758
- self.rebaseline
759
- ## /phase 2 - Require rails
760
- ################################################################
761
-
762
-
763
-
764
- ################################################################
765
- # phase 3 - require app
766
-
767
- puts "Phase 3 - Imitate Rails" if $options[:verbose]
768
-
769
853
  ## Imitate script/rails
770
854
  # APP_PATH = File.expand_path('config/application')
771
855
  # APP_PATH is already set in bin/veracode
@@ -779,7 +863,7 @@ module Veracode
779
863
  # require 'rails/commands'
780
864
 
781
865
  ## Imitate rails/commands when console
782
- glob_require 'rails/commands/console'
866
+ cond_require 'rails/commands/console.rb'
783
867
  # require APP_PATH # => config/application.rb
784
868
 
785
869
  glob_require "config/application.rb"
@@ -790,32 +874,66 @@ module Veracode
790
874
 
791
875
  # Imitate Rails::Console.initialize_console
792
876
  # require "pp"
793
- glob_require "rails/console/app"
794
- glob_require "rails/console/helpers"
877
+ cond_require "rails/console/app.rb"
878
+ cond_require "rails/console/helpers.rb"
795
879
 
796
- glob_require "app/models/**/*.rb"
797
- glob_require "app/helpers/**/*.rb"
798
- glob_require "app/controllers/application_controller.rb"
799
- glob_require "app/controllers/**/*.rb"
880
+ if $options[:environment]
881
+ @stdlib = $:
882
+ @gemdir = Gem.dir
883
+
884
+ require_libs(@stdlib)
885
+ require_rails(@gemdir)
886
+ end
887
+
888
+ self.rebaseline
889
+
890
+ self.stats if $options[:verbose]
891
+
892
+ ## /phase 2 - Require rails
893
+ ################################################################
894
+
895
+
896
+
897
+ ################################################################
898
+ # phase 3 - require app
899
+
900
+ puts "Phase 3 - Imitate Rails" if $options[:verbose]
901
+
902
+ any_new = true
903
+ while any_new
904
+ any_new = false
905
+ any_new |= glob_require "lib/**/*.rb"
906
+ any_new |= glob_require "app/**/*.rb"
907
+ puts "new successful requires? #{any_new.to_s}" if $options[:verbose]
908
+ end
800
909
 
801
910
  compile_templates
802
911
 
803
912
  self.update
804
913
  self.stats if $options[:verbose]
805
914
 
806
- if $options[:phase3]
807
- puts "Processing and disassembling #{APP_NAME} classes and modules"
915
+ # Ensure compiled templates are fully disassembled in archive
916
+ @baseline_modules.delete(ActionView::CompiledTemplates)
917
+
918
+ if $options[:environment]
919
+ puts "Processing and disassembling environment"
920
+ archive(@modules.reject {|o| safe_name(o) =~ /^#<(Class|Module):0x[0-9a-f]+>/i }
921
+ .reject {|o| safe_name(o) =~ /^Veracode/ }
922
+ .reject {|o| safe_name(o) =~ /^EmptyRails/ }
923
+ .reject {|o| safe_name(o) =~ /^ActionView::CompiledTemplates$/ }, false)
924
+ else
925
+ puts "Processing Ruby and Rails classes and modules"
808
926
  archive(@baseline_modules, false)
927
+ add_to_archive "\n# Phase 3 - App disassembly\n"
928
+ puts "Processing and disassembling #{APP_NAME} classes and modules"
809
929
  archive(@modules - @baseline_modules, true)
930
+ archive_schema
810
931
  end
811
932
 
812
- archive_schema
813
-
814
933
  ## /phase 3 - require app
815
934
  ################################################################
816
935
 
817
936
  finalize_archive
818
-
819
937
  pack_manifest
820
938
  cleanup
821
939
 
data/lib/veracode/gems.rb CHANGED
@@ -25,24 +25,25 @@ module Veracode
25
25
 
26
26
  begin
27
27
  File.open(@gems_filename, "wb") {|gems_file|
28
- gems_file.puts '<supportissues>'
28
+ gems_file.puts '<messages>'
29
29
  gems.each {|gem|
30
30
  gems_file << <<GEMS_XML
31
- <supportissue>
31
+ <message>
32
32
  <platform>ruby</platform>
33
33
  <name>#{gem}</name>
34
+ <detailed_message>#{gem}</detailed_message>
34
35
  <token>#{gem}</token>
35
36
  <package>rubygem.#{gem}</package>
36
37
  <errorlevel>#{(SupportedGems.include?(gem) ? "info" : "warn" )}</errorlevel>
37
38
  <type>framework_unsupported</type>
38
- </supportissue>
39
+ </message>
39
40
  GEMS_XML
40
41
  }
41
- gems_file.puts '</supportissues>'
42
+ gems_file.puts '</messages>'
42
43
  }
43
44
  rescue Exception => e
44
45
  log_error "Unable to write to gem list to file #{@gems_filename}: #{e.message}"
45
46
  end
46
47
 
47
48
  end
48
- end
49
+ end
@@ -1,61 +1,79 @@
1
1
  module Veracode
2
2
  module ActiveRecord
3
3
  class Model
4
+
4
5
  attr_reader :name, :attributes
6
+
5
7
  def initialize(name)
6
8
  @name = name
7
9
  @attributes = Array.new
8
10
  end
9
- def binary(name, *rest)
10
- @attributes << [name, :binary]
11
- end
12
- def boolean(name, *rest)
13
- @attributes << [name, :boolean]
14
- end
15
- def date(name, *rest)
16
- @attributes << [name, :date]
17
- end
18
- def datetime(name, *rest)
19
- @attributes << [name, :datetime]
20
- end
21
- def decimal(name, *rest)
22
- @attributes << [name, :decimal]
23
- end
24
- def float(name, *rest)
25
- @attributes << [name, :float]
26
- end
27
- def integer(name, *rest)
28
- @attributes << [name, :integer]
29
- end
30
- def primary_key(name, *rest)
31
- @attributes << [name, :primary_key]
32
- end
33
- def string(name, *rest)
34
- @attributes << [name, :string]
35
- end
36
- def text(name, *rest)
37
- @attributes << [name, :text]
38
- end
39
- def time(name, *rest)
40
- @attributes << [name, :time]
41
- end
42
- def timestamp(name, *rest)
43
- @attributes << [name, :timestamp]
11
+
12
+ %w(
13
+ binary boolean date datetime decimal float integer primary_key string text time timestamp
14
+ ).map(&:to_sym).each do |meth|
15
+ define_method(meth) do |name, *rest|
16
+ @attributes << [name, meth]
17
+ end
44
18
  end
19
+
45
20
  end
46
21
 
47
22
  class Schema
23
+
48
24
  def self.define(info={}, &block)
49
25
  Schema.new.instance_eval(&block)
50
26
  end
27
+
51
28
  def create_table(name, options={})
52
29
  td = Model.new(name)
53
30
  td.integer('id')
54
31
  yield td if block_given?
55
32
  Veracode.add_to_archive Veracode.format_variable("@@#{td.name}", td.attributes, 'class')
56
33
  end
57
- def add_index(table_name, column_name, options = {})
58
- end
34
+
35
+ # ActiveRecord::ConnectionAdapters::SchemaStatements
36
+ # http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html
37
+ def add_column(table_name, column_name, type, options = {}) ; end
38
+ def add_index(table_name, column_name, options = {}) ; end
39
+ def add_index_options(table_name, column_name, options = {}) ; end
40
+ def add_index_sort_order(option_strings, column_names, options = {}) ; end
41
+ def add_timestamps(table_name) ; end
42
+
43
+ # ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaStatementsExt
44
+ # http://rubydoc.info/gems/activerecord-oracle_enhanced-adapter/ActiveRecord/ConnectionAdapters/OracleEnhancedSchemaStatementsExt
45
+ def add_foreign_key(from_table, to_table, options = {})
46
+ Veracode::log_error "schema.rb: ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaStatementsExt#add_foreign_key called"
47
+ end
48
+ def add_primary_key_trigger(table_name, options = {})
49
+ Veracode::log_error "schema.rb: ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaStatementsExt#add_primary_key_trigger called"
50
+ end
51
+ def add_synonym(name, table_name, options = {})
52
+ Veracode::log_error "schema.rb: ActiveRecord::ConnectionAdapters::OracleEnhancedSchemaStatementsExt#add_synonym called"
53
+ end
54
+ # def disable_referential_integrity(&block) ; end
55
+ # def foreign_key_definition(to_table, options = {}) ; end
56
+ # def foreign_keys(table_name) ; end
57
+ # def remove_foreign_key(from_table, options) ; end
58
+ # def remove_synonym(name) ; end
59
+ # def supports_foreign_keys? ; end
60
+ # def synonyms ; end
61
+
62
+ # TODO: Return only if real receiver would respond to method
63
+ # def method_missing(meth, *args, &block)
64
+ # if ActiveRecord::ConnectionAdapters::AbstractAdapter.instance_methods.include?(meth)
65
+ # log_error "Unhandled method: #{meth} args: #{args.to_s}"
66
+ # nil
67
+ # else
68
+ # super
69
+ # end
70
+ # end
71
+ # def respond_to_everything(meth)
72
+ # log_error "Unhandled respond_to? for: #{meth}" unless really_respond_to?(meth)
73
+ # true
74
+ # end
75
+ # alias_method :really_respond_to?, :respond_to?
76
+ # alias_method :respond_to?, :respond_to_everything
59
77
  end
60
78
  end
61
79
 
@@ -67,17 +85,20 @@ module Veracode
67
85
  schema = 'Veracode::' + File.read(schema_file).each_line.reject {|l| l =~ /^\s*#/}.join
68
86
  rescue Exception => e
69
87
  puts "Unable to retrieve schema information from 'db/schema.rb'. Are your migrations up to date?"
70
- log_error "Unable to archive 'db/schema.rb' (#{e.message})"
88
+ log_error "Unable to retrieve schema from 'db/schema.rb' (#{e.message})"
89
+ add_to_archive %Q|module "Veracode::Schema"\n|
90
+ add_to_archive %Q|endmodule\n\n|
91
+ return
71
92
  end
72
-
93
+
94
+ add_to_archive %Q|module "Veracode::Schema"\n|
73
95
  begin
74
- add_to_archive %Q|module "Veracode::Schema"\n|
75
96
  eval(schema)
76
- add_to_archive %Q|endmodule\n\n|
77
97
  rescue Exception => e
78
98
  puts "Unable to evaluate schema information from 'db/schema.rb'. (#{e.message})"
79
99
  log_error "Unable to evaluate 'db/schema.rb' (#{e.message})"
80
100
  end
101
+ add_to_archive %Q|endmodule\n\n|
81
102
  end
82
103
 
83
- end
104
+ end
@@ -1,4 +1,4 @@
1
1
  module Veracode
2
- VERSION = '1.0.0.alpha3'
2
+ VERSION = '1.0.0.alpha8'
3
3
  ARCHIVE_VERSION = '2012-07-04'
4
4
  end
metadata CHANGED
@@ -1,27 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: veracode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha3
5
- prerelease: 6
4
+ version: 1.0.0.alpha8
6
5
  platform: ruby
7
6
  authors:
8
7
  - Veracode
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-08-27 00:00:00.000000000 Z
11
+ date: 2016-06-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rubyzip
16
- requirement: &70156231653560 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: '1.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *70156231653560
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
25
27
  description: Prepares your Ruby on Rails app for submission to Veracode.
26
28
  email: devcontact@veracode.com
27
29
  executables:
@@ -36,27 +38,27 @@ files:
36
38
  - lib/veracode/version.rb
37
39
  homepage: http://veracode.com/
38
40
  licenses: []
41
+ metadata: {}
39
42
  post_install_message:
40
43
  rdoc_options: []
41
44
  require_paths:
42
45
  - lib
43
46
  required_ruby_version: !ruby/object:Gem::Requirement
44
- none: false
45
47
  requirements:
46
- - - ~>
48
+ - - ">="
47
49
  - !ruby/object:Gem::Version
48
50
  version: 1.9.3.0
49
51
  required_rubygems_version: !ruby/object:Gem::Requirement
50
- none: false
51
52
  requirements:
52
- - - ! '>'
53
+ - - ">"
53
54
  - !ruby/object:Gem::Version
54
55
  version: 1.3.1
55
56
  requirements: []
56
57
  rubyforge_project:
57
- rubygems_version: 1.8.10
58
+ rubygems_version: 2.6.3
58
59
  signing_key:
59
- specification_version: 3
60
+ specification_version: 4
60
61
  summary: Command line tool for preparing your Ruby on Rails app for submission to
61
62
  Veracode
62
63
  test_files: []
64
+ has_rdoc: