bini 0.5.5 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@ Gemfile.lock
2
2
  pkg/
3
3
  tmp/
4
4
  *.tmp
5
+ coverage/
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
1
  --color
2
- --format progress
2
+ --format documentation
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --no-private - LICENSE.txt CHANGELOG.md
data/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # 0.6.0
2
+ * renamed Bini.config to Bini::Config
3
+ * 100% test coverage.
4
+ * Documentation push.
5
+ * Dropped the daemonize code, will implement again later if I decide I need it.
6
+ * Dropped kruft like Bini#get_var
7
+ * Bini.version works as intended, providing a settable version to use in a given app.
8
+ * Options.parse! now takes an ARGV or falls back if nothing is provided.
data/Gemfile CHANGED
@@ -15,9 +15,11 @@ group :development do
15
15
  gem 'rb-inotify', :require => false
16
16
  gem 'rb-fsevent', :require => false
17
17
  gem 'rb-fchange', :require => false
18
+ gem 'redcarpet', :require => false
18
19
  end
19
20
 
20
21
  group :test do
21
22
  gem "rspec"
22
23
  gem "rake"
24
+ gem 'simplecov'
23
25
  end
data/Guardfile CHANGED
@@ -12,7 +12,8 @@ guard :rspec do
12
12
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
13
13
  watch('spec/spec_helper.rb') { "spec" }
14
14
  end
15
-
16
- # guard :yard do
17
- # watch(%r{^lib/(.+)\.rb$})
18
- # end
15
+ group :docs do
16
+ guard :yard do
17
+ watch(%r{^lib/(.+)\.rb$})
18
+ end
19
+ end
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A toolbox to help me rapidly build/deploy a cli. Filled with assumptions about how I think a CLI should behave.
4
4
 
5
- #### Build Status
5
+ ## Build Status
6
6
  <table border="0">
7
7
  <tr>
8
8
  <td>master</td>
@@ -50,10 +50,6 @@ Generated documentation is available via ```yard```.
50
50
 
51
51
  Examples and wiki coming if they are ever needed.
52
52
 
53
- ## Testing
54
-
55
- In theory, testing is complete, in practice it's a work in progress.
56
-
57
53
  ## Design philosophy
58
54
 
59
55
  If such a thing can be said.
@@ -69,3 +65,4 @@ If such a thing can be said.
69
65
  I don't have rules here, more guidelines.
70
66
 
71
67
  * Try to make the branch name clear, words like feature/issue/bug help.
68
+ * Tests.
data/lib/bini.rb CHANGED
@@ -4,9 +4,24 @@ require "bini/sash"
4
4
  require "bini/version"
5
5
  require "bini/filemagic"
6
6
 
7
+ # A collection of very small helpers that assist me in writing a CLI without
8
+ # getting in the way.
9
+ #
10
+ # Provides some dynamic attributes, they all behave the same and just hook into
11
+ # the defaults to provide non-nil results when needed.
12
+ #
13
+ # @!attribute long_name [rw]
14
+ # @return [String] An application name, useful if your app is named differently then your binary.
15
+ # @!attribute cache_dir [rw]
16
+ # @return [String] The directory to store any cache related files.
17
+ # @!attribute config_dir [rw]
18
+ # @return [String] The directory to store any config related files.
19
+ # @!attribute version [rw]
20
+ # @return [String] The version of the application, not of Bini.
7
21
  module Bini
8
22
  extend self
9
23
 
24
+ # A collection of sane defaults to be provided if the same attr is still nil.
10
25
  attr_accessor :defaults
11
26
 
12
27
  # I break this out so that I can use long name right away, this allows methods
@@ -19,51 +34,20 @@ module Bini
19
34
 
20
35
  # Dynamic attribute's based off the keys.
21
36
  def keys
22
- [:long_name, :cache_dir, :config_dir]
37
+ keys ||= [:long_name, :cache_dir, :config_dir, :version]
23
38
  end
24
39
 
25
40
  keys.each do |key|
26
41
  define_method(key) do
