snipgem 0.0.8 → 0.0.9

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ebbe6149737de3b96d4124db961aa30e4d25b01
4
- data.tar.gz: 909bc2fabd8df5b7e23ab72b129c2b6043de6cc9
3
+ metadata.gz: f3ac79c11e098d74ad90e8122495c7673c9731c1
4
+ data.tar.gz: 119b58406d5ba4a91e2541784d731930a620a572
5
5
  SHA512:
6
- metadata.gz: 368b5bc4f2e2281c618f6c920cd2fc1bfce1d34dd5d0b2a7f5f50b324f1dbcffca3b7d60bd2933fae68d372ab244995383dbad4cd6df5c610d5f0bed0f88fa47
7
- data.tar.gz: bd4892c06856e3c57403f10bbc3c7c66fcf14805cf2e9813d08606956e3ebe2fb9609a0bea057dd4a9a63f53c3a2ed889af23936fcc8bc4caa56a0641e24145f
6
+ metadata.gz: 819aa8372e1ba4c2ce909d6886a9788db4d89d3fabe55250d46349b937f7949a00f3f49a0611d7c0d15d701f99a9eacf8dd9c92ccc8b338511aaa6c0c9b535fb
7
+ data.tar.gz: e17304fdfae515fbd8eaf992b21a12c5a5513f6a988677fdf2d0e053bec202efd59880d65decab4b87ad619f7e33ece06525d7da21f5b7fba8a87994bd7c29b9
data/Rakefile CHANGED
@@ -11,7 +11,8 @@ task :seed do
11
11
  test_str2 = "#<$> Title ggg\ndef method\n \"code\"\nend\n#</$>\n\n#<$> Title 2323\ndef method\n \"code\"\nend\n#</$>\n\n#<$> Title 4\ndef method\n \"code\"\nend\n#</$>"
12
12
  test_str3 = "# <snip> Title of first snip\n desc \"create the database\"\n task :create do\n puts \"Creating file \#{DB_PATH} if it doesn't exist...\"\n touch DB_PATH\n end\n# </snip>\n\n# <snip> Title of this snip\n desc \"drop the database\"\n task :drop do\n puts \"Deleting \#{DB_PATH}...\"\n rm_f DB_PATH\n end\n# </snip>\n\n# <snip> Title of first snip\n desc \"create the database\"\n task :create do\n puts \"Creating file \#{DB_PATH} if it doesn't exist...\"\n touch DB_PATH\n end\n# </snip>\n\n# <snip> Title of this snip\n desc \"drop the database\"\n task :drop do\n puts \"Deleting \#{DB_PATH}...\"\n rm_f DB_PATH\n end\n# </snip>"
13
13
  test_str_js = "//<$> Title ggg\nvar test1 = 44;\nvar test2 = 22;\n//</$>\n\n//<$>\nvar test4 = \"Hola\";\n//</$>\n\n"
14
- test_str_erb = "<!-- <$> Title ggg -->\n <% @snips.each do |snip| %>\n <p><%= snip.title %></p> \n<% end %>\n<!-- </$> --> \n\n<!-- <$> Title ggg -->\n <% @snips.each do |snip| %>\n <p><%= snip.title %></p> \n<% end %>\n<!-- </$> --> \n\n"
14
+ test_str_erb = "<!-- <$> Title ggg -->\n <% @snips.each do |snip| %>\n <p><%= snip.title %></p> \n<% end %>\n<!-- </$> --> \n\n<!-- <$> Title ggg -->\n <% @snips.each do |snip| %>\n <p><%= snip.title %></p> \n<% end %>\n<!-- </$> --> \n\n"
15
+ test_str_html = "<!-- <$> Title ggg -->\n <p>Hello world</p>\n <h1>title</h1> \n<!-- </$> --> \n\n<!-- <$> Title ggg -->\n <p>Hello world</p>\n <h1>title</h1> \n<!-- </$> --> \n\n"
15
16
 
16
17
 
17
18
  FileUtils.rm_rf('rspec/test_snip_files')
@@ -33,6 +34,9 @@ task :seed do
33
34
  File.open("rspec/test_snip_files/subfolder/test_erb.erb", "w+") do |file|
34
35
  file << test_str_erb
35
36
  end
37
+ File.open("rspec/test_snip_files/subfolder/test_html.html", "w+") do |file|
38
+ file << test_str_erb
39
+ end
36
40
  end
37
41
 
38
42
  desc "Run the specs"
@@ -0,0 +1,28 @@
1
+ require_relative '../models/utils/sourcefilereader'
2
+ require_relative '../models/utils/codescanner'
3
+ require_relative '../models/utils/destinationfilewriter'
4
+ require_relative '../models/utils/searchfile'
5
+ require_relative '../languages/languages'
6
+
7
+ module CommandLineController
8
+
9
+ extend self
10
+
11
+ def run(file)
12
+ file_read = SourceFileReaderWriter.new(file)
13
+ to_run = file_read.convert_to_array_of_lines
14
+ mismatch_status = CodeScanner.run(to_run, SourceFileReaderWriter.file_to_open)
15
+ abort(ViewFormatter.mismatched_tags(mismatch_status)) if mismatch_status
16
+ file_writing
17
+ file_read.overwrite_existing_snips
18
+ end
19
+
20
+ def file_writing
21
+ DestinationFileWriter.run(Snippet.snippet_array)
22
+ Language.languages.keys.each do |lang|
23
+ DestinationFileWriter.run(Snippet.select_lang_snippets(lang), lang) if Snippet.select_lang_snippets(lang).any?
24
+ end
25
+ Snippet.snippet_array = []
26
+ end
27
+
28
+ end
@@ -0,0 +1,19 @@
1
+ class Language
2
+
3
+ def self.languages
4
+ {
5
+ "js" => ["//"],
6
+ "erb" => ["<!--", "-->"],
7
+ "rb" => ["#"],
8
+ "html" => ["<!--", "-->"],
9
+ "py" => ["#"],
10
+ "php" => ["<?php /*", "*/ ?>"],
11
+ "css" => ["/*", "*/"]
12
+ }
13
+ end
14
+
15
+ def self.supports?(lang)
16
+ self.languages.key?(lang)
17
+ end
18
+
19
+ end
@@ -17,18 +17,10 @@ attr_accessor :snippet_array
17
17
  @@snippet_array = arg
