org_mode 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -5,3 +5,4 @@ pkg/*
5
5
  .*.sw?
6
6
  .rvmrc
7
7
  tags
8
+ tmp
data/Gemfile CHANGED
@@ -7,6 +7,7 @@ gem "commander"
7
7
  gem "facets"
8
8
  gem "mustache"
9
9
  gem "colorize"
10
+ gem "configuration"
10
11
 
11
12
  group :development do
12
13
  if RUBY_VERSION =~ /^1\.9/
data/README.mkd CHANGED
@@ -1,12 +1,10 @@
1
1
  # Org-Mode file parser and writer
2
2
 
3
- Usin Vim for a long time, and having used e-macs for a while I got hooked on
4
- org-mode. The flexible plain-tekst planning mode.
3
+ One of the killer features of emacs was org-mode. A real eye
4
+ opener what text-based to-do lists can do for you.
5
5
 
6
- Using org-mode was an eye-opener, brilliant idea but it turns out I am more of a VIM
7
- person.
8
-
9
- So this ruby-gem is result of this personal org-mode dissonance.
6
+ This ruby-gem carries within all you need to work efficiently with a set of
7
+ org-mode files.
10
8
 
11
9
  ## Goal
12
10
 
@@ -14,6 +12,27 @@ Making lightweight/fast ruby org-mode executable to parse/reformat/analyse and
14
12
  report on my org-files or the one in my buffer. And following the Unix philosopy
15
13
  making a seperate process of it.
16
14
 
15
+ # Usage
16
+
17
+ A shell script is carried along.
18
+
19
+ org-mode <org-file>
20
+
21
+ ## Agenda
22
+
23
+ Displays scheduled items. Parses all the files configured in `.org-moderc`
24
+
25
+ ## Update
26
+
27
+ org-mode update <org-file>
28
+
29
+ parses and updates an org file. It does the following:
30
+
31
+ * archive done items
32
+ * reformats/re-indents the complete file
33
+ * assigns a sha-1 of the title-content for further updates and
34
+ quick reference
35
+
17
36
  ## What I want
18
37
 
19
38
  * flexible parsers
data/bin/org-mode CHANGED
@@ -1,15 +1,19 @@
1
1
  #!/usr/bin/env ruby -Ilib
2
2
 
3
3
  require 'rubygems'
4
- require 'commander/import'
5
4
  require 'org_mode/version'
6
5
 
6
+ require 'org_mode/load_or_setup_default_configuration'
7
+
8
+ require 'commander/import'
7
9
  require 'org_mode/commands'
8
10
 
9
11
  program :version, OrgMode::VERSION
10
12
  program :description, 'Formats and extracts information out of org-mode files'
11
13
  program :help_formatter, :compact
12
14
 
15
+ default_command :agenda
16
+
13
17
  command :agenda do |c|
14
18
  c.syntax = 'org-mode agenda [options] *org-mode-files'
15
19
  c.summary = 'Displays information on scheduled items'
@@ -28,3 +32,10 @@ command :update do |c|
28
32
  c.when_called OrgMode::Commands::Update, :execute
29
33
  end
30
34
 
35
+ command :open do |c|
36
+ c.syntax = 'org-mode open'
37
+ c.summary = 'open all org-files'
38
+ c.description = 'Opens configured org-files in a vim session'
39
+ c.example 'description', 'command example'
40
+ c.when_called OrgMode::Commands::Open, :execute
41
+ end
@@ -0,0 +1,23 @@
1
+ Feature: Org-mode loads and writes an rcfile
2
+ org-mode tool should load a rc file on startup
3
+
4
+ Scenario: an rc file exist
5
+ Given date is "1-1-2012 15:00"
6
+ And we have an environment containing:
7
+ | ORG_MODE_RC_DIR | features/fixtures |
8
+ | ORG_MODE_RC_FNAME | orgmoderc |
9
+ When the script is called with "agenda"
10
+ Then the output should contain "Agenda"
11
+ And the output should contain "TODO"
12
+ And the output should contain "Scheduled task defined in orgmoderc"
13
+
14
+ Scenario: no rc file exists
15
+ Given date is "1-1-2012 15:00"
16
+ And we have an environment containing:
17
+ | ORG_MODE_RC_DIR | features/tmp |
18
+ | ORG_MODE_RC_FNAME | orgmoderc-non-existent |
19
+ And I have an empty tmp dir 'features/tmp'
20
+ When the script is called with "agenda"
21
+ Then the output should contain "Agenda"
22
+ And the output should not contain "Scheduled task defined in orgmoderc"
23
+ And the output should contain "TODO Configure orgmoderc file in"
@@ -4,6 +4,7 @@ Feature: org-mode update <orgfile>
4
4
  standarized way. This also enables certain
5
5
  filters to be applied.
6
6
 
7
+ @focus
7
8
  Scenario: should present meaningfull agenda information
8
9
  Given we have an org-file with the following content
9
10
  """
@@ -15,7 +16,7 @@ Feature: org-mode update <orgfile>
15
16
  some other content that will be indented
16
17
  """
17
18
  When the script is called with "update"
18
- Then the output should be
19
+ Then the orgfile should be rewritten as
19
20
  """
20
21
  a header
21
22
 
@@ -0,0 +1 @@
1
+ * TODO Scheduled task defined in orgmoderc <1-1-2012 Wed 15:15>
@@ -0,0 +1 @@
1
+ * TODO Existing orgmode file
@@ -0,0 +1,10 @@
1
+ # specify which files to load per default
2
+ # using the agenda function
3
+ org_mode_files %W{
4
+ #{ENV['ORG_MODE_RC_DIR']}/orgmode/gtd-minimal.org
5
+ }
6
+
7
+ # Remember Daniel San, you have all of ruby to you disposal
8
+ # make it happen ...
9
+
10
+ # vim: ft=ruby
data/features/steps.rb CHANGED
@@ -19,6 +19,22 @@ When /^the script is called with "([^"]*)"( should fail)?$/ do |argv, should_fai
19
19
  end
20
20
  end
21
21
 
22
+ Then /^the orgfile should be rewritten as$/ do |string|
23
+ File.open( @org_file.path ).read.should == string
24
+ end
25
+
26
+ Given /^we have an environment containing:$/ do |table|
27
+ # table is a Cucumber::Ast::Table
28
+ table.raw.each do |k,v|
29
+ ENV[k] = v
30
+ end
31
+ end
32
+
33
+ Given /^I have an empty tmp dir 'features\/tmp'$/ do
34
+ %x[rm -r features/tmp]
35
+ %x[mkdir features/tmp]
36
+ end
37
+
22
38
  Given /^date is "([^"]*)"$/ do |date_string|
23
39
  Timecop.freeze(Date.parse(date_string))
24
40
  end
@@ -33,6 +49,9 @@ end
33
49
  Then /^the output should contain "([^""]*)"$/ do |pattern|
34
50
  @stdout.should match(pattern)
35
51
  end
52
+ Then /^the output should not contain "([^""]*)"$/ do |pattern|
53
+ @stdout.should_not match(pattern)
54
+ end
36
55
 
37
56
  Then /^the error should be$/ do |string|
38
57
  @script_error.stderr.chomp.should == string
@@ -0,0 +1,6 @@
1
+ Before do
2
+ %x[rm -r features/fixtures/tmp]
3
+ %x[mkdir features/fixtures/tmp]
4
+ ENV['ORG_MODE_RC_DIR'] = 'features/fixtures/tmp'
5
+ ENV['ORG_MODE_RC_FNAME'] = 'orgmoderc'
6
+ end
@@ -1,6 +1,7 @@
1
1
  require 'tempfile'
2
2
  require 'ruby-debug'
3
3
  require 'popen4'
4
+ require 'facets/kernel/blank'
4
5
 
5
6
  class OrgModeScriptError < StandardError;
6
7
  attr_accessor :stdout, :stderr, :status, :cmd
@@ -37,7 +38,8 @@ end
37
38
  def org_mode_script(cmd, *params)
38
39
 
39
40
  # build command
40
- cmd = %[bin/org-mode #{cmd} #{params * ' '}]
41
+ cmd = %[#{org_mode_env} bin/org-mode #{cmd} #{params * ' '}]
42
+ puts cmd
41
43
 
42
44
  stdout, stderr = [ nil,nil ]
43
45
  status = POpen4.popen4(cmd) do |pout,perr|
@@ -51,3 +53,7 @@ def org_mode_script(cmd, *params)
51
53
 
52
54
  return [stdout.chomp, stderr, status]
53
55
  end
56
+
57
+ def org_mode_env
58
+ ['ORG_MODE_RC_DIR', 'ORG_MODE_RC_FNAME'].reject(&:blank?).map {|e| "#{e}='#{ENV[e]}'"} * ' '
59
+ end
data/lib/org_mode.rb CHANGED
@@ -13,7 +13,6 @@
13
13
  require "org_mode/version"
14
14
 
15
15
  module OrgMode
16
-
17
16
  class Node
18
17
  attr_accessor :title, :content, :stars, :date, :date_start_time, :date_end_time, :todo_state
19
18
  attr_accessor :parent, :children
@@ -46,7 +45,6 @@ module OrgMode
46
45
  def done?
47
46
  todo_state == 'DONE'
48
47
  end
49
-
50
48
  end
51
49
 
52
50
  module FileInterface
@@ -68,8 +66,9 @@ module OrgMode
68
66
 
69
67
  include FileInterface
70
68
 
71
- # For universial children accessor
72
- # file is just a node
69
+ # For universial acces
70
+ # on file level, the root_nodes
71
+ # are the nodes children
73
72
  alias :children :root_nodes
74
73
  alias :children= :root_nodes=
75
74
 
@@ -110,6 +109,5 @@ module OrgMode
110
109
  def root_nodes
111
110
  nodes.select(&:root_node?)
112
111
  end
113
-
114
112
  end
115
113
  end
@@ -5,3 +5,4 @@ end
5
5
 
6
6
  require 'org_mode/commands/agenda'
7
7
  require 'org_mode/commands/update'
8
+ require 'org_mode/commands/open'
@@ -16,11 +16,16 @@ module OrgMode::Commands
16
16
  # Returns the restult to stdout
17
17
  def execute(args, options)
18
18
 
19
- file_collection = OrgMode::Loader.load_and_parse_files(*args)
19
+ files_to_parse = args
20
+ if files_to_parse.empty?
21
+ files_to_parse = $config.org_mode_files
22
+ end
23
+
24
+ file_collection = OrgMode::Loader.load_and_parse_files(files_to_parse)
20
25
  agenda_reporter = OrgMode::Reporters::Agenda.new(file_collection)
21
- text_presenter = OrgMode::Presenters::Agenda::Console.new(agenda_reporter)
26
+ console_presenter = OrgMode::Presenters::Agenda::Console.new(agenda_reporter)
22
27
 
23
- puts text_presenter.open_items_per_day_colorized
28
+ puts console_presenter.open_items_per_day_colorized
24
29
 
25
30
  rescue SystemCallError => e
26
31
  puts "Encountered a little problem: #{e}"
@@ -0,0 +1,16 @@
1
+ module OrgMode::Commands
2
+ class Open
3
+ # Private: executes the open command
4
+ # opens all org-files in vim sessions
5
+ #
6
+ # args - list of filenames
7
+ # options - switches set by the app
8
+ #
9
+ # Returns nothing
10
+ def execute(args, options)
11
+ $config.org_mode_files
12
+
13
+ exec %[vim], *$config.org_mode_files
14
+ end
15
+ end
16
+ end
@@ -2,19 +2,29 @@ require 'org_mode/parser'
2
2
  require 'org_mode/loader'
3
3
  require 'org_mode/formatters/textual'
4
4
  require 'org_mode/processors/archive_done'
5
+ require 'org_mode/file_tools'
5
6
 
6
7
  module OrgMode::Commands
7
8
  class Update
9
+
8
10
  def execute(args, options)
9
- org_file = OrgMode::Loader.load_and_parse_file(args[0])
11
+ # use supplied file-name
12
+ # or use files out of configuration
13
+ args = OrgMode::Configuration.org_mode_files if args.blank?
10
14
 
11
- if options.archive_done
12
- org_file = OrgMode::Processors::ArchiveDone.new(org_file).process
13
- end
15
+ args.each do |file_path|
16
+ OrgMode::FileTools.backup(file_path)
17
+
18
+ org_file = OrgMode::Loader.load_and_parse_file(file_path)
14
19
 
15
- org_formatter = OrgMode::Formatters::Textual.new(org_file)
20
+ if options.archive_done
21
+ org_file = OrgMode::Processors::ArchiveDone.new(org_file).process
22
+ end
16
23
 
17
- puts org_formatter.format
24
+ org_formatter = OrgMode::Formatters::Textual.new(org_file)
25
+
26
+ OrgMode::FileTools.spit_into_file(org_formatter.format, file_path)
27
+ end
18
28
 
19
29
  rescue StandardError => e
20
30
  puts "Encountered a little problem: #{e}"
@@ -0,0 +1,143 @@
1
+ require 'pathname'
2
+ require 'configuration'
3
+ require 'core_ext/string'
4
+ require 'date'
5
+
6
+ module OrgMode
7
+ module FileOperations
8
+ def spit_into_file(path, content)
9
+ f = ::File.open(path, 'w+')
10
+ f.write(content)
11
+ f.flush
12
+ f.close
13
+ end
14
+ end
15
+
16
+ class DefaultOrgfile
17
+ extend FileOperations
18
+
19
+ class << self
20
+ def content(tmpl_vars={})
21
+ return <<-EOF.strip_indent(10)
22
+ This is your default orgmode agenda file, the orgmode script
23
+ finds this file since it's configured in #{tmpl_vars.fetch(:target_path)}
24
+
25
+ * TODO Configure orgmoderc file in #{tmpl_vars.fetch(:target_path)} <#{DateTime.now.strftime('%Y-%m-%d %a')}>
26
+ EOF
27
+ end
28
+
29
+ def write_to(path, tmpl_vars={})
30
+ spit_into_file(path, content(tmpl_vars))
31
+ end
32
+ end
33
+ end
34
+
35
+ class DefaultRcFile
36
+ extend FileOperations
37
+
38
+ class << self
39
+ def content
40
+ @content ||= ::File.open(default_rc_path).read
41
+ end
42
+
43
+ def write_to(target_path)
44
+ spit_into_file(target_path, content)
45
+ end
46
+
47
+ private
48
+
49
+ def default_rc_path
50
+ ::File.dirname(__FILE__) + '/configuration/defaultrc.rb'
51
+ end
52
+ end
53
+ end
54
+
55
+ class DefaultConfiguration
56
+
57
+ def write_to(target_path)
58
+ dirname = ::File.dirname(target_path)
59
+ config_dir = "#{dirname}/.orgmode"
60
+ %x[mkdir #{config_dir}]
61
+
62
+ DefaultOrgfile.write_to("#{config_dir}/gtd.org", :target_path=>target_path)
63
+ DefaultRcFile.write_to(target_path)
64
+ end
65
+
66
+ def self.write_to(target_path)
67
+ new.write_to(target_path)
68
+ end
69
+ end
70
+
71
+ class Configuration
72
+ class Error < StandardError; end
73
+ class ScriptError < Error; end
74
+ class IOError < Error; end
75
+ class NonExistant < Error; end
76
+
77
+ ## Class method caller
78
+ class << self
79
+ def load(base_dir=nil, file_name=nil)
80
+ @singleton = new(base_dir,file_name)
81
+ @config = @singleton.read_and_evaluate
82
+ end
83
+
84
+ def path
85
+ @singleton.path
86
+ end
87
+
88
+ def backup_dir
89
+ @singleton.base_dir + '.orgmode/backups'
90
+ end
91
+
92
+ # forward all to our singleton
93
+ def method_missing(f,*a)
94
+ if @config.respond_to?(f)
95
+ return @config.send(f, *a)
96
+ end
97
+ super
98
+ end
99
+ end
100
+
101
+
102
+ # Instance
103
+ attr_reader :file_name, :base_dir, :path
104
+
105
+ # Initializes loader and generates file-path
106
+ def initialize(a_base_dir=nil, a_file_name=nil)
107
+ @base_dir = Pathname.new(a_base_dir || ENV['HOME'])
108
+ @file_name = Pathname.new(a_file_name || '.orgmoderc')
109
+ @path = @base_dir + @file_name
110
+ end
111
+
112
+ # Reads a config file and avaluates
113
+ # it.
114
+ #
115
+ # Returns a Configuration object
116
+ def read_and_evaluate
117
+ contents = ::File.open(path).read
118
+ instance_eval <<-RUBY, path, 0
119
+ ::Configuration.for('org-mode') do
120
+ #{contents}
121
+ end
122
+ RUBY
123
+
124
+ ::Configuration.for('org-mode')
125
+
126
+ rescue ::Errno::ENOENT => e
127
+ raise NonExistant, "config file does not exist"
128
+ rescue ::IOError, ::SystemCallError => e
129
+ raise IOError, "problem loading config: #{e}"
130
+ rescue ::ScriptError => e
131
+ raise ScriptError, "problem loading config: #{e}"
132
+ end
133
+
134
+ # Creates a minimal example configuration
135
+ #
136
+ # Returns the default config
137
+ def self.create_default_config(base_dir=nil,file_name=nil)
138
+ new_config = Configuration.new(base_dir,file_name)
139
+ DefaultConfiguration.write_to( new_config.path )
140
+ return new_config.read_and_evaluate
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,10 @@
1
+ # specify which files to load per default
2
+ # using the agenda function
3
+ org_mode_files %W{
4
+ #{ENV['ORG_MODE_RC_DIR'] || ENV['HOME']}/.orgmode/gtd.org
5
+ }
6
+
7
+ # Remember Daniel San, you have all of ruby to you disposal
8
+ # make it happen ...
9
+
10
+ # vim: ft=ruby
@@ -0,0 +1,45 @@
1
+ require 'fileutils'
2
+
3
+ module OrgMode::FileTools
4
+ extend self
5
+ extend FileUtils
6
+
7
+ def backup(file)
8
+ mkdir_p backup_dir unless File.exist?(backup_dir)
9
+ cp file, add_unique_extention(backup_path(file))
10
+ end
11
+
12
+ def spit_into_file(buffer, file)
13
+ File.open(file, 'w') do |f|
14
+ f.write(buffer)
15
+ f.flush
16
+ end
17
+ end
18
+
19
+ def backup_path(file)
20
+ backup_dir + ::File.basename(file)
21
+ end
22
+
23
+
24
+ def backup_dir
25
+ OrgMode::Configuration.backup_dir
26
+ end
27
+
28
+ private
29
+
30
+ def add_unique_extention(file)
31
+ "%s.%d" % [ file, (_unique_extention(file)) ]
32
+ end
33
+
34
+ def _unique_extention(file)
35
+ uid = _extract_unique_extentions(file).max
36
+ uid ? uid + 1 : 0
37
+ end
38
+
39
+ def _extract_unique_extentions(file)
40
+ Dir["#{ file }.*"].
41
+ select {|p| /\.\d+$/ }.
42
+ map { |p| p.match(/(\d+)$/)[1].to_i }
43
+ end
44
+
45
+ end
@@ -0,0 +1,16 @@
1
+ require 'org_mode/configuration'
2
+
3
+ def load_or_setup_default_configuration
4
+ dirname, fname = ENV['ORG_MODE_RC_DIR'], ENV['ORG_MODE_RC_FNAME']
5
+ $config = OrgMode::Configuration.
6
+ load(dirname, fname)
7
+ rescue OrgMode::Configuration::NonExistant => e
8
+ $config = OrgMode::Configuration.
9
+ create_default_config(dirname, fname)
10
+ rescue OrgMode::Configuration::Error => e
11
+ puts "Problem loading configuration: #{e}"
12
+ puts "Fix it first, and run me again ..."
13
+ exit
14
+ end
15
+
16
+ load_or_setup_default_configuration
@@ -2,7 +2,7 @@ class OrgMode::Loader
2
2
  # Public: loads and parses multiple files
3
3
  #
4
4
  # Returns OrgMode::FileCollection
5
- def self.load_and_parse_files *paths
5
+ def self.load_and_parse_files paths
6
6
  org_mode_files = paths.map {|f| load_and_parse_file(f) }
7
7
  OrgMode::FileCollection.new(org_mode_files)
8
8
  end
@@ -1,3 +1,3 @@
1
1
  module OrgMode
2
- VERSION = "0.0.4"
2
+ VERSION = "0.1.0"
3
3
  end
data/org_mode.gemspec CHANGED
@@ -26,4 +26,5 @@ Gem::Specification.new do |s|
26
26
  s.add_runtime_dependency "facets", ["~> 2.9"]
27
27
  s.add_runtime_dependency "mustache", ["~> 0.99"]
28
28
  s.add_runtime_dependency "colorize", ["~> 0.5"]
29
+ s.add_runtime_dependency "configuration", ["~> 1.3"]
29
30
  end
@@ -0,0 +1,6 @@
1
+ Configuration.for('org-mode') do
2
+ org_mode_files %W[
3
+ spec/configuration/example-org-file-00.org
4
+ spec/configuration/example-org-file-01.org
5
+ ]
6
+ end
@@ -0,0 +1,6 @@
1
+ org_mode_files %W{
2
+ spec/configuration/example-org-file-00.org
3
+ spec/configuration/example-org-file-01.org
4
+ }
5
+
6
+ # vim:ft=ruby
@@ -0,0 +1,11 @@
1
+ org_mode_files %W{
2
+ spec/configuration/example-org-file-00.org
3
+ spec/configuration/example-org-file-01.org
4
+ }
5
+
6
+
7
+ # Too many closed braces ...
8
+ }
9
+ }
10
+
11
+ # vim:ft=ruby
@@ -0,0 +1,14 @@
1
+ require 'configuration'
2
+
3
+ describe "org-mode configuration" do
4
+ before do
5
+ load 'spec/configuration/default.rb'
6
+ end
7
+ let (:config) { Configuration.for('org-mode') }
8
+
9
+ it "should load the configuration file" do
10
+ config.org_mode_files.should == [
11
+ "spec/configuration/example-org-file-00.org",
12
+ "spec/configuration/example-org-file-01.org" ]
13
+ end
14
+ end
@@ -1,17 +1,29 @@
1
1
  require 'org_mode/commands/update'
2
2
  require 'lib/org_mode/commands/helpers'
3
3
 
4
+ # Fake out functionality
5
+ # not needed
6
+ module OrgMode::FileTools
7
+ def spit_into_file(buffer, file)
8
+ puts buffer
9
+ end
10
+ end
11
+
4
12
  describe OrgMode::Commands::Update do
5
13
  before do
6
14
  @cmd = OrgMode::Commands::Update.new
7
15
  end
8
16
 
9
17
  context '#execute' do
18
+ before do
19
+ OrgMode::FileTools.should_receive(:backup).and_return(true)
20
+ end
10
21
  context 'without options' do
11
22
  it 'reformats a file correctly' do
12
23
  org_file = write_into_tempfile <<-eos.strip_indent(10)
13
24
  * TODO Scheduled task <1-1-2012 Wed 15:15>
14
25
  eos
26
+
15
27
  execute_and_compare_stdout_with @cmd, [org_file.path], stub(:archive_done => false), <<-eos.strip_indent(10)
16
28
  * TODO <2012-01-01 Sun 15:15> Scheduled task
17
29
  eos
@@ -0,0 +1,72 @@
1
+ require 'lib/org_mode/configuration'
2
+
3
+ describe OrgMode::Configuration do
4
+ context "no configuration present" do
5
+ let (:config) {
6
+ OrgMode::Configuration.
7
+ load('spec/configuration', 'orgmoderc-non-existant') }
8
+
9
+ it "raises an error" do
10
+ lambda {
11
+ config.org_mode_files
12
+ }.should raise_error(OrgMode::Configuration::NonExistant)
13
+ end
14
+ end
15
+ context "configuration present" do
16
+ let (:config) {
17
+ OrgMode::Configuration.
18
+ load('spec/configuration', 'orgmoderc') }
19
+
20
+ it "should set correct parameters" do
21
+ config.org_mode_files.should == %W{
22
+ spec/configuration/example-org-file-00.org
23
+ spec/configuration/example-org-file-01.org
24
+ }
25
+ end
26
+
27
+ it "should be accessible through the class" do
28
+ OrgMode::Configuration.org_mode_files.should == %W{
29
+ spec/configuration/example-org-file-00.org
30
+ spec/configuration/example-org-file-01.org
31
+ }
32
+ end
33
+ end
34
+ context "wrong configuration present" do
35
+ let (:config) {
36
+ OrgMode::Configuration.
37
+ load('spec/configuration', 'orgmoderc-error') }
38
+
39
+ it "should raise an error" do
40
+ lambda {
41
+ config.org_mode_files
42
+ }.should raise_error(OrgMode::Configuration::ScriptError)
43
+ end
44
+ end
45
+
46
+ context ".create_default_config" do
47
+ it "should write it" do
48
+ OrgMode::DefaultConfiguration.should_receive(:write_to)
49
+ OrgMode::Configuration.create_default_config
50
+ end
51
+ end
52
+ end
53
+
54
+ describe OrgMode::DefaultConfiguration do
55
+ let (:default_config) { OrgMode::DefaultConfiguration.new }
56
+
57
+ it "writes the content if asked for" do
58
+ %x[rm -r spec/tmp]
59
+ %x[mkdir spec/tmp]
60
+ target_path = 'spec/tmp/orgmoderc'
61
+
62
+ default_config.write_to(target_path)
63
+
64
+ File.exist?('spec/tmp/.orgmode').should be_true
65
+ File.exist?('spec/tmp/.orgmode/gtd.org').should be_true
66
+ File.exist?('spec/tmp/orgmoderc').should be_true
67
+
68
+ File.open('spec/tmp/.orgmode/gtd.org').read.should ==
69
+ OrgMode::DefaultOrgfile.
70
+ content(:target_path => 'spec/tmp/orgmoderc')
71
+ end
72
+ end
@@ -0,0 +1,37 @@
1
+ require 'org_mode/file_tools'
2
+
3
+
4
+ describe OrgMode::FileTools do
5
+ context "#backup" do
6
+ before do
7
+ # assume backup dir exist
8
+ File.stub(:exist? => true)
9
+ end
10
+ it "copies to the correct dir" do
11
+ OrgMode::FileTools.stub(:_extract_unique_extentions => [1,2,3,4,5,8])
12
+ OrgMode::FileTools.stub(:backup_dir => '/tmp/backups/' )
13
+ OrgMode::FileTools.should_receive(:cp).with('blah', '/tmp/backups/blah.9').and_return(true)
14
+
15
+ OrgMode::FileTools.backup('blah')
16
+ end
17
+ end
18
+
19
+ context "#_unique_extention" do
20
+ context "with existing files" do
21
+ it 'determines a correct unique extention' do
22
+ Dir.stub(:[]).and_return(['blah.1', 'blah.2', 'blah.3'])
23
+ OrgMode::FileTools.send(:_unique_extention, 'blah').
24
+ should == 4
25
+
26
+ end
27
+ end
28
+ context "with no files" do
29
+ it 'determines a correct unique extention' do
30
+ Dir.stub(:[]).and_return([])
31
+ OrgMode::FileTools.send(:_unique_extention, 'blah').
32
+ should == 0
33
+ end
34
+ end
35
+ end
36
+
37
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: org_mode
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 4
10
- version: 0.0.4
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Boy Maas
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-12 00:00:00 Z
18
+ date: 2012-02-25 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: rake
@@ -92,6 +92,21 @@ dependencies:
92
92
  version: "0.5"
93
93
  type: :runtime
94
94
  version_requirements: *id005
95
+ - !ruby/object:Gem::Dependency
96
+ name: configuration
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ hash: 9
104
+ segments:
105
+ - 1
106
+ - 3
107
+ version: "1.3"
108
+ type: :runtime
109
+ version_requirements: *id006
95
110
  description: Org-mode parser, presenter, and reformatter. Read more about it on the github pages.
96
111
  email:
97
112
  - boy.maas@gmail.com
@@ -109,9 +124,12 @@ files:
109
124
  - bin/org-mode
110
125
  - features/cmdline_agenda.feature
111
126
  - features/cmdline_handles_errors_cracefully.feature
112
- - features/cmdline_noparams.feature
127
+ - features/cmdline_rcfile.feature
113
128
  - features/cmdline_todos.feature
114
129
  - features/cmdline_update.feature
130
+ - features/fixtures/orgmode/gtd-minimal.org
131
+ - features/fixtures/orgmode/gtd.org
132
+ - features/fixtures/orgmoderc
115
133
  - features/steps.rb
116
134
  - features/support/env.rb
117
135
  - features/support/org_mode_script.rb
@@ -120,8 +138,13 @@ files:
120
138
  - lib/org_mode.rb
121
139
  - lib/org_mode/commands.rb
122
140
  - lib/org_mode/commands/agenda.rb
141
+ - lib/org_mode/commands/open.rb
123
142
  - lib/org_mode/commands/update.rb
143
+ - lib/org_mode/configuration.rb
144
+ - lib/org_mode/configuration/defaultrc.rb
145
+ - lib/org_mode/file_tools.rb
124
146
  - lib/org_mode/formatters/textual.rb
147
+ - lib/org_mode/load_or_setup_default_configuration.rb
125
148
  - lib/org_mode/loader.rb
126
149
  - lib/org_mode/node_utils.rb
127
150
  - lib/org_mode/parser.rb
@@ -130,10 +153,16 @@ files:
130
153
  - lib/org_mode/reporters/agenda.rb
131
154
  - lib/org_mode/version.rb
132
155
  - org_mode.gemspec
156
+ - spec/configuration/default.rb
157
+ - spec/configuration/orgmoderc
158
+ - spec/configuration/orgmoderc-error
159
+ - spec/configuration_spec.rb
133
160
  - spec/data/org-file-01-simple-node-structure.org
134
161
  - spec/lib/org_mode/commands/agenda_spec.rb
135
162
  - spec/lib/org_mode/commands/helpers.rb
136
163
  - spec/lib/org_mode/commands/update_spec.rb
164
+ - spec/lib/org_mode/configuration_spec.rb
165
+ - spec/lib/org_mode/file_tools_spec.rb
137
166
  - spec/lib/org_mode/formatters/textual_spec.rb
138
167
  - spec/lib/org_mode/parser_spec.rb
139
168
  - spec/lib/org_mode/processors/archive_done_spec.rb
@@ -172,23 +201,32 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
201
  requirements: []
173
202
 
174
203
  rubyforge_project: org_mode
175
- rubygems_version: 1.8.13
204
+ rubygems_version: 1.8.15
176
205
  signing_key:
177
206
  specification_version: 3
178
207
  summary: Parses and does all kinds of tricks with org-mode files
179
208
  test_files:
180
209
  - features/cmdline_agenda.feature
181
210
  - features/cmdline_handles_errors_cracefully.feature
182
- - features/cmdline_noparams.feature
211
+ - features/cmdline_rcfile.feature
183
212
  - features/cmdline_todos.feature
184
213
  - features/cmdline_update.feature
214
+ - features/fixtures/orgmode/gtd-minimal.org
215
+ - features/fixtures/orgmode/gtd.org
216
+ - features/fixtures/orgmoderc
185
217
  - features/steps.rb
186
218
  - features/support/env.rb
187
219
  - features/support/org_mode_script.rb
220
+ - spec/configuration/default.rb
221
+ - spec/configuration/orgmoderc
222
+ - spec/configuration/orgmoderc-error
223
+ - spec/configuration_spec.rb
188
224
  - spec/data/org-file-01-simple-node-structure.org
189
225
  - spec/lib/org_mode/commands/agenda_spec.rb
190
226
  - spec/lib/org_mode/commands/helpers.rb
191
227
  - spec/lib/org_mode/commands/update_spec.rb
228
+ - spec/lib/org_mode/configuration_spec.rb
229
+ - spec/lib/org_mode/file_tools_spec.rb
192
230
  - spec/lib/org_mode/formatters/textual_spec.rb
193
231
  - spec/lib/org_mode/parser_spec.rb
194
232
  - spec/lib/org_mode/processors/archive_done_spec.rb
@@ -1,11 +0,0 @@
1
- Feature: noparams or reformat
2
- Whenever the org-mode script is run without params
3
- it should just display help
4
-
5
- Scenario: script with no params should display help
6
- When the script is called with "" should fail
7
- Then the error should be
8
- """
9
- invalid command. Use --help for more information
10
- """
11
-