zon_blog_cafe_comment 0.0.55 → 0.0.61

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/zon_blog_cafe_comment.rb +250 -48
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 733c795338222684713460c520f1ac46bec2e61f1d2bc4cfb0be1d4a75f05f1a
4
- data.tar.gz: 8a81c9f8ea1408c681abd735532b8b04749173ff2c3e3880030ede3283dac788
3
+ metadata.gz: 3948c43ce2529657d53c6bdae7638ef1cd545115ae94ac8dc5fc3da58e94c8ae
4
+ data.tar.gz: b663e7b7be16e3ec4a39b0f0aaddc5dd2ddb6d9a033b38d5cf6a3dfdc0f0410f
5
5
  SHA512:
6
- metadata.gz: 6e0d385fe4a635d25832a7ee2f1493e38dbbac1c62603250a428fbb0d0055d8886a6e52be39720bf496328ced03bf30d589a2580e660d1868bfa24b27cf47ccd
7
- data.tar.gz: bf8b9315c2a0345426fb1dbc2047c0969ae7dbf23356aa1882581b90ac515650f7dc23e6a6f786a4dcb59eb7dca9bb3588bc84d95a104ab2f5916dcbd450eed3
6
+ metadata.gz: 813bef3f1d23e188e02417f9826c6cf87ca2b71b19b3b2455a7d36b339a5505270d9199d9c00ae7bff06651513898f9dcd493919007f35bcce8040348894dd88
7
+ data.tar.gz: e9bd7194c0d2e338d286c7623bccfd71d28bef77ee0eb0b9b23a484f9ebfc749f9222e120af32dff6f210b1feaef387d3b290d26820fb627bcf5c1e944d0333a
@@ -22,7 +22,8 @@ include Glimmer
22
22
 
23
23
 
24
24
  class Naver
25
- def initialize
25
+ def initialize(data)
26
+ @data = data
26
27
  @seed = 1
27
28
  end
28
29
 
@@ -274,12 +275,13 @@ class Naver
274
275
 
275
276
 
276
277
 
277
- def update(content,board_url,blog_url,nickname,image,option,counts_number,keyword,api_key)
278
+ def update(content,board_url,blog_url,nickname,image,option,counts_number,keyword,api_key,sleep_delay)
278
279
  @board_url = board_url
279
280
  @keyword = keyword
280
281
  @content = content
281
282
  @api_key = api_key
282
283
  @blog_url = blog_url
284
+ @sleep_delay = sleep_delay
283
285
  if option['카페사용모드'] == 'true'
284
286
 
285
287
 
@@ -490,6 +492,42 @@ class Naver
490
492
  sleep(1)
491
493
  @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="cafe_main"]')) # 아이프레임 선택
492
494
 
495
+ sleep(1)
496
+ puts "게시글 읽는 모션 진행".yellow
497
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
498
+ sleep(1)
499
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
500
+ sleep(1)
501
+
502
+ content_soon = 0
503
+ # 💬 content 설정 (여기 추가!)
504
+ if @data['내용설정']['내용'].nil? || @data['내용설정']['내용'].empty?
505
+ content = ''
506
+ else
507
+ if @data.dig('내용설정', '랜덤사용')&.respond_to?(:checked?) && @data['내용설정']['랜덤사용'].checked?
508
+ content = @data['내용설정']['내용'].sample[2] # 랜덤 사용 시
509
+ else
510
+ content = @data['내용설정']['내용'][content_soon][2] # 순차적으로 사용
511
+ content_soon += 1
512
+ if content_soon >= @data['내용설정']['내용'].length
513
+ content_soon = 0
514
+ end
515
+ end
516
+ end
517
+
518
+ # 디엠 자동 변경이 체크된 경우 content를 변환
519
+ if @data['포스트설정']['내용자동변경'].checked?
520
+ change_memory = {}
521
+ @data['포스트설정']['내용자동변경값'].each do |key, v|
522
+ change_memory[key] = v.sample
523
+ end
524
+ @data['포스트설정']['내용자동변경값'].each do |key, _|
525
+ if content.include?(key)
526
+ content = content.gsub(key, change_memory[key]) # gsub을 사용하여 내용 치환
527
+ else
528
+ end
529
+ end
530
+ end
493
531
 
