resulang 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 43e5309b3fb143c9d6dbc47417efabb904a54ce9
4
- data.tar.gz: a738b02d97b10e1e74dc94f38139e2f059122335
2
+ SHA256:
3
+ metadata.gz: e9f8ee4aa6b963ea749c10954d042c71f2099c9b7ad9267921ce99099223ba0c
4
+ data.tar.gz: 54cd1b85136bd67d37de5ad8c7b9ab222ca3341bd937e1d5e543ab0b8113a73d
5
5
  SHA512:
6
- metadata.gz: 53aacfcf4ae1f75cf20aae825d0bce7a7318ab441f8d62d1554a88e05d05800a5cfab938793aa3397c68837504c9f8cd18c460c31ae765da2368b9300496b8bc
7
- data.tar.gz: a6421c95e18c72ce1823425c706c82cf3ac20962f370facfc8cbf6fbae94d7a5469ed990f04dbd5b2fcb3289441a8c77bbc538455f080eac96dbce35c4a0a51a
6
+ metadata.gz: fa6c3890faa19934257f5547c40564c5a44c0efb22c8cb49034d499be7ca8893aa36efbd69009685cf418423b71411bb1bd272a823aa43781f53e89d4a475ec5
7
+ data.tar.gz: b16d1895f0b89839d5bda160952006c77e9b50f5d2e27b4064c576cd11d59469c6cd7d2a5d75577f55065a135e907890da4246f5ee658b866c9fbdb30973956a
@@ -1 +1 @@
1
- ruby-2.2.1
1
+ 2.7.1
data/README.md CHANGED
@@ -5,7 +5,7 @@ create other kinds of documents with structured data. It works by separating
5
5
  the data from the html template, which means the data could theoretically be
6
6
  used to generate other kinds of output in the future, not just html.
7
7
 
8
- ## TODO: write tests and publish gem
8
+ ## TODO: write tests
9
9
 
10
10
  ## Installation
11
11
 
@@ -21,15 +21,16 @@ resulang new my_resume
21
21
  This will generate the basic structure of a resulang app as well as a few key files:
22
22
 
23
23
  * `my_resume/data/resume.rb`
24
-
25
- This is where you define your resume.
24
+
25
+ This is where you define your resume.
26
26
 
27
27
  * `my_resume/templates/resume.html.erb`
28
28
 
29
- This is where you write your resume html which has access to the data in my_resume/data/resume.rb
29
+ This is where you write your resume html which has access to the data in
30
+ my_resume/data/resume.rb
30
31
 
31
32
 
32
- A resume is broken into named sections. For example:
33
+ A resume is broken into named sections. For example:
33
34
  ```ruby
34
35
  personal do
35
36
  name 'Peter Brindisi'
@@ -84,7 +85,8 @@ A template for the above data might look like this:
84
85
 
85
86
  `render_section(:section_name)` looks for a template partial named
86
87
  `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
+ the data within the data section. For example, the partial for the "personal"
89
+ and "hobbies" sections might look like:
88
90
 
89
91
  ```html
90
92
  <!-- my_resume/templates/_personal.html.erb -->
@@ -125,14 +127,18 @@ class Hobbies < Resulang::Section
125
127
  end
126
128
  ```
127
129
 
128
- To easily view changes to the resume as you make them, you can run a local server with:
130
+ To easily view changes to the resume as you make them, you can run a local
131
+ server with:
129
132
  ```sh
130
133
  resulang server
131
134
  ```
132
135
 
133
- However, if you make any changes to the classes in `my_resume/data/sections` you must restart the server.
136
+ However, if you make any changes to the classes in `my_resume/data/sections`
137
+ you must restart the server.
134
138
 
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`.
139
+ You can put assets like images and stylesheets in directories off `my_resume`,
140
+ like `css` and `images` or `assets/css` and `assets/images`. These can be
141
+ referenced in `resume.html.erb`.
136
142
 
137
143
  To generate a static html page, run:
138
144
  ```sh
@@ -142,4 +148,3 @@ resulang make
142
148
  This will output `./resume.html`
143
149
 
144
150
  Please see the `exmaples` directory of this project for a working example.
145
-
@@ -6,33 +6,22 @@
6
6
  <body>
7
7
  <div class="section">
8
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
-
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>
13
12
  </div>
14
13
  <div class="section">
15
- <div> I am a guy that does things. Things are awesome and they are also cool.
16
- </div>
17
-
14
+ <div>I am a guy that does things. Things are awesome and they are also cool.</div>
18
15
  </div>
19
16
  <div class="section">
20
17
  <div>foo bar baz qux</div>
21
-
22
18
  </div>
23
19
  <div class="section">
24
20
  <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
-
21
+ <li>Reading about Haskell</li>
22
+ <li>Evangelizing monads</li>
23
+ <li>Making beer</li>
24
+ </ul>
35
25
  </div>
36
26
  </body>
37
- </html>
38
-
27
+ </html>
@@ -0,0 +1,46 @@
1
+ structure do
2
+ section :personal do
3
+ string :name, :phone
4
+ email :email
5
+ link :github
6
+ end
7
+
8
+ section :background do
9
+ string :description
10
+ end
11
+
12
+ section :skills do
13
+ list :things
14
+ end
15
+
16
+ section :hobbies do
17
+ pointlist :info
18
+ end
19
+ end
20
+
21
+ data do
22
+ personal do
23
+ name 'Peter Brindisi'
24
+ phone '555-555-5555'
25
+ email 'superduperprivate@example.com'
26
+ github 'https://github.com/npj'
27
+ end
28
+
29
+ background do
30
+ description <<-DESCRIPTION
31
+ I am a guy that does things. Things are awesome and they are also cool.
32
+ DESCRIPTION
33
+ end
34
+
35
+ skills do
36
+ things %{foo bar baz qux}
37
+ end
38
+
39
+ hobbies do
40
+ info do
41
+ point 'Reading about Haskell'
42
+ point 'Evangelizing monads'
43
+ point 'Making beer'
44
+ end
45
+ end
46
+ end
@@ -1,2 +1,2 @@
1
- require "resulang/server"
2
- run Resulang::Server
1
+ require "resulang/server"
2
+ run Resulang::Server
@@ -44,32 +44,19 @@ module Resulang
44
44
  private
45
45
 
46
46
  def load_app
47
- unless File.directory?('data') && File.directory?('templates')
48
- raise "no Resulang app found at #{path.inspect}"
47
+ unless File.directory?('templates')
48
+ raise "no Resulang app found at #{path.inspect}: 'templates' directory not found."
49
49
  end
50
50
 
51
- load_sections
52
51
  load_resume
53
52
  end
54
53
 
55
- def load_sections
56
- section_paths.each { |section| require section }
57
- end
58
-
59
54
  def load_resume
60
55
  @resume = Resulang::Dsl.new(resume_path).resume
61
56
  end
62
57
 
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
58
  def resume_path
72
- File.join(path, 'data', 'resume.rb')
59
+ File.join(path, 'resume.rb')
73
60
  end
74
61
  end
75
62
  end
@@ -1,31 +1,32 @@
1
1
  module Resulang
2
2
  class Dsl
3
- attr_reader :path
4
-
5
- def self.register_section!(section, klass)
6
- define_section_method(section, klass)
7
- end
3
+ attr_reader :path, :resume
8
4
 
9
5
  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
6
+ @resume = nil
7
+ @path = path
8
+ instance_eval(File.read(path))
21
9
  end
22
10
 
23
11
  private
24
12
 
25
- def self.define_section_method(section, klass)
26
- define_method(section) do |&block|
27
- @resume.sections[section.to_sym] = klass.new(&block)
13
+ # defines the sections and their typed fields
14
+ class Structure
15
+ def initialize(&block)
16
+ instance_eval(&block)
28
17
  end
18
+
19
+ def section(name, &block)
20
+ Resume.declare_section!(name, &block)
21
+ end
22
+ end
23
+
24
+ def structure(&block)
25
+ Structure.new(&block)
26
+ end
27
+
28
+ def data(&block)
29
+ @resume = Resume.new(&block)
29
30
  end
30
31
  end
31
32
  end
@@ -11,24 +11,26 @@ module Resulang
11
11
  empty_directory(name)
12
12
  inside(name) do
13
13
  create_file "server.ru" do
14
- <<-SERVER
15
- require "resulang/server"
16
- run Resulang::Server
17
- SERVER
14
+ contents = [
15
+ %Q{require "resulang/server"},
16
+ %Q{run Resulang::Server}
17
+ ]
18
+ contents.join("\n")
18
19
  end
19
20
 
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")
21
+ create_file('resume.rb') do
22
+ declarations = options[:sections].inject([]) do |list, s|
23
+ list.push("section(:#{s}) do\n\n end")
24
24
  end
25
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
26
+ sections = options[:sections].inject([]) do |list, s|
27
+ list.push("#{s} do\n\n end")
31
28
  end
29
+
30
+ structure = "structure do\n " + declarations.join(" \n\n ") + "\nend"
31
+ data = "data do\n " + sections.join(" \n\n ") + "\nend"
32
+
33
+ structure + "\n\n" + data
32
34
  end
33
35
 
34
36
  empty_directory 'templates'
@@ -1,8 +1,23 @@
1
1
  module Resulang
2
2
  class Resume
3
+ @@declared_sections = { }
4
+
3
5
  attr_reader :sections
4
- def initialize
6
+
7
+ def initialize(&block)
5
8
  @sections = { }
9
+ instance_eval(&block)
10
+ end
11
+
12
+ def self.declare_section!(name, &declaration_block)
13
+ @@declared_sections[name] = Class.new(Section, &declaration_block)
14
+
15
+ define_method(name) do |&instance_block|
16
+ unless @@declared_sections[name]
17
+ raise "Section \"#{name}\" not found"
18
+ end
19
+ @sections[name] = @@declared_sections[name].new(name: name, &instance_block)
20
+ end
6
21
  end
7
22
  end
8
23
  end
@@ -2,14 +2,13 @@ require 'active_support/inflector'
2
2
 
3
3
  module Resulang
4
4
  class Section
5
+ attr_reader :name
6
+
5
7
  include Fields
6
8
  include Rendering
7
9
 
8
- def self.inherited(subclass)
9
- Resulang::Dsl.register_section!(ActiveSupport::Inflector.underscore(subclass.name), subclass)
10
- end
11
-
12
- def initialize(&block)
10
+ def initialize(name:, &block)
11
+ @name = name
13
12
  instance_eval(&block)
14
13
  end
15
14
 
@@ -23,7 +23,7 @@ module Resulang
23
23
  def self.serve_html
24
24
  html = app.processor(output: nil, format: :html).process
25
25
  headers = {
26
- 'Content-Type' => 'text/html'
26
+ 'Content-Type' => 'text/html'
27
27
  }
28
28
  [200, headers, [html]]
29
29
  end
@@ -1,3 +1,3 @@
1
1
  module Resulang
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -19,10 +19,10 @@ Gem::Specification.new do |spec|
19
19
 
20
20
  spec.add_dependency "thor", "~> 0.19.1"
21
21
  spec.add_dependency "activesupport", "~> 4.2.6"
22
- spec.add_dependency "rack", "~> 1.6.4"
22
+ spec.add_dependency "rack", "~> 2.1.4"
23
23
  spec.add_dependency "mime-types", "~> 3.0"
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.7"
26
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "bundler", "~> 2.1.4"
26
+ spec.add_development_dependency "rake", "~> 12.3.3"
27
27
  spec.add_development_dependency "rspec", "~> 3.4.0"
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resulang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Brindisi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-30 00:00:00.000000000 Z
11
+ date: 2020-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.6.4
47
+ version: 2.1.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.6.4
54
+ version: 2.1.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mime-types
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,28 +72,28 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.7'
75
+ version: 2.1.4
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.7'
82
+ version: 2.1.4
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '10.0'
89
+ version: 12.3.3
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '10.0'
96
+ version: 12.3.3
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -125,12 +125,8 @@ files:
125
125
  - Rakefile
126
126
  - bin/resulang
127
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
128
  - examples/my_resume/resume.html
129
+ - examples/my_resume/resume.rb
134
130
  - examples/my_resume/server.ru
135
131
  - examples/my_resume/templates/_background.html.erb
136
132
  - examples/my_resume/templates/_hobbies.html.erb
@@ -168,8 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
164
  - !ruby/object:Gem::Version
169
165
  version: '0'
170
166
  requirements: []
171
- rubyforge_project:
172
- rubygems_version: 2.4.6
167
+ rubygems_version: 3.1.2
173
168
  signing_key:
174
169
  specification_version: 4
175
170
  summary: Resulang is a simple DSL to help create html resumes.
@@ -1,25 +0,0 @@
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
-
@@ -1,4 +0,0 @@
1
- class Background < Resulang::Section
2
- string :description
3
- end
4
-
@@ -1,3 +0,0 @@
1
- class Hobbies < Resulang::Section
2
- pointlist :info
3
- end
@@ -1,5 +0,0 @@
1
- class Personal < Resulang::Section
2
- string :name, :phone
3
- email :email
4
- link :github
5
- end
@@ -1,3 +0,0 @@
1
- class Skills < Resulang::Section
2
- list :things
3
- end