roxie 0.0.2

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: 75b077a1a282d969b55de2bae3f50284b5837a02
4
+ data.tar.gz: 7b0554af4dd65c7d1a05faf361eb62726d89e479
5
+ SHA512:
6
+ metadata.gz: 2dcb1026d2d8e9a85123be6f2057b9e390c04fd0a9d9f7f958e17736ea18c4783792e7340ce410a7b6ce2f867e087a9c8bd9b2e3f8d56bec7fbdff164a2b5754
7
+ data.tar.gz: e1add78a103d5ea6f8c19a2451ad940a52b3945ff7fe17ef8e5259e066922ec04c9d30c3581383f20c5d795bf43741237e2d3d2f24d84e3b912c3bc3f340ced9
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.editorconfig ADDED
@@ -0,0 +1,8 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = space
5
+ indent_size = 2
6
+ end_of_line = lf
7
+ trim_trailing_whitespace = true
8
+ insert_final_newline = true
data/.gitignore ADDED
@@ -0,0 +1,17 @@
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
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ bundler_args: --without development
3
+ rvm:
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
7
+ - jruby-19mode
8
+ - rbx-19mode
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Gem dependencies
4
+ gemspec
5
+
6
+ gem 'rake', group: [:development, :test]
7
+
8
+ group :test do
9
+ gem 'cucumber'
10
+ gem 'fivemat'
11
+ gem 'aruba'
12
+ gem 'rspec'
13
+
14
+ gem 'simplecov', :require => false
15
+ gem 'coveralls', :require => false
16
+ end
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Maxwell Barvian
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,29 @@
1
+ # Roxie
2
+
3
+ Minimal [Dox](https://github.com/visionmedia/dox) and [Rocco](https://github.com/rtomayko/rocco)-inspired documentation generator written in Ruby.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'roxie'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install roxie
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
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ require 'roxie/rake/task'
4
+ Roxie::Rake::Task.new do |t|
5
+ t.files = ['lib/**/*.rb']
6
+ t.options = [
7
+ '--only-tagged',
8
+ '--force'
9
+ ]
10
+ end
11
+
12
+ require 'rspec/core/rake_task'
13
+ desc "Run RSpec"
14
+ RSpec::Core::RakeTask.new do |t|
15
+ t.pattern = 'spec/**/*_spec.rb'
16
+ t.rspec_opts = ['--color', '--format nested']
17
+ end
18
+
19
+ require 'cucumber/rake/task'
20
+ Cucumber::Rake::Task.new(:cucumber, "Run features that should pass") do |t|
21
+ t.cucumber_opts = "--color --tags ~@wip --strict --format #{ENV['CUCUMBER_FORMAT'] || 'Fivemat'}"
22
+ end
23
+
24
+ desc "Run all tests, both RSpec and Cucumber"
25
+ task :test => [:spec, :cucumber]
26
+
27
+ task :default => :test
data/bin/roxie ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'roxie/cli'
4
+
5
+ # Start the CLI
6
+ Roxie::CLI::Base.start()
@@ -0,0 +1,9 @@
1
+ Feature: Roxie Base CLI
2
+
3
+ Scenario: Retrieve detailed help for subcommands
4
+ Given I run `roxie help doc`
5
+ Then the output should contain "Options:"
6
+
7
+ Scenario: Print out the version number
8
+ Given I run `roxie version`
9
+ Then the output should contain "Roxie"
@@ -0,0 +1,8 @@
1
+ Feature: Documentation Generator
2
+
3
+ Scenario: Build empty app
4
+ Given an empty app
5
+ When I run `roxie`
6
+ Then the following files should exist:
7
+ | doc/api.json |
8
+ And the file "doc/api.json" should not contain "tags:"
@@ -0,0 +1,24 @@
1
+ require 'fileutils'
2
+
3
+ Given /^an empty app$/ do
4
+ step %Q{a directory named "empty_app"}
5
+ step %Q{I cd to "empty_app"}
6
+ end
7
+
8
+ Given /^a fixture app "([^\"]*)"$/ do |path|
9
+ # This step can be reentered from several places but we don't want
10
+ # to keep re-copying and re-cd-ing into ever-deeper directories
11
+ next if File.basename(current_dir) == path
12
+
13
+ step %Q{a directory named "#{path}"}
14
+
15
+ target_path = File.join(PROJECT_ROOT_PATH, "fixtures", path)
16
+ FileUtils.cp_r(target_path, current_dir)
17
+
18
+ step %Q{I cd to "#{path}"}
19
+ end
20
+
21
+ # Provide this Aruba overload in case we're matching something with quotes in it
22
+ Then /^the file "([^"]*)" should contain '([^']*)'$/ do |file, partial_content|
23
+ check_file_content(file, partial_content, true)
24
+ end
@@ -0,0 +1,13 @@
1
+ require 'simplecov'
2
+ SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/../..'))
3
+
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+
7
+ PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
8
+ require File.join(PROJECT_ROOT_PATH, 'lib', 'roxie')
9
+ require 'aruba/cucumber'
10
+
11
+ Before do
12
+ @aruba_timeout_seconds = 15
13
+ end
@@ -0,0 +1,102 @@
1
+ require 'pygments.rb'
2
+ require 'json'
3
+
4
+ module Roxie
5
+ module CLI
6
+
7
+ class Doc < Thor::Group
8
+
9
+ include Thor::Actions
10
+
11
+ class << self
12
+ def banner
13
+ "#{basename} doc [INPUT]"
14
+ end
15
+ end
16
+
17
+ namespace :doc
18
+
19
+ check_unknown_options!
20
+ add_runtime_options!
21
+
22
+ argument 'paths',
23
+ :type => :array,
24
+ :default => ['{lib,app}/**/*.rb', 'ext/**/*.c']
25
+
26
+ class_option 'base-path',
27
+ :aliases => '-p',
28
+ :default => './',
29
+ :desc => "The path to look for the input files in"
30
+ class_option 'output',
31
+ :aliases => '-o',
32
+ :default => './doc/api.json',
33
+ :desc => "The output file (JSON)"
34
+ class_option 'exclude',
35
+ :aliases => '-x',
36
+ :type => :array,
37
+ :desc => "Directories to ignore (regexp)"
38
+ class_option 'language',
39
+ :aliases => '-l',
40
+ :desc => "Language of input files, if it can't be inferred"
41
+ class_option 'only-tagged',
42
+ :type => :boolean,
43
+ :default => false,
44
+ :desc => "Only extract comments that have @tags in them"
45
+ class_option 'only-single',
46
+ :type => :boolean,
47
+ :default => false,
48
+ :desc => "Only extract single-line comments"
49
+ class_option 'only-multi',
50
+ :type => :boolean,
51
+ :default => false,
52
+ :desc => "Only extract multi-line comments"
53
+
54
+ def parse_paths
55
+ excluded = (options[:exclude] || []).map do |path|
56
+ case path
57
+ when Regexp; path
58
+ else Regexp.new(path.to_s, Regexp::IGNORECASE)
59
+ end
60
+ end
61
+ inside options[:'base-path'] do
62
+ @files = paths.
63
+ map {|p| File.directory?(p) ? "#{p}/**/*" : p }.
64
+ map {|p| p.include?("*") ? Dir[p].sort_by {|f| f.length } : p }.flatten.
65
+ reject {|p| !File.file?(p) || excluded.any? {|re| p =~ re } }
66
+ end
67
+ end
68
+
69
+ def parse_in_order
70
+ @docs = {}
71
+
72
+ while file = @files.shift
73
+ language =
74
+ if detected_lang = Pygments::Lexer.find_by_extname(File.extname(file))
75
+ detected_lang[:name]
76
+ else
77
+ options[:language]
78
+ end
79
+ data = File.read(File.join(options['base-path'], file))
80
+
81
+ opts = {
82
+ :language => language,
83
+ :only_tagged => options[:'only-tagged'],
84
+ :only_single => options[:'only-single'],
85
+ :only_multi => options[:'only-multi']
86
+ }.reject { |k, v| v.nil? }
87
+
88
+ # Extract relevant comments out of file
89
+ @docs[file] = Roxie.extract(data, opts)
90
+ end
91
+ end
92
+
93
+ def generate_output!
94
+ create_file options[:output] do
95
+ JSON.pretty_generate @docs
96
+ end
97
+ end
98
+
99
+ end
100
+
101
+ end
102
+ end
data/lib/roxie/cli.rb ADDED
@@ -0,0 +1,61 @@
1
+ require 'roxie'
2
+ require 'thor'
3
+ require 'thor/group'
4
+
5
+ # Include the core CLI items
6
+ Dir[File.expand_path('../cli/*.rb', __FILE__)].each { |f| require f }
7
+
8
+ module Roxie
9
+ module CLI
10
+
11
+ class Base < Thor
12
+
13
+ map ['-v', '--version'] => :version, 'd' => :doc
14
+
15
+ class << self
16
+ alias :old_register :register
17
+ def register(klass, subcommand_name, usage, description, options={})
18
+ # Keep track of 'subgroups' as well as subcommands
19
+ self.subgroups << subcommand_name.to_s if klass <= Thor::Group
20
+ old_register(klass, subcommand_name, usage, description, options)
21
+ end
22
+
23
+ def subgroups
24
+ @subgroups ||= from_superclass(:subgroups, [])
25
+ end
26
+
27
+ alias :old_task_help :task_help
28
+ def task_help(shell, command_name)
29
+ meth = normalize_task_name(command_name)
30
+ if subgroups.include?(meth)
31
+ # Make sure to namespace all subcommands appropriately
32
+ klass = Thor::Util.find_by_namespace(meth)
33
+ klass.help(shell)
34
+ else
35
+ old_task_help(shell, command_name)
36
+ end
37
+ end
38
+ alias :command_help :task_help
39
+ end
40
+
41
+ default_task :doc
42
+
43
+ desc "version", "Prints Roxie's version information"
44
+ def version
45
+ say "Roxie #{Roxie::VERSION}"
46
+ klass, task = Thor::Util.find_class_and_command_by_namespace("doc:doc")
47
+ end
48
+
49
+ def method_missing(meth, *args)
50
+ # Assume the user typed in a file input for the
51
+ # :doc command
52
+ Doc.start(args.unshift(meth.to_s), :shell => self.shell)
53
+ end
54
+
55
+ end
56
+
57
+ # Subcommands
58
+ Base.register Doc, 'doc', "doc [INPUT]", "Generates documentation from input files"
59
+
60
+ end
61
+ end
@@ -0,0 +1,122 @@
1
+ require 'strscan'
2
+
3
+ module Roxie
4
+
5
+ # Extract comments and tags from text
6
+ class Extractor
7
+
8
+ def self.default_options
9
+ {
10
+ :language => 'Ruby',
11
+ :only_tagged => false,
12
+ :only_single => false,
13
+ :only_multi => false
14
+ }
15
+ end
16
+
17
+ def initialize(options = {})
18
+ @options = self.class.default_options.merge(options)
19
+ unless @language = LANGUAGES[@options[:language]]
20
+ logger.warn "Roxie doesn't understand #{@options[:language]}"
21
+ end
22
+ end
23
+
24
+ # Read up to 100KB
25
+ BYTE_LIMIT = 100_000
26
+
27
+ def extract(text)
28
+ @code = text.dup
29
+ @scanner = StringScanner.new(@code)
30
+
31
+ # Extract comments from text
32
+ extract_comments
33
+ end
34
+
35
+ private
36
+
37
+ TAG = /^@(\w+)[ \t]*(.*$)/.freeze
38
+
39
+ def matchers
40
+ @_matchers ||= @language[:matchers]
41
+ end
42
+
43
+ def extract_comments
44
+ comments = []
45
+ until @scanner.eos?
46
+ break if @scanner.pos >= BYTE_LIMIT
47
+
48
+ # Skip over shebangs and encoding information
49
+ if @scanner.scan(/^#!.+$/) || @scanner.scan(/^#.*coding[=:]\s*[-\w.]+.*$/)
50
+ # just consume it
51
+ elsif comment_block =
52
+ # Single-line comment
53
+ if !@options[:only_multi] && matchers[:start_single] &&
54
+ @scanner.bol? && @scanner.scan(matchers[:start_single])
55
+ extract_single
56
+ # Multi-line comment
57
+ elsif !@options[:only_single] && matchers[:start_multi] &&
58
+ @scanner.scan(matchers[:start_multi])
59
+ extract_multi
60
+ end
61
+
62
+ # Now that we have our block, let's strip out our tags and
63
+ # add it to our list
64
+ tags = extract_tags!(comment_block)
65
+ comment = {
66
+ :description => comment_block.join("\n").strip,
67
+ :tags => tags
68
+ }
69
+
70
+ # Scan until the next non-whitespace character to get our line #
71
+ @scanner.scan_until(/(?=\S)/)
72
+ comment[:line] = @code[0..@scanner.pos].count("\n") + 1 unless @scanner.eos?
73
+
74
+ comments << comment unless @options[:only_tagged] && comment[:tags].empty?
75
+ else
76
+ # Skip line
77
+ @scanner.skip_until(/\n|\Z/)
78
+ end
79
+ end
80
+
81
+ comments
82
+ end
83
+
84
+ def extract_single
85
+ block = []
86
+ loop do
87
+ block << @scanner.scan_until(/\n|\Z/).rstrip
88
+ break unless @scanner.scan(matchers[:start_single])
89
+ end
90
+ block
91
+ end
92
+
93
+ def extract_multi
94
+ block = @scanner.scan_until(matchers[:end_multi_with])
95
+ @scanner.skip_until(matchers[:end_multi])
96
+
97
+ block.split("\n").map do |line|
98
+ matchers[:middle_multi] ? line.sub(matchers[:middle_multi], '') : line
99
+ end
100
+ end
101
+
102
+ def extract_tags!(block)
103
+ tags = []
104
+ block.reverse_each do |line|
105
+ if match = line.match(TAG)
106
+ tag = {
107
+ :type => match[1],
108
+ :description => match[2].strip
109
+ }
110
+ tags << tag
111
+
112
+ # Remove this line from the comment block if we match
113
+ block.delete line
114
+ end
115
+ end
116
+
117
+ tags.reverse
118
+ end
119
+
120
+ end
121
+
122
+ end
@@ -0,0 +1,172 @@
1
+ # All languages known to Roxie.
2
+ #
3
+ # Languages should be looked up by their respective
4
+ # Pygments::Lexer name.
5
+ #
6
+ # Please keep alphabetized.
7
+
8
+ ActionScript 3:
9
+ single: "//"
10
+
11
+ AppleScript:
12
+ single: "--"
13
+
14
+ Bash:
15
+ single: "#"
16
+
17
+ Batchfile:
18
+ single: "@?rem"
19
+
20
+ C#:
21
+ single: "//"
22
+ multi:
23
+ start: "/**"
24
+ middle: "*"
25
+ end: "*/"
26
+
27
+ C++:
28
+ single: "//"
29
+ multi:
30
+ start: "/**"
31
+ middle: "*"
32
+ end: "*/"
33
+
34
+ Clojure:
35
+ single: ";"
36
+
37
+ CMake:
38
+ single: "#"
39
+
40
+ CoffeeScript:
41
+ single: "#"
42
+ multi:
43
+ start: "###"
44
+ end: "###"
45
+
46
+ Common Lisp:
47
+ single: ";"
48
+
49
+ D:
50
+ single: "//"
51
+ multi:
52
+ start: "/**"
53
+ middle: "*"
54
+ end: "*/"
55
+
56
+ Delphi:
57
+ single: "//"
58
+
59
+ Erlang:
60
+ single: "%"
61
+
62
+ Go:
63
+ single: "//"
64
+ multi:
65
+ start: "/**"
66
+ middle: "*"
67
+ end: "*/"
68
+
69
+ Haskell:
70
+ single: "--"
71
+
72
+ HTML:
73
+ multi:
74
+ start: "<!--"
75
+ end: "-->"
76
+
77
+ INI:
78
+ single: ";"
79
+
80
+ Java:
81
+ single: "//"
82
+ multi:
83
+ start: "/**"
84
+ middle: "*"
85
+ end: "*/"
86
+
87
+ JavaScript:
88
+ single: "//"
89
+ multi:
90
+ start: "/**"
91
+ middle: "*"
92
+ end: "*/"
93
+
94
+ Lua:
95
+ single: "--"
96
+
97
+ Nemerle:
98
+ single: "//"
99
+
100
+ Objective-C:
101
+ single: "//"
102
+ multi:
103
+ start: "/**"
104
+ middle: "*"
105
+ end: "*/"
106
+
107
+ Objective-C++:
108
+ single: "//"
109
+ multi:
110
+ start: "/**"
111
+ middle: "*"
112
+ end: "*/"
113
+
114
+ Perl:
115
+ single: "#"
116
+
117
+ PHP:
118
+ single: "//"
119
+
120
+ Python:
121
+ single: "#"
122
+
123
+ REBOL:
124
+ single: ";"
125
+
126
+ Ruby:
127
+ single: "#"
128
+ multi:
129
+ start: "=begin"
130
+ end: "=end"
131
+
132
+ Rust:
133
+ single: "//"
134
+ multi:
135
+ start: "/**"
136
+ middle: "*"
137
+ end: "*/"
138
+
139
+ Sass:
140
+ single: "//"
141
+
142
+ Scala:
143
+ single: "//"
144
+ multi:
145
+ start: "/**"
146
+ middle: "*"
147
+ end: "*/"
148
+
149
+ SCSS:
150
+ single: "//"
151
+ multi:
152
+ start: "/**"
153
+ middle: "*"
154
+ end: "*/"
155
+
156
+ SQL:
157
+ single: "--"
158
+
159
+ TeX:
160
+ single: "%"
161
+
162
+ Vala:
163
+ single: "//"
164
+ multi:
165
+ start: "/**"
166
+ middle: "*"
167
+ end: "*/"
168
+
169
+ XML:
170
+ multi:
171
+ start: "<!--"
172
+ end: "-->"
@@ -0,0 +1,42 @@
1
+ require 'roxie/cli'
2
+ require 'rake'
3
+ require 'rake/tasklib'
4
+
5
+ module Roxie
6
+ module Rake
7
+
8
+ class Task < ::Rake::TaskLib
9
+
10
+ attr_accessor :name
11
+
12
+ attr_accessor :options
13
+
14
+ attr_accessor :files
15
+
16
+ attr_accessor :before
17
+
18
+ attr_accessor :after
19
+
20
+ def initialize(name = :roxie)
21
+ @name = name
22
+ @options = []
23
+ @files = []
24
+
25
+ yield self if block_given?
26
+
27
+ define
28
+ end
29
+
30
+ def define
31
+ desc "Generate documentation with Roxie"
32
+ task(name) do
33
+ before.call if before.is_a?(Proc)
34
+ Roxie::CLI::Doc.start options + files.to_a
35
+ after.call if after.is_a?(Proc)
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,3 @@
1
+ module Roxie
2
+ VERSION = "0.0.2"
3
+ end
data/lib/roxie.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'roxie/version'
2
+ require 'roxie/extractor'
3
+ require 'yaml'
4
+
5
+ module Roxie
6
+
7
+ # The root path for Roxie's source libraries
8
+ ROOT = File.expand_path(File.dirname(__FILE__))
9
+
10
+ # Languages that Roxie understands
11
+ LANGUAGES = YAML.load_file(File.join(ROOT, 'roxie', 'languages.yml')).each do |name, lang|
12
+ # Generate matchers for the language
13
+ match = {}
14
+ match[:start_single] = Regexp.new("^\s*#{Regexp.escape(lang['single'])} ") if lang['single']
15
+ if lang['multi']
16
+ match[:start_multi] = Regexp.new("^\s*#{Regexp.escape(lang['multi']['start'])}[ ]?") if lang['multi']['start']
17
+ match[:middle_multi] = Regexp.new("^\s*#{Regexp.escape(lang['multi']['middle'])}[ ]?") if lang['multi']['middle']
18
+ if lang['multi']['end']
19
+ match[:end_multi] = Regexp.new("#{Regexp.escape(lang['multi']['end'])}")
20
+ match[:end_multi_with] = Regexp.new("(?=#{Regexp.escape(lang['multi']['end'])}.*$)")
21
+ end
22
+ end
23
+
24
+ lang[:matchers] ||= {}
25
+ lang[:matchers].merge!(match)
26
+ end.freeze
27
+
28
+ module_function
29
+
30
+ # Extract comments from text
31
+ def extract(text, options = {})
32
+ Extractor.new(options).extract(text)
33
+ end
34
+
35
+ end
data/roxie.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'roxie/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "roxie"
9
+ spec.version = Roxie::VERSION
10
+ spec.authors = ["Maxwell Barvian"]
11
+ spec.email = ["max@barvian.me"]
12
+ spec.description = %q{Yet another documentation generator}
13
+ spec.summary = %q{Dox-inspired documentation generator that outputs template-less JSON}
14
+ spec.homepage = "https://github.com/mbarvian/roxie"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files`.split($/)
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.required_ruby_version = ">= 1.9.2"
23
+
24
+ # Language detection
25
+ spec.add_dependency "pygments.rb", "~> 0.5.1"
26
+
27
+ # CLI
28
+ spec.add_dependency "thor", "~> 0.18.1"
29
+ end
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ def file(name)
4
+ File.read(File.join(Roxie::ROOT, 'roxie', name))
5
+ end
6
+
7
+ def assert_sorted(list)
8
+ previous = nil
9
+ list.each do |item|
10
+ if previous
11
+ expect(previous).to be < item
12
+ end
13
+ previous = item
14
+ end
15
+ end
16
+
17
+ describe "Support languages" do
18
+ it "should be listed alphabetically" do
19
+ languages = []
20
+ file("languages.yml").lines.each do |line|
21
+ if line =~ /^([a-zA-Z][\w+\-\# ]*):$/
22
+ languages << $1.downcase
23
+ end
24
+ end
25
+ assert_sorted languages
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ require 'simplecov'
2
+ SimpleCov.root(File.expand_path(File.dirname(__FILE__) + '/..'))
3
+
4
+ require 'coveralls'
5
+ Coveralls.wear!
6
+
7
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
8
+ require 'roxie'
9
+ puts Roxie
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: roxie
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Maxwell Barvian
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pygments.rb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.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.5.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.18.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 0.18.1
41
+ description: Yet another documentation generator
42
+ email:
43
+ - max@barvian.me
44
+ executables:
45
+ - roxie
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .coveralls.yml
50
+ - .editorconfig
51
+ - .gitignore
52
+ - .travis.yml
53
+ - Gemfile
54
+ - LICENSE
55
+ - README.md
56
+ - Rakefile
57
+ - bin/roxie
58
+ - features/cli.feature
59
+ - features/generator.feature
60
+ - features/step_definitions/generator_steps.rb
61
+ - features/support/env.rb
62
+ - lib/roxie.rb
63
+ - lib/roxie/cli.rb
64
+ - lib/roxie/cli/doc.rb
65
+ - lib/roxie/extractor.rb
66
+ - lib/roxie/languages.yml
67
+ - lib/roxie/rake/task.rb
68
+ - lib/roxie/version.rb
69
+ - roxie.gemspec
70
+ - spec/anal_retentive_spec.rb
71
+ - spec/spec_helper.rb
72
+ homepage: https://github.com/mbarvian/roxie
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: 1.9.2
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.0.3
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Dox-inspired documentation generator that outputs template-less JSON
96
+ test_files:
97
+ - features/cli.feature
98
+ - features/generator.feature
99
+ - features/step_definitions/generator_steps.rb
100
+ - features/support/env.rb
101
+ - spec/anal_retentive_spec.rb
102
+ - spec/spec_helper.rb