494
532
  if option['좋아요'] == 'true'
495
533
  puts "좋아요 클릭 옵션 진행!!".cyan
@@ -570,6 +608,7 @@ class Naver
570
608
  sleep(1)
571
609
  else
572
610
  begin
611
+ puts (content)
573
612
  @driver.find_element(:xpath, '//*[@placeholder="댓글을 남겨보세요"]').send_keys(content)
574
613
  sleep(1)
575
614
  rescue
@@ -688,6 +727,18 @@ class Naver
688
727
  end
689
728
  end
690
729
  @driver.switch_to.default_content() # 아이프레임 해제
730
+ def sleep_with_progress(sleep_delay)
731
+ print "[설정 딜레이 진행 중] "
732
+ steps = (sleep_delay.to_f / 0.5).to_i
733
+ steps.times do
734
+ print "."
735
+ STDOUT.flush
736
+ sleep(1)
737
+ end
738
+ puts "\n"
739
+ end
740
+
741
+ sleep_with_progress(sleep_delay)
691
742
  rescue => e
692
743
  puts "Error: #{e.message}"
693
744
  end
@@ -707,6 +758,43 @@ class Naver
707
758
  wait.until { @driver.find_element(:xpath, '//*[@id="cafe_main"]') } # 아이프레임 선택
708
759
  sleep(1)
709
760
  @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="cafe_main"]')) # 아이프레임 선택
761
+
762
+ sleep(1)
763
+ puts "게시글 읽는 모션 진행".yellow
764
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
765
+ sleep(1)
766
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
767
+ sleep(1)
768
+
769
+ content_soon = 0
770
+ # 💬 content 설정 (여기 추가!)
771
+ if @data['내용설정']['내용'].nil? || @data['내용설정']['내용'].empty?
772
+ content = ''
773
+ else
774
+ if @data.dig('내용설정', '랜덤사용')&.respond_to?(:checked?) && @data['내용설정']['랜덤사용'].checked?
775
+ content = @data['내용설정']['내용'].sample[2] # 랜덤 사용 시
776
+ else
777
+ content = @data['내용설정']['내용'][content_soon][2] # 순차적으로 사용
778
+ content_soon += 1
779
+ if content_soon >= @data['내용설정']['내용'].length
780
+ content_soon = 0
781
+ end
782
+ end
783
+ end
784
+
785
+ # 디엠 자동 변경이 체크된 경우 content를 변환
786
+ if @data['포스트설정']['내용자동변경'].checked?
787
+ change_memory = {}
788
+ @data['포스트설정']['내용자동변경값'].each do |key, v|
789
+ change_memory[key] = v.sample
790
+ end
791
+ @data['포스트설정']['내용자동변경값'].each do |key, _|
792
+ if content.include?(key)
793
+ content = content.gsub(key, change_memory[key]) # gsub을 사용하여 내용 치환
794
+ else
795
+ end
796
+ end
797
+ end
710
798
 
711
799
  if option['좋아요'] == 'true'
712
800
  puts "좋아요 클릭 옵션 진행!!".cyan
@@ -787,6 +875,7 @@ class Naver
787
875
  sleep(1)
788
876
  else
789
877
  begin
878
+ puts (content)
790
879
  @driver.find_element(:xpath, '//*[@placeholder="댓글을 남겨보세요"]').send_keys(content)
791
880
  sleep(1)
792
881
  rescue
@@ -907,6 +996,17 @@ class Naver
907
996
 
908
997
  end
909
998
  @driver.switch_to.default_content() # 아이프레임 해제
