issen 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ service_name: travis-ci
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
@@ -0,0 +1,6 @@
1
+ inherit_from: rubocop-todo.yml
2
+
3
+ LineLength:
4
+ Enabled: false
5
+ Semicolon:
6
+ Enabled: false
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem update --system 2.1.11
4
+ - gem --version
5
+ rvm:
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - 2.1.0
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+ gem "rspec", "~> 2.14.1"
5
+ gem "thor", "~> 0.18.1"
6
+ gem "simplecov", "~> 0.8.2"
7
+ gem "activesupport", "~> 4.0.1"
8
+ gem "activemodel", "~> 4.0.2"
9
+ group :test do
10
+ gem 'coveralls', require: false
11
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 tbpgr
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,128 @@
1
+ # Issen
2
+
3
+ [![Build Status](https://travis-ci.org/tbpgr/issen.png?branch=master)](https://travis-ci.org/tbpgr/issen)
4
+ [![Coverage Status](https://coveralls.io/repos/tbpgr/issen/badge.png)](https://coveralls.io/r/tbpgr/issen)
5
+ [![Code Climate](https://codeclimate.com/github/tbpgr/issen.png)](https://codeclimate.com/github/tbpgr/issen)
6
+
7
+ Issen is files and directories generator by Emmet-like syntax.
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ gem 'issen'
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install issen
22
+
23
+ ## Syntax List
24
+ | syntax | mean |
25
+ |:----------- |:------------ |
26
+ |~ |nest file or directory inside |
27
+ |\+ |to place file or directory on the same level |
28
+ |- |to place file or directory on the same level - 1|
29
+
30
+ ## Usage
31
+ ### create Issenfile
32
+ ~~~bash
33
+ issen init
34
+ ~~~
35
+
36
+ Issenfile
37
+ ~~~ruby
38
+ # encoding: utf-8
39
+
40
+ # output directory
41
+ # output_dir is required
42
+ # output_dir allow only String
43
+ # output_dir's default value => "output directory name"
44
+ output_dir "output directory name"
45
+ ~~~
46
+
47
+ ### edit Issenfile
48
+ Issenfile
49
+ ~~~ruby
50
+ # encoding: utf-8
51
+ output_dir "output"
52
+ ~~~
53
+
54
+ ### output examples
55
+ * 1directory case
56
+ to create directory, 'd_xxxx'. xxx equals directory_name
57
+
58
+ ~~~bash
59
+ issen e 'd_hoge'
60
+ ~~~
61
+
62
+ ~~~output
63
+ └─output
64
+ └─hoge
65
+ ~~~
66
+
67
+ * file case
68
+
69
+ ~~~bash
70
+ issen e 'hoge.txt'
71
+ ~~~
72
+
73
+ ~~~output
74
+ └─output
75
+ └─hoge.txt
76
+ ~~~
77
+
78
+ * > case
79
+
80
+ ~~~bash
81
+ issen e 'd_hoge1~hoge2.txt'
82
+ ~~~
83
+
84
+ ~~~output
85
+ └─output
86
+ └─hoge1
87
+ hoge2.txt
88
+ ~~~
89
+
90
+ * + case
91
+
92
+ ~~~bash
93
+ issen e 'd_hoge1+hoge2.txt'
94
+ ~~~
95
+
96
+ ~~~output
97
+ └─output
98
+ │ hoge2.txt
99
+
100
+ └─hoge1
101
+ ~~~
102
+
103
+
104
+ * ^ case
105
+
106
+ ~~~bash
107
+ issen e 'd_hoge1~d_hoge2~hoge3.txt-hoge2_2.txt'
108
+ ~~~
109
+
110
+ ~~~output
111
+ └─output
112
+ └─hoge1
113
+ │ hoge2_2.txt
114
+
115
+ └─hoge2
116
+ hoge3.txt
117
+ ~~~
118
+
119
+ ## History
120
+ * version 0.0.1 : first release.
121
+
122
+ ## Contributing
123
+
124
+ 1. Fork it
125
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
126
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
127
+ 4. Push to the branch (`git push origin my-new-feature`)
128
+ 5. Create new Pull Request
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core'
3
+ require 'rspec/core/rake_task'
4
+ task :default => [:spec]
5
+
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = 'spec/**/*_spec.rb'
8
+ end
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'issen_core'
5
+ require 'issen/version'
6
+ require 'thor'
7
+
8
+ module Issen
9
+ # = Issen CLI
10
+ class CLI < Thor
11
+ class_option :help, type: :boolean, aliases: '-h', desc: 'help message.'
12
+ class_option :version, type: :boolean, desc: 'version'
13
+
14
+ desc 'execute', 'generate files and directories generator by Emmet-like syntax'
15
+ def execute(*args)
16
+ input = args[0]
17
+ if input.nil? || input.empty?
18
+ puts 'nil or empty input is invalid'
19
+ return
20
+ end
21
+ Issen::Core.new.execute input
22
+ end
23
+
24
+ desc 'init', 'generate Issenfile'
25
+ def init
26
+ Issen::Core.new.init
27
+ end
28
+
29
+ desc 'version', 'version'
30
+ def version
31
+ p Issen::VERSION
32
+ end
33
+ end
34
+ end
35
+
36
+ Issen::CLI.start(ARGV)
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'issen/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "issen"
8
+ spec.version = Issen::VERSION
9
+ spec.authors = ["tbpgr"]
10
+ spec.email = ["tbpgr@tbpgr.jp"]
11
+ spec.description = %q{Issen is files and directories generator by Emmet-like syntax.}
12
+ spec.summary = %q{Issen is files and directories generator by Emmet-like syntax.}
13
+ spec.homepage = "https://github.com/tbpgr/issen"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "activesupport", "~> 4.0.1"
22
+ spec.add_runtime_dependency "activemodel", "~> 4.0.2"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "rake"
26
+ spec.add_development_dependency "rspec", "~> 2.14.1"
27
+ spec.add_development_dependency "simplecov", "~> 0.8.2"
28
+ spec.add_development_dependency 'coveralls'
29
+ end
@@ -0,0 +1,3 @@
1
+ module Issen
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,105 @@
1
+ # encoding: utf-8
2
+ require 'issen_dsl'
3
+ require 'active_support/core_ext/object/inclusion'
4
+ require 'active_support/core_ext/string/starts_ends_with'
5
+
6
+ module Issen
7
+ # Issen Core
8
+ class Core
9
+ ISSEN_FILE = 'Issenfile'
10
+ ISSEN_TEMPLATE = <<-EOS
11
+ # encoding: utf-8
12
+
13
+ # output directory
14
+ # output_dir is required
15
+ # output_dir allow only String
16
+ # output_dir's default value => "output directory name"
17
+ output_dir "output directory name"
18
+ EOS
19
+
20
+ # generate Issenfile to current directory.
21
+ def init
22
+ File.open(ISSEN_FILE, 'w') { |f|f.puts ISSEN_TEMPLATE }
23
+ end
24
+
25
+ # create dirs and files
26
+ def execute(input)
27
+ dsl = read_dsl
28
+ output_dir = dsl.issen.output_dir
29
+ create_root_dir(output_dir)
30
+ headings = to_heading(input, output_dir)
31
+ end
32
+
33
+ private
34
+
35
+ def read_dsl
36
+ src = File.open(ISSEN_FILE) { |f|f.read }
37
+ dsl = Issen::Dsl.new
38
+ dsl.instance_eval src
39
+ dsl
40
+ end
41
+
42
+ def create_root_dir(output_dir)
43
+ Dir.mkdir(output_dir) unless Dir.exists? output_dir
44
+ end
45
+
46
+ def to_heading(input, output_dir)
47
+ input_chars = input.chars
48
+ level, word_ret, parent_dir, grand_parent_dir = 0, [], output_dir, output_dir
49
+ input_chars.each_with_index do |char, index|
50
+ key_word = char.in? %w{~ + -}
51
+ if key_word
52
+ word = word_ret.join
53
+ word_dup = word.dup
54
+ dir_file = create_file_dir(word, parent_dir)
55
+ parent_dir, grand_parent_dir = get_grand_and_parent(parent_dir, grand_parent_dir, word_dup, word, level, char)
56
+ word_ret = []
57
+ else
58
+ word_ret << char
59
+ end
60
+ end
61
+ word = word_ret.join
62
+ create_file_dir(word, parent_dir)
63
+ end
64
+
65
+ def get_grand_and_parent(parent_dir, grand_parent_dir, word_dup, word, level, char)
66
+ level += char == '+' ? 0 : char == '~' ? 1 : -1
67
+ case level
68
+ when 0
69
+ # not change
70
+ when 1
71
+ if is_dir?(word_dup)
72
+ grand_parent_dir = parent_dir
73
+ parent_dir = "#{parent_dir}/#{word}"
74
+ end
75
+ when -1
76
+ parent_dir = grand_parent_dir
77
+ end
78
+ [parent_dir, grand_parent_dir]
79
+ end
80
+
81
+ def create_file_dir(word, parent_dir)
82
+ is_dir = is_dir?(word)
83
+ dir_file = dir_file_name(word, parent_dir)
84
+ if is_dir
85
+ Dir.mkdir(dir_file) unless Dir.exists? dir_file
86
+ else
87
+ File.open(dir_file, 'w:UTF-8') { |f|f.print '' } unless File.exists? dir_file
88
+ end
89
+ dir_file
90
+ end
91
+
92
+ def dir_file_name(word, parent_dir)
93
+ word.gsub!(/^d_/, '')
94
+ "#{parent_dir}/#{word}"
95
+ end
96
+
97
+ def is_dir?(word)
98
+ word.starts_with?('d_')
99
+ end
100
+
101
+ def to_head(heading, head_char)
102
+ heading.reduce([]) { |ret, value|ret << "#{head_char * value[:level]}#{value[:word]}" }.join("\n")
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ require 'issen_dsl_model'
3
+
4
+ module Issen
5
+ class Dsl
6
+ attr_accessor :issen
7
+
8
+ # String Define
9
+ [:output_dir].each do |f|
10
+ define_method f do |value|
11
+ eval "@issen.#{f.to_s} = '#{value}'", binding
12
+ end
13
+ end
14
+
15
+ # Array/Hash/Boolean Define
16
+ [].each do |f|
17
+ define_method f do |value|
18
+ eval "@issen.#{f.to_s} = #{value}", binding
19
+ end
20
+ end
21
+
22
+ def initialize
23
+ @issen = Issen::DslModel.new
24
+ @issen.output_dir = 'args_value2'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ require 'active_model'
3
+
4
+ module Issen
5
+ class DslModel
6
+ include ActiveModel::Model
7
+
8
+ # output directory
9
+ attr_accessor :output_dir
10
+ validates :output_dir, presence: true
11
+
12
+ end
13
+ end
@@ -0,0 +1,36 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`.
2
+ # The point is for the user to remove these configuration records
3
+ # one by one as the offences are removed from the code base.
4
+
5
+ CyclomaticComplexity:
6
+ Enabled: false
7
+
8
+ Documentation:
9
+ Enabled: false
10
+
11
+ EmptyLinesAroundBody:
12
+ Enabled: false
13
+
14
+ Encoding:
15
+ Enabled: false
16
+
17
+ Eval:
18
+ Enabled: false
19
+
20
+ LineLength:
21
+ Enabled: false
22
+
23
+ MethodLength:
24
+ Enabled: false
25
+
26
+ NestedTernaryOperator:
27
+ Enabled: false
28
+
29
+ ParameterLists:
30
+ Enabled: false
31
+
32
+ ReduceArguments:
33
+ Enabled: false
34
+
35
+ UselessAssignment:
36
+ Enabled: false
@@ -0,0 +1,95 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'issen_core'
4
+
5
+ describe Issen::Core do
6
+ context :execute do
7
+ TMP_ISSEN = 'tmp_issen'
8
+ cases = [
9
+ {
10
+ case_no: 1,
11
+ case_title: 'create dir case',
12
+ issenfile: 'output_dir "./tmp"',
13
+ output_dir: './tmp',
14
+ input: 'd_hoge',
15
+ expected_type: [:directory?],
16
+ expected: ['./tmp/hoge'],
17
+ },
18
+ {
19
+ case_no: 2,
20
+ case_title: 'create file case',
21
+ issenfile: 'output_dir "./tmp"',
22
+ output_dir: './tmp',
23
+ input: 'hoge.txt',
24
+ expected_type: [:file?],
25
+ expected: ['./tmp/hoge.txt'],
26
+ },
27
+ {
28
+ case_no: 3,
29
+ case_title: '+ case',
30
+ issenfile: 'output_dir "./tmp"',
31
+ output_dir: './tmp',
32
+ input: 'd_hoge~hoge.txt',
33
+ expected_type: [:directory?, :file?],
34
+ expected: ['./tmp/hoge', './tmp/hoge/hoge.txt'],
35
+ },
36
+ {
37
+ case_no: 4,
38
+ case_title: '+ case',
39
+ issenfile: 'output_dir "./tmp"',
40
+ output_dir: './tmp',
41
+ input: 'd_hoge+hoge.txt',
42
+ expected_type: [:directory?, :file?],
43
+ expected: ['./tmp/hoge', './tmp/hoge.txt'],
44
+ },
45
+ {
46
+ case_no: 5,
47
+ case_title: '^ case',
48
+ issenfile: 'output_dir "./tmp"',
49
+ output_dir: './tmp',
50
+ input: 'd_hoge+d_hige~hige.txt-hoge.txt',
51
+ expected_type: [:directory?, :directory?, :file?, :file?],
52
+ expected: ['./tmp/hoge', './tmp/hige', './tmp/hige/hige.txt', './tmp/hoge.txt'],
53
+ },
54
+ ]
55
+
56
+ cases.each do |c|
57
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
58
+ begin
59
+ case_before c
60
+
61
+ # -- given --
62
+ issen_core = Issen::Core.new
63
+
64
+ # -- when --
65
+ issen_core.execute c[:input]
66
+ actual = Dir.glob("#{c[:output_dir]}/**/*")
67
+
68
+ # -- then --
69
+ expect(actual.size).to eq(c[:expected].size)
70
+ actual.each do |file|
71
+ is_exists = c[:expected].include? file
72
+ expect(is_exists).to be_true
73
+ type = c[:expected_type][c[:expected].index(file)]
74
+ is_correct_type = File.send(type, file)
75
+ expect(is_correct_type).to be_true
76
+ end
77
+ ensure
78
+ case_after c
79
+ end
80
+ end
81
+
82
+ def case_before(c)
83
+ Dir.mkdir(TMP_ISSEN) unless File.exists?(TMP_ISSEN)
84
+ Dir.chdir(TMP_ISSEN)
85
+ File.open(Issen::Core::ISSEN_FILE, 'w:UTF-8') { |f|f.print c[:issenfile] }
86
+ end
87
+
88
+ def case_after(c)
89
+ Dir.chdir('../')
90
+ return unless File.exists? TMP_ISSEN
91
+ FileUtils.rm_rf("./#{TMP_ISSEN}")
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,15 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start do
9
+ add_filter '/spec/'
10
+ end
11
+ RSpec.configure do |config|
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+ config.run_all_when_everything_filtered = true
14
+ config.filter_run :focus
15
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: issen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - tbpgr
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: &26588592 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 4.0.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *26588592
25
+ - !ruby/object:Gem::Dependency
26
+ name: activemodel
27
+ requirement: &26588292 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 4.0.2
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *26588292
36
+ - !ruby/object:Gem::Dependency
37
+ name: bundler
38
+ requirement: &26588016 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '1.3'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *26588016
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: &26587788 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *26587788
58
+ - !ruby/object:Gem::Dependency
59
+ name: rspec
60
+ requirement: &26587464 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 2.14.1
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *26587464
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: &26587164 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: 0.8.2
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *26587164
80
+ - !ruby/object:Gem::Dependency
81
+ name: coveralls
82
+ requirement: &26586936 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *26586936
91
+ description: Issen is files and directories generator by Emmet-like syntax.
92
+ email:
93
+ - tbpgr@tbpgr.jp
94
+ executables:
95
+ - issen
96
+ extensions: []
97
+ extra_rdoc_files: []
98
+ files:
99
+ - .coveralls.yml
100
+ - .gitignore
101
+ - .rspec
102
+ - .rubocop.yml
103
+ - .travis.yml
104
+ - Gemfile
105
+ - LICENSE.txt
106
+ - README.md
107
+ - Rakefile
108
+ - bin/issen
109
+ - issen.gemspec
110
+ - lib/issen/version.rb
111
+ - lib/issen_core.rb
112
+ - lib/issen_dsl.rb
113
+ - lib/issen_dsl_model.rb
114
+ - rubocop-todo.yml
115
+ - spec/issen_core_spec.rb
116
+ - spec/spec_helper.rb
117
+ homepage: https://github.com/tbpgr/issen
118
+ licenses:
119
+ - MIT
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.11
139
+ signing_key:
140
+ specification_version: 3
141
+ summary: Issen is files and directories generator by Emmet-like syntax.
142
+ test_files:
143
+ - spec/issen_core_spec.rb
144
+ - spec/spec_helper.rb
145
+ has_rdoc: