spintax_parser 0.0.2 → 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.
- data/Gemfile +0 -5
- data/README.md +8 -1
- data/lib/spintax_parser/version.rb +1 -1
- data/lib/spintax_parser.rb +13 -1
- data/spec/lib/spintax_parser_spec.rb +8 -0
- data/spintax_parser.gemspec +2 -3
- metadata +9 -25
- data/Guardfile +0 -24
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# SpintaxParser [](http://travis-ci.org/flintinatux/spintax_parser) [](https://gemnasium.com/flintinatux/spintax_parser) [](https://codeclimate.com/github/flintinatux/spintax_parser)
|
2
2
|
|
3
|
-
A mixin to parse "spintax", a text format used for automated article generation. Can handle nested spintax.
|
3
|
+
A mixin to parse "spintax", a text format used for automated article generation. Can handle nested spintax, and can count the total number of unique variations.
|
4
4
|
|
5
5
|
Read more about the motivation behind it at [the announcement of its initial release](http://madhackerdesigns.com/spintax_parser-gem-v0-0-1-released/ "spintax_parser gem v0.0.1 released").
|
6
6
|
|
@@ -58,6 +58,13 @@ And don't worry: calling `unspin` on a string with no spintax will safely return
|
|
58
58
|
|
59
59
|
Also, note that the `unspin` method doesn't really care if the class you mix it into is a descendant of String or not, as long as its `to_s` method returns a string written in spintax.
|
60
60
|
|
61
|
+
Now you can also count the total number of unique variations of a spintax string. If you've mixed the SpintaxParser into your String class like above, just call the `count_spintax_variations` method on any string as shown below:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
spintext = "{Hello|Hi} {{world|worlds}|planet}{!|.|?}"
|
65
|
+
puts spintext.count_spintax_variations # => 18
|
66
|
+
```
|
67
|
+
|
61
68
|
## Contributing
|
62
69
|
|
63
70
|
1. Fork it
|
data/lib/spintax_parser.rb
CHANGED
@@ -6,11 +6,23 @@ module SpintaxParser
|
|
6
6
|
SPINTAX_PATTERN = %r/\{([^{}]*)\}/
|
7
7
|
|
8
8
|
def unspin
|
9
|
-
spun =
|
9
|
+
spun = dup.to_s
|
10
10
|
while spun =~ SPINTAX_PATTERN
|
11
11
|
spun.gsub!(SPINTAX_PATTERN) { $1.split('|').sample }
|
12
12
|
end
|
13
13
|
spun
|
14
14
|
end
|
15
15
|
|
16
|
+
def count_spintax_variations
|
17
|
+
spun = dup.to_s
|
18
|
+
spun.gsub! %r/[^{|}]+/, '1'
|
19
|
+
spun.gsub! %r/\{/, '('
|
20
|
+
spun.gsub! %r/\|/, '+'
|
21
|
+
spun.gsub! %r/\}/, ')'
|
22
|
+
spun.gsub! %r/\)\(/, ')*('
|
23
|
+
spun.gsub! %r/\)1/, ')*1'
|
24
|
+
spun.gsub! %r/1\(/, '1*('
|
25
|
+
eval spun
|
26
|
+
end
|
27
|
+
|
16
28
|
end # SpintaxParser
|
@@ -36,4 +36,12 @@ describe SpintaxParser do
|
|
36
36
|
it { should_not =~ spintax_pattern }
|
37
37
|
end
|
38
38
|
end
|
39
|
+
|
40
|
+
it "should count spun variations correctly" do
|
41
|
+
'one {two|three} four'.count_spintax_variations.should eq 2
|
42
|
+
'{one|two {three|four}} five'.count_spintax_variations.should eq 3
|
43
|
+
'{one|two} three {four|five}'.count_spintax_variations.should eq 4
|
44
|
+
'one {{two|three} four|five {six|seven}} eight {nine|ten}'.count_spintax_variations.should eq 8
|
45
|
+
'{Hello|Hi} {{world|worlds}|planet}{!|.|?}'.count_spintax_variations.should eq 18
|
46
|
+
end
|
39
47
|
end
|
data/spintax_parser.gemspec
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/spintax_parser/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Scott McCormack"]
|
6
6
|
gem.email = ["mail@madhackerdesigns.com"]
|
7
|
-
gem.description = %q{A mixin to parse "spintax", a text format used for automated article generation. Can handle nested spintax.}
|
7
|
+
gem.description = %q{A mixin to parse "spintax", a text format used for automated article generation. Can handle nested spintax, and can count the total number of unique variations.}
|
8
8
|
gem.summary = gem.description
|
9
9
|
gem.homepage = "https://github.com/flintinatux/spintax_parser"
|
10
10
|
|
@@ -16,6 +16,5 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.version = SpintaxParser::VERSION
|
17
17
|
|
18
18
|
gem.add_dependency 'backports'
|
19
|
-
gem.add_development_dependency 'rspec', '~> 2.
|
20
|
-
gem.add_development_dependency 'guard-rspec', '~> 2.0.0'
|
19
|
+
gem.add_development_dependency 'rspec', '~> 2.12.0'
|
21
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spintax_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: backports
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 2.
|
37
|
+
version: 2.12.0
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,25 +42,10 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 2.
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: guard-rspec
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 2.0.0
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 2.0.0
|
45
|
+
version: 2.12.0
|
62
46
|
description: A mixin to parse "spintax", a text format used for automated article
|
63
|
-
generation. Can handle nested spintax
|
47
|
+
generation. Can handle nested spintax, and can count the total number of unique
|
48
|
+
variations.
|
64
49
|
email:
|
65
50
|
- mail@madhackerdesigns.com
|
66
51
|
executables: []
|
@@ -70,7 +55,6 @@ files:
|
|
70
55
|
- .gitignore
|
71
56
|
- .travis.yml
|
72
57
|
- Gemfile
|
73
|
-
- Guardfile
|
74
58
|
- LICENSE
|
75
59
|
- README.md
|
76
60
|
- Rakefile
|
@@ -92,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
76
|
version: '0'
|
93
77
|
segments:
|
94
78
|
- 0
|
95
|
-
hash:
|
79
|
+
hash: 4151852987598141644
|
96
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
81
|
none: false
|
98
82
|
requirements:
|
@@ -101,13 +85,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
85
|
version: '0'
|
102
86
|
segments:
|
103
87
|
- 0
|
104
|
-
hash:
|
88
|
+
hash: 4151852987598141644
|
105
89
|
requirements: []
|
106
90
|
rubyforge_project:
|
107
91
|
rubygems_version: 1.8.24
|
108
92
|
signing_key:
|
109
93
|
specification_version: 3
|
110
94
|
summary: A mixin to parse "spintax", a text format used for automated article generation.
|
111
|
-
Can handle nested spintax.
|
95
|
+
Can handle nested spintax, and can count the total number of unique variations.
|
112
96
|
test_files:
|
113
97
|
- spec/lib/spintax_parser_spec.rb
|
data/Guardfile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# Guardfile
|
2
|
-
# More info at https://github.com/guard/guard#readme
|
3
|
-
|
4
|
-
guard 'rspec' do
|
5
|
-
watch(%r{^spec/.+_spec\.rb$})
|
6
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
-
watch('spec/spec_helper.rb') { "spec" }
|
8
|
-
|
9
|
-
# Rails example
|
10
|
-
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
-
watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
-
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
13
|
-
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
14
|
-
watch('config/routes.rb') { "spec/routing" }
|
15
|
-
watch('app/controllers/application_controller.rb') { "spec/controllers" }
|
16
|
-
|
17
|
-
# Capybara request specs
|
18
|
-
watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
|
19
|
-
|
20
|
-
# Turnip features and steps
|
21
|
-
watch(%r{^spec/acceptance/(.+)\.feature$})
|
22
|
-
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
23
|
-
end
|
24
|
-
|