hse 0.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.
@@ -0,0 +1,20 @@
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
18
+ .yardoc
19
+ .rspec
20
+ .yardopts
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hse.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 michael
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,29 @@
1
+ # Hse
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'hse'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install hse
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,7 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'yard'
4
+ YARD::Rake::YardocTask.new
5
+
6
+ require 'rspec/core/rake_task'
7
+ RSpec::Core::RakeTask.new
data/bin/hse ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'hse'
4
+
5
+ Hse::CLI.start
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'hse/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "hse"
8
+ gem.version = Hse::VERSION
9
+ gem.authors = ["Michael Bykov"]
10
+ gem.email = ["m.bykov@gmail.com"]
11
+ gem.description = %q{a gem for HSE Studium Generale group}
12
+ gem.summary = %q{a gem for HSE Studium Generale group}
13
+ gem.homepage = "http://sg.hse.ru"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.executables = ["hse"]
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+
21
+ gem.add_development_dependency "yard", "~> 0.7.5"
22
+
23
+ gem.add_development_dependency "rspec-core", "~> 2.0"
24
+ gem.add_development_dependency "rspec-expectations", "~> 2.0"
25
+ gem.add_development_dependency "rr", "~> 1.0"
26
+
27
+ gem.add_runtime_dependency(%q<json>, ["~> 1.7.5"])
28
+ gem.add_runtime_dependency(%q<mime-types>, ["~> 1.16"])
29
+ gem.add_runtime_dependency(%q<typhoeus>, ["~> 0.3.0"])
30
+ gem.add_runtime_dependency(%q<thor>, ["~> 0.15"])
31
+ gem.add_runtime_dependency(%q<uuidtools>, ["~> 2.1"])
32
+ gem.add_runtime_dependency(%q<redcarpet>, ["~> 2.2.2"])
33
+
34
+ end
@@ -0,0 +1,13 @@
1
+ require "hse/version"
2
+ require 'json'
3
+ require 'typhoeus'
4
+ require 'base64'
5
+ require 'mime/types'
6
+
7
+ module Hse
8
+ # Your code goes here...
9
+ end
10
+
11
+ require 'hse/cli'
12
+ require 'hse/remote'
13
+ require 'hse/parse'
@@ -0,0 +1,158 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'thor'
3
+ require 'thor/actions'
4
+ require 'uuidtools'
5
+ require 'typhoeus'
6
+ require 'pp'
7
+ require 'redcarpet'
8
+
9
+ module Hse
10
+ class CLI < ::Thor
11
+ include Thor::Actions
12
+
13
+ attr_accessor :appdir, :config_file, :debug
14
+
15
+ class_option "appdir",
16
+ :type => :string,
17
+ :banner => "set the application directory to work with. assumes the current directory"
18
+
19
+ # class_option "config",
20
+ # :aliases => '-c',
21
+ # :type => :string,
22
+ # :banner => "use a specific soca config.js"
23
+
24
+ # class_option "debug",
25
+ # :type => :boolean,
26
+ # :default => false,
27
+ # :aliases => '-d',
28
+ # :banner => "set log level to debug"
29
+
30
+ # class_option "version",
31
+ # :type => :boolean,
32
+ # :aliases => '-v',
33
+ # :banner => "print version and exit"
34
+
35
+ default_task :help
36
+
37
+ # прочитать файл блога
38
+ # создать документ: _id, timestamp -> красивый date,
39
+ # залить
40
+ # прочитать из базы -> получить _rev
41
+ # обновить
42
+ # а для этого вначале прочитать .couchrc
43
+ # и создать .couchrc
44
+
45
+ # desc 'build_old [FILE]', 'read FILE and build json doc with uniq _uuid'
46
+ # def build_(fname = 'default')
47
+ # document = {}
48
+ # puts "APDIR.self #{self.appdir}"
49
+ # puts "APDIR #{self.appdir}"
50
+ # path = File.expand_path(File.join(appdir, fname))
51
+ # puts "path #{path}"
52
+ # uuid = UUIDTools::UUID.sha1_create UUIDTools::UUID_DNS_NAMESPACE, "#{fname}"
53
+ # puts "_ID = #{path} - #{uuid}"
54
+ # lines = File.readlines path
55
+ # lines.reject!{|c|c.empty? || c == "\n"}
56
+ # document[:title] = lines.shift.strip
57
+ # document[:tags] = lines.shift.strip.split(/[[:punct:]]| /).reject!{|c|c.empty?}
58
+ # markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)
59
+ # body = markdown.render lines.join("\n")
60
+ # document[:body] = body
61
+ # say "----------", :green
62
+ # pp document
63
+ # document
64
+ # end
65
+
66
+ def initialize(*)
67
+ super
68
+ self.appdir = options[:appdir] || File.expand_path(Dir.pwd)
69
+ # self.config_file = options[:config]
70
+ # self.debug = options[:debug]
71
+ # if debug
72
+ # Soca.debug = true
73
+ # logger.level = Logger::DEBUG
74
+ # end
75
+ self.source_paths << File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
76
+ end
77
+
78
+ # desc 'get [URL]', 'get URL'
79
+ # def get(url, env = 'default')
80
+ # remote(env).get url
81
+ # end
82
+
83
+ # desc 'getid [_ID]', 'get doc _ID from couchdb'
84
+ # def getid(_id = 'default')
85
+ # uuid = UUIDTools::UUID.sha1_create UUIDTools::UUID_DNS_NAMESPACE, "#{_id}"
86
+ # puts "_ID = #{_id} - #{uuid}"
87
+ # end
88
+
89
+ desc 'get [DOC]', 'get doc by id'
90
+ def get(doc = false, env = 'default')
91
+ remote(env).get doc
92
+ end
93
+
94
+ desc 'build [FILE]', 'parse FILE'
95
+ def build(fname = 'default')
96
+ doc = parse.build fname
97
+ pp doc
98
+ end
99
+
100
+ desc 'check [FILE]', 'check the correctness of module in FILE'
101
+ def check(fname = 'default')
102
+ doc = parse.build fname
103
+ if doc[:title].nil?
104
+ say "error: title should be filled", :red
105
+ elsif doc[:en].nil?
106
+ say "error: English title should be filled", :red
107
+ elsif doc[:author].nil?
108
+ say "error: author should be filled", :red
109
+ elsif doc[:tags].nil? || doc[:tags].empty?
110
+ say "error: tags should be filled", :red
111
+ else
112
+ say "module ok", :green
113
+ end
114
+ end
115
+
116
+ desc 'taglist [COURSE]', 'print full list of tags for COURSE course'
117
+ def taglist(course = 'default', env = 'default')
118
+ #remote(env).get taglist, course
119
+ case course
120
+ when "Anti4ka"
121
+ say %w(tag tag1 tag2 tag2)
122
+ when ""
123
+ else
124
+ say "error: no course #{course}", :red
125
+ end
126
+ end
127
+
128
+ desc 'push [FILE]', 'parse FILE, build json DOC and push DOC'
129
+ def push(fname = false, env = 'default')
130
+ doc = build fname
131
+ puts "BUILD DOC_ID = #{doc[:_id]}"
132
+ revision = remote(env).get_doc_revision(doc)
133
+ doc['_rev'] = revision if revision
134
+ puts "rev ====== #{revision}"
135
+ post_body = JSON.generate doc
136
+ puts "pushing document id #{doc[:_id]}"
137
+ remote(env).put(doc[:_id], post_body)
138
+ end
139
+
140
+
141
+ private
142
+
143
+ def remote(env)
144
+ Hse::Remote.new appdir, env #, config_file
145
+ rescue => e
146
+ say e.message, :red
147
+ exit
148
+ end
149
+
150
+ def parse
151
+ Hse::Parse.new appdir #, config_file
152
+ rescue => e
153
+ say e.message, :red
154
+ exit
155
+ end
156
+
157
+ end
158
+ end
@@ -0,0 +1,50 @@
1
+ module Hse
2
+ class Parse
3
+ attr_accessor :app_dir, :document #, :config_path, :revision
4
+ #attr_reader :config
5
+
6
+ def initialize(app_dir) #, config_path = nil)
7
+ self.app_dir = File.expand_path(app_dir) + '/'
8
+ #load_couchapprc
9
+ end
10
+
11
+ def build fname
12
+ document = {body:[]}
13
+ path = File.expand_path(File.join(app_dir, fname))
14
+ #puts "path #{path}"
15
+ uuid = UUIDTools::UUID.sha1_create UUIDTools::UUID_DNS_NAMESPACE, "#{fname}"
16
+ document[:_id] = uuid.to_s
17
+ lines = File.readlines path
18
+ lines.each do |line|
19
+ line.sub!("\n","").strip!
20
+ next if line.empty?
21
+ unless line.start_with? "#"
22
+ document[:body].push line
23
+ next
24
+ end
25
+ parts = line.split(":")
26
+ key= parts.first
27
+ mark = key.sub("#","").strip
28
+ tail = line.sub("#{key}:", "").strip
29
+ case mark
30
+ when "title"
31
+ document[:title] = tail
32
+ document[:short] = tail.split(":").first
33
+ when "en"
34
+ document[:en] = tail
35
+ document[:url] = tail.split(":").first.capitalize.gsub(" ", "-")
36
+ when "de"
37
+ document[:de] = tail
38
+ when "author"
39
+ document[:author] = tail
40
+ when "tags"
41
+ document[:tags] = tail.strip.split(/[[:punct:]]| /).reject!{|c|c.empty?}
42
+ else
43
+ end
44
+ end
45
+ document
46
+ end
47
+
48
+
49
+ end
50
+ end
@@ -0,0 +1,74 @@
1
+ module Hse
2
+ class Remote
3
+ attr_accessor :app_dir, :env #, :document, :config_path, :revision
4
+ attr_reader :config
5
+
6
+ def initialize(app_dir, env = 'default') #, config_path = nil)
7
+ self.env = env
8
+ self.app_dir = File.expand_path(app_dir) + '/'
9
+ #self.config_path = config_path
10
+ #load_config
11
+ load_couchapprc
12
+ end
13
+
14
+ # def config_path=(config_path)
15
+ # @config_path = config_path || File.join(app_dir, 'config.js')
16
+ # end
17
+
18
+ # def load_config
19
+ # if File.readable?(config_path)
20
+ # @config = JSON.parse(File.read(config_path))
21
+ # else
22
+ # raise "Could not find config at '#{config_path}'. Run `soca init`"
23
+ # end
24
+ # end
25
+
26
+ def load_couchapprc
27
+ @config ||= {}
28
+ @config['couchapprc'] = JSON.parse(File.read(File.join(app_dir, '.couchapprc')))
29
+ puts "COUCHAPPRC #{@config['couchapprc']}"
30
+ #run_hooks!(:after_load_couchapprc)
31
+ end
32
+
33
+ def db_url
34
+ if env =~ /^https?\:\/\// # the env is actual a db_url
35
+ env
36
+ else
37
+ env_config = config['couchapprc']['env'][env]
38
+ raise "No such env: #{env}" unless env_config && env_config['db']
39
+ puts "DB URL #{env_config['db']}"
40
+ env_config['db']
41
+ end
42
+ end
43
+
44
+ def get doc
45
+ path = "#{db_url}/#{doc[:_id]}"
46
+ response = Typhoeus::Request.get(path)
47
+ puts "GET Response: #{response.code} #{response.body[0..200]}"
48
+ response.code == 200 ? response.body : nil
49
+ end
50
+
51
+ def get_doc_revision doc
52
+ puts "getting current revision"
53
+ current = get doc
54
+ if current
55
+ current_json = JSON.parse(current)
56
+ #self.revision = current_json['_rev']
57
+ puts "current revision: #{current_json['_rev']}"
58
+ end
59
+ current ? current_json['_rev'] : nil
60
+ end
61
+
62
+ def put id, body = ""
63
+ path = "#{db_url}/#{id}"
64
+ puts "remote: PUT path #{path}"
65
+ puts "remote: PUT body: #{body[0..80]} ..."
66
+ response = Typhoeus::Request.put(path, :body => body)
67
+ puts "PUT Response: #{response.code} #{response.body[0..200]}"
68
+ response
69
+ end
70
+
71
+
72
+
73
+ end
74
+ end
@@ -0,0 +1,10 @@
1
+ {
2
+ "env": {
3
+ "default": {
4
+ "db": "http://admin:admin@localhost:5984/<%= appname %>"
5
+ },
6
+ "production": {
7
+ "db": "http://admin:admin@localhost:5984/<%= appname %>"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= appname %></title>
5
+
6
+ <link href="css/screen.css" media="screen, projection" rel="stylesheet" type="text/css" />
7
+ <link href="css/print.css" media="print" rel="stylesheet" type="text/css" />
8
+ <!--[if lt IE 8]>
9
+ <link href="css/ie.css" media="screen, projection" rel="stylesheet" type="text/css" />
10
+ <![endif]-->
11
+ </head>
12
+ <body>
13
+ <div id="container">
14
+ </div>
15
+ <script src="js/default.js" type="text/javascript" charset="utf-8"></script>
16
+ </body>
17
+ </html>
@@ -0,0 +1,15 @@
1
+ /**
2
+ * this file contains the json representation for rewrite rules
3
+ **/
4
+ [
5
+ { // rewriting / to index.html
6
+ "from":"/",
7
+ "to":"index.html",
8
+ "method":"GET",
9
+ "query":{}
10
+ },
11
+ { // keeping relative urls sane
12
+ "from":"/*",
13
+ "to":"/*"
14
+ }
15
+ ]
@@ -0,0 +1,3 @@
1
+ module Hse
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,20 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+
12
+ # Run specs in random order to surface order dependencies. If you find an
13
+ # order dependency and want to debug it, you can fix the order by providing
14
+ # the seed, which is printed after each run.
15
+ # --seed 1234
16
+ config.order = 'random'
17
+
18
+ config.mock_with :rr
19
+
20
+ end
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hse
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Bykov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: yard
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.7.5
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.7.5
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec-core
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '2.0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '2.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-expectations
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rr
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: json
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 1.7.5
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 1.7.5
94
+ - !ruby/object:Gem::Dependency
95
+ name: mime-types
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '1.16'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '1.16'
110
+ - !ruby/object:Gem::Dependency
111
+ name: typhoeus
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.3.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.3.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: thor
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '0.15'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: '0.15'
142
+ - !ruby/object:Gem::Dependency
143
+ name: uuidtools
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ~>
148
+ - !ruby/object:Gem::Version
149
+ version: '2.1'
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ~>
156
+ - !ruby/object:Gem::Version
157
+ version: '2.1'
158
+ - !ruby/object:Gem::Dependency
159
+ name: redcarpet
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ~>
164
+ - !ruby/object:Gem::Version
165
+ version: 2.2.2
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ~>
172
+ - !ruby/object:Gem::Version
173
+ version: 2.2.2
174
+ description: a gem for HSE Studium Generale group
175
+ email:
176
+ - m.bykov@gmail.com
177
+ executables:
178
+ - hse
179
+ extensions: []
180
+ extra_rdoc_files: []
181
+ files:
182
+ - .gitignore
183
+ - Gemfile
184
+ - LICENSE.txt
185
+ - README.md
186
+ - Rakefile
187
+ - bin/hse
188
+ - hse.gemspec
189
+ - lib/hse.rb
190
+ - lib/hse/cli.rb
191
+ - lib/hse/parse.rb
192
+ - lib/hse/remote.rb
193
+ - lib/hse/templates/couchapprc.erb
194
+ - lib/hse/templates/index.html.erb
195
+ - lib/hse/templates/rewrites.js.erb
196
+ - lib/hse/version.rb
197
+ - spec/spec_helper.rb
198
+ homepage: http://sg.hse.ru
199
+ licenses: []
200
+ post_install_message:
201
+ rdoc_options: []
202
+ require_paths:
203
+ - lib
204
+ required_ruby_version: !ruby/object:Gem::Requirement
205
+ none: false
206
+ requirements:
207
+ - - ! '>='
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ required_rubygems_version: !ruby/object:Gem::Requirement
211
+ none: false
212
+ requirements:
213
+ - - ! '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ requirements: []
217
+ rubyforge_project:
218
+ rubygems_version: 1.8.24
219
+ signing_key:
220
+ specification_version: 3
221
+ summary: a gem for HSE Studium Generale group
222
+ test_files:
223
+ - spec/spec_helper.rb
224
+ has_rdoc: