my_precious 0.1.2 → 0.1.3

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
  SHA256:
3
- metadata.gz: 974976451c2a2b29d599d5a340d8dc229f5bcdcd1a6b43efd28d268eb574b052
4
- data.tar.gz: d332960e09e92215c400e83f881a452fef4c1d351e4fa463097cca652a062f4f
3
+ metadata.gz: fa99e2aca8eb96c5c7b3e953a77fbab98ac79b642c007a4e9e29f1278cf03d1c
4
+ data.tar.gz: b4cfe219a8148e80150e3ab920ba859da27301013d89e9d42ac437b527c2c5ca
5
5
  SHA512:
6
- metadata.gz: 391350499a5ccc9a58888283664a6a1944a357037528acb25e9333e103191a1694c90533e0f0acd909047c1d49dbdc3d0957c087a240f32bc0b58b1885703088
7
- data.tar.gz: 9143001f8f395a796745542d9f6e558a6fa1932f6eb47a2f5386c2ecdb42c0581e7d75b35fb59d4229bab2341abb0e10803236ea519ff0bcba8499aba08bba95
6
+ metadata.gz: 00142c94bd42e97a173dcdf7b4789d3af1b5d2d8ea8d950270bc6a825542f3227f7511206fbca3a4b78982aba38e02cf44aba5a00991d5d4ece040d860989202
7
+ data.tar.gz: 7c93f3c68ba3d58828e9ac208d2ff6687156ed51fdedf797ccfdef19694d25f39beb9595cff2c4875b1877dcd46d03ab9b1912130d3dee8ddd47c7c8d7620907
data/Gemfile CHANGED
@@ -4,3 +4,6 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in my_precious.gemspec
6
6
  gemspec
7
+
8
+ #CLI gems
9
+ gem 'thor'
data/Gemfile.lock ADDED
@@ -0,0 +1,37 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ my_precious (0.1.3)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.3)
10
+ rake (10.5.0)
11
+ rspec (3.8.0)
12
+ rspec-core (~> 3.8.0)
13
+ rspec-expectations (~> 3.8.0)
14
+ rspec-mocks (~> 3.8.0)
15
+ rspec-core (3.8.0)
16
+ rspec-support (~> 3.8.0)
17
+ rspec-expectations (3.8.2)
18
+ diff-lcs (>= 1.2.0, < 2.0)
19
+ rspec-support (~> 3.8.0)
20
+ rspec-mocks (3.8.0)
21
+ diff-lcs (>= 1.2.0, < 2.0)
22
+ rspec-support (~> 3.8.0)
23
+ rspec-support (3.8.0)
24
+ thor (0.20.3)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ bundler (~> 1.17)
31
+ my_precious!
32
+ rake (~> 10.0)
33
+ rspec (~> 3.0)
34
+ thor
35
+
36
+ BUNDLED WITH
37
+ 1.17.3
data/exe/my_precious ADDED
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'my_precious'
4
+ require 'my_precious/cli'
5
+
6
+ MyPrecious::CLI.start(ARGV)
@@ -0,0 +1,8 @@
1
+ # require 'thor'
2
+
3
+ # module MyPrecious
4
+
5
+ # end #end of Module
6
+
7
+
8
+
@@ -0,0 +1,190 @@
1
+ require 'pry'
2
+
3
+ class Parser
4
+ # KEYWORDS
5
+ PUT_KEYWORDS = ['bring forth the ring', 'says', 'screams', 'exclaims', 'sobbs', 'coughs']
6
+ COMMENT_KEYWORDS = ['second breakfast', 'wear the ring']
7
+ ASSIGNMENT_KEYWORDS = ['is', 'has', 'was']
8
+ INCREMENT_KEYWORDS = ['eats lembas bread', 'fortifies stronghold', 'rests', 'recieves Evenstar', 'reforges Narsil']
9
+ DECREMENT_KEYWORDS = ['runs out of lembas bread', 'lost', 'hunted by orcs']
10
+ ADDITION_KEYWORDS = ['joins', 'join', 'and', 'accompanies']
11
+ SUBTRACTION_KEYWORDS = ['leaves the fellowship', 'stabs', 'banishes', 'steals']
12
+ MULTIPLICATION_KEYWORDS = ['gives aid to', 'procreates', 'bolsters']
13
+ DIVISION_KEYWORDS = ['decapitates', 'dismembers']
14
+ COMPARISON_KEYWORDS = ['as', 'equal']
15
+ CONDITION_KEYWORDS = ['does', 'if', 'will']
16
+ END_KEYWORDS = ['you shall not pass']
17
+ TRUE_KEYWORDS = ['precious']
18
+ FALSE_KEYWORDS = ['not precious']
19
+ LOOP_KEYWORDS = ['whilst', 'during the journey']
20
+ GREATER_THAN_KEYWORDS = ['stronger than', 'more']
21
+ LESS_THAN_KEYWORDS = ['weaker than', 'less']
22
+ OPERATOR_KEYWORDS = ['#', '+', '-', '=', '*', '/', '+=1', '-=1', 'puts', '==', 'if', 'end', 'true', 'false', 'while', '>', '<']
23
+
24
+
25
+ ALICIA_KEYS = [PUT_KEYWORDS, COMMENT_KEYWORDS, ASSIGNMENT_KEYWORDS,
26
+ INCREMENT_KEYWORDS, DECREMENT_KEYWORDS, ADDITION_KEYWORDS,
27
+ SUBTRACTION_KEYWORDS, DIVISION_KEYWORDS, MULTIPLICATION_KEYWORDS,
28
+ COMPARISON_KEYWORDS, CONDITION_KEYWORDS, END_KEYWORDS, TRUE_KEYWORDS, FALSE_KEYWORDS, LOOP_KEYWORDS, GREATER_THAN_KEYWORDS, LESS_THAN_KEYWORDS]
29
+
30
+ MAP = [{'puts': PUT_KEYWORDS}, {'#': COMMENT_KEYWORDS},
31
+ {'=': ASSIGNMENT_KEYWORDS}, {'+=1': INCREMENT_KEYWORDS},
32
+ {'-=1': DECREMENT_KEYWORDS}, {'+': ADDITION_KEYWORDS},
33
+ {'-': SUBTRACTION_KEYWORDS}, {'*': MULTIPLICATION_KEYWORDS},
34
+ {'/': DIVISION_KEYWORDS}, {'==': COMPARISON_KEYWORDS},
35
+ {'if': CONDITION_KEYWORDS}, {'end': END_KEYWORDS}, {'true': TRUE_KEYWORDS}, {'false': FALSE_KEYWORDS}, {'while': LOOP_KEYWORDS}, {'>': GREATER_THAN_KEYWORDS}, {'<': LESS_THAN_KEYWORDS}]
36
+
37
+ def self.parse_file(file, output_file_name)
38
+ str = ""
39
+ writer_file_name = output_file_name
40
+ file.each_with_index do |file, index|
41
+ file.each_line do |line|
42
+ line = parse_line(line, index)
43
+ str << (line + "\n")
44
+ end
45
+ end
46
+ write(str, writer_file_name)
47
+ end
48
+
49
+ def self.parse_line(line, index)
50
+
51
+ #error handeling
52
+ #ignore lines of length 1, its empty
53
+ if line.length == 1
54
+ # write("#{line}")
55
+ return line
56
+ else
57
+
58
+ #check if there are strings in line
59
+ quote = ""
60
+ if line.include? '"'
61
+ quote = get_string(line)
62
+ line = line.gsub(quote, 'quote_placeholder')
63
+ end
64
+
65
+ #check if line is a comment
66
+ comment = ""
67
+ if COMMENT_KEYWORDS.any? { |word| line.include?(word) }
68
+ line = parse(line, COMMENT_KEYWORDS)
69
+ comment = get_comment(line)
70
+ line = line.gsub(comment, 'comment_placeholder')
71
+ end
72
+
73
+ #get rid of special chars
74
+ line_array = line.split(" ")
75
+ line_array.each_with_index do |word, index|
76
+ line_array[index] = purify(word)
77
+ end
78
+
79
+ #check for keywords
80
+ #calls if statements
81
+ line = line_array.join(" ")
82
+ line = check_for_keywords(line)
83
+
84
+ #remove extra english words
85
+ line = only_valuable_words(line).downcase
86
+
87
+ #put string back into line
88
+ if line.include? ('"quote_placeholder"')
89
+ line = line.gsub('quote_placeholder', quote)
90
+ end
91
+
92
+ if line.include? ('comment_placeholder')
93
+ line = line.gsub('comment_placeholder', comment)
94
+ end
95
+ #puts "end line: #{line}"
96
+ # write("#{line}")
97
+ return line
98
+ end
99
+ end
100
+
101
+ def self.check_for_keywords(line)
102
+ ALICIA_KEYS.each do |keywords|
103
+ if keywords.any? { |word| line.include?(word) }
104
+ line = parse(line, keywords)
105
+ end
106
+ end
107
+ line
108
+ end
109
+
110
+ # METHODS
111
+ def self.parse(line, keywords)
112
+ keywords.each do |keyword|
113
+ if line.include? keyword
114
+ replacement = find_replacement(keywords)
115
+ line = line.gsub(keyword, replacement)
116
+ end
117
+ end
118
+ return line
119
+ end
120
+
121
+ def self.purify(word)
122
+ word = word.gsub(/[!@%&.?,]/,'') # get rid of special chars
123
+ end
124
+
125
+ def self.only_valuable_words(line)
126
+ important_words = []
127
+ line_array = line.split(" ")
128
+ line_array.each do |word|
129
+ valuable_word = valuable?(word)
130
+ if valuable_word
131
+ important_words << word
132
+ end
133
+ end
134
+ line = important_words.join(" ")
135
+ end
136
+
137
+ def self.valuable?(word)
138
+ valuable = false
139
+ if /[[:upper:]]/.match(word[0]) #if variable
140
+ valuable = true
141
+ elsif word == '"quote_placeholder"' #if string
142
+ valuable = true
143
+ elsif word == '#comment_placeholder' #if string
144
+ valuable = true
145
+ elsif word.to_i.to_s == word #if num
146
+ valuable = true
147
+ elsif OPERATOR_KEYWORDS.include? word #if operator
148
+ valuable = true
149
+ end
150
+ valuable
151
+ end
152
+
153
+ def self.get_string(phrase)
154
+ phrase_array = phrase.split('')
155
+ index = phrase_array.find_index { |i| i == '"'} + 1
156
+ quote = ""
157
+ while phrase_array[index] != '"'
158
+ quote << phrase_array[index]
159
+ index += 1
160
+ end
161
+ quote
162
+ end
163
+
164
+ def self.get_comment(phrase)
165
+ phrase_array = phrase.split('')
166
+ index = phrase_array.find_index { |i| i == '#'} + 1
167
+ comment = ""
168
+ while index < phrase_array.length
169
+ comment << phrase_array[index]
170
+ index += 1
171
+ end
172
+ comment
173
+ end
174
+
175
+ def self.find_replacement(keywords)
176
+ MAP.each do |hash|
177
+ hash.each do |key, value|
178
+ if value == keywords
179
+ return key.to_s
180
+ end
181
+ end
182
+ end
183
+ end
184
+
185
+ def self.write(str, writer_file_name)
186
+ writer_file = File.open(writer_file_name, 'w')
187
+ writer_file.write(str)
188
+ end
189
+
190
+ end
@@ -1,3 +1,3 @@
1
1
  module MyPrecious
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/lib/my_precious.rb CHANGED
@@ -1,7 +1,32 @@
1
+ require 'thor'
1
2
  require "my_precious/version"
