minidusen 0.11.1 → 1.0.0

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +55 -48
  3. data/.ruby-version +1 -1
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile.6.1.mysql2.lock +2 -2
  6. data/Gemfile.6.1.pg.lock +2 -2
  7. data/Gemfile.7.0.mysql2.lock +2 -2
  8. data/Gemfile.7.0.pg.lock +2 -2
  9. data/{Gemfile.6.0.mysql2 → Gemfile.7.1.mysql2} +2 -2
  10. data/Gemfile.7.1.mysql2.lock +81 -0
  11. data/{Gemfile.6.0.pg → Gemfile.7.1.pg} +2 -2
  12. data/Gemfile.7.1.pg.lock +81 -0
  13. data/{Gemfile.4.2.mysql2 → Gemfile.7.2.mysql2} +4 -4
  14. data/Gemfile.7.2.mysql2.lock +83 -0
  15. data/{Gemfile.4.2.pg → Gemfile.7.2.pg} +3 -3
  16. data/Gemfile.7.2.pg.lock +83 -0
  17. data/Gemfile.8.0.mysql2 +15 -0
  18. data/Gemfile.8.0.mysql2.lock +87 -0
  19. data/Gemfile.8.0.pg +15 -0
  20. data/Gemfile.8.0.pg.lock +87 -0
  21. data/README.md +21 -6
  22. data/lib/minidusen/parser.rb +4 -2
  23. data/lib/minidusen/syntax.rb +14 -3
  24. data/lib/minidusen/token.rb +5 -0
  25. data/lib/minidusen/util.rb +2 -2
  26. data/lib/minidusen/version.rb +1 -1
  27. data/media/logo.dark.shapes.svg +137 -0
  28. data/media/logo.dark.text.svg +107 -0
  29. data/media/logo.light.shapes.svg +136 -0
  30. data/media/logo.light.text.svg +106 -0
  31. data/media/makandra-with-bottom-margin.dark.svg +180 -0
  32. data/media/makandra-with-bottom-margin.light.svg +180 -0
  33. data/spec/minidusen/filter_spec.rb +8 -0
  34. data/spec/minidusen/parser_spec.rb +8 -0
  35. data/spec/support/database.github.yml +2 -2
  36. metadata +21 -15
  37. data/Gemfile.4.2.mysql2.lock +0 -69
  38. data/Gemfile.4.2.pg.lock +0 -69
  39. data/Gemfile.5.2.mysql2 +0 -16
  40. data/Gemfile.5.2.mysql2.lock +0 -68
  41. data/Gemfile.5.2.pg +0 -16
  42. data/Gemfile.5.2.pg.lock +0 -68
  43. data/Gemfile.6.0.mysql2.lock +0 -67
  44. data/Gemfile.6.0.pg.lock +0 -67
