nori 2.7.0 → 2.7.1

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: 6515a0d2251bf29125e62c2d84f2af5a8476bd61e034366a5a648e50cf828f82
4
- data.tar.gz: 68cff0141890e2bbc25318a6661a0b575d8920728455db6140cc17857434a798
3
+ metadata.gz: e562b494afc72df387f136e51af0c5e0445b528b5515eedad7f60b3d49d207a5
4
+ data.tar.gz: 5eabad83b50392e39973058c70d6307ddaaeea47934c292fbd472ee0f93680f9
5
5
  SHA512:
6
- metadata.gz: 54053888a425e88dc43628927d911e3eb1c087d86d5140febe0ca0a3acc21eacb156a9ae43a1e609b20a89d83eb13f360c15ecb7bc3d70208b00088ea92e7b4c
7
- data.tar.gz: 3d3c2eb4b821d260198fa223dfd1c186d17e821cbeea1741284af38216b397a1ac6c6e49f9d18963c0638ed09163e300f2f017dca718aa3bda07704d1d30dc5a
6
+ metadata.gz: 6366a2ac0d9dd99e4fd7b0f32d95dfb21f76885ab18fc7f3f7767c5e257b61e3817d2bf13f9a113feb2482fdb6f5a912956ef5d17a3f868a9139e9b55683402f
7
+ data.tar.gz: cf295850b06961ed67644a8c06c61152cecf5c8512f8a74a03115e47fe8f9a567300d9af8d91504013777400882869cb7016c80563015e6423e86718c7b828bd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 2.7.1 (2024-07-28)
2
+
3
+ * Stop monkey-patching String with #snakecase by @mchu in https://github.com/savonrb/nori/pull/102
4
+
1
5
  # 2.7.0 (2024-02-13)
2
6
 
3
7
  * Added support for ruby 3.1, 3.2, 3.3. Dropped support for ruby 2.7 and below.
@@ -12,6 +16,20 @@
12
16
  # 2.5.0 (2015-03-31)
13
17
 
14
18
  * Formally drop support for ruby 1.8.7. Installing Nori from rubygems for that version should no longer attempt to install versions that will not work.
19
+ * BREAKING CHANGE: Newlines are now preserved when present in the value of inner text nodes. See the example below:
20
+
21
+ before:
22
+
23
+ ```
24
+ Nori.new.parse("<outer>\n&lt;embedded&gt;\n&lt;one&gt;&lt;/one&gt;\n&lt;two&gt;&lt;/two&gt;\n&lt;embedded&gt;\n</outer>")
25
+ => {"outer"=>"<embedded><one></one><two></two><embedded>"}
26
+ ```
27
+
28
+ after:
29
+ ```
30
+ Nori.new.parse("<outer>\n&lt;embedded&gt;\n&lt;one&gt;&lt;/one&gt;\n&lt;two&gt;&lt;/two&gt;\n&lt;embedded&gt;\n</outer>")
31
+ => {"outer"=>"<embedded>\n<one></one>\n<two></two>\n<embedded>\n"}
32
+ ```
15
33
 
16
34
  # 2.4.0 (2014-04-19)
17
35
 
data/README.md CHANGED
@@ -89,7 +89,7 @@ Nori lets you specify a custom formula to convert XML tags to Hash keys using `c
89
89
  Nori.new.parse('<userResponse><accountStatus>active</accountStatus></userResponse>')
90
90
  # => {"userResponse"=>{"accountStatus"=>"active"}}
91
91
 
92
- parser = Nori.new(:convert_tags_to => lambda { |tag| tag.snakecase.to_sym })
92
+ parser = Nori.new(:convert_tags_to => lambda { |tag| Nori::StringUtils.snakecase(tag).to_sym })
93
93
  parser.parse('<userResponse><accountStatus>active</accountStatus></userResponse>')
94
94
  # => {:user_response=>{:account_status=>"active"}}
95
95
  ```
@@ -27,7 +27,7 @@ class Nori
27
27
  # #=> 'one="1" two="TWO"'
28
28
  def to_xml_attributes
29
29
  map do |k, v|
30
- %{#{k.to_s.snakecase.sub(/^(.{1,1})/) { |m| m.downcase }}="#{v}"}
30
+ %{#{StringUtils.snakecase(k.to_s).sub(/^(.{1,1})/) { |m| m.downcase }}="#{v}"}
31
31
  end.join(' ')
32
32
  end
33
33
 
data/lib/nori/core_ext.rb CHANGED
@@ -1,2 +1,2 @@
1
- require "nori/core_ext/string"
1
+ require "nori/string_utils"
2
2
  require "nori/core_ext/hash"
@@ -0,0 +1,18 @@
1
+ class Nori
2
+ module StringUtils
3
+ # Converts a string to snake case.
4
+ #
5
+ # @param inputstring [String] The string to be converted to snake case.
6
+ # @return [String] A copy of the input string converted to snake case.
7
+ def self.snakecase(inputstring)
8
+ str = inputstring.dup
9
+ str.gsub!(/::/, '/')
10
+ str.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
11
+ str.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
12
+ str.tr!(".", "_")
13
+ str.tr!("-", "_")
14
+ str.downcase!
15
+ str
16
+ end
17
+ end
18
+ end
data/lib/nori/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Nori
2
- VERSION = '2.7.0'
2
+ VERSION = '2.7.1'
3
3
  end
@@ -55,7 +55,7 @@ describe Nori do
55
55
  it "converts all tags by a given formula" do
56
56
  xml = '<userResponse id="1"><accountStatus>active</accountStatus></userResponse>'
57
57
 
58
- snakecase_symbols = lambda { |tag| tag.snakecase.to_sym }
58
+ snakecase_symbols = lambda { |tag| Nori::StringUtils.snakecase(tag).to_sym }
59
59
  nori = nori(:convert_tags_to => snakecase_symbols)
60
60
 
61
61
  expect(nori.parse(xml)).to eq({ :user_response => { :@id => "1", :account_status => "active" } })
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Nori::StringUtils do
4
+
5
+ describe ".snakecase" do
6
+ it "lowercases one word CamelCase" do
7
+ expect(Nori::StringUtils.snakecase("Merb")).to eq("merb")
8
+ end
9
+
10
+ it "makes one underscore snakecase two word CamelCase" do
11
+ expect(Nori::StringUtils.snakecase("MerbCore")).to eq("merb_core")
12
+ end
13
+
14
+ it "handles CamelCase with more than 2 words" do
15
+ expect(Nori::StringUtils.snakecase("SoYouWantContributeToMerbCore")).to eq("so_you_want_contribute_to_merb_core")
16
+ end
17
+
18
+ it "handles CamelCase with more than 2 capital letter in a row" do
19
+ expect(Nori::StringUtils.snakecase("CNN")).to eq("cnn")
20
+ expect(Nori::StringUtils.snakecase("CNNNews")).to eq("cnn_news")
21
+ expect(Nori::StringUtils.snakecase("HeadlineCNNNews")).to eq("headline_cnn_news")
22
+ end
23
+
24
+ it "does NOT change one word lowercase" do
25
+ expect(Nori::StringUtils.snakecase("merb")).to eq("merb")
26
+ end
27
+
28
+ it "leaves snake_case as is" do
29
+ expect(Nori::StringUtils.snakecase("merb_core")).to eq("merb_core")
30
+ end
31
+ end
32
+
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nori
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Harrington
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2024-02-13 00:00:00.000000000 Z
13
+ date: 2024-07-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bigdecimal
@@ -89,18 +89,18 @@ files:
89
89
  - lib/nori.rb
90
90
  - lib/nori/core_ext.rb
91
91
  - lib/nori/core_ext/hash.rb
92
- - lib/nori/core_ext/string.rb
93
92
  - lib/nori/parser/nokogiri.rb
94
93
  - lib/nori/parser/rexml.rb
95
94
  - lib/nori/string_io_file.rb
95
+ - lib/nori/string_utils.rb
96
96
  - lib/nori/string_with_attributes.rb
97
97
  - lib/nori/version.rb
98
98
  - lib/nori/xml_utility_node.rb
99
99
  - nori.gemspec
100
100
  - spec/nori/api_spec.rb
101
101
  - spec/nori/core_ext/hash_spec.rb
102
- - spec/nori/core_ext/string_spec.rb
103
102
  - spec/nori/nori_spec.rb
103
+ - spec/nori/string_utils_spec.rb
104
104
  - spec/spec_helper.rb
105
105
  homepage: https://github.com/savonrb/nori
106
106
  licenses:
@@ -1,21 +0,0 @@
1
- class Nori
2
- module CoreExt
3
- module String
4
-
5
- # Returns the String in snake_case.
6
- def snakecase
7
- str = dup
8
- str.gsub!(/::/, '/')
9
- str.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
10
- str.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
11
- str.tr! ".", "_"
12
- str.tr! "-", "_"
13
- str.downcase!
14
- str
15
- end unless method_defined?(:snakecase)
16
-
17
- end
18
- end
19
- end
20
-
21
- String.send :include, Nori::CoreExt::String
@@ -1,33 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe String do
4
-
5
- describe "#snakecase" do
6
- it "lowercases one word CamelCase" do
7
- expect("Merb".snakecase).to eq("merb")
8
- end
9
-
10
- it "makes one underscore snakecase two word CamelCase" do
11
- expect("MerbCore".snakecase).to eq("merb_core")
12
- end
13
-
14
- it "handles CamelCase with more than 2 words" do
15
- expect("SoYouWantContributeToMerbCore".snakecase).to eq("so_you_want_contribute_to_merb_core")
16
- end
17
-
18
- it "handles CamelCase with more than 2 capital letter in a row" do
19
- expect("CNN".snakecase).to eq("cnn")
20
- expect("CNNNews".snakecase).to eq("cnn_news")
21
- expect("HeadlineCNNNews".snakecase).to eq("headline_cnn_news")
22
- end
23
-
24
- it "does NOT change one word lowercase" do
25
- expect("merb".snakecase).to eq("merb")
26
- end
27
-
28
- it "leaves snake_case as is" do
29
- expect("merb_core".snakecase).to eq("merb_core")
30
- end
31
- end
32
-
33
- end