2
3
 
3
4
  module MyPrecious
4
5
  class Error < StandardError; end
5
6
  # Your code goes here...
6
- puts "Trying Hard!"
7
+ class CLI < Thor
8
+
9
+ desc 'bring_forth FILE', 'creates a .precious FILE where users can write their LOTR code'
10
+ def bring_forth filename
11
+ file = File.open filename
12
+ puts "You have succesfully brought forth tome.rb"
13
+ end
14
+
15
+ desc 'parse FILE', 'parse a .precious FILE and output the result'
16
+ def parse input_file_name, output_file_name
17
+ file = File.open input_file_name
18
+ Parser.parse_file file, output_file_name
19
+ puts "You have successfully transcribed tome.rb"
20
+ file.close
21
+ end
22
+
23
+ # def run filename
24
+ # file = File.open filename
25
+ # puts "You have successfully closed tome.rb"
26
+ # end
27
+
28
+ # def speak_friend
29
+ # end
30
+
31
+ end #end of CLI
7
32
  end
@@ -0,0 +1,36 @@
1
+ gandalf says "they are taking the hobbits to Isengard"
2
+ Frodo has 398 pieces of gold.
3
+ Saruman was worried when he saw 7 hobbits approaching his lair.
4
+ Frodo eats lembas bread
5
+ Despair is really sad because Frodo leaves the fellowship without Saruman knowing.
6
+ Ruin is Frodo.
7
+
8
+ bring forth the ring Despair and Ruin
9
+ Frodo joins the fellowship with Saruman.
10
+ Sam is 3.
11
+ i love second breakfast Sam is going to be a number
12
+ Frodo leaves the fellowship with Sam
13
+ Sam runs out of lembas bread
14
+ Sam decapitates Saruman
15
+ Saruman gives aid to Saruman
16
+ Gollum is "a good boy"
17
+
18
+ will Gollum grow as strong as Gollum
19
+ Sam is Sam and Frodo
20
+ gandalf screams you shall not pass
21
+ gimly says Sam
22
+
23
+ Legolas is precious!!!!
24
+
25
+ but the Balrog is not precious :(
26
+
27
+ whilst Frodo climed as strong as he could, Saruman cried, nooo!!
28
+ you shall not pass
29
+
30
+ Nazgul has 10 horsepower
31
+
32
+ if Frodo runs more quickly than a Nazgul
33
+ you shall not pass
34
+
35
+ does a Nazgul eat less hobbits than Saruman?
36
+ you shall not pass
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_precious
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - jessicabettsftw
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-03-22 00:00:00.000000000 Z
12
+ date: 2019-03-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -59,7 +59,8 @@ description: '"I wanted to make a fun programming language so I did it. It''s al
59
59
  email:
60
60
  - jessicaannbettsis@gmail.com
61
61
  - crishanks12@gmail.com
62
- executables: []
62
+ executables:
63
+ - my_precious
63
64
  extensions: []
64
65
  extra_rdoc_files: []
65
66
  files:
@@ -68,13 +69,18 @@ files:
68
69
  - ".travis.yml"
69
70
  - CODE_OF_CONDUCT.md
70
71
  - Gemfile
72
+ - Gemfile.lock
71
73
  - LICENSE.txt
72
74
  - README.md
73
75
  - Rakefile
74
76
  - bin/console
75
77
  - bin/setup
78
+ - exe/my_precious
76
79
  - lib/my_precious.rb
80
+ - lib/my_precious/cli.rb
81
+ - lib/my_precious/parser.rb
77
82
  - lib/my_precious/version.rb
83
+ - middle_earth.precious
78
84
  - my_precious.gemspec
79
85
  homepage: https://github.com/jessicabettsftw/my_precious
80
86
  licenses: