wpb 0.0.3 → 0.0.5

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.
Files changed (50) hide show
  1. data/Changelog.md +9 -3
  2. data/bin/wpb +3 -5
  3. data/doc/Bash.html +222 -0
  4. data/doc/Comment.html +411 -0
  5. data/doc/Gemfile.html +110 -0
  6. data/doc/Page.html +315 -0
  7. data/doc/PagePost.html +422 -0
  8. data/doc/Post.html +164 -0
  9. data/doc/Rakefile.html +107 -0
  10. data/doc/Setting.html +164 -0
  11. data/doc/User.html +415 -0
  12. data/doc/WPB.html +188 -0
  13. data/doc/WPB/AddType.html +254 -0
  14. data/doc/WPB/App.html +231 -0
  15. data/doc/bin/wpb.html +54 -0
  16. data/doc/created.rid +13 -0
  17. data/doc/index.html +114 -0
  18. data/doc/lib/wpb/bash_rb.html +56 -0
  19. data/doc/lib/wpb/comment_rb.html +54 -0
  20. data/doc/lib/wpb/page_rb.html +203 -0
  21. data/doc/lib/wpb/pagepost_rb.html +54 -0
  22. data/doc/lib/wpb/post_rb.html +52 -0
  23. data/doc/lib/wpb/setting_rb.html +54 -0
  24. data/doc/lib/wpb/user_rb.html +54 -0
  25. data/doc/lib/wpb/version_rb.html +52 -0
  26. data/doc/lib/wpb_rb.html +68 -0
  27. data/doc/rdoc.css +706 -0
  28. data/lib/wpb.rb +36 -29
  29. data/lib/wpb/bash.rb +18 -0
  30. data/lib/wpb/clamp/attribute.rb +37 -0
  31. data/lib/wpb/clamp/attribute_declaration.rb +40 -0
  32. data/lib/wpb/clamp/command.rb +137 -0
  33. data/lib/wpb/clamp/errors.rb +26 -0
  34. data/lib/wpb/clamp/help.rb +69 -0
  35. data/lib/wpb/clamp/option.rb +77 -0
  36. data/lib/wpb/clamp/option/declaration.rb +58 -0
  37. data/lib/wpb/clamp/option/parsing.rb +45 -0
  38. data/lib/wpb/clamp/parameter.rb +70 -0
  39. data/lib/wpb/clamp/parameter/declaration.rb +28 -0
  40. data/lib/wpb/clamp/parameter/parsing.rb +28 -0
  41. data/lib/wpb/clamp/subcommand.rb +23 -0
  42. data/lib/wpb/clamp/subcommand/declaration.rb +40 -0
  43. data/lib/wpb/clamp/subcommand/execution.rb +37 -0
  44. data/lib/wpb/clamp/version.rb +3 -0
  45. data/lib/wpb/comment.rb +51 -5
  46. data/lib/wpb/page.rb +46 -0
  47. data/lib/wpb/pagepost.rb +29 -16
  48. data/lib/wpb/user.rb +25 -0
  49. data/lib/wpb/version.rb +4 -1
  50. metadata +43 -2
data/lib/wpb.rb CHANGED
@@ -7,41 +7,48 @@ require "wpb/post"
7
7
  require "wpb/comment"
8
8
  require "active_record"
9
9
 
10
- config = {
11
- :adapter => "mysql",
12
- :socket => "/Applications/MAMP/tmp/mysql/mysql.sock", #/tmp/mysql.sock
13
- :host => "localhost",
14
- :username => "root",
15
- :password => "root",
16
- :database => "wordpress"
17
- }
10
+ ##
11
+ # The wrapper for the wpb gem
18
12
 
19
- ActiveRecord::Base.establish_connection(config)
20
-
21
- class AddType < ActiveRecord::Migration
22
- def self.up
23
- suppress_messages do
24
- unless column_exists? :wp_posts, :type
25
- add_column :wp_posts, :type, :string
26
- PagePost.reset_column_information
13
+ module WPB
14
+ class AddType < ActiveRecord::Migration
15
+ def self.up
16
+ suppress_messages do
17
+ unless column_exists? :wp_posts, :type
18
+ add_column :wp_posts, :type, :string
19
+ PagePost.reset_column_information
20
+ end
27
21
  end
