curly_bracket_parser 0.0.1 → 0.1.0

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: 437e9b2cda38fa373852f4b2f67a35428f99d5c78928820b539ae8c5ecf77d09
4
- data.tar.gz: b11dd97f668eff6128b5ae0a9846189c7a8e6291953e7a475080fe705247e9f3
3
+ metadata.gz: e2581aa770602a42a73eb9f79f3840dd53609d2905a75db5aaf3a5b0dac1f018
4
+ data.tar.gz: 912c7fb9c2285515bf5b7af00da8c629222af329e68dd431f5cd649c20815df4
5
5
  SHA512:
6
- metadata.gz: d8286bc6b15346a2babed4de6894be8fadad6c84c9d51ad759fdae906ecec41fdc50d28cf294fb3f8f1b67b6745bf6206e95d337f743ed82fc488cd77b4c6bea
7
- data.tar.gz: 3aab318c0069bf40f73443eefb0245e53c35bbddfb6373883e921ae32e3ebd1b26050319ab24e6336baf98283023ee9232a36dd2655745ee3b018170836a490d
6
+ metadata.gz: 05eba36a79347485fd42db86ecfe49824913b497a89b6f36aa3b2924c4b2b8b6b1fae89b4bb3099708f5b76488706d1d6da4ff035f0c41bbf52cb0633f96a624
7
+ data.tar.gz: 56a9306ca6375a6e7c4366781b638eb509918c2a101703de930d0f481a8661ef00e1054925c74ff845c3de0cd2ea51f6b7304f34a259aad27379a8a15fa51c3b
data/README.md CHANGED
@@ -1,9 +1,14 @@
1
1
  # curly_bracket_parser
2
2
 
3
- Simple parser to replace curly brackets {{like_this}} inside strings like URLs, Texts or even files easily.
3
+ Simple parser to replace curly brackets `{{like_this}}` inside strings like URLs, texts or even files easily.
4
4
 
5
- alpha version ... to be done ...
5
+ Additional support for build-in filters and custom filters make them more powerful. `{{example|my_filter}}`
6
6
 
