scribbler 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ # uncomment this line if your project needs to run something other than `rake`:
6
+ # script: bundle exec rspec spec
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in automation.gemspec
4
+ gemspec
data/README.markdown ADDED
@@ -0,0 +1,69 @@
1
+ # Scribbler
2
+
3
+ [![TravisCI](https://secure.travis-ci.org/jphenow/scribbler.png "TravisCI")](http://travis-ci.org/jphenow/scribbler "Travis-CI Scribbler")
4
+
5
+ Scribbler is a little utility for simplifying logging across one application or more.
6
+ Currently it assists in:
7
+
8
+ * Dynamically defining methods for accessing the log files
9
+ * Centralized log method for file, message, and error checks
10
+ - Currently also able to notify NewRelic, abstraction and extension to come
11
+
12
+ ## Usage
13
+
14
+ In your Rails project add
15
+
16
+ gem scribbler
17
+
18
+ to your Gemfile and
19
+
20
+ bundle install
21
+
22
+ Then
23
+
24
+ rake scribbler:install # THIS DOESN'T WORK YET
25
+
26
+ You'll find your configuration options in `config/initializers/scribbler.rb`.
27
+ As an example, with this configuration file in a Rails app called `Blogger`:
28
+
29
+ Scribbler::Base.configure do
30
+ config.application_include = true
31
+ config.logs = %w[production delayed_job]
32
+ end
33
+
34
+ You are given a few methods for free. To get the production logfile location:
35
+
36
+ Blogger.production_log_location
37
+ # => <#Path: Rails.root.join('log', 'production.log')>
38
+
39
+ or
40
+
41
+ Scribbler::Base.production_log_location
42
+ # => <#Path: Rails.root.join('log', 'production.log')>
43
+
44
+ More importantly you're given access to a sweet `log` method:
45
+
46
+ # Notifies NewRelic and drops the message in log found at Blogger.production_log_location
47
+ Blogger.log :production, :error => e, :message => "#{e} broke stuff"
48
+ Scribbler::Base.log :production, :error => e, :message => "#{e} broke stuff"
49
+
50
+ # Only logs to log/delayed_job.log and doesn't notify NewRelic
51
+ Blogger.log :delayed_job, :message => "Successfully executed Delayed Job"
52
+ Scribbler::Base.log :delayed_job, :message => "Successfully executed Delayed Job"
53
+
54
+ # Doesn't notify NewRelic but gives the method access to the error and logs the message
55
+ # to the given logfile
56
+ Blogger.log 'production', :new_relic => false, :error => e, :message => "#{e} broke stuff"
57
+ Scribbler::Base.log 'production', :new_relic => false, :error => e, :message => "#{e} broke stuff"
58
+
59
+ # Logs to given file without using the fancy log methods
60
+ Blogger.log File.expand_path(File.join(File.dirname(__FILE__), 'logfile.log')), :message => "#{e} broke stuff"
61
+ Scribbler::Base.log File.expand_path(File.join(File.dirname(__FILE__), 'logfile.log')), :message => "#{e} broke stuff"
62
+
63
+ ## Todo
64
+
65
+ * More options in configure
66
+ * More testing
67
+ - Specifically New executable and cli stuff
68
+ * Make block available in log method for better extensibility
69
+ * Currently attempts to notify NewRelic if its there, abstract and allow custom services
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require "rspec/core/rake_task"
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ namespace :spec do
8
+ RSpec::Core::RakeTask.new(:docs) do |t|
9
+ t.rspec_opts = ["--format doc"]
10
+ end
11
+ end
12
+
13
+ task :default => :spec
data/bin/scribbler ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems' # ruby1.9 doesn't "require" it though
3
+ require 'thor'
4
+ require 'scribbler'
5
+
6
+ class ScribblerExecutable < Thor
7
+ desc "install", "Installs the necessary files for Scribbler (default: config/initializers/scribbler.rb)"
8
+ method_option :path, :aliases => "-p", :desc => "Specify a different path for the scribbler initialization"
9
+ def install
10
+ Scribbler::Executable.install(options)
11
+ end
12
+ end
13
+
14
+ ScribblerExecutable.start
data/lib/scribbler.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'active_support/all'
2
+ require 'scribbler/version'
3
+ require 'scribbler/configurator'
4
+ require 'scribbler/base'
5
+ require 'scribbler/includeables'
6
+ require 'scribbler/cli'
7
+ require 'scribbler/executable'
@@ -0,0 +1,105 @@
1
+ module Scribbler
2
+ # TODO not sure this'll work
3
+ delegate :configure, :to => :Base
4
+ delegate :log, :to => :Base
5
+ class Base
6
+ # Gets the path of this Gem
7
+ #
8
+ # Examples:
9
+ #
10
+ # Base.gem_path
11
+ # # => '/some/home/.rvm/gems/ruby-1.9.3-p125/gems/scribbler-0.0.1/'
12
+ #
13
+ # Returns String of the current gem's directory path
14
+ def self.gem_path
15
+ File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
16
+ end
17
+
18
+ # Gets all the paths to the template files in the gem's template directory
19
+ #
20
+ # Examples:
21
+ #
22
+ # Base.templates
23
+ # # => ['/some/home/.rvm/gems/ruby-1.9.3-p125/gems/scribbler-0.0.1/templates/1.rb',
24
+ # # '/some/home/.rvm/gems/ruby-1.9.3-p125/gems/scribbler-0.0.1/templates/2.rb]
25
+ #
26
+ # Returns Array of Strings of the gem's template files
27
+ def self.templates
28
+ Dir.glob(File.join(gem_path, 'templates', '*'))
29
+ end
30
+
31
+ # Gets the path to the default install directory. If Rails is present
32
+ # it will default to the Rails.root/config/initializers/. Otherwise
33
+ # it assumes its the $PWD/config/initializer. Should look at a cleaner
34
+ # abstraction of this
35
+ #
36
+ # Examples:
37
+ #
38
+ # Base.default_install_path
39
+ # # => '/some/home/projects/rails_app/config/initializers/'
40
+ #
41
+ # Returns String for best guess of a good install path
42
+ def self.default_install_path
43
+ begin
44
+ ::Rails.root.join 'config', 'initializers', ''
45
+ rescue NameError
46
+ File.join Dir.pwd, 'config', 'initializers', ''
47
+ end
48
+ end
49
+
50
+ # Rails style configure block with some cleanup afterwards. This is the
51
+ # main method that kicks off the module and is necessary for its operation
52
+ #
53
+ # &block - Block is class_eval'd to give total access to the config file.
54
+ # Most importantly giving access to `config` object
55
+ #
56
+ # Examples:
57
+ #
58
+ # Base.configure do
59
+ # config.logs = %w[log1 log2]
60
+ # config.application_include = true
61
+ # end
62
+ # # => Nothing
63
+ #
64
+ # Returns Nothing
65
+ # TODO Abstract the callbacks so that we can just add them where they're written
66
+ def self.configure(&block)
67
+ class_eval(&block)
68
+ Base.include_in_application
69
+ BaseIncluder.include_includeables
70
+ end
71
+
72
+ # Simply returns the configurator class.
73
+ #
74
+ # Examples:
75
+ #
76
+ # Base.config
77
+ # # => Scribbler::Configurator
78
+ #
79
+ # Returns the singleton configurator
80
+ def self.config
81
+ Scribbler::Configurator
82
+ end
83
+
84
+ private
85
+ # If the config agrees, attempt to include our special methods
86
+ # in the main application object.
87
+ #
88
+ # Example:
89
+ #
90
+ # Base.include_in_application
91
+ # # => Nothing
92
+ #
93
+ # Returns Nothing
94
+ # TODO Allow config to define where we send the include
95
+ def self.include_in_application
96
+ if config.application_include
97
+ begin
98
+ ::Rails.application.class.parent.send :include, Includeables
99
+ rescue NameError
100
+ nil
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,95 @@
1
+ module Scribbler
2
+ class CLI
3
+ # Run a shell command and output clean text explaining what happened
4
+ #
5
+ # command - Shell command to run
6
+ # poptions - Set of options to alter default behavior
7
+ # :output - Disable default out of the command (default: true)
8
+ #
9
+ # Examples:
10
+ #
11
+ # CLI.run_command('pwd')
12
+ # # No output, because no pwd association yet
13
+ # # => '/some/dir'
14
+ #
15
+ # CLI.run_command('cp x y')
16
+ # # Copying files
17
+ # # => nothing
18
+ #
19
+ # CLI.run_command('cp x y', :output => false)
20
+ # # => nothing
21
+ #
22
+ # Returns the backtick return of the command
23
+ def self.run_command(command, poptions={})
24
+ options = {:output => true}.merge(poptions)
25
+ output command if options[:output]
26
+ `#{command}`
27
+ end
28
+
29
+ # Central method for outputting text. Will serve
30
+ # as a central location for changing how Scribbler outputs
31
+ #
32
+ # text - Text to output
33
+ #
34
+ # Examples:
35
+ #
36
+ # CLI.say "Output stuff"
37
+ # # "Output stuff"
38
+ # # => "Output stuff"
39
+ #
40
+ # Returns whatever `puts` command returns
41
+ def self.say(text)
42
+ puts text
43
+ end
44
+
45
+ # Copy a list of files to one location with one output
46
+ # for the whole copy
47
+ #
48
+ # files - List of strings representing files to be copied
49
+ # destination - Directory to send the files
50
+ #
51
+ # Examples:
52
+ #
53
+ # CLI.mass_copy(['/etc/a.file', 'etc/b.file'], '/tmp')
54
+ # # "Copying files"
55
+ # # => Nothing
56
+ #
57
+ # Returns Nothing
58
+ def self.mass_copy(files, destination)
59
+ output 'cp'
60
+ files.each do |file|
61
+ run_command "cp #{file} #{destination}", :output => false
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ # Get the command and try to output a human description
68
+ # of what's happening
69
+ #
70
+ # command - Whole command that we're finding output for
71
+ #
72
+ # Examples:
73
+ #
74
+ # CLI.output 'cp x y'
75
+ # # "Copying files"
76
+ # # => "Copying files"
77
+ #
78
+ # CLI.output 'mkdir /a/dir'
79
+ # # "Checking necessary directories are in place"
80
+ # # => "Checking necessary directories are in place"
81
+ #
82
+ # Returns Nothing
83
+ def self.output(command)
84
+ final_out = []
85
+ pieces = command.split(' ')
86
+ case pieces.first
87
+ when 'mkdir'
88
+ final_out << "Checking necessary directories are in place"
89
+ when 'cp'
90
+ final_out << "Coping files"
91
+ end
92
+ say final_out.join ' '
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,15 @@
1
+ module Scribbler
2
+ class Configurator
3
+ class << self
4
+ attr_accessor :logs, :application_include
5
+ end
6
+
7
+ def self.logs
8
+ @logs ||= []
9
+ end
10
+
11
+ def self.application_include
12
+ @application_include || false
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ module Scribbler
2
+ class Executable
3
+ # Runs installer, makes dirs and copy's template files
4
+ #
5
+ # options - Options from command in shell
6
+ # :path - changes the path its installing config files too
7
+ #
8
+ def self.install(options={})
9
+ install_path = options[:path] || Base.default_install_path
10
+ CLI.run_command "mkdir -p #{install_path}"
11
+ CLI.mass_copy Base.templates, install_path
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,88 @@
1
+ module Scribbler
2
+ class BaseIncluder # I don't love this
3
+ # Wonky way of allowing Base to include the Includeables.
4
+ # Receives require errors with this currently.
5
+ #
6
+ # Examples:
7
+ #
8
+ # BaseIncluder.include_includeables
9
+ # # => Nothing
10
+ #
11
+ # Returns Nothing
12
+ # TODO Rework; there must be a more sane way of including these
13
+ def self.include_includeables
14
+ Scribbler::Base.send :include, Scribbler::Includeables
15
+ end
16
+ end
17
+
18
+ module Includeables
19
+ extend ActiveSupport::Concern
20
+
21
+ included do
22
+ build_methods
23
+ end
24
+
25
+ module ClassMethods
26
+ def build_methods
27
+ # Public: defines methods for log location. The first element
28
+ # defines the prefix for the method so "subseason" = subseason_log_location.
29
+ # The second element defines the name of the logfile so "subseason" =
30
+ # root_of_app/log/subseason.log
31
+ #
32
+ # Examples
33
+ #
34
+ # subseason_log_location
35
+ # # => #<Pathname:/path_to_ngin/log/subseason_copy_structure.log>
36
+ #
37
+ # Returns Pathname to log
38
+ Scribbler::Base.config.logs.each do |value|
39
+ define_singleton_method "#{value}_log_location" do
40
+ Rails.root.join('log', "#{value}.log")
41
+ #TODO remove dependence on Rails here
42
+ end
43
+ end
44
+ end
45
+
46
+ # Public: Save ourselves some repetition. Notifies error to NewRelic
47
+ # and drops given string into a given log.
48
+ #
49
+ # location - Either a pathname from the above method or symbol for an above
50
+ # method
51
+ # options - Hash of options for logging on Ngin
52
+ # :error - Error object, mostly for passing to NewRelic
53
+ # :message - Message to log in the actual file
54
+ # :new_relic - Notify NewRelic of the error (default: true)
55
+ #
56
+ # Examples
57
+ #
58
+ # log(Ngin.subseason_log_location, :error => e, :message => "Error message stuff", :new_relic => false)
59
+ #
60
+ # log(:subseason, :error => e, :message => "Error message stuff")
61
+ #
62
+ # log(:subseason, :message => "Logging like a bauss")
63
+ #
64
+ # Returns Nothing.
65
+ def log(location, options={})
66
+ begin
67
+ NewRelic::Agent.notice_error(options[:error]) if options[:error] and options[:new_relic] != false
68
+ rescue NameError
69
+ nil
70
+ end
71
+
72
+ real_location = location
73
+ if real_location.is_a?(Symbol) or real_location.is_a?(String)
74
+ real_method = location.to_s + "_log_location"
75
+ real_location = self.send(real_method) if self.respond_to? real_method
76
+ real_location = real_location.to_s
77
+ end
78
+
79
+ #if File.exists?(real_location) and options[:message].present?
80
+ if options[:message].present?
81
+ log = File.open(real_location, 'a')
82
+ log.puts options[:message]
83
+ log.close
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,3 @@
1
+ module Scribbler
2
+ VERSION = '0.0.1'
3
+ end
data/scribbler.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/scribbler/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Jon Phenow"]
6
+ gem.email = ["jon.phenow@tstmedia.com"]
7
+ gem.description = %q{}
8
+ gem.summary = %q{}
9
+ gem.homepage = ""
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "scribbler"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Scribbler::VERSION
17
+
18
+ gem.add_dependency 'activesupport'
19
+ gem.add_dependency 'thor'
20
+
21
+ gem.add_development_dependency 'rake'
22
+ gem.add_development_dependency 'rspec'
23
+ gem.add_development_dependency 'awesome_print'
24
+ end
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ module Scribbler
4
+ describe Base do
5
+ subject { Base }
6
+
7
+ before :each do
8
+ Object.send :remove_const, :Rails if defined?(Rails) == 'constant' && Rails.class == Class
9
+ end
10
+
11
+ it "should give me a configurator" do
12
+ subject.config.should == Scribbler::Configurator
13
+ end
14
+
15
+ describe "include_in_application" do
16
+ it "should attempt to include to the Rails app" do
17
+ module ::Rails; end
18
+ ::Rails.stub(:application => stub(:class => stub(:parent => stub(:send => true))))
19
+ subject.stub(:config => stub(:application_include => true))
20
+ subject.include_in_application.should be_true
21
+ end
22
+
23
+ it "should return nil because it caught the NameError of Rails not existing" do
24
+ subject.stub(:config => stub(:application_include => true))
25
+ subject.include_in_application.should be_nil
26
+ end
27
+
28
+ it "should not attempt to include in app if config is false" do
29
+ subject.stub(:config => stub(:application_include => false))
30
+ subject.include_in_application.should be_nil
31
+ end
32
+ end
33
+
34
+ describe "configure" do
35
+ it "kicks off the module and sends includes" do
36
+ subject.should_receive(:include_in_application).once
37
+ BaseIncluder.should_receive(:include_includeables).once
38
+ subject.configure do
39
+ end
40
+ end
41
+
42
+ it "sets some config variables" do
43
+ subject.configure do
44
+ config.application_include = true
45
+ end
46
+ subject.config.application_include.should be_true
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ module Scribbler
4
+ describe CLI do
5
+ subject { CLI }
6
+ let(:cp_command) { 'cp x y' }
7
+ describe '.run_command' do
8
+ it 'calls backtick command with output' do
9
+ subject.should_receive(:`).with(cp_command)
10
+ subject.should_receive(:output).with(cp_command)
11
+ subject.run_command cp_command
12
+ end
13
+
14
+ it 'calls backtick command without output' do
15
+ subject.should_receive(:`).with(cp_command)
16
+ subject.should_not_receive(:output)
17
+ subject.run_command cp_command, :output => false
18
+ end
19
+ end
20
+
21
+ describe '.say' do
22
+ it 'calls puts wth the param' do
23
+ subject.should_receive(:puts).with("Boom")
24
+ subject.say "Boom"
25
+ end
26
+ end
27
+
28
+ describe '.mass_copy' do
29
+ let(:file_list) { ["/tmp/fake_file_1", "/tmp/fake_file 2"] }
30
+ let(:destination) { "/tmp/destination" }
31
+ it "copies all the files to the destination" do
32
+ subject.should_receive(:output).with('cp').once
33
+ subject.should_receive(:run_command).with("cp #{file_list[0]} #{destination}", :output => false).once
34
+ subject.should_receive(:run_command).with("cp #{file_list[1]} #{destination}", :output => false).once
35
+ subject.mass_copy file_list, destination
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module Scribbler
4
+ describe Configurator do
5
+ subject { Configurator }
6
+ describe "logs" do
7
+ it "lets me set logs" do
8
+ new_logs = %w{1 2}
9
+ subject.logs = new_logs
10
+ subject.logs.should == new_logs
11
+ end
12
+ end
13
+
14
+ describe "application_include" do
15
+ it "get default" do
16
+ subject.application_include.should == false
17
+ end
18
+
19
+ it "should let me set it" do
20
+ subject.application_include = true
21
+ subject.application_include.should == true
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ module Scribbler
4
+ describe Executable do
5
+ subject { Executable }
6
+ describe '.install' do
7
+ it 'runs some CLI commands' do
8
+ CLI.should_receive(:run_command).with("mkdir -p #{Base.default_install_path}")
9
+ CLI.should_receive(:mass_copy).with(Base.templates, Base.default_install_path)
10
+ subject.install
11
+ end
12
+
13
+ let(:custom_path) { '/some/custom/path' }
14
+ it 'runs changes install path with given option' do
15
+ CLI.should_receive(:run_command).with("mkdir -p #{custom_path}")
16
+ CLI.should_receive(:mass_copy).with(Base.templates, custom_path)
17
+ subject.install :path => custom_path
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ module Scribbler
4
+ describe BaseIncluder do
5
+ end
6
+
7
+ describe Includeables do
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ module Scribbler
4
+ describe 'version' do
5
+ it "should have a version" do
6
+ Scribbler::VERSION.should_not be_nil
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Scribbler do
4
+ it "has a VERSION" do
5
+ Scribbler::VERSION.should_not be_nil
6
+ end
7
+ end
@@ -0,0 +1,29 @@
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
+ require 'scribbler'
8
+ require 'ap'
9
+ require 'active_support/inflector'
10
+ require 'active_support/concern'
11
+ Dir.glob(File.expand_path('../support/lib/**/*.rb', __FILE__)).each { |file| require file }
12
+ include SpecUtils
13
+
14
+ singletons = %w[Base CLI Configurator Executable]
15
+ RSpec.configure do |config|
16
+ config.treat_symbols_as_metadata_keys_with_true_values = true
17
+ config.run_all_when_everything_filtered = true
18
+ config.filter_run :focus
19
+ config.color = true
20
+ config.after(:all) do # Force a reset of some Classes
21
+ project_dir = ENV['BUNDLE_GEMFILE'].split('/')
22
+ project_dir.delete_at(-1)
23
+ project_dir = project_dir.join('/')
24
+ singletons.each do |s|
25
+ Scribbler.send(:remove_const, s)
26
+ load "#{project_dir}/lib/scribbler/#{s.downcase}.rb"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ Scribbler::Base.configure do
2
+ # This is like the Rails configure. This is actually a #class_eval.
3
+ # Unless you'd like to experiment with breaking things and battling dragons,
4
+ # please only use what we document here.
5
+ #
6
+ # Alter the path to the configuration yaml. If you alter those variables
7
+ # from this config, those here will take precedence. Don't confuse yourself
8
+ # by having thos options here and there.
9
+ #
10
+ # config.yaml_config_path = Rails.root.join('config', 'scribbler.yml')
11
+ #
12
+ # Include the log methods to the rails application. So, if you have an
13
+ # application called Blog you can do Blog.log(...), rather than
14
+ # Scribbler.log(...). Default: false
15
+ #
16
+ # config.application_include = true
17
+ end
@@ -0,0 +1,9 @@
1
+ module SpecUtils
2
+ def example_init
3
+ get_support_file('scribbler_example.rb')
4
+ end
5
+
6
+ def get_support_file(filename)
7
+ File.expand_path(File.join(File.dirname(__FILE__), '..', 'examples', filename))
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ Scribbler::Base.configure do
2
+ # This is like the Rails configure. This is actually a #class_eval.
3
+ # Unless you'd like to experiment with breaking things and battling dragons,
4
+ # please only use what we document here.
5
+ #
6
+ # Alter the path to the configuration yaml. If you alter those variables
7
+ # from this config, those here will take precedence. Don't confuse yourself
8
+ # by having thos options here and there.
9
+ #
10
+ # config.yaml_config_path = Rails.root.join('config', 'scribbler.yml')
11
+ #
12
+ # Include the log methods to the rails application. So, if you have an
13
+ # application called Blog you can do Blog.log(...), rather than
14
+ # Scribbler.log(...). Default: false
15
+ #
16
+ # config.application_include = true
17
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scribbler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jon Phenow
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: thor
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '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: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '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: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: awesome_print
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ description: ''
95
+ email:
96
+ - jon.phenow@tstmedia.com
97
+ executables:
98
+ - scribbler
99
+ extensions: []
100
+ extra_rdoc_files: []
101
+ files:
102
+ - .gitignore
103
+ - .travis.yml
104
+ - Gemfile
105
+ - Gemfile.lock
106
+ - README.markdown
107
+ - Rakefile
108
+ - bin/scribbler
109
+ - lib/scribbler.rb
110
+ - lib/scribbler/base.rb
111
+ - lib/scribbler/cli.rb
112
+ - lib/scribbler/configurator.rb
113
+ - lib/scribbler/executable.rb
114
+ - lib/scribbler/includeables.rb
115
+ - lib/scribbler/version.rb
116
+ - scribbler.gemspec
117
+ - spec/scribbler/base_spec.rb
118
+ - spec/scribbler/cli_spec.rb
119
+ - spec/scribbler/configurator_spec.rb
120
+ - spec/scribbler/executable_spec.rb
121
+ - spec/scribbler/includeables_spec.rb
122
+ - spec/scribbler/version_spec.rb
123
+ - spec/scribbler_spec.rb
124
+ - spec/spec_helper.rb
125
+ - spec/support/examples/scribbler_example.rb
126
+ - spec/support/lib/spec_utils.rb
127
+ - templates/scribbler.rb
128
+ homepage: ''
129
+ licenses: []
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ segments:
141
+ - 0
142
+ hash: -3576438178393875545
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ segments:
150
+ - 0
151
+ hash: -3576438178393875545
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 1.8.24
155
+ signing_key:
156
+ specification_version: 3
157
+ summary: ''
158
+ test_files:
159
+ - spec/scribbler/base_spec.rb
160
+ - spec/scribbler/cli_spec.rb
161
+ - spec/scribbler/configurator_spec.rb
162
+ - spec/scribbler/executable_spec.rb
163
+ - spec/scribbler/includeables_spec.rb
164
+ - spec/scribbler/version_spec.rb
165
+ - spec/scribbler_spec.rb
166
+ - spec/spec_helper.rb
167
+ - spec/support/examples/scribbler_example.rb
168
+ - spec/support/lib/spec_utils.rb