general 1.2.6 → 1.2.7

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: 51f768f306c5565ab2f45487258f72573084c4fb
4
- data.tar.gz: b0d5eb3ba4272fa0ea2eca4d6d77eb643c12ba7c
3
+ metadata.gz: a561694d495a4822d409b79ee059bed5a7aa2d70
4
+ data.tar.gz: 77160aa8d9d951cf91988cd482796c50b564ff72
5
5
  SHA512:
6
- metadata.gz: dc98ec51f6b552c5b1dcd78395385fb7f6a294c3503566e16bde090f6887b8f97f5d5fb8c88617fb062b8bbcc7146f84d348649f3bc10abc323190864b479813
7
- data.tar.gz: 6adddc64463bb8a49c2c59b410049137e0393997c4de2dabf4f5c5092888537a86cba2d8907ffab849f5a36a6bfc3fc7532f01a6d1e60cb80cb3d2125db80984
6
+ metadata.gz: 9cf196acb87edb9afe1f21ed2dbc4754bef11395999d0776fe48563e6f491328ac347a0ad5a23e24221324abefdbb931de087df3dfcc39b4fe0aa54024c49b52
7
+ data.tar.gz: d6d2e2bd5869732dc2677f9176d6bd9796e0743d863c11aa097d3245923877e97e2b6a95683be8ab9219d045da70d72d6959d0f46a8639f95517c9b24b44b7b3
data/lib/general.rb CHANGED
@@ -1,2 +1,18 @@
1
+ # General is a templating system in ruby
2
+ # Copyright (C) 2016 Anshul Kharbanda
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
1
17
  require_relative "gtemplate"
2
18
  require_relative "gfile"
@@ -0,0 +1,95 @@
1
+ # General is a templating system in ruby
2
+ # Copyright (C) 2016 Anshul Kharbanda
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ # General is a templating system in ruby
18
+ #
19
+ # Author: Anshul Kharbanda
20
+ # Created: 3 - 4 - 2016
21
+ module General
22
+ # Implements placeholder operations
23
+ #
24
+ # Author: Anshul Kharbanda
25
+ # Created: 6 - 3 - 2016
26
+ module GOperations
27
+ #-----------------------------------STRING OPERATIONS------------------------------------
28
+
29
+ # Capitalizes every word in the string
30
+ #
31
+ # Parameter: string - the string being capitalized
32
+ #
33
+ # Return: the capitalized string
34
+ def self.capitalize string
35
+ return string.split(' ').collect(&:capitalize).join(' ')
36
+ end
37
+
38
+ # Converts every letter in the string to uppercase
39
+ #
40
+ # Parameter: string - the string being uppercased
41
+ #
42
+ # Return: the uppercased string
43
+ def self.uppercase string
44
+ return string.upcase
45
+ end
46
+
47
+ # Converts every letter in the string to lowercase
48
+ #
49
+ # Parameter: string - the string being lowercased
50
+ #
51
+ # Return: the lowercased string
52
+ def self.lowercase string
53
+ return string.downcase
54
+ end
55
+
56
+ #-----------------------------------INTEGER OPERATIONS------------------------------------
57
+
58
+ # Returns the integer monetary value (in cents) formatted to USD
59
+ #
60
+ # Parameter: integer - the integer being formatted (representing the amount in cents)
61
+ #
62
+ # Return: the formatted USD amount
63
+ def self.dollars integer
64
+ if integer < 0
65
+ return "-$" + (integer * -0.01).to_s
66
+ else
67
+ return '$' + (integer * 0.01).to_s
68
+ end
69
+ end
70
+
71
+ # Returns the integer time value (in seconds) formatted to H:MM:SS
72
+ #
73
+ # Parameter: integer - the integer being formatted (representing the time in second)
74
+ #
75
+ # Return: the formatted H:MM:SS
76
+ def self.hourminsec integer
77
+ return format_time "H:MM:SS", integer
78
+ end
79
+
80
+ private
81
+
82
+ def self.format_time formatter, value
83
+ return formatter
84
+ .sub(/II/, (value / 3600 % 12 + 1).to_s.rjust(2, '0'))
85
+ .sub(/HH/, (value / 3600).to_s.rjust(2, '0'))
86
+ .sub(/MM/, (value % 3600 / 60).to_s.rjust(2, '0'))
87
+ .sub(/SS/, (value % 3600 % 60).to_s.rjust(2, '0'))
88
+ .sub(/I/, (value / 3600 % 12 + 1).to_s)
89
+ .sub(/H/, (value / 3600).to_s)
90
+ .sub(/M/, (value % 3600 / 60).to_s)
91
+ .sub(/S/, (value % 3600 % 60).to_s)
92
+ .sub(/A/, value / 3600 > 12 ? 'PM' : 'AM')
93
+ end
94
+ end
95
+ end
data/lib/gpartials.rb ADDED
@@ -0,0 +1,127 @@
1
+ # General is a templating system in ruby
2
+ # Copyright (C) 2016 Anshul Kharbanda
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ # General is a templating system in ruby
18
+ #
19
+ # Author: Anshul Kharbanda
20
+ # Created: 3 - 4 - 2016
21
+ module General
22
+ private
23
+
24
+ # Represents a plain string part in a GTemplate
25
+ #
26
+ # Author: Anshul Kharbanda
27
+ # Created: 7 - 1 - 2016
28
+ class GPartialString
29
+ # Initializes the GPartialString with the given string
30
+ #
31
+ # Parameter: string - the string value of the GPartialString
32
+ def initialize(string)
33
+ @string = string
34
+ end
35
+
36
+ # Returns the string
37
+ #
38
+ # Returns: the string
39
+ def apply data
40
+ @string
41
+ end
42
+
43
+ # Returns the string
44
+ #
45
+ # Returns: the string
46
+ def to_s
47
+ @string
48
+ end
49
+ end
50
+
51
+ # Represents a placeholder part in a GTemplate
52
+ #
53
+ # Author: Anshul Kharbanda
54
+ # Created: 7 - 1 - 2016
55
+ class GPlaceholder
56
+ # Regular expression that matches placeholders
57
+ REGEX = /@\((?<name>[a-zA-Z]\w*)\s*(\:\s*(?<default>.*?))?\s*(->\s*(?<operation>[a-zA-Z]\w*))?\)/
58
+
59
+ # Read name
60
+ attr :name
61
+
62
+ # Initializes the GPlaceholder with the given match
63
+ #
64
+ # Parameter: match - the match data from the string being parsed
65
+ def initialize match
66
+ @name = match[:name].to_sym
67
+ @operation = match[:operation]
68
+ end
69
+
70
+ # Returns the value of the placeholder in the given data
71
+ # with the given operation performed on it
72
+ #
73
+ # Parameter: data - the data being applied
74
+ #
75
+ # Return: the value of the placeholder in the given data
76
+ # with the given operation performed on it
77
+ def apply data
78
+ if @operation
79
+ return General::GOperations.send(@operation, data[@name]).to_s
80
+ else
81
+ return data[@name].to_s
82
+ end
83
+ end
84
+
85
+ # Returns the string representation of the placeholder
86
+ #
87
+ # Return: the string representation of the placeholder
88
+ def to_s
89
+ return "@(#{@name} -> #{@operation})"
90
+ end
91
+ end
92
+
93
+ # Represents an array placeholder part in a GTemplate
94
+ #
95
+ # Author: Anshul Kharbanda
96
+ # Created: 7 - 1 - 2016
97
+ class GArrayPlaceholder
98
+ # Regular expression that matches array placeholders
99
+ REGEX = /@\[(?<name>[a-zA-Z]\w*)\]( +|\n+)?(?<text>.*?)( +|\n+)?@\[(?<delimeter>.+)?\]/m
100
+
101
+ # Default delimeter
102
+ DEFAULT_DELIMETER = " "
103
+
104
+ # Read name
105
+ attr :name
106
+
107
+ # Initializes the GPlaceholder with the given match
108
+ #
109
+ # Parameter: match - the match data from the string being parsed
110
+ def initialize match
111
+ @name = match[:name].to_sym
112
+ @delimeter = match[:delimeter] || DEFAULT_DELIMETER
113
+ @template = General::GTemplate.new match[:text]
114
+ end
115
+
116
+ # Returns the value of the array placeholder in the given data
117
+ # formatted by the given GTemplate and joined by the given delimeter
118
+ #
119
+ # Parameter: data - the data being applied
120
+ #
121
+ # Return: the value of the array placeholder in the given data
122
+ # formatted by the given GTemplate and joined by the given delimeter
123
+ def apply data
124
+ return @template.apply_all(data[@name]).join(@delimeter)
125
+ end
126
+ end
127
+ end
data/lib/gtemplate.rb CHANGED
@@ -14,6 +14,9 @@
14
14
  # You should have received a copy of the GNU General Public License
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
 