7
+ Using [LuckyCase](https://github.com/magynhard/lucky_case), all its case formats are supported as filter.
8
+
9
+ ```diff
10
+ - beta version
11
+ ```
7
12
 
8
13
 
9
14
 
@@ -36,23 +41,13 @@ Or install it yourself as:
36
41
 
37
42
  $ gem install curly_bracket_parser
38
43
 
39
- ## Common information
40
-
41
- TODO
42
-
43
-
44
-
45
-
46
-
47
44
 
48
45
  <a name="usage"></a>
49
- ## Usage
50
-
51
- TODO
46
+ ## Usage examples
52
47
 
53
- ### Examples
48
+ You can either parse variables inside strings or even directly in files.
54
49
 
55
- #### Basic
50
+ ### Basic
56
51
 
57
52
  ```ruby
58
53
  url = "https://my-domain.com/items/{{item_id}}"
@@ -60,7 +55,7 @@ TODO
60
55
  # => "https://my-domain.com/items/123"
61
56
  ```
62
57
 
63
- #### Filters
58
+ ### Filters
64
59
 
65
60
  ```ruby
66
61
  url = "https://my-domain.com/catalog/{{item_name|snake_case}}"
@@ -68,9 +63,51 @@ TODO
68
63
  # => "https://my-domain.com/catalog/mega_super_item"
69
64
  ```
70
65
 
71
- #### Globals
66
+ For a list of built-in filters visit [LuckyCase](https://github.com/magynhard/lucky_case).
67
+
68
+ #### Define your custom filter
69
+
70
+ ```ruby
71
+ CurlyBracketParser.register_filter('7times') do |string|
72
+ string.to_s * 7
73
+ end
74
+
75
+ text = "Paul went out and screamed: A{{scream|7times}}h"
76
+ final_text = CurlyBracketParser.parse text, scream: 'a'
77
+ # => "Paul went out and screamed: Aaaaaaaah"
78
+ ```
79
+
80
+ ### Files
81
+
82
+ <ins>test.html</ins>
83
+ ```html
84
+ <h1>{{title|sentence_case}}</h1>
85
+ ```
86
+
87
+ ```ruby
88
+ parsed_file = CurlyBracketParser.parse_file './test.html', title: 'WelcomeAtHome'
89
+ # => "<h1>Welcome at home</h1>"
90
+ ```
72
91
 
73
- TODO
92
+ Use `#parse_file!` instead to write the parsed string directly into the file!
93
+
94
+ ### Default variables
95
+
96
+ You can define default variables, which will be replaced automatically without passing them by parameters, but can be overwritten with parameters.
97
+
98
+ Because of providing blocks, your variables can dynamically depend on other states.
99
+
100
+ ```ruby
101
+ CurlyBracketParser.register_default_var('version') do
102
+ '1.0.2'
103
+ end
104
+
105
+ text = "You are running version {{version}}"
106
+ CurlyBracketParser.parse text
107
+ # => "You are running version 1.0.2"
108
+ CurlyBracketParser.parse text, version: '0.7.0'
109
+ # => "You are running version 0.7.0"
110
+ ```
74
111
 
75
112
 
76
113
 
@@ -23,6 +23,8 @@ module CurlyBracketParser
23
23
 
24
24
  #----------------------------------------------------------------------------------------------------
25
25
 
26
+ # Parse given string and replace the included variables by the given variables
27
+ #
26
28
  # @param [String] string to parse
27
29
  # @param [Hash<Symbol => String>] variables <key: 'value'>
28
30
  # @param [Symbol] unresolved_vars :raise, :keep, :replace => define how to act when unresolved variables within the string are found.
@@ -56,23 +58,47 @@ module CurlyBracketParser
56
58
 
57
59
  #----------------------------------------------------------------------------------------------------
58
60
 
59
- def self.parse_file(path, variables, options = {})
60
- raise "NOT IMPLEMENTED YET!"
61
+ # Parse the content of the file of the given path with #parse and return it.
62
+ # The original file keeps unmodified.
63
+ #
64
+ # @param [String] string to parse
65
+ # @param [Hash<Symbol => String>] variables <key: 'value'>
66
+ # @param [Symbol] unresolved_vars :raise, :keep, :replace => define how to act when unresolved variables within the string are found.
67
+ # @param [String] replace_pattern pattern used when param unresolved_vars is set to :replace. You can include the var name \\1 and filter \\1. Empty string to remove unresolved variables.
68
+ # @return [String, UnresolvedVariablesError] parsed string
69
+ def self.parse_file(path, variables, unresolved_vars: :raise, replace_pattern: "##\\1##")
70
+ file_content = File.read path
71
+ parse(file_content, variables, unresolved_vars: unresolved_vars, replace_pattern: replace_pattern)
61
72
  end
62
73
 
63
- def self.parse_file!(path, variables, options = {})
64
- raise "NOT IMPLEMENTED YET!"
74
+ # Parse the content of the file of the given path with #parse and return it.
75
+ # The original file will be overwritten by the parsed content.
76
+ #
77
+ # @param [String] string to parse
78
+ # @param [Hash<Symbol => String>] variables <key: 'value'>
79
+ # @param [Symbol] unresolved_vars :raise, :keep, :replace => define how to act when unresolved variables within the string are found.
80
+ # @param [String] replace_pattern pattern used when param unresolved_vars is set to :replace. You can include the var name \\1 and filter \\1. Empty string to remove unresolved variables.
81
+ # @return [String, UnresolvedVariablesError] parsed string
82
+ def self.parse_file!(path, variables, unresolved_vars: :raise, replace_pattern: "##\\1##")
83
+ parsed_file = parse_file path, variables, unresolved_vars: unresolved_vars, replace_pattern: replace_pattern
84
+ File.write path, parsed_file
85
+ parsed_file
65
86
  end
66
87
 
67
88
  #----------------------------------------------------------------------------------------------------
68
89
 
69
- def self.register_filter(name, function)
90
+ # Register your custom filter to the filter list
91
+ #
92
+ # @param [String] name of the filter, also used then in your strings, e.g. {{var_name|my_filter_name}}
93
+ # @param [Lambda] function of the filter to run the variable against
94
+ # @return [Boolean] true if filter was added, false if it already exists
95
+ def self.register_filter(name, &block)
70
96
  raise "NOT IMPLEMENTED YET!"
71
97
  end
72
98
 
73
99
  #----------------------------------------------------------------------------------------------------
74
100
 
75
- def self.register_default_variable(name, function)
101
+ def self.register_default_variable(name, &block)
76
102
  raise "NOT IMPLEMENTED YET!"
77
103
  end
78
104
 
@@ -133,12 +159,19 @@ module CurlyBracketParser
133
159
 
134
160
  #----------------------------------------------------------------------------------------------------
135
161
 
162
+ # Check if any variable is included in the given string
163
+ # @param [Object] string
164
+ # @return [Boolean] true if any variable is included in the given string, otherwise false
136
165
  def self.any_variable_included?(string)
137
166
  string.match(VARIABLE_REGEX) != nil
138
167
  end
139
168
 
140
169
  #----------------------------------------------------------------------------------------------------
141
170
 
171
+ # Check if one of the given variable names is included in the given string
172
+ # @param [Array<String>] variable_names
173
+ # @param [String] string
174
+ # @return [Boolean] true if one given variable name is included in given the string, otherwise false
142
175
  def self.includes_one_variable_of(variable_names, string)
143
176
  decoded_variables(string).each do |dvar|
144
177
  return true if variable_names.include?(dvar[:name])
@@ -1,3 +1,3 @@
1
1
  module CurlyBracketParser
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: curly_bracket_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthäus Beyrle
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-17 00:00:00.000000000 Z
11
+ date: 2020-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucky_case