stevenson 1.0.0 → 1.0.1

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: 283a293b67a913eb19f38d5c26e28af097f7a397
4
- data.tar.gz: b030b2e3298150ff97011f35de15d382170d3c4b
3
+ metadata.gz: a01532f19f37e0bbd43a680127d4471c9988edae
4
+ data.tar.gz: 0c6ccedfe334238758c7c9e1146fb93e85212350
5
5
  SHA512:
6
- metadata.gz: 9d7087c8863bb1e47c762409f3756ebabe512c93f1b1dc7276684baefe6c7bfdb438961538c8f3fc65e1d3e3098b8bc55bd633df86590d570a5eebea8f0ee771
7
- data.tar.gz: f01181f0ee29f1cee4eb3c36a5d8da36d8142ad0d29fbd7480277f3092a4c4990c40ed3563dafb794e4f6d0e3fbcb7071b9640896125deff4e88d5ec6ca3f77d
6
+ metadata.gz: 774610b2e82f5e08bb134b231b664084f91e52b48ef4e2ecadd05f5fc71caf02da37610edfc3745cc9b719dd8ff3ff2fb3bfedd9281d741213fd03563f5cf5d8
7
+ data.tar.gz: 4d0bdf722f9ff79cb00d9592cd9610976a0415efdc993e4b47f143260cd76439d8da7c337349f330916579cec6ff79d66e2087b1cb7ef875ddc90e3e8662d8b4
data/README.md CHANGED
@@ -13,17 +13,15 @@ generator.
13
13
 
14
14
  Add this line to your application's Gemfile:
15
15
 
16
- gem 'stevenson', :git => 'git://github.com/RootsRated/stevenson.git'
16
+ gem 'stevenson'
17
17
 
18
18
  And then execute:
19
19
 
20
20
  $ bundle
21
21
 
22
- Or install it yourself with:
22
+ Or install it globally:
23
23
 
24
- $ git clone git://github.com/RootsRated/stevenson.git
25
- $ cd stevenson
26
- $ rake install
24
+ $ gem install stevenson
27
25
 
28
26
  ## Usage
29
27
 
@@ -84,19 +82,22 @@ validated as emails, validated as URLs, or limited to a certain length.
84
82
 
85
83
  Here's an example of the YAML file:
86
84
 
87
- #_stevenson.yml
85
+ # _stevenson.yml
86
+
88
87
  '_config.yml':
89
88
  title:
90
- question: 'Title: '
91
- limit: 40
89
+ type: 'text'
90
+ prompt: 'Title: '
91
+ limit: 40
92
92
  email:
93
- question: 'Email: '
94
- email: true
93
+ type: 'email'
94
+ prompt: 'Email: '
95
95
  description:
96
- question: 'Description: '
96
+ type: 'text'
97
+ prompt: 'Description: '
97
98
  url:
98
- question: 'URL: '
99
- url: true
99
+ type: 'url'
100
+ prompt: 'URL: '
100
101
 
101
102
  This file will produce the following questions when
102
103
  `stevenson new hello_world https://github.com/YourUsername/YourTemplate.git` is
@@ -111,17 +112,100 @@ used:
111
112
  When these questions are answered, the following will be added to
112
113
  `hello_world/_config.yml`:
113
114
 
114
- #_config.yml
115
+ # _config.yml
116
+
115
117
  title: RootsRated.com
116
118
  email: info@rootsrated.com
117
119
  description: This is a microsite created by RootsRated.com
118
120
  url: http://www.rootsrated.com
119
121
 
120
- **The 'question' of each option is required** and will be used to ask users for
121
- input to replace these values.
122
-
123
- Any values already set in the `_config.yml` will be used as defaults for these
124
- questions.
122
+ The `prompt` attribute defines how the user should be prompted for input, the
123
+ `type` attribute specifies which kind of input the prompt should accept, and any
124
+ values already set in the `_config.yml` will be used as defaults for these
125
+ questions. Alternatively, defaults can be overriden with a `default` attribute.
126
+
127
+ ### Input Types
128
+
129
+ There are several input types available now, and hopefully, there will be more
130
+ in the future.
131
+
132
+ #### Text
133
+
134
+ The most basic input is the text input. This simply accepts a text string.
135
+ Optionally, a limit can be added with the `limit` attribute.
136
+
137
+ #### Email
138
+
139
+ This input is a subclass of the text input that only accepts emails as validated
140
+ with the following regex: `/\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i`.
141
+ Additionally, Email has the same options as Text.
142
+
143
+ #### Password
144
+
145
+ This input is also a subclass of text, but unlike text, it will not output the
146
+ input string to the console for added security.
147
+
148
+ #### Url
149
+
150
+ This input, another subclass of text, accepts only text that satisfies this
151
+ regex: `/https?:\/\/[\S]+/`.
152
+
153
+ #### Select
154
+
155
+ This input prompts the user to choose from a list of given options. The options
156
+ can be provided as subkeys to the `options` attribute like so:
157
+
158
+ favorite_color:
159
+ type: 'select'
160
+ prompt: 'Favorite Color: '
161
+ options:
162
+ 'Red': '#FF0000'
163
+ 'Blue': '#00FF00'
164
+ 'Green': '#0000FF'
165
+
166
+ The first value given is the value that will be offer to the user to choose. The
167
+ second value is the value that will be written to `_config.yml`.
168
+
169
+ Optionally, you can also fetch more options from a JSON API source using the
170
+ `url`, `list_key`, `name_key`, and `value_key` attributes. `url` specifies the
171
+ url to fetch json options from. `list_key` specifies the root element of the
172
+ JSON document to iterate over for options. `name_key` specifies the name from
173
+ each iterated item to use as a name. `value_key` specifies the value from each
174
+ iterated item to use as a value. The following example is identical to the
175
+ previous example using the `options` attribute:
176
+
177
+ # http://someapi.com/source.json
178
+
179
+ {
180
+ "response": [
181
+ {
182
+ "name": "Red",
183
+ "value": "#FF0000"
184
+ },
185
+ {
186
+ "name": "Blue",
187
+ "value": "#00FF00"
188
+ },
189
+ {
190
+ "name": "Green",
191
+ "value": "#0000FF"
192
+ }
193
+ ]
194
+ }
195
+
196
+ # _stevenson.yml
197
+
198
+ favorite_color:
199
+ type: 'select'
200
+ prompt: 'Favorite Color: '
201
+ url: 'http://someapi.com/source.json'
202
+ list_key: 'response'
203
+ name_key: 'name'
204
+ value_key: 'value'
205
+
206
+ Additionally, remote sources and the `options` attribute can be used together.
207
+ If two keys collide between the two, the remote source will always override the
208
+ `options` attribute.
125
209
 
126
210
  ## Similar Projects
127
211
 
@@ -25,12 +25,12 @@ rr-base:
25
25
  rr-ironman:
26
26
  git: https://github.com/RootsRated/rootsrated_hyde.git
27
27
  subdirectory: ironman
28
- rr-ironwood:
28
+ rr-graphite:
29
29
  git: https://github.com/RootsRated/rootsrated_hyde.git
30
- subdirectory: ironwood
30
+ subdirectory: graphite
31
31
  rr-new-balance:
32
32
  git: https://github.com/RootsRated/rootsrated_hyde.git
33
33
  subdirectory: new-balance
34
- rr-ski-seattle:
34
+ rr-ski:
35
35
  git: https://github.com/RootsRated/rootsrated_hyde.git
36
- subdirectory: ski-seattle
36
+ subdirectory: ski
@@ -0,0 +1,53 @@
1
+ require 'thor'
2
+
3
+ module Stevenson
4
+ class Application < Thor
5
+ desc 'stevenson new PROJECT_NAME', 'generates a Jekyll at PROJECT_NAME'
6
+
7
+ method_option :branch,
8
+ aliases: '-b',
9
+ desc: 'The git branch you would like to use from your template'
10
+ method_option :jekyll,
11
+ type: :boolean,
12
+ aliases: '-j',
13
+ desc: 'Jekyll compiles the output directory'
14
+ method_option :subdirectory,
15
+ aliases: '-s',
16
+ desc: 'The subdirectory to use from the template, if any'
17
+ method_option :template,
18
+ aliases: '-t',
19
+ default: 'hyde-base',
20
+ desc: 'The template repository to use'
21
+ method_option :zip,
22
+ type: :boolean,
23
+ aliases: "-z",
24
+ desc: 'Zip compresses the output directory'
25
+
26
+ def new(output_directory)
27
+ # Load the template using the template loader
28
+ template = Stevenson::TemplateLoader.load options[:template]
29
+
30
+ # If a branch is provided, switch to that branch
31
+ template.switch_branch options[:branch] if options[:branch]
32
+
33
+ # If a subdirectory is provided, switch to that directory
34
+ template.select_subdirectory options[:subdirectory] if options[:subdirectory]
35
+
36
+ # Configure the template
37
+ configurator = Stevenson::Configurator::YAMLConfigurator.new template.path
38
+ configurator.configure
39
+
40
+ # If the jekyll flag is set, compile the template output
41
+ template.extend(Stevenson::OutputFilters::JekyllFilter) if options[:jekyll]
42
+
43
+ # If the zip flag is set, zip up the template output
44
+ template.extend(Stevenson::OutputFilters::ZipFilter) if options[:zip]
45
+
46
+ # Save the repo to the output directory
47
+ template.output output_directory
48
+
49
+ rescue Templates::InvalidTemplateException => e
50
+ say e.message
51
+ end
52
+ end
53
+ end
@@ -1,4 +1,3 @@
1
- require 'highline/import'
2
1
  require 'yaml'
3
2
 
4
3
  module Stevenson
@@ -40,7 +39,7 @@ module Stevenson
40
39
  private
41
40
 
42
41
  def collect_answers(options, config)
43
- if !options['question'] || options['question'].is_a?(Hash)
42
+ if !options['type'] || options['type'].is_a?(Hash)
44
43
  # If the current option is not a leaf, iterate over its values
45
44
  options.each do |key, value|
46
45
  # If no key is present in the config, assign one
@@ -54,9 +53,8 @@ module Stevenson
54
53
  # Return the new config
55
54
  config
56
55
  else
57
- # If the option is not a hash, ask the user for input set the key in
58
- # the config to it
59
- ask_question options, config
56
+ # Collect the appropriate answer for the given question
57
+ Input.input_for(options).collect!
60
58
  end
61
59
  end
62
60
 
@@ -76,24 +74,6 @@ module Stevenson
76
74
  f.write config.to_yaml
77
75
  end
78
76
  end
79
-
80
- def ask_question(options, default_value)
81
- # Load the question text and highline options hash
82
- question = options['question']
83
- options.delete 'question'
84
-
85
- # Ask the user the question and apply all options
86
- answer = ask(question) do |q|
87
- q.default = default_value if default_value != {}
88
- q.echo = false if options['secret']
89
- q.validate = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i if options['email']
90
- q.validate = /https?:\/\/[\S]+/ if options['url']
91
- q.limit = options['limit'] if options['limit']
92
- end
93
-
94
- # Return the user's answer
95
- answer.to_s
96
- end
97
77
  end
98
78
  end
99
79
  end
@@ -0,0 +1,19 @@
1
+ module Stevenson
2
+ module Input
3
+ class Email < Text
4
+ include Base
5
+
6
+ def collect!
7
+ # Ask the user the question and apply the appropriate options
8
+ answer = ask(@prompt) do |q|
9
+ q.default = default
10
+ q.validate = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
11
+ q.limit = @limit if @limit
12
+ end
13
+
14
+ # Return the user's answer
15
+ answer.to_s
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module Stevenson
2
+ module Input
3
+ class Password < Text
4
+ include Base
5
+
6
+ def collect!
7
+ # Ask the user the question and apply the appropriate options
8
+ answer = ask(@prompt) do |q|
9
+ q.default = default
10
+ q.echo = @is_secret
11
+ q.limit = @limit if @limit
12
+ end
13
+
14
+ # Return the user's answer
15
+ answer.to_s
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,69 @@
1
+ require 'highline/import'
2
+ require 'json'
3
+ require 'net/http'
4
+
5
+ module Stevenson
6
+ module Input
7
+ class Select
8
+ include Base
9
+
10
+ def initialize(options)
11
+ super
12
+
13
+ # Save the basic settings for the prompt
14
+ @prompt = options['prompt'] || ''
15
+
16
+ # Load settings from remote sources, if any
17
+ load_remote_options options['url'], options if options['url']
18
+ end
19
+
20
+ def collect!
21
+ # Prompt the user with a menu using the provided settings
22
+ choose do |menu|
23
+ menu.prompt = @prompt
24
+
25
+ options.each do |key, value|
26
+ menu.choice(key) { value }
27
+ end
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def load_remote_options(url, options)
34
+ # Download and parse the JSON to use for options
35
+ uri = URI(url)
36
+ raw_json = Net::HTTP.get uri
37
+ json = JSON.parse raw_json
38
+
39
+ # Get the appropriate keys for processing the JSON
40
+ list_key = options['list_key'] || ''
41
+ name_key = options['name_key'] || ''
42
+ value_key = options['value_key'] || options['name_key'] || ''
43
+
44
+ # Get the array of items to generate options for
45
+ list_items = get_value_from_selector json, list_key
46
+
47
+ # For each item, fetch the name and value for each option and assign them
48
+ list_items.each do |list_item|
49
+ name = get_value_from_selector list_item, name_key
50
+ value = get_value_from_selector list_item, value_key
51
+ options[name] = value
52
+ end
53
+ end
54
+
55
+ def get_value_from_selector(hash, selector_string)
56
+ # Split the provided selector into an array of selectors
57
+ selectors = selector_string.split '.'
58
+
59
+ # For each one, get the associated subhash from the hash
60
+ selectors.each do |selector|
61
+ hash = hash[selector] if hash
62
+ end
63
+
64
+ # Return the resulting hash
65
+ hash
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,28 @@
1
+ require 'highline/import'
2
+
3
+ module Stevenson
4
+ module Input
5
+ class Text
6
+ include Input::Base
7
+
8
+ def initialize(options)
9
+ super
10
+
11
+ # Save the basic settings for the prompt
12
+ @prompt = options['prompt'] || ''
13
+ @limit = options['limit'] || false
14
+ end
15
+
16
+ def collect!
17
+ # Ask the user the question and apply the appropriate options
18
+ answer = ask(@prompt) do |q|
19
+ q.default = default
20
+ q.limit = @limit if @limit
21
+ end
22
+
23
+ # Return the user's answer
24
+ answer.to_s
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ module Stevenson
2
+ module Input
3
+ class Url < Text
4
+ include Base
5
+
6
+ def collect!
7
+ # Ask the user the question and apply the appropriate options
8
+ answer = ask(@prompt) do |q|
9
+ q.default = default
10
+ q.validate = /https?:\/\/[\S]+/
11
+ q.limit = @limit if @limit
12
+ end
13
+
14
+ # Return the user's answer
15
+ answer.to_s
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,51 @@
1
+ module Stevenson
2
+ module Input
3
+ autoload :Email, 'stevenson/input/email'
4
+ autoload :Password, 'stevenson/input/password'
5
+ autoload :Select, 'stevenson/input/select'
6
+ autoload :Text, 'stevenson/input/text'
7
+ autoload :Url, 'stevenson/input/url'
8
+
9
+ module Base
10
+ attr_reader :options
11
+
12
+ def self.included(input)
13
+ input.extend ClassMethods
14
+
15
+ Stevenson.inputs[input.input_name] = input
16
+ end
17
+
18
+ module ClassMethods
19
+ def input_name
20
+ name.gsub(/^.*::/, '').downcase.to_sym
21
+ end
22
+ end
23
+
24
+ def initialize(options, default=nil)
25
+ @options, @default = options, default
26
+ end
27
+
28
+ def collect!
29
+ raise NotImplementedError
30
+ end
31
+
32
+ def default
33
+ @default ||= options['default'] if options['default']
34
+ @default ||= ''
35
+ end
36
+ end
37
+
38
+ def self.input_for(options)
39
+ input_klass = input_klass_for(options['type'])
40
+ input_klass.new(options)
41
+ end
42
+
43
+ private
44
+
45
+ def self.input_klass_for(type)
46
+ Stevenson.inputs[type] || const_get(type.to_s.capitalize)
47
+ rescue NameError => e
48
+ raise NameError.new "Type '#{type}' is not a valid input type.", e
49
+ end
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  module Stevenson
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
data/lib/stevenson.rb CHANGED
@@ -3,57 +3,12 @@ require 'stevenson/output_filters/jekyll'
3
3
  require 'stevenson/output_filters/zip'
4
4
  require 'stevenson/template_loader'
5
5
  require 'stevenson/version'
6
- require 'thor'
7
6
 
8
7
  module Stevenson
8
+ autoload :Application, 'stevenson/application'
9
+ autoload :Input, 'stevenson/input'
9
10
 
10
- class Application < Thor
11
- desc 'stevenson new PROJECT_NAME', 'generates a Jekyll at PROJECT_NAME'
12
-
13
- method_option :branch,
14
- aliases: '-b',
15
- desc: 'The git branch you would like to use from your template'
16
- method_option :jekyll,
17
- type: :boolean,
18
- aliases: '-j',
19
- desc: 'Jekyll compiles the output directory'
20
- method_option :subdirectory,
21
- aliases: '-s',
22
- desc: 'The subdirectory to use from the template, if any'
23
- method_option :template,
24
- aliases: '-t',
25
- default: 'hyde-base',
26
- desc: 'The template repository to use'
27
- method_option :zip,
28
- type: :boolean,
29
- aliases: "-z",
30
- desc: 'Zip compresses the output directory'
31
-
32
- def new(output_directory)
33
- # Load the template using the template loader
34
- template = Stevenson::TemplateLoader.load options[:template]
35
-
36
- # If a branch is provided, switch to that branch
37
- template.switch_branch options[:branch] if options[:branch]
38
-
39
- # If a subdirectory is provided, switch to that directory
40
- template.select_subdirectory options[:subdirectory] if options[:subdirectory]
41
-
42
- # Configure the template
43
- configurator = Stevenson::Configurator::YAMLConfigurator.new template.path
44
- configurator.configure
45
-
46
- # If the jekyll flag is set, compile the template output
47
- template.extend(Stevenson::OutputFilters::JekyllFilter) if options[:jekyll]
48
-
49
- # If the zip flag is set, zip up the template output
50
- template.extend(Stevenson::OutputFilters::ZipFilter) if options[:zip]
51
-
52
- # Save the repo to the output directory
53
- template.output output_directory
54
-
55
- rescue Templates::InvalidTemplateException => e
56
- say e.message
57
- end
11
+ def self.inputs
12
+ @_inputs ||= {}
58
13
  end
59
14
  end
@@ -0,0 +1,12 @@
1
+ describe Stevenson::Input::Email do
2
+ describe '#initialize' do
3
+ let(:text_input) { Stevenson::Input::Email.new({}) }
4
+
5
+ it 'creates a new email input' do
6
+ expect(text_input).to be_an_instance_of Stevenson::Input::Email
7
+ end
8
+ end
9
+
10
+ describe '#collect!' do
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ describe Stevenson::Input::Password do
2
+ describe '#initialize' do
3
+ let(:text_input) { Stevenson::Input::Password.new({}) }
4
+
5
+ it 'creates a new password input' do
6
+ expect(text_input).to be_an_instance_of Stevenson::Input::Password
7
+ end
8
+ end
9
+
10
+ describe '#collect!' do
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ describe Stevenson::Input::Select do
2
+ describe '#initialize' do
3
+ let(:text_input) { Stevenson::Input::Select.new({}) }
4
+
5
+ it 'creates a new selection input' do
6
+ expect(text_input).to be_an_instance_of Stevenson::Input::Select
7
+ end
8
+ end
9
+
10
+ describe '#collect!' do
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ describe Stevenson::Input::Text do
2
+ describe '#initialize' do
3
+ let(:text_input) { Stevenson::Input::Text.new({}) }
4
+
5
+ it 'creates a new text input' do
6
+ expect(text_input).to be_an_instance_of Stevenson::Input::Text
7
+ end
8
+ end
9
+
10
+ describe '#collect!' do
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ describe Stevenson::Input::Url do
2
+ describe '#initialize' do
3
+ let(:text_input) { Stevenson::Input::Url.new({}) }
4
+
5
+ it 'creates a new url input' do
6
+ expect(text_input).to be_an_instance_of Stevenson::Input::Url
7
+ end
8
+ end
9
+
10
+ describe '#collect!' do
11
+ end
12
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ module Stevenson::Input
4
+ class Test
5
+ include Base
6
+ end
7
+ end
8
+
9
+ describe Stevenson::Input do
10
+ let(:input) { double(:test_input) }
11
+ let(:options) { Hash['type' => :test] }
12
+ before { allow(Stevenson::Input::Test).to receive(:new).and_return(input) }
13
+
14
+ describe ".input_for()" do
15
+ context "when the input has been registered previously" do
16
+ it "should return the input class from Stevenson.inputs" do
17
+ expect(Stevenson::Input.input_for(options)).to eq(input)
18
+ end
19
+ end
20
+
21
+ context "when the input has not been registered previously" do
22
+ it "should return the fetched class from Stevenson" do
23
+ allow(Stevenson).to receive(:inputs).and_return({})
24
+ expect(Stevenson::Input.input_for(options)).to eq(input)
25
+ end
26
+ end
27
+
28
+ context "when the input doesn't exist" do
29
+ it "should raise a NameError with a descriptive error message" do
30
+ expect { Stevenson::Input.input_for('type' => :bad_input) }.to raise_error do |error|
31
+ expect(error).to be_a(NameError)
32
+ expect(error.message).to eq("Type 'bad_input' is not a valid input type.")
33
+ expect(error.cause).to be_a(NameError)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stevenson
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Karr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-30 00:00:00.000000000 Z
11
+ date: 2015-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -140,7 +140,14 @@ files:
140
140
  - assets/template_aliases.yml
141
141
  - bin/stevenson
142
142
  - lib/stevenson.rb
143
+ - lib/stevenson/application.rb
143
144
  - lib/stevenson/configurators/yaml_configurator.rb
145
+ - lib/stevenson/input.rb
146
+ - lib/stevenson/input/email.rb
147
+ - lib/stevenson/input/password.rb
148
+ - lib/stevenson/input/select.rb
149
+ - lib/stevenson/input/text.rb
150
+ - lib/stevenson/input/url.rb
144
151
  - lib/stevenson/output_filters/jekyll.rb
145
152
  - lib/stevenson/output_filters/zip.rb
146
153
  - lib/stevenson/template_loader.rb
@@ -150,6 +157,12 @@ files:
150
157
  - lib/stevenson/version.rb
151
158
  - spec/configurators/yaml_configurator_spec.rb
152
159
  - spec/helpers.rb
160
+ - spec/input/email_spec.rb
161
+ - spec/input/password_spec.rb
162
+ - spec/input/select_spec.rb
163
+ - spec/input/text_spec.rb
164
+ - spec/input/url_spec.rb
165
+ - spec/input_spec.rb
153
166
  - spec/output_filters/jekyll_spec.rb
154
167
  - spec/output_filters/zip_spec.rb
155
168
  - spec/spec_helper.rb
@@ -177,13 +190,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
190
  version: '0'
178
191
  requirements: []
179
192
  rubyforge_project:
180
- rubygems_version: 2.2.2
193
+ rubygems_version: 2.4.6
181
194
  signing_key:
182
195
  specification_version: 4
183
196
  summary: Stevenson is a generator for Jekyll microsites created by RootsRated.com
184
197
  test_files:
185
198
  - spec/configurators/yaml_configurator_spec.rb
186
199
  - spec/helpers.rb
200
+ - spec/input/email_spec.rb
201
+ - spec/input/password_spec.rb
202
+ - spec/input/select_spec.rb
203
+ - spec/input/text_spec.rb
204
+ - spec/input/url_spec.rb
205
+ - spec/input_spec.rb
187
206
  - spec/output_filters/jekyll_spec.rb
188
207
  - spec/output_filters/zip_spec.rb
189
208
  - spec/spec_helper.rb