dionysus 1.0.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +16 -9
- data/README.md +31 -34
- data/Rakefile +16 -79
- data/description.md +1 -0
- data/lib/dionysus.rb +3 -22
- data/lib/dionysus/configuration_callbacks.rb +93 -0
- data/lib/dionysus/redcarpet/includes.rb +41 -0
- data/lib/dionysus/string/version_match.rb +8 -0
- data/lib/dionysus/travisci/gemfile_generator.rb +67 -0
- data/lib/dionysus/version.rb +3 -0
- data/spec/lib/dionysus_spec.rb +18 -0
- data/spec/lib/string/version_match_spec.rb +17 -0
- data/spec/spec_helper.rb +17 -6
- metadata +54 -307
- data/.document +0 -5
- data/.gitignore +0 -22
- data/.rspec +0 -1
- data/Gemfile.lock +0 -41
- data/VERSION +0 -1
- data/dionysus.gemspec +0 -121
- data/lib/dionysus/configuration.rb +0 -200
- data/lib/dionysus/digest.rb +0 -135
- data/lib/dionysus/rdoc/markdown.rb +0 -64
- data/lib/dionysus/rdoc/no_markup.rb +0 -56
- data/lib/dionysus/security.rb +0 -3
- data/lib/dionysus/security/password_salt.rb +0 -138
- data/lib/dionysus/security/string.rb +0 -126
- data/lib/dionysus/string.rb +0 -48
- data/lib/dionysus/version_string.rb +0 -96
- data/spec/configuration_spec.rb +0 -176
- data/spec/digest_spec.rb +0 -183
- data/spec/dionysus_spec.rb +0 -8
- data/spec/password_salt_spec.rb +0 -169
- data/spec/string_security_spec.rb +0 -204
- data/spec/string_spec.rb +0 -46
- data/spec/version_string_spec.rb +0 -83
data/Gemfile
CHANGED
@@ -1,13 +1,20 @@
|
|
1
|
-
source
|
1
|
+
source "http://rubygems.org"
|
2
2
|
|
3
|
-
|
4
|
-
gem
|
3
|
+
group :development, :test do
|
4
|
+
gem "rake", "~> 0.9.2"
|
5
|
+
gem "rspec", "~> 2.10.0"
|
6
|
+
end
|
5
7
|
|
6
8
|
group :development do
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
gem
|
9
|
+
gem "yard", "~> 0.8.2"
|
10
|
+
gem "redcarpet", "~> 2.1.1"
|
11
|
+
end
|
12
|
+
|
13
|
+
group :test do
|
14
|
+
gem "shoulda-matchers", "~> 1.2.0"
|
15
|
+
gem "mocha", "~> 0.11.4"
|
16
|
+
gem "simplecov", "~> 0.6.4", :require => false
|
13
17
|
end
|
18
|
+
|
19
|
+
# Specify core dependencies in core.gemspec
|
20
|
+
gemspec
|
data/README.md
CHANGED
@@ -1,58 +1,55 @@
|
|
1
|
-
Dionysus
|
2
|
-
========
|
1
|
+
# Dionysus
|
3
2
|
|
4
|
-
|
3
|
+
<<< description.md
|
5
4
|
|
6
5
|
> Dionysus or Dionysos (pronounced /ˌdaɪ.ɵˈnaɪsəs/; Greek: Διόνυσος or
|
7
6
|
> Διώνυσος) is the ancient Greek god of wine, the inspirer of ritual madness
|
8
7
|
> and ecstasy, and a major figure of Greek mythology.
|
9
8
|
> [Wikipedia: Dionysus (2010/03/15)](http://en.wikipedia.org/wiki/Dionysus)
|
10
9
|
|
11
|
-
|
12
|
-
------------
|
10
|
+
**GitHub** http://github.com/tekwiz/dionysus
|
13
11
|
|
14
|
-
|
12
|
+
**Issues** http://github.com/tekwiz/dionysus/issues
|
15
13
|
|
16
|
-
|
17
|
-
|
14
|
+
**Travis-CI** http://travis-ci.org/tekwiz/dionysus
|
15
|
+
[![Build Status](https://secure.travis-ci.org/tekwiz/dionysus.png?branch=master)](http://travis-ci.org/tekwiz/dionysus)
|
18
16
|
|
19
|
-
|
17
|
+
**Docs** http://rubydoc.info/gems/dionysus
|
20
18
|
|
21
|
-
|
22
|
-
-----
|
19
|
+
**RubyGems** http://rubygems.org/gems/dionysus
|
23
20
|
|
24
|
-
|
21
|
+
## Requirements
|
25
22
|
|
26
|
-
|
27
|
-
---------
|
23
|
+
* ActiveSupport 3.1 or 3.2
|
28
24
|
|
29
|
-
|
30
|
-
* [SDocs](http://tekwiz.github.com/dionysus)
|
31
|
-
* [Wiki on Github](http://wiki.github.com/tekwiz/dionysus/)
|
32
|
-
* [Issues Tracker on Github](http://github.com/tekwiz/dionysus/issues)
|
25
|
+
##Installation
|
33
26
|
|
34
|
-
|
35
|
-
-----------------
|
27
|
+
$ gem install dionysus
|
36
28
|
|
37
|
-
|
29
|
+
or add to your Gemfile:
|
38
30
|
|
39
|
-
|
31
|
+
gem "dionysus"
|
40
32
|
|
41
|
-
|
42
|
-
|
33
|
+
and
|
34
|
+
|
35
|
+
$ bundle install
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
Add dionysus to your Gemfile:
|
43
40
|
|
44
|
-
|
45
|
-
* Make your feature addition or bug fix.
|
46
|
-
* Add tests for it. This is important so I don't break it in a
|
47
|
-
future version unintentionally.
|
48
|
-
* Commit, do not mess with rakefile, version, or history.
|
49
|
-
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
50
|
-
* Send me a pull request. Bonus points for topic branches.
|
41
|
+
gem "dionysus"
|
51
42
|
|
52
|
-
|
53
|
-
|
43
|
+
Then, you'll need to require each file/module as you need them. Dionysus is setup *à la carte*
|
44
|
+
since parts are bound to conflict with something you're using at some point.
|
45
|
+
|
46
|
+
## Contributing
|
47
|
+
|
48
|
+
This project is intended to be a **very** eclectic mix of helpful tools, so please feel free to send pull requests. That said, make **absolutely sure** your modifications are well tested. The hodge-podge nature of this project may make it prone to issues, so no code will be pulled-in that is not __fully_tested__.
|
49
|
+
|
50
|
+
-----------------------------
|
54
51
|
|
55
|
-
Copyright
|
52
|
+
Copyright 2012 Travis D. Warlick, Jr.
|
56
53
|
|
57
54
|
Licensed under the Apache License, Version 2.0 (the "License");
|
58
55
|
you may not use this file except in compliance with the License.
|
data/Rakefile
CHANGED
@@ -1,90 +1,27 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
begin
|
4
|
-
Bundler.setup(:default, :development)
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
10
|
-
require 'rake'
|
11
|
-
|
12
|
-
require 'jeweler'
|
13
|
-
Jeweler::Tasks.new do |gem|
|
14
|
-
gem.name = "dionysus"
|
15
|
-
gem.summary = %Q{A helpful set of utility classes, generators, and command-line tools.}
|
16
|
-
gem.email = "warlickt@operissystems.com"
|
17
|
-
gem.homepage = "http://github.com/tekwiz/dionysus"
|
18
|
-
gem.authors = ["Travis D. Warlick, Jr."]
|
19
|
-
gem.add_bundler_dependencies(:default, :development)
|
20
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
21
|
-
end
|
22
|
-
Jeweler::RubygemsDotOrgTasks.new
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require "pathname"
|
23
3
|
|
24
|
-
|
25
|
-
require 'rspec/core/rake_task'
|
26
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
27
|
-
spec.pattern = FileList['spec/**/*_spec.rb']
|
28
|
-
end
|
29
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
30
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
31
|
-
spec.rcov = true
|
32
|
-
spec.rcov_opts = '--exclude \/Library\/ --exclude /\.gem\/ --exclude /\.rvm\/ --exclude /\.bundle\/'
|
33
|
-
end
|
34
|
-
task :default => :spec
|
4
|
+
$rake_root = Pathname(__FILE__).expand_path.dirname
|
35
5
|
|
36
|
-
|
37
|
-
|
6
|
+
Dir.glob($rake_root.join("**/*.rake").to_s).each do |fn|
|
7
|
+
load fn
|
38
8
|
end
|
39
9
|
|
40
|
-
|
41
|
-
require 'sdoc'
|
42
|
-
require 'dionysus/rdoc/markdown'
|
43
|
-
require 'dionysus/rdoc/no_markup'
|
44
|
-
RDoc::NoMarkup.files.include('LICENSE', 'VERSION')
|
10
|
+
task :default => [:spec]
|
45
11
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
rdoc.title = "Dionysus #{version}"
|
51
|
-
rdoc.main = "README.md"
|
52
|
-
rdoc.rdoc_files.include('README.md', 'LICENSE', 'VERSION')
|
53
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
54
|
-
rdoc.rdoc_dir = 'docs'
|
55
|
-
end
|
56
|
-
|
57
|
-
task :clobber => [:clobber_rcov, :clobber_rdoc]
|
58
|
-
|
59
|
-
# Github pages tasks taken from the sdoc-helpers gem.
|
60
|
-
# http://github.com/defunkt/sdoc-helpers
|
61
|
-
# Author: Chris Wanstrath chris@ozmm.org
|
62
|
-
namespace :pages do
|
63
|
-
task :publish => [ :check_dirty, :rerdoc ] do
|
64
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
65
|
-
`git checkout gh-pages`
|
66
|
-
`ls -1 | grep -v docs | xargs rm -rf; mv docs/* .; rm -rf docs`
|
67
|
-
`git add .; git commit -m "update docs for version #{version}"; git push origin gh-pages`
|
68
|
-
`git checkout master`
|
69
|
-
puts :done
|
12
|
+
namespace :clobber do
|
13
|
+
desc "Clobber Gem Package (pkg/)"
|
14
|
+
task :pkg do
|
15
|
+
$rake_root.join("pkg").rmtree rescue nil
|
70
16
|
end
|
71
17
|
|
72
|
-
desc "
|
73
|
-
task :
|
74
|
-
|
75
|
-
`rm .git/index`
|
76
|
-
`ls -1 | grep -v docs | xargs rm -rf; mv docs/* .; rm -rf docs`
|
77
|
-
`git add .;git commit -m "create docs"; git push origin gh-pages`
|
78
|
-
`git checkout master`
|
79
|
-
puts :done
|
18
|
+
desc "Clobber Coverage (coverage/)"
|
19
|
+
task :coverage do
|
20
|
+
$rake_root.join("coverage").rmtree rescue nil
|
80
21
|
end
|
81
22
|
|
82
|
-
task :
|
83
|
-
if !`git status`.include?('nothing to commit')
|
84
|
-
abort "dirty index - not publishing!"
|
85
|
-
end
|
86
|
-
end
|
23
|
+
task :doc => ["doc:clobber"]
|
87
24
|
end
|
88
25
|
|
89
|
-
desc "
|
90
|
-
task :
|
26
|
+
desc "Clobber All"
|
27
|
+
task :clobber => ["doc:clobber", "clobber:pkg", "clobber:coverage"]
|
data/description.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
A helpful set of utility classes, generators, and command-line tools.
|
data/lib/dionysus.rb
CHANGED
@@ -1,31 +1,12 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'rubygems'
|
16
|
-
require 'bundler'
|
17
|
-
Bundler.setup
|
18
|
-
%w(hash class module).each { |v| require 'active_support/core_ext/'+v }
|
1
|
+
require 'dionysus/version'
|
19
2
|
|
20
3
|
##
|
21
|
-
#
|
4
|
+
# <<< description.md
|
22
5
|
#
|
23
6
|
# Dionysus is setup *à la carte* since parts are bound to conflict with
|
24
7
|
# something you're using at some point. This means that if you need something,
|
25
8
|
# you *must* require it. See the documentation for instructions on what you
|
26
9
|
# should require (this is always within the first few lines).
|
27
10
|
module Dionysus
|
28
|
-
|
29
|
-
VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).strip
|
11
|
+
|
30
12
|
end
|
31
|
-
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'set'
|
2
|
+
require 'forwardable'
|
3
|
+
require 'active_support/concern'
|
4
|
+
require 'active_support/callbacks'
|
5
|
+
require 'active_support/core_ext/module/aliasing'
|
6
|
+
require 'active_support/core_ext/array/extract_options'
|
7
|
+
|
8
|
+
module Dionysus
|
9
|
+
module ConfigurationCallbacks
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
included do
|
13
|
+
# TODO validate self.config inherits from AS::Configurable::Configuration and is an anonymous class
|
14
|
+
self.config.class.send(:include, Configuration)
|
15
|
+
end
|
16
|
+
|
17
|
+
module Configuration
|
18
|
+
extend ActiveSupport::Concern
|
19
|
+
include ActiveSupport::Callbacks
|
20
|
+
|
21
|
+
included do
|
22
|
+
alias_method :_set, :[]= # preserve the original #[] method
|
23
|
+
protected :_set # make it protected
|
24
|
+
extend Forwardable
|
25
|
+
end
|
26
|
+
|
27
|
+
def respond_to?(name, include_private=false)
|
28
|
+
if name.to_s =~ /^_/
|
29
|
+
include_private ? method_defined?(name) : public_method_defined?(name)
|
30
|
+
else
|
31
|
+
true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def before(get_set, key, *args, &block)
|
36
|
+
name = _setup_for_callback(get_set, key)
|
37
|
+
self.class.set_callback(name, :before, *args, &block)
|
38
|
+
end
|
39
|
+
|
40
|
+
def after(get_set, key, *args, &block)
|
41
|
+
name = _setup_for_callback(get_set, key)
|
42
|
+
self.class.set_callback(name, :after, *args, &block)
|
43
|
+
end
|
44
|
+
|
45
|
+
def around(get_set, key, *args, &block)
|
46
|
+
name = _setup_for_callback(get_set, key)
|
47
|
+
self.class.set_callback(name, :around, *args, &block)
|
48
|
+
end
|
49
|
+
|
50
|
+
def forward(get_set, key, to_accessor, to_method)
|
51
|
+
case get_set.to_sym
|
52
|
+
when :get
|
53
|
+
self.class.def_delegator(to_accessor, to_method, key)
|
54
|
+
when :set
|
55
|
+
self.class.def_delegator(to_accessor, to_method, "#{key}=")
|
56
|
+
else
|
57
|
+
raise ArgumentError, "Invalid get_set parameter %p"%[get_set]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def _setup_for_callback(get_set, key)
|
64
|
+
key = key.to_sym
|
65
|
+
name = "#{get_set}_#{key}"
|
66
|
+
|
67
|
+
case get_set.to_sym
|
68
|
+
when :get
|
69
|
+
if method_defined?(key)
|
70
|
+
warn "Cannot setup callbacks for #{self}##{key}. Method already defined."
|
71
|
+
else
|
72
|
+
class_eval <<-EOS, __FILE__, __LINE__ + 1
|
73
|
+
def #{key}() run_callbacks(#{name.inspect}) { _get(#{key.inspect}) }; end
|
74
|
+
EOS
|
75
|
+
end
|
76
|
+
when :set
|
77
|
+
if method_defined?(:"#{key}=")
|
78
|
+
warn "Cannot setup callbacks for #{self}##{key}. Method already defined."
|
79
|
+
else
|
80
|
+
class_eval <<-EOS, __FILE__, __LINE__ + 1
|
81
|
+
def #{key}=(val) run_callbacks(#{name.inspect}) { _set(#{key.inspect}, val) }; end
|
82
|
+
EOS
|
83
|
+
end
|
84
|
+
else
|
85
|
+
raise ArgumentError, "Invalid get_set parameter %p"%[get_set]
|
86
|
+
end
|
87
|
+
|
88
|
+
self.class.define_callbacks(name)
|
89
|
+
return name
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'redcarpet'
|
3
|
+
require 'active_support/concern'
|
4
|
+
require 'active_support/core_ext/object/blank'
|
5
|
+
|
6
|
+
module Dionysus
|
7
|
+
module Redcarpet
|
8
|
+
module Includes
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
if method_defined?(:preprocess)
|
13
|
+
alias_method_chain :preprocess, :includes
|
14
|
+
else
|
15
|
+
alias_method :preprocess, :preprocess_with_includes
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def preprocess_with_includes(full_document)
|
20
|
+
lines = full_document.split($/)
|
21
|
+
lines.each_with_index do |ln, i|
|
22
|
+
if m = ln.match(/\A\s*<<<\s*(\S+)\s*\Z/)
|
23
|
+
path = Pathname.new(m[1])
|
24
|
+
if path.file?
|
25
|
+
newlines = path.readlines
|
26
|
+
newlines.collect! {|ln| ln.chomp}
|
27
|
+
newlines.shift while(newlines.first.blank?)
|
28
|
+
newlines.pop while(newlines.last.blank?)
|
29
|
+
lines[i] = newlines
|
30
|
+
else
|
31
|
+
warn "[WARNING] Cannot find path %s to include"%[path.to_s]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
lines.flatten.join("\n")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Redcarpet::Render::HTML.send(:include, Dionysus::Redcarpet::Includes)
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
|
3
|
+
module Dionysus
|
4
|
+
module TravisCI
|
5
|
+
class GemfileGenerator
|
6
|
+
def initialize(gemfile)
|
7
|
+
@definition = Bundler::Dsl.new
|
8
|
+
@definition.instance_eval(Bundler.read_file(gemfile), "Gemfile", 1)
|
9
|
+
end
|
10
|
+
|
11
|
+
def generate(filename, options={})
|
12
|
+
File.open(filename, "w") do |f|
|
13
|
+
f.puts %(source "http://rubygems.org")
|
14
|
+
|
15
|
+
@definition.dependencies.each do |dep|
|
16
|
+
next if exclude_by_group?(dep, :default, options[:without])
|
17
|
+
f.puts dependency_line(dep)
|
18
|
+
end
|
19
|
+
|
20
|
+
case options[:add]
|
21
|
+
when String
|
22
|
+
f.puts options[:add]
|
23
|
+
when Array
|
24
|
+
options[:add].each {|ln| f.puts ln}
|
25
|
+
else
|
26
|
+
raise "Invalid :add option: %p"%[options[:add]] if options[:add]
|
27
|
+
end
|
28
|
+
|
29
|
+
f.puts %(gemspec :path => "../")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def dependency_line(dep)
|
36
|
+
ln = [ %(gem "%s")%[dep.name] ]
|
37
|
+
|
38
|
+
ln << %("%s")%[dep.requirement]
|
39
|
+
|
40
|
+
groups = dep.groups.collect {|v| %(:#{v})}.join(", ")
|
41
|
+
ln << %(:group => [%s])%[groups]
|
42
|
+
|
43
|
+
if dep.autorequire == []
|
44
|
+
ln << %(:require => false)
|
45
|
+
elsif dep.autorequire
|
46
|
+
requires = dep.autorequire.collect {|s| %("#{s}")}.join(",")
|
47
|
+
ln << %(:require => [%s])%[requires]
|
48
|
+
end
|
49
|
+
|
50
|
+
if dep.source and dep.source.is_a?(Bundler::Source::Git)
|
51
|
+
ln << %(:git => "%s")%[dep.source.options["git"]]
|
52
|
+
ln << %(:branch => "%s")%[dep.source.options["branch"]]
|
53
|
+
elsif dep.source
|
54
|
+
raise "Unknown source type: %s"%[dep.source.class]
|
55
|
+
end
|
56
|
+
|
57
|
+
ln.join(", ")
|
58
|
+
end
|
59
|
+
|
60
|
+
def exclude_by_group?(dep, *without)
|
61
|
+
return false if without.nil? or without.empty?
|
62
|
+
without = without.compact.flatten
|
63
|
+
!(dep.groups & without).empty?
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|