xml-kit 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d54b8425fbadc4a5fc87ab86cb916a436126b1c0d396e79bf7d9610d0000aa2
4
- data.tar.gz: '096cf9d2ff95c8201044eb808a55a856a99f3f98f0b36f237e1eb9c07392aed8'
3
+ metadata.gz: 92595d5d43bb4007e57571a20debb1834216a6d0de1e36dfa32468e191c52a8d
4
+ data.tar.gz: 4e14e3bbe4117db3644e07de0ce66024d4f5a5f413966beb8a645b5f580843ae
5
5
  SHA512:
6
- metadata.gz: 4fb9ab21dab02c64219b6a65de104a759e2b603210362ff9a58c01147a32aa9c914d97018d405febc845604e3f727b9079d794b81dd955d600dcc71ea0f64b0b
7
- data.tar.gz: 8fe641c1031dbd7cc8d35786ff2baba1d33096c0fa4f2fb32430a62931eabe3cdc93668455cc9004ea86d0e4513451a201f79cc1867fbd904d99cfe0a11b08c1
6
+ metadata.gz: cdb268742b91d95fea4f68f7b33de0dab19b01b6e7e443d8c1c5772c3ae1191e6f98821ba80bf60a80cf8bffea257b87bd7897885bd562ad1a3c6fd9d990f115
7
+ data.tar.gz: dfe550c8a027fa240d53d9237e10d41c943679a2321dadaffd42a3ea3d97f25e1173718e12a13ae6bbd79c93e2421254096048a94c6c46d7487286fe826c7982
@@ -9,7 +9,7 @@ AllCops:
9
9
  - 'spec/fixtures/**/*'
10
10
  - 'tmp/**/*'
11
11
  - 'vendor/**/*'
12
- TargetRubyVersion: 2.2
12
+ TargetRubyVersion: 2.4
13
13
 
14
14
  Layout/ClassStructure:
15
15
  Enabled: true
@@ -30,12 +30,15 @@ Layout/ClassStructure:
30
30
  Layout/EndOfLine:
31
31
  EnforcedStyle: lf
32
32
 
33
- Layout/IndentArray:
33
+ Layout/IndentFirstArrayElement:
34
34
  EnforcedStyle: consistent
35
35
 
36
36
  Layout/IndentHeredoc:
37
37
  EnforcedStyle: active_support
38
38
 
39
+ Layout/MultilineOperationIndentation:
40
+ EnforcedStyle: indented
41
+
39
42
  Lint/AmbiguousBlockAssociation:
40
43
  Exclude:
41
44
  - 'spec/**/*.rb'
@@ -1,11 +1,12 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.2.10
5
- - 2.3.8
6
4
  - 2.4.6
7
5
  - 2.5.5
8
- - 2.6.2
6
+ - 2.6.3
7
+ before_install:
8
+ - gem update --system
9
+ - gem install bundler
9
10
  script:
10
11
  - bin/cibuild
11
12
  - bin/lint
@@ -1,4 +1,5 @@
1
- Version 0.3.1
1
+ Version 0.4.0
2
+
2
3
  # Changelog
3
4
  All notable changes to this project will be documented in this file.
4
5
 
@@ -6,9 +7,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
7
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
8
 
8
9
  ## [Unreleased]
9
- ### Changed
10
10
  - nil
11
11
 
12
+ ## [0.4.0] - 2019-04-30
13
+ ### Added
14
+ - provide stable API for specifying the digest method and signature method.
15
+
16
+ ### Changed
17
+ - drop support for ruby 2.2
18
+ - drop support for ruby 2.3
19
+ - use bundler 2.0
20
+
12
21
  ## [0.3.1] - 2019-04-01
13
22
  ### Changed
14
23
  - provide default symmetric cipher for `EncryptedData` element.
@@ -26,6 +35,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
26
35
  - errors are merged together instead of overwritten during attribute validation.
27
36
 
28
37
  [Unreleased]: https://github.com/saml-kit/xml-kit/compare/v0.3.1...HEAD
38
+ [Unreleased]: https://github.com/saml-kit/xml-kit/compare/v0.4.0...HEAD
39
+ [0.4.0]: https://github.com/saml-kit/xml-kit/compare/v0.3.1...v0.4.0
29
40
  [0.3.1]: https://github.com/saml-kit/xml-kit/compare/v0.3.0...v0.3.1
