ichiban 1.0.10 → 1.0.12

Sign up to get free protection for your applications and to get access to all the features.
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: []