cafe_basics 0.0.31 → 0.0.33

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/cafe_basics.rb +168 -156
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63970183fe56cce3bc04a52a9cdf53a3a049923d02cfc62d3eac644c0a389d3d
4
- data.tar.gz: f80d8aa0b1702ae0e79b358fc3bd18eb8bc482346254d7815510f407ec797d82
3
+ metadata.gz: f3d916bbb9d8fb3762554106f61082e693d205cde24ee82993a875267f09ce08
4
+ data.tar.gz: 0ab7d65ce0f824de2ad62cc4d81ecc4525d3f023dd175789cb93ff1c47788062
5
5
  SHA512:
6
- metadata.gz: 974bab3e78ae2561cec35e03c29564d7440d49c93eabd0e0e0e21866e0c83f720a96c934b4fdb983010bbf11725a557a083f986644ab96a246a9318262a201cb
7
- data.tar.gz: 0ce2d1679f7d226b39b4e8f72d243d27326b2beded20b66f0fd713322d9d196ed586693d42fc185b6362a9f8de054c5a33df284ec651999e14a32a100df22d30
6
+ metadata.gz: 991b585dfe68e50ec6548dec70768375addac27f3aa9726e3f2788ee49692c272d851825b64a79317f155b1874c3b7a7e5a845b04a866e0ba71b9b92b5bd5d8b
7
+ data.tar.gz: b914c4cd8ede45e9703361467edb35cecd46d8562f5dab59f707b4280dfa927cc2c59eb2e40820c30ec9ea465b799355ab3e8358d838c72027916fa8ff5caba6
data/lib/cafe_basics.rb CHANGED
@@ -233,9 +233,9 @@ class Naver
233
233
  options.add_argument('--disable-gpu')
234
234
  options.add_argument('--remote-debugging-port=9222')
235
235
  options.add_argument('user-data-dir=C:/naver_cookie/' + user_id)
236
- @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
236
+ @driver = Selenium::WebDriver.for(:chrome, options: options)
237
237
  rescue
238
- @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
238
+ @driver = Selenium::WebDriver.for(:chrome, options: options)
239
239
  end
240
240
  else
241
241
  begin
@@ -256,7 +256,7 @@ class Naver
256
256
  options.add_argument('--disable-gpu')
257
257
  options.add_argument('--remote-debugging-port=9222')
258
258
  options.add_argument('user-data-dir=C:/naver_cookie/' + user_id)
259
- @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
259
+ @driver = Selenium::WebDriver.for(:chrome, options: options)
260
260
  rescue => e
261
261
  puts e
262
262
  puts 'proxy error...'
@@ -270,9 +270,9 @@ class Naver
270
270
  options.add_argument('--disable-gpu')
271
271
  options.add_argument('--remote-debugging-port=9222')
272
272
  options.add_argument('user-data-dir=C:/naver_cookie/' + user_id)
273
- @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
273
+ @driver = Selenium::WebDriver.for(:chrome, options: options)
274
274
  rescue
275
- @driver = Selenium::WebDriver.for(:chrome, capabilities: options)
275
+ @driver = Selenium::WebDriver.for(:chrome, options: options)
276
276
  end
277
277
  end
278
278
  end
@@ -738,182 +738,194 @@ class Naver
738
738
  };
739
739
  JS
740
740
  sleep(1)
741
- # 이미지 등록 버튼 클릭
742
- # 기다릴 시간 설정
743
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
744
- # 요소가 나타날 때까지 기다립니다.
745
- wait.until { @driver.find_element(:xpath, '//ul[@class="se-toolbar se-document-toolbar se-toolbar-flexible"]//li[@class="se-toolbar-item se-toolbar-item-image"]//button[@data-name="image"]') }
746
- # 해당 버튼을 찾고 클릭
747
- image_button = @driver.find_element(:xpath, '//ul[@class="se-toolbar se-document-toolbar se-toolbar-flexible"]//li[@class="se-toolbar-item se-toolbar-item-image"]//button[@data-name="image"]')
748
- @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", image_button) # 크롤 이동
749
- sleep(1)
750
- @driver.find_element(:xpath, '//ul[@class="se-toolbar se-document-toolbar se-toolbar-flexible"]//li[@class="se-toolbar-item se-toolbar-item-image"]//button[@data-name="image"]').click
751
- sleep(1)
752
-
753
- # 파일 경로 변환 (슬래시 -> 백슬래시)
754
- file_path = path.split('/').join("\\") # 윈도우 스타일 경로로 변환
755
- sleep(1)
756
- # 파일 입력 필드 찾기 (input[type="file"])
757
- file_input = @driver.find_element(:id, 'hidden-file')
758
- sleep(1)
759
- # send_keys로 파일 경로를 직접 입력하여 파일 업로드
760
- file_input.send_keys(file_path)
761
- sleep(3)
762
-
763
- @driver.action.key_down(:up).key_up(:up).perform
764
- sleep(1)
765
-
766
741
  begin
