normalizexml 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9e27d1f6df9f44b6874f8dae18328645a1f33c02
4
+ data.tar.gz: c33a09275fe1627adc3f459beaf7369b869eb34e
5
+ SHA512:
6
+ metadata.gz: e70949817d4a696079f3e0bca2549726c07406a0ce9f213b26b4d116e7ff8c289ba1601c446bc35d6087271eec57a8380d44d06137d130edb1eeb8e2f61cc65d
7
+ data.tar.gz: f3e1ce52dc9009fcb2b270be855701c9ed32ca76d5debcc00eae2ac8a31e492b8cfc361960a3fd560c06589616b1ce3bd0ae852dabb37fe9a03ed5fd77b3fc0c
@@ -0,0 +1,7 @@
1
+ # .gitignore
2
+ /buildgem
3
+ /buildgem.cmd
4
+ pkg/
5
+ tmp/
6
+
7
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format doc
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem 'ktcommon', :git => 'ssh://git@bitbucket.org/ktechsystems/ktcommon.git'
4
+
5
+ # Specify your gem's dependencies in test.gemspec
6
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Jeff McAffee
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,59 @@
1
+ # NormalizeXml
2
+
3
+ ## Summary
4
+
5
+ NormalizeXml is used to 'normalize' AMS guideline xml so different
6
+ versions can be easily compared.
7
+
8
+ As part of normalization, all `id`s are zero'd as well as `order`
9
+ attributes. XML is also pretty-printed.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your gemfile:
14
+
15
+ gem 'normalizexml'
16
+
17
+ And then execute:
18
+
19
+ $ bundle install
20
+
21
+ or install it yourself as:
22
+
23
+ $ gem install normalizexml
24
+
25
+ ## Usage
26
+
27
+ TODO
28
+
29
+ ## Testing
30
+
31
+ NormalizeXml uses RSpec for testing.
32
+
33
+ To run all existing tests:
34
+
35
+ $ rake spec
36
+
37
+ or directly:
38
+
39
+ $ bundle exec rspec
40
+
41
+ ## TODO
42
+
43
+ ## Contributing
44
+
45
+ 1. Fork it ( https://github.com/jmcaffee/normalizexml/fork )
46
+ 1. Clone it (`git clone git@github.com:[my-github-username]/normalizexml.git`)
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Create tests for your feature branch
49
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
50
+ 5. Push to the branch (`git push origin my-new-feature`)
51
+ 6. Create a new Pull Request
52
+
53
+ ## LICENSE
54
+
55
+ NormalizeXml is licensed under the MIT license.
56
+
57
+ See [LICENSE](https://github.com/jmcaffee/normalizexml/blob/master/LICENSE) for
58
+ details.
59
+
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env ruby
2
+ ###! C:/tools/Ruby/bin/ruby.exe
3
+ ##############################################################################
4
+ # File:: normalizexml.rb
5
+ # Purpose:: Utility to ...
6
+ #
7
+ # Author:: Jeff McAffee 09/03/2010
8
+ # Copyright:: Copyright (c) 2010, kTech Systems LLC. All rights reserved.
9
+ # Website:: http://ktechsystems.com
10
+ ##############################################################################
11
+
12
+ require 'normalizexml'
13
+ require 'user-choices'
14
+
15
+
16
+ class NormalizeXmlApp < UserChoices::Command
17
+ include UserChoices
18
+ include NormalizeXml
19
+
20
+ def initialize()
21
+ super
22
+ @controller = Controller.new
23
+ end
24
+
25
+
26
+ def add_sources(builder)
27
+ builder.add_source(CommandLineSource, :usage,
28
+ "Usage: #{$0} [options] INPUT_XML {OUTPUT_FILE}",
29
+ "Normalize an XML file",
30
+ "INPUT_XML - file to normalize",
31
+ "OUTPUT_FILE - (optional) filename of output file\n")
32
+ end # def add_sources
33
+
34
+
35
+ def add_choices(builder)
36
+ # Arguments
37
+ #builder.add_choice(:cmdArg, :length=>1) { |command_line| # Use length to REQUIRE args.
38
+ builder.add_choice(:cmdArg) { |command_line|
39
+ command_line.uses_arglist
40
+ }
41
+
42
+ # Switches
43
+ builder.add_choice(:verbose, :type=>:boolean, :default=>false) { |command_line|
44
+ command_line.uses_switch("-v", "--verbose",
45
+ "Verbose output.")
46
+ }
47
+
48
+ =begin
49
+ builder.add_choice(:aswitch, :type=>:boolean, :default=>false) { |command_line|
50
+ command_line.uses_switch("-a", "--aswitch",
51
+ "Switch description.")
52
+ }
53
+
54
+ # Options
55
+ builder.add_choice(:option, :type=>:string) { |command_line|
56
+ command_line.uses_option("-o", "--option ARG",
57
+ "Option description.")
58
+ }
59
+ =end
60
+
61
+ end # def add_choices
62
+
63
+ # This method is called automatically by UserChoices.
64
+ # Use it to handle simple post processing of user choices.
65
+ def postprocess_user_choices
66
+ @user_choices[:infile] = @user_choices[:cmdArg][0]
67
+ @user_choices[:outfile] = @user_choices[:cmdArg][1]
68
+ end
69
+
70
+
71
+ # Execute the NormalizeXml application.
72
+ # This method is called automatically when 'normalizexml(.rb)' is executed from the command line.
73
+ def execute
74
+ $LOG.debug "NormalizeXmlApp::execute"
75
+
76
+ if(@user_choices[:verbose])
77
+ @controller.verbose(@user_choices[:verbose])
78
+ end
79
+
80
+ =begin
81
+ if(@user_choices[:aswitch])
82
+ @controller.doSomethingWithSwitch(@user_choices[:aswitch])
83
+ return
84
+ end
85
+ =end
86
+ if(@user_choices[:cmdArg].empty?) # If no cmd line arg...
87
+ #return unless @controller.noCmdLineArg()
88
+ @controller.noCmdLineArg()
89
+ else
90
+ #return unless @controller.doSomethingWithCmdLineArg(@user_choices[:cmdArg])
91
+ @controller.doSomethingWithCmdLineArg(@user_choices[:cmdArg])
92
+ end
93
+
94
+ @controller.infile = @user_choices[:infile] unless @user_choices[:infile].nil? || @user_choices[:infile].empty?
95
+ @controller.outfile = @user_choices[:outfile] unless @user_choices[:outfile].nil? || @user_choices[:outfile].empty?
96
+ @controller.normalize()
97
+ end # def execute
98
+
99
+
100
+ end # class NormalizeXmlApp
101
+
102
+
103
+ # Uncomment the next line if this file can be both loaded via 'require' AND called from the command line.
104
+ # This technique does NOT work if the app is running as a gem.
105
+ #if $0 == __FILE__
106
+ begin
107
+ NormalizeXmlApp.new.execute
108
+ rescue SystemExit
109
+
110
+ rescue Exception => e
111
+ puts "!!! ERROR:"
112
+ puts "\t" + e.message
113
+ puts
114
+ puts "Try -h for help."
115
+ puts
116
+ #exit if !$LOGGING
117
+ puts "Exception type: #{e.class.to_s}"
118
+ puts e.backtrace
119
+ puts
120
+ end
121
+ #end
@@ -0,0 +1,21 @@
1
+ ========================================================================
2
+ = File: README.CODE.txt
3
+ = Purpose: Instructions and hints for customizing NormalizeXml.
4
+ =
5
+ = Generated: 09/03/2010
6
+ = Copyright: Copyright (c) 2010, kTech Systems LLC. All rights reserved.
7
+ = Website: http://ktechsystems.com
8
+ ========================================================================
9
+
10
+ CUSTOMIZING YOUR CODE:
11
+
12
+ You should add all of your data functionality to the Parser
13
+ object that has been created for you in lib/parser.rb.
14
+
15
+ To modify command line arguments, you should edit bin/normalizexml.rb
16
+ and lib/normalizexmlcontroller.rb
17
+
18
+ Add or modify configuration values by editing lib/normalizexmlcfg.rb.
19
+
20
+
21
+
@@ -0,0 +1,58 @@
1
+ ##############################################################################
2
+ # File:: normalizexml.rb
3
+ # Purpose:: Include file for NormalizeXml library
4
+ #
5
+ # Author:: Jeff McAffee 09/03/2010
6
+ # Copyright:: Copyright (c) 2010, kTech Systems LLC. All rights reserved.
7
+ # Website:: http://ktechsystems.com
8
+ ##############################################################################
9
+
10
+ require 'find'
11
+ require 'logger'
12
+ require 'bundler/setup'
13
+
14
+
15
+ if(!$LOG)
16
+ $LOG = Logger.new(STDERR)
17
+ $LOG.level = Logger::ERROR
18
+ end
19
+
20
+ if ENV["DEBUG"] == '1'
21
+ puts "LOGGING: ON due to DEBUG=1"
22
+ $LOG.level = Logger::DEBUG
23
+ end
24
+
25
+ $LOGGING = false
26
+ # Uncomment line below to force logging:
27
+ #$LOGGING = true # TODO: Change this flag to false when releasing production build.
28
+
29
+ require "#{File.join( File.dirname(__FILE__), 'normalizexml','version')}"
30
+ require "#{File.join( File.dirname(__FILE__), 'normalizexml','config')}"
31
+
32
+ logcfg = NormalizeXml::Config.new.load
33
+ if(logcfg.key?(:logging) && (true == logcfg[:logging]) )
34
+ $LOGGING = true
35
+ end
36
+
37
+ if($LOGGING)
38
+ # Create a new log file each time:
39
+ file = File.open('normalizexml.log', File::WRONLY | File::APPEND | File::CREAT | File::TRUNC)
40
+ $LOG = Logger.new(file)
41
+ $LOG.level = Logger::DEBUG
42
+ #$LOG.level = Logger::INFO
43
+ else
44
+ if(File.exists?('normalizexml.log'))
45
+ FileUtils.rm('normalizexml.log')
46
+ end
47
+ end
48
+ $LOG.info "**********************************************************************"
49
+ $LOG.info "Logging started for NormalizeXml library."
50
+ $LOG.info "**********************************************************************"
51
+
52
+
53
+ class_files = File.join( File.dirname(__FILE__), 'normalizexml', '*.rb')
54
+ $: << File.join( File.dirname(__FILE__), 'normalizexml') # Add directory to the include file array.
55
+ Dir.glob(class_files) do | class_file |
56
+ require class_file[/\w+\.rb$/]
57
+ end
58
+
@@ -0,0 +1,93 @@
1
+ ##############################################################################
2
+ # File:: normalizexmlcfg.rb
3
+ # Purpose:: NormalizeXml configuration file reader/writer class.
4
+ #
5
+ # Author:: Jeff McAffee 09/03/2010
6
+ # Copyright:: Copyright (c) 2010, kTech Systems LLC. All rights reserved.
7
+ # Website:: http://ktechsystems.com
8
+ ##############################################################################
9
+
10
+ require 'ktcommon/ktcfg'
11
+
12
+ ##############################################################################
13
+ # Everything is contained in Module NormalizeXml
14
+ module NormalizeXml
15
+
16
+ class Config < KtCfg::CfgFile
17
+
18
+ attr_accessor :cfg
19
+ attr_writer :cfgFile
20
+
21
+
22
+ def initialize(rootDir=nil)
23
+ $LOG.debug "Config::initialize"
24
+ super
25
+ @cfg = {}
26
+
27
+ setDefaults()
28
+ end
29
+
30
+
31
+ def setDefaults
32
+ $LOG.debug "Config::setDefaults"
33
+
34
+ # Notes about APPDATA paths:
35
+ # Local app data should be used when an app's data is too
36
+ # big to move around. Or is specific to the machine running
37
+ # the application.
38
+ #
39
+ # Roaming app data files could be pushed to a server (in a
40
+ # domain environment) and downloaded onto a different work
41
+ # station.
42
+ #
43
+ # LocalLow is used for data that must be sandboxed. Currently
44
+ # it is only used by IE for addons and storing data from
45
+ # untrusted sources (as far as I know).
46
+ #
47
+
48
+
49
+ appDataPath = ENV["APPDATA"] # APPDATA returns AppData\Roaming on Vista/W7
50
+ appDataPath ||= ENV["HOME"] # APPDATA returns AppData\Roaming on Vista/W7
51
+ #appDataPath = ENV["LOCALAPPDATA"] # LOCALAPPDATA returns AppData\Local on Vista/W7
52
+ appDataPath = File.rubypath(File.join(appDataPath, "normalizexml"))
53
+ @cfg[:appPath] = appDataPath
54
+ @cfg[:version] = NormalizeXml::VERSION
55
+ @cfg[:logging] = false
56
+
57
+ @cfgFile = "normalizexml.yml"
58
+
59
+ # Set the config file path. Default is the 'global' one in APPDATA.
60
+ if( @rootDir.nil? )
61
+ @rootDir = appDataPath
62
+ @cfgFile = "config.yml"
63
+
64
+ # Override the gobal config if there is a local (current working dir) version.
65
+ if(File.exists?(File.join(FileUtils.pwd(), "normalizexml.yml")))
66
+ @rootDir = FileUtils.pwd()
67
+ @cfgFile = "normalizexml.yml"
68
+ end
69
+ end
70
+ end
71
+
72
+
73
+ # Load the YAML configuration file.
74
+ # returns:: a hash containing configuration info.
75
+ def load
76
+ $LOG.debug "Config::load"
77
+ tmpCfg = read(@cfgFile)
78
+ @cfg = tmpCfg if !tmpCfg.nil? && !tmpCfg.empty?
79
+ @cfg
80
+ end
81
+
82
+
83
+ # Save the @cfg hash to a YAML file.
84
+ def save
85
+ $LOG.debug "Config::save"
86
+ write(@cfgFile, @cfg)
87
+ end
88
+
89
+
90
+ end # class Config
91
+
92
+
93
+ end # module NormalizeXml
@@ -0,0 +1,83 @@
1
+ ##############################################################################
2
+ # File:: controller.rb
3
+ # Purpose:: Main Controller object for NormalizeXml utility
4
+ #
5
+ # Author:: Jeff McAffee 09/03/2010
6
+ # Copyright:: Copyright (c) 2010, kTech Systems LLC. All rights reserved.
7
+ # Website:: http://ktechsystems.com
8
+ ##############################################################################
9
+
10
+ require 'ktcommon/ktpath'
11
+ require 'ktcommon/ktcmdline'
12
+
13
+ ##############################################################################
14
+ # Everything is contained in Module NormalizeXml
15
+ module NormalizeXml
16
+
17
+ class Controller
18
+
19
+ attr_accessor :someFlag
20
+ attr_accessor :model
21
+ attr_reader :verbose
22
+
23
+ def initialize()
24
+ $LOG.debug "Controller::initialize"
25
+ @cfg = Config.new.load
26
+ @someFlag = false
27
+ @model = Parser.new
28
+ @model.verbose = false
29
+ end
30
+
31
+
32
+ def verbose(arg)
33
+ $LOG.debug "Controller::verbose( #{arg} )"
34
+ puts "Verbose mode: #{arg.to_s}" if @verbose || arg
35
+ @model.verbose = arg
36
+ end
37
+
38
+
39
+ def verbose=(arg)
40
+ $LOG.debug "Controller::verbose=( #{arg} )"
41
+ return verbose(arg)
42
+ end
43
+
44
+
45
+ def infile=(infile)
46
+ @model.infile = infile
47
+ end
48
+
49
+
50
+ def outfile=(outfile)
51
+ @model.outfile = outfile
52
+ end
53
+
54
+
55
+ def doSomethingWithSwitch(arg)
56
+ $LOG.debug "Controller::doSomethingWithSwitch( #{arg} )"
57
+ end
58
+
59
+
60
+ def doSomethingWithCmdLineArg(arg)
61
+ $LOG.debug "Controller::doSomethingWithCmdLineArg( #{arg} )"
62
+ #raise ArgumentError.new("Unexpected argument: #{arg}")
63
+ return true # I want cmd line args
64
+ end
65
+
66
+
67
+ def noCmdLineArg()
68
+ $LOG.debug "Controller::noCmdLineArg"
69
+ raise ArgumentError.new("Argument expected.")
70
+ return false # No arg, no worky.
71
+ end
72
+
73
+
74
+ def normalize()
75
+ $LOG.debug "Controller::normalize"
76
+ @model.normalize()
77
+ end
78
+
79
+
80
+ end # class Controller
81
+
82
+
83
+ end # module NormalizeXml