iCuke 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/.gitignore +13 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +69 -0
  4. data/Rakefile +80 -0
  5. data/VERSION +1 -0
  6. data/app/iCuke/.gitignore +1 -0
  7. data/app/iCuke/Classes/FlipsideView.h +13 -0
  8. data/app/iCuke/Classes/FlipsideView.m +32 -0
  9. data/app/iCuke/Classes/FlipsideViewController.h +25 -0
  10. data/app/iCuke/Classes/FlipsideViewController.m +54 -0
  11. data/app/iCuke/Classes/MainView.h +15 -0
  12. data/app/iCuke/Classes/MainView.m +32 -0
  13. data/app/iCuke/Classes/MainViewController.h +16 -0
  14. data/app/iCuke/Classes/MainViewController.m +86 -0
  15. data/app/iCuke/Classes/iCukeAppDelegate.h +20 -0
  16. data/app/iCuke/Classes/iCukeAppDelegate.m +33 -0
  17. data/app/iCuke/FlipsideView.xib +444 -0
  18. data/app/iCuke/MainView.xib +520 -0
  19. data/app/iCuke/MainWindow.xib +355 -0
  20. data/app/iCuke/SniffingView.h +20 -0
  21. data/app/iCuke/SniffingView.m +191 -0
  22. data/app/iCuke/iCuke-Info.plist +30 -0
  23. data/app/iCuke/iCuke.xcodeproj/project.pbxproj +313 -0
  24. data/app/iCuke/iCuke_Prefix.pch +14 -0
  25. data/app/iCuke/main.m +16 -0
  26. data/ext/iCuke/.gitignore +2 -0
  27. data/ext/iCuke/DefaultsResponse.h +5 -0
  28. data/ext/iCuke/DefaultsResponse.m +67 -0
  29. data/ext/iCuke/EventResponse.h +5 -0
  30. data/ext/iCuke/EventResponse.m +122 -0
  31. data/ext/iCuke/Rakefile +22 -0
  32. data/ext/iCuke/Recorder.h +15 -0
  33. data/ext/iCuke/Recorder.m +85 -0
  34. data/ext/iCuke/RecorderResponse.h +5 -0
  35. data/ext/iCuke/RecorderResponse.m +59 -0
  36. data/ext/iCuke/SynthesizeSingleton.h +68 -0
  37. data/ext/iCuke/ViewResponse.h +5 -0
  38. data/ext/iCuke/ViewResponse.m +84 -0
  39. data/ext/iCuke/Viewer.h +8 -0
  40. data/ext/iCuke/Viewer.m +153 -0
  41. data/ext/iCuke/iCukeHTTPResponseHandler.h +50 -0
  42. data/ext/iCuke/iCukeHTTPResponseHandler.m +381 -0
  43. data/ext/iCuke/iCukeHTTPServer.h +53 -0
  44. data/ext/iCuke/iCukeHTTPServer.m +365 -0
  45. data/ext/iCuke/iCukeServer.h +16 -0
  46. data/ext/iCuke/iCukeServer.m +46 -0
  47. data/ext/iCuke/json/JSON.h +50 -0
  48. data/ext/iCuke/json/NSObject+SBJSON.h +68 -0
  49. data/ext/iCuke/json/NSObject+SBJSON.m +53 -0
  50. data/ext/iCuke/json/NSString+SBJSON.h +58 -0
  51. data/ext/iCuke/json/NSString+SBJSON.m +55 -0
  52. data/ext/iCuke/json/SBJSON.h +75 -0
  53. data/ext/iCuke/json/SBJSON.m +212 -0
  54. data/ext/iCuke/json/SBJsonBase.h +86 -0
  55. data/ext/iCuke/json/SBJsonBase.m +78 -0
  56. data/ext/iCuke/json/SBJsonParser.h +87 -0
  57. data/ext/iCuke/json/SBJsonParser.m +475 -0
  58. data/ext/iCuke/json/SBJsonWriter.h +129 -0
  59. data/ext/iCuke/json/SBJsonWriter.m +228 -0
  60. data/features/icuke.feature +17 -0
  61. data/features/support/env.rb +3 -0
  62. data/iCuke.gemspec +113 -0
  63. data/lib/icuke/cucumber.rb +211 -0
  64. data/lib/icuke/simulate.rb +132 -0
  65. data/lib/icuke/simulator.rb +107 -0
  66. data/lib/icuke.rb +1 -0
  67. metadata +163 -0