767
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
768
- #요소가 나타날 때까지 60초 동안 기다립니다.
769
- wait.until { @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//button[@data-name="image-resizing"]') }
770
- element = @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//button[@data-name="image-resizing"]')
771
- @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element) # 크롤 이동
772
- sleep(1)
773
- aria_expanded = element.attribute('aria-expanded')
774
- if aria_expanded == 'false'
775
- element.click
776
- sleep(1) # 클릭 잠시 대기
777
- else
778
- end
742
+ # 이미지 등록 버튼 클릭
743
+ # 기다릴 시간 설정
744
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
745
+ # 요소가 나타날 때까지 기다립니다.
746
+ wait.until { @driver.find_element(:xpath, '//ul[@class="se-toolbar se-document-toolbar se-toolbar-flexible"]//li[@class="se-toolbar-item se-toolbar-item-image"]//button[@data-name="image"]') }
747
+ # 해당 버튼을 찾고 클릭
748
+ image_button = @driver.find_element(:xpath, '//ul[@class="se-toolbar se-document-toolbar se-toolbar-flexible"]//li[@class="se-toolbar-item se-toolbar-item-image"]//button[@data-name="image"]')
749
+ @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", image_button) # 크롤 이동
750
+ sleep(1)
751
+ @driver.find_element(:xpath, '//ul[@class="se-toolbar se-document-toolbar se-toolbar-flexible"]//li[@class="se-toolbar-item se-toolbar-item-image"]//button[@data-name="image"]').click
752
+ sleep(1)
753
+
754
+ # 파일 경로 변환 (슬래시 -> 백슬래시)
755
+ file_path = path.split('/').join("\\") # 윈도우 스타일 경로로 변환
756
+ sleep(1)
757
+ # 파일 입력 필드 찾기 (input[type="file"])
758
+ file_input = @driver.find_element(:id, 'hidden-file')
759
+ sleep(1)
760
+ # send_keys로 파일 경로를 직접 입력하여 파일 업로드
761
+ file_input.send_keys(file_path)
762
+ sleep(3)
779
763
 
780
- begin
781
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
782
- #요소가 나타날 때까지 60초 동안 기다립니다.
783
- wait.until { @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]') }
784
- sleep(1)
785
- @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]').click
786
- sleep(1)
787
- @driver.action.key_down(:enter).key_up(:enter).perform #엔터
788
- sleep(1)
789
- rescue
790
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
791
- #요소가 나타날 때까지 60초 동안 기다립니다.
792
- wait.until { @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]//span[@class="se-custom-layer-resizing-reset-label" and text()="초기화"]') }
793
- sleep(1)
794
- @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]//span[@class="se-custom-layer-resizing-reset-label" and text()="초기화"]').click
795
- sleep(1)
796
- @driver.action.key_down(:enter).key_up(:enter).perform #엔터
797
- sleep(1)
798
- end
799
- rescue
800
- @driver.action.key_down(:down).key_up(:down).perform
764
+ @driver.action.key_down(:up).key_up(:up).perform
765
+ sleep(1)
801
766
 
802
- end
803
-
804
-
805
- if option['사진타이틀'] == 'true'
806
767
  begin
768
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
769
+ #요소가 나타날 때까지 60초 동안 기다립니다.
770
+ wait.until { @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//button[@data-name="image-resizing"]') }
771
+ element = @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//button[@data-name="image-resizing"]')
772
+ @driver.execute_script("arguments[0].scrollIntoView({block: 'center', inline: 'center'})", element) # 크롤 이동
773
+ sleep(1)
774
+ aria_expanded = element.attribute('aria-expanded')
775
+ if aria_expanded == 'false'
776
+ element.click
777
+ sleep(1) # 클릭 후 잠시 대기
778
+ else
779
+ end
780
+
781
+ begin
782
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
783
+ #요소가 나타날 때까지 60초 동안 기다립니다.
784
+ wait.until { @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]') }
785
+ sleep(1)
786
+ @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]').click
787
+ sleep(1)
788
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
789
+ sleep(1)
790
+ rescue
791
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
792
+ #요소가 나타날 때까지 60초 동안 기다립니다.
793
+ wait.until { @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]//span[@class="se-custom-layer-resizing-reset-label" and text()="초기화"]') }
794
+ sleep(1)
795
+ @driver.find_element(:xpath, '//li[@class="se-toolbar-item se-toolbar-item-resizing"]//div[@class="se-custom-layer-option se-custom-layer-option-resizing"]//div[@class="se-custom-layer-resizing-option-group"]//button[@class="se-custom-layer-resizing-reset-button"]//span[@class="se-custom-layer-resizing-reset-label" and text()="초기화"]').click
796
+ sleep(1)
797
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
798
+ sleep(1)
799
+ end
800
+ rescue
801
+ @driver.action.key_down(:down).key_up(:down).perform
802
+ end
803
+
804
+
805
+ if option['사진타이틀'] == 'true'
806
+ begin
807
+ @driver.action.key_down(:up).key_up(:up).perform
808
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
809
+ #요소가 나타날 때까지 60초 동안 기다립니다.
810
+ wait.until { @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]') }
811
+ sleep(1)
812
+ @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]').click
813
+ sleep(1)
814
+ @driver.action.send_keys(title).perform
815
+ sleep(1)
816
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
817
+ sleep(1)
818
+ rescue
819
+ @driver.action.key_down(:down).key_up(:down).perform
820
+ end
821
+ end
822
+
823
+
824
+ if i2.to_s.split('href="')[1] != nil
825
+ href2 = i2.to_s.split('href="')[1].split('"')[0]
807
826
  @driver.action.key_down(:up).key_up(:up).perform
808
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
809
- #요소가 나타날 때까지 60초 동안 기다립니다.
810
- wait.until { @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]') }
811
827
  sleep(1)
812
- @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]').click
828
+ @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[7]/div/button').click
813
829
  sleep(1)
814
- @driver.action.send_keys(title).perform
830
+ @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[7]/div/div/input').send_keys(href2)
815
831
  sleep(1)
816
- @driver.action.key_down(:enter).key_up(:enter).perform #엔터
832
+ @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[7]/div/div/button').click
817
833
  sleep(1)
818
- rescue
819
- @driver.action.key_down(:down).key_up(:down).perform
820
- end
821
- end
822
-
823
-
824
- if i2.to_s.split('href="')[1] != nil
825
- href2 = i2.to_s.split('href="')[1].split('"')[0]
826
- @driver.action.key_down(:up).key_up(:up).perform
827
- sleep(1)
828
- @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[7]/div/button').click
829
- sleep(1)
830
- @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[7]/div/div/input').send_keys(href2)
831
- sleep(1)
832
- @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[2]/ul/li[7]/div/div/button').click
833
- sleep(1)
834
- @driver.action.key_down(:enter).key_up(:enter).perform
835
- #key_stroke('enter')
836
- sleep(1)
834
+ @driver.action.key_down(:enter).key_up(:enter).perform
835
+ #key_stroke('enter')
836
+ sleep(1)
837
+ end
838
+ rescue => e
839
+ @driver.close
840
+ puts '이미지 등록실패! 인터넷 접속 불량 및 로딩 지연 다음 작업을 실행합니다.'
841
+ return 0
837
842
  end
838
843
 
839
844
  elsif i2.to_s.include?('<video')
840
845
  path = i2.to_s.split('src="')[1].split('"')[0]
841
846
  path = URI.decode_www_form(path)[0][0]
847
+ begin
848
+ @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[1]/ul/li[3]/button').click
849
+ sleep(3)
842
850
 
843
- @driver.find_element(:xpath, '//*[@id="'+page_id+'"]/div[1]/div/header/div[1]/ul/li[3]/button').click
844
- sleep(3)
845
-
846
-
847
- @driver.execute_script(<<~JS)
848
- window.URL.createObjectURL = function() {};
849
- HTMLInputElement.prototype.click = function() {
850
- console.log("File dialog suppressed");
851
- };
852
- JS
853
- sleep(1)
854
- # 파일 업로드 버튼 클릭 (이제 파일 선택 창이 뜨지 않음)
855
- @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[2]/fieldset/div[1]/button[1]').click
856
- sleep(3)
857
-
858
- file_path = path.split('/').join("\\") # 윈도우 스타일 경로로 변환
859
- sleep(1)
860
- # 파일 입력 필드 찾기 (input[type="file"])
861
- file_input = @driver.find_element(:id, "hidden-input")
862
- sleep(1)
863
- # send_keys로 파일 경로를 직접 입력하여 파일 업로드
864
- file_input.send_keys(file_path)
865
- sleep(3)
866
- begin
867
- @driver.find_element(:xpath, '//*[@id="nvu_inp_box_title"]').send_keys(title)
851
+
852
+ @driver.execute_script(<<~JS)
853
+ window.URL.createObjectURL = function() {};
854
+ HTMLInputElement.prototype.click = function() {
855
+ console.log("File dialog suppressed");
856
+ };
857
+ JS
868
858
  sleep(1)
869
- rescue
870
- end
859
+ # 파일 업로드 버튼 클릭 (이제 파일 선택 창이 뜨지 않음)
860
+ @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[2]/fieldset/div[1]/button[1]').click
861
+ sleep(3)
871
862
 
872
- begin
863
+ file_path = path.split('/').join("\\") # 윈도우 스타일 경로로 변환
864
+ sleep(1)
865
+ # 파일 입력 필드 찾기 (input[type="file"])
866
+ file_input = @driver.find_element(:id, "hidden-input")
867
+ sleep(1)
868
+ # send_keys로 파일 경로를 직접 입력하여 파일 업로드
869
+ file_input.send_keys(file_path)
870
+ sleep(3)
871
+
872
+ @driver.find_element(:xpath, '//*[@id="nvu_inp_box_title"]').send_keys(title)
873
+ sleep(1)
874
+
873
875
  @driver.find_element(:xpath, '//*[@id="nvu_inp_box_description"]').send_keys(title)
874
876
  sleep(1)
875
- rescue
876
- end
877
+
877
878
 
878
- begin
879
- @driver.find_element(:xpath, '//*[@id="nvu_inp_box_tag"]').send_keys(title)
879
+
880
+
881
+ tags2 = option['tag'].to_s
882
+ tag_mm2 = Array.new
883
+ tags2.split(',').each do |tag_value|
884
+ tag_mm2 << ''+tag_value
885
+ end
886
+ @driver.find_element(:xpath, '//*[@id="nvu_inp_box_tag"]').click
887
+ @driver.find_element(:xpath, '//*[@id="nvu_inp_box_tag"]').send_keys(tag_mm2.join("\n")+"\n")
880
888
  sleep(1)
881
- rescue
882
- end
883
889
 
884
- for n in 1..10
890
+ for n in 1..10
891
+ begin
892
+ puts @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[2]/div[1]/ul/li/div/button[1]/div[2]/em').text
893
+ if @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[2]/div[1]/ul/li/div/button[1]/div[2]/em').text == '업로드 완료'
894
+ break
895
+ end
896
+ sleep(10)
897
+ rescue
898
+ end
899
+ end
900
+
885
901
  begin
886
- puts @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[2]/div[1]/ul/li/div/button[1]/div[2]/em').text
887
- if @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[2]/div[1]/ul/li/div/button[1]/div[2]/em').text == '업로드 완료'
888
- break
889
- end
890
- sleep(10)
891
- rescue
892
- end
893
- end
902
+ @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[3]/button/span').click
903
+ sleep(3)
904
+ @driver.action.key_down(:up).key_up(:up).perform #x탭
905
+ sleep(1)
906
+ rescue
907
+ end
894
908
 
895
- begin
896
- @driver.find_element(:xpath, '//*[@id="video-uploader-wrap"]/div/div/div[3]/button/span').click
897
- sleep(3)
898
- @driver.action.key_down(:up).key_up(:up).perform #x탭
899
- sleep(1)
900
- rescue
901
- end
909
+ begin
910
+ wait = Selenium::WebDriver::Wait.new(:timeout => 3)
911
+ #요소가 나타날 때까지 60초 동안 기다립니다.
912
+ wait.until { @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]') }
913
+ sleep(1)
914
+ @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]').click
915
+ sleep(1)
916
+ @driver.action.send_keys(title).perform
917
+ sleep(1)
918
+ @driver.action.key_down(:enter).key_up(:enter).perform #엔터
919
+ sleep(1)
920
+ rescue
921
+ @driver.action.key_down(:down).key_up(:down).perform
922
+ end
902
923
 
903
- begin
904
- wait = Selenium::WebDriver::Wait.new(:timeout => 3)
905
- #요소가 나타날 때까지 60초 동안 기다립니다.
906
- wait.until { @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]') }
907
- sleep(1)
908
- @driver.find_element(:xpath, '//*[@class="se-placeholder __se_placeholder se-ff-system se-fs13"]').click
909
- sleep(1)
910
- @driver.action.send_keys(title).perform
911
- sleep(1)
912
- @driver.action.key_down(:enter).key_up(:enter).perform #엔터
913
- sleep(1)
914
- rescue
915
- @driver.action.key_down(:down).key_up(:down).perform
916
- end
924
+ rescue => e
925
+ @driver.close
926
+ puts '동영상 등록실패! 인터넷 접속 불량 및 로딩 지연 다음 작업을 실행합니다.'
927
+ return 0
928
+ end
917
929
 
918
930
  elsif i2.to_s.include?('<inyonggoo')
919
931
  if i2.text == ''
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cafe_basics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.31
4
+ version: 0.0.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - zon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-04 00:00:00.000000000 Z
11
+ date: 2025-02-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: File to Clipboard gem
14
14
  email: mymin26@naver.com