ucl 0.1.0 → 0.1.2
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 +4 -4
- data/ext/ucl.c +57 -27
- data/ucl.gemspec +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3fb8e8b518ea32adfa5365bf32e260487f3aa4ec9e546738911e6cf37a16e300
         | 
| 4 | 
            +
              data.tar.gz: e9067e8747899c187f9ae400cd4bfe58e4343c41ff04b70cdbe161a500062bfc
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 962eea2f25228aec1ee903315074ceabd9cc424b2afab0963e68179fd39f1666abe6954404594ae6d4c658704b89200d4bfad21174bc9cd298b8ce66ea9252b7
         | 
| 7 | 
            +
              data.tar.gz: b5c9bbe4b92be69734f5bd0df81a043dba97158489da7f67d7fce6e33f976a6eb209c45b7a72690bd441aa2fd8aed203f47389753328efd875fe05175e875afa
         | 
    
        data/ext/ucl.c
    CHANGED
    
    | @@ -25,6 +25,11 @@ | |
| 25 25 | 
             
            static VALUE mUCL                        = Qundef;
         | 
| 26 26 | 
             
            static VALUE eUCLError                   = Qundef;
         | 
| 27 27 |  | 
| 28 | 
            +
            static int ucl_allowed_flags = UCL_PARSER_KEY_LOWERCASE |
         | 
| 29 | 
            +
            	                       UCL_PARSER_NO_TIME       |
         | 
| 30 | 
            +
            	                       UCL_PARSER_DISABLE_MACRO |
         | 
| 31 | 
            +
            	                       UCL_PARSER_NO_FILEVARS   ;
         | 
| 32 | 
            +
             | 
| 28 33 |  | 
| 29 34 | 
             
            VALUE
         | 
| 30 35 | 
             
            _iterate_valid_ucl(ucl_object_t const *root, int flags)
         | 
| @@ -103,6 +108,20 @@ _iterate_valid_ucl(ucl_object_t const *root, int flags) | |
| 103 108 | 
             
                }
         | 
| 104 109 | 
             
            }
         | 
| 105 110 |  | 
| 111 | 
            +
            static VALUE
         | 
| 112 | 
            +
            ucl_s_get_flags(VALUE klass)
         | 
| 113 | 
            +
            {
         | 
| 114 | 
            +
                return rb_iv_get(klass, "@flags");
         | 
| 115 | 
            +
            }
         | 
| 116 | 
            +
             | 
| 117 | 
            +
             | 
| 118 | 
            +
            static VALUE
         | 
| 119 | 
            +
            ucl_s_set_flags(VALUE klass, VALUE val)
         | 
| 120 | 
            +
            {
         | 
| 121 | 
            +
                rb_check_type(val, T_FIXNUM);
         | 
| 122 | 
            +
                rb_iv_set(klass, "@flags", val);
         | 
| 123 | 
            +
                return val;
         | 
| 124 | 
            +
            }
         | 
