ipynbdiff 0.4.2 → 0.4.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd4b3e7e96694361ee62a498007e9bda9165b47b2ef9a31b41322cf8cdd8781f
4
- data.tar.gz: 1680189fc74e0b8e8909d671ce3b77abff51e8ccd0d4304cf088b43a3254a311
3
+ metadata.gz: 0f26544b121fc120490029ee5e708efbd1e90ad085e5bf973fbb29214a04d7c8
4
+ data.tar.gz: cbcfa68cdf53ce539374c3053b95d7ebb4e27e57d09bf77b23b1f1297bced097
5
5
  SHA512:
6
- metadata.gz: fd5cf9cad8f9c20db2051a8b66a998a8174d066ca71e8a45c7bb5e1e274478919ed44fee1a38b296b7a5c679df686da96e402c750d51df0a68db7328260181a7
7
- data.tar.gz: a7ba937ec71caa7a5a5a31cd47ea047f9b2518bd6c7f8a61f120b62deb7d3e6a07dc8ba76e8719b725dab8b6f78cb9b86771273a5a46d9798d744c2bc25d00bf
6
+ metadata.gz: 897ddec211a46b69ab9cdd8a0ecddc946c67f1a51557f7205a305ae1ce35a32890120a1cb640082b4f3d7e8739c2172e56085d2987badfa32775adc48ca87b1d
7
+ data.tar.gz: 7516f6c3b5ac3d2a38f3ea78c54f293b49643260321f4ca452d46d4adc11e6d9447de4938cc5cb9de2c6b9d9b71abebf407de7252edffe3df51e997c919622fe
@@ -7,8 +7,8 @@ module IpynbDiff
7
7
  # Creates a symbol map for a ipynb file (JSON format)
8
8
  class IpynbSymbolMap
9
9
  class << self
10
- def parse(notebook)
11
- IpynbSymbolMap.new(notebook).parse('')
10
+ def parse(notebook, objects_to_ignore = [])
11
+ IpynbSymbolMap.new(notebook, objects_to_ignore).parse('')
12
12
  end
13
13
  end
14
14
 
@@ -18,14 +18,17 @@ module IpynbDiff
18
18
 
19
19
  VALUE_STOPPERS = [',', '[', ']', '{', '}', *WHITESPACE_CHARS].freeze
20
20
 
21
- def initialize(notebook)
21
+ def initialize(notebook, objects_to_ignore = [])
22
22
  @chars = notebook.chars
23
23
  @current_line = 0
24
24
  @char_idx = 0
25
25
  @results = {}
26
+ @objects_to_ignore = objects_to_ignore
26
27
  end
27
28
 
28
29
  def parse(prefix = '.')
30
+ raise_if_file_ended
31
+
29
32
  skip_whitespaces
30
33
 
31
34
  if (c = current_char) == '"'
@@ -49,6 +52,8 @@ module IpynbDiff
49
52
  current_should_be '['
50
53
 
51
54
  loop do
55
+ raise_if_file_ended
56
+
52
57
  break if skip_beginning(']')
53
58
 
54
59
  new_prefix = "#{prefix}.#{i}"
@@ -67,13 +72,11 @@ module IpynbDiff
67
72
  current_should_be '{'
68
73
 
69
74
  loop do
70
- break if skip_beginning('}')
71
-
72
- prop_name = parse_string
75
+ raise_if_file_ended
73
76
 
74
- new_prefix = "#{prefix}.#{prop_name}"
77
+ break if skip_beginning('}')
75
78
 
76
- add_result(new_prefix, current_line)
79
+ prop_name = parse_string(return_value: true)
77
80
 
78
81
  next_and_skip_whitespaces
79
82
 
@@ -81,24 +84,34 @@ module IpynbDiff
81
84
 
82
85
  next_and_skip_whitespaces
83
86
 
84
- parse(new_prefix)
87
+ if @objects_to_ignore.include? prop_name
88
+ skip
89
+ else
90
+ new_prefix = "#{prefix}.#{prop_name}"
91
+
92
+ add_result(new_prefix, current_line)
93
+
94
+ parse(new_prefix)
95
+ end
85
96
  end
86
97
  end
87
98
 
88
- def parse_string
89
- value = ''
90
- prev_char = nil
91
-
99
+ def parse_string(return_value: false)
92
100
  current_should_be '"'
101
+ init_idx = @char_idx
93
102
 
94
103
  loop do
95
104
  increment_char_index
96
- break if (c = current_char) == '"' && prev_char != '\\'
97
105
 
98
- value += (prev_char = c)
106
+ raise_if_file_ended
107
+
108
+ if current_char == '"' && !prev_backslash?
109
+ init_idx += 1
110
+ break
111
+ end
99
112
  end
100
113
 
101
- value
114
+ @chars[init_idx...@char_idx].join if return_value
102
115
  end
103
116
 
104
117
  def add_result(key, line_number)
@@ -106,11 +119,12 @@ module IpynbDiff
106
119
  end
107
120
 
108
121
  def parse_value
109
- increment_char_index until VALUE_STOPPERS.include?(current_char)
122
+ increment_char_index until raise_if_file_ended || VALUE_STOPPERS.include?(current_char)
110
123
  end
111
124
 
112
125
  def skip_whitespaces
113
126
  while WHITESPACE_CHARS.include?(current_char)
127
+ raise_if_file_ended
114
128
  check_for_new_line
115
129
  increment_char_index
116
130
  end
@@ -126,9 +140,15 @@ module IpynbDiff
126
140
  end
127
141
 
128
142
  def current_char
143
+ raise_if_file_ended
144
+
129
145
  @chars[@char_idx]
130
146
  end
131
147
 
148
+ def prev_backslash?
149
+ @chars[@char_idx - 1] == '\\' && @chars[@char_idx - 2] != '\\'
150
+ end
151
+
132
152
  def current_should_be(another_char)
133
153
  raise InvalidTokenError unless current_char == another_char
134
154
  end
@@ -137,6 +157,55 @@ module IpynbDiff
137
157
  @current_line += 1 if current_char == "\n"
138
158
  end
139
159
 
160
+ def raise_if_file_ended
161
+ @char_idx >= @chars.size && raise(InvalidTokenError)
162
+ end
163
+
164
+ def skip
165
+ raise_if_file_ended
166
+
167
+ skip_whitespaces
168
+
169
+ if (c = current_char) == '"'
170
+ parse_string
171
+ elsif c == '['
172
+ skip_array
173
+ elsif c == '{'
174
+ skip_object
175
+ else
176
+ parse_value
177
+ end
178
+ end
179
+
180
+ def skip_array
181
+ loop do
182
+ raise_if_file_ended
183
+
184
+ break if skip_beginning(']')
185
+
186
+ skip
187
+ end
188
+ end
189
+
190
+ def skip_object
191
+
192
+ loop do
193
+ raise_if_file_ended
194
+
195
+ break if skip_beginning('}')
196
+
197
+ parse_string
198
+
199
+ next_and_skip_whitespaces
200
+
201
+ current_should_be ':'
202
+
203
+ next_and_skip_whitespaces
204
+
205
+ skip
206
+ end
207
+ end
208
+
140
209
  def skip_beginning(closing_char)
141
210
 
142
211
  check_for_new_line
data/lib/transformer.rb CHANGED
@@ -15,6 +15,7 @@ module IpynbDiff
15
15
  include SymbolizedMarkdownHelper
16
16
 
17
17
  @include_frontmatter = true
18
+ @objects_to_ignore = ['application/javascript', 'application/vnd.holoviews_load.v0+json']
18
19
 
19
20
  def initialize(include_frontmatter: true)
20
21
  @include_frontmatter = include_frontmatter
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # lib/emoticon/version.rb
2
2
 
3
3
  module IpynbDiff
4
- VERSION = "0.4.2"
4
+ VERSION = "0.4.5"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ipynbdiff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo Bonet
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-01 00:00:00.000000000 Z
11
+ date: 2022-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diffy