resulang 0.0.1

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: 43e5309b3fb143c9d6dbc47417efabb904a54ce9
4
+ data.tar.gz: a738b02d97b10e1e74dc94f38139e2f059122335
5
+ SHA512:
6
+ metadata.gz: 53aacfcf4ae1f75cf20aae825d0bce7a7318ab441f8d62d1554a88e05d05800a5cfab938793aa3397c68837504c9f8cd18c460c31ae765da2368b9300496b8bc
7
+ data.tar.gz: a6421c95e18c72ce1823425c706c82cf3ac20962f370facfc8cbf6fbae94d7a5469ed990f04dbd5b2fcb3289441a8c77bbc538455f080eac96dbce35c4a0a51a
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ resulang
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.2.1
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in resulang.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2016 Peter Brindisi
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.
data/README.md ADDED
@@ -0,0 +1,145 @@
1
+ # Resulang
2
+
3
+ Resulang is a simple DSL to help create html resumes. It can also be used to
4
+ create other kinds of documents with structured data. It works by separating
5
+ the data from the html template, which means the data could theoretically be
6
+ used to generate other kinds of output in the future, not just html.
7
+
8
+ ## TODO: write tests and publish gem
9
+
10
+ ## Installation
11
+
12
+ $ gem install resulang
13
+
14
+ ## Usage
15
+
16
+ Once resulang is installed, create a new resulang app with:
17
+ ```sh
18
+ resulang new my_resume
19
+ ```
20
+
21
+ This will generate the basic structure of a resulang app as well as a few key files:
22
+
23
+ * `my_resume/data/resume.rb`
24
+
25
+ This is where you define your resume.
26
+
27
+ * `my_resume/templates/resume.html.erb`
28
+
29
+ This is where you write your resume html which has access to the data in my_resume/data/resume.rb
30
+
31
+
32
+ A resume is broken into named sections. For example:
33
+ ```ruby
34
+ personal do
35
+ name 'Peter Brindisi'
36
+ phone '555-555-5555'
37
+ email 'superduperprivate@example.com'
38
+ github 'https://github.com/npj'
39
+ end
40
+
41
+ background do
42
+ description <<-DESCRIPTION
43
+ I am a guy that does things. Things are awesome and they are also cool.
44
+ DESCRIPTION
45
+ end
46
+
47
+ skills do
48
+ things %{foo bar baz qux}
49
+ end
50
+
51
+ hobbies do
52
+ info do
53
+ point 'Reading about Haskell'
54
+ point 'Evangelizing monads'
55
+ point 'Making beer'
56
+ end
57
+ end
58
+ ```
59
+
60
+ A template for the above data might look like this:
61
+
62
+ ```html
63
+ <html>
64
+ <head>
65
+ <title><%= sections[:personal].name %></title>
66
+ <link rel="stylesheet" href="assets/css/style.css" />
67
+ </head>
68
+ <body>
69
+ <div class="section">
70
+ <%= render_section(:personal) %>
71
+ </div>
72
+ <div class="section">
73
+ <%= render_section(:background) %>
74
+ </div>
75
+ <div class="section">
76
+ <%= render_section(:skills) %>
77
+ </div>
78
+ <div class="section">
79
+ <%= render_section(:hobbies) %>
80
+ </div>
81
+ </body>
82
+ </html>
83
+ ```
84
+
85
+ `render_section(:section_name)` looks for a template partial named
86
+ `my_resume/templates/_section_name.html.erb`. A partial has direct access to
87
+ the data within the data section. For example, the partial for the "personal" and "hobbies" sections might look like:
88
+
89
+ ```html
90
+ <!-- my_resume/templates/_personal.html.erb -->
91
+ <div>Name: <%= name %></div>
92
+ <div>Phone: <%= phone %></div>
93
+ <div>Email: <%= email %></div>
94
+ <div><a href="<%= github %>" target="_blank"><%= github %></a></div>
95
+ ```
96
+
97
+ ```html
98
+ <!-- my_resume/templates/_hobbies.html.erb -->
99
+ <ul>
100
+ <% info.points.each do |point| %>
101
+ <li><%= point %></li>
102
+ <% end %>
103
+ </ul>
104
+ ```
105
+
106
+ The data in `resume.rb` needs to be defined, which is what the
107
+ `my_resume/data/sections` directory is for. Each section is a class that
108
+ inherits from `Resulang::Section`. A section class declares the fields a
109
+ section can have as well as their types. The `Personal` and `Hobbies` sections
110
+ would look like this:
111
+
112
+ ```ruby
113
+ # my_resume/data/sections/personal.rb
114
+ class Personal < Resulang::Section
115
+ string :name, :phone
116
+ email :email
117
+ link :github
118
+ end
119
+ ```
120
+
121
+ ```ruby
122
+ # my_resume/data/sections/hobbies.rb
123
+ class Hobbies < Resulang::Section
124
+ pointlist :info
125
+ end
126
+ ```
127
+
128
+ To easily view changes to the resume as you make them, you can run a local server with:
129
+ ```sh
130
+ resulang server
131
+ ```
132
+
133
+ However, if you make any changes to the classes in `my_resume/data/sections` you must restart the server.
134
+
135
+ You can put assets like images and stylesheets in directories off `my_resume`, like `css` and `images` or `assets/css` and `assets/images'. These can be referenced in `resume.html.erb`.
136
+
137
+ To generate a static html page, run:
138
+ ```sh
139
+ resulang make
140
+ ```
141
+
142
+ This will output `./resume.html`
143
+
144
+ Please see the `exmaples` directory of this project for a working example.
145
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bin/resulang ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'resulang'
4
+ require 'resulang/exec'
5
+
6
+ Resulang::Exec.start(ARGV)
@@ -0,0 +1,11 @@
1
+ body {
2
+ font-family: 'verdana';
3
+ font-size: 10pt;
4
+ }
5
+
6
+ .section {
7
+ margin: 20px;
8
+ padding: 20px;
9
+ border: 1px solid #ccc;
10
+ background-color: #eee;
11
+ }
@@ -0,0 +1,25 @@
1
+ personal do
2
+ name 'Peter Brindisi'
3
+ phone '555-555-5555'
4
+ email 'superduperprivate@example.com'
5
+ github 'https://github.com/npj'
6
+ end
7
+
8
+ background do
9
+ description <<-DESCRIPTION
10
+ I am a guy that does things. Things are awesome and they are also cool.
11
+ DESCRIPTION
12
+ end
13
+
14
+ skills do
15
+ things %{foo bar baz qux}
16
+ end
17
+
18
+ hobbies do
19
+ info do
20
+ point 'Reading about Haskell'
21
+ point 'Evangelizing monads'
22
+ point 'Making beer'
23
+ end
24
+ end
25
+
@@ -0,0 +1,4 @@
1
+ class Background < Resulang::Section
2
+ string :description
3
+ end
4
+
@@ -0,0 +1,3 @@
1
+ class Hobbies < Resulang::Section
2
+ pointlist :info
3
+ end
@@ -0,0 +1,5 @@
1
+ class Personal < Resulang::Section
2
+ string :name, :phone
3
+ email :email
4
+ link :github
5
+ end
@@ -0,0 +1,3 @@
1
+ class Skills < Resulang::Section
2
+ list :things
3
+ end
@@ -0,0 +1,38 @@
1
+ <html>
2
+ <head>
3
+ <title>Peter Brindisi</title>
4
+ <link rel="stylesheet" href="assets/css/style.css" />
5
+ </head>
6
+ <body>
7
+ <div class="section">
8
+ <div>Name: Peter Brindisi</div>
9
+ <div>Phone: 555-555-5555</div>
10
+ <div>Email: superduperprivate@example.com</div>
11
+ <div><a href="https://github.com/npj" target="_blank">https://github.com/npj</a></div>
12
+
13
+ </div>
14
+ <div class="section">
15
+ <div> I am a guy that does things. Things are awesome and they are also cool.
16
+ </div>
17
+
18
+ </div>
19
+ <div class="section">
20
+ <div>foo bar baz qux</div>
21
+
22
+ </div>
23
+ <div class="section">
24
+ <ul>
25
+
26
+ <li>Reading about Haskell</li>
27
+
28
+ <li>Evangelizing monads</li>
29
+
30
+ <li>Making beer</li>
31
+
32
+ </ul>
33
+
34
+
35
+ </div>
36
+ </body>
37
+ </html>
38
+
@@ -0,0 +1,2 @@
1
+ require "resulang/server"
2
+ run Resulang::Server
@@ -0,0 +1 @@
1
+ <div><%= description %></div>
@@ -0,0 +1,6 @@
1
+ <ul>
2
+ <% info.points.each do |point| %>
3
+ <li><%= point %></li>
4
+ <% end %>
5
+ </ul>
6
+
@@ -0,0 +1,4 @@
1
+ <div>Name: <%= name %></div>
2
+ <div>Phone: <%= phone %></div>
3
+ <div>Email: <%= email %></div>
4
+ <div><a href="<%= github %>" target="_blank"><%= github %></a></div>
@@ -0,0 +1 @@
1
+ <div><%= things.join(' / ') %></div>
@@ -0,0 +1,21 @@
1
+ <html>
2
+ <head>
3
+ <title><%= sections[:personal].name %></title>
4
+ <link rel="stylesheet" href="assets/css/style.css" />
5
+ </head>
6
+ <body>
7
+ <div class="section">
8
+ <%= render_section(:personal) %>
9
+ </div>
10
+ <div class="section">
11
+ <%= render_section(:background) %>
12
+ </div>
13
+ <div class="section">
14
+ <%= render_section(:skills) %>
15
+ </div>
16
+ <div class="section">
17
+ <%= render_section(:hobbies) %>
18
+ </div>
19
+ </body>
20
+ </html>
21
+
@@ -0,0 +1,75 @@
1
+ module Resulang
2
+ class App
3
+ attr_reader :path, :resume
4
+
5
+ def initialize(path:)
6
+ @path = path
7
+ load_app
8
+ end
9
+
10
+ def template_path
11
+ File.join(path, 'templates', 'resume.html.erb')
12
+ end
13
+
14
+ def processor(output:, format:)
15
+ Processor.new(app: self, output: output, format: format)
16
+ end
17
+
18
+ class Processor
19
+ attr_reader :app, :output, :format
20
+
21
+ def initialize(app:, output:, format:)
22
+ @app = app
23
+ @output = output
24
+ @format = format
25
+ end
26
+
27
+ def filename
28
+ File.extname(output) == ".#{format}" ? output : "#{output}.#{format}"
29
+ end
30
+
31
+ def process
32
+ case format.to_sym
33
+ when :html then process_html
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def process_html
40
+ Resulang::Template.new(resume: app.resume, path: app.template_path).process
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def load_app
47
+ unless File.directory?('data') && File.directory?('templates')
48
+ raise "no Resulang app found at #{path.inspect}"
49
+ end
50
+
51
+ load_sections
52
+ load_resume
53
+ end
54
+
55
+ def load_sections
56
+ section_paths.each { |section| require section }
57
+ end
58
+
59
+ def load_resume
60
+ @resume = Resulang::Dsl.new(resume_path).resume
61
+ end
62
+
63
+ def sections_dir
64
+ File.join(path, 'data', 'sections')
65
+ end
66
+
67
+ def section_paths
68
+ Dir[File.join(sections_dir, '**', '*.rb')]
69
+ end
70
+
71
+ def resume_path
72
+ File.join(path, 'data', 'resume.rb')
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,31 @@
1
+ module Resulang
2
+ class Dsl
3
+ attr_reader :path
4
+
5
+ def self.register_section!(section, klass)
6
+ define_section_method(section, klass)
7
+ end
8
+
9
+ def initialize(path)
10
+ @path = path
11
+ @resume = Resume.new
12
+ end
13
+
14
+ def resume
15
+ unless @evaluated
16
+ instance_eval(File.read(path))
17
+ @evaluated = true
18
+ end
19
+
20
+ @resume
21
+ end
22
+
23
+ private
24
+
25
+ def self.define_section_method(section, klass)
26
+ define_method(section) do |&block|
27
+ @resume.sections[section.to_sym] = klass.new(&block)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,58 @@
1
+ require 'thor'
2
+ require 'active_support/inflector'
3
+
4
+ module Resulang
5
+ class Exec < Thor
6
+ include Thor::Actions
7
+
8
+ desc 'new NAME', 'Generate a new Resulang app in directory NAME'
9
+ option :sections, type: :array, required: false, default: [], desc: 'A list of initial sections to generate'
10
+ def new(name)
11
+ empty_directory(name)
12
+ inside(name) do
13
+ create_file "server.ru" do
14
+ <<-SERVER
15
+ require "resulang/server"
16
+ run Resulang::Server
17
+ SERVER
18
+ end
19
+
20
+ empty_directory('data')
21
+ inside('data') do
22
+ create_file('resume.rb') do
23
+ options[:sections].inject([]) { |list, s| list.push("#{s} do\n\nend") }.join("\n\n")
24
+ end
25
+
26
+ empty_directory('sections')
27
+ inside('sections') do
28
+ options[:sections].each do |s|
29
+ create_file("#{s}.rb", "class #{ActiveSupport::Inflector.camelize(s)} < Resulang::Section\n\nend")
30
+ end
31
+ end
32
+ end
33
+
34
+ empty_directory 'templates'
35
+ inside('templates') do
36
+ create_file('resume.html.erb')
37
+ options[:sections].each do |s|
38
+ create_file("_#{s}.html.erb")
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ desc 'server', 'Start a development server'
45
+ def server
46
+ run %{rackup server.ru}
47
+ end
48
+
49
+ desc 'make', 'Generate a static HTML file from a Resulang app'
50
+ option :output, type: :string, default: 'resume', required: false, desc: 'Path to generated HTML'
51
+ option :force, type: :boolean, default: false, required: false, desc: 'Ask to overwrite files or not'
52
+ def make
53
+ app = Resulang::App.new(path: File.expand_path('.'))
54
+ processor = app.processor(output: options[:output], format: :html)
55
+ create_file(processor.filename, force: options[:force]) { processor.process }
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,80 @@
1
+ module Resulang
2
+ module Fields
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ class Email < String
8
+ end
9
+
10
+ class Link < String
11
+ end
12
+
13
+ class PointList
14
+ attr_reader :points
15
+
16
+ def initialize(string: nil, &block)
17
+ @string = string
18
+ @points = [ ]
19
+ instance_eval(&block) if block
20
+ end
21
+
22
+ def point(string, &block)
23
+ points.push(PointList.new(string: string, &block))
24
+ end
25
+
26
+ def to_s
27
+ @string
28
+ end
29
+ end
30
+
31
+ module ClassMethods
32
+ protected def string(*attrs)
33
+ fields(*attrs) { |value| value }
34
+ end
35
+
36
+ protected def email(*attrs)
37
+ fields(*attrs) { |value| Email.new(value) }
38
+ end
39
+
40
+ protected def link(*attrs)
41
+ fields(*attrs) { |value| Link.new(value) }
42
+ end
43
+
44
+ protected def list(*attrs)
45
+ fields(*attrs) { |value| Array(value) }
46
+ end
47
+
48
+ protected def range(*attrs)
49
+ fields(*attrs) { |*values| (values.first..values.last) }
50
+ end
51
+
52
+ protected def pointlist(*attrs)
53
+ fields(*attrs) { |&block| PointList.new(&block) }
54
+ end
55
+
56
+ private def fields(*names, &block)
57
+ names.each do |name|
58
+ define_method(name) do |*args, &b|
59
+ if args.empty? && b.nil?
60
+ field_get(name)
61
+ else
62
+ field_set(name, block.call(*args, &b))
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ #
70
+ # Instance Methods
71
+ #
72
+ private def field_set(attr, value)
73
+ instance_variable_set("@#{attr}", value)
74
+ end
75
+
76
+ private def field_get(attr)
77
+ instance_variable_get("@#{attr}")
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,21 @@
1
+ require 'active_support/inflector'
2
+
3
+ module Resulang
4
+ module Rendering
5
+ include ActiveSupport::Inflector
6
+
7
+ def render_section(section)
8
+ if s = sections[section.to_sym]
9
+ ERB.new(File.read(partial(section))).result(s.get_binding)
10
+ end
11
+ end
12
+
13
+ def html_escape(str)
14
+ ERB::Util.html_escape(str)
15
+ end
16
+
17
+ def partial(name)
18
+ File.expand_path("../_#{name}.html.erb", template_path)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,8 @@
1
+ module Resulang
2
+ class Resume
3
+ attr_reader :sections
4
+ def initialize
5
+ @sections = { }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ require 'active_support/inflector'
2
+
3
+ module Resulang
4
+ class Section
5
+ include Fields
6
+ include Rendering
7
+
8
+ def self.inherited(subclass)
9
+ Resulang::Dsl.register_section!(ActiveSupport::Inflector.underscore(subclass.name), subclass)
10
+ end
11
+
12
+ def initialize(&block)
13
+ instance_eval(&block)
14
+ end
15
+
16
+ def get_binding
17
+ binding
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,52 @@
1
+ require 'resulang'
2
+ require 'rack'
3
+ require 'mime/types'
4
+
5
+ module Resulang
6
+ class Server
7
+ def self.escape(html)
8
+ html.gsub(/\</, '&lt;').gsub(/\>/, '&gt;').gsub(/\"/, '&quot;')
9
+ end
10
+
11
+ def self.mime_type(filename)
12
+ if (types = MIME::Types.type_for(filename)).empty?
13
+ 'text/plain'
14
+ else
15
+ types.first.content_type
16
+ end
17
+ end
18
+
19
+ def self.app
20
+ Resulang::App.new(path: File.expand_path('.'))
21
+ end
22
+
23
+ def self.serve_html
24
+ html = app.processor(output: nil, format: :html).process
25
+ headers = {
26
+ 'Content-Type' => 'text/html'
27
+ }
28
+ [200, headers, [html]]
29
+ end
30
+
31
+ def self.serve_file(path)
32
+ fullpath = File.expand_path("./#{path}")
33
+ if File.file?(fullpath)
34
+ data = File.read(fullpath)
35
+ headers = {
36
+ 'Content-Type' => mime_type(File.basename(path))
37
+ }
38
+ [200, headers, [data]]
39
+ else
40
+ [404, { 'Content-Type' => 'text/html' }, ['Not Found']]
41
+ end
42
+ end
43
+
44
+ def self.call(env)
45
+ if env['PATH_INFO'] == '/'
46
+ serve_html
47
+ else
48
+ serve_file(env['PATH_INFO'])
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,24 @@
1
+ require 'erb'
2
+
3
+ module Resulang
4
+ class Template < SimpleDelegator
5
+ include Rendering
6
+
7
+ # Any 'attr_reader' attributes defined here will be
8
+ # available in the template.
9
+ attr_reader :template_path
10
+
11
+ def initialize(resume:, path:)
12
+ @template_path = path
13
+
14
+ # Delegate everything else to resume allows code within the template to
15
+ # do things like <%= personal.name %> which is the equivalent of
16
+ # <%= resume.personal.name %>.
17
+ super(resume)
18
+ end
19
+
20
+ def process
21
+ ERB.new(File.read(template_path)).result(binding)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module Resulang
2
+ VERSION = "0.0.1"
3
+ end
data/lib/resulang.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'resulang/app'
2
+ require 'resulang/dsl'
3
+ require 'resulang/fields'
4
+ require 'resulang/rendering'
5
+ require 'resulang/resume'
6
+ require 'resulang/section'
7
+ require 'resulang/template'
8
+ require 'resulang/version'
9
+
10
+ module Resulang
11
+ end
data/resulang.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'resulang/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "resulang"
8
+ spec.version = Resulang::VERSION
9
+ spec.authors = ["Peter Brindisi"]
10
+ spec.email = ["peter.brindisi+resulang@gmail.com"]
11
+ spec.summary = %q{Resulang is a simple DSL to help create html resumes.}
12
+ spec.homepage = "https://github.com/npj/resulang"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency "thor", "~> 0.19.1"
21
+ spec.add_dependency "activesupport", "~> 4.2.6"
22
+ spec.add_dependency "rack", "~> 1.6.4"
23
+ spec.add_dependency "mime-types", "~> 3.0"
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.7"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rspec", "~> 3.4.0"
28
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: resulang
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Peter Brindisi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.19.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.19.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 4.2.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 4.2.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.6.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.6.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: mime-types
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 3.4.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 3.4.0
111
+ description:
112
+ email:
113
+ - peter.brindisi+resulang@gmail.com
114
+ executables:
115
+ - resulang
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - ".gitignore"
120
+ - ".ruby-gemset"
121
+ - ".ruby-version"
122
+ - Gemfile
123
+ - LICENSE.txt
124
+ - README.md
125
+ - Rakefile
126
+ - bin/resulang
127
+ - examples/my_resume/assets/css/style.css
128
+ - examples/my_resume/data/resume.rb
129
+ - examples/my_resume/data/sections/background.rb
130
+ - examples/my_resume/data/sections/hobbies.rb
131
+ - examples/my_resume/data/sections/personal.rb
132
+ - examples/my_resume/data/sections/skills.rb
133
+ - examples/my_resume/resume.html
134
+ - examples/my_resume/server.ru
135
+ - examples/my_resume/templates/_background.html.erb
136
+ - examples/my_resume/templates/_hobbies.html.erb
137
+ - examples/my_resume/templates/_personal.html.erb
138
+ - examples/my_resume/templates/_skills.html.erb
139
+ - examples/my_resume/templates/resume.html.erb
140
+ - lib/resulang.rb
141
+ - lib/resulang/app.rb
142
+ - lib/resulang/dsl.rb
143
+ - lib/resulang/exec.rb
144
+ - lib/resulang/fields.rb
145
+ - lib/resulang/rendering.rb
146
+ - lib/resulang/resume.rb
147
+ - lib/resulang/section.rb
148
+ - lib/resulang/server.rb
149
+ - lib/resulang/template.rb
150
+ - lib/resulang/version.rb
151
+ - resulang.gemspec
152
+ homepage: https://github.com/npj/resulang
153
+ licenses:
154
+ - MIT
155
+ metadata: {}
156
+ post_install_message:
157
+ rdoc_options: []
158
+ require_paths:
159
+ - lib
160
+ required_ruby_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ required_rubygems_version: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 2.4.6
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Resulang is a simple DSL to help create html resumes.
176
+ test_files: []