| 106 125 |  | 
| 107 126 |  | 
| 108 127 | 
             
            /**
         | 
| @@ -116,19 +135,14 @@ _iterate_valid_ucl(ucl_object_t const *root, int flags) | |
| 116 135 | 
             
            static VALUE
         | 
| 117 136 | 
             
            ucl_s_parse(int argc, VALUE *argv, VALUE klass)
         | 
| 118 137 | 
             
            {
         | 
| 119 | 
            -
                static int allowed_flags = UCL_PARSER_KEY_LOWERCASE |
         | 
| 120 | 
            -
            	                       UCL_PARSER_NO_TIME       |
         | 
| 121 | 
            -
            	                       UCL_PARSER_DISABLE_MACRO |
         | 
| 122 | 
            -
            	                       UCL_PARSER_NO_FILEVARS   ;
         | 
| 123 | 
            -
             | 
| 124 138 | 
             
                VALUE data, flags;
         | 
| 125 139 | 
             
                rb_scan_args(argc, argv, "11", &data, &flags);
         | 
| 126 | 
            -
                if (NIL_P(flags)) flags =  | 
| 140 | 
            +
                if (NIL_P(flags)) flags = ucl_s_get_flags(mUCL);
         | 
| 127 141 |  | 
| 128 142 | 
             
                rb_check_type(data,  T_STRING);
         | 
| 129 143 | 
             
                rb_check_type(flags, T_FIXNUM);
         | 
| 130 144 |  | 
| 131 | 
            -
                int c_flags = FIX2INT(flags) &  | 
| 145 | 
            +
                int c_flags = FIX2INT(flags) & ucl_allowed_flags;
         | 
| 132 146 |  | 
| 133 147 | 
             
                struct ucl_parser *parser =
         | 
| 134 148 | 
             
            	ucl_parser_new(c_flags | UCL_PARSER_NO_IMPLICIT_ARRAYS);
         | 
| @@ -138,20 +152,16 @@ ucl_s_parse(int argc, VALUE *argv, VALUE klass) | |
| 138 152 | 
             
            			 RSTRING_LEN(data));
         | 
| 139 153 |  | 
| 140 154 | 
             
                if (ucl_parser_get_error(parser)) {
         | 
| 141 | 
            -
            	 | 
| 155 | 
            +
            	const char *errormsg = ucl_parser_get_error(parser);
         | 
| 156 | 
            +
            	if (parser != NULL) { ucl_parser_free(parser); }
         | 
| 157 | 
            +
            	rb_raise(eUCLError, "%s", errormsg);
         | 
| 142 158 | 
             
                }
         | 
| 143 159 |  | 
| 144 160 | 
             
                ucl_object_t *root = ucl_parser_get_object(parser);
         | 
| 161 | 
            +
                VALUE         res  = _iterate_valid_ucl(root, FIX2INT(flags));
         | 
| 145 162 |  | 
| 146 | 
            -
                 | 
| 147 | 
            -
             | 
| 148 | 
            -
                if (parser != NULL) {
         | 
| 149 | 
            -
            	ucl_parser_free(parser);
         | 
| 150 | 
            -
                }
         | 
| 151 | 
            -
                
         | 
| 152 | 
            -
                if (root != NULL) {
         | 
| 153 | 
            -
            	ucl_object_unref(root);
         | 
| 154 | 
            -
                }
         | 
| 163 | 
            +
                if (parser != NULL) { ucl_parser_free(parser); }
         | 
| 164 | 
            +
                if (root   != NULL) { ucl_object_unref(root);  }
         | 
| 155 165 |  | 
| 156 166 | 
             
                return res;
         | 
| 157 167 | 
             
            }
         | 
| @@ -173,22 +183,38 @@ ucl_s_load_file(int argc, VALUE *argv, VALUE klass) | |
| 173 183 | 
             
            {
         | 
| 174 184 | 
             
                VALUE file, flags;
         | 
| 175 185 | 
             
                rb_scan_args(argc, argv, "11", &file, &flags);
         | 
| 186 | 
            +
                if (NIL_P(flags)) flags = ucl_s_get_flags(mUCL);
         | 
| 176 187 |  | 
| 177 | 
            -
                 | 
| 178 | 
            -
                 | 
| 179 | 
            -
             | 
| 188 | 
            +
                rb_check_type(file,  T_STRING);
         | 
| 189 | 
            +
                rb_check_type(flags, T_FIXNUM);
         | 
| 190 | 
            +
            	
         | 
| 191 | 
            +
                int   c_flags = FIX2INT(flags) & ucl_allowed_flags;
         | 
| 192 | 
            +
                char *c_file  = StringValueCStr(file);
         | 
| 193 | 
            +
                
         | 
| 194 | 
            +
                struct ucl_parser *parser =
         | 
| 195 | 
            +
            	ucl_parser_new(c_flags | UCL_PARSER_NO_IMPLICIT_ARRAYS);
         | 
| 196 | 
            +
                ucl_parser_add_file(parser, c_file);
         | 
| 197 | 
            +
                
         | 
| 198 | 
            +
                if (ucl_parser_get_error(parser)) {
         | 
| 199 | 
            +
            	const char *errormsg = ucl_parser_get_error(parser);
         | 
| 200 | 
            +
            	if (parser != NULL) { ucl_parser_free(parser); }
         | 
| 201 | 
            +
            	rb_raise(eUCLError, "%s", errormsg);
         | 
| 202 | 
            +
                }
         | 
| 180 203 |  | 
| 181 | 
            -
                 | 
| 182 | 
            -
                VALUE | 
| 183 | 
            -
            				2, read_args, RB_PASS_KEYWORDS);
         | 
| 204 | 
            +
                ucl_object_t *root = ucl_parser_get_object(parser);
         | 
| 205 | 
            +
                VALUE         res  = _iterate_valid_ucl(root, FIX2INT(flags));
         | 
| 184 206 |  | 
| 185 | 
            -
                 | 
| 186 | 
            -
                 | 
| 207 | 
            +
                if (parser != NULL) { ucl_parser_free(parser); }
         | 
| 208 | 
            +
                if (root   != NULL) { ucl_object_unref(root);  }
         | 
| 209 | 
            +
                
         | 
| 210 | 
            +
                return res;
         | 
| 187 211 | 
             
            }
         | 
| 188 212 |  | 
| 189 213 |  | 
| 190 214 |  | 
| 191 215 |  | 
| 216 | 
            +
             | 
| 217 | 
            +
             | 
| 192 218 | 
             
            void Init_ucl(void) {
         | 
| 193 219 | 
             
                /* Main classes */
         | 
| 194 220 | 
             
                mUCL      = rb_define_class("UCL", rb_cObject);
         | 
| @@ -200,11 +226,15 @@ void Init_ucl(void) { | |
| 200 226 | 
             
                rb_define_const(mUCL, "DISABLE_MACRO", INT2FIX(UCL_PARSER_DISABLE_MACRO));
         | 
| 201 227 | 
             
                rb_define_const(mUCL, "NO_FILEVARS",   INT2FIX(UCL_PARSER_NO_FILEVARS  ));
         | 
| 202 228 | 
             
                rb_define_const(mUCL, "KEY_SYMBOL",    INT2FIX(UCL_PARSER_KEY_SYMBOL   ));
         | 
| 203 | 
            -
             | 
| 229 | 
            +
             | 
| 230 | 
            +
                /* Variables */
         | 
| 231 | 
            +
                ucl_s_set_flags(mUCL, INT2FIX(0));
         | 
| 232 | 
            +
            	
         | 
| 204 233 | 
             
                /* Definitions */
         | 
| 205 234 | 
             
                rb_define_singleton_method(mUCL, "load_file", ucl_s_load_file, -1);
         | 
| 206 235 | 
             
                rb_define_singleton_method(mUCL, "parse",     ucl_s_parse,     -1);
         | 
| 207 | 
            -
             | 
| 236 | 
            +
                rb_define_singleton_method(mUCL, "flags",     ucl_s_get_flags,  0);
         | 
| 237 | 
            +
                rb_define_singleton_method(mUCL, "flags=",    ucl_s_set_flags,  1);
         | 
| 208 238 | 
             
            }
         | 
| 209 239 |  | 
| 210 240 |  | 
    
        data/ucl.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ucl
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Stéphane D'Alu
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2022-12- | 
| 11 | 
            +
            date: 2022-12-20 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: |2+
         | 
| 14 14 |  |