18
18
  end
19
19
 
20
- def self.rb_snippets
21
- @@snippet_array.select {|snippet| snippet.filename.end_with?(".rb") || snippet.filename.end_with?("(.rb)")}
20
+ def self.select_lang_snippets(lang)
21
+ @@snippet_array.select {|snippet| snippet.filename.end_with?(".#{lang}") || snippet.filename.end_with?("(.#{lang})")}
22
22
  end
23
-
24
- def self.erb_snippets
25
- @@snippet_array.select {|snippet| snippet.filename.end_with?(".erb") || snippet.filename.end_with?("(.erb)") }
26
- end
27
-
28
- def self.js_snippets
29
- @@snippet_array.select {|snippet| snippet.filename.end_with?(".js") || snippet.filename.end_with?("(.js)") }
30
- end
31
-
23
+
32
24
  def initialize(args = {})
33
25
  @code = args[:code]
34
26
  @title = args[:title]
@@ -0,0 +1,13 @@
1
+ class BatchProcessing
2
+
3
+ require_relative '../../languages/languages'
4
+
5
+ def self.process(directory)
6
+ directory = directory.chomp('/')
7
+ Dir.glob(directory + "/**/*.{#{Language.languages.keys.join(',')}}") do |file|
8
+ next if file == '.' or file == '..' or Dir.exist?(file)
9
+ CommandLineController.run(file)
10
+ end
11
+ end
12
+
13
+ end
@@ -9,8 +9,14 @@ class CodeScanner
9
9
  def self.run(scan_array, filename)
10
10
  @scan_array = scan_array
11
11
  while @scan_array.join.include?('<snip>') || @scan_array.join.include?('<$>')
12
- Snippet.new(code: array_range, title: @title, line: @line, filename: filename)
12
+ code = array_range
13
+ if code
14
+ Snippet.new(code: code, title: @title, line: @line, filename: filename)
15
+ else
16
+ return {filename: filename, line: @line} #in case of mismatch
17
+ end
13
18
  end
19
+ return nil
14
20
  end
15
21
 
16
22
  def self.find_begin_range
@@ -27,8 +33,12 @@ class CodeScanner
27
33
 
28
34
  def self.find_end_range
29
35
  @scan_array.each_with_index do |line, index|
36
+ if line.include?('<snip>') || line.include?('<$>') #mismatch before closing tag
37
+ return false
38
+ end
30
39
  if line.include?('</snip>') || line.include?('</$>')
31
40
  strip_snip_tag(index)
41
+ index
32
42
  return @end_scan = index
33
43
  end
34
44
  end
@@ -37,7 +47,7 @@ class CodeScanner
37
47
 
38
48
  def self.array_range
39
49
  find_begin_range
40
- find_end_range
50
+ return false unless find_end_range
41
51
  @scan_array[@begin_scan+1..@end_scan-1].join
42
52
  end
43
53
 
@@ -3,6 +3,7 @@
3
3
 
4
4
 
5
5
  require_relative '../../views/viewformatter'
6
+ require_relative '../../languages/languages'
6
7
  CONFIG_PATH = File.expand_path("../../../../config/filepath.config", __FILE__)
7
8
  LOG_PATH = File.expand_path("../../../../log/snip.log", __FILE__)
8
9
 
@@ -47,15 +48,8 @@ module DestinationFileWriter
47
48
  end
48
49
 
49
50
  def run(snippet_array, type=nil)
50
- case type
51
- when "rb"
52
- filename = directory + "/my_snips.rb"
53
- File.new(filename, 'w') unless File.exist?(filename)
54
- when "js"
55
- filename = directory + "/my_snips.js"
56
- File.new(filename, 'w') unless File.exist?(filename)
57
- when "erb"
58
- filename = directory + "/my_snips.erb"
51
+ if Language.supports?(type)
52
+ filename = directory + "/my_snips.#{type}"
59
53
  File.new(filename, 'w') unless File.exist?(filename)
60
54
  else
61
55
  filename = @snip_file_name
@@ -0,0 +1,67 @@
1
+ module SearchDisplay
2
+
3
+ extend self
4
+
5
+ def check_for_title(line)
6
+ line.match(/\*\*\*\* Snippet \d+:/)
7
+ end
8
+
9
+ def return_search_results(file,text=nil,ext=nil)
10
+ search_results = search_snips(divide_snips(file), text, ext)
11
+ if search_results.any?
12
+ search_results
13
+ else
14
+ ViewFormatter.no_results
15
+ end
16
+ end
17
+
18
+ def divide_snips(file)
19
+ snip_array = []
20
+ snip_str = ""
21
+ File.open(file, "r").each do |line|
22
+ if check_for_title(line)
23
+ snip_array << snip_str
24
+ snip_str = line
25
+ else
26
+ snip_str << line
27
+ end
28
+ end
29
+ snip_array << snip_str
30
+ snip_array.shift # todo: check on this
31
+ snip_array
32
+ end
33
+
34
+ def search_snips(array,text,ext)
35
+ array.select do |snip|
36
+ if ext
37
+ includes_ext = (snip.include?("(.#{ext})") || snip.include?(".#{ext}:"))
38
+ else
39
+ includes_ext = true
40
+ end
41
+ # matches either clipboard or normal formatting
42
+ if text
43
+ includes_text = smart_text_search_results?(snip, text)
44
+ else
45
+ includes_text = true
46
+ end
47
+ includes_ext && includes_text
48
+ end
49
+ end
50
+
51
+ def smart_text_search_results?(snip, text)
52
+ snip = snip.downcase
53
+ words_arr = text.split(" ")
54
+ words_arr.each do |word|
55
+ unless snip.include?(word.downcase)
56
+ return false
57
+ end
58
+ end
59
+ true
60
+ end
61
+
62
+ def delete(file, ids)
63
+ return_search_results(file).reject do |snip|
64
+ ids.include?(snip.match(/\*\*\*\* Snippet (\d+):/).captures[0])
65
+ end
66
+ end
67
+ end
@@ -1,139 +1,166 @@
1
1
  require "snip/version"