30
41
  [0.3.0]: https://github.com/saml-kit/xml-kit/compare/v0.2.0...v0.3.0
31
42
  [0.2.0]: https://github.com/saml-kit/xml-kit/compare/v0.1.14...v0.2.0
@@ -17,5 +17,5 @@ export RUBY_HEAP_SLOTS_INCREMENT=400000
17
17
  export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
18
18
 
19
19
  ruby -v
20
- gem install bundler --conservative
20
+ gem install bundler --conservative -v '~> 2.0'
21
21
  bin/test
@@ -35,6 +35,8 @@ require 'xml/kit/version'
35
35
 
36
36
  module Xml
37
37
  module Kit
38
+ class Error < StandardError; end
39
+
38
40
  class << self
39
41
  def logger
40
42
  @logger ||= Logger.new(STDOUT)
@@ -42,9 +44,13 @@ module Xml
42
44
 
43
45
  attr_writer :logger
44
46
 
45
- def deprecate(message)
47
+ def deprecate(name, alternative: nil)
46
48
  @deprecation ||= ActiveSupport::Deprecation.new('1.0.0', 'xml-kit')
47
- @deprecation.deprecation_warning(message)
49
+ if alternative
50
+ @deprecation.deprecation_warning(name, "Use `#{alternative}` instead")
51
+ else
52
+ @deprecation.deprecation_warning(name)
53
+ end
48
54
  end
49
55
  end
50
56
  end
@@ -4,7 +4,7 @@ module Xml
4
4
  module Kit
5
5
  module Crypto
6
6
  class OaepCipher
7
- ALGORITHM = "#{::Xml::Kit::Namespaces::XMLENC}rsa-oaep-mgf1p".freeze
7
+ ALGORITHM = "#{::Xml::Kit::Namespaces::XMLENC}rsa-oaep-mgf1p"
8
8
  ALGORITHMS = {
9
9
  ALGORITHM => true
10
10
  }.freeze
@@ -4,7 +4,7 @@ module Xml
4
4
  module Kit
5
5
  module Crypto
6
6
  class RsaCipher
7
- ALGORITHM = "#{::Xml::Kit::Namespaces::XMLENC}rsa-1_5".freeze
7
+ ALGORITHM = "#{::Xml::Kit::Namespaces::XMLENC}rsa-1_5"
8
8
  attr_reader :algorithm, :key
9
9
 
10
10
  def initialize(algorithm, key)
@@ -4,7 +4,7 @@ module Xml
4
4
  module Kit
5
5
  module Crypto
6
6
  class SymmetricCipher