28
22
  end
23
+
24
+ def self.down
25
+ remove_column :wp_posts, :type
26
+ end
29
27
  end
30
28
 
31
- def self.down
32
- remove_column :wp_posts, :type
33
- end
34
- end
29
+ class App
30
+ def self.run
31
+ config = {
32
+ :adapter => "mysql",
33
+ :socket => "/Applications/MAMP/tmp/mysql/mysql.sock", #/tmp/mysql.sock
34
+ :host => "localhost",
35
+ :username => "root",
36
+ :password => "root",
37
+ :database => "wordpress"
38
+ }
35
39
 
36
- AddType::up
37
- PagePost.all.each do |p|
38
- p.type = p.post_type.capitalize
39
- if p.post_type != "post" && p.post_type != "page"
40
- p.type = "Post"
40
+ ActiveRecord::Base.establish_connection(config)
41
+
42
+ AddType::up
43
+ PagePost.all.each do |p|
44
+ p.type = p.post_type.capitalize
45
+ if p.post_type != "post" && p.post_type != "page"
46
+ p.type = "Post"
47
+ end
48
+ p.save
49
+ end
50
+ end
41
51
  end
42
- p.save
43
52
  end
44
53
 
45
- module WPB
46
-
47
- end
54
+ WPB::App::run
data/lib/wpb/bash.rb ADDED
@@ -0,0 +1,18 @@
1
+ require "wpb/clamp/command"
2
+
3
+ class Bash < Clamp::Command
4
+ option ["-v", "--version"], :flag, "print version"
5
+
6
+ def execute
7
+ if version?
8
+ require "wpb/version"
9
+ print "WordPress Bash #{WPB::VERSION} (c) James Birtles"
10
+ else
11
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
12
+ libs = " -r irb/completion"
13
+ libs << " -r #{File.expand_path('../../wpb.rb', __FILE__)}"
14
+ puts "Connecting to database..."
15
+ exec "#{irb} #{libs}"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ module Clamp
2
+
3
+ class Attribute
4
+
5
+ attr_reader :description, :attribute_name, :default_value
6
+
7
+ def help_rhs
8
+ rhs = description
9
+ if defined?(@default_value)
10
+ rhs += " (default: #{@default_value.inspect})"
11
+ end
12
+ rhs
13
+ end
14
+
15
+ def help
16
+ [help_lhs, help_rhs]
17
+ end
18
+
19
+ def ivar_name
20
+ "@#{attribute_name}"
21
+ end
22
+
23
+ def read_method
24
+ attribute_name
25
+ end
26
+
27
+ def default_method
28
+ "default_#{read_method}"
29
+ end
30
+
31
+ def write_method
32
+ "#{attribute_name}="
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,40 @@
1
+ module Clamp
2
+
3
+ module AttributeDeclaration
4
+
5
+ protected
6
+
7
+ def define_accessors_for(attribute, &block)
8
+ define_reader_for(attribute)
9
+ define_default_for(attribute)
10
+ define_writer_for(attribute, &block)
11
+ end
12
+
13
+ def define_reader_for(attribute)
14
+ define_method(attribute.read_method) do
15
+ if instance_variable_defined?(attribute.ivar_name)
16
+ instance_variable_get(attribute.ivar_name)
17
+ elsif respond_to?(attribute.default_method)
18
+ send(attribute.default_method)
19
+ end
20
+ end
21
+ end
22
+
23
+ def define_default_for(attribute)
24
+ define_method(attribute.default_method) do
25
+ attribute.default_value
26
+ end
27
+ end
28
+
29
+ def define_writer_for(attribute, &block)
30
+ define_method(attribute.write_method) do |value|
31
+ if block
32
+ value = instance_exec(value, &block)
33
+ end
34
+ instance_variable_set(attribute.ivar_name, value)
35
+ end
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,137 @@
1
+ require 'clamp/errors'
2
+ require 'clamp/help'
3
+ require 'clamp/option/declaration'
4
+ require 'clamp/option/parsing'
5
+ require 'clamp/parameter/declaration'
6
+ require 'clamp/parameter/parsing'
7
+ require 'clamp/subcommand/declaration'
8
+ require 'clamp/subcommand/execution'
9
+
10
+ module Clamp
11
+
12
+ # {Command} models a shell command. Each command invocation is a new object.
13
+ # Command options and parameters are represented as attributes
14
+ # (see {Command::Declaration}).
15
+ #
16
+ # The main entry-point is {#run}, which uses {#parse} to populate attributes based
17
+ # on an array of command-line arguments, then calls {#execute} (which you provide)
18
+ # to make it go.
19
+ #
20
+ class Command
21
+
22
+ # Create a command execution.
23
+ #
24
+ # @param [String] invocation_path the path used to invoke the command
25
+ # @param [Hash] context additional data the command may need
26
+ #
27
+ def initialize(invocation_path, context = {})
28
+ @invocation_path = invocation_path
29
+ @context = context
30
+ end
31
+
32
+ # @return [String] the path used to invoke this command
33
+ #
34
+ attr_reader :invocation_path
35
+
36
+ # @return [Array<String>] unconsumed command-line arguments
37
+ #
38
+ def remaining_arguments
39
+ @remaining_arguments
40
+ end
41
+
42
+ # Parse command-line arguments.
43
+ #
44
+ # @param [Array<String>] arguments command-line arguments
45
+ # @return [Array<String>] unconsumed arguments
46
+ #
47
+ def parse(arguments)
48
+ @remaining_arguments = arguments.dup
49
+ parse_options
50
+ parse_parameters
51
+ @remaining_arguments
52
+ end
53
+
54
+ # Run the command, with the specified arguments.
55
+ #
56
+ # This calls {#parse} to process the command-line arguments,
57
+ # then delegates to {#execute}.
58
+ #
59
+ # @param [Array<String>] arguments command-line arguments
60
+ #
61
+ def run(arguments)
62
+ parse(arguments)
63
+ execute
64
+ execute_subcommands
65
+ end
66
+
67
+ # Execute the command (assuming that all options/parameters have been set).
68
+ #
69
+ # This method is designed to be overridden in sub-classes.
70
+ #
71
+ def execute
72
+ raise "you need to define #execute"
73
+ end
74
+
75
+ def execute_subcommands
76
+ if self.class.has_subcommands?
77
+ execute_subcommand
78
+ end
79
+ end
80
+
81
+ # @return [String] usage documentation for this command
82
+ #
83
+ def help
84
+ self.class.help(invocation_path)
85
+ end
86
+
87
+ include Clamp::Option::Parsing
88
+ include Clamp::Parameter::Parsing
89
+ include Clamp::Subcommand::Execution
90
+
91
+ protected
92
+
93
+ attr_accessor :context
94
+
95
+ private
96
+
97
+ def signal_usage_error(message)
98
+ e = UsageError.new(message, self)
99
+ e.set_backtrace(caller)
100
+ raise e
101
+ end
102
+
103
+ def help_requested=(value)
104
+ raise Clamp::HelpWanted.new(self)
105
+ end
106
+
107
+ class << self
108
+
109
+ include Clamp::Option::Declaration
110
+ include Clamp::Parameter::Declaration
111
+ include Clamp::Subcommand::Declaration
112
+ include Help
113
+
114
+ # Create an instance of this command class, and run it.
115
+ #
116
+ # @param [String] invocation_path the path used to invoke the command
117
+ # @param [Array<String>] arguments command-line arguments
118
+ # @param [Hash] context additional data the command may need
119
+ #
120
+ def run(invocation_path = File.basename($0), arguments = ARGV, context = {})
121
+ begin
122
+ new(invocation_path, context).run(arguments)
123
+ rescue Clamp::UsageError => e
124
+ $stderr.puts "ERROR: #{e.message}"
125
+ $stderr.puts ""
126
+ $stderr.puts "See: '#{e.command.invocation_path} --help'"
127
+ exit(1)
128
+ rescue Clamp::HelpWanted => e
129
+ puts e.command.help
130
+ end
131
+ end
132
+
133
+ end
134
+
135
+ end
136
+
137
+ end
@@ -0,0 +1,26 @@
1
+ module Clamp
2
+
3
+ class Error < StandardError
4
+
5
+ def initialize(message, command)
6
+ super(message)
7
+ @command = command
8
+ end
9
+
10
+ attr_reader :command
11
+
12
+ end
13
+
14
+ # raise to signal incorrect command usage
15
+ class UsageError < Error; end
16
+
17
+ # raise to request usage help
18
+ class HelpWanted < Error
19
+
20
+ def initialize(command)
21
+ super("I need help", command)
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,69 @@
1
+ require 'stringio'
2
+
3
+ module Clamp
4
+
5
+ module Help
6
+
7
+ def usage(usage)
8
+ @declared_usage_descriptions ||= []
9
+ @declared_usage_descriptions << usage
10
+ end
11
+
12
+ attr_reader :declared_usage_descriptions
13
+
14
+ def description=(description)
15
+ @description = description.dup
16
+ if @description =~ /^\A\n*( +)/
17
+ indent = $1
18
+ @description.gsub!(/^#{indent}/, '')
19
+ end
20
+ @description.strip!
21
+ end
22
+
23
+ attr_reader :description
24
+
25
+ def derived_usage_description
26
+ parts = parameters.map { |a| a.name }
27
+ parts.unshift("[OPTIONS]") if has_options?
28
+ parts.join(" ")
29
+ end
30
+
31
+ def usage_descriptions
32
+ declared_usage_descriptions || [derived_usage_description]
33
+ end
34
+
35
+ def help(invocation_path)
36
+ help = StringIO.new
37
+ help.puts "Usage:"
38
+ usage_descriptions.each_with_index do |usage, i|
39
+ help.puts " #{invocation_path} #{usage}".rstrip
40
+ end
41
+ if description
42
+ help.puts ""
43
+ help.puts description.gsub(/^/, " ")
44
+ end
45
+ detail_format = " %-29s %s"
46
+ if has_parameters?
47
+ help.puts "\nParameters:"
48
+ parameters.each do |parameter|
49
+ help.puts detail_format % parameter.help
50
+ end
51
+ end
52
+ if has_subcommands?
53
+ help.puts "\nSubcommands:"
54
+ recognised_subcommands.each do |subcommand|
55
+ help.puts detail_format % subcommand.help
56
+ end
57
+ end
58
+ if has_options?
59
+ help.puts "\nOptions:"
60
+ recognised_options.each do |option|
61
+ help.puts detail_format % option.help
62
+ end
63
+ end
64
+ help.string
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,77 @@
1
+ require 'clamp/attribute'
2
+
3
+ module Clamp
4
+
5
+ class Option < Attribute
6
+
7
+ def initialize(switches, type, description, options = {})
8
+ @switches = Array(switches)
9
+ @type = type
10
+ @description = description
11
+ if options.has_key?(:attribute_name)
12
+ @attribute_name = options[:attribute_name].to_s
13
+ end
14
+ if options.has_key?(:default)
15
+ @default_value = options[:default]
16
+ end
17
+ end
18
+
19
+ attr_reader :switches, :type
20
+
21
+ def attribute_name
22
+ @attribute_name ||= long_switch.sub(/^--(\[no-\])?/, '').tr('-', '_')
23
+ end
24
+
25
+ def long_switch
26
+ switches.find { |switch| switch =~ /^--/ }
27
+ end
28
+
29
+ def handles?(switch)
30
+ recognised_switches.member?(switch)
31
+ end
32
+
33
+ def flag?
34
+ @type == :flag
35
+ end
36
+
37
+ def flag_value(switch)
38
+ !(switch =~ /^--no-(.*)/ && switches.member?("--\[no-\]#{$1}"))
39
+ end
40
+
41
+ def read_method
42
+ if flag?
43
+ super + "?"
44
+ else
45
+ super
46
+ end
47
+ end
48
+
49
+ def extract_value(switch, arguments)
50
+ if flag?
51
+ flag_value(switch)
52
+ else
53
+ arguments.shift
54
+ end
55
+ end
56
+
57
+ def help_lhs
58
+ lhs = switches.join(", ")
59
+ lhs += " " + type unless flag?
60
+ lhs
61
+ end
62
+
63
+ private
64
+
65
+ def recognised_switches
66
+ switches.map do |switch|
67
+ if switch =~ /^--\[no-\](.*)/
68
+ ["--#{$1}", "--no-#{$1}"]
69
+ else
70
+ switch
71
+ end
72
+ end.flatten
73
+ end
74
+
75
+ end
76
+
77
+ end