2
2
  require "clipboard"
3
- require_relative '../app/controllers/controller'
4
- require_relative '../app/models/utils/batchprocessing'
3
+ require_relative 'controllers/controller'
4
+ require_relative 'models/utils/batchprocessing'
5
+ require_relative 'languages/languages'
5
6
 
7
+
6
8
  module Snip
7
- class Run
8
- def argv_ext_check(pos)
9
- if ARGV[pos]
10
- (ARGV[pos] == "rb" || ARGV[pos] == "js" || ARGV[pos] == "erb")
11
- else
12
- false
13
- end
14
- end
15
-
16
- def display_file
17
- DestinationFileWriter.return_display_file
18
- end
19
-
20
- def execute
21
- unless ARGV[0]
22
- abort(ViewFormatter.no_args_message)
23
- end
24
-
25
- if ARGV[0] == "--help"
26
- abort(ViewFormatter.terminal_help_message)
27
- end
28
-
29
- if ARGV[0] == "-f"
30
- if !ARGV[1].nil?
31
- if File.directory?(ARGV[1])
32
- DestinationFileWriter.save_file_path_to_config_file(ARGV[1])
33
- abort(ViewFormatter.new_file_path)
34
- else
35
- abort(ViewFormatter.need_to_specify_directory)
36
- end
37
- else
38
- abort(ViewFormatter.specify_filename((DestinationFileWriter.snip_filepath)))
39
- end
40
- end
41
-
42
- if ARGV[0] == "-l"
43
- puts ViewFormatter.show_log(DestinationFileWriter.log_filepath)
44
- abort
45
- end
46
-
47
- if ARGV[0] == "-i"
48
- DestinationFileWriter.reindex_all
49
- abort(ViewFormatter.reindexed)
50
- end
51
-
52
- if ARGV[0] == "-w"
53
- DestinationFileWriter.restore_whitespace(DestinationFileWriter.return_display_file, SearchDisplay.run(DestinationFileWriter.return_display_file))
54
- abort("Whitespace restored")
55
- end
56
-
57
- if ARGV[0] == "--delete"
58
- unless ARGV[1]
59
- abort("Please specify which snippets you wish to delete")
60
- end
61
- if ARGV[1].include?(",")
62
- ids = ARGV[1].split(",")
63
- else
64
- ids = [ARGV[1]]
65
- end
66
- DestinationFileWriter.rewrite_file(display_file, SearchDisplay.delete(display_file, ids))
67
- DestinationFileWriter.reindex_all
68
- abort("Snips #{ARGV[1]} deleted from my_snips.txt (other files must be modified manually)")
69
- end
70
-
71
- if ARGV[0] == "-d"
72
- if argv_ext_check(1)
73
- if ARGV[2]
74
- if !ARGV[3].nil?
75
- abort(ViewFormatter.display_error)
76
- else
77
- puts CommandLineController.display_search(ARGV[2], "." + ARGV[1])
78
- end
79
- else
80
- puts CommandLineController.display_search("", "." + ARGV[1])
81
- end
82
- elsif ARGV[1] == "."
83
- puts ViewFormatter.show_snips(DestinationFileWriter.snip_filepath)
84
- elsif !ARGV[1].nil?
85
- if !ARGV[2].nil?
86
- abort(ViewFormatter.display_error)
87
- else
88
- puts CommandLineController.display_search(ARGV[1], "")
89
- end
90
- else
91
- abort(ViewFormatter.display_error)
92
- end
93
- abort
94
- end
95
-
96
- DestinationFileWriter.check_config_file_for_snip_file
97
-
98
- if ARGV[0] == "-c"
99
- code = Clipboard.paste + "\n"
100
-
101
- if !ARGV[2].nil? && (ARGV[1] == "rb" || ARGV[1] == "js" || ARGV[1] == "erb" || ARGV[1] == "misc")
102
- type = ARGV[1]
103
- title = ARGV[2]
104
- elsif ARGV[1].nil?
105
- puts "Type of code (e.g. rb, js, erb) or press enter for misc:"
106
- type = $stdin.gets.chomp
107
- puts "Title:"
108
- title = $stdin.gets.chomp
109
- else
110
- abort(ViewFormatter.clipboard_command)
111
- end
112
-
113
- if type == "rb" || type == "js" || type == "erb"
114
- origin = "clipboard (.#{type})"
115
- else
116
- origin = "clipboard"
117
- end
118
-
119
- Snippet.new(code: code, title: title, line: nil, filename: origin)
120
- CommandLineController.file_writing
121
- abort("Your code has been snipped:\n\n#{code}")
122
- end
123
-
124
- if File.directory?(ARGV[0])
125
- BatchProcessing.process(ARGV[0])
126
- elsif File.file?(ARGV[0])
127
- if ARGV[0].end_with?(".rb") || ARGV[0].end_with?(".js") ||ARGV[0].end_with?(".erb")
128
- CommandLineController.run(ARGV[0])
129
- else
130
- abort(ViewFormatter.invalid_file)
131
- end
132
- else
133
- abort(ViewFormatter.file_not_found)
134
- end
135
-
136
- puts ViewFormatter.success_message(DestinationFileWriter.full_file_directory)
137
- end
138
- end
9
+ class Run
10
+
11
+ ### execution flow for ARGV
12
+ def execute
13
+ unless ARGV[0]
14
+ abort(ViewFormatter.no_args_message)
15
+ end
16
+
17
+ if ARGV[0] == "--help" || ARGV[0] == "-h"
18
+ abort(ViewFormatter.terminal_help_message)
19
+ end
20
+
21
+ # set file location
22
+ if ARGV[0] == "-f"
23
+ set_output_file_location
24
+ end
25
+
26
+ # show log
27
+ if ARGV[0] == "-l"
28
+ puts ViewFormatter.show_log(DestinationFileWriter.log_filepath)
29
+ abort
30
+ end
31
+
32
+ # reindex
33
+ if ARGV[0] == "-i"
34
+ DestinationFileWriter.reindex_all
35
+ abort(ViewFormatter.reindexed)
36
+ end
37
+
38
+ # restore whitespace
39
+ if ARGV[0] == "-w"
40
+ display_file = DestinationFileWriter.return_display_file
41
+ DestinationFileWriter.restore_whitespace(display_file, SearchDisplay.return_search_results(display_file))
42
+ abort(ViewFormatter.whitespace_success)
43
+ end
44
+
45
+ # delete
46
+ if ARGV[0] == "--delete"
47
+ unless ARGV[1]
48
+ abort(ViewFormatter.delete_error)
49
+ end
50
+ delete_specified(ARGV[1])
51
+ abort(ViewFormatter.delete_success)
52
+ end
53
+
54
+ # display snips function
55
+ if ARGV[0] == "-a"
56
+ puts ViewFormatter.show_snips(DestinationFileWriter.snip_filepath)
57
+ abort
58
+ end
59
+
60
+ if ARGV[0] == "-s" || ARGV[0] == "-d"
61
+ search_snips
62
+ abort
63
+ end
64
+
65
+ # at this point we need to make sure config file exists - may want to refactor this check to occur before -d (handled in show_snips currently)
66
+ DestinationFileWriter.check_config_file_for_snip_file
67
+
68
+ # clipboard function
69
+ if ARGV[0] == "-c"
70
+ code = Clipboard.paste + "\n"
71
+ snip_from_clipboard(code)
72
+ abort(ViewFormatter.clipboard_success(code))
73
+ end
74
+
75
+ # no CL arguments (e.g. '-c') - straight snip
76
+ perform_file_or_batch_processing
77
+ end
78
+
79
+ # -f
80
+ def set_output_file_location
81
+ if ARGV[1]
82
+ check_if_valid_directory(ARGV[1])
83
+ else
84
+ abort(ViewFormatter.check_for_file((DestinationFileWriter.snip_filepath)))
85
+ end
86
+ end
87
+
88
+ def check_if_valid_directory(directory)
89
+ if File.directory?(directory)
90
+ DestinationFileWriter.save_file_path_to_config_file(directory)
91
+ abort(ViewFormatter.new_file_path)
92
+ else
93
+ abort(ViewFormatter.need_to_specify_a_directory)
94
+ end
95
+ end
96
+
97
+ # --delete
98
+ def delete_specified(items)
99
+ if items.include?(",")
100
+ items = items.split(",")
101
+ else
102
+ items = [items]
103
+ end
104
+ display_file = DestinationFileWriter.return_display_file
105
+ DestinationFileWriter.rewrite_file(display_file, SearchDisplay.delete(display_file, items))
106
+ DestinationFileWriter.reindex_all
107
+ end
108
+
109
+ # -d
110
+ def search_snips
111
+ if incorrect_num_of_args?(:d)
112
+ abort(ViewFormatter.display_error)
113
+ end
114
+
115
+ if Language.supports?(ARGV[1]) # ext search
116
+ ext_to_search = ARGV[1]
117
+ string_to_search = ARGV[2]
118
+ else # string search only
119
+ string_to_search = ARGV[1]
120
+ end
121
+
122
+ puts SearchDisplay.return_search_results(DestinationFileWriter.return_display_file, string_to_search, ext_to_search)
123
+ end
124
+
125
+ def incorrect_num_of_args?(method)
126
+ !ARGV[1] || ARGV[3] || (!Language.supports?(ARGV[1]) && ARGV[2]) if method == :d
127
+ end
128
+
129
+ # -c
130
+ def snip_from_clipboard(code)
131
+ if ARGV[2] && (Language.supports?(ARGV[1]) || ARGV[1] == "misc") #ARGV[2] is title, ARGV[1] is ext
132
+ type = ARGV[1]
133
+ title = ARGV[2]
134
+ elsif ARGV[1].nil?
135
+ puts ViewFormatter.clipboard_prompts[0]
136
+ type = $stdin.gets.chomp
137
+ puts ViewFormatter.clipboard_prompts[1]
138
+ title = $stdin.gets.chomp
139
+ else
140
+ abort(ViewFormatter.clipboard_instructions)
141
+ end
142
+
143
+ origin = ViewFormatter.clipboard_origin(type)
144
+ Snippet.new(code: code, title: title, line: nil, filename: origin)
145
+ CommandLineController.file_writing
146
+ end
147
+
148
+ # no flags
149
+ def perform_file_or_batch_processing
150
+ if File.directory?(ARGV[0])
151
+ BatchProcessing.process(ARGV[0])
152
+ elsif File.file?(ARGV[0])
153
+ file_arr = ARGV[0].split('.')
154
+ if file_arr.length > 1 && Language.supports?(file_arr[-1])
155
+ CommandLineController.run(ARGV[0])
156
+ else
157
+ abort(ViewFormatter.invalid_input_file)
158
+ end
159
+ else
160
+ abort(ViewFormatter.input_file_not_found)
161
+ end
162
+
163
+ puts ViewFormatter.success_message(DestinationFileWriter.full_file_directory)
164
+ end
165
+ end
139
166
  end
@@ -1,3 +1,3 @@
1
1
  module Snip
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -0,0 +1,222 @@
1
+ # View component for file writing operations
2
+ require 'date'
3
+ require_relative '../languages/languages'
4
+
5
+ module ViewFormatter
6
+
7
+ extend self
8
+
9
+ ### utility
10
+ def conjunctionator(list = Language.languages, conj="or")
11
+ if list.class.name == "Hash"
12
+ list = list.keys
13
+ end
14
+ str = "#{list[0..-2].join(", ")} #{conj} #{list[-1]}"
15
+ end
16
+
17
+ def line_check(line)
18
+ line ? ':' + line.to_s : nil
19
+ end
20
+
21
+ ### file output formatting
22
+ def snippet_indexer(index, title, type)
23
+ languages = Language.languages
24
+ if languages.key?(type)
25
+ "#{languages[type][0]} **** Snippet " + (index).to_s + ": #{title} **** #{languages[type][1]} \n"
26
+ else
27
+ "# **** Snippet " + (index).to_s + ": #{title} **** \n"
28
+ end
29
+ end
30
+
31
+ def status_line(line, type, file)
32
+ languages = Language.languages
33
+ if languages.key?(type)
34
+ "#{languages[type][0]} Snipped from #{file}#{line_check(line)} on #{Time.now.strftime("%m-%d-%Y")} #{languages[type][1]}"
35
+ else
36
+ "# Snipped from #{file}#{line_check(line)} on #{Time.now.strftime("%m-%d-%Y")}"
37
+ end
38
+ end
39
+
40
+ ### file management (based on check)config_file function in DestinationFileWriter)
41
+ def specify_path
42
+ "Please specify where you would like to save your snippets by running 'snip -f <filepath>'"
43
+ end
44
+
45
+ def output_file_not_found(file)
46
+ "Output file '#{file}' not found, please specify existing file location or desired location for new file by running 'snip -f <filepath>'"
47
+ end
48
+
49
+ def new_file(filename)
50
+ "New snippet file created at #{File.absolute_path(filename)}"
51
+ end
52
+
53
+
54
+ ### default snip functionality reporting messages (based on files/directories)
55
+ def input_file_not_found
56
+ "File not found, please try again."
57
+ end
58
+
59
+ def invalid_input_file
60
+ "File must be a #{conjunctionator} file."
61
+ end
62
+
63
+ def mismatched_tags(status)
64
+ "Missing closing tag in #{status[:filename]} after line #{status[:line]}"
65
+ end
66
+
67
+ def success_message(filedir)
68
+ if Snippet.snippet_counter > 0
69
+ "Your snippet file has been successfully updated with #{Snippet.snippet_counter} new snips at: '#{filedir}'"
70
+ else
71
+ "No snips found in the specified files or directories."
72
+ end
73
+ end
74
+
75
+ def snip_terminal_status(filename, line)
76
+ if line
77
+ "#{filename}:#{line} snipped"
78
+ else
79
+ nil
80
+ end
81
+ end
82
+
83
+ ### ARGV command line argument-specific
84
+
85
+ # no args
86
+ def no_args_message
87
+ "Welcome to snip. Type 'snip --help' for help"
88
+ end
89
+
90
+ # filename set (-f)
91
+ def new_file_path
92
+ "Snippet file location saved as '#{File.absolute_path(ARGV[1])}/my_snips.txt'"
93
+ end
94
+
95
+ def check_for_file(filename)
96
+ if filename
97
+ "Your file is located at #{filename}"
98
+ else
99
+ "No output file found, please specify a filename after '-f'"
100
+ end
101
+ end
102
+
103
+ def need_to_specify_a_directory
104
+ "Please specify an existing directory to save your snippets to"
105
+ end
106
+
107
+ # Search (-d)
108
+ def show_snips(file)
109
+ if file
110
+ if File.readlines(file)[0]
111
+ File.readlines(file)
112
+ else
113
+ "Snippet file is empty"
114
+ end
115
+ else
116
+ "Snippet file doesn't exist. Specify where you would like to save your snippets by running 'snip -f <filepath>"
117
+ end
118
+ end
119
+
120
+ def display_error
121
+ "Specify code type (#{conjunctionator}) and/or a search string, e.g. 'snip -d js \"event delegation\"', or snip -d .' for all snips"
122
+ end
123
+
124
+ def no_results
125
+ "No matching snippet files found"
126
+ end
127
+
128
+ # reindex (-i)
129
+ def reindexed
130
+ "Your snippet files have been reindexed"
131
+ end
132
+
133
+ # log (-l)
134
+ def show_log(log_file)
135
+ if File.readlines(log_file)[0]
136
+ File.readlines(log_file)
137
+ else
138
+ "Log file is empty"
139
+ end
140
+ end
141
+
142
+ # whitespace (-w)
143
+ def whitespace_success
144
+ "Whitespace restored"
145
+ end
146
+
147
+ # delete (--delete)
148
+ def delete_error
149
+ "Please specify which snippets you wish to delete"
150
+ end
151
+
152
+ def delete_success
153
+ "Snips #{ARGV[1]} deleted from my_snips.txt (other files must be modified manually)"
154
+ end
155
+
156
+ # clipboard (-c)
157
+ def clipboard_instructions
158
+ "Run 'snip -c' or specify code type (#{Language.languages.keys.join(", ") + " or misc"}) and a title string with:
159
+ 'snip -c rb \"Using string interpolation\"' "
160
+ end
161
+
162
+ def clipboard_prompts
163
+ ["Type of code (e.g. #{conjunctionator}) or press enter for misc:", "Title:"]
164
+ end
165
+
166
+ def clipboard_origin(type)
167
+ type != "misc" ? type_str = " (.#{type})" : type_str = ""
168
+ "clipboard#{type_str}"
169
+ end
170
+
171
+
172
+ def clipboard_success(code)
173
+ "Your code has been snipped:\n\n#{code}"
174
+ end
175
+
176
+ # help (--help)
177
+ def terminal_help_message
178
+ "
179
+
180
+ *** First time setup: ***
181
+
182
+ snip -f <directory>
183
+
184
+ This specifies the directory where you would like to save your snippets. 'my_snips.txt' will be automatically created if it doesn't already exist. If you move your my_snips.txt file, you will need to run 'snip -f' again.
185
+
186
+ Language-specific (e.g. .js, .rb) snippet files will be automatically created in the same directory as the .txt file.
187
+
188
+
189
+ *** To add snip tags into your code: ***
190
+
191
+ Ruby:
192
+
193
+ # <snip> Title goes here
194
+ 5.times do {|x| puts x}
195
+ # </snip>
196
+
197
+ JS:
198
+
199
+ // <snip> Title goes here
200
+ var test = 1234;
201
+ // </snip>
202
+
203
+ You can alternatively use <$> and </$>. Your tags will be replaced with <*snip*> and/or <*$*> after running 'snip'.
204
+
205
+
206
+ *** Ongoing usage: ***
207
+
208
+ snip <filename> - process a single file
209
+ snip <directory> - process a directory recursively
210
+ snip -a - display all your snips in terminal
211
+ snip -c - creates new snippet from clipboard contents
212
+ snip -s <type> '<string>' - searches your snips with type #{conjunctionator} and/or search string
213
+ snip -i - reindexes your snippet files (after deleting old snips, etc)
214
+ snip -l - view log history if you need to debug previous snips
215
+ snip --delete <num> - deletes the specified snippet number(s) (comma-delimited) and reindexes
216
+ snip --help - displays this help menu
217
+
218
+ Visit https://github.com/jgerminario/snip for more information or to submit bug reports/feature requests.
219
+
220
+ "
221
+ end
222
+ end
@@ -1,198 +0,0 @@
1
- # **** Snippet 1: Title of first snip ****
2
- # Snipped from rspec/test_snip_files/subfolder/test3.rb:1 on 12-13-2014
3
- desc "create the database"
4
- task :create do
5
- puts "Creating file #{DB_PATH} if it doesn't exist..."
6
- touch DB_PATH
7
- end
8
-
9
-
10
- # **** Snippet 2: Title of this snip ****
11
- # Snipped from rspec/test_snip_files/subfolder/test3.rb:9 on 12-13-2014
12
- desc "drop the database"
13
- task :drop do
14
- puts "Deleting #{DB_PATH}..."
15
- rm_f DB_PATH
16
- end
17
-
18
-
19
- # **** Snippet 3: Title of first snip ****
20
- # Snipped from rspec/test_snip_files/subfolder/test3.rb:17 on 12-13-2014
21
- desc "create the database"
22
- task :create do
23
- puts "Creating file #{DB_PATH} if it doesn't exist..."
24
- touch DB_PATH
25
- end
26
-
27
-
28
- # **** Snippet 4: Title of this snip ****
29
- # Snipped from rspec/test_snip_files/subfolder/test3.rb:25 on 12-13-2014
30
- desc "drop the database"
31
- task :drop do
32
- puts "Deleting #{DB_PATH}..."
33
- rm_f DB_PATH
34
- end
35
-
36
-
37
- # **** Snippet 5: Title of this snip ****
38
- # Snipped from rspec/test_snip_files/test.rb:1 on 12-13-2014
39
- class OrangeTree
40
- attr_reader :age, :height
41
- def initialize
42
- @age = 0
43
- @oranges = []
44
- end
45
-
46
-
47
- # **** Snippet 6: TITLE ****
48
- # Snipped from rspec/test_snip_files/test.rb:10 on 12-13-2014
49
- def age!
50
- @oranges += Array.new(rand(1..10)) { Orange.new } if @age > 5
51
- end
52
-
53
-
54
- # **** Snippet 7: test ****
55
- # Snipped from rspec/test_snip_files/test.rb:16 on 12-13-2014
56
- def any_oranges?
57
- !@oranges.empty?
58
- end
59
-
60
-
61
- # **** Snippet 8: Title ggg ****
62
- # Snipped from rspec/test_snip_files/test2.rb:1 on 12-13-2014
63
- def method
64
- "code"
65
- end
66
-
67
-
68
- # **** Snippet 9: Title 2323 ****
69
- # Snipped from rspec/test_snip_files/test2.rb:7 on 12-13-2014
70
- def method
71
- "code"
72
- end
73
-
74
-
75
- # **** Snippet 10: Title 4 ****
76
- # Snipped from rspec/test_snip_files/test2.rb:13 on 12-13-2014
77
- def method
78
- "code"
79
- end
80
-
81
-
82
- # **** Snippet 11: sweet jesus ****
83
- # Snipped from clipboard (.rb): on 12-13-2014
84
- ["line_check(line)"]
85
-
86
- # **** Snippet 12: test ****
87
- # Snipped from clipboard (.rb): on 12-13-2014
88
- if File.directory?(ARGV[0])
89
- BatchProcessing.process(ARGV[0])
90
- elsif File.file?(ARGV[0])
91
- if ARGV[0].end_with?(".rb") || ARGV[0].end_with?(".js") ||ARGV[0].end_with?(".erb")
92
- CommandLineController.run(ARGV[0])
93
- else
94
- abort(ViewFormatter.invalid_file)
95
- end
96
- else
97
- abort(ViewFormatter.file_not_found)
98
- end
99
-
100
- puts ViewFormatter.success_message(DestinationFileWriter.full_file_directory)
101
-
102
- # **** Snippet 13: cool catz ****
103
- # Snipped from clipboard (.rb): on 12-14-2014
104
- if File.directory?(ARGV[0])
105
- BatchProcessing.process(ARGV[0])
106
- elsif File.file?(ARGV[0])
107
- if ARGV[0].end_with?(".rb") || ARGV[0].end_with?(".js") ||ARGV[0].end_with?(".erb")
108
- CommandLineController.run(ARGV[0])
109
- else
110
- abort(ViewFormatter.invalid_file)
111
- end
112
- else
113
- abort(ViewFormatter.file_not_found)
114
- end
115
-
116
- puts ViewFormatter.success_message(DestinationFileWriter.full_file_directory)
117
-
118
- # **** Snippet 14: Title of first snip ****
119
- # Snipped from rspec/test_snip_files/subfolder/test3.rb::1 on 12-16-2014
120
- desc "create the database"
121
- task :create do
122
- puts "Creating file #{DB_PATH} if it doesn't exist..."
123
- touch DB_PATH
124
- end
125
-
126
-
127
- # **** Snippet 15: Title of this snip ****
128
- # Snipped from rspec/test_snip_files/subfolder/test3.rb::9 on 12-16-2014
129
- desc "drop the database"
130
- task :drop do
131
- puts "Deleting #{DB_PATH}..."
132
- rm_f DB_PATH
133
- end
134
-
135
-
136
- # **** Snippet 16: Title of first snip ****
137
- # Snipped from rspec/test_snip_files/subfolder/test3.rb::17 on 12-16-2014
138
- desc "create the database"
139
- task :create do
140
- puts "Creating file #{DB_PATH} if it doesn't exist..."
141
- touch DB_PATH
142
- end
143
-
144
-
145
- # **** Snippet 17: Title of this snip ****
146
- # Snipped from rspec/test_snip_files/subfolder/test3.rb::25 on 12-16-2014
147
- desc "drop the database"
148
- task :drop do
149
- puts "Deleting #{DB_PATH}..."
150
- rm_f DB_PATH
151
- end
152
-
153
-
154
- # **** Snippet 18: Title of this snip ****
155
- # Snipped from rspec/test_snip_files/test.rb::1 on 12-16-2014
156
- class OrangeTree
157
- attr_reader :age, :height
158
- def initialize
159
- @age = 0
160
- @oranges = []
161
- end
162
-
163
-
164
- # **** Snippet 19: TITLE ****
165
- # Snipped from rspec/test_snip_files/test.rb::10 on 12-16-2014
166
- def age!
167
- @oranges += Array.new(rand(1..10)) { Orange.new } if @age > 5
168
- end
169
-
170
-
171
- # **** Snippet 20: test ****
172
- # Snipped from rspec/test_snip_files/test.rb::16 on 12-16-2014
173
- def any_oranges?
174
- !@oranges.empty?
175
- end
176
-
177
-
178
- # **** Snippet 21: Title ggg ****
179
- # Snipped from rspec/test_snip_files/test2.rb::1 on 12-16-2014
180
- def method
181
- "code"
182
- end
183
-
184
-
185
- # **** Snippet 22: Title 2323 ****
186
- # Snipped from rspec/test_snip_files/test2.rb::7 on 12-16-2014
187
- def method
188
- "code"
189
- end
190
-
191
-
192
- # **** Snippet 23: Title 4 ****
193
- # Snipped from rspec/test_snip_files/test2.rb::13 on 12-16-2014
194
- def method
195
- "code"
196
- end
197
-
198
-
@@ -1,6 +1,6 @@
1
1
  require 'rspec'