7
- DEFAULT_ALGORITHM = "#{::Xml::Kit::Namespaces::XMLENC}aes256-cbc".freeze
7
+ DEFAULT_ALGORITHM = "#{::Xml::Kit::Namespaces::XMLENC}aes256-cbc"
8
8
  ALGORITHMS = {
9
9
  "#{::Xml::Kit::Namespaces::XMLENC}tripledes-cbc" => 'DES-EDE3-CBC',
10
10
  "#{::Xml::Kit::Namespaces::XMLENC}aes128-cbc" => 'AES-128-CBC',
@@ -12,22 +12,20 @@ module Xml
12
12
  attr_reader :symmetric_cipher
13
13
  attr_reader :symmetric_cipher_value
14
14
 
15
- def initialize(
16
- raw_xml,
17
- id: Id.generate,
18
- symmetric_cipher: Xml::Kit::Crypto::SymmetricCipher.new,
19
- asymmetric_cipher:,
20
- key_info: nil
21
- )
15
+ def initialize(raw_xml,
16
+ id: Id.generate,
17
+ symmetric_cipher: nil,
18
+ asymmetric_cipher: nil,
19
+ key_info: nil)
22
20
  @id = id
23
- @symmetric_cipher = symmetric_cipher
21
+ @symmetric_cipher = symmetric_cipher ||
22
+ key_info.try(:symmetric_cipher) ||
23
+ Xml::Kit::Crypto::SymmetricCipher.new
24
24
  @symmetric_cipher_value = Base64.strict_encode64(
25
- symmetric_cipher.encrypt(raw_xml)
26
- )
27
- @key_info = key_info || create_key_info_for(
28
- symmetric_cipher,
29
- asymmetric_cipher
25
+ @symmetric_cipher.encrypt(raw_xml)
30
26
  )
27
+ @key_info = key_info ||
28
+ create_key_info_for(@symmetric_cipher, asymmetric_cipher)
31
29
  end
32
30
 
33
31
  def to_xml(xml: ::Builder::XmlMarkup.new)
@@ -14,15 +14,16 @@ module Xml
14
14
  attr_reader :asymmetric_cipher, :symmetric_cipher
15
15
  attr_accessor :key_info
16
16
 
17
- def initialize(
18
- id: Id.generate,
19
- asymmetric_cipher:,
20
- symmetric_cipher: Xml::Kit::Crypto::SymmetricCipher.new,
21
- key_info: nil
22
- )
17
+ def initialize(id: Id.generate,
18
+ asymmetric_cipher: nil,
19
+ symmetric_cipher: nil,
20
+ key_info: nil)
23
21
  @id = id
24
- @asymmetric_cipher = asymmetric_cipher
25
- @symmetric_cipher = symmetric_cipher
22
+ @asymmetric_cipher = asymmetric_cipher ||
23
+ key_info.try(:asymmetric_cipher)
24
+ @symmetric_cipher = symmetric_cipher ||
25
+ key_info.try(:symmetric_cipher) ||
26
+ Xml::Kit::Crypto::SymmetricCipher.new
26
27
  @key_info = key_info
27
28
  end
28
29
 
@@ -4,21 +4,20 @@ module Xml
4
4
  module Kit
5
5
  # @deprecated Use {#Xml::Kit::EncryptedData} class instead of this
6
6
  class Encryption < EncryptedData
7
+ DEFAULT_SYMMETRIC = Crypto::SymmetricCipher::DEFAULT_ALGORITHM
8
+ DEFAULT_ASYMMETRIC = Crypto::RsaCipher::ALGORITHM
9
+
7
10
  attr_reader :asymmetric_algorithm
8
11
  attr_reader :symmetric_algorithm
9
12
  attr_reader :symmetric_cipher_value
10
13
  attr_reader :key_info
11
14
 
12
- def initialize(
13
- raw_xml,
14
- public_key,
15
- symmetric_algorithm: Crypto::SymmetricCipher::DEFAULT_ALGORITHM,
16
- asymmetric_algorithm: Crypto::RsaCipher::ALGORITHM,
17
- key_info: nil
18
- )
15
+ def initialize(raw_xml, public_key,
16
+ symmetric_algorithm: DEFAULT_SYMMETRIC,
17
+ asymmetric_algorithm: DEFAULT_ASYMMETRIC, key_info: nil)
19
18
  @symmetric_algorithm = symmetric_algorithm
20
19
  @asymmetric_algorithm = asymmetric_algorithm
21
- Xml::Kit.deprecate('Encryption is deprecated. Use EncryptedData.')
20
+ Xml::Kit.deprecate('Encryption', alternative: 'EncryptedData')
22
21
  super(raw_xml,
23
22
  symmetric_cipher: symmetric(symmetric_algorithm),
24
23
  asymmetric_cipher: asymmetric(asymmetric_algorithm, public_key),
@@ -16,11 +16,31 @@ module Xml
16
16
  attr_accessor :x509_data
17
17
  attr_accessor :encrypted_key
18
18
 
19
- def initialize(x509: nil)
19
+ def initialize(x509: nil, encrypted_key: nil)
20
+ @encrypted_key = encrypted_key
20
21
  @x509_data = x509
21
22
  yield self if block_given?
22
23
  end
23
24
 
25
+ def asymmetric_cipher(algorithm: Crypto::RsaCipher::ALGORITHM)
26
+ return encrypted_key.asymmetric_cipher if encrypted_key
27
+
28
+ if x509_data
29
+ return Crypto.cipher_for(
30
+ derive_algorithm_from(x509_data.public_key),
31
+ x509_data.public_key
32
+ )
33
+ end
34
+
35
+ super(algorithm: algorithm)
36
+ end
37
+
38
+ def symmetric_cipher
39
+ return super if encrypted_key.nil?
40
+
41
+ encrypted_key.symmetric_cipher
42
+ end
43
+
24
44
  def key_value
25
45
  @key_value ||= KeyValue.new
26
46
  end
@@ -35,6 +55,17 @@ module Xml
35
55
 
36
56
  Base64.strict_encode64(ski.value)
37
57
  end
58
+
59
+ private
60
+
61
+ def derive_algorithm_from(key)
62
+ case key
63
+ when OpenSSL::PKey::RSA
64
+ "#{::Xml::Kit::Namespaces::XMLENC}rsa-1_5"
65
+ else
66
+ raise ::Xml::Kit::Error, "#{key.try(:class)} is not supported"
67
+ end
68
+ end
38
69
  end
39
70
  end
40
71
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Xml
2
4
  module Kit
3
5
  class KeyInfo
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Xml
2
4
  module Kit
3
5
  class KeyInfo
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Xml
2
4
  module Kit
3
5
  class KeyInfo
@@ -30,12 +30,10 @@ module Xml
30
30
  # @param use [Symbol] Can be either `:signing` or `:encryption`.
31
31
  # @param passphrase [String] the passphrase to use to encrypt the private key.
32
32
  # @param algorithm [String] the symmetric algorithm to use for encrypting the private key.
33
- def self.generate(
34
- use:,
35
- passphrase: SecureRandom.uuid,
36
- algorithm: ::Xml::Kit::Crypto::SymmetricCipher::DEFAULT_ALGORITHM
37
- )
38
- algorithm = ::Xml::Kit::Crypto::SymmetricCipher::ALGORITHMS[algorithm]
33
+ def self.generate(use:,
34
+ passphrase: SecureRandom.uuid,
35
+ algorithm: Crypto::SymmetricCipher::DEFAULT_ALGORITHM)
36
+ algorithm = Crypto::SymmetricCipher::ALGORITHMS[algorithm]
39
37
  certificate, private_key = SelfSignedCertificate.new.create(
40
38
  algorithm: algorithm,
41
39
  passphrase: passphrase
@@ -3,18 +3,18 @@
3
3
  module Xml
4
4
  module Kit
5
5
  module Namespaces
6
- CANONICALIZATION = 'http://www.w3.org/2001/10/xml-exc-c14n#'.freeze
7
- ENVELOPED_SIG = 'http://www.w3.org/2000/09/xmldsig#enveloped-signature'.freeze
8
- RSA_SHA1 = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1'.freeze
9
- RSA_SHA256 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'.freeze
10
- RSA_SHA384 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'.freeze
11
- RSA_SHA512 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha512'.freeze
12
- SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1'.freeze
13
- SHA256 = 'http://www.w3.org/2001/04/xmlenc#sha256'.freeze
14
- SHA384 = 'http://www.w3.org/2001/04/xmldsig-more#sha384'.freeze
15
- SHA512 = 'http://www.w3.org/2001/04/xmlenc#sha512'.freeze
16
- XMLDSIG = 'http://www.w3.org/2000/09/xmldsig#'.freeze
17
- XMLENC = 'http://www.w3.org/2001/04/xmlenc#'.freeze
6
+ CANONICALIZATION = 'http://www.w3.org/2001/10/xml-exc-c14n#'
7
+ ENVELOPED_SIG = 'http://www.w3.org/2000/09/xmldsig#enveloped-signature'
8
+ RSA_SHA1 = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1'
9
+ RSA_SHA256 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'
10
+ RSA_SHA384 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
11
+ RSA_SHA512 = 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha512'
12
+ SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1'
13
+ SHA256 = 'http://www.w3.org/2001/04/xmlenc#sha256'
14
+ SHA384 = 'http://www.w3.org/2001/04/xmldsig-more#sha384'
15
+ SHA512 = 'http://www.w3.org/2001/04/xmlenc#sha512'
16
+ XMLDSIG = 'http://www.w3.org/2000/09/xmldsig#'
17
+ XMLENC = 'http://www.w3.org/2001/04/xmlenc#'
18
18
  end
19
19
  end
20
20
  end
@@ -3,13 +3,11 @@
3
3
  module Xml
4
4
  module Kit
5
5
  class SelfSignedCertificate
6
- SUBJECT = '/C=CA/ST=AB/L=Calgary/O=XmlKit/OU=XmlKit/CN=XmlKit'.freeze
6
+ SUBJECT = '/C=CA/ST=AB/L=Calgary/O=XmlKit/OU=XmlKit/CN=XmlKit'
7
7
 
8
- def create(
9
- algorithm: 'AES-256-CBC',
10
- passphrase: nil,
11
- key_pair: OpenSSL::PKey::RSA.new(2048)
12
- )
8
+ def create(algorithm: 'AES-256-CBC',
9
+ passphrase: nil,
10
+ key_pair: OpenSSL::PKey::RSA.new(2048))
13
11
  certificate = certificate_for(key_pair.public_key)
14
12
  certificate.sign(key_pair, OpenSSL::Digest::SHA256.new)
15
13
  [certificate.to_pem, export(key_pair, algorithm, passphrase)]
@@ -15,7 +15,7 @@ module Xml
15
15
  SHA512: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha512',
16
16
  }.freeze
17
17
  DIGEST_METHODS = {
18
- SHA1: 'http://www.w3.org/2000/09/xmldsig#SHA1',
18
+ SHA1: 'http://www.w3.org/2000/09/xmldsig#sha1',
19
19
  SHA224: 'http://www.w3.org/2001/04/xmldsig-more#sha224',
20
20
  SHA256: 'http://www.w3.org/2001/04/xmlenc#sha256',
21
21
  SHA384: 'http://www.w3.org/2001/04/xmldsig-more#sha384',
@@ -27,12 +27,10 @@ module Xml
27
27
  attr_reader :reference_id
28
28
  attr_reader :signature_method
29
29
 
30
- def initialize(
31
- reference_id,
32
- signature_method: :SH256,
33
- digest_method: :SHA256,
34
- certificate:
35
- )
30
+ def initialize(reference_id,
31
+ signature_method: :SH256,
32
+ digest_method: :SHA256,
33
+ certificate:)
36
34
  @certificate = certificate
37
35
  @digest_method = DIGEST_METHODS[digest_method]
38
36
  @reference_id = reference_id
@@ -39,12 +39,10 @@ module Xml
39
39
  end
40
40
 
41
41
  # @!visibility private
42
- def self.sign(
43
- xml: ::Builder::XmlMarkup.new,
44
- key_pair:,
45
- signature_method: :SHA256,
46
- digest_method: :SHA256
47
- )
42
+ def self.sign(xml: ::Builder::XmlMarkup.new,
43
+ key_pair:,
44
+ signature_method: :SHA256,
45
+ digest_method: :SHA256)
48
46
  signatures = new(
49
47
  key_pair: key_pair,
50
48
  signature_method: signature_method,
@@ -17,6 +17,14 @@ module Xml
17
17
  # The [Xml::Kit::Certificate] that contains the public key to use for encrypting the document.
18
18
  attr_accessor :encryption_certificate
19
19
 
20
+ # Allows you to specify the digest method algorithm. (Default: SHA256)
21
+ # A list of digest methods can be found in [Xml::Kit::Signature].
22
+ attr_accessor :digest_method
23
+
24
+ # Allows you to specify the signature method algorithm. (Default: SHA256)
25
+ # A list of signature methods can be found in [Xml::Kit::Signature].
26
+ attr_accessor :signature_method
27
+
20
28
  # Returns the generated XML document with an XML Digital Signature and XML Encryption.
21
29
  def to_xml(xml: ::Builder::XmlMarkup.new, pretty: false)
22
30
  result = signatures.complete(render(self, xml: xml))
@@ -28,11 +36,12 @@ module Xml
28
36
  # @since 0.3.0
29
37
  # @param xml [Builder::XmlMarkup] the xml builder instance
30
38
  # @param id [String] the id of EncryptedKey element
31
- def encrypt_key_for(xml:, id:)
39
+ def encrypt_key_for(xml:, id:, key_info: nil)
32
40
  ::Xml::Kit::EncryptedKey.new(
33
41
  id: id,
34
42
  asymmetric_cipher: asymmetric_cipher,
35
- symmetric_cipher: symmetric_cipher
43
+ symmetric_cipher: symmetric_cipher,
44
+ key_info: key_info
36
45
  ).to_xml(xml: xml)
37
46
  end
38
47
 
@@ -67,6 +76,10 @@ module Xml
67
76
  # @abstract
68
77
  # @since 0.3.0
69
78
  def asymmetric_cipher(algorithm: Crypto::RsaCipher::ALGORITHM)
79
+ unless encryption_certificate
80
+ raise Xml::Kit::Error, 'encryption_certificate is not specified.'
81
+ end
82
+
70
83
  @asymmetric_cipher ||= Crypto.cipher_for(
71
84
  algorithm,
72
85
  encryption_certificate.public_key
@@ -94,9 +107,11 @@ module Xml
94
107
  # Allows you to specify which key pair to use for generating an XML digital signature.
95
108
  #
96
109
  # @param key_pair [Xml::Kit::KeyPair] the key pair to use for signing.
97
- def sign_with(key_pair)
110
+ def sign_with(key_pair, signature_method: :SHA256, digest_method: :SHA256)
98
111
  self.signing_key_pair = key_pair
99
112
  self.embed_signature = true
113
+ self.signature_method = signature_method
114
+ self.digest_method = digest_method
100
115
  signatures.sign_with(key_pair)
101
116
  end
102
117
 
@@ -118,19 +133,11 @@ module Xml
118
133
  def signatures
119
134
  @signatures ||= ::Xml::Kit::Signatures.new(
120
135
  key_pair: signing_key_pair,
121
- digest_method: digest_method,
122
- signature_method: signature_method
136
+ digest_method: digest_method || :SHA256,
137
+ signature_method: signature_method || :SHA256
123
138
  )
124
139
  end
125
140
 
126
- def digest_method
127
- :SHA256
128
- end
129
-
130
- def signature_method
131
- :SHA256
132
- end
133
-
134
141
  # @!visibility private
135
142
  def encrypt?
136
143
  encrypt && encryption_certificate
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Xml
4
4
  module Kit
5
- VERSION = '0.3.1'.freeze
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.description = 'A simple toolkit for working with XML.'
15
15
  spec.homepage = 'https://github.com/saml-kit/xml-kit'
16
16
  spec.license = 'MIT'
17
- spec.required_ruby_version = '>= 2.2.0'
17
+ spec.required_ruby_version = '~> 2.4'
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
20
  f.match(%r{^(test|spec|features)/})
@@ -26,9 +26,10 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.add_dependency 'activemodel', '>= 4.2.0'
28
28
  spec.add_dependency 'builder', '~> 3.2'
29
- spec.add_dependency 'nokogiri', '>= 1.8.5'
29
+ spec.add_dependency 'nokogiri', '~> 1.10'
30
30
  spec.add_dependency 'tilt', '>= 1.4.1'
31
31
  spec.add_dependency 'xmldsig', '~> 0.6'
32
+ spec.add_development_dependency 'bundler', '~> 2.0'
32
33
  spec.add_development_dependency 'bundler-audit', '~> 0.6'
33
34
  spec.add_development_dependency 'ffaker', '~> 2.7'
34
35
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xml-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo khan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-01 00:00:00.000000000 Z
11
+ date: 2019-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: nokogiri
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.8.5
47
+ version: '1.10'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.8.5
54
+ version: '1.10'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: tilt
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler-audit
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +206,7 @@ files:
192
206
  - ".travis.yml"
193
207
  - CHANGELOG.md
194
208
  - Gemfile
209
+ - Gemfile.lock
195
210
  - LICENSE.txt
196
211
  - README.md
197
212
  - Rakefile
@@ -249,16 +264,16 @@ require_paths:
249
264
  - lib
250
265
  required_ruby_version: !ruby/object:Gem::Requirement
251
266
  requirements:
252
- - - ">="
267
+ - - "~>"
253
268
  - !ruby/object:Gem::Version
254
- version: 2.2.0
269
+ version: '2.4'
255
270
  required_rubygems_version: !ruby/object:Gem::Requirement
256
271
  requirements:
257
272
  - - ">="
258
273
  - !ruby/object:Gem::Version
259
274
  version: '0'
260
275
  requirements: []
261
- rubygems_version: 3.0.2
276
+ rubygems_version: 3.0.3
262
277
  signing_key:
263
278
  specification_version: 4
264
279
  summary: A simple toolkit for working with XML.