From 89c0e6625d1a7b4519376b58dc3f1edf3efb7e7f Mon Sep 17 00:00:00 2001 From: Andy Meneely Date: Fri, 24 May 2019 11:23:19 -0400 Subject: [PATCH] xlsx, csv, yaml: explode defaults to "qty" (#262) Not "Qty" --- CHANGELOG.md | 1 + lib/squib/args/import.rb | 2 +- samples/data/explode_quantities.xlsx | Bin 8333 -> 9084 bytes samples/data/quantity_explosion.csv | 4 +- spec/api/api_data_spec.rb | 6 +- spec/data/csv/qty.csv | 4 +- spec/data/samples/data/_excel.rb.txt | 204 ------------------------- spec/data/xlsx/explode_quantities.xlsx | Bin 8333 -> 9092 bytes 8 files changed, 9 insertions(+), 212 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4fa319..24fcb00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Features: Bugs * `trim_radius` now defaults to 0 on `save_pdf`, not 38. (#270) +* `explode` on `xlsx` and `csv` now defaults to `qty`, not `Qty` (#262) Docs: * Documented the n-sided-ness of polygons and stars diff --git a/lib/squib/args/import.rb b/lib/squib/args/import.rb index 82e064d..5592eb9 100644 --- a/lib/squib/args/import.rb +++ b/lib/squib/args/import.rb @@ -9,7 +9,7 @@ module Squib def self.parameters { strip: true, - explode: 'Qty' + explode: 'qty' } end diff --git a/samples/data/explode_quantities.xlsx b/samples/data/explode_quantities.xlsx index 9e8b0abc1deea4e1a2e8b473806ac8080a7e380f..3be261c59e21001f126b4f2bd78516a06901a363 100644 GIT binary patch literal 9084 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 A5C8xG literal 8333 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 diff --git a/samples/data/quantity_explosion.csv b/samples/data/quantity_explosion.csv index efaa11c..d5bec9b 100644 --- a/samples/data/quantity_explosion.csv +++ b/samples/data/quantity_explosion.csv @@ -1,3 +1,3 @@ -Name,Qty +Name,qty Basilisk,3 -High Templar,1 \ No newline at end of file +High Templar,1 diff --git a/spec/api/api_data_spec.rb b/spec/api/api_data_spec.rb index 074482e..0d2c7ad 100644 --- a/spec/api/api_data_spec.rb +++ b/spec/api/api_data_spec.rb @@ -39,7 +39,7 @@ describe Squib::Deck do it 'explodes quantities' do expect(Squib.csv(file: csv_file('qty.csv')).to_h).to eq({ 'Name' => %w(Ha Ha Ha Ho), - 'Qty' => [3, 3, 3, 1], + 'qty' => [3, 3, 3, 1], }) end @@ -162,9 +162,9 @@ describe Squib::Deck do end it 'explodes quantities' do - expect(Squib.xlsx(explode: 'Qty', file: xlsx_file('explode_quantities.xlsx')).to_h).to eq({ + expect(Squib.xlsx(explode: 'Quantity', file: xlsx_file('explode_quantities.xlsx')).to_h).to eq({ 'Name' => ['Zergling', 'Zergling', 'Zergling', 'High Templar'], - 'Qty' => %w(3 3 3 1), + 'Quantity' => %w(3 3 3 1), }) end diff --git a/spec/data/csv/qty.csv b/spec/data/csv/qty.csv index e99bf95..4cc0172 100644 --- a/spec/data/csv/qty.csv +++ b/spec/data/csv/qty.csv @@ -1,3 +1,3 @@ -Name,Qty +Name,qty Ha, 3 -Ho, 1 \ No newline at end of file +Ho, 1 diff --git a/spec/data/samples/data/_excel.rb.txt b/spec/data/samples/data/_excel.rb.txt index 62db50e..52354db 100644 --- a/spec/data/samples/data/_excel.rb.txt +++ b/spec/data/samples/data/_excel.rb.txt @@ -343,24 +343,6 @@ surface: finish([]) cairo: antialias=(["subpixel"]) cairo: antialias=(["subpixel"]) cairo: antialias=(["subpixel"]) -cairo: antialias=(["subpixel"]) -cairo: antialias=(["subpixel"]) -cairo: antialias=(["subpixel"]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["white"]) -cairo: paint([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["white"]) -cairo: paint([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["white"]) -cairo: paint([]) -cairo: restore([]) cairo: save([]) cairo: new_path([]) cairo: set_source_color(["white"]) @@ -423,73 +405,6 @@ cairo: stroke([]) cairo: restore([]) cairo: save([]) cairo: new_path([]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: translate([0, 0]) -cairo: rounded_rectangle([0, 0, 825, 1125, 0, 0]) -cairo: set_source_color(["#0000"]) -cairo: fill_preserve([]) -cairo: set_source_color(["black"]) -cairo: set_line_width([2.0]) -cairo: set_line_join([0]) -cairo: set_line_cap([0]) -cairo: set_dash([[]]) -cairo: stroke([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: translate([0, 0]) -cairo: rounded_rectangle([0, 0, 825, 1125, 0, 0]) -cairo: set_source_color(["#0000"]) -cairo: fill_preserve([]) -cairo: set_source_color(["black"]) -cairo: set_line_width([2.0]) -cairo: set_line_join([0]) -cairo: set_line_cap([0]) -cairo: set_dash([[]]) -cairo: stroke([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: translate([0, 0]) -cairo: rounded_rectangle([0, 0, 825, 1125, 0, 0]) -cairo: set_source_color(["#0000"]) -cairo: fill_preserve([]) -cairo: set_source_color(["black"]) -cairo: set_line_width([2.0]) -cairo: set_line_join([0]) -cairo: set_line_cap([0]) -cairo: set_dash([[]]) -cairo: stroke([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["black"]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: move_to([0, 0]) -pango: font_description=([MockDouble]) -pango: text=(["Wood"]) -pango: width=([844800]) -pango: wrap=([#]) -pango: ellipsize=([#]) -pango: alignment=([#]) -pango: justify=([false]) -cairo: move_to([0, 0]) -cairo: move_to([0, 0]) -cairo: show_pango_layout([MockDouble]) -cairo: rounded_rectangle([0, 0, 0, 0, 0, 0]) -cairo: set_source_color(["red"]) -cairo: set_line_width([2.0]) -cairo: stroke([]) -pango: ellipsized?([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) cairo: set_source_color(["black"]) cairo: translate([0, 0]) cairo: rotate([0]) @@ -517,50 +432,6 @@ cairo: translate([0, 0]) cairo: rotate([0]) cairo: move_to([0, 0]) pango: font_description=([MockDouble]) -pango: text=(["Wood"]) -pango: width=([844800]) -pango: wrap=([#]) -pango: ellipsize=([#]) -pango: alignment=([#]) -pango: justify=([false]) -cairo: move_to([0, 0]) -cairo: move_to([0, 0]) -cairo: show_pango_layout([MockDouble]) -cairo: rounded_rectangle([0, 0, 0, 0, 0, 0]) -cairo: set_source_color(["red"]) -cairo: set_line_width([2.0]) -cairo: stroke([]) -pango: ellipsized?([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["black"]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: move_to([0, 0]) -pango: font_description=([MockDouble]) -pango: text=(["Metal"]) -pango: width=([844800]) -pango: wrap=([#]) -pango: ellipsize=([#]) -pango: alignment=([#]) -pango: justify=([false]) -cairo: move_to([0, 0]) -cairo: move_to([0, 0]) -cairo: show_pango_layout([MockDouble]) -cairo: rounded_rectangle([0, 0, 0, 0, 0, 0]) -cairo: set_source_color(["red"]) -cairo: set_line_width([2.0]) -cairo: stroke([]) -pango: ellipsized?([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["black"]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: move_to([0, 0]) -pango: font_description=([MockDouble]) pango: text=(["Metal"]) pango: width=([844800]) pango: wrap=([#]) @@ -627,72 +498,6 @@ cairo: translate([0, 0]) cairo: rotate([0]) cairo: move_to([0, 0]) pango: font_description=([MockDouble]) -pango: text=(["$2k"]) -pango: width=([844800]) -pango: wrap=([#]) -pango: ellipsize=([#]) -pango: alignment=([#]) -pango: justify=([false]) -cairo: move_to([0, 0]) -cairo: move_to([0, 0]) -cairo: show_pango_layout([MockDouble]) -cairo: rounded_rectangle([0, 0, 0, 0, 0, 0]) -cairo: set_source_color(["red"]) -cairo: set_line_width([2.0]) -cairo: stroke([]) -pango: ellipsized?([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["black"]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: move_to([0, 0]) -pango: font_description=([MockDouble]) -pango: text=(["$2k"]) -pango: width=([844800]) -pango: wrap=([#]) -pango: ellipsize=([#]) -pango: alignment=([#]) -pango: justify=([false]) -cairo: move_to([0, 0]) -cairo: move_to([0, 0]) -cairo: show_pango_layout([MockDouble]) -cairo: rounded_rectangle([0, 0, 0, 0, 0, 0]) -cairo: set_source_color(["red"]) -cairo: set_line_width([2.0]) -cairo: stroke([]) -pango: ellipsized?([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["black"]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: move_to([0, 0]) -pango: font_description=([MockDouble]) -pango: text=(["$3k"]) -pango: width=([844800]) -pango: wrap=([#]) -pango: ellipsize=([#]) -pango: alignment=([#]) -pango: justify=([false]) -cairo: move_to([0, 0]) -cairo: move_to([0, 0]) -cairo: show_pango_layout([MockDouble]) -cairo: rounded_rectangle([0, 0, 0, 0, 0, 0]) -cairo: set_source_color(["red"]) -cairo: set_line_width([2.0]) -cairo: stroke([]) -pango: ellipsized?([]) -cairo: restore([]) -cairo: save([]) -cairo: new_path([]) -cairo: set_source_color(["black"]) -cairo: translate([0, 0]) -cairo: rotate([0]) -cairo: move_to([0, 0]) -pango: font_description=([MockDouble]) pango: text=(["$3k"]) pango: width=([844800]) pango: wrap=([#]) @@ -736,16 +541,7 @@ cairo: set_source([MockDouble, 100, 0]) cairo: paint([]) cairo: set_source([MockDouble, 200, 0]) cairo: paint([]) -cairo: set_source([MockDouble, 0, 101]) -cairo: paint([]) -cairo: set_source([MockDouble, 100, 101]) -cairo: paint([]) -cairo: set_source([MockDouble, 200, 101]) -cairo: paint([]) surface: write_to_png(["_output/sample_excel_resources_00.png"]) surface: finish([]) surface: finish([]) surface: finish([]) -surface: finish([]) -surface: finish([]) -surface: finish([]) diff --git a/spec/data/xlsx/explode_quantities.xlsx b/spec/data/xlsx/explode_quantities.xlsx index 9e8b0abc1deea4e1a2e8b473806ac8080a7e380f..f9e3aca935bfc7d7b5f73d4d6ec87f22736f7d14 100644 GIT binary patch literal 9092 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 LU^S)x@$Y{C)Q*gG literal 8333 zcmeHMcT`i`(hpraQl%r(yL6Q%MQNc*7m(gb=%558K?oh`LIml(S3ybuLFs~o5;^v=3jlbD z2LMn3&{$?lAa`#&cW=vk0bn~Xb0L2>SGMeNES{GDY|Qh2AOBkx=uZS{b&60tJyiX8 zb%&PIJu-yCc?wTnqY#&=eIlW|*v5>dp|-&xewauHes2UXU0GLrv*o+}+H#=Tb6Xs& zx|$n|4%d>OBxyM{_fM|&DLovZjOyUCLOeyR111A~gCrr70qr5hf(xZl?>~WKszcNt zEXWui={M?xt7clgYl-8p!j+?sE^qXfgho4+N=&#ODPutm;{=r9vDxgbtr9Zv47EcZ zcODA7awB%xL=bL9C$sB$wpOi#xvWGeYUpT{^Y8RBR7ILTJ$HtCH~pyoz{^2?_z?Vml$ARYaM)lRG$>s38jndb5desqSQ!7?piUVegsA{w$$ z&iQg#5W4%;2?fJZh`t}JE~};pXCUiudhLX@I+K2#9b}P!q;IY0zTFmk`)*9%<9M5I zMJJ5p0xE!gCY)(KZuxS{y5j}U3E(m|lYHDMeR;_($#|*5)ioRd;QSm1pz|l+t1}R} zwvPdnCdRdh0fShUo_4NY!a_f;Y}vhk``rJGuSLZVVcd+QdsFqb(%kWiyXvK^yk!Ncw6b=tUaG>fo==TSUL-J-b8w*bNSedMawK|)4ZdZv}KN@%TFUvF} ze`(F`;6&ZS5W{3;G(F>L>7SdJZascnSREP3(3E&`&03sUo0@og%`@+rh;FZy&S2u_QLH@!E5bG4JD1{8FTYbLsO7_G>L+HXZ z#XdC{%`Rf}^1EYp8=MTTsr%Y{=k?Ma>>A<2s-JgdK1FybtgZ$NWjYppYZ;W8EeQDn zwEbpZ7#rh24DGxR#&wRjm0t4U@mcOg;Kj7{M@^rBVfn0uMntwtc_XqSb z&;I{DUMCDW{{#)J1@<1|5$|r7c(Wzyc7@p?fJ=9FxJxqmfEy&Apwy)BPAH2G#&H6X zA1*lkQn1-YhwuEtAdZvwQf*#|DVpb-bc>t}j15&k@}j2jfdW*?<8i~|PA#t!<@|k) z>r+rydErWhz~-0X*To>%RT`p(q0*0gXqcF6YG55m?S8;RFX{#7CU(E z(%j^(5$G}R5Sv_K{1!wvXiIS;Vr7_(Kh>0@=N(sg7h6T=oK)z$ln2#}owgbxXbG#g zOHambg{3Msl{%v=paG^dpAp{ zcys*{RSvn_bj9eXmv-}gW@i;SE8% z>~&REo_`Us<0WpCQZa)aa8nXTJWAZ;o0Luy)+l=LXbQfSAFv>?BFCdn?RR!tm7G0? zN&rY8&rt8SVOrE79_=9B8^&oVa9L-^@H=U_pZ(poiI6HM1$_Q`%A1D}p2WE=p*j)s zJCnF&vKb{N>T2WKGkIGyF<&|8A8NDtB@HbJrWXXuG(Ffn?KC@5^=|v9&R4VA#$QvLoB|4lXe=;V)^nq>+n|#bM2UTqH-c{z7Pvs4TrVd^AnRDVT_^w z>dedeoQ+U?06?Gd2WkAd6yA<@Zg#>yuh)OL@|uY@2rWt7Mn2)k<_&V=u4g3hiI}KL zF9R}mxrebhJx?~)&sG>wgD_5geS+25WR-%|ye{I(KaAb%oylbuR)%v#bD*kTeWg!h z1fLN#7N*SpIPm<_*K0oeQ!sdz5BIZdvm;?9+YD=VmXo3f`;R zRVkCcl|!X$F^<_o9t|KF@u@`_v{QzsvQC54 zWy3V3(SlDwfWVxz4muuqs7#Z1Bw_4Wv2o-UMCb@GtPn~Q{Va{!77BsS3dP)kS`Pp~ zl=oAslv?jIjJ%H9!vo$!AB!O4E)zej$as9d@?C##<$J={u%Q^%Gw+k7_uHMUf`SfT zgkoT`9VwrJ4i?8*bL2CEc6YYv=KW2&&W}2|+fGgbZcvCiUVR@aoOyDv_AatQ?)0>| zhjYs<_^!&gxI4<(W^7>wiz#|LxC0x!RV*Xrq!``lu%p=;* zNMV}?$0Bpu&z3pFI^U6SkH)H12MWwCSm9 zF~K$vBUbM@n2wXS-VkHrXNpVZ$zA-G7)QCjp}R8S6MF>JkkegaQDN590E*^bh{eHUZ$jHOtWwr(jcmmO3k;( z``=XVYx8Y+D_ptTa{XDg>wp{95iKGJN2!I+=a?n^u8l!>Cv`(WP zPyF7b>K1lO;?K~0t#2ST(>GCH%iuwlfX|T~%`k^;xnN_<8ULBFX+NLwN2{wF#rNf0 z>ddK)3tO53Dj`+N@i|Groe)t;9j`m?>Z9Bm69V0kD<4+-v7XI^<#UAe)HdE~RCrK> zPgpLO&BqiX9n8|a;KUxRsYXD_dB0q% zN@u&Ez>>(QsJiKOe8j6a{$JS5Ih16$iehVL`s9k~x$UZ~g>cw>)dO>f0t$@F+RO6Z zwPH2YNEf{=Z-tsKv`B61(ISb3mtV_1ixCjw;*NZ;i*}JfF|h1-j2v)*OP}`eU{z>L zf3u=(pN^{tAwAYln6&-gkzS^GU5d~dtZ%j6np>$)KzVhHEIEsmR4geJ5GldUe{PD? z|4^4`LiI5zFG`B-%9#XjdrY~@J6pv-18-j|W%OWceqQ1b^<@}1FyxLa7nw+-Wf{Ob1sA1Yc1#icV22-=DWN`}@+m2wm6p2ve>#ORY zM+lbXE6;Vmh#h+A)GBwa=6)^JK1pX<($R?YAkbQC&lj3d0^6Fz1zD?7_>?&d%FQ z_~#({BX33NAl17>C|Zcmlv104MkYyl>+AxNEV!5VGu*h{COD|#O^nWGYVGKdkqrR> zAd7_-=hOMpZ(XS*-x+9C2(cj=FSa41n;>+_BZ}~(%|y;vi9j2uk5_;$Gw;Ueleg@* zzTN9=XEM~w_f;s+yNw007gs5e?wshOW-oR(^)$3dnJ@G1^-pCs+?Hp_t#k5FT1RFr zPI6=$AU3sOgoJ6uV$T_I!r@J!VR&!z(^^kO{59L`ujfx(UcWnARFcJ%w-f7oE6+bX zTd9mJ*>d?CJfBtCs9vTSL|yWl8A4x{t4J)(#=qf0hiwUt+u7Fk$HY6_1y>qR03K&HDQ zHaj2Z@QQ@wUvUW2^yLQdF5S(z%&F1>LesqnWYbZyP!o`WnerkGWlpNZm=Kr!_6VbC z9rmIhPZzizt}ymdyX>}{Um7iasHw3x|9Dhl#vJ2ceW}oFbM+2z zwfi~ATz#bTM~utS?T{-T-f1Q#b*p-zWOX$zQK5dg#Pyv8($O||yLw~X!S>e7v_4sj zv9`7tD8qhkc6;qM!c|k~0dK=0Bd>rYQhH7O`(ow!k$HqNLv-kq`otXIPF2&f9tQ)m zmAQ-)Ntvo1z_Id}FDWf&|K@bq40~qn)rY{>(J#~?wNtr>x!dcK=>+q2N+vXJ3hLQ} zIF!xC@M6{TE;Sr6v!dc`LW*p*WQS{1uqpJ7*%W-EyD6Qf>&#JNEqz^cj^VpxO8vRL zoGF|h@i@k$Yt>j>#o6P^lCv37*2u7`#htg)sdo8|+S$#8J?k52185qNp$c>Mmkmox zNPaQ4tA?w1(?+Thk?iAD1!@_buikVzI7<7^ssOE8Hdr$|A!qecQ;UY5KObgfXz~W2 zUJh{xMMy$7aSm8oA3 zy^hHaNB8pCDNm6{b8M#&mWtkxMyqG>YM5FL9>NIq;q_b3!S>pEefz@i@UbDn9iaGqHfT@CShdce?_(LqK;^bBESQLit*J5|nQ?-TpQiyf&Ms z7AZPp8L7tCNoBQo7G`y9Q3rNGkK*D}bp6QLq?qCKx5b&9^I`eTR~wL{VS% z4PBj5?QDV#^WIMGc8zQsfkc#QwUJdT%6TQvQnG043Ie!ubs+a96E9zl+q1T5*9z%d z&>k3(-whXSmi4{UD&CjM)^7sbIeYUx5BlF)tsK;lY#OYoPnD9sW9+5m^=}Xl;7kVi zm#$}yN7Qk_8x;El|$7Nr8$W8Ej(Pq z_=vEkY)VQMHs54fw`uWEt6O862TPUUWBl)lys4G# z5VuG(K{Uw_(eyUo#>vf(0cOzGE_a8VWWh%hI3%{z(8{X^x&h`NY27jPEc`K&!j z$0E#6Nm5$K?8tI-WHp97)3+e*NnRs4lA(-eTJKE!=EFT2yHBwUrJwb6Ihq8Q8XT86 zypRP&6V7&4Nl|ur0?^NkP-ECiXuU31HnpIj+3=iA=z<>u8fqs@l-0>=T#~IDLuoiJ z$pLZ2(MueXYqcg-;PH395&@B3f6={A@_Lz34?H`bk@Hbi^Lv_CR8z z!xeu5gj>FMn5lgo+s0Zk$p@&ofE(i6p9eG54d@1M(+a6Jb!ZX@3e`9Er=m^ zzu#>A*V_GS{LR*@j>exA{CUUdUxGizK+G%uuzz$>@Xzh{KMFcx`gs4j8GljF#U|`8 zO~sh~)IX3@MJd@!M;{S})IvRKwqyYdVKYkdnx-kFv_kZ)=Gb{iA