@@ -0,0 +1,136 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:xlink="http://www.w3.org/1999/xlink"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ width="53.366352mm"
14
+ height="14.056225mm"
15
+ viewBox="0 0 53.366351 14.056225"
16
+ version="1.1"
17
+ id="svg838"
18
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
19
+ sodipodi:docname="logo.light.shapes.svg"
20
+ inkscape:export-filename="/home/henning/Projects/capybara-lockstep/media/capybara-lockstep3.light.png"
21
+ inkscape:export-xdpi="196"
22
+ inkscape:export-ydpi="196">
23
+ <defs
24
+ id="defs832">
25
+ <linearGradient
26
+ inkscape:collect="always"
27
+ id="linearGradient1406">
28
+ <stop
29
+ style="stop-color:#ff0844;stop-opacity:1"
30
+ offset="0"
31
+ id="stop1402" />
32
+ <stop
33
+ style="stop-color:#ffb199;stop-opacity:1"
34
+ offset="1"
35
+ id="stop1404" />
36
+ </linearGradient>
37
+ <linearGradient
38
+ inkscape:collect="always"
39
+ xlink:href="#linearGradient1406"
40
+ id="linearGradient1408"
41
+ x1="22.054907"
42
+ y1="91.071762"
43
+ x2="88.956696"
44
+ y2="91.071762"
45
+ gradientUnits="userSpaceOnUse"
46
+ gradientTransform="matrix(0.79763917,0,0,0.08820435,-17.591858,57.908781)" />
47
+ </defs>
48
+ <sodipodi:namedview
49
+ id="base"
50
+ pagecolor="#ffffff"
51
+ bordercolor="#666666"
52
+ borderopacity="1.0"
53
+ inkscape:pageopacity="0.0"
54
+ inkscape:pageshadow="2"
55
+ inkscape:zoom="1.979899"
56
+ inkscape:cx="325.01986"
57
+ inkscape:cy="-18.74716"
58
+ inkscape:document-units="mm"
59
+ inkscape:current-layer="layer1"
60
+ showgrid="false"
61
+ fit-margin-top="0"
62
+ fit-margin-left="0"
63
+ fit-margin-right="0"
64
+ fit-margin-bottom="0"
65
+ inkscape:window-width="2560"
66
+ inkscape:window-height="1391"
67
+ inkscape:window-x="1920"
68
+ inkscape:window-y="0"
69
+ inkscape:window-maximized="1" />
70
+ <metadata
71
+ id="metadata835">
72
+ <rdf:RDF>
73
+ <cc:Work
74
+ rdf:about="">
75
+ <dc:format>image/svg+xml</dc:format>
76
+ <dc:type
77
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
78
+ <dc:title></dc:title>
79
+ </cc:Work>
80
+ </rdf:RDF>
81
+ </metadata>
82
+ <g
83
+ inkscape:label="Layer 1"
84
+ inkscape:groupmode="layer"
85
+ id="layer1"
86
+ transform="translate(0,-52.518951)">
87
+ <g
88
+ aria-label="MINIDUSEN"
89
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#141210;fill-opacity:1;stroke:none;stroke-width:0.26458332"
90
+ id="text1385">
91
+ <path
92
+ d="m 7.6041248,52.645951 v 6.985 H 6.0272082 v -4.111625 l 0.068792,-1.169458 -0.269875,1.338791 -1.1747499,3.381375 H 3.1009166 l -1.1694583,-3.381375 -0.2645834,-1.338791 0.068792,1.169458 v 4.111625 H 0.15345833 v -6.985 H 2.3759583 l 1.4075833,4.661958 0.09525,0.555625 0.09525,-0.555625 1.4075833,-4.661958 z"
93
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
94
+ id="path822" />
95
+ <path
96
+ d="m 8.9217348,52.645951 h 1.5822082 v 6.985 H 8.9217348 Z"
97
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
98
+ id="path824" />
99
+ <path
100
+ d="m 13.192091,54.095868 0.116417,0.02117 v 5.513917 h -1.582209 v -6.985 h 2.159 l 2.831042,5.503333 -0.116417,0.02117 v -5.5245 h 1.582209 v 6.985 h -2.169584 z"
101
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
102
+ id="path826" />
103
+ <path
104
+ d="m 19.436255,52.645951 h 1.582208 v 6.985 h -1.582208 z"
105
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
106
+ id="path828" />
107
+ <path
108
+ d="m 22.256693,52.645951 h 2.100792 q 1.116541,0 1.846791,0.449792 0.735542,0.4445 1.100667,1.232958 0.365125,0.788458 0.365125,1.804458 0,1.021292 -0.365125,1.80975 -0.365125,0.788459 -1.100667,1.23825 -0.73025,0.449792 -1.846791,0.449792 h -2.100792 z m 1.576917,1.402292 v 4.180416 h 0.381 q 0.597958,0 0.989541,-0.269875 0.391584,-0.275166 0.587375,-0.746125 0.201084,-0.47625 0.201084,-1.068916 0,-0.597959 -0.195792,-1.068917 -0.1905,-0.47625 -0.587375,-0.751417 -0.396875,-0.275166 -0.994833,-0.275166 z"
109
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
110
+ id="path830" />
111
+ <path
112
+ d="m 32.633632,52.645951 h 1.582208 v 4.291542 q 0,0.862541 -0.338666,1.497541 -0.338667,0.629709 -0.968375,0.978959 -0.629709,0.343958 -1.502834,0.343958 -0.878416,0 -1.513416,-0.343958 -0.635,-0.34925 -0.973667,-0.978959 -0.333375,-0.635 -0.333375,-1.497541 v -4.291542 h 1.576917 v 4.206875 q 0,0.47625 0.148166,0.804333 0.153459,0.328084 0.433917,0.497417 0.280458,0.164042 0.661458,0.164042 0.375709,0 0.650875,-0.164042 0.275167,-0.169333 0.423334,-0.497417 0.153458,-0.328083 0.153458,-0.804333 z"
113
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
114
+ id="path832" />
115
+ <path
116
+ d="m 37.877668,52.518951 q 0.650875,0 1.137709,0.142875 0.486833,0.142875 0.783166,0.301625 0.296333,0.15875 0.359833,0.211667 l -0.762,1.275291 q -0.08467,-0.0635 -0.291041,-0.185208 -0.201083,-0.121708 -0.481542,-0.216958 -0.275166,-0.09525 -0.576791,-0.09525 -0.407459,0 -0.661459,0.148166 -0.248708,0.142875 -0.248708,0.428625 0,0.195792 0.132292,0.354542 0.137583,0.153458 0.41275,0.296333 0.280458,0.137584 0.709083,0.301625 0.391583,0.142875 0.735542,0.338667 0.343958,0.195792 0.603249,0.465667 0.264584,0.264583 0.418042,0.613833 0.153458,0.34925 0.153458,0.79375 0,0.529167 -0.216958,0.92075 -0.216958,0.386292 -0.592667,0.640292 -0.370416,0.254 -0.846666,0.375708 -0.470958,0.127 -0.978958,0.127 -0.719667,0 -1.291167,-0.164042 -0.566208,-0.164041 -0.915458,-0.354541 -0.34925,-0.1905 -0.418042,-0.254 l 0.788458,-1.328209 q 0.0635,0.04762 0.243417,0.153459 0.185208,0.105833 0.449792,0.22225 0.264583,0.111125 0.560916,0.1905 0.301625,0.07937 0.592667,0.07937 0.486833,0 0.73025,-0.185209 0.243417,-0.1905 0.243417,-0.497416 0,-0.227542 -0.153459,-0.407459 -0.153458,-0.179916 -0.460375,-0.338666 -0.306916,-0.164042 -0.767291,-0.343959 -0.460375,-0.185208 -0.862542,-0.449791 -0.396875,-0.264584 -0.645583,-0.661459 -0.248709,-0.396875 -0.248709,-0.98425 0,-0.587375 0.328084,-1.016 0.333375,-0.433916 0.873125,-0.66675 0.545041,-0.232833 1.164166,-0.232833 z"
117
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
118
+ id="path834" />
119
+ <path
120
+ d="m 41.253748,52.645951 h 4.460875 v 1.386417 h -2.883958 v 1.423458 h 2.8575 v 1.344083 h -2.8575 v 1.444625 h 2.883958 v 1.386417 h -4.460875 z"
121
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
122
+ id="path836" />
123
+ <path
124
+ d="m 48.376312,54.095868 0.116417,0.02117 v 5.513917 h -1.582208 v -6.985 h 2.159 l 2.831041,5.503333 -0.116416,0.02117 v -5.5245 h 1.582208 v 6.985 h -2.169583 z"
125
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332"
126
+ id="path838" />
127
+ </g>
128
+ <rect
129
+ style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02652455;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
130
+ id="rect1387"
131
+ width="53.363483"
132
+ height="1.2668874"
133
+ x="-3.5527137e-15"
134
+ y="65.308289" />
135
+ </g>
136
+ </svg>
@@ -0,0 +1,106 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:xlink="http://www.w3.org/1999/xlink"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ width="53.366352mm"
14
+ height="14.056225mm"
15
+ viewBox="0 0 53.366351 14.056225"
16
+ version="1.1"
17
+ id="svg838"
18
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
19
+ sodipodi:docname="logo.light.text.svg"
20
+ inkscape:export-filename="/home/henning/Projects/capybara-lockstep/media/capybara-lockstep3.light.png"
21
+ inkscape:export-xdpi="196"
22
+ inkscape:export-ydpi="196">
23
+ <defs
24
+ id="defs832">
25
+ <linearGradient
26
+ inkscape:collect="always"
27
+ id="linearGradient1406">
28
+ <stop
29
+ style="stop-color:#ff0844;stop-opacity:1"
30
+ offset="0"
31
+ id="stop1402" />
32
+ <stop
33
+ style="stop-color:#ffb199;stop-opacity:1"
34
+ offset="1"
35
+ id="stop1404" />
36
+ </linearGradient>
37
+ <linearGradient
38
+ inkscape:collect="always"
39
+ xlink:href="#linearGradient1406"
40
+ id="linearGradient1408"
41
+ x1="22.054907"
42
+ y1="91.071762"
43
+ x2="88.956696"
44
+ y2="91.071762"
45
+ gradientUnits="userSpaceOnUse"
46
+ gradientTransform="matrix(0.79763917,0,0,0.08820435,-17.591858,57.908781)" />
47
+ </defs>
48
+ <sodipodi:namedview
49
+ id="base"
50
+ pagecolor="#ffffff"
51
+ bordercolor="#666666"
52
+ borderopacity="1.0"
53
+ inkscape:pageopacity="0.0"
54
+ inkscape:pageshadow="2"
55
+ inkscape:zoom="1.979899"
56
+ inkscape:cx="325.01986"
57
+ inkscape:cy="-18.74716"
58
+ inkscape:document-units="mm"
59
+ inkscape:current-layer="layer1"
60
+ showgrid="false"
61
+ fit-margin-top="0"
62
+ fit-margin-left="0"
63
+ fit-margin-right="0"
64
+ fit-margin-bottom="0"
65
+ inkscape:window-width="2560"
66
+ inkscape:window-height="1391"
67
+ inkscape:window-x="1920"
68
+ inkscape:window-y="0"
69
+ inkscape:window-maximized="1" />
70
+ <metadata
71
+ id="metadata835">
72
+ <rdf:RDF>
73
+ <cc:Work
74
+ rdf:about="">
75
+ <dc:format>image/svg+xml</dc:format>
76
+ <dc:type
77
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
78
+ <dc:title></dc:title>
79
+ </cc:Work>
80
+ </rdf:RDF>
81
+ </metadata>
82
+ <g
83
+ inkscape:label="Layer 1"
84
+ inkscape:groupmode="layer"
85
+ id="layer1"
86
+ transform="translate(0,-52.518951)">
87
+ <text
88
+ xml:space="preserve"
89
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';letter-spacing:0px;word-spacing:0px;fill:#141210;fill-opacity:1;stroke:none;stroke-width:0.26458332"
90
+ x="-0.27516666"
91
+ y="59.630951"
92
+ id="text1385"><tspan
93
+ sodipodi:role="line"
94
+ id="tspan1383"
95
+ x="-0.27516666"
96
+ y="59.630951"
97
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'League Spartan';-inkscape-font-specification:'League Spartan';fill:#141210;fill-opacity:1;stroke-width:0.26458332">MINIDUSEN</tspan></text>
98
+ <rect
99
+ style="fill:url(#linearGradient1408);fill-opacity:1;stroke:none;stroke-width:0.02652455;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
100
+ id="rect1387"
101
+ width="53.363483"
102
+ height="1.2668874"
103
+ x="-3.5527137e-15"
104
+ y="65.308289" />
105
+ </g>
106
+ </svg>
@@ -0,0 +1,180 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 23.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Ebene_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 600.00159 198.53798"
17
+ xml:space="preserve"
18
+ sodipodi:docname="makandra.dark.svg"
19
+ width="600.00159"
20
+ height="198.53798"
21
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
22
+ id="metadata45"><rdf:RDF><cc:Work
23
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
24
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
25
+ id="defs43" /><sodipodi:namedview
26
+ pagecolor="#ffffff"
27
+ bordercolor="#666666"
28
+ borderopacity="1"
29
+ objecttolerance="10"
30
+ gridtolerance="10"
31
+ guidetolerance="10"
32
+ inkscape:pageopacity="0"
33
+ inkscape:pageshadow="2"
34
+ inkscape:window-width="1920"
35
+ inkscape:window-height="1151"
36
+ id="namedview41"
37
+ showgrid="false"
38
+ inkscape:pagecheckerboard="true"
39
+ fit-margin-top="0"
40
+ fit-margin-left="0"
41
+ fit-margin-right="0"
42
+ fit-margin-bottom="0"
43
+ inkscape:zoom="1.0966667"
44
+ inkscape:cx="-38.195719"
45
+ inkscape:cy="-91.947799"
46
+ inkscape:window-x="1920"
47
+ inkscape:window-y="0"
48
+ inkscape:window-maximized="1"
49
+ inkscape:current-layer="Ebene_1" />
50
+ <style
51
+ type="text/css"
52
+ id="style2">
53
+ .st0{fill:#E61D47;}
54
+ .st1{fill:#FFFFFF;}
55
+ </style>
56
+ <g
57
+ id="g38"
58
+ transform="translate(0.00160275,-0.76)">
59
+ <polygon
60
+ class="st0"
61
+ points="585.95,14.81 585.95,59.46 600,45.41 600,0.76 555.34,0.76 541.29,14.81 "
62
+ id="polygon4"
63
+ style="fill:#e61d47" />
64
+ <path
65
+ class="st1"
66
+ d="m 161.87,43.92 v -1.44 h -13.07 -0.87 v 6.8 c -4.61,-5.11 -10.84,-8.22 -18.57,-8.22 -17.7,0 -29.41,15.58 -29.41,33.03 0,17.2 11.22,33.15 29.41,33.15 7.86,0 14.11,-3.21 18.57,-8.39 v 6.77 h 1.87 v 0 h 12.09 V 43.92 Z M 130.98,94.9 c -10.59,0 -16.58,-9.72 -16.58,-20.81 0,-11.59 6.48,-20.69 16.58,-20.69 9.97,0 17.82,8.23 17.82,20.57 0,13.21 -8.47,20.93 -17.82,20.93 z"
67
+ id="path6"
68
+ inkscape:connector-curvature="0"
69
+ style="fill:#ffffff" />
70
+ <path
71
+ class="st1"
72
+ d="m 297.85,43.93 v -1.44 h -13.07 -0.87 v 6.8 c -4.61,-5.11 -10.84,-8.22 -18.57,-8.22 -17.7,0 -29.41,15.58 -29.41,33.03 0,17.2 11.22,33.15 29.41,33.15 7.86,0 14.11,-3.21 18.57,-8.39 v 6.77 h 1.87 v 0 h 12.09 v -61.7 z m -30.89,50.98 c -10.59,0 -16.58,-9.72 -16.58,-20.81 0,-11.59 6.48,-20.69 16.58,-20.69 9.97,0 17.82,8.23 17.82,20.57 0.01,13.2 -8.47,20.93 -17.82,20.93 z"
73
+ id="path8"
74
+ inkscape:connector-curvature="0"
75
+ style="fill:#ffffff" />
76
+ <path
77
+ class="st1"
78
+ d="m 558.34,43.87 v -1.44 h -13.07 -0.87 v 6.8 c -4.61,-5.11 -10.84,-8.22 -18.57,-8.22 -17.7,0 -29.41,15.58 -29.41,33.03 0,17.2 11.22,33.15 29.41,33.15 7.86,0 14.11,-3.21 18.57,-8.39 v 6.77 h 1.87 v 0 h 12.09 v -61.7 z m -30.9,50.98 c -10.59,0 -16.58,-9.72 -16.58,-20.81 0,-11.59 6.48,-20.69 16.58,-20.69 9.97,0 17.82,8.23 17.82,20.57 0.01,13.2 -8.47,20.93 -17.82,20.93 z"
79
+ id="path10"
80
+ inkscape:connector-curvature="0"
81
+ style="fill:#ffffff" />
82
+ <path
83
+ class="st1"
84
+ d="M 14.1,86.98 V 75.1 c 0,-14.58 6.11,-21.81 13.34,-21.81 6.85,0 9.6,5.61 9.6,13.46 V 86.97 H 51 v -11 c 0,-15.33 5.98,-22.68 13.34,-22.68 6.86,0 9.6,5.61 9.6,13.46 V 86.97 H 87.9 V 64.88 c 0,-14.83 -7.98,-23.93 -20.57,-23.93 -7.98,0 -14.83,3.37 -19.19,10.84 -3.24,-6.85 -9.47,-10.84 -17.7,-10.84 -6.72,0 -12.38,2.55 -16.57,7.88 V 42.37 H 0 v 44.6 h 14.1 z"
85
+ id="path12"
86
+ inkscape:connector-curvature="0"
87
+ style="fill:#ffffff" />
88
+
89
+ <rect
90
+ x="313.17001"
91
+ y="91.599998"
92
+ transform="rotate(90,320.2078,98.578)"
93
+ class="st1"
94
+ width="14.08"
95
+ height="13.96"
96
+ id="rect14"
97
+ style="fill:#ffffff" />
98
+
99
+ <rect
100
+ x="353.25"
101
+ y="91.599998"
102
+ transform="rotate(90,360.29075,98.57795)"
103
+ class="st1"
104
+ width="14.08"
105
+ height="13.96"
106
+ id="rect16"
107
+ style="fill:#ffffff" />
108
+
109
+ <rect
110
+ x="456.56"
111
+ y="91.599998"
112
+ transform="rotate(90,463.60275,98.57795)"
113
+ class="st1"
114
+ width="14.08"
115
+ height="13.96"
116
+ id="rect18"
117
+ style="fill:#ffffff" />
118
+
119
+ <rect
120
+ x="36.959999"
121
+ y="91.599998"
122
+ transform="rotate(90,43.9944,98.578)"
123
+ class="st1"
124
+ width="14.08"
125
+ height="13.96"
126
+ id="rect20"
127
+ style="fill:#ffffff" />
128
+
129
+ <rect
130
+ x="0"
131
+ y="91.540001"
132
+ transform="rotate(90,7.04045,98.57795)"
133
+ class="st1"
134
+ width="14.08"
135
+ height="14.08"
136
+ id="rect22"
137
+ style="fill:#ffffff" />
138
+
139
+ <rect
140
+ x="73.879997"
141
+ y="91.610001"
142
+ transform="rotate(90,80.91625,98.57795)"
143
+ class="st0"
144
+ width="14.08"
145
+ height="13.94"
146
+ id="rect24"
147
+ style="fill:#e61d47" />
148
+ <g
149
+ id="g30">
150
+ <polygon
151
+ class="st1"
152
+ points="204.35,73.98 235.93,42.41 216.05,42.41 184.48,73.98 216.05,105.56 235.93,105.56 "
153
+ id="polygon26"
154
+ style="fill:#ffffff" />
155
+ <polygon
156
+ class="st1"
157
+ points="177.32,105.64 191.28,105.64 191.28,85.07 191.31,85.04 191.31,66.59 191.28,66.62 191.28,27.56 177.32,27.56 "
158
+ id="polygon28"
159
+ style="fill:#ffffff" />
160
+ </g>
161
+ <path
162
+ class="st1"
163
+ d="M 427.32,27.49 V 49.22 C 422.71,44.11 416.48,41 408.75,41 c -18.07,0 -29.41,15.95 -29.41,33.15 0,17.45 11.59,33.03 29.41,33.03 8.23,0 14.71,-3.49 19.2,-8.97 l 1.25,7.35 h 12.09 V 27.49 Z m -16.95,67.35 c -10.34,0 -16.57,-9.22 -16.57,-20.69 0,-11.22 6.23,-20.81 16.57,-20.81 9.35,0 17.83,7.73 17.83,20.81 -0.01,12.46 -7.86,20.69 -17.83,20.69 z"
164
+ id="path32"
165
+ inkscape:connector-curvature="0"
166
+ style="fill:#ffffff" />
167
+ <path
168
+ class="st1"
169
+ d="m 470.67,86.98 v -9.26 c 0,-14.33 6.98,-24.3 19.69,-24.3 V 41.07 c -9.35,0 -15.57,3.95 -19.69,9.91 v -8.49 h -14.05 v 44.48 h 14.05 z"
170
+ id="path34"
171
+ inkscape:connector-curvature="0"
172
+ style="fill:#ffffff" />
173
+ <path
174
+ class="st1"
175
+ d="M 327.26,86.98 V 76.59 c 0,-14.58 6.23,-23.18 16.33,-23.18 6.86,0 9.72,5.73 9.72,13.58 v 19.98 h 13.96 V 65.13 c 0,-14.83 -8.23,-24.05 -20.82,-24.05 -8.15,0 -14.71,2.95 -19.19,8.77 V 42.7 h -1.99 v -0.01 l -0.06,0.01 h -11.98 v 44.28 z"
176
+ id="path36"
177
+ inkscape:connector-curvature="0"
178
+ style="fill:#ffffff" />
179
+ </g>
180
+ </svg>
@@ -0,0 +1,180 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 23.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Ebene_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 600.00159 198.53798"
17
+ xml:space="preserve"
18
+ sodipodi:docname="makandra.light.svg"
19
+ width="600.00159"
20
+ height="198.53798"
21
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
22
+ id="metadata45"><rdf:RDF><cc:Work
23
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
24
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
25
+ id="defs43" /><sodipodi:namedview
26
+ pagecolor="#ffffff"
27
+ bordercolor="#666666"
28
+ borderopacity="1"
29
+ objecttolerance="10"
30
+ gridtolerance="10"
31
+ guidetolerance="10"
32
+ inkscape:pageopacity="0"
33
+ inkscape:pageshadow="2"
34
+ inkscape:window-width="1920"
35
+ inkscape:window-height="1151"
36
+ id="namedview41"
37
+ showgrid="false"
38
+ fit-margin-top="0"
39
+ fit-margin-left="0"
40
+ fit-margin-right="0"
41
+ fit-margin-bottom="0"
42
+ inkscape:pagecheckerboard="true"
43
+ inkscape:zoom="2.1933333"
44
+ inkscape:cx="-93.29719"
45
+ inkscape:cy="-70.469332"
46
+ inkscape:window-x="1920"
47
+ inkscape:window-y="0"
48
+ inkscape:window-maximized="1"
49
+ inkscape:current-layer="Ebene_1" />
50
+ <style
51
+ type="text/css"
52
+ id="style2">
53
+ .st0{fill:#E61D47;}
54
+ .st1{fill:#141210;}
55
+ </style>
56
+ <g
57
+ id="g38"
58
+ transform="translate(0.00160275,-0.76)">
59
+ <polygon
60
+ class="st0"
61
+ points="585.95,14.81 585.95,59.46 600,45.41 600,0.76 555.34,0.76 541.29,14.81 "
62
+ id="polygon4"
63
+ style="fill:#e61d47" />
64
+ <path
65
+ class="st1"
66
+ d="m 161.87,43.92 v -1.44 h -13.07 -0.87 v 6.8 c -4.61,-5.11 -10.84,-8.22 -18.57,-8.22 -17.7,0 -29.41,15.58 -29.41,33.03 0,17.2 11.22,33.15 29.41,33.15 7.86,0 14.11,-3.21 18.57,-8.39 v 6.77 h 1.87 v 0 h 12.09 V 43.92 Z M 130.98,94.9 c -10.59,0 -16.58,-9.72 -16.58,-20.81 0,-11.59 6.48,-20.69 16.58,-20.69 9.97,0 17.82,8.23 17.82,20.57 0,13.21 -8.47,20.93 -17.82,20.93 z"
67
+ id="path6"
68
+ inkscape:connector-curvature="0"
69
+ style="fill:#141210" />
70
+ <path
71
+ class="st1"
72
+ d="m 297.85,43.93 v -1.44 h -13.07 -0.87 v 6.8 c -4.61,-5.11 -10.84,-8.22 -18.57,-8.22 -17.7,0 -29.41,15.58 -29.41,33.03 0,17.2 11.22,33.15 29.41,33.15 7.86,0 14.11,-3.21 18.57,-8.39 v 6.77 h 1.87 v 0 h 12.09 v -61.7 z m -30.89,50.98 c -10.59,0 -16.58,-9.72 -16.58,-20.81 0,-11.59 6.48,-20.69 16.58,-20.69 9.97,0 17.82,8.23 17.82,20.57 0.01,13.2 -8.47,20.93 -17.82,20.93 z"
73
+ id="path8"
74
+ inkscape:connector-curvature="0"
75
+ style="fill:#141210" />
76
+ <path
77
+ class="st1"
78
+ d="m 558.34,43.87 v -1.44 h -13.07 -0.87 v 6.8 c -4.61,-5.11 -10.84,-8.22 -18.57,-8.22 -17.7,0 -29.41,15.58 -29.41,33.03 0,17.2 11.22,33.15 29.41,33.15 7.86,0 14.11,-3.21 18.57,-8.39 v 6.77 h 1.87 v 0 h 12.09 v -61.7 z m -30.9,50.98 c -10.59,0 -16.58,-9.72 -16.58,-20.81 0,-11.59 6.48,-20.69 16.58,-20.69 9.97,0 17.82,8.23 17.82,20.57 0.01,13.2 -8.47,20.93 -17.82,20.93 z"
79
+ id="path10"
80
+ inkscape:connector-curvature="0"
81
+ style="fill:#141210" />
82
+ <path
83
+ class="st1"
84
+ d="M 14.1,86.98 V 75.1 c 0,-14.58 6.11,-21.81 13.34,-21.81 6.85,0 9.6,5.61 9.6,13.46 V 86.97 H 51 v -11 c 0,-15.33 5.98,-22.68 13.34,-22.68 6.86,0 9.6,5.61 9.6,13.46 V 86.97 H 87.9 V 64.88 c 0,-14.83 -7.98,-23.93 -20.57,-23.93 -7.98,0 -14.83,3.37 -19.19,10.84 -3.24,-6.85 -9.47,-10.84 -17.7,-10.84 -6.72,0 -12.38,2.55 -16.57,7.88 V 42.37 H 0 v 44.6 h 14.1 z"
85
+ id="path12"
86
+ inkscape:connector-curvature="0"
87
+ style="fill:#141210" />
88
+
89
+ <rect
90
+ x="313.17001"
91
+ y="91.599998"
92
+ transform="rotate(90,320.2078,98.578)"
93
+ class="st1"
94
+ width="14.08"
95
+ height="13.96"
96
+ id="rect14"
97
+ style="fill:#141210" />
98
+
99
+ <rect
100
+ x="353.25"
101
+ y="91.599998"
102
+ transform="rotate(90,360.29075,98.57795)"
103
+ class="st1"
104
+ width="14.08"
105
+ height="13.96"
106
+ id="rect16"
107
+ style="fill:#141210" />
108
+
109
+ <rect
110
+ x="456.56"
111
+ y="91.599998"
112
+ transform="rotate(90,463.60275,98.57795)"
113
+ class="st1"
114
+ width="14.08"
115
+ height="13.96"
116
+ id="rect18"
117
+ style="fill:#141210" />
118
+
119
+ <rect
120
+ x="36.959999"
121
+ y="91.599998"
122
+ transform="rotate(90,43.9944,98.578)"
123
+ class="st1"
124
+ width="14.08"
125
+ height="13.96"
126
+ id="rect20"
127
+ style="fill:#141210" />
128
+
129
+ <rect
130
+ x="0"
131
+ y="91.540001"
132
+ transform="rotate(90,7.04045,98.57795)"
133
+ class="st1"
134
+ width="14.08"
135
+ height="14.08"
136
+ id="rect22"
137
+ style="fill:#141210" />
138
+
139
+ <rect
140
+ x="73.879997"
141
+ y="91.610001"
142
+ transform="rotate(90,80.91625,98.57795)"
143
+ class="st0"
144
+ width="14.08"
145
+ height="13.94"
146
+ id="rect24"
147
+ style="fill:#e61d47" />
148
+ <g
149
+ id="g30">
150
+ <polygon
151
+ class="st1"
152
+ points="204.35,73.98 235.93,42.41 216.05,42.41 184.48,73.98 216.05,105.56 235.93,105.56 "
153
+ id="polygon26"
154
+ style="fill:#141210" />
155
+ <polygon
156
+ class="st1"
157
+ points="177.32,105.64 191.28,105.64 191.28,85.07 191.31,85.04 191.31,66.59 191.28,66.62 191.28,27.56 177.32,27.56 "
158
+ id="polygon28"
159
+ style="fill:#141210" />
160
+ </g>
161
+ <path
162
+ class="st1"
163
+ d="M 427.32,27.49 V 49.22 C 422.71,44.11 416.48,41 408.75,41 c -18.07,0 -29.41,15.95 -29.41,33.15 0,17.45 11.59,33.03 29.41,33.03 8.23,0 14.71,-3.49 19.2,-8.97 l 1.25,7.35 h 12.09 V 27.49 Z m -16.95,67.35 c -10.34,0 -16.57,-9.22 -16.57,-20.69 0,-11.22 6.23,-20.81 16.57,-20.81 9.35,0 17.83,7.73 17.83,20.81 -0.01,12.46 -7.86,20.69 -17.83,20.69 z"
164
+ id="path32"
165
+ inkscape:connector-curvature="0"
166
+ style="fill:#141210" />
167
+ <path
168
+ class="st1"
169
+ d="m 470.67,86.98 v -9.26 c 0,-14.33 6.98,-24.3 19.69,-24.3 V 41.07 c -9.35,0 -15.57,3.95 -19.69,9.91 v -8.49 h -14.05 v 44.48 h 14.05 z"
170
+ id="path34"
171
+ inkscape:connector-curvature="0"
172
+ style="fill:#141210" />
173
+ <path
174
+ class="st1"
175
+ d="M 327.26,86.98 V 76.59 c 0,-14.58 6.23,-23.18 16.33,-23.18 6.86,0 9.72,5.73 9.72,13.58 v 19.98 h 13.96 V 65.13 c 0,-14.83 -8.23,-24.05 -20.82,-24.05 -8.15,0 -14.71,2.95 -19.19,8.77 V 42.7 h -1.99 v -0.01 l -0.06,0.01 h -11.98 v 44.28 z"
176
+ id="path36"
177
+ inkscape:connector-curvature="0"
178
+ style="fill:#141210" />
179
+ </g>
180
+ </svg>
@@ -165,6 +165,14 @@ describe Minidusen::Filter do
165
165
  user_filter.filter(User, '-name_and_city_regex:Power').to_a.should == [match]
166
166
  end
167
167
 
168
+ it 'can be filtered twice' do
169
+ match = User.create!(:name => 'Sunny Flower', :city => "Flower")
170
+ no_match = User.create!(:name => 'Sunny Power', :city => "Power")
171
+ also_no_match = User.create!(:name => 'Sunny Forever', :city => "Forever")
172
+ first_result = user_filter.filter(User, '-name_and_city_regex:Power')
173
+ user_filter.filter(first_result, '-name_and_city_regex:Forever').to_a.should == [match]
174
+ end
175
+
168
176
  end
169
177
 
170
178
  context 'when the given query is blank' do
@@ -10,18 +10,23 @@ describe Minidusen::Parser do
10
10
  query[0].field.should == 'fieldname'
11
11
  query[0].value.should == 'fieldvalue'
12
12
  query[0].exclude.should == false
13
+ query[0].phrase?.should == false
13
14
  query[1].field.should == 'text'
14
15
  query[1].value.should == 'word'
15
16
  query[1].exclude.should == false
17
+ query[1].phrase?.should == false
16
18
  query[2].field.should == 'text'
17
19
  query[2].value.should == 'a phrase'
18
20
  query[2].exclude.should == false
21
+ query[2].phrase?.should == true
19
22
  query[3].field.should == 'text'
20
23
  query[3].value.should == 'deploy:rollback'
21
24
  query[3].exclude.should == false
25
+ query[3].phrase?.should == true
22
26
  query[4].field.should == 'text'
23
27
  query[4].value.should == 'db:seed'
24
28
  query[4].exclude.should == true
29
+ query[4].phrase?.should == true
25
30
  end
26
31
 
27
32
  it 'should parse field tokens first, because they usually give maximum filtering at little cost' do
@@ -45,6 +50,7 @@ describe Minidusen::Parser do
45
50
  query[0].field.should == 'text'
46
51
  query[0].value.should == 'deploy:rollback'
47
52
  query[0].exclude.should == false
53
+ query[0].phrase?.should == true
48
54
  end
49
55
 
50
56
  it 'should parse a field token which is at the beginning of the search string' do
@@ -53,6 +59,7 @@ describe Minidusen::Parser do
53
59
  query[0].field.should == 'filetype'
54
60
  query[0].value.should == 'pdf'
55
61
  query[0].exclude.should == false
62
+ query[0].phrase?.should == false
56
63
  end
57
64
 
58
65
  it 'should parse an excluded field token which is at the beginning of the search string' do
@@ -61,6 +68,7 @@ describe Minidusen::Parser do
61
68
  query[0].field.should == 'filetype'
62
69
  query[0].value.should == 'docx'
63
70
  query[0].exclude.should == true
71
+ query[0].phrase?.should == false
64
72
  end
65
73
 
66
74
  it 'only parses single colons as fields' do