jhc 0.0.4 → 0.0.5

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.
Files changed (7) hide show
  1. data/Gemfile +3 -0
  2. data/README.md +42 -24
  3. data/TODO +3 -0
  4. data/VERSION +1 -1
  5. data/bin/jhc +57 -47
  6. data/lib/index.haml +15 -0
  7. metadata +98 -94
data/Gemfile CHANGED
@@ -11,4 +11,7 @@ group :development do
11
11
  gem "jeweler", "~> 1.6.4"
12
12
  gem "rcov", ">= 0"
13
13
  gem "nokogiri"
14
+ gem "haml"
15
+ gem "json"
16
+ gem "term-ansicolor"
14
17
  end
data/README.md CHANGED
@@ -1,31 +1,49 @@
1
1
  # jhc
2
2
 
3
3
  ## USAGE
4
- $ jhc
5
- Usage: jhc -t HTML_TITLE -j backbone,underscore,jquery -s bootstrap
6
- $ jhc -t "hello world" -j jquery -s bootstrap testapp
7
-
8
- $ ls testapp/*
9
- testapp/index.html
10
-
11
- testapp/javascripts:
12
- jquery.js
13
-
14
- testapp/stylesheets:
15
- bootstrap.css
4
+
5
+ Usage: jhc -t HTML_TITLE -j jquery,underscore -c bootstrap -e url -r
6
+ Description:
7
+ -t: specify HTML title
8
+ -j: specify javascript libraries
9
+ -c: specify css
10
+ -e: specify url to extract body
11
+ -r: reload wedata config and exit
12
+ Available JavaScript Libraries:
13
+ face_detector http://lab.gkbr.me/facedetect/facedetector.min.js
14
+ tiny_segmenter http://chasen.org/~taku/software/TinySegmenter/tiny_segmenter-0.1.js
15
+ backbone http://documentcloud.github.com/backbone/backbone.js
16
+ underscore http://documentcloud.github.com/underscore/underscore.js
17
+ jquery http://code.jquery.com/jquery-1.7.js
18
+ Available StyleSheets:
19
+ bootstrap https://raw.github.com/twitter/bootstrap/master/bootstrap.css
20
+
21
+ Just hit the command:
22
+
23
+ $ jhc -t "Test App" -j jquery,underscore -c bootstrap testapp
24
+ # welcome to jhc v0.0.4
25
+ add: testapp/js/jquery.js # http://code.jquery.com/jquery-1.7.js
26
+ add: testapp/js/underscore.js # http://documentcloud.github.com/underscore/underscore.js
27
+ add: testapp/css/bootstrap.css # https://raw.github.com/twitter/bootstrap/master/bootstrap.css
28
+ add: testapp/index.html
29
+
30
+ And you get:
31
+
32
+ $ tree testapp
33
+ testapp
34
+ ├── css
35
+ │   └── bootstrap.css
36
+ ├── index.html
37
+ └── js
38
+ ├── jquery.js
39
+ └── underscore.js
16
40
 
17
- $ cat testapp/index.html
18
- <!DOCTYPE html>
19
- <html>
20
- <head>
21
- <meta charset="utf-8">
22
- <title>hello world</title>
23
- <script language="javascript" type="text/javascript" src="./javascripts/jquery.js"></script>
24
- <link rel="stylesheet" type="text/css" href="./stylesheets/bootstrap.css" />
25
- </head>
26
- <body>
27
- </body>
28
- </html>
41
+ 2 directories, 4 files
42
+
43
+ ## MORE USAGE
44
+
45
+ * with "-e URL" (e.g. "-e http://www.google.com/"), you can extract URL's html body and add it to your index.html
46
+ * config is loaded from [Wedata](http://wedata.net/databases/JHC/items). you can reload it with "-r" option.
29
47
 
30
48
  ## INSTALL
31
49
  gem install jhc
data/TODO ADDED
@@ -0,0 +1,3 @@
1
+ * jhc init/add/del とかサブコマンド製にする
2
+ * そもそも足りないものを追加とか削除だからディレクトリさえ指定されれば OK かな?
3
+ * ヘルプ充実
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
data/bin/jhc CHANGED
@@ -1,77 +1,59 @@
1
1
  #!/usr/bin/ruby
2
2
  # inspired by http://d.hatena.ne.jp/hitode909/20110614/1308032945
3
3
  require 'yaml'
4
- require 'erb'
5
4
  require 'optparse'
6
5
  require 'open-uri'
7
6
  require 'fileutils'
7
+ require 'kconv'
8
8
  require 'rubygems'
9
9
  require 'nokogiri'
10
+ require 'haml'
11
+ require 'json'
12
+ require 'term/ansicolor'
13
+ include Term::ANSIColor
10
14
 
11
- CONFIG = <<EOC
12
- ---
13
- javascripts:
14
- jquery: http://code.jquery.com/jquery-1.7.js
15
- underscore: http://documentcloud.github.com/underscore/underscore.js
16
- backbone: http://documentcloud.github.com/backbone/backbone.js
17
- stylesheets:
18
- bootstrap: https://raw.github.com/twitter/bootstrap/master/bootstrap.css
19
- EOC
15
+ VERSION = File.read(File.dirname(__FILE__) + '/../VERSION')
16
+ WEDATA_URL = 'http://wedata.net/databases/JHC/items.json'
17
+ CONFIG_PATH = ENV['HOME'] + '/.jhc'
20
18
 
21
19
  def main(args)
22
- cfg = YAML.load(CONFIG)
20
+ puts white("# welcome to jhc v#{VERSION}")
23
21
  opt = parse_args(args)
24
- dir = args[0]
25
- hlp = "Usage: jhc -t HTML_TITLE -j #{cfg['javascripts'].keys.join(',')} -s #{cfg['stylesheets'].keys.join(',')}"
26
22
 
27
- raise hlp unless dir
23
+ if !File.exists?(CONFIG_PATH) || opt['reload']
24
+ puts white("# downloading: config data from wedata.net")
25
+ load_config
26
+ exit 0 if opt['reload']
27
+ end
28
+ cfg = YAML.load(File.read(CONFIG_PATH))
29
+
30
+ dir = args[0]
31
+ raise help(cfg) unless dir
28
32
 
29
33
  FileUtils.mkdir_p(dir)
30
34
 
31
- %w(javascripts stylesheets).each do |key|
35
+ %w(js css).each do |key|
32
36
  next unless opt[key]
33
37
  FileUtils.mkdir_p(File.join(dir, key))
34
38
  opt[key].split(',').each do |lib|
35
- if url = cfg[key][lib]
36
- content = open(url).read
37
- ext = key == 'javascripts' ? 'js' : 'css'
38
- File.open(File.join(dir, key, "#{lib}.#{ext}"), 'w').write(content)
39
+ if item = cfg.find {|c| c['data']['key'] == lib && c['data']['type'] == key }
40
+ content = open(item['data']['url']).read
41
+ File.open(File.join(dir, key, "#{lib}.#{key}"), 'w').write(content)
42
+ puts blue("add: " + File.join(dir, key, "#{lib}.#{key}")) + white(" # #{item['data']['url']}")
39
43
  end
40
44
  end
41
45
  end
42
46
 
43
47
  body = nil
44
48
  if opt['extract']
49
+ puts white("# extracting body of #{opt['extract']}")
45
50
  doc = Nokogiri::HTML.parse(open(opt['extract']).read)
46
- body = doc.search('/html/body').to_s
51
+ body = doc.search('/html/body').to_s.toutf8
47
52
  end
48
53
 
49
- erb = <<-HTML
50
- <!DOCTYPE html>
51
- <html>
52
- <head>
53
- <meta charset="utf-8">
54
- <title><%= opt['title'] %></title>
55
- <% if opt['javascripts'] -%>
56
- <% opt['javascripts'].split(',').each do |key| -%>
57
- <script language="javascript" type="text/javascript" src="./javascripts/<%= key %>.js"></script>
58
- <% end -%>
59
- <% end -%>
60
- <% if opt['stylesheets'] -%>
61
- <% opt['stylesheets'].split(',').each do |key| -%>
62
- <link rel="stylesheet" type="text/css" href="./stylesheets/<%= key %>.css" />
63
- <% end -%>
64
- <% end -%>
65
- </head>
66
- <% if body -%>
67
- <%= body %>
68
- <% else -%>
69
- <body>
70
- </body>
71
- <% end -%>
72
- </html>
73
- HTML
74
- html = ERB.new(erb, nil, '-').result(binding)
54
+ haml = File.read(File.dirname(__FILE__) + '/../lib/index.haml')
55
+ html = Haml::Engine.new(haml, :format => :html5).render(binding)
56
+ puts blue("add: #{File.join(dir, 'index.html')}")
75
57
  File.open(File.join(dir, 'index.html'), 'w').write(html)
76
58
  rescue StandardError => e
77
59
  puts e
@@ -81,13 +63,41 @@ end
81
63
  def parse_args(args)
82
64
  opt = {}
83
65
  OptionParser.new do |o|
84
- %w(title javascripts stylesheets extract).each do |key|
66
+ %w(title js css extract).each do |key|
85
67
  o.on("-#{key.chars.first} #{key.upcase}") {|v| opt[key] = v }
86
68
  end
69
+ o.on("-r") {|v| opt['reload'] = v }
87
70
  o.parse!(args)
88
71
  end
89
72
  opt
90
73
  end
91
74
 
75
+ def load_config
76
+ json = JSON.parse(open(WEDATA_URL).read)
77
+ file = File.open(CONFIG_PATH, 'w')
78
+ file.write(json.to_yaml)
79
+ file.close
80
+ end
81
+
82
+ def help(config)
83
+ buf = ''
84
+ buf += "Usage: jhc -t HTML_TITLE -j jquery,underscore -c bootstrap -e url -r\n"
85
+ buf += "Description:\n"
86
+ buf += "\t-t: specify HTML title\n"
87
+ buf += "\t-j: specify javascript libraries\n"
88
+ buf += "\t-c: specify css\n"
89
+ buf += "\t-e: specify url to extract body\n"
90
+ buf += "\t-r: reload wedata config and exit\n"
91
+ buf += "Available JavaScript Libraries:\n"
92
+ config.select{|c| c['data']['type'] == 'js'}.each do |c|
93
+ buf += "\t#{c['data']['key']}\t#{c['data']['url']}\n"
94
+ end
95
+ buf += "Available StyleSheets:\n"
96
+ config.select{|c| c['data']['type'] == 'css'}.each do |c|
97
+ buf += "\t#{c['data']['key']}\t#{c['data']['url']}\n"
98
+ end
99
+ red(buf)
100
+ end
101
+
92
102
  main(ARGV.dup)
93
103
 
data/lib/index.haml ADDED
@@ -0,0 +1,15 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{:charset=>'utf-8'}
5
+ %title= opt['title']
6
+ - if opt['js']
7
+ - opt['js'].split(',').each do |key|
8
+ %script{:language=>'javascript',:type=>'text/javascript',:src=>"./javascripts/#{key}.js"}
9
+ - if opt['css']
10
+ - opt['css'].split(',').each do |key|
11
+ %link{:rel=>'stylesheet',:type=>'text/css',:href=>"./stylesheets/#{key}.css"}
12
+ - if body
13
+ = body
14
+ - else
15
+ %body
metadata CHANGED
@@ -1,107 +1,115 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jhc
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 4
10
- version: 0.0.4
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - tily
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-11-24 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 3
27
- segments:
28
- - 0
29
- version: "0"
12
+ date: 2011-11-26 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
30
15
  name: shoulda
31
- prerelease: false
16
+ requirement: &70218982526420 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- requirement: *id001
34
- - !ruby/object:Gem::Dependency
35
- version_requirements: &id002 !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ version_requirements: *70218982526420
25
+ - !ruby/object:Gem::Dependency
26
+ name: bundler
27
+ requirement: &70218982524480 !ruby/object:Gem::Requirement
36
28
  none: false
37
- requirements:
29
+ requirements:
38
30
  - - ~>
39
- - !ruby/object:Gem::Version
40
- hash: 23
41
- segments:
42
- - 1
43
- - 0
44
- - 0
31
+ - !ruby/object:Gem::Version
45
32
  version: 1.0.0
46
- name: bundler
47
- prerelease: false
48
33
  type: :development
49
- requirement: *id002
50
- - !ruby/object:Gem::Dependency
51
- version_requirements: &id003 !ruby/object:Gem::Requirement
34
+ prerelease: false
35
+ version_requirements: *70218982524480
36
+ - !ruby/object:Gem::Dependency
37
+ name: jeweler
38
+ requirement: &70218982518100 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
40
+ requirements:
54
41
  - - ~>
55
- - !ruby/object:Gem::Version
56
- hash: 7
57
- segments:
58
- - 1
59
- - 6
60
- - 4
42
+ - !ruby/object:Gem::Version
61
43
  version: 1.6.4
62
- name: jeweler
44
+ type: :development
63
45
  prerelease: false
46
+ version_requirements: *70218982518100
47
+ - !ruby/object:Gem::Dependency
48
+ name: rcov
49
+ requirement: &70218982509960 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
64
55
  type: :development
65
- requirement: *id003
66
- - !ruby/object:Gem::Dependency
67
- version_requirements: &id004 !ruby/object:Gem::Requirement
56
+ prerelease: false
57
+ version_requirements: *70218982509960
58
+ - !ruby/object:Gem::Dependency
59
+ name: nokogiri
60
+ requirement: &70218982504700 !ruby/object:Gem::Requirement
68
61
  none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 3
73
- segments:
74
- - 0
75
- version: "0"
76
- name: rcov
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
77
67
  prerelease: false
68
+ version_requirements: *70218982504700
69
+ - !ruby/object:Gem::Dependency
70
+ name: haml
71
+ requirement: &70218982500860 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
78
77
  type: :development
79
- requirement: *id004
80
- - !ruby/object:Gem::Dependency
81
- version_requirements: &id005 !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ version_requirements: *70218982500860
80
+ - !ruby/object:Gem::Dependency
81
+ name: json
82
+ requirement: &70218982486660 !ruby/object:Gem::Requirement
82
83
  none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
88
- - 0
89
- version: "0"
90
- name: nokogiri
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
91
89
  prerelease: false
90
+ version_requirements: *70218982486660
91
+ - !ruby/object:Gem::Dependency
92
+ name: term-ansicolor
93
+ requirement: &70218982472520 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
92
99
  type: :development
93
- requirement: *id005
100
+ prerelease: false
101
+ version_requirements: *70218982472520
94
102
  description: generate modern html scaffold
95
103
  email: tily05@gmail.com
96
- executables:
104
+ executables:
97
105
  - jhc
98
106
  extensions: []
99
-
100
- extra_rdoc_files:
107
+ extra_rdoc_files:
101
108
  - LICENSE.txt
102
109
  - README.md
103
110
  - README.rdoc
104
- files:
111
+ - TODO
112
+ files:
105
113
  - .document
106
114
  - Gemfile
107
115
  - LICENSE.txt
@@ -110,41 +118,37 @@ files:
110
118
  - Rakefile
111
119
  - VERSION
112
120
  - bin/jhc
121
+ - lib/index.haml
113
122
  - lib/jhc.rb
114
123
  - test/helper.rb
115
124
  - test/test_jhc.rb
125
+ - TODO
116
126
  homepage: http://github.com/tily/jhc
117
- licenses:
127
+ licenses:
118
128
  - MIT
119
129
  post_install_message:
120
130
  rdoc_options: []
121
-
122
- require_paths:
131
+ require_paths:
123
132
  - lib
124
- required_ruby_version: !ruby/object:Gem::Requirement
133
+ required_ruby_version: !ruby/object:Gem::Requirement
125
134
  none: false
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- hash: 3
130
- segments:
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ segments:
131
140
  - 0
132
- version: "0"
133
- required_rubygems_version: !ruby/object:Gem::Requirement
141
+ hash: -2332572723009259839
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
143
  none: false
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- hash: 3
139
- segments:
140
- - 0
141
- version: "0"
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
142
148
  requirements: []
143
-
144
149
  rubyforge_project:
145
- rubygems_version: 1.8.11
150
+ rubygems_version: 1.8.10
146
151
  signing_key:
147
152
  specification_version: 3
148
153
  summary: generate modern html scaffold
149
154
  test_files: []
150
-