hobo_support 1.3.0.RC4 → 1.3.0.pre10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ RUBYDOCTEST = ENV['RUBYDOCTEST'] || "#{RUBY} -S rubydoctest"
10
10
  namespace "test" do
11
11
  desc "Run the doctests"
12
12
  task :doctest do |t|
13
- files=Dir['test/**/*.rdoctest'].map {|f| File.expand_path(f)}.join(' ')
13
+ files=Dir['test/*.rdoctest','test/hobo_support/*.rdoctest'].map {|f| File.expand_path(f)}.join(' ')
14
14
  exit(1) if !system("#{RUBYDOCTEST} --single #{files}")
15
15
  end
16
16
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0.RC4
1
+ 1.3.0.pre10
data/hobo_support.gemspec CHANGED
@@ -1,6 +1,5 @@
1
1
  name = File.basename( __FILE__, '.gemspec' )
2
2
  version = File.read(File.expand_path('../VERSION', __FILE__)).strip
3
- require 'date'
4
3
 
5
4
  Gem::Specification.new do |s|
6
5
 
@@ -11,7 +10,7 @@ Gem::Specification.new do |s|
11
10
  s.summary = 'Core Ruby extensions from the Hobo project'
12
11
  s.description = 'Core Ruby extensions from the Hobo project'
13
12
 
14
- s.add_runtime_dependency('rails', ["~> 3.0.0"])
13
+ s.add_runtime_dependency('rails', [">= 3.0.0"])
15
14
  s.add_development_dependency('rubydoctest', [">= 0"])
16
15
 
17
16
  s.files = `git ls-files -x #{name}/* -z`.split("\0")
@@ -1,9 +1,6 @@
1
- require 'generators/hobo_support/eval_template'
2
-
3
1
  module Generators
4
2
  module HoboSupport
5
3
  Model = classy_module do
6
- include EvalTemplate
7
4
 
8
5
  argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
9
6
 
@@ -18,8 +15,10 @@ module Generators
18
15
  end
19
16
 
20
17
  def inject_hobo_code_into_model_file
18
+ source = File.expand_path(find_in_source_paths('model_injection.rb.erb'))
19
+ context = instance_eval('binding')
21
20
  inject_into_class model_path, class_name do
22
- eval_template('model_injection.rb.erb')
21
+ ERB.new(::File.binread(source), nil, '-').result(context)
23
22
  end
24
23
  end
25
24
 
@@ -6,14 +6,14 @@ module Generators
6
6
 
7
7
  private
8
8
 
9
- def ask(statement, default='', color=:magenta)
9
+ def ask(statement, default='', color=Thor::Shell::Color::MAGENTA)
10
10
  result = super(statement, color)
11
11
  result = default if result.blank?
12
12
  say PREFIX + result.inspect
13
13
  result
14
14
  end
15
15
 
16
- def yes_no?(statement, color=:magenta)
16
+ def yes_no?(statement, color=Thor::Shell::Color::MAGENTA)
17
17
  result = choose(statement + ' [y|n]', /^(y|n)$/i)
18
18
  result == 'y' ? true : false
19
19
  end
@@ -26,8 +26,8 @@ module Generators
26
26
  when choice.blank? && !default.blank?
27
27
  default
28
28
  else
29
- say 'Unknown choice! ', :red
30
- choose(prompt, format, default)
29
+ say 'Unknown choice! ', Thor::Shell::Color::RED
30
+ choose(prompt, format)
31
31
  end
32
32
  end
33
33
 
@@ -35,6 +35,14 @@ module Generators
35
35
  say "\n #{title} \n", "\e[37;44m"
36
36
  end
37
37
 
38
+ def multi_ask(statement)
39
+ result = []
40
+ while (r = ask(statement)) && !r.blank?
41
+ result << r
42
+ end
43
+ result
44
+ end
45
+
38
46
  end
39
47
  end
40
48
  end
@@ -1,5 +1,4 @@
1
1
  require 'fileutils'
2
- require 'tmpdir'
3
2
 
4
3
  module HoboSupport
5
4
  module Command
@@ -10,138 +9,84 @@ module HoboSupport
10
9
  is_hobo = gem == :hobo