999
+ def sleep_with_progress(sleep_delay)
1000
+ print "[설정 딜레이 진행 중] "
1001
+ steps = (sleep_delay.to_f / 0.5).to_i
1002
+ steps.times do
1003
+ print "."
1004
+ STDOUT.flush
1005
+ sleep(1)
1006
+ end
1007
+ puts "\n"
1008
+ end
1009
+ sleep_with_progress(sleep_delay)
910
1010
  rescue => e
911
1011
  puts "Error: #{e.message}"
912
1012
  end
@@ -1008,6 +1108,42 @@ class Naver
1008
1108
  sleep(1)
1009
1109
  @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="cafe_main"]')) # 아이프레임 선택
1010
1110
 
1111
+ sleep(1)
1112
+ puts "게시글 읽는 모션 진행".yellow
1113
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
1114
+ sleep(1)
1115
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
1116
+ sleep(1)
1117
+
1118
+ content_soon = 0
1119
+ # 💬 content 설정 (여기 추가!)
1120
+ if @data['내용설정']['내용'].nil? || @data['내용설정']['내용'].empty?
1121
+ content = ''
1122
+ else
1123
+ if @data.dig('내용설정', '랜덤사용')&.respond_to?(:checked?) && @data['내용설정']['랜덤사용'].checked?
1124
+ content = @data['내용설정']['내용'].sample[2] # 랜덤 사용 시
1125
+ else
1126
+ content = @data['내용설정']['내용'][content_soon][2] # 순차적으로 사용
1127
+ content_soon += 1
1128
+ if content_soon >= @data['내용설정']['내용'].length
1129
+ content_soon = 0
1130
+ end
1131
+ end
1132
+ end
1133
+
1134
+ # 디엠 자동 변경이 체크된 경우 content를 변환
1135
+ if @data['포스트설정']['내용자동변경'].checked?
1136
+ change_memory = {}
1137
+ @data['포스트설정']['내용자동변경값'].each do |key, v|
1138
+ change_memory[key] = v.sample
1139
+ end
1140
+ @data['포스트설정']['내용자동변경값'].each do |key, _|
1141
+ if content.include?(key)
1142
+ content = content.gsub(key, change_memory[key]) # gsub을 사용하여 내용 치환
1143
+ else
1144
+ end
1145
+ end
1146
+ end
1011
1147
 
1012
1148
  if option['좋아요'] == 'true'
1013
1149
  puts "좋아요 클릭 옵션 진행!!".cyan
@@ -1088,6 +1224,7 @@ class Naver
1088
1224
  sleep(1)
1089
1225
  else
1090
1226
  begin
1227
+ puts (content)
1091
1228
  @driver.find_element(:xpath, '//*[@placeholder="댓글을 남겨보세요"]').send_keys(content)
1092
1229
  sleep(1)
1093
1230
  rescue
@@ -1208,6 +1345,19 @@ class Naver
1208
1345
 
1209
1346
  end
1210
1347
  @driver.switch_to.default_content() # 아이프레임 해제
1348
+ def sleep_with_progress(sleep_delay)
1349
+ print "[설정 딜레이 진행 중] "
1350
+ steps = (sleep_delay.to_f / 0.5).to_i
1351
+ steps.times do
1352
+ print "."
1353
+ STDOUT.flush
1354
+ sleep(1)
1355
+ end
1356
+ puts "\n"
1357
+ end
1358
+ sleep_with_progress(sleep_delay)
1359
+
1360
+
1211
1361
  rescue => e
1212
1362
  puts "Error: #{e.message}"
1213
1363
  end
@@ -1400,48 +1550,60 @@ class Naver
1400
1550
  @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="mainFrame"]')) # 아이프레임 선택
1401
1551
  sleep(1)
1402
1552
  begin
1403
- @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]').click
1404
- sleep(2)
1405
- rescue
1553
+ element = @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]') # 목록 열기 코드
1554
+ text = element.text.strip
1555
+
1556
+ if text == "목록열기"
1557
+ element.click
1558
+ sleep(2)
1559
+ else
1560
+
1561
+ end
1562
+ rescue
1406
1563
  begin
