allegro_api_client 0.0.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/.bundle/config +3 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +25 -0
- data/README.md +19 -0
- data/apiclient.gemspec +24 -0
- data/gems/ruby/2.1.0/bin/httparty +23 -0
- data/gems/ruby/2.1.0/bin/rake +23 -0
- data/gems/ruby/2.1.0/build_info/git_repository-0.0.11.info +1 -0
- data/gems/ruby/2.1.0/build_info/httparty-0.13.1.info +1 -0
- data/gems/ruby/2.1.0/build_info/multi_xml-0.5.5.info +1 -0
- data/gems/ruby/2.1.0/build_info/rake-10.3.2.info +1 -0
- data/gems/ruby/2.1.0/cache/git_repository-0.0.11.gem +0 -0
- data/gems/ruby/2.1.0/cache/httparty-0.13.1.gem +0 -0
- data/gems/ruby/2.1.0/cache/multi_xml-0.5.5.gem +0 -0
- data/gems/ruby/2.1.0/cache/rake-10.3.2.gem +0 -0
- data/gems/ruby/2.1.0/gems/git_repository-0.0.11/lib/git_repository.rb +62 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/.gitignore +10 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/.travis.yml +7 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/Gemfile +14 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/Guardfile +16 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/History +303 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/MIT-LICENSE +20 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/README.md +74 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/Rakefile +12 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/bin/httparty +117 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/cucumber.yml +1 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/aaws.rb +32 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/basic.rb +28 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/crack.rb +19 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/custom_parsers.rb +67 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/delicious.rb +37 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/google.rb +16 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/headers_and_user_agents.rb +6 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/nokogiri_html_parser.rb +22 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/rubyurl.rb +14 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/stackexchange.rb +24 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/tripit_sign_in.rb +33 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/twitter.rb +31 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/examples/whoismyrep.rb +10 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/basic_authentication.feature +20 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/command_line.feature +7 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/deals_with_http_error_codes.feature +26 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/digest_authentication.feature +20 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/handles_compressed_responses.feature +27 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/handles_multiple_formats.feature +57 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/steps/env.rb +22 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/steps/httparty_response_steps.rb +52 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/steps/httparty_steps.rb +43 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/steps/mongrel_helper.rb +94 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/steps/remote_service_steps.rb +74 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/supports_read_timeout_option.feature +13 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/supports_redirection.feature +22 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/features/supports_timeout_option.feature +13 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/httparty.gemspec +26 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty.rb +600 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/connection_adapter.rb +187 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/cookie_hash.rb +22 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/core_extensions.rb +32 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/exceptions.rb +29 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/hash_conversions.rb +51 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/logger/apache_logger.rb +22 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/logger/curl_logger.rb +48 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/logger/logger.rb +18 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/module_inheritable_attributes.rb +56 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/net_digest_auth.rb +84 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/parser.rb +141 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/request.rb +331 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/response.rb +72 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/response/headers.rb +31 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/lib/httparty/version.rb +3 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/script/release +42 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/delicious.xml +23 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/empty.xml +0 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/google.html +3 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generate.sh +29 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generated/1fe462c2.0 +16 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generated/bogushost.crt +13 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generated/ca.crt +16 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generated/ca.key +15 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generated/selfsigned.crt +14 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generated/server.crt +13 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/generated/server.key +15 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/ssl/openssl-exts.cnf +9 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/twitter.csv +2 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/twitter.json +1 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/twitter.xml +403 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/fixtures/undefined_method_add_node_for_nil.xml +2 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/connection_adapter_spec.rb +354 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/cookie_hash_spec.rb +83 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/exception_spec.rb +23 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/logger/apache_logger_spec.rb +26 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/logger/curl_logger_spec.rb +18 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/logger/logger_spec.rb +22 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/net_digest_auth_spec.rb +152 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/parser_spec.rb +165 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/request_spec.rb +638 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/response_spec.rb +221 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty/ssl_spec.rb +74 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/httparty_spec.rb +764 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/spec.opts +2 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/spec_helper.rb +37 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/support/ssl_test_helper.rb +47 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/support/ssl_test_server.rb +80 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/spec/support/stub_response.rb +43 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/website/css/common.css +47 -0
- data/gems/ruby/2.1.0/gems/httparty-0.13.1/website/index.html +73 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/.yardopts +8 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/CHANGELOG.md +93 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/CONTRIBUTING.md +49 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/LICENSE.md +20 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/README.md +97 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/Rakefile +21 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/lib/multi_xml.rb +296 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/lib/multi_xml/parsers/libxml.rb +30 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/lib/multi_xml/parsers/libxml2_parser.rb +74 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/lib/multi_xml/parsers/nokogiri.rb +32 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/lib/multi_xml/parsers/ox.rb +97 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/lib/multi_xml/parsers/rexml.rb +113 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/lib/multi_xml/version.rb +3 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/multi_xml.gemspec +24 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/spec/helper.rb +17 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/spec/multi_xml_spec.rb +43 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/spec/parser_shared_example.rb +694 -0
- data/gems/ruby/2.1.0/gems/multi_xml-0.5.5/spec/speed.rb +63 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/.autotest +7 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/.gemtest +0 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/.rubocop.yml +27 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/.togglerc +7 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/CONTRIBUTING.rdoc +34 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/History.rdoc +609 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/MIT-LICENSE +21 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/Manifest.txt +162 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/README.rdoc +137 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/Rakefile +81 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/bin/rake +33 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/command_line_usage.rdoc +158 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/example/Rakefile1 +38 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/example/Rakefile2 +35 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/example/a.c +6 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/example/b.c +6 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/example/main.c +11 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/glossary.rdoc +43 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/jamis.rb +591 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/proto_rake.rdoc +127 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/rake.1.gz +0 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/rakefile.rdoc +653 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/rational.rdoc +151 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.4.14.rdoc +23 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.4.15.rdoc +35 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.5.0.rdoc +53 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.5.3.rdoc +78 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.5.4.rdoc +46 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.6.0.rdoc +141 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.7.0.rdoc +119 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.7.1.rdoc +59 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.7.2.rdoc +121 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.7.3.rdoc +47 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.8.0.rdoc +114 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.8.2.rdoc +165 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.8.3.rdoc +112 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.8.4.rdoc +147 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.8.5.rdoc +53 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.8.6.rdoc +37 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.8.7.rdoc +55 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.0.rdoc +112 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.1.rdoc +52 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.2.2.rdoc +55 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.2.rdoc +49 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.3.rdoc +102 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.4.rdoc +60 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.5.rdoc +55 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-0.9.6.rdoc +64 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-10.0.0.rdoc +178 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-10.0.1.rdoc +58 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-10.0.2.rdoc +53 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-10.0.3.rdoc +191 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/doc/release_notes/rake-10.1.0.rdoc +61 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake.rb +78 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/alt_system.rb +110 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/application.rb +783 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/backtrace.rb +23 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/clean.rb +76 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/cloneable.rb +16 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/.document +0 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/compositepublisher.rb +21 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/ftptools.rb +137 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/publisher.rb +81 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/rubyforgepublisher.rb +18 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/sshpublisher.rb +61 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/contrib/sys.rb +4 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/cpu_counter.rb +109 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/default_loader.rb +14 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/dsl_definition.rb +198 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/early_time.rb +21 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/core.rb +25 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/module.rb +1 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/string.rb +173 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ext/time.rb +15 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_creation_task.rb +24 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_list.rb +414 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_task.rb +46 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_utils.rb +116 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/file_utils_ext.rb +144 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/gempackagetask.rb +4 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/invocation_chain.rb +56 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/invocation_exception_mixin.rb +16 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/linked_list.rb +103 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/loaders/makefile.rb +40 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/multi_task.rb +13 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/name_space.rb +38 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/packagetask.rb +202 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/pathmap.rb +3 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/phony.rb +15 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/private_reader.rb +20 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/promise.rb +99 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/pseudo_status.rb +29 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rake_module.rb +38 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rake_test_loader.rb +22 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rdoctask.rb +4 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/ruby182_test_unit_fix.rb +29 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/runtest.rb +27 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/scope.rb +42 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task.rb +383 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_argument_error.rb +7 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_arguments.rb +98 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/task_manager.rb +310 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/tasklib.rb +24 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/testtask.rb +212 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/thread_history_display.rb +48 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/thread_pool.rb +164 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/trace_output.rb +22 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/version.rb +7 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/lib/rake/win32.rb +56 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/rakelib/publish.rake +20 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/rakelib/test_times.rake +25 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/file_creation.rb +34 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/helper.rb +127 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/support/rakefile_definitions.rb +478 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/support/ruby_runner.rb +33 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_private_reader.rb +42 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake.rb +40 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_application.rb +641 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_application_options.rb +466 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_backtrace.rb +119 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_clean.rb +55 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_cpu_counter.rb +50 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_definitions.rb +79 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_directory_task.rb +63 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_dsl.rb +40 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_early_time.rb +31 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_extension.rb +59 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_creation_task.rb +56 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_list.rb +627 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_list_path_map.rb +8 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_task.rb +186 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_file_utils.rb +309 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_ftp_file.rb +74 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_functional.rb +482 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_invocation_chain.rb +64 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_linked_list.rb +84 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_makefile_loader.rb +46 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_multi_task.rb +58 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_name_space.rb +57 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_package_task.rb +79 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map.rb +168 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map_explode.rb +34 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_path_map_partial.rb +18 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_pseudo_status.rb +21 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_rake_test_loader.rb +20 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_reduce_compat.rb +26 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_require.rb +40 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_rules.rb +388 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_scope.rb +44 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task.rb +392 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_argument_parsing.rb +109 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_arguments.rb +127 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_lib.rb +9 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_manager.rb +178 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_manager_argument_resolution.rb +19 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_task_with_arguments.rb +171 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_test_task.rb +141 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_thread_pool.rb +142 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_top_level_functions.rb +71 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_rake_win32.rb +72 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_thread_history_display.rb +101 -0
- data/gems/ruby/2.1.0/gems/rake-10.3.2/test/test_trace_output.rb +52 -0
- data/gems/ruby/2.1.0/specifications/git_repository-0.0.11.gemspec +16 -0
- data/gems/ruby/2.1.0/specifications/httparty-0.13.1.gemspec +36 -0
- data/gems/ruby/2.1.0/specifications/multi_xml-0.5.5.gemspec +31 -0
- data/gems/ruby/2.1.0/specifications/rake-10.3.2.gemspec +43 -0
- data/rakefile.rb +33 -0
- data/src/APIClient.rb +23 -0
- data/test/test_git_repository_commit.rb +19 -0
- metadata +395 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2010-2013 Erik Michaels-Ober
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# MultiXML
|
|
2
|
+
|
|
3
|
+
[][gem]
|
|
4
|
+
[][travis]
|
|
5
|
+
[][gemnasium]
|
|
6
|
+
[][codeclimate]
|
|
7
|
+
[][coveralls]
|
|
8
|
+
|
|
9
|
+
[gem]: https://rubygems.org/gems/multi_xml
|
|
10
|
+
[travis]: http://travis-ci.org/sferik/multi_xml
|
|
11
|
+
[gemnasium]: https://gemnasium.com/sferik/multi_xml
|
|
12
|
+
[codeclimate]: https://codeclimate.com/github/sferik/multi_xml
|
|
13
|
+
[coveralls]: https://coveralls.io/r/sferik/multi_xml
|
|
14
|
+
|
|
15
|
+
A generic swappable back-end for XML parsing
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
gem install multi_xml
|
|
19
|
+
|
|
20
|
+
To ensure the code you're installing hasn't been tampered with, it's
|
|
21
|
+
recommended that you verify the signature. To do this, you need to add my
|
|
22
|
+
public key as a trusted certificate (you only need to do this once):
|
|
23
|
+
|
|
24
|
+
gem cert --add <(curl -Ls https://raw.github.com/sferik/multi_xml/master/certs/sferik.pem)
|
|
25
|
+
|
|
26
|
+
Then, install the gem with the high security trust policy:
|
|
27
|
+
|
|
28
|
+
gem install multi_xml -P HighSecurity
|
|
29
|
+
|
|
30
|
+
## Documentation
|
|
31
|
+
[http://rdoc.info/gems/multi_xml][documentation]
|
|
32
|
+
|
|
33
|
+
[documentation]: http://rdoc.info/gems/multi_xml
|
|
34
|
+
|
|
35
|
+
## Usage Examples
|
|
36
|
+
Lots of Ruby libraries utilize XML parsing in some form, and everyone has their
|
|
37
|
+
favorite XML library. In order to best support multiple XML parsers and
|
|
38
|
+
libraries, `multi_xml` is a general-purpose swappable XML backend library. You
|
|
39
|
+
use it like so:
|
|
40
|
+
```ruby
|
|
41
|
+
require 'multi_xml'
|
|
42
|
+
|
|
43
|
+
MultiXml.parser = :ox
|
|
44
|
+
MultiXml.parser = MultiXml::Parsers::Ox # Same as above
|
|
45
|
+
MultiXml.parse('<tag>This is the contents</tag>') # Parsed using Ox
|
|
46
|
+
|
|
47
|
+
MultiXml.parser = :libxml
|
|
48
|
+
MultiXml.parser = MultiXml::Parsers::Libxml # Same as above
|
|
49
|
+
MultiXml.parse('<tag>This is the contents</tag>') # Parsed using LibXML
|
|
50
|
+
|
|
51
|
+
MultiXml.parser = :nokogiri
|
|
52
|
+
MultiXml.parser = MultiXml::Parsers::Nokogiri # Same as above
|
|
53
|
+
MultiXml.parse('<tag>This is the contents</tag>') # Parsed using Nokogiri
|
|
54
|
+
|
|
55
|
+
MultiXml.parser = :rexml
|
|
56
|
+
MultiXml.parser = MultiXml::Parsers::Rexml # Same as above
|
|
57
|
+
MultiXml.parse('<tag>This is the contents</tag>') # Parsed using REXML
|
|
58
|
+
```
|
|
59
|
+
The `parser` setter takes either a symbol or a class (to allow for custom XML
|
|
60
|
+
parsers) that responds to `.parse` at the class level.
|
|
61
|
+
|
|
62
|
+
MultiXML tries to have intelligent defaulting. That is, if you have any of the
|
|
63
|
+
supported parsers already loaded, it will utilize them before attempting to
|
|
64
|
+
load any. When loading, libraries are ordered by speed: first Ox, then LibXML,
|
|
65
|
+
then Nokogiri, and finally REXML.
|
|
66
|
+
|
|
67
|
+
## Supported Ruby Versions
|
|
68
|
+
This library aims to support and is [tested against][travis] the following Ruby
|
|
69
|
+
implementations:
|
|
70
|
+
|
|
71
|
+
* Ruby 1.8.7
|
|
72
|
+
* Ruby 1.9.2
|
|
73
|
+
* Ruby 1.9.3
|
|
74
|
+
* Ruby 2.0.0
|
|
75
|
+
|
|
76
|
+
If something doesn't work on one of these interpreters, it's a bug.
|
|
77
|
+
|
|
78
|
+
This library may inadvertently work (or seem to work) on other Ruby
|
|
79
|
+
implementations, however support will only be provided for the versions listed
|
|
80
|
+
above.
|
|
81
|
+
|
|
82
|
+
If you would like this library to support another Ruby version, you may
|
|
83
|
+
volunteer to be a maintainer. Being a maintainer entails making sure all tests
|
|
84
|
+
run and pass on that implementation. When something breaks on your
|
|
85
|
+
implementation, you will be responsible for providing patches in a timely
|
|
86
|
+
fashion. If critical issues for a particular implementation exist at the time
|
|
87
|
+
of a major release, support for that Ruby version may be dropped.
|
|
88
|
+
|
|
89
|
+
## Inspiration
|
|
90
|
+
MultiXML was inspired by [MultiJSON][].
|
|
91
|
+
|
|
92
|
+
[multijson]: https://github.com/intridea/multi_json/
|
|
93
|
+
|
|
94
|
+
## Copyright
|
|
95
|
+
Copyright (c) 2010-2013 Erik Michaels-Ober. See [LICENSE][] for details.
|
|
96
|
+
|
|
97
|
+
[license]: LICENSE.md
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'bundler'
|
|
2
|
+
Bundler::GemHelper.install_tasks
|
|
3
|
+
|
|
4
|
+
require 'rspec/core/rake_task'
|
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
|
6
|
+
|
|
7
|
+
task :test => :spec
|
|
8
|
+
task :default => :spec
|
|
9
|
+
|
|
10
|
+
namespace :doc do
|
|
11
|
+
require 'yard'
|
|
12
|
+
YARD::Rake::YardocTask.new do |task|
|
|
13
|
+
task.files = ['lib/**/*.rb', '-', 'LICENSE.md']
|
|
14
|
+
task.options = [
|
|
15
|
+
'--no-private',
|
|
16
|
+
'--protected',
|
|
17
|
+
'--output-dir', 'doc/yard',
|
|
18
|
+
'--markup', 'markdown',
|
|
19
|
+
]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
require 'base64'
|
|
2
|
+
require 'bigdecimal'
|
|
3
|
+
require 'date'
|
|
4
|
+
require 'stringio'
|
|
5
|
+
require 'time'
|
|
6
|
+
require 'yaml'
|
|
7
|
+
|
|
8
|
+
module MultiXml
|
|
9
|
+
class ParseError < StandardError; end
|
|
10
|
+
class DisallowedTypeError < StandardError
|
|
11
|
+
def initialize(type)
|
|
12
|
+
super "Disallowed type attribute: #{type.inspect}"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
REQUIREMENT_MAP = [
|
|
17
|
+
['ox', :ox],
|
|
18
|
+
['libxml', :libxml],
|
|
19
|
+
['nokogiri', :nokogiri],
|
|
20
|
+
['rexml/document', :rexml]
|
|
21
|
+
] unless defined?(REQUIREMENT_MAP)
|
|
22
|
+
|
|
23
|
+
CONTENT_ROOT = '__content__'.freeze unless defined?(CONTENT_ROOT)
|
|
24
|
+
|
|
25
|
+
unless defined?(PARSING)
|
|
26
|
+
PARSING = {
|
|
27
|
+
'symbol' => Proc.new{|symbol| symbol.to_sym},
|
|
28
|
+
'date' => Proc.new{|date| Date.parse(date)},
|
|
29
|
+
'datetime' => Proc.new{|time| Time.parse(time).utc rescue DateTime.parse(time).utc},
|
|
30
|
+
'integer' => Proc.new{|integer| integer.to_i},
|
|
31
|
+
'float' => Proc.new{|float| float.to_f},
|
|
32
|
+
'decimal' => Proc.new{|number| BigDecimal(number)},
|
|
33
|
+
'boolean' => Proc.new{|boolean| !%w(0 false).include?(boolean.strip)},
|
|
34
|
+
'string' => Proc.new{|string| string.to_s},
|
|
35
|
+
'yaml' => Proc.new{|yaml| YAML::load(yaml) rescue yaml},
|
|
36
|
+
'base64Binary' => Proc.new{|binary| ::Base64.decode64(binary)},
|
|
37
|
+
'binary' => Proc.new{|binary, entity| parse_binary(binary, entity)},
|
|
38
|
+
'file' => Proc.new{|file, entity| parse_file(file, entity)},
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
PARSING.update(
|
|
42
|
+
'double' => PARSING['float'],
|
|
43
|
+
'dateTime' => PARSING['datetime']
|
|
44
|
+
)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
TYPE_NAMES = {
|
|
48
|
+
'Symbol' => 'symbol',
|
|
49
|
+
'Fixnum' => 'integer',
|
|
50
|
+
'Bignum' => 'integer',
|
|
51
|
+
'BigDecimal' => 'decimal',
|
|
52
|
+
'Float' => 'float',
|
|
53
|
+
'TrueClass' => 'boolean',
|
|
54
|
+
'FalseClass' => 'boolean',
|
|
55
|
+
'Date' => 'date',
|
|
56
|
+
'DateTime' => 'datetime',
|
|
57
|
+
'Time' => 'datetime',
|
|
58
|
+
'Array' => 'array',
|
|
59
|
+
'Hash' => 'hash'
|
|
60
|
+
} unless defined?(TYPE_NAMES)
|
|
61
|
+
|
|
62
|
+
DISALLOWED_XML_TYPES = %w(symbol yaml)
|
|
63
|
+
|
|
64
|
+
DEFAULT_OPTIONS = {
|
|
65
|
+
:typecast_xml_value => true,
|
|
66
|
+
:disallowed_types => DISALLOWED_XML_TYPES,
|
|
67
|
+
:symbolize_keys => false
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
class << self
|
|
71
|
+
# Get the current parser class.
|
|
72
|
+
def parser
|
|
73
|
+
return @parser if defined?(@parser)
|
|
74
|
+
self.parser = self.default_parser
|
|
75
|
+
@parser
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# The default parser based on what you currently
|
|
79
|
+
# have loaded and installed. First checks to see
|
|
80
|
+
# if any parsers are already loaded, then checks
|
|
81
|
+
# to see which are installed if none are loaded.
|
|
82
|
+
def default_parser
|
|
83
|
+
return :ox if defined?(::Ox)
|
|
84
|
+
return :libxml if defined?(::LibXML)
|
|
85
|
+
return :nokogiri if defined?(::Nokogiri)
|
|
86
|
+
|
|
87
|
+
REQUIREMENT_MAP.each do |library, parser|
|
|
88
|
+
begin
|
|
89
|
+
require library
|
|
90
|
+
return parser
|
|
91
|
+
rescue LoadError
|
|
92
|
+
next
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Set the XML parser utilizing a symbol, string, or class.
|
|
98
|
+
# Supported by default are:
|
|
99
|
+
#
|
|
100
|
+
# * <tt>:libxml</tt>
|
|
101
|
+
# * <tt>:nokogiri</tt>
|
|
102
|
+
# * <tt>:ox</tt>
|
|
103
|
+
# * <tt>:rexml</tt>
|
|
104
|
+
def parser=(new_parser)
|
|
105
|
+
case new_parser
|
|
106
|
+
when String, Symbol
|
|
107
|
+
require "multi_xml/parsers/#{new_parser.to_s.downcase}"
|
|
108
|
+
@parser = MultiXml::Parsers.const_get("#{new_parser.to_s.split('_').map{|s| s.capitalize}.join('')}")
|
|
109
|
+
when Class, Module
|
|
110
|
+
@parser = new_parser
|
|
111
|
+
else
|
|
112
|
+
raise "Did not recognize your parser specification. Please specify either a symbol or a class."
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Parse an XML string or IO into Ruby.
|
|
117
|
+
#
|
|
118
|
+
# <b>Options</b>
|
|
119
|
+
#
|
|
120
|
+
# <tt>:symbolize_keys</tt> :: If true, will use symbols instead of strings for the keys.
|
|
121
|
+
#
|
|
122
|
+
# <tt>:disallowed_types</tt> :: Types to disallow from being typecasted. Defaults to `['yaml', 'symbol']`. Use `[]` to allow all types.
|
|
123
|
+
#
|
|
124
|
+
# <tt>:typecast_xml_value</tt> :: If true, won't typecast values for parsed document
|
|
125
|
+
def parse(xml, options={})
|
|
126
|
+
xml ||= ''
|
|
127
|
+
|
|
128
|
+
options = DEFAULT_OPTIONS.merge(options)
|
|
129
|
+
|
|
130
|
+
xml.strip! if xml.respond_to?(:strip!)
|
|
131
|
+
begin
|
|
132
|
+
xml = StringIO.new(xml) unless xml.respond_to?(:read)
|
|
133
|
+
|
|
134
|
+
char = xml.getc
|
|
135
|
+
return {} if char.nil?
|
|
136
|
+
xml.ungetc(char)
|
|
137
|
+
|
|
138
|
+
hash = undasherize_keys(parser.parse(xml) || {})
|
|
139
|
+
hash = options[:typecast_xml_value] ? typecast_xml_value(hash, options[:disallowed_types]) : hash
|
|
140
|
+
rescue DisallowedTypeError
|
|
141
|
+
raise
|
|
142
|
+
rescue parser.parse_error => error
|
|
143
|
+
raise ParseError, error.message, error.backtrace
|
|
144
|
+
end
|
|
145
|
+
hash = symbolize_keys(hash) if options[:symbolize_keys]
|
|
146
|
+
hash
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# This module decorates files with the <tt>original_filename</tt>
|
|
150
|
+
# and <tt>content_type</tt> methods.
|
|
151
|
+
module FileLike #:nodoc:
|
|
152
|
+
attr_writer :original_filename, :content_type
|
|
153
|
+
|
|
154
|
+
def original_filename
|
|
155
|
+
@original_filename || 'untitled'
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def content_type
|
|
159
|
+
@content_type || 'application/octet-stream'
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
private
|
|
164
|
+
|
|
165
|
+
# TODO: Add support for other encodings
|
|
166
|
+
def parse_binary(binary, entity) #:nodoc:
|
|
167
|
+
case entity['encoding']
|
|
168
|
+
when 'base64'
|
|
169
|
+
Base64.decode64(binary)
|
|
170
|
+
else
|
|
171
|
+
binary
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def parse_file(file, entity)
|
|
176
|
+
f = StringIO.new(Base64.decode64(file))
|
|
177
|
+
f.extend(FileLike)
|
|
178
|
+
f.original_filename = entity['name']
|
|
179
|
+
f.content_type = entity['content_type']
|
|
180
|
+
f
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def symbolize_keys(params)
|
|
184
|
+
case params
|
|
185
|
+
when Hash
|
|
186
|
+
params.inject({}) do |result, (key, value)|
|
|
187
|
+
result.merge(key.to_sym => symbolize_keys(value))
|
|
188
|
+
end
|
|
189
|
+
when Array
|
|
190
|
+
params.map{|value| symbolize_keys(value)}
|
|
191
|
+
else
|
|
192
|
+
params
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def undasherize_keys(params)
|
|
197
|
+
case params
|
|
198
|
+
when Hash
|
|
199
|
+
params.inject({}) do |hash, (key, value)|
|
|
200
|
+
hash[key.to_s.tr('-', '_')] = undasherize_keys(value)
|
|
201
|
+
hash
|
|
202
|
+
end
|
|
203
|
+
when Array
|
|
204
|
+
params.map{|value| undasherize_keys(value)}
|
|
205
|
+
else
|
|
206
|
+
params
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
def typecast_xml_value(value, disallowed_types=nil)
|
|
211
|
+
disallowed_types ||= DISALLOWED_XML_TYPES
|
|
212
|
+
|
|
213
|
+
case value
|
|
214
|
+
when Hash
|
|
215
|
+
if value.include?('type') && !value['type'].is_a?(Hash) && disallowed_types.include?(value['type'])
|
|
216
|
+
raise DisallowedTypeError, value['type']
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
if value['type'] == 'array'
|
|
220
|
+
|
|
221
|
+
# this commented-out suggestion helps to avoid the multiple attribute
|
|
222
|
+
# problem, but it breaks when there is only one item in the array.
|
|
223
|
+
#
|
|
224
|
+
# from: https://github.com/jnunemaker/httparty/issues/102
|
|
225
|
+
#
|
|
226
|
+
# _, entries = value.detect { |k, v| k != 'type' && v.is_a?(Array) }
|
|
227
|
+
|
|
228
|
+
# This attempt fails to consider the order that the detect method
|
|
229
|
+
# retrieves the entries.
|
|
230
|
+
#_, entries = value.detect {|key, _| key != 'type'}
|
|
231
|
+
|
|
232
|
+
# This approach ignores attribute entries that are not convertable
|
|
233
|
+
# to an Array which allows attributes to be ignored.
|
|
234
|
+
_, entries = value.detect {|k, v| k != 'type' && (v.is_a?(Array) || v.is_a?(Hash)) }
|
|
235
|
+
|
|
236
|
+
if entries.nil? || (entries.is_a?(String) && entries.strip.empty?)
|
|
237
|
+
[]
|
|
238
|
+
else
|
|
239
|
+
case entries
|
|
240
|
+
when Array
|
|
241
|
+
entries.map {|entry| typecast_xml_value(entry, disallowed_types)}
|
|
242
|
+
when Hash
|
|
243
|
+
[typecast_xml_value(entries, disallowed_types)]
|
|
244
|
+
else
|
|
245
|
+
raise "can't typecast #{entries.class.name}: #{entries.inspect}"
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
elsif value.has_key?(CONTENT_ROOT)
|
|
249
|
+
content = value[CONTENT_ROOT]
|
|
250
|
+
if block = PARSING[value['type']]
|
|
251
|
+
if block.arity == 1
|
|
252
|
+
value.delete('type') if PARSING[value['type']]
|
|
253
|
+
if value.keys.size > 1
|
|
254
|
+
value[CONTENT_ROOT] = block.call(content)
|
|
255
|
+
value
|
|
256
|
+
else
|
|
257
|
+
block.call(content)
|
|
258
|
+
end
|
|
259
|
+
else
|
|
260
|
+
block.call(content, value)
|
|
261
|
+
end
|
|
262
|
+
else
|
|
263
|
+
value.keys.size > 1 ? value : content
|
|
264
|
+
end
|
|
265
|
+
elsif value['type'] == 'string' && value['nil'] != 'true'
|
|
266
|
+
''
|
|
267
|
+
# blank or nil parsed values are represented by nil
|
|
268
|
+
elsif value.empty? || value['nil'] == 'true'
|
|
269
|
+
nil
|
|
270
|
+
# If the type is the only element which makes it then
|
|
271
|
+
# this still makes the value nil, except if type is
|
|
272
|
+
# a XML node(where type['value'] is a Hash)
|
|
273
|
+
elsif value['type'] && value.size == 1 && !value['type'].is_a?(Hash)
|
|
274
|
+
nil
|
|
275
|
+
else
|
|
276
|
+
xml_value = value.inject({}) do |hash, (k, v)|
|
|
277
|
+
hash[k] = typecast_xml_value(v, disallowed_types)
|
|
278
|
+
hash
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# Turn {:files => {:file => #<StringIO>} into {:files => #<StringIO>} so it is compatible with
|
|
282
|
+
# how multipart uploaded files from HTML appear
|
|
283
|
+
xml_value['file'].is_a?(StringIO) ? xml_value['file'] : xml_value
|
|
284
|
+
end
|
|
285
|
+
when Array
|
|
286
|
+
value.map!{|i| typecast_xml_value(i, disallowed_types)}
|
|
287
|
+
value.length > 1 ? value : value.first
|
|
288
|
+
when String
|
|
289
|
+
value
|
|
290
|
+
else
|
|
291
|
+
raise "can't typecast #{value.class.name}: #{value.inspect}"
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'libxml' unless defined?(LibXML)
|
|
2
|
+
require 'multi_xml/parsers/libxml2_parser'
|
|
3
|
+
|
|
4
|
+
module MultiXml
|
|
5
|
+
module Parsers
|
|
6
|
+
module Libxml #:nodoc:
|
|
7
|
+
include Libxml2Parser
|
|
8
|
+
|
|
9
|
+
extend self
|
|
10
|
+
|
|
11
|
+
def parse_error() ::LibXML::XML::Error end
|
|
12
|
+
|
|
13
|
+
def parse(xml)
|
|
14
|
+
node_to_hash(LibXML::XML::Parser.io(xml).parse.root)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def each_child(node, &block)
|
|
18
|
+
node.each_child(&block)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def each_attr(node, &block)
|
|
22
|
+
node.each_attr(&block)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def node_name(node)
|
|
26
|
+
node.name
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|