11
10
  puts "#{gem.to_s.capitalize} Command Line Interface #{version}"
12
11
 
13
- hobo_banner = %(
14
- Usage:
15
- hobo new <app_name> [setup_opt] [rails_opt] Creates a new Hobo Application
16
- setup_opt:
17
- --wizard|<none> launch the setup_wizard in interactive mode
18
- --setup launch the setup_wizard in non-interactive mode
19
- expect you pass other setup_wizard options
20
- --skip-setup generate only the rails infrastructure and
21
- expect you launch the setup_wizard manually
22
- rails_opt: all the options accepted by the rails command
23
- )
12
+ banner = %(
13
+ Usage:
14
+ hobo new <app_name> [rails_options] Creates a new Hobo Application
15
+ hobo g <generator> [ARGS] [options] Fires the hobo:<generator>
16
+ hobo --help This help screen
24
17
 
25
- hobofields_banner = %(
26
- Usage:
27
- hobofields new <app_name> [rails_opt] Creates a new HoboFields Application
28
- )
18
+ Dev Notes:
19
+ Set the HOBO_DEV_ROOT ENV variable to the Hobo root path in order
20
+ to use your local dev version instead of the installed gem.
29
21
 
30
- banner = is_hobo ? hobo_banner : hobofields_banner
31
- banner += %(
32
- #{gem} generate|g <generator> [ARGS] [options] Fires the hobo:<generator>
33
- #{gem} destroy <generator> [ARGS] [options] Tries to undo generated code
34
-
35
- #{gem} --help|-h This help screen
36
-
37
- Dev Notes:
38
- Set the HOBODEV ENV variable to your local hobo git-repository path
39
- in order to use your local dev version instead of the installed gem.
40
-
41
- )
42
-
43
- # for hobo developers only
44
- setup_wizard = true
45
- default = false
22
+ )
46
23
 
47
24
  command = ARGV.shift
48
-
49
- case command
50
-
51
- when nil
25
+ if command.nil?
52
26
  puts "\nThe command is missing!\n"
53
27
  puts banner
54
28
  exit
29
+ end
30
+ # for hobo developers only
31
+ setup_wizard = true
55
32
 
56
- when /^--help|-h$/
57
- puts banner
58
- exit
33
+ case command
59
34
 
60
35
  when 'new'
61
36
  app_name = ARGV.shift
37
+ if is_hobo && ARGV.first =~ /^--skip-wizard$/
38
+ setup_wizard = false
39
+ ARGV.shift
40
+ end
62
41
  if app_name.nil?
63
42
  puts "\nThe application name is missing!\n"
64
43
  puts banner
65
44
  exit
66
45
  end
67
- if is_hobo
68
- setup_wizard = case ARGV.first
69
- when /^--skip-wizard|--skip-setup$/
70
- ARGV.shift
71
- :skip
72
- when /^--setup|--default$/
73
- ARGV.shift
74
- :setup
75
- when /^--wizard$/
76
- ARGV.shift
77
- :wizard
78
- else
79
- :wizard
80
- end
81
- end
82
- template_path = File.join Dir.tmpdir, "hobo_app_template"
46
+ template_path = "/tmp/hobo_app_template"
83
47
  File.open(template_path, 'w') do |file|
84
- if ENV["HOBODEV"]
85
- dev_root = File.expand_path ENV["HOBODEV"], FileUtils.pwd
48
+ if ENV["HOBO_DEV_ROOT"]
49
+ dev_root = File.expand_path ENV["HOBO_DEV_ROOT"], FileUtils.pwd
86
50
  file.puts %(
87
- $:.unshift '#{dev_root}/hobo_support/lib'
88
- gem 'hobo_support', :path => '#{dev_root}/hobo_support'
89
- gem 'hobo_fields', :path => '#{dev_root}/hobo_fields'
90
- )
51
+ $:.unshift '#{dev_root}/hobo_support/lib'
52
+ gem 'hobo_support', :path => '#{dev_root}/hobo_support'
53
+ gem 'hobo_fields', :path => '#{dev_root}/hobo_fields'
54
+ )
91
55
  if is_hobo
92
56
  file.puts %(
93
- gem 'dryml', :path => '#{dev_root}/dryml'
94
- gem 'hobo', :path => '#{dev_root}/hobo'
95
- )
57
+ gem 'dryml', :path => '#{dev_root}/dryml'
58
+ gem 'hobo', :path => '#{dev_root}/hobo'
59
+ )
96
60
  end
97
61
  else
98
- file.puts %(
99
- gem '#{gem}', '= #{version}'
100
- )
62
+ file.puts "gem '#{gem}', '>= #{version}'"
101
63
  end
102
- if is_hobo
64
+ if is_hobo && setup_wizard
103
65
  file.puts %(
104
- require 'generators/hobo_support/thor_shell'
105
- extend Generators::HoboSupport::ThorShell
106
- )
107
- case setup_wizard
108
- when :setup
109
- file.puts %(
110
- say 'Running Setup...'
111
- exec 'rails g hobo:setup_wizard --skip-wizard #{ARGV * ' '} '
112
- )
113
- when :wizard
114
- file.puts %(
115
- say_title "Hobo Setup Wizard"
116
- if yes_no?("Do you want to start the Setup Wizard now?
117
- (Choose 'n' if you need to manually customize any file before running the Wizard.
118
- You can run it later with `hobo g setup_wizard` from the application root dir.)")
119
- exec 'rails g hobo:setup_wizard --no-main-title'
120
- else
121
- say "Please, remember to run `hobo g setup_wizard` from the application root dir, in order to complete the Setup.", :yellow
122
- end
123
- )
124
- when :skip
125
- file.puts %(
126
- say "Please, remember to run `hobo g setup_wizard` from the application root dir, in order to complete the Setup.", :yellow
127
- )
128
- end
66
+ require 'generators/hobo_support/thor_shell'
67
+ extend Generators::HoboSupport::ThorShell
68
+
69
+ say_title "Hobo Setup Wizard"
70
+ if yes_no?("Do you want to start the Setup Wizard now?
71
+ (Choose 'no' if you need to manually customize any file before running the Wizard.
72
+ You can rerun it at any time with `hobo g setup_wizard` from the application root dir.)")
73
+ exec 'rails g hobo:setup_wizard --no-main-title'
74
+ else
75
+ say "Please, remember to run `hobo g setup_wizard` from the application root dir, in order to complete the Setup.", Thor::Shell::Color::YELLOW
76
+ end
77
+ )
129
78
  end
130
79
  end
131
80
  puts "Generating Rails infrastructure..."
132
81
  system "rails new #{app_name} #{ARGV * ' '} -m #{template_path}"
133
82
  File.delete template_path
134
83
 
135
- when /^(g|generate|destroy)$/
136
- cmd = $1
84
+ when /^(g|generate)$/
137
85
  if ARGV.empty?
138
86
  puts "\nThe generator name is missing!\n"
139
87
  puts banner
140
88
  else
141
- if ARGV.first =~ /^hobo:(\w+)$/
142
- puts "NOTICE: You can omit the 'hobo' namespace: e.g. `hobo #{cmd} #{$1} #{ARGV[1..-1] * ' '}`"
143
- end
144
- system "rails #{cmd} hobo:#{ARGV * ' '}"
89
+ exec "rails g hobo:#{ARGV * ' '}"
145
90
  end
146
91
 
147
92
  else
@@ -1,5 +1,4 @@
1
1
  require 'hobo_support/module'
2
-
3
2
  module HoboSupport
4
3
  CommonTasks = classy_module do
5
4
 
@@ -5,15 +5,15 @@ begin
5
5
  module Chronic
6
6
 
7
7
  class << self
8
- def parse_with_hobo_fix(s, *options)
9
- if s =~ /^\s*\d+\s*(st|nd|rd|th)\s+[a-zA-Z]+(\s+\d+)?\s*$/
8
+ def parse_with_hobo_fix(s)
9
+ if s =~ /^\s*\d+\s*(st|nd|rd|th)\s+[a-zA-Z]+(\s+\d+)?\s*$/
10
10
  s = s.sub(/\s*\d+(st|nd|rd|th)/) {|s| s[0..-3]}
11
11
  end
12
-
12
+
13
13
  # Chronic can't parse '1/1/2008 1:00' or '1/1/2008 1:00 PM',
14
14
  # so convert them to '1/1/2008 @ 1:00' and '1/1/2008 @ 1:00 PM'
15
15
  s = s.sub(/^\s*(\d+\/\d+\/\d+)\s+(\d+:\d+.*)/, '\1 @ \2')
16
- parse_without_hobo_fix(s, *options)
16
+ parse_without_hobo_fix(s)
17
17
  end
18
18
  alias_method_chain :parse, :hobo_fix
19
19
  end
@@ -39,7 +39,7 @@ class NilClass
39
39
  SafeNil.instance
40
40
  end
41
41
 
42
-
42
+
43
43
  def try(*args)
44
44
  if args.length==0
45
45
  # Hobo style try
@@ -49,7 +49,7 @@ class NilClass
49
49
  nil
50
50
  end
51
51
  end
52
-
52
+
53
53
  end
54
54
 
55
55
 
@@ -10,7 +10,7 @@ module Kernel
10
10
  end
11
11
 
12
12
  class It
13
-
13
+
14
14
  instance_methods.reject { |m| m =~ /^__/ || m.to_s == 'object_id' }.each { |m| undef_method m }
15
15
 
16
16
  def initialize
@@ -22,7 +22,9 @@ class String
22
22
  def safe_constantize
23
23
  Object.class_eval self
24
24
  rescue NameError => e
25
- if e.missing_name != self
25
+ # Unfortunately we have to rely on the error message to figure out which constant was missing.
26
+ # NameError has a #name method but it is always nil
27
+ if e.message !~ /\b#{self}$/
26
28
  # oops - some other name error
27
29
  raise
28
30
  else
@@ -31,4 +33,4 @@ class String
31
33
  end
32
34
 
33
35
 
34
- end
36
+ end
data/lib/hobo_support.rb CHANGED
@@ -21,7 +21,5 @@ require 'hobo_support/kernel'
21
21
  module HoboSupport
22
22
 
23
23
  VERSION = File.read(File.expand_path('../../VERSION', __FILE__)).strip
24
- @@root = Pathname.new File.expand_path('../..', __FILE__)
25
- def self.root; @@root; end
26
24
 
27
25
  end
@@ -21,7 +21,7 @@ When a module is included in a class, it gets a callback on the `included` metho
21
21
  alias_method_chain :name, :shouting
22
22
  end
23
23
  end
24
- end
24
+ end
25
25
 
26
26
  module M1
27
27
  def self.included(base)
@@ -76,7 +76,7 @@ In Ruby we use modules to factor out features that are shared by more than one c
76
76
  module M
77
77
  def self.included(base)
78
78
  base.send(:extend, ClassMethods)
79
- end
79
+ end
80
80
 
81
81
  module ClassMethods
82
82
  def foo; 123; end
@@ -7,17 +7,17 @@ HoboSupport is a mixed bag of core ruby extensions that have been extracted from
7
7
  doctest_require: '../lib/hobo_support'
8
8
  {.hidden}
9
9
 
10
+ >> HoboSupport::VERSION
11
+ => "1.3.0.pre6"
10
12
 
11
13
  ## Contents
12
14
 
13
- * [Chronic](/manual/hobo_support/chronic)
14
15
  * [Enumerable](/manual/hobo_support/enumerable)
15
16
  * [Hash](/manual/hobo_support/hash)
16
17
  * [Implies](/manual/hobo_support/implies)
17
18
  * [Metaid](/manual/hobo_support/metaid)
18
19
  * [Methodphitamine](/manual/hobo_support/methodphitamine)
19
20
  * [Module](/manual/hobo_support/module)
20
- * [XSS](/manual/hobo_support/xss)
21
21
 
22
22
  ## Object extensions
23
23
 
@@ -34,7 +34,7 @@ Like `is_a?` but multiple types to be checked in one go
34
34
 
35
35
  ## Method call extensions
36
36
 
37
- We have the "." operator to call methods on objects. These extensions introduce two "special dots".
37
+ We have the "." operator to call methods on objects. These extensions introduce two "special dots".
38
38
 
39
39
  ### `Object#_?`
40
40
 
metadata CHANGED
@@ -1,8 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hobo_support
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: 6
5
- version: 1.3.0.RC4
4
+ hash: -1637175975
5
+ prerelease: true
6
+ segments:
7
+ - 1
8
+ - 3
9
+ - 0
10
+ - pre10
11
+ version: 1.3.0.pre10
6
12
  platform: ruby
7
13
  authors:
8
14
  - Tom Locke
@@ -10,7 +16,7 @@ autorequire:
10
16
  bindir: bin
11
17
  cert_chain: []
12
18
 
13
- date: 2011-11-09 00:00:00 -05:00
19
+ date: 2010-10-10 00:00:00 -04:00
14
20
  default_executable:
15
21
  dependencies:
16
22
  - !ruby/object:Gem::Dependency
@@ -19,8 +25,13 @@ dependencies:
19
25
  requirement: &id001 !ruby/object:Gem::Requirement
20
26
  none: false
21
27
  requirements:
22
- - - ~>
28
+ - - ">="
23
29
  - !ruby/object:Gem::Version
30
+ hash: 7
31
+ segments:
32
+ - 3
33
+ - 0
34
+ - 0
24
35
  version: 3.0.0
25
36
  type: :runtime
26
37
  version_requirements: *id001
@@ -32,6 +43,9 @@ dependencies:
32
43
  requirements:
33
44
  - - ">="
34
45
  - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 0
35
49
  version: "0"
36
50
  type: :development
37
51
  version_requirements: *id002
@@ -49,7 +63,6 @@ files:
49
63
  - Rakefile
50
64
  - VERSION
51
65
  - hobo_support.gemspec
52
- - lib/generators/hobo_support/eval_template.rb
53
66
  - lib/generators/hobo_support/model.rb
54
67
  - lib/generators/hobo_support/thor_shell.rb
55
68
  - lib/hobo_support.rb
@@ -71,7 +84,6 @@ files:
71
84
  - lib/hobo_support/string.rb
72
85
  - lib/hobo_support/xss.rb
73
86
  - test/hobosupport.rdoctest
74
- - test/hobosupport/chronic.rdoctest
75
87
  - test/hobosupport/enumerable.rdoctest
76
88
  - test/hobosupport/hash.rdoctest
77
89
  - test/hobosupport/implies.rdoctest
@@ -93,17 +105,25 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
105
  requirements:
94
106
  - - ">="
95
107
  - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
96
111
  version: "0"
97
112
  required_rubygems_version: !ruby/object:Gem::Requirement
98
113
  none: false
99
114
  requirements:
100
115
  - - ">="
101
116
  - !ruby/object:Gem::Version
117
+ hash: 23
118
+ segments:
119
+ - 1
120
+ - 3
121
+ - 6
102
122
  version: 1.3.6
103
123
  requirements: []
104
124
 
105
125
  rubyforge_project: hobo
106
- rubygems_version: 1.6.2
126
+ rubygems_version: 1.3.7
107
127
  signing_key:
108
128
  specification_version: 3
109
129
  summary: Core Ruby extensions from the Hobo project
@@ -1,14 +0,0 @@
1
- module Generators
2
- module HoboSupport
3
- EvalTemplate = classy_module do
4
-
5
- private
6
- def eval_template(template_name)
7
- source = File.expand_path(find_in_source_paths(template_name))
8
- context = instance_eval('binding')
9
- ERB.new(::File.binread(source), nil, '-').result(context)
10
- end
11
-
12
- end
13
- end
14
- end
@@ -1,18 +0,0 @@
1
- # HoboSupport - Chronic extensions
2
-
3
- doctest_require: '../../lib/hobo_support'
4
- {.hidden}
5
-
6
- ## `Chronic.parse`
7
-
8
- Chronic.parse can't parse 'M/D/Y H:S', so convert it to 'M/D/Y @ H:S'.
9
-
10
- >> Chronic.parse('1/1/2008 1:00') == Chronic.parse('1/1/2008 @ 1:00')
11
-
12
- => true
13
-
14
- Chronic.parse takes additional options (see Chronic.parse).
15
-
16
- >> Chronic.parse('today', :guess => false).instance_of? Chronic::Span
17
-
18
- => true