2
2
  # require 'active_record'
3
- require_relative '../app/controllers/controller'
3
+ require_relative '../lib/controllers/controller'
4
4
  # require_relative '../config/environment'
5
5
 
6
6
  describe "This program" do
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  # spec.executables = ["snip"]
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
- spec.require_paths = ["lib", "db", "config", "app", "log"]
20
+ spec.require_paths = ["lib", "db", "config", "log"]
21
21
 
22
22
  spec.add_development_dependency "bundler", "~> 1.7"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snipgem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - jgerminario
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-02-04 00:00:00.000000000 Z
13
+ date: 2015-03-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -83,18 +83,19 @@ files:
83
83
  - Gemfile.lock
84
84
  - LICENSE.txt
85
85
  - Rakefile
86
- - app/controllers/controller.rb
87
- - app/models/snippet.rb
88
- - app/models/utils/batchprocessing.rb
89
- - app/models/utils/codescanner.rb
90
- - app/models/utils/destinationfilewriter.rb
91
- - app/models/utils/searchfile.rb
92
- - app/models/utils/sourcefilereader.rb
93
- - app/views/viewformatter.rb
94
86
  - bin/snip
95
87
  - config/filepath.config
88
+ - lib/controllers/controller.rb
89
+ - lib/languages/languages.rb
90
+ - lib/models/snippet.rb
91
+ - lib/models/utils/batchprocessing.rb
92
+ - lib/models/utils/codescanner.rb
93
+ - lib/models/utils/destinationfilewriter.rb
94
+ - lib/models/utils/searchfile.rb
95
+ - lib/models/utils/sourcefilereader.rb
96
96
  - lib/snip.rb
