ichiban 1.0.10 → 1.0.12

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 493fedcf1994573c9e8dc03c7bd288893d3c8b39
4
+ data.tar.gz: 33a5e9a79f14ec03267c866780cc67033cd2c9ae
5
+ SHA512:
6
+ metadata.gz: 9cf876c1ba23d929bc2fca3e30d459e562cd68c1114a1bd14f666b4fcea6955e04a15e6931e5a7f514a0a921719c154c00a19e855b8cfe652083b745a9f82855
7
+ data.tar.gz: dd97fdd59a181f94090640ab9e013c498ea42ea1d80fd220df5fdcd1ae44e584d28adfda61a964fff6f9e9f3ba58707424a865468e25e86ec3e2f1ca0193778d
@@ -0,0 +1,24 @@
1
+ RewriteEngine On
2
+
3
+ # Force the trailing slash for all pages unless they end in .html
4
+ RewriteCond %{REQUEST_FILENAME} !-f
5
+ RewriteCond %{REQUEST_FILENAME} !-d
6
+ # Skipping pages with the .html extension is necessary to avoid an infinite chain of .html. See the note at the bottom.
7
+ RewriteCond %{REQUEST_URI} !\.html$
8
+ RewriteRule ^(.*[^/])$ /$1/ [R=301,L]
9
+
10
+ RewriteCond %{REQUEST_FILENAME} !-f
11
+ RewriteCond %{REQUEST_FILENAME} !-d
12
+ # If the HTML file doesn't exist don't attempt to rewrite, or we'll get an infinite loop
13
+ RewriteCond %{REQUEST_FILENAME}.html -f
14
+ # If we've already tried appending HTML and the file still doesn't exist, don't do it again. See the note at the bottom.
15
+ RewriteCond %{REQUEST_URI} !\.html$
16
+ RewriteRule ^(.*)/$ $1.html
17
+
18
+ ErrorDocument 404 /404.html
19
+ ErrorDocument 422 /422.html
20
+ ErrorDocument 500 /500.html
21
+
22
+ # Note on infinite .html appending loops: We have to take pains to ensure that if a certain file, say foo.html, exists,
23
+ # then a path like /foo/bar won't get .html appended an infinite number of times. This can happen because %{REQUEST_FILENAME}
24
+ # would match /foo/bar/ to foo.html. Our redirect to force trailing slashes then sends us through an infinite loop.
@@ -0,0 +1,31 @@
1
+ module Ichiban
2
+ class EJSCompiler
3
+ def compile
4
+ FileUtils.mkdir_p File.dirname(@ejs_file.dest)
5
+ File.open(@ejs_file.dest, 'w') do |f|
6
+ f << compile_to_str
7
+ end
8
+ Ichiban.logger.compilation(@ejs_file.abs, @ejs_file.dest)
9
+ end
10
+
11
+ def compile_to_str
12
+ add_preamble(
13
+ EJS.compile(
14
+ File.read(@ejs_file.abs)
15
+ ),
16
+ File.basename(@ejs_file.dest, '.js')
17
+ )
18
+ end
19
+
20
+ def initialize(ejs_file)
21
+ @ejs_file = ejs_file
22
+ end
23
+
24
+ private
25
+
26
+ def add_preamble(fn, name)
27
+ %Q(if (typeof(window.EJS) == "undefined") { window.EJS = {} } ) +
28
+ %Q(window.EJS[#{JSON.dump(name)}] = #{fn})
29
+ end
30
+ end
31
+ end
data/lib/ichiban/file.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module Ichiban
2
2
  class ProjectFile
3
+ @types = []
4
+
3
5
  attr_reader :abs
4
6
 
5
7
  # Returns an absolute path in the compiled directory
@@ -12,34 +14,12 @@ module Ichiban
12
14
  def self.from_abs(abs)
13
15
  rel = abs.slice(Ichiban.project_root.length..-1) # Relative to project root
14
16
  rel.sub!(/^\//, '') # Remove leading slash
15
- if rel.start_with?('html') and (rel.end_with?('.html') or rel.end_with?('.md') or rel.end_with?('.markdown'))
16
- if File.basename(rel).start_with?('_')
17
- Ichiban::PartialHTMLFile.new(rel)
18
- else
19
- Ichiban::HTMLFile.new(rel)
20
- end
21
- elsif rel.start_with?('layouts') and rel.end_with?('.html')
22
- Ichiban::LayoutFile.new(rel)
23
- elsif rel.start_with?('assets/js')
24
- Ichiban::JSFile.new(rel)
25
- elsif rel.start_with?('assets/css') and rel.end_with?('.css')
26
- Ichiban::CSSFile.new(rel)
27
- elsif rel.start_with?('assets/css') and rel.end_with?('.scss')
28
- Ichiban::SCSSFile.new(rel)
29
- elsif rel.start_with?('assets/img')
30
- Ichiban::ImageFile.new(rel)
31
- elsif rel.start_with?('assets/misc')
32
- Ichiban::MiscAssetFile.new(rel)
33
- elsif rel.start_with?('models')
34
- Ichiban::ModelFile.new(rel)
35
- elsif rel.start_with?('data')
36
- Ichiban::DataFile.new(rel)
37
- elsif rel.start_with?('scripts')
38
- Ichiban::ScriptFile.new(rel)
39
- elsif rel.start_with?('helpers')
40
- Ichiban::HelperFile.new(rel)
41
- elsif rel == 'webserver/htaccess.txt'
42
- Ichiban::HtaccessFile.new(rel)
17
+ handler = @types.detect do |_, proc|
18
+ proc.call rel
19
+ end
20
+ if handler
21
+ klass = handler.first
22
+ klass.new rel
43
23
  else
44
24
  nil
45
25
  end
@@ -54,6 +34,15 @@ module Ichiban
54
34
  @abs = File.join(Ichiban.project_root, rel)
55
35
  end
56
36
 
37
+ # Pass in a subclass of Ichiban::ProjectFile and a block. The block accepts one param:
38
+ # a file path relative to the Ichiban project root. For example: 'assets/css/main.css'.
39
+ # Each time the watcher detects a change to a file, the file's path will be passed to
40
+ # the block. If the block returns true, an instance of klass will be created to compile
41
+ # the changed file.
42
+ def self.register_type(klass, &block)
43
+ @types << [klass, block]
44
+ end
45
+
57
46
  attr_reader :rel
58
47
 
59
48
  # Returns a new path where the old extension is replaced with new_ext
@@ -74,7 +63,13 @@ module Ichiban
74
63
 
75
64
  def web_path
76
65
  d = dest_rel_to_compiled
77
- '/' + File.basename(d, File.extname(d)) + '/'
66
+ fname = File.basename(d, File.extname(d))
67
+ if fname == 'index'
68
+ # If this is an index file, the web path is just the folder name.
69
+ '/' + File.dirname(d) + '/'
70
+ else
71
+ '/' + File.join(File.dirname(d), fname) + '/'
72
+ end
78
73
  end
79
74
  end
80
75
 
@@ -142,6 +137,16 @@ module Ichiban
142
137
  end
143
138
  end
144
139
 
140
+ class EJSFile < ProjectFile
141
+ def dest_rel_to_compiled
142
+ File.join('ejs', File.basename(@rel, '.ejs') + '.js')
143
+ end
144
+
145
+ def update
146
+ Ichiban::EJSCompiler.new(self).compile
147
+ end
148
+ end
149
+
145
150
  class CSSFile < ProjectFile
146
151
  def dest_rel_to_compiled
147
152
  File.join('css', @rel.slice('assets/css/'.length..-1))
@@ -197,14 +202,14 @@ module Ichiban
197
202
 
198
203
  class ModelFile < ProjectFile
199
204
  def update
200
- # No-op. The watcher hands the path to each changed model file to the Loader instance.
205
+ # No-op. The watcher hands the path to every changed file to the Loader instance.
201
206
  # So we don't have to worry about that here.
202
207
  end
203
208
  end
204
209
 
205
210
  class HelperFile < ProjectFile
206
211
  def update
207
- # No-op. The watcher hands the path to each changed model file to the Loader instance.
212
+ # No-op. The watcher hands the path to every changed file to the Loader instance.
208
213
  # So we don't have to worry about that here.
209
214
  end
210
215
  end
@@ -220,4 +225,30 @@ module Ichiban
220
225
  Ichiban.script_runner.script_file_changed(@abs)
221
226
  end
222
227
  end
228
+
229
+ # Re-open this class to register all default file types
230
+ class ProjectFile
231
+ register_type(Ichiban::PartialHTMLFile) do |rel|
232
+ rel.start_with?('html') and
233
+ (rel.end_with?('.html') or rel.end_with?('.md') or rel.end_with?('.markdown')) and
234
+ File.basename(rel).start_with?('_')
235
+ end
236
+ register_type(Ichiban::HTMLFile) do |rel|
237
+ rel.start_with?('html') and
238
+ (rel.end_with?('.html') or rel.end_with?('.md') or rel.end_with?('.markdown')) and
239
+ !File.basename(rel).start_with?('_')
240
+ end
241
+ register_type(Ichiban::LayoutFile) { |rel| rel.start_with?('layouts') and rel.end_with?('.html') }
242
+ register_type(Ichiban::JSFile) { |rel| rel.start_with?('assets/js') }
243
+ register_type(Ichiban::EJSFile) { |rel| rel.start_with?('assets/ejs') and rel.end_with?('.ejs') }
244
+ register_type(Ichiban::CSSFile) { |rel| rel.start_with?('assets/css') and rel.end_with?('.css') }
245
+ register_type(Ichiban::SCSSFile) { |rel| rel.start_with?('assets/css') and rel.end_with?('.scss') }
246
+ register_type(Ichiban::ImageFile) { |rel| rel.start_with?('assets/img') }
247
+ register_type(Ichiban::MiscAssetFile) { |rel| rel.start_with?('assets/misc') }
248
+ register_type(Ichiban::ModelFile) { |rel| rel.start_with?('models') }
249
+ register_type(Ichiban::DataFile) { |rel| rel.start_with?('data') }
250
+ register_type(Ichiban::ScriptFile) { |rel| rel.start_with?('scripts') }
251
+ register_type(Ichiban::HelperFile) { |rel| rel.start_with?('helpers') }
252
+ register_type(Ichiban::HtaccessFile) { |rel| rel == 'webserver/htaccess.txt' }
253
+ end
223
254
  end
@@ -1,6 +1,7 @@
1
1
  module Ichiban
2
2
  class HTMLCompiler
3
3
  def compile
4
+ FileUtils.mkdir_p File.dirname(@html_file.dest)
4
5
  File.open(@html_file.dest, 'w') do |f|
5
6
  f << compile_to_str
6
7
  end
@@ -64,8 +64,10 @@ module Ichiban
64
64
  )
65
65
  )
66
66
  compiler.ivars = {:_current_path => web_path}.merge(ivars)
67
- html = compiler.compile_to_str
68
- File.open(File.join(Ichiban.project_root, 'compiled', dest_path), 'w') do |f|
67
+ html = compiler.compile_to_str
68
+ abs_dest_path = File.join(Ichiban.project_root, 'compiled', dest_path)
69
+ FileUtils.mkdir_p File.dirname(abs_dest_path)
70
+ File.open(abs_dest_path, 'w') do |f|
69
71
  f << html
70
72
  end
71
73
  Ichiban.logger.compilation(
@@ -11,11 +11,34 @@ module Ichiban
11
11
 
12
12
  Ichiban.logger.out 'Starting watcher'
13
13
  begin
14
- if blocking
15
- boot_listen_gem
16
- else
17
- Thread.new { boot_listen_gem }
14
+ @listener = Listen.to(
15
+ File.join(Ichiban.project_root, 'html'),
16
+ File.join(Ichiban.project_root, 'layouts'),
17
+ File.join(Ichiban.project_root, 'assets'),
18
+ File.join(Ichiban.project_root, 'models'),
19
+ File.join(Ichiban.project_root, 'helpers'),
20
+ File.join(Ichiban.project_root, 'scripts'),
21
+ File.join(Ichiban.project_root, 'data'),
22
+ File.join(Ichiban.project_root, 'webserver')
23
+ )
24
+ .ignore(/.listen_test$/)
25
+ .latency(@options[:latency])
26
+ .change do |modified, added, deleted|
27
+ (modified + added).uniq.each do |path|
28
+ if file = Ichiban::ProjectFile.from_abs(path)
29
+ @loader.change(file) # Tell the Loader that this file has changed
30
+ begin
31
+ file.update
32
+ rescue => exc
33
+ Ichiban.logger.exception(exc)
34
+ end
35
+ end
36
+ end
37
+ deleted.each do |path|
38
+ Ichiban::Deleter.new.delete_dest(path)
39
+ end
18
40
  end
41
+ @listener.start(blocking)
19
42
  rescue Interrupt
20
43
  Ichiban.logger.out "Stopping watcher"
21
44
  exit 0
@@ -29,38 +52,5 @@ module Ichiban
29
52
  @listener = nil
30
53
  end
31
54
  end
32
-
33
- private
34
-
35
- def boot_listen_gem
36
- @listener = Listen.to(
37
- File.join(Ichiban.project_root, 'html'),
38
- File.join(Ichiban.project_root, 'layouts'),
39
- File.join(Ichiban.project_root, 'assets'),
40
- File.join(Ichiban.project_root, 'models'),
41
- File.join(Ichiban.project_root, 'helpers'),
42
- File.join(Ichiban.project_root, 'scripts'),
43
- File.join(Ichiban.project_root, 'data'),
44
- File.join(Ichiban.project_root, 'webserver'),
45
- ignore: /.listen_test$/,
46
- latency: @options[:latency],
47
- ) do |modified, added, deleted|
48
- (modified + added).uniq.each do |path|
49
- if file = Ichiban::ProjectFile.from_abs(path)
50
- @loader.change(file) # Tell the Loader that this file has changed
51
- begin
52
- file.update
53
- rescue => exc
54
- Ichiban.logger.exception(exc)
55
- end
56
- end
57
- end
58
- deleted.each do |path|
59
- Ichiban::Deleter.new.delete_dest(path)
60
- end
61
- end
62
- @listener.start
63
- sleep
64
- end
65
55
  end
66
56
  end
data/lib/ichiban.rb CHANGED
@@ -9,10 +9,12 @@ require 'erb' # Just for the helpers
9
9
  require 'active_support/core_ext/array/extract_options'
10
10
  require 'active_support/inflector'
11
11
  require 'sass'
12
- require 'listen'
13
12
  require 'erubis'
14
13
  require 'rake'
15
14
  require 'bundler'
15
+ gem 'listen', '= 0.7.3'
16
+ require 'listen'
17
+ require 'ejs'
16
18
 
17
19
  # Ichiban files. Order matters!
18
20
  require 'ichiban/bundle'
@@ -29,6 +31,7 @@ require 'ichiban/helpers'
29
31
  require 'ichiban/nav_helper'
30
32
  require 'ichiban/html_compiler'
31
33
  require 'ichiban/asset_compiler'
34
+ require 'ichiban/ejs_compiler'
32
35
  require 'ichiban/markdown'
33
36
  require 'ichiban/scripts'
34
37
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ichiban
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
5
- prerelease:
4
+ version: 1.0.12
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jarrett Colby
@@ -11,132 +10,130 @@ bindir: bin
11
10
  cert_chain: []
12
11
  date: 2012-11-29 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ejs
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: erubis
16
29
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
30
  requirements:
19
- - - ! '>='
31
+ - - ">="
20
32
  - !ruby/object:Gem::Version
21
33
  version: '0'
22
34
  type: :runtime
23
35
  prerelease: false
24
36
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
37
  requirements:
27
- - - ! '>='
38
+ - - ">="
28
39
  - !ruby/object:Gem::Version
29
40
  version: '0'
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: sass
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ! '>='
45
+ - - ">="
36
46
  - !ruby/object:Gem::Version
37
47
  version: '0'
38
48
  type: :runtime
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ! '>='
52
+ - - ">="
44
53
  - !ruby/object:Gem::Version
45
54
  version: '0'
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: listen
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - '='
52
60
  - !ruby/object:Gem::Version
53
- version: 2.7.1
61
+ version: 0.7.3
54
62
  type: :runtime
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - '='
60
67
  - !ruby/object:Gem::Version
61
- version: 2.7.1
68
+ version: 0.7.3
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: activesupport
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - ">="
68
74
  - !ruby/object:Gem::Version
69
75
  version: '0'
70
76
  type: :runtime
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - ">="
76
81
  - !ruby/object:Gem::Version
77
82
  version: '0'
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: bundler
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - ">="
84
88
  - !ruby/object:Gem::Version
85
89
  version: '0'
86
90
  type: :runtime
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - ">="
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  - !ruby/object:Gem::Dependency
95
98
  name: mocha
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ! '>='
101
+ - - ">="
100
102
  - !ruby/object:Gem::Version
101
103
  version: '0'
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - ">="
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  - !ruby/object:Gem::Dependency
111
112
  name: turn
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
- - - ! '>='
122
+ - - ">="
124
123
  - !ruby/object:Gem::Version
125
124
  version: '0'
126
125
  - !ruby/object:Gem::Dependency
127
126
  name: lorax
128
127
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
128
  requirements:
131
- - - ! '>='
129
+ - - ">="
132
130
  - !ruby/object:Gem::Version
133
131
  version: '0'
134
132
  type: :development
135
133
  prerelease: false
136
134
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
135
  requirements:
139
- - - ! '>='
136
+ - - ">="
140
137
  - !ruby/object:Gem::Version
141
138
  version: '0'
142
139
  description: Static website compiler with advanced feature, including watcher script.
@@ -146,12 +143,31 @@ executables:
146
143
  extensions: []
147
144
  extra_rdoc_files: []
148
145
  files:
146
+ - bin/ichiban
147
+ - empty_project/assets/css/screen.scss
148
+ - empty_project/assets/js/interaction.js
149
+ - empty_project/assets/misc/readme.txt
150
+ - empty_project/compiled/.htaccess
151
+ - empty_project/compiled/css/screen.css
152
+ - empty_project/compiled/index.html
153
+ - empty_project/compiled/js/interaction.js
154
+ - empty_project/config.rb
155
+ - empty_project/data/readme.txt
156
+ - empty_project/deploy.sh
157
+ - empty_project/helpers/readme.txt
158
+ - empty_project/html/index.html
159
+ - empty_project/layouts/default.html
160
+ - empty_project/models/readme.txt
161
+ - empty_project/scripts/readme.txt
162
+ - empty_project/webserver/htaccess.txt
163
+ - lib/ichiban.rb
149
164
  - lib/ichiban/asset_compiler.rb
150
165
  - lib/ichiban/bundle.rb
151
166
  - lib/ichiban/command.rb
152
167
  - lib/ichiban/config.rb
153
168
  - lib/ichiban/deleter.rb
154
169
  - lib/ichiban/dependencies.rb
170
+ - lib/ichiban/ejs_compiler.rb
155
171
  - lib/ichiban/file.rb
156
172
  - lib/ichiban/helpers.rb
157
173
  - lib/ichiban/html_compiler.rb
@@ -162,74 +178,44 @@ files:
162
178
  - lib/ichiban/project_generator.rb
163
179
  - lib/ichiban/scripts.rb
164
180
  - lib/ichiban/watcher.rb
165
- - lib/ichiban.rb
166
- - empty_project/assets/css/screen.scss
167
- - empty_project/assets/js/interaction.js
168
- - empty_project/assets/misc/readme.txt
169
- - empty_project/compiled/css/screen.css
170
- - empty_project/compiled/index.html
171
- - empty_project/compiled/js/interaction.js
172
- - empty_project/config.rb
173
- - empty_project/data/readme.txt
174
- - empty_project/deploy.sh
175
- - empty_project/helpers/readme.txt
176
- - empty_project/html/index.html
177
- - empty_project/layouts/default.html
178
- - empty_project/models/readme.txt
179
- - empty_project/scripts/readme.txt
180
- - empty_project/webserver/htaccess.txt
181
- - bin/ichiban
182
181
  homepage: https://github.com/jarrett/ichiban
183
182
  licenses: []
184
- post_install_message: ! '
183
+ metadata: {}
184
+ post_install_message: |2-
185
185
 
186
186
  Ichiban was installed successfully.
187
-
188
187
  Type `ichiban` for usage hints.
189
188
 
190
-
191
189
  If you intend to use Markdown in your projects,
192
-
193
190
  be sure to install one of these Markdown gems:
194
-
195
191
  redcarpet
196
-
197
192
  maruku
198
-
199
193
  rdiscount
200
194
 
201
-
202
195
  Ichiban uses Guard (http://github.com/guard/guard).
203
-
204
196
  When you run `ichiban watch`, Guard may prompt
205
-
206
197
  you to install an event listener specific to your
207
-
208
198
  operating system. Follow its advice.
209
199
 
210
-
211
200
  For more information:
212
-
213
- https://github.com/jarrett/ichiban'
201
+ https://github.com/jarrett/ichiban
214
202
  rdoc_options: []
215
203
  require_paths:
216
204
  - lib
217
205
  required_ruby_version: !ruby/object:Gem::Requirement
218
- none: false
219
206
  requirements:
220
- - - ! '>='
207
+ - - ">="
221
208
  - !ruby/object:Gem::Version
222
209
  version: '0'
223
210
  required_rubygems_version: !ruby/object:Gem::Requirement
224
- none: false
225
211
  requirements:
226
- - - ! '>='
212
+ - - ">="
227
213
  - !ruby/object:Gem::Version
228
214
  version: '0'
229
215
  requirements: []
230
216
  rubyforge_project:
231
- rubygems_version: 1.8.25
217
+ rubygems_version: 2.2.2
232
218
  signing_key:
233
- specification_version: 3
219
+ specification_version: 4
234
220
  summary: Ichiban
235
221
  test_files: []