17
+ require_relative "goperations"
18
+ require_relative "gpartials"
19
+
17
20
  # General is a templating system in ruby
18
21
  #
19
22
  # Author: Anshul Kharbanda
@@ -24,38 +27,13 @@ module General
24
27
  # Author: Anshul Kharbanda
25
28
  # Created: 3 - 4 - 2016
26
29
  class GTemplate
27
- # Regular expression that matches placeholders
28
- PLACEHOLDER = /@\((?<name>[a-zA-Z]\w*)\s*(\:\s*(?<default>.*?))?\s*(->\s*(?<operation>[a-zA-Z]\w*))?\)/
29
-
30
- # Regular expression that matches array placeholders
31
- ARRAY_PLACEHOLDER = /@\[(?<name>[a-zA-Z]\w*)\]( |\n)?(?<text>.*?)( |\n)?@\[(?<delimeter>.+)?\]/m
32
-
33
- # Operations that can be called on placeholder values
34
- OPERATIONS = {
35
- # String operations
36
- default: lambda { |string| return string },
37
- capitalize: lambda { |string| return string.split(" ")
38
- .collect(&:capitalize)
39
- .join(" ") },
40
- uppercase: lambda { |string| return string.uppercase },
41
- lowercase: lambda { |string| return string.lowercase },
42
-
43
- # Integer operations
44
- dollars: lambda { |integer| return "$" + (integer * 0.01).to_s },
45
- hourminsec: lambda { |integer| return (integer / 3600).to_s \
46
- + ":" + (integer % 3600 / 60).to_s \
47
- + ":" + (integer % 3600 % 60).to_s }
48
- }
49
-
50
30
  # Creates a GTemplate with the given template string
51
31
  #
52
32
  # Parameter: string - the string being converted to a template
53
33
  def initialize string
54
- @parts = []
55
- @places = {}
56
- @defaults = {}
57
- @operation = {}
58
- @array = Hash.new(false)
34
+ # The string gets split into parts by placeholder and array template
35
+ @parts = []
36
+ @defaults = {}
59
37
 
60
38
  parse_string string
61
39
  end
@@ -63,7 +41,7 @@ module General
63
41
  # Returns a string representation of the string
64
42
  #
65
43
  # Return: a string representation of the string
66
- def to_s; @parts.join; end
44
+ def to_s; @parts.collect(&:to_s).join; end
67
45
 
68
46
  # Applies the given data to the template and returns the generated string
69
47
  #
@@ -71,22 +49,11 @@ module General
71
49
  #
72
50
  # Return: string of the template with the given data applied
73
51
  def apply data={}
52
+ # Create applied data and parts
74
53
  applied_data = @defaults.merge data.to_hash
75
- applied_parts = @parts.clone
76
- applied_data.each do |key, value|
77
- if @places.has_key? key
78
- @places[key].each do |place|
79
- if @array[key]
80
- applied_parts[place[:index]] = place[:template].apply_all(value).join(place[:delimeter])
81
- else
82
- applied_parts[place[:index]] = OPERATIONS[place[:operation]].call(value)
83
- end
84
- end
85
- else
86
- throw "Placeholder is not defined in template: @(#{key})"
87
- end
88
- end
89
- return applied_parts.join
54
+
55
+ # Apply each part
56
+ return @parts.inject("") { |string, part| string += part.apply(applied_data) }
90
57
  end
91
58
 
92
59
  # Applies each data structure in the array independently to the template
@@ -97,11 +64,7 @@ module General
97
64
  #
98
65
  # Return: array of strings generated from the template with the given data applied
99
66
  def apply_all data_array
100
- string_array = []
101
- data_array.each do |data|
102
- string_array << apply(data)
103
- end
104
- return string_array
67
+ return data_array.collect { |data| apply(data) }
105
68
  end
106
69
 
107
70
  private
@@ -112,7 +75,9 @@ module General
112
75
  #
113
76
  # Return: true if given string has a placeholder
114
77
  def has_placeholder string
115
- return PLACEHOLDER =~ string || ARRAY_PLACEHOLDER =~ string
78
+ placeholder = General::GPlaceholder::REGEX =~ string
79
+ array_placeholder = General::GArrayPlaceholder::REGEX =~ string
80
+ return !placeholder.nil? && placeholder > -1 || !array_placeholder.nil? && array_placeholder > -1
116
81
  end
117
82
 
118
83
  # Parses the string into General template data
@@ -122,67 +87,43 @@ module General
122
87
  # While there is still a placeholder in string
123
88
  while has_placeholder string
124
89
  # Find locations of next placeholder and next array placeholder
125
- next_p = PLACEHOLDER =~ string
126
- next_a = ARRAY_PLACEHOLDER =~ string
90
+ next_p = General::GPlaceholder::REGEX =~ string
91
+ next_a = General::GArrayPlaceholder::REGEX =~ string
127
92
 
128
93
  # If found at least one
129
94
  if !(next_a.nil? && next_p.nil?)
130
95
 
131
96
  # If found only array placeholder (or if found array placeholder before placeholder)
132
97
  # Process placeholder
133
- if next_p.nil? && !next_a.nil? || !(next_a.nil? || next_p.nil?) && next_a < next_p
134
- # Split match and add parts
135
- match = ARRAY_PLACEHOLDER.match string
136
- @parts << string[0...match.begin(0)] << match[:name].to_sym
137
- string = string[match.end(0)..-1]
138
-
139
- # Get name
140
- name = match[:name].to_sym
141
-
142
- # Get delimeter (if any) and parse array template
143
- delimeter = match[:delimeter].nil? ? " " : match[:delimeter]
144
- template = GTemplate.new(match[:text])
98
+ if !(next_a.nil? || next_p.nil?) && next_a < next_p || next_p.nil?
99
+ # Split match and add part
100
+ match = General::GArrayPlaceholder::REGEX.match string
101
+ @parts << General::GPartialString.new(string[0...match.begin(0)])
145
102
 
146
- # Push place and array information
147
- push_place name, {index: @parts.length - 1, template: template, delimeter: delimeter}
148
- @array[name] = true
103
+ # Push array template
104
+ @parts << General::GArrayPlaceholder.new(match)
149
105
 
150
- # If found only array placeholder (or if found array placeholder before placeholder)
106
+ # If found only placeholder (or if found placeholder before array placeholder)
151
107
  # Process placeholder
152
- elsif next_a.nil? && !next_p.nil? || !(next_a.nil? || next_p.nil?) && next_p < next_a
153
- # Split match and add parts
154
- match = PLACEHOLDER.match string
155
- @parts << string[0...match.begin(0)] << match[:name].to_sym
156
- string = string[match.end(0)..-1]
157
-
158
- # Get name
159
- name = match[:name].to_sym
108
+ elsif !(next_a.nil? || next_p.nil?) && next_p < next_a || next_a.nil?
109
+ # Split match and add previous part
110
+ match = General::GPlaceholder::REGEX.match string
111
+ @parts << General::GPartialString.new(string[0...match.begin(0)])
160
112
 
161
- # Get operation and arguments (if any)
162
- operation = match[:operation].nil? ? :default : match[:operation].to_sym
113
+ # Add placeholder
114
+ @parts << General::GPlaceholder.new(match)
163
115
 
164
- # Push place and default information
165
- push_place name, {index: @parts.length - 1, operation: operation}
166
- @defaults[name] = match[:default] unless @defaults.has_key? name
167
-
116
+ # Push default information
117
+ @defaults[match[:name].to_sym] ||= match[:default]
168
118
  end
119
+
120
+ # Trim string
121
+ string = string[match.end(0)..-1]
169
122
  end
170
123
  end
171
124
 
172
125
  # Add end of string
173
- @parts << string
174
- end
175
-
176
- # Adds the given place for the placeholder of the given name
177
- #
178
- # Parameter: name - the name of the placeholder add a place to
179
- # Parameter: place - the place information to add
180
- def push_place name, place
181
- if @places.has_key? name
182
- @places[name] << place
183
- else
184
- @places[name] = [place]
185
- end
126
+ @parts << General::GPartialString.new(string)
186
127
  end
187
128
  end
188
129
  end
data/spec/gfile_spec.rb CHANGED
@@ -2,10 +2,10 @@ require "spec_require"
2
2
 
3
3
  describe General::GFile do
4
4
  before :all do
5
- @filepath = "tmp"
5
+ @filepath = "exp"
6
6
  @filename = "sample.txt"
7
7
  @new_filename = "supersample.txt"
8
- @new_filepath = "tmp/supertmp"
8
+ @new_filepath = "exp/superexp"
9
9
  @data = {name: "joe", food: "Joe's Schmoes"}
10
10
  @default_text = "There once was a chef name Gordon Ramsay, and he loved eating carrots."
11
11
  @applied_text = "There once was a chef name Joe, and he loved eating Joe's Schmoes."
@@ -18,7 +18,6 @@ describe General::GFile do
18
18
  describe "#new" do
19
19
  it "Creates a new GFile with the given filename" do
20
20
  expect(@file).to be_an_instance_of General::GFile
21
- expect(@file.target).to eql (@filepath + "/" + @filename)
22
21
  end
23
22
  end
24
23
 
@@ -2,6 +2,7 @@ require "spec_require"
2
2
 
3
3
  describe General::GTemplate do
4
4
  before :all do
5
+ # General template test
5
6
  @template1 = General::GTemplate.new "There once was a man named @(name: Gordon Ramsay). @(name) loved @(food: Cat Food)!"
6
7
  @default_text = "There once was a man named Gordon Ramsay. Gordon Ramsay loved Cat Food!"
7
8
  @all_applied_text = "There once was a man named Joe. Joe loved Joe's Shmoes!"
@@ -11,17 +12,34 @@ describe General::GTemplate do
11
12
  @name = "Dog"
12
13
  @food = "Denny's Fennies"
13
14
 
15
+ # General array template test
14
16
  @template2 = General::GTemplate.new "@[greetings] Hello, @(name)! How is the @(pet)? @[\n]"
15
17
  @data2 = {greetings: [
16
- {name: "Joe", pet: "cat"},
17
18
  {name: "Ben", pet: "dog"},
19
+ {name: "Jen", pet: "cat"},
18
20
  {name: "Ken", pet: "plant"}
19
21
  ]}
20
- @applied_text2 = "Hello, Joe! How is the cat?\nHello, Ben! How is the dog?\nHello, Ken! How is the plant?"
22
+ @applied_text2 = "Hello, Ben! How is the dog?\nHello, Jen! How is the cat?\nHello, Ken! How is the plant?"
21
23
 
22
- @template3 = General::GTemplate.new "There once was a dog named @(name: dog -> capitalize). @(name -> capitalize) earned @(amount -> dollars) last week."
23
- @data3 = {name: "cat", amount: 19999}
24
- @applied_text3 = "There once was a dog named Cat. Cat earned $199.99 last week."
24
+ @template3 = General::GTemplate.new "@(film: The Dark Knight)\nCrew:\n@[crew] \t@(name): @(role) @[\n]\nScore: @(score)/10"
25
+ @data3 = {
26
+ film: 'Batman Begins',
27
+ crew: [
28
+ {name: 'David S Goyer', role: 'Writer'},
29
+ {name: 'Chris Nolan', role: 'Director'},
30
+ {name: 'Wally Pfister', role: 'Director of Photography'},
31
+ {name: 'Michael Caine', role: 'Alfred Pennyworth'},
32
+ {name: 'Christian Bale', role: 'Bruce Wayne/Batman'}
33
+ ],
34
+ score: 10
35
+ }
36
+ @applied_text3 = "Batman Begins\nCrew:\n\tDavid S Goyer: Writer\n\tChris Nolan: Director\n\tWally Pfister: Director of Photography" \
37
+ "\n\tMichael Caine: Alfred Pennyworth\n\tChristian Bale: Bruce Wayne/Batman\nScore: 10/10"
38
+
39
+ # General operations test
40
+ @template4 = General::GTemplate.new "There once was a dog named @(name: dog -> capitalize). @(name -> capitalize) earned @(amount -> dollars) last week."
41
+ @data4 = {name: "cat", amount: 19999}
42
+ @applied_text4 = "There once was a dog named Cat. Cat earned $199.99 last week."
25
43
  end
26
44
 
27
45
  describe "#new" do
@@ -29,6 +47,7 @@ describe General::GTemplate do
29
47
  expect(@template1).to be_an_instance_of General::GTemplate
30
48
  expect(@template2).to be_an_instance_of General::GTemplate
31
49
  expect(@template3).to be_an_instance_of General::GTemplate
50
+ expect(@template4).to be_an_instance_of General::GTemplate
32
51
  end
33
52
  end
34
53
 
@@ -63,9 +82,15 @@ describe General::GTemplate do
63
82
  end
64
83
  end
65
84
 
85
+ context "With array template and regular placeholder" do
86
+ it "Returns the template with the given data applied (including array data) and formatted according to the template" do
87
+ expect(@template3.apply(@data3)).to eql @applied_text3
88
+ end
89
+ end
90
+
66
91
  context "With placeholder operation" do
67
92
  it "Returns the template with the given array data applied and formatted according to the format operations" do
68
- expect(@template3.apply(@data3)).to eql @applied_text3
93
+ expect(@template4.apply(@data4)).to eql @applied_text4
69
94
  end
70
95
  end
71
96
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: general
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anshul Kharbanda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-29 00:00:00.000000000 Z
11
+ date: 2016-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -24,10 +24,10 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.4'
27
- description: "General is a simple templating system in ruby that allows you to create
28
- templates from both \t\t\t\t\t\tpure strings and files (with the extension .general),
29
- as well as create new strings and files \t\t\t\t\t\twith these created objects.
30
- For more information, visit the homepage"
27
+ description: General is a simple templating system in ruby that allows you to create
28
+ templates from bothpure strings and files (with the extension .general), as well
29
+ as create new strings and fileswith these created objects. For more information,
30
+ visit the homepage
31
31
  email: akanshul97@gmail.com
32
32
  executables: []
33
33
  extensions: []
@@ -35,6 +35,8 @@ extra_rdoc_files: []
35
35
  files:
36
36
  - lib/general.rb
37
37
  - lib/gfile.rb
38
+ - lib/goperations.rb
39
+ - lib/gpartials.rb
38
40
  - lib/gtemplate.rb
39
41
  - spec/gfile_spec.rb
40
42
  - spec/gtemplate_spec.rb