1407
- @driver.find_element(:xpath, '//*[@class="off itemfont _doNclick _param(false|blog|)"]').click
1408
- sleep(2)
1564
+ @driver.find_element(:xpath, '//*[@class="off itemfont _doNclick _param(false|blog|)"]').click #블로그 txt 클릭
1565
+ sleep(2)
1566
+ rescue
1567
+ begin
1568
+ @driver.find_element(:xpath, '//*[@class="on itemfont _doNclick _param(false|blog|)"]').click #블로그 txt 클릭
1569
+ sleep(2)
1570
+ rescue
1571
+ end
1572
+ end
1573
+
1574
+ begin
1409
1575
  begin
1410
1576
  wait = Selenium::WebDriver::Wait.new(:timeout => 5)
1411
- wait.until { @driver.find_element(:xpath, '//*[@id="category0"]') }
1577
+ wait.until { @driver.find_element(:xpath, '//*[@id="category0"]') } # 전체 보기 클릭
1412
1578
  element = @driver.find_element(:xpath, '//*[@id="category0"]')
1413
1579
  @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
1414
1580
  sleep(2)
1415
- @driver.find_element(:xpath, '//*[@id="category0"]').click
1581
+ @driver.find_element(:xpath, '//*[@id="category0"]').click # 전체 보기 클릭
1416
1582
  sleep(2)
1417
1583
  rescue
1418
1584
  end
1419
1585
  wait = Selenium::WebDriver::Wait.new(:timeout => 5)
1420
- wait.until { @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]') }
1586
+ wait.until { @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]') } # 목록 열기 코드
1421
1587
  element = @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]')
1422
1588
  @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
1423
- sleep(2)
1424
- @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]').click
1425
- sleep(1)
1426
- rescue => e
1427
- @driver.window_handles.each do |handle|
1428
- @driver.switch_to.window(handle)
1429
- begin
1430
- # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
1431
- puts 'id="toplistSpanBlind" 요소를 찾지 못했습니다.'
1432
- @driver.close
1433
- rescue Selenium::WebDriver::Error::WebDriverError => e
1434
- puts "Failed to close tab: #{e.message}"
1435
- end
1589
+ sleep(2)
1590
+ element = @driver.find_element(:xpath, '//*[@id="toplistSpanBlind"]')
1591
+ text = element.text.strip
1592
+
1593
+ if text == "목록열기"
1594
+ element.click
1595
+ sleep(2)
1596
+ else
1436
1597
  end
1437
- @driver.quit
1598
+ sleep(1)
1599
+ rescue
1438
1600
  end
1439
1601
  end
1440
1602
 
1441
1603
 
1442
1604
  begin
1443
1605
  wait = Selenium::WebDriver::Wait.new(:timeout => 3)
1444
- wait.until { @driver.find_element(:xpath, '//*[@class="aline"]') }
1606
+ wait.until { @driver.find_element(:xpath, '//*[@class="aline"]') } # 목록 리스트 (5줄 보기) 클릭
1445
1607
  element = @driver.find_element(:xpath, '//*[@class="aline"]')
1446
1608
  @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
1447
1609
  sleep(2)
@@ -1450,24 +1612,13 @@ class Naver
1450
1612
  rescue
1451
1613
  begin
1452
1614
  wait = Selenium::WebDriver::Wait.new(:timeout => 3)
1453
- wait.until { @driver.find_element(:xpath, '//*[@id="listCountToggle"]') }
1615
+ wait.until { @driver.find_element(:xpath, '//*[@id="listCountToggle"]') } # 목록 리스트 (5줄 보기) 클릭
1454
1616
  element = @driver.find_element(:xpath, '//*[@id="listCountToggle"]')
1455
1617
  @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element)#크롤 이동
1456
1618
  sleep(2)
1457
1619
  element.send_keys(:return)
1458
1620
  sleep(1)
1459
- rescue => e
1460
- @driver.window_handles.each do |handle|
1461
- @driver.switch_to.window(handle)
1462
- begin
1463
- # 로딩 중이거나, 페이지가 완전히 로딩되지 않더라도 탭을 닫기
1464
- puts 'class="aline" 요소를 찾지 못했습니다.'
1465
- @driver.close
1466
- rescue Selenium::WebDriver::Error::WebDriverError => e
1467
- puts "Failed to close tab: #{e.message}"
1468
- end
1469
- end
1470
- @driver.quit
1621
+ rescue
1471
1622
  end
1472
1623
  end
1473
1624
 
@@ -1579,7 +1730,7 @@ class Naver
1579
1730
  end
1580
1731
 
1581
1732
  @driver.switch_to.default_content
1582
- end
1733
+ end
1583
1734
 
1584
1735
  collected_urls.each do |url|
1585
1736
  # 각 post-url로 이동
@@ -1591,8 +1742,16 @@ class Naver
1591
1742
  @driver.switch_to.frame(@driver.find_element(:xpath, '//*[@id="mainFrame"]')) # 아이프레임 선택
1592
1743
  sleep(1)
1593
1744
 
1745
+ sleep(1)
1746
+ puts "게시글 읽는 모션 진행".yellow
1747
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
1748
+ sleep(1)
1749
+ @driver.action.send_keys(:page_down).perform #스크롤 내리기
1750
+ sleep(1)
1751
+
1594
1752
  if option['이웃추가'] == 'true'
1595
1753
  begin
1754
+ sleep(1)
1596
1755
  begin
1597
1756
  wait = Selenium::WebDriver::Wait.new(:timeout => 3)
1598
1757
  #요소가 나타날 때까지 10초 동안 기다립니다.
@@ -1667,7 +1826,7 @@ class Naver
1667
1826
 
1668
1827
  elsif option['서로이웃추가'] == 'true'
1669
1828
  begin
1670
-
1829
+ sleep(1)
1671
1830
  begin
1672
1831
  wait = Selenium::WebDriver::Wait.new(:timeout => 3)
1673
1832
  #요소가 나타날 때까지 10초 동안 기다립니다.
@@ -1748,7 +1907,7 @@ class Naver
1748
1907
 
1749
1908
  if option['공유하기'] == 'true'
1750
1909
  begin
1751
-
1910
+ sleep(1)
1752
1911
  wait = Selenium::WebDriver::Wait.new(:timeout => 10)
1753
1912
  #요소가 나타날 때까지 10초 동안 기다립니다.
1754
1913
  wait.until { @driver.find_element(:xpath, '//*[@class="_spi_blog spi_btn_blog"]') }
@@ -1840,7 +1999,7 @@ class Naver
1840
1999
 
1841
2000
  elsif option['공유하기비공개'] == 'true'
1842
2001
  begin
1843
-
2002
+ sleep(1)
1844
2003
  wait = Selenium::WebDriver::Wait.new(:timeout => 10)
1845
2004
  #요소가 나타날 때까지 10초 동안 기다립니다.
1846
2005
  wait.until { @driver.find_element(:xpath, '//*[@class="_spi_blog spi_btn_blog"]') }
@@ -1937,7 +2096,7 @@ class Naver
1937
2096
 
1938
2097
  if option['좋아요'] == 'true'
1939
2098
  begin
1940
-
2099
+ sleep(1)
1941
2100
  wait = Selenium::WebDriver::Wait.new(:timeout => 3)
1942
2101
  wait.until { @driver.find_element(:xpath, '//*[@class="u_ico _icon pcol3"]') }
1943
2102
 
@@ -1978,6 +2137,36 @@ class Naver
1978
2137
  else
1979
2138
  end
1980
2139
 
2140
+ content_soon = 0
2141
+ # 💬 content 설정 (여기 추가!)
2142
+ if @data['내용설정']['내용'].nil? || @data['내용설정']['내용'].empty?
2143
+ content = ''
2144
+ else
2145
+ if @data.dig('내용설정', '랜덤사용')&.respond_to?(:checked?) && @data['내용설정']['랜덤사용'].checked?
2146
+ content = @data['내용설정']['내용'].sample[2] # 랜덤 사용 시
2147
+ else
2148
+ content = @data['내용설정']['내용'][content_soon][2] # 순차적으로 사용
2149
+ content_soon += 1
2150
+ if content_soon >= @data['내용설정']['내용'].length
2151
+ content_soon = 0
2152
+ end
2153
+ end
2154
+ end
2155
+
2156
+ # 디엠 자동 변경이 체크된 경우 content를 변환
2157
+ if @data['포스트설정']['내용자동변경'].checked?
2158
+ change_memory = {}
2159
+ @data['포스트설정']['내용자동변경값'].each do |key, v|
2160
+ change_memory[key] = v.sample
2161
+ end
2162
+ @data['포스트설정']['내용자동변경값'].each do |key, _|
2163
+ if content.include?(key)
2164
+ content = content.gsub(key, change_memory[key]) # gsub을 사용하여 내용 치환
2165
+ else
2166
+ end
2167
+ end
2168
+ end
2169
+
1981
2170
  begin #댓글 작업 >> 시작
1982
2171
  # 댓글 쓰기 버튼 클릭
1983
2172
  begin
@@ -2272,8 +2461,20 @@ class Naver
2272
2461
  ff.close()
2273
2462
  puts '-[√] 로그 파일 생성 완료.......'.yellow
2274
2463
  end
2275
- end
2276
-
2464
+ end
2465
+
2466
+ def sleep_with_progress(sleep_delay)
2467
+ print "[설정 딜레이 진행 중] "
2468
+ steps = (sleep_delay.to_f / 0.5).to_i
2469
+ steps.times do
2470
+ print "."
2471
+ STDOUT.flush
2472
+ sleep(1)
2473
+ end
2474
+ puts "\n"
2475
+ end
2476
+ sleep_with_progress(sleep_delay)
2477
+
2277
2478
  rescue
2278
2479
 
2279
2480
  end #댓글 작업 >> 끝
@@ -2588,7 +2789,7 @@ end
2588
2789
  proxy = table[3].to_s
2589
2790
  user_id = table[1].to_s
2590
2791
  user_pw = table[2].to_s
2591
- naver = Naver.new
2792
+ naver = Naver.new(@data)
2592
2793
  @data['table'][index][-1] = 30
2593
2794
  @data['table'] << []
2594
2795
  @data['table'].pop
@@ -2811,7 +3012,8 @@ end
2811
3012
  # 댓글 설정 수 카운트
2812
3013
  counts_number = @data['table'][index][6].to_i
2813
3014
  api_key = @data['포스트설정']['api_key'].text.to_s.force_encoding('utf-8')
2814
- naver.update(content,board_url,blog_url,nickname,image,option,counts_number,keyword,api_key)
3015
+ sleep_delay = @data['table'][index][5].to_i
3016
+ naver.update(content,board_url,blog_url,nickname,image,option,counts_number,keyword,api_key,sleep_delay)
2815
3017
 
2816
3018
 
2817
3019
 
@@ -2820,7 +3022,7 @@ end
2820
3022
  @data['table'][index][-1] = 100
2821
3023
  @data['table'] << []
2822
3024
  @data['table'].pop
2823
- sleep(@data['table'][index][5].to_i)
3025
+ #sleep(@data['table'][index][5].to_i)
2824
3026
  end
2825
3027
  rescue => exception
2826
3028
  puts exception
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zon_blog_cafe_comment
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.55
4
+ version: 0.0.61
5
5
  platform: ruby
6
6
  authors:
7
7
  - zon
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-05-30 00:00:00.000000000 Z
10
+ date: 2025-06-19 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: File to Clipboard gem
13
13
  email: mymin26@naver.com