semver2 3.3.2 → 3.3.3

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 (4) hide show
  1. data/.semver +1 -1
  2. data/lib/dsl.rb +59 -0
  3. data/lib/runner.rb +26 -31
  4. metadata +4 -3
data/.semver CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  :major: 3
3
3
  :minor: 3
4
- :patch: 2
4
+ :patch: 3
5
5
  :special: ''
6
6
  :metadata: ''
@@ -0,0 +1,59 @@
1
+ module XSemVer
2
+
3
+ module DSL
4
+
5
+ def self.included(klass)
6
+ klass.extend ClassMethods
7
+ klass.send :include, InstanceMethods
8
+ end
9
+
10
+ class CommandError < StandardError
11
+ end
12
+
13
+
14
+
15
+
16
+ module InstanceMethods
17
+
18
+ # Calls an instance method defined via the ::command class method.
19
+ # Raises CommandError if the command does not exist.
20
+ def run_command(command)
21
+ method_name = "#{self.class.command_prefix}#{command}"
22
+ if self.class.method_defined?(method_name)
23
+ send method_name
24
+ else
25
+ raise CommandError, "invalid command #{command}"
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+
32
+
33
+
34
+ module ClassMethods
35
+
36
+ # Defines an instance method based on the first command name.
37
+ # The method executes the code of the given block.
38
+ # Aliases methods for any subsequent command names.
39
+ def command(*command_names, &block)
40
+ method_name = "#{command_prefix}#{command_names.shift}"
41
+ define_method method_name, &block
42
+ command_names.each do |c|
43
+ alias_method "#{command_prefix}#{c}", method_name
44
+ end
45
+ end
46
+
47
+ # The prefix for any instance method defined by the ::command method.
48
+ def command_prefix
49
+ :_run_
50
+ end
51
+
52
+ end
53
+
54
+
55
+
56
+
57
+ end
58
+
59
+ end
@@ -1,27 +1,27 @@
1
1
  require 'semver'
2
+ require 'dsl'
2
3
 
3
4
  module XSemVer
4
5
 
5
6
  # Contains the logic for performing SemVer operations from the command line.
6
7
  class Runner
7
8
 
8
- class CommandError < StandardError
9
- end
10
-
9
+ include XSemVer::DSL
11
10
 
12
11
  # Run a semver command. Raise a CommandError if the command does not exist.
13
12
  # Expects an array of commands, such as ARGV.
14
13
  def initialize(*args)
15
14
  @args = args
16
- command = @args.shift || :tag
17
- method = "run_#{command}"
18
- raise CommandError, "invalid command #{command}" unless self.class.method_defined?(method)
19
- send method
15
+ run_command(@args.shift || :tag)
20
16
  end
21
17
 
18
+ private
22
19
 
23
- # Return the text to be displayed when the 'help' command is run.
24
- def self.help_text
20
+ def next_param_or_error(error_message)
21
+ @args.shift || raise(CommandError, error_message)
22
+ end
23
+
24
+ def help_text
25
25
  <<-HELP
26
26
  semver commands
27
27
  ---------------
@@ -40,8 +40,10 @@ PLEASE READ http://semver.org
40
40
  end
41
41
 
42
42
 
43
+
44
+
43
45
  # Create a new .semver file if the file does not exist.
44
- def run_initialize
46
+ command :initialize, :init do
45
47
  file = SemVer.file_name
46
48
  if File.exist? file
47
49
  puts "#{file} already exists"
@@ -50,13 +52,12 @@ PLEASE READ http://semver.org
50
52
  version.save file
51
53
  end
52
54
  end
53
- alias :run_init :run_initialize
54
55
 
55
56
 
56
57
  # Increment the major, minor, or patch of the .semver file.
57
- def run_increment
58
+ command :increment, :inc do
58
59
  version = SemVer.find
59
- dimension = @args.shift or raise CommandError, "required: major | minor | patch"
60
+ dimension = next_param_or_error("required: major | minor | patch")
60
61
  case dimension
61
62
  when 'major'
62
63
  version.major += 1
@@ -74,54 +75,48 @@ PLEASE READ http://semver.org
74
75
  version.metadata = ''
75
76
  version.save
76
77
  end
77
- alias :run_inc :run_increment
78
78
 
79
79
 
80
80
  # Set the pre-release of the .semver file.
81
- def run_special
81
+ command :special, :spe, :prerelease, :pre do
82
82
  version = SemVer.find
83
- special_str = @args.shift or raise CommandError, "required: an arbitrary string (beta, alfa, romeo, etc)"
84
- version.special = special_str
83
+ version.special = next_param_or_error("required: an arbitrary string (beta, alfa, romeo, etc)")
85
84
  version.save
86
85
  end
87
- alias :run_spe :run_special
88
- alias :run_pre :run_special
89
- alias :run_prerelease :run_special
90
86
 
91
87
 
92
88
  # Set the metadata of the .semver file.
93
- def run_metadata
89
+ command :metadata, :meta do
94
90
  version = SemVer.find
95
- special_str = @args.shift or raise CommandError, "required: an arbitrary string (beta, alfa, romeo, etc)"
96
- version.metadata = special_str
91
+ version.metadata = next_param_or_error("required: an arbitrary string (beta, alfa, romeo, etc)")
97
92
  version.save
98
93
  end
99
- alias :run_meta :run_metadata
100
94
 
101
95
 
102
96
  # Output the semver as specified by a format string.
103
97
  # See: SemVer#format
104
- def run_format
98
+ command :format do
105
99
  version = SemVer.find
106
- format_str = @args.shift or raise CommandError, "required: format string"
107
- puts version.format(format_str)
100
+ puts version.format(next_param_or_error("required: format string"))
108
101
  end
109
102
 
110
103
 
111
104
  # Output the semver with the default formatting.
112
105
  # See: SemVer#to_s
113
- def run_tag
106
+ command :tag do
114
107
  version = SemVer.find
115
108
  puts version.to_s
116
109
  end
117
110
 
118
111
 
119
112
  # Output instructions for using the semvar command.
120
- def run_help
121
- puts self.class.help_text
113
+ command :help do
114
+ puts help_text
122
115
  end
123
116
 
124
-
117
+
118
+
119
+
125
120
  end
126
121
 
127
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semver2
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.2
4
+ version: 3.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-06-23 00:00:00.000000000 Z
14
+ date: 2013-12-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
@@ -39,6 +39,7 @@ files:
39
39
  - .semver
40
40
  - semver2.gemspec
41
41
  - README.md
42
+ - lib/dsl.rb
42
43
  - lib/pre_release.rb
43
44
  - lib/runner.rb
44
45
  - lib/semver/semvermissingerror.rb
@@ -65,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
66
  version: '0'
66
67
  requirements: []
67
68
  rubyforge_project:
68
- rubygems_version: 1.8.24
69
+ rubygems_version: 1.8.23
69
70
  signing_key:
70
71
  specification_version: 3
71
72
  summary: Semantic Versioning