aye_commander 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5cd9e163ad88759356856bb67d1631806f3a6061
4
- data.tar.gz: 92352f5d37a173072f885c6b44c6ae8c4b3bf64e
3
+ metadata.gz: 41be7b9a74745fe7d3a69b24b334b52900022feb
4
+ data.tar.gz: 65b0b4de86fa2fb3d75fbc19002e7f8914c0ed5c
5
5
  SHA512:
6
- metadata.gz: 6737d92b45dfc9becbfb301aa75498affbbca75ddf823179f9cd5c715c55902f9f52a6d30756c8e3bc7ba5f341b77a041aa38bd7f3d8adc928497747a5858b3e
7
- data.tar.gz: bfafe03df2dac3af038492aed9e4648f8cfc0cc0610b90edeacbb8cf09bb91e38e3e0bf49d4eda62b414574e81788463a6b5df8b8cbfd479c4b15d1e199fe229
6
+ metadata.gz: d2d9e76e953e642d10fb0e0dba1e043d67c5d6d0df87f1c4291fed06bcc7a03d78eb8806580e363dbcffd45213b27487b2e37d009887d14b2e5409f644bb13c7
7
+ data.tar.gz: 32460bc54a9b5abfb10038c6315cfac27551dc48ed1548b65c25f4e6e518dc4e838f52d12b11be82011b81bd4d44183591015fdbad2c5150b5855c07c3921692
@@ -2,8 +2,7 @@ module AyeCommander
2
2
  # This module handles methods that help a command instance represent its
3
3
  # contents in different ways.
4
4
  module Inspectable
5
- # This inspect mimics the one ActiveModel uses so hopefully it will also
6
- # look pretty during a pry session when the variables become too many.
5
+ # This inspect mimics ActiveModel for a better inspection.
7
6
  def inspect
8
7
  inspection = to_hash.map do |name, value|
9
8
  "#{name}: #{value}"
@@ -11,6 +10,22 @@ module AyeCommander
11
10
  "#<#{self.class} #{inspection}>"
12
11
  end
13
12
 
13
+ # This method mimics ActiveModel pretty_print for a better console output.
14
+ def pretty_print(pp)
15
+ pp.object_address_group(self) do
16
+ ivs = sorted_instance_variables.map(&:to_s)
17
+ pp.seplist(ivs, proc { pp.text ',' }) do |iv|
18
+ pp.breakable ' '
19
+ pp.group(1) do
20
+ pp.text iv
21
+ pp.text ':'
22
+ pp.breakable
23
+ pp.pp instance_variable_get(iv)
24
+ end
25
+ end
26
+ end
27
+ end
28
+
14
29
  # Returns a hash of the specified instance_variables
15
30
  # Defaults to returning all the currently existing instance variables
16
31
  def to_hash(limit = instance_variables)
@@ -32,5 +47,11 @@ module AyeCommander
32
47
  to_hash
33
48
  end
34
49
  end
50
+
51
+ # Sorts the instance variables in alphabetical order, but keeps @status at
52
+ # the beginning for easier inspection
53
+ def sorted_instance_variables
54
+ [:@status] | instance_variables.sort
55
+ end
35
56
  end
36
57
  end
@@ -2,6 +2,9 @@ module AyeCommander
2
2
  # This module contains mostly methods related to method missing and instance
3
3
  # variables
4
4
  module Ivar
5
+ AT = '@'.freeze
6
+ EQ = '='.freeze
7
+
5
8
  # Instance variable related class methods
6
9
  module ClassMethods
7
10
  # Adds the received reader to the class.
@@ -14,13 +17,21 @@ module AyeCommander
14
17
  # Transforms the received name to instance variable form
15
18
  # Eg: command -> @command
16
19
  def to_ivar(name)
17
- name[0] == '@' ? name.to_sym : "@#{name}".to_sym
20
+ name[0] == at ? name.to_sym : "@#{name}".to_sym
18
21
  end
19
22
 
20
23
  # Transforms the received name to normal variable form
21
24
  # Eg: @command -> command
22
25
  def to_nvar(name)
23
- name[0] == '@' ? name[1..-1].to_sym : name.to_sym
26
+ name[0] == at ? name[1..-1].to_sym : name.to_sym
27
+ end
28
+
29
+ def at
30
+ ::AyeCommander::Ivar::AT
31
+ end
32
+
33
+ def eq
34
+ ::AyeCommander::Ivar::EQ
24
35
  end
25
36
  end
26
37
 
@@ -73,7 +84,7 @@ module AyeCommander
73
84
  # Any method that ends with an equal sign will be able to be handled by
74
85
  # this method missing.
75
86
  def method_missing(name, *args)
76
- if name[-1] == '='
87
+ if name[-1] == self.class.eq
77
88
  var_name = to_ivar(name[0...-1])
78
89
  instance_variable_set var_name, args.first
79
90
  self.class.uses name[0...-1]
@@ -87,7 +98,7 @@ module AyeCommander
87
98
  private
88
99
 
89
100
  def respond_to_missing?(name, *args)
90
- name[-1] == '=' || super
101
+ name[-1] == self.class.eq || super
91
102
  end
92
103
  end
93
104
  end
@@ -1,3 +1,3 @@
1
1
  module AyeCommander
2
- VERSION = '1.0.2'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
@@ -12,6 +12,13 @@ describe AyeCommander::Inspectable do
12
12
  end
13
13
  end
14
14
 
15
+ context '#pretty_print' do
16
+ it 'gives a pretty print representation of the innards of the class' do
17
+ pretty_print = PP.pp(instance, ''.dup)
18
+ expect(pretty_print).to match(/#<#<Class:\dx\w+>:\dx\w+\n @status: :success,\n @other: :potato,\n @variable: :something>/)
19
+ end
20
+ end
21
+
15
22
  context '#to_hash' do
16
23
  it 'gives a hash representation of the innards of the class' do
17
24
  result = { :@status => :success, :@variable => :something, :@other => :potato }
@@ -42,4 +49,11 @@ describe AyeCommander::Inspectable do
42
49
  expect(instance.to_result_hash).to eq result
43
50
  end
44
51
  end
52
+
53
+ context '#sorted_instance_variables' do
54
+ it 'sorts the instance variables alphabetically but keeps @status at the beginning' do
55
+ sorted = %i[@status @other @variable]
56
+ expect(instance.sorted_instance_variables).to eq sorted
57
+ end
58
+ end
45
59
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aye_commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pyzlnar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-21 00:00:00.000000000 Z
11
+ date: 2017-11-03 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A gem that helps to write commands in ruby.
14
14
  email: pyzlnar@gmail.com
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  version: '0'
69
69
  requirements: []
70
70
  rubyforge_project:
71
- rubygems_version: 2.5.2
71
+ rubygems_version: 2.6.13
72
72
  signing_key:
73
73
  specification_version: 4
74
74
  summary: A simple command pattern gem