normalizexml 0.1.2

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.
@@ -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