@@ -0,0 +1,55 @@
1
+ /*
2
+ Copyright (C) 2007-2009 Stig Brautaset. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the author nor the names of its contributors may be used
15
+ to endorse or promote products derived from this software without specific
16
+ prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #import "NSString+SBJSON.h"
31
+ #import "SBJsonParser.h"
32
+
33
+ @implementation NSString (NSString_SBJSON)
34
+
35
+ - (id)JSONFragmentValue
36
+ {
37
+ SBJsonParser *jsonParser = [SBJsonParser new];
38
+ id repr = [jsonParser fragmentWithString:self];
39
+ if (!repr)
40
+ NSLog(@"-JSONFragmentValue failed. Error trace is: %@", [jsonParser errorTrace]);
41
+ [jsonParser release];
42
+ return repr;
43
+ }
44
+
45
+ - (id)JSONValue
46
+ {
47
+ SBJsonParser *jsonParser = [SBJsonParser new];
48
+ id repr = [jsonParser objectWithString:self];
49
+ if (!repr)
50
+ NSLog(@"-JSONValue failed. Error trace is: %@", [jsonParser errorTrace]);
51
+ [jsonParser release];
52
+ return repr;
53
+ }
54
+
55
+ @end
@@ -0,0 +1,75 @@
1
+ /*
2
+ Copyright (C) 2007-2009 Stig Brautaset. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the author nor the names of its contributors may be used
15
+ to endorse or promote products derived from this software without specific
16
+ prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #import <Foundation/Foundation.h>
31
+ #import "SBJsonParser.h"
32
+ #import "SBJsonWriter.h"
33
+
34
+ /**
35
+ @brief Facade for SBJsonWriter/SBJsonParser.
36
+
37
+ Requests are forwarded to instances of SBJsonWriter and SBJsonParser.
38
+ */
39
+ @interface SBJSON : SBJsonBase <SBJsonParser, SBJsonWriter> {
40
+
41
+ @private
42
+ SBJsonParser *jsonParser;
43
+ SBJsonWriter *jsonWriter;
44
+ }
45
+
46
+
47
+ /// Return the fragment represented by the given string
48
+ - (id)fragmentWithString:(NSString*)jsonrep
49
+ error:(NSError**)error;
50
+
51
+ /// Return the object represented by the given string
52
+ - (id)objectWithString:(NSString*)jsonrep
53
+ error:(NSError**)error;
54
+
55
+ /// Parse the string and return the represented object (or scalar)
56
+ - (id)objectWithString:(id)value
57
+ allowScalar:(BOOL)x
58
+ error:(NSError**)error;
59
+
60
+
61
+ /// Return JSON representation of an array or dictionary
62
+ - (NSString*)stringWithObject:(id)value
63
+ error:(NSError**)error;
64
+
65
+ /// Return JSON representation of any legal JSON value
66
+ - (NSString*)stringWithFragment:(id)value
67
+ error:(NSError**)error;
68
+
69
+ /// Return JSON representation (or fragment) for the given object
70
+ - (NSString*)stringWithObject:(id)value
71
+ allowScalar:(BOOL)x
72
+ error:(NSError**)error;
73
+
74
+
75
+ @end
@@ -0,0 +1,212 @@
1
+ /*
2
+ Copyright (C) 2007-2009 Stig Brautaset. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the author nor the names of its contributors may be used
15
+ to endorse or promote products derived from this software without specific
16
+ prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #import "SBJSON.h"
31
+
32
+ @implementation SBJSON
33
+
34
+ - (id)init {
35
+ self = [super init];
36
+ if (self) {
37
+ jsonWriter = [SBJsonWriter new];
38
+ jsonParser = [SBJsonParser new];
39
+ [self setMaxDepth:512];
40
+
41
+ }
42
+ return self;
43
+ }
44
+
45
+ - (void)dealloc {
46
+ [jsonWriter release];
47
+ [jsonParser release];
48
+ [super dealloc];
49
+ }
50
+
51
+ #pragma mark Writer
52
+
53
+
54
+ - (NSString *)stringWithObject:(id)obj {
55
+ NSString *repr = [jsonWriter stringWithObject:obj];
56
+ if (repr)
57
+ return repr;
58
+
59
+ [errorTrace release];
60
+ errorTrace = [[jsonWriter errorTrace] mutableCopy];
61
+ return nil;
62
+ }
63
+
64
+ /**
65
+ Returns a string containing JSON representation of the passed in value, or nil on error.
66
+ If nil is returned and @p error is not NULL, @p *error can be interrogated to find the cause of the error.
67
+
68
+ @param value any instance that can be represented as a JSON fragment
69
+ @param allowScalar wether to return json fragments for scalar objects
70
+ @param error used to return an error by reference (pass NULL if this is not desired)
71
+
72
+ @deprecated Given we bill ourselves as a "strict" JSON library, this method should be removed.
73
+ */
74
+ - (NSString*)stringWithObject:(id)value allowScalar:(BOOL)allowScalar error:(NSError**)error {
75
+
76
+ NSString *json = allowScalar ? [jsonWriter stringWithFragment:value] : [jsonWriter stringWithObject:value];
77
+ if (json)
78
+ return json;
79
+
80
+ [errorTrace release];
81
+ errorTrace = [[jsonWriter errorTrace] mutableCopy];
82
+
83
+ if (error)
84
+ *error = [errorTrace lastObject];
85
+ return nil;
86
+ }
87
+
88
+ /**
89
+ Returns a string containing JSON representation of the passed in value, or nil on error.
90
+ If nil is returned and @p error is not NULL, @p error can be interrogated to find the cause of the error.
91
+
92
+ @param value any instance that can be represented as a JSON fragment
93
+ @param error used to return an error by reference (pass NULL if this is not desired)
94
+
95
+ @deprecated Given we bill ourselves as a "strict" JSON library, this method should be removed.
96
+ */
97
+ - (NSString*)stringWithFragment:(id)value error:(NSError**)error {
98
+ return [self stringWithObject:value
99
+ allowScalar:YES
100
+ error:error];
101
+ }
102
+
103
+ /**
104
+ Returns a string containing JSON representation of the passed in value, or nil on error.
105
+ If nil is returned and @p error is not NULL, @p error can be interrogated to find the cause of the error.
106
+
107
+ @param value a NSDictionary or NSArray instance
108
+ @param error used to return an error by reference (pass NULL if this is not desired)
109
+ */
110
+ - (NSString*)stringWithObject:(id)value error:(NSError**)error {
111
+ return [self stringWithObject:value
112
+ allowScalar:NO
113
+ error:error];
114
+ }
115
+
116
+ #pragma mark Parsing
117
+
118
+ - (id)objectWithString:(NSString *)repr {
119
+ id obj = [jsonParser objectWithString:repr];
120
+ if (obj)
121
+ return obj;
122
+
123
+ [errorTrace release];
124
+ errorTrace = [[jsonParser errorTrace] mutableCopy];
125
+
126
+ return nil;
127
+ }
128
+
129
+ /**
130
+ Returns the object represented by the passed-in string or nil on error. The returned object can be
131
+ a string, number, boolean, null, array or dictionary.
132
+
133
+ @param value the json string to parse
134
+ @param allowScalar whether to return objects for JSON fragments
135
+ @param error used to return an error by reference (pass NULL if this is not desired)
136
+
137
+ @deprecated Given we bill ourselves as a "strict" JSON library, this method should be removed.
138
+ */
139
+ - (id)objectWithString:(id)value allowScalar:(BOOL)allowScalar error:(NSError**)error {
140
+
141
+ id obj = allowScalar ? [jsonParser fragmentWithString:value] : [jsonParser objectWithString:value];
142
+ if (obj)
143
+ return obj;
144
+
145
+ [errorTrace release];
146
+ errorTrace = [[jsonParser errorTrace] mutableCopy];
147
+
148
+ if (error)
149
+ *error = [errorTrace lastObject];
150
+ return nil;
151
+ }
152
+
153
+ /**
154
+ Returns the object represented by the passed-in string or nil on error. The returned object can be
155
+ a string, number, boolean, null, array or dictionary.
156
+
157
+ @param repr the json string to parse
158
+ @param error used to return an error by reference (pass NULL if this is not desired)
159
+
160
+ @deprecated Given we bill ourselves as a "strict" JSON library, this method should be removed.
161
+ */
162
+ - (id)fragmentWithString:(NSString*)repr error:(NSError**)error {
163
+ return [self objectWithString:repr
164
+ allowScalar:YES
165
+ error:error];
166
+ }
167
+
168
+ /**
169
+ Returns the object represented by the passed-in string or nil on error. The returned object
170
+ will be either a dictionary or an array.
171
+
172
+ @param repr the json string to parse
173
+ @param error used to return an error by reference (pass NULL if this is not desired)
174
+ */
175
+ - (id)objectWithString:(NSString*)repr error:(NSError**)error {
176
+ return [self objectWithString:repr
177
+ allowScalar:NO
178
+ error:error];
179
+ }
180
+
181
+
182
+
183
+ #pragma mark Properties - parsing
184
+
185
+ - (NSUInteger)maxDepth {
186
+ return jsonParser.maxDepth;
187
+ }
188
+
189
+ - (void)setMaxDepth:(NSUInteger)d {
190
+ jsonWriter.maxDepth = jsonParser.maxDepth = d;
191
+ }
192
+
193
+
194
+ #pragma mark Properties - writing
195
+
196
+ - (BOOL)humanReadable {
197
+ return jsonWriter.humanReadable;
198
+ }
199
+
200
+ - (void)setHumanReadable:(BOOL)x {
201
+ jsonWriter.humanReadable = x;
202
+ }
203
+
204
+ - (BOOL)sortKeys {
205
+ return jsonWriter.sortKeys;
206
+ }
207
+
208
+ - (void)setSortKeys:(BOOL)x {
209
+ jsonWriter.sortKeys = x;
210
+ }
211
+
212
+ @end
@@ -0,0 +1,86 @@
1
+ /*
2
+ Copyright (C) 2009 Stig Brautaset. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the author nor the names of its contributors may be used
15
+ to endorse or promote products derived from this software without specific
16
+ prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #import <Foundation/Foundation.h>
31
+
32
+ extern NSString * SBJSONErrorDomain;
33
+
34
+
35
+ enum {
36
+ EUNSUPPORTED = 1,
37
+ EPARSENUM,
38
+ EPARSE,
39
+ EFRAGMENT,
40
+ ECTRL,
41
+ EUNICODE,
42
+ EDEPTH,
43
+ EESCAPE,
44
+ ETRAILCOMMA,
45
+ ETRAILGARBAGE,
46
+ EEOF,
47
+ EINPUT
48
+ };
49
+
50
+ /**
51
+ @brief Common base class for parsing & writing.
52
+
53
+ This class contains the common error-handling code and option between the parser/writer.
54
+ */
55
+ @interface SBJsonBase : NSObject {
56
+ NSMutableArray *errorTrace;
57
+
58
+ @protected
59
+ NSUInteger depth, maxDepth;
60
+ }
61
+
62
+ /**
63
+ @brief The maximum recursing depth.
64
+
65
+ Defaults to 512. If the input is nested deeper than this the input will be deemed to be
66
+ malicious and the parser returns nil, signalling an error. ("Nested too deep".) You can
67
+ turn off this security feature by setting the maxDepth value to 0.
68
+ */
69
+ @property NSUInteger maxDepth;
70
+
71
+ /**
72
+ @brief Return an error trace, or nil if there was no errors.
73
+
74
+ Note that this method returns the trace of the last method that failed.
75
+ You need to check the return value of the call you're making to figure out
76
+ if the call actually failed, before you know call this method.
77
+ */
78
+ @property(copy,readonly) NSArray* errorTrace;
79
+
80
+ /// @internal for use in subclasses to add errors to the stack trace
81
+ - (void)addErrorWithCode:(NSUInteger)code description:(NSString*)str;
82
+
83
+ /// @internal for use in subclasess to clear the error before a new parsing attempt
84
+ - (void)clearErrorTrace;
85
+
86
+ @end
@@ -0,0 +1,78 @@
1
+ /*
2
+ Copyright (C) 2009 Stig Brautaset. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the author nor the names of its contributors may be used
15
+ to endorse or promote products derived from this software without specific
16
+ prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #import "SBJsonBase.h"
31
+ NSString * SBJSONErrorDomain = @"org.brautaset.JSON.ErrorDomain";
32
+
33
+
34
+ @implementation SBJsonBase
35
+
36
+ @synthesize errorTrace;
37
+ @synthesize maxDepth;
38
+
39
+ - (id)init {
40
+ self = [super init];
41
+ if (self)
42
+ self.maxDepth = 512;
43
+ return self;
44
+ }
45
+
46
+ - (void)dealloc {
47
+ [errorTrace release];
48
+ [super dealloc];
49
+ }
50
+
51
+ - (void)addErrorWithCode:(NSUInteger)code description:(NSString*)str {
52
+ NSDictionary *userInfo;
53
+ if (!errorTrace) {
54
+ errorTrace = [NSMutableArray new];
55
+ userInfo = [NSDictionary dictionaryWithObject:str forKey:NSLocalizedDescriptionKey];
56
+
57
+ } else {
58
+ userInfo = [NSDictionary dictionaryWithObjectsAndKeys:
59
+ str, NSLocalizedDescriptionKey,
60
+ [errorTrace lastObject], NSUnderlyingErrorKey,
61
+ nil];
62
+ }
63
+
64
+ NSError *error = [NSError errorWithDomain:SBJSONErrorDomain code:code userInfo:userInfo];
65
+
66
+ [self willChangeValueForKey:@"errorTrace"];
67
+ [errorTrace addObject:error];
68
+ [self didChangeValueForKey:@"errorTrace"];
69
+ }
70
+
71
+ - (void)clearErrorTrace {
72
+ [self willChangeValueForKey:@"errorTrace"];
73
+ [errorTrace release];
74
+ errorTrace = nil;
75
+ [self didChangeValueForKey:@"errorTrace"];
76
+ }
77
+
78
+ @end
@@ -0,0 +1,87 @@
1
+ /*
2
+ Copyright (C) 2009 Stig Brautaset. All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of the author nor the names of its contributors may be used
15
+ to endorse or promote products derived from this software without specific
16
+ prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
22
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ */
29
+
30
+ #import <Foundation/Foundation.h>
31
+ #import "SBJsonBase.h"
32
+
33
+ /**
34
+ @brief Options for the parser class.
35
+
36
+ This exists so the SBJSON facade can implement the options in the parser without having to re-declare them.
37
+ */
38
+ @protocol SBJsonParser
39
+
40
+ /**
41
+ @brief Return the object represented by the given string.
42
+
43
+ Returns the object represented by the passed-in string or nil on error. The returned object can be
44
+ a string, number, boolean, null, array or dictionary.
45
+
46
+ @param repr the json string to parse
47
+ */
48
+ - (id)objectWithString:(NSString *)repr;
49
+
50
+ @end
51
+
52
+
53
+ /**
54
+ @brief The JSON parser class.
55
+
56
+ JSON is mapped to Objective-C types in the following way:
57
+
58
+ @li Null -> NSNull
59
+ @li String -> NSMutableString
60
+ @li Array -> NSMutableArray
61
+ @li Object -> NSMutableDictionary
62
+ @li Boolean -> NSNumber (initialised with -initWithBool:)
63
+ @li Number -> NSDecimalNumber
64
+
65
+ Since Objective-C doesn't have a dedicated class for boolean values, these turns into NSNumber
66
+ instances. These are initialised with the -initWithBool: method, and
67
+ round-trip back to JSON properly. (They won't silently suddenly become 0 or 1; they'll be
68
+ represented as 'true' and 'false' again.)
69
+
70
+ JSON numbers turn into NSDecimalNumber instances,
71
+ as we can thus avoid any loss of precision. (JSON allows ridiculously large numbers.)
72
+
73
+ */
74
+ @interface SBJsonParser : SBJsonBase <SBJsonParser> {
75
+
76
+ @private
77
+ const char *c;
78
+ }
79
+
80
+ @end
81
+
82
+ // don't use - exists for backwards compatibility with 2.1.x only. Will be removed in 2.3.
83
+ @interface SBJsonParser (Private)
84
+ - (id)fragmentWithString:(id)repr;
85
+ @end
86
+
87
+