97
97
  - lib/snip/version.rb
98
+ - lib/views/viewformatter.rb
98
99
  - log/snip.log
99
100
  - my_snips.rb
100
101
  - rspec/rspec.rb
@@ -116,7 +117,6 @@ require_paths:
116
117
  - lib
117
118
  - db
118
119
  - config
119
- - app
120
120
  - log
121
121
  required_ruby_version: !ruby/object:Gem::Requirement
122
122
  requirements:
@@ -1,30 +0,0 @@
1
- require_relative '../models/utils/sourcefilereader'
2
- require_relative '../models/utils/codescanner'
3
- require_relative '../models/utils/destinationfilewriter'
4
- require_relative '../models/utils/searchfile'
5
-
6
- module CommandLineController
7
-
8
- extend self
9
-
10
- def run(file)
11
- file_read = SourceFileReaderWriter.new(file)
12
- to_run = file_read.convert_to_array_of_lines
13
- CodeScanner.run(to_run, SourceFileReaderWriter.file_to_open)
14
- file_writing
15
- file_read.overwrite_existing_snips
16
- end
17
-
18
- def file_writing
19
- DestinationFileWriter.run(Snippet.snippet_array)
20
- DestinationFileWriter.run(Snippet.rb_snippets, "rb") if Snippet.rb_snippets.any?
21
- DestinationFileWriter.run(Snippet.js_snippets, "js") if Snippet.js_snippets.any?
22
- DestinationFileWriter.run(Snippet.erb_snippets, "erb") if Snippet. erb_snippets.any?
23
- Snippet.snippet_array = []
24
- end
25
-
26
- def display_search(text, ext)
27
- SearchDisplay.run(DestinationFileWriter.return_display_file, text, ext)
28
- end
29
-
30
- end
@@ -1,11 +0,0 @@
1
- class BatchProcessing
2
-
3
- def self.process(directory)
4
- directory = directory.chomp('/')
5
- Dir.glob(directory + "/**/*.{rb,js,erb}") do |file|
6
- next if file == '.' or file == '..'
7
- CommandLineController.run(file)
8
- end
9
- end
10
-
11
- end
@@ -1,42 +0,0 @@
1
- module SearchDisplay
2
-
3
- extend self
4
-
5
- def check_for_title(line)
6
- line.match(/\*\*\*\* Snippet \d+:/)
7
- end
8
-
9
- def run(file,text="",ext="")
10
- if !search_snips(divide_snips(file), text, ext).empty?
11
- search_snips(divide_snips(file), text, ext)
12
- else
13
- ViewFormatter.no_results
14
- end
15
- end
16
-
17
- def divide_snips(file)
18
- snip_array = []
19
- snip_str = ""
20
- File.open(file, "r").each do |line|
21
- if check_for_title(line)
22
- snip_array << snip_str
23
- snip_str = line
24
- else
25
- snip_str << line
26
- end
27
- end
28
- snip_array << snip_str
29
- snip_array.shift
30
- snip_array
31
- end
32
-
33
- def search_snips(array,text,ext)
34
- array.select{ |snip| snip.include?(text) && snip.include?(ext)}
35
- end
36
-
37
- def delete(file, ids)
38
- run(file).reject do |snip|
39
- ids.include?(snip.match(/\*\*\*\* Snippet (\d+):/).captures[0])
40
- end
41
- end
42
- end
@@ -1,169 +0,0 @@
1
- # View component for file writing operations and possibly terminal output
2
- require 'date'
3
-
4
- module ViewFormatter
5
-
6
- extend self
7
-
8
- def snippet_indexer(index, title, type)
9
- if type == "js"
10
- "// **** Snippet " + (index).to_s + ": #{title} **** \n"
11
- elsif type == "erb"
12
- "<!-- **** Snippet " + (index).to_s + ": #{title} **** -->\n"
13
- else
14
- "# **** Snippet " + (index).to_s + ": #{title} **** \n"
15
- end
16
- end
17
-
18
- def file_not_found
19
- "File not found, please try again."
20
- end
21
-
22
- def invalid_file
23
- "File must be a .js, .rb or .erb file."
24
- end
25
-
26
- def success_message(filedir)
27
- if Snippet.snippet_counter > 0
28
- "Your snippet file has been successfully updated with #{Snippet.snippet_counter} new snips at: '#{filedir}'"
29
- else
30
- "No snips found in the specified files or directories."
31
- end
32
- end
33
-
34
- def status_line(line, type, file)
35
- if type == "js"
36
- "// Snipped from #{file}#{line_check(line)} on #{Time.now.strftime("%m-%d-%Y")}"
37
- elsif type == "erb"
38
- "<!-- Snipped from #{file}#{line_check(line)} on #{Time.now.strftime("%m-%d-%Y")}-->"
39
- else
40
- "# Snipped from #{file}#{line_check(line)} on #{Time.now.strftime("%m-%d-%Y")}"
41
- end
42
- end
43
-
44
- def line_check(line)
45
- line ? ':' + line.to_s : nil
46
- end
47
-
48
- def snip_terminal_status(filename, line)
49
- if line
50
- "#{filename}:#{line} snipped"
51
- else
52
- nil
53
- end
54
- end
55
-
56
- def specify_path
57
- "Please specify where you would like to save your snippets by running 'snip -f <filepath>'"
58
- end
59
-
60
- def output_file_not_found(file)
61
- "Output file '#{file}' not found, please specify existing file location or desired location for new file by running 'snip -f <filepath>'"
62
- end
63
-
64
- def new_file(filename)
65
- "New snippet file created at #{File.absolute_path(filename)}"
66
- end
67
-
68
- def terminal_help_message
69
- "
70
-
71
- *** First time setup: ***
72
-
73
- snip -f <directory>
74
-
75
- This specifies the directory where you would like to save your snippets. 'my_snips.txt' will be automatically created if it doesn't already exist. If you move your my_snips.txt file, you will need to run 'snip -f' again.
76
-
77
- Ruby and JavaScript snippet files will be automatically created in the same directory as the .txt file.
78
-
79
-
80
- *** To add snip tags into your code: ***
81
-
82
- Ruby:
83
-
84
- # <snip> Title goes here
85
- 5.times do {|x| puts x}
86
- # </snip>
87
-
88
- JS:
89
-
90
- // <snip> Title goes here
91
- var test = 1234;
92
- // </snip>
93
-
94
- You can alternatively use <$> and </$>. Your tags will be replaced with <*snip*> and/or <*$*> after running 'snip'.
95
-
96
-
97
- *** Ongoing usage: ***
98
-
99
- snip <filename> - process a single file
100
- snip <directory> - process a directory recursively
101
- snip -c - creates new snippet from clipboard contents
102
- snip -d . - display all your snips in terminal
103
- snip -d <type> '<string>' - searches your snips by type (js, rb, erb) or search string
104
- snip -i - reindexes your snippet files (after deleting old snips, etc)
105
- snip -l - view log history if you need to debug previous snips
106
- snip --delete <num> - deletes the specified snippet number(s) (comma-delimited) and reindexes
107
- snip --help - displays this help menu
108
-
109
- Visit https://github.com/jgerminario/snip for more information or to submit bug reports/feature requests.
110
-
111
- "
112
- end
113
-
114
- def new_file_path
115
- "Snippet file location saved as '#{File.absolute_path(ARGV[1])}/my_snips.txt'"
116
- end
117
-
118
- def no_args_message
119
- "Welcome to snip. Type 'snip --help' for help"
120
- end
121
-
122
- def specify_filename(filename)
123
- if filename
124
- "Your file is located at #{filename}"
125
- else
126
- "No output file found, please specify a filename after '-f'"
127
- end
128
- end
129
-
130
- def need_to_specify_directory
131
- "Please specify an existing directory to save your snippets to"
132
- end
133
-
134
- def show_log(log_file)
135
- if File.readlines(log_file)[0]
136
- File.readlines(log_file)
137
- else
138
- "Log file is empty"
139
- end
140
- end
141
-
142
- def show_snips(file)
143
- if file
144
- if File.readlines(file)[0]
145
- File.readlines(file)
146
- else
147
- "Snippet file is empty"
148
- end
149
- else
150
- "Snippet file doesn't exist. Specify where you would like to save your snippets by running 'snip -f <filepath>"
151
- end
152
- end
153
-
154
- def reindexed
155
- "Your snippet files have been reindexed"
156
- end
157
-
158
- def clipboard_command
159
- "Run 'snip -c' or specify code type (js, rb, erb, misc) and a title string with:
160
- 'snip -c rb \"Using string interpolation\"' "
161
- end
162
-
163
- def display_error
164
- "Specify code type (js, rb, erb) and/or a search string, e.g. 'snip -d js \"event delegation\"', or snip -d .' for all snips"
165
- end
166
- def no_results
167
- "No matching snippet files found"
168
- end
169
- end