27
42
  v = instance_variable_get "@#{key}"
28
- return @defaults[key] if !v
29
- return v
43
+ return !v ? @defaults[key] : v
30
44
  end
31
45
  define_method("#{key}=".to_sym) do |dir|
32
46
  instance_variable_set "@#{key}", dir
33
47
  end
34
48
  end
35
49
 
36
- def pids
37
- a = Sys::ProcTable.ps.select{|x| x.cmdline =~ /.*#{@name}.*-[dD].*/}.map {|x| x.pid}
38
- a.delete $$
39
- return a if a.any?
40
- nil
41
- end
42
-
43
-
44
- def daemonize(*params, &block)
45
- if params[0] && !params[0][:multiple_pids] && pids
46
- puts :info, "#{@name} appears to be running (#{pids}), only one allowed, exiting."
47
- exit
48
- end
49
- puts :info, "Forking to background."
50
-
51
- Process.daemon
52
- block.call
53
- end
54
-
55
- def kill_daemon
56
- if !pids
57
- puts :fatal, "No pids found, exiting."
58
- end
59
-
60
- pids.each do |p|
61
- puts :info, "Killing #{p}"
62
- `kill -TERM #{p}`
63
- end
64
- end
65
-
66
- # Adds a rails style configure method (@benwoody's unknown contribution)
50
+ # Adds a rails style configure method.
67
51
  def configure
68
52
  yield self
69
53
  parameters
@@ -77,16 +61,9 @@ module Bini
77
61
  end
78
62
  alias_method :params, :parameters
79
63
 
80
- # Returns true or false if all parameters are set.
64
+ # Returns true or false if all parameters are set to something other than defaults.
81
65
  def parameters?
82
- parameters.values.all?
83
- end
84
-
85
- private
86
-
87
- # Helper to clean up recursive method in #parameters
88
- def get_var(var)
89
- self.instance_variable_get(var)
66
+ @defaults.map {|k,v| @defaults[k] != parameters[k]}.all?
90
67
  end
91
68
  end
92
69
 
data/lib/bini/config.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  require 'fileutils'
2
2
 
3
3
  module Bini
4
- attr_accessor :config
5
-
6
4
  extend self
7
5
 
8
- self.config = Sash.new file:"#{Bini.config_dir}/#{Bini.name}.yaml"
6
+ # A helper for storing configuration related data in.
7
+ Config = Sash.new file:"#{Bini.config_dir}/#{Bini.name}.yaml"
9
8
  end
@@ -1,7 +1,12 @@
1
1
  module Bini
2
+ # A collection of helpers related to file management.
2
3
  module FileMagic
3
4
  extend self
4
5
 
6
+ # Call the system app 'file' to check mimetype.
7
+ # @param [String] file name of the file.
8
+ # @return [String] of the mimetypes found
9
+ # @return [Nil] if nothing worked.
5
10
  def mime_type(file)
6
11
  return `file -bk --mime-type "#{file}"`.chomp! if File.exist? file
7
12
  return nil
data/lib/bini/mixins.rb CHANGED
@@ -1,4 +1,6 @@
1
+ # A mixin for [Array]
1
2
  class Array
3
+ # Return a random element from the Array.
2
4
  def rand
3
5
  self[Random.rand(self.count)]
4
6
  end
@@ -1,6 +1,8 @@
1
1
  require 'optparse'
2
2
 
3
3
  module Bini
4
+ # An extension of [OptionParser] that behaves like a hash, with saving, loading, and
5
+ # mashing in other hashs.
4
6
  class OptionParser < ::OptionParser
5
7
  def initialize
6
8
  super
@@ -9,33 +11,33 @@ module Bini
9
11
  on("-V", "--version", "Print version") { |version| @options[:version] = true}
10
12
  end
11
13
 
12
- def parse!
14
+ # Parse out ARGV, includes a catch for returning version, otherwise just calls super.
15
+ def parse!(*argv)
13
16
  super
14
17
 
15
- if @options[:version]
16
- if Bini.version
17
- puts Bini.version
18
- else
19
- puts "No version supplied."
20
- end
21
- exit 0
18
+ if Options[:version] && Bini.version
19
+ puts Bini.version
20
+ # don't exit if RSpec is around, we are in a testing environment.
21
+ exit 0 if !Object.constants.include? :RSpec
22
22
  end
23
-
24
- mash Bini.config if Bini.config
25
23
  end
26
-
27
24
  # These are the hash like bits.
28
25
 
26
+ # Clear the contents of the builtin Hash.
29
27
  def clear
30
28
  @options.clear
31
29
  end
32
30
 
33
- def [](k = nil)
34
- return @options[k] if k
31
+ # Get results from the builtin in Hash.
32
+ # @param [Symbol,String,nil] key Either a single key or nil for the entire hash.
33
+ # @return [Hash] a hash, empty or otherwise.
34
+ def [](key = nil)
35
+ return @options[key] if key
35
36
  return @options if @options.any?
36
37
  {}
37
38
  end
38
39
 
40
+ # Set a key/value pair in the buildin Hash.
39
41
  def []=(k,v)
40
42
  @options[k] = v
41
43
  end
@@ -48,6 +50,8 @@ module Bini
48
50
  h.each {|k,v| self[k] = v}
49
51
  end
50
52
  end
51
- Options = OptionParser.new
53
+ # An automatically created entry point into the OptionParser class.
54
+ Options = Bini::OptionParser.new
52
55
  end
53
56
 
57
+
data/lib/bini/prompts.rb CHANGED
@@ -1,5 +1,3 @@
1
- # This is originally from: https://gist.github.com/2040373
2
-
3
1
  module Bini
4
2
  # A few prompts I may need in making CLI's.
5
3
  module Prompts
@@ -22,4 +20,3 @@ module Bini
22
20
  end
23
21
  end
24
22
  end
25
-
data/lib/bini/sash.rb CHANGED
@@ -12,8 +12,6 @@ module Bini
12
12
  attr_accessor :auto_load
13
13
  attr_accessor :auto_save
14
14
 
15
-
16
-
17
15
  # initialization sets the values of the class Sash, not the contents of the Hash.
18
16
  def initialize(params = {})
19
17
  params.each { |k,v| instance_variable_set "@" + k.to_s,v}
@@ -47,7 +45,7 @@ module Bini
47
45
  end
48
46
  true
49
47
  end
50
-
48
+ # Store a value in the Hash. Can autosave.
51
49
  def []=(key,value)
52
50
  store key, value
53
51
  save! if @auto_save == true
data/lib/bini/version.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  module Bini
2
- VERSION = "0.5.5"
2
+ # The current version of Bini.
3
+ VERSION = "0.6.0"
3
4
  end
@@ -2,14 +2,14 @@ require 'spec_helper'
2
2
 
3
3
  describe "Bini.config" do
4
4
  it "is a hash." do
5
- Bini.config.kind_of?(Hash).should be_true
5
+ Bini::Config.kind_of?(Hash).should be_true
6
6
  end
7
7
 
8
8
  it "which responds to save" do
9
- Bini.config.respond_to?(:save).should be_true
9
+ Bini::Config.respond_to?(:save).should be_true
10
10
  end
11
11
 
12
12
  it "which responds to load" do
13
- Bini.config.respond_to?(:load).should be_true
13
+ Bini::Config.respond_to?(:load).should be_true
14
14
  end
15
15
  end
@@ -4,4 +4,8 @@ describe "FileMagic" do
4
4
  it "it will return a ruby mime type when targeting a ruby file." do
5
5
  Bini::FileMagic.mime_type("./lib/bini.rb").should eq "text/x-ruby"
6
6
  end
7
+ it "will return the version of file if needed" do
8
+ s = Bini::FileMagic.module_exec {filemagic_version}
9
+ `file -v`.include?(s).should be_true
10
+ end
7
11
  end
File without changes
@@ -39,13 +39,17 @@ describe "optparser" do
39
39
  Options.mash h
40
40
  Options[:mash].should eq 'mush'
41
41
  end
42
-
43
42
  end
44
43
  describe "parse" do
45
44
  it "will attempt to mash in the Config[]#hash if available." do
46
- Bini::config[@key] == @value
45
+ Bini::Config[@key] == @value
47
46
  Options.parse!
48
47
  Options[@key] = @value
49
48
  end
49
+ it "Will echo the version set by Bini.version" do
50
+ Bini.version = "v0.0.0"
51
+ $stdout.should_receive(:puts).with(Bini.version)
52
+ Options.parse ["-V"]
53
+ end
50
54
  end
51
55
  end
File without changes
@@ -0,0 +1,50 @@
1
+ require 'spec_helper'
2
+
3
+ # I'm not 100% sure convinvced any of these do what I think they do.
4
+ describe "Bini" do
5
+ before (:each) do
6
+ Bini.long_name = nil
7
+ @long_name = Bini.long_name
8
+ Bini.cache_dir = nil
9
+ @cache_dir = Bini.cache_dir
10
+ Bini.config_dir = nil
11
+ @config_dir = Bini.config_dir
12
+ Bini.version = nil
13
+ end
14
+
15
+ describe "parameters?" do
16
+ it 'will return true only if everything is true.' do
17
+ Bini.long_name = "tmp/test"
18
+ Bini.parameters?.should be_false
19
+ Bini.cache_dir = "tmp/here"
20
+ Bini.config_dir = "tmp/there"
21
+ Bini.parameters?.should be_true
22
+ end
23
+ end
24
+
25
+ # Dynamically generate our key tests, more for fun then any real need.
26
+ Bini.keys.each do |key|
27
+ describe "#{key}" do
28
+ it "can be reset to a default" do
29
+ Bini.send "#{key}=", nil
30
+ Bini.send(key).should eq Bini.defaults[key]
31
+ end
32
+ it "can be overriden" do
33
+ r = random_hex 16
34
+ Bini.send "#{key}=", r
35
+ Bini.send(key).should eq r
36
+ end
37
+
38
+ it "can be configured via .configure" do
39
+ r = random_hex 4
40
+ Bini.configure do |c|
41
+ c.instance_variable_set "@#{key}", r
42
+ end
43
+ Bini.send(key).should eq r
44
+ end
45
+ end
46
+ end
47
+
48
+ Bini.version
49
+ end
50
+
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,8 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter "/spec/"
4
+ end
5
+
1
6
  require 'bini'
2
7
  require 'bini/optparser'
3
8
  require 'bini/config'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bini
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-06 00:00:00.000000000 Z
12
+ date: 2012-12-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sys-proctable
@@ -37,6 +37,8 @@ files:
37
37
  - .gitignore
38
38
  - .rspec
39
39
  - .travis.yml
40
+ - .yardopts
41
+ - CHANGELOG.md
40
42
  - Gemfile
41
43
  - Guardfile
42
44
  - LICENSE.txt
@@ -51,12 +53,12 @@ files:
51
53
  - lib/bini/prompts.rb
52
54
  - lib/bini/sash.rb
53
55
  - lib/bini/version.rb
54
- - spec/bini_spec.rb
55
- - spec/config_spec.rb
56
- - spec/filemagic_spec.rb
57
- - spec/mixins_spec.rb
58
- - spec/optparser_spec.rb
59
- - spec/sash_spec.rb
56
+ - spec/lib/bini/config_spec.rb
57
+ - spec/lib/bini/filemagic_spec.rb
58
+ - spec/lib/bini/mixins_spec.rb
59
+ - spec/lib/bini/optparser_spec.rb
60
+ - spec/lib/bini/sash_spec.rb
61
+ - spec/lib/bini_spec.rb
60
62
  - spec/spec_helper.rb
61
63
  homepage: https://github.com/erniebrodeur/bini
62
64
  licenses: []
@@ -70,18 +72,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
72
  - - ! '>='
71
73
  - !ruby/object:Gem::Version
72
74
  version: '0'
73
- segments:
74
- - 0
75
- hash: -581091682006893014
76
75
  required_rubygems_version: !ruby/object:Gem::Requirement
77
76
  none: false
78
77
  requirements:
79
78
  - - ! '>='
80
79
  - !ruby/object:Gem::Version
81
80
  version: '0'
82
- segments:
83
- - 0
84
- hash: -581091682006893014
85
81
  requirements: []
86
82
  rubyforge_project:
87
83
  rubygems_version: 1.8.21
@@ -91,11 +87,11 @@ summary: Bini is a gem that helps me build CLI tools. It's not thor, trollop, o
91
87
  any of the other major frameworks. It makes lots and lots of assumptions. It's
92
88
  probably not for you.
93
89
  test_files:
94
- - spec/bini_spec.rb
95
- - spec/config_spec.rb
96
- - spec/filemagic_spec.rb
97
- - spec/mixins_spec.rb
98
- - spec/optparser_spec.rb
99
- - spec/sash_spec.rb
90
+ - spec/lib/bini/config_spec.rb
91
+ - spec/lib/bini/filemagic_spec.rb
92
+ - spec/lib/bini/mixins_spec.rb
93
+ - spec/lib/bini/optparser_spec.rb
94
+ - spec/lib/bini/sash_spec.rb
95
+ - spec/lib/bini_spec.rb
100
96
  - spec/spec_helper.rb
101
97
  has_rdoc:
data/spec/bini_spec.rb DELETED
@@ -1,92 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # I'm not 100% sure convinvced any of these do what I think they do.
4
- describe "Bini" do
5
- before (:each) do
6
- Bini.long_name = nil
7
- @long_name = Bini.long_name
8
- Bini.cache_dir = nil
9
- @cache_dir = Bini.cache_dir
10
- Bini.config_dir = nil
11
- @config_dir = Bini.config_dir
12
- end
13
-
14
- # I can probably do this dynamically.
15
- describe "long_name" do
16
- it "can be reset" do
17
- Bini.long_name = nil
18
- Bini.long_name.should eq Bini.defaults[:long_name]
19
- end
20
-
21
- it "provides a default" do
22
- Bini.long_name = nil
23
- Bini.long_name.should_not be_nil
24
- end
25
-
26
- it "can be overridden" do
27
- r = random_hex 4
28
- Bini.long_name = r
29
- Bini.long_name.should eq r
30
- end
31
-
32
- it "can be configured via .configure" do
33
- r = random_hex 4
34
- Bini.configure do |c|
35
- c.long_name = r
36
- end
37
- Bini.long_name.should eq r
38
- end
39
- end
40
-
41
- describe "cache_dir" do
42
- it "can be reset" do
43
- Bini.cache_dir = nil
44
- Bini.cache_dir.should eq @cache_dir
45
- end
46
-
47
-
48
- it "provides a default" do
49
- Bini.cache_dir = nil
50
- Bini.cache_dir.should_not be_nil
51
- end
52
-
53
- it "can be overridden" do
54
- r = random_hex 4
55
- Bini.cache_dir = r
56
- Bini.cache_dir.should eq r
57
- end
58
- it "can be configured via .configure" do
59
- r = random_hex 4
60
- Bini.configure do |c|
61
- c.cache_dir = r
62
- end
63
- Bini.cache_dir.should eq r
64
- end
65
- end
66
- describe "config_dir" do
67
- it "can be reset" do
68
- Bini.config_dir = nil
69
- Bini.config_dir.should eq @config_dir
70
- end
71
-
72
-
73
- it "provides a default" do
74
- Bini.config_dir = nil
75
- Bini.config_dir.should_not be_nil
76
- end
77
-
78
- it "can be overridden" do
79
- r = random_hex 4
80
- Bini.config_dir = r
81
- Bini.config_dir.should eq r
82
- end
83
- it "can be configured via .configure" do
84
- r = random_hex 4
85
- Bini.configure do |c|
86
- c.config_dir = r
87
- end
88
- Bini.config_dir.should eq r
89
- end
90
- end
91
- end
92
-