peeky 0.0.14

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.
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Peeky
4
+ module Renderer
5
+ # Render: Simple instance method calls with minimum parameters
6
+ #
7
+ # Example output:
8
+ # instance.simple('first_param')
9
+ # instance.complex('aaa', ddd: 'ddd')
10
+ class MethodCallMinimumParamsRender
11
+ attr_reader :method_signature
12
+
13
+ def initialize(method_signature, instance_name = 'instance')
14
+ @instance_name = instance_name
15
+ @method_signature = method_signature
16
+ end
17
+
18
+ def render
19
+ name = method_signature.name
20
+
21
+ minimal_call_parameters = method_signature
22
+ .parameters
23
+ .map(&:minimal_call_format)
24
+ .reject { |minimal_call| minimal_call.nil? || minimal_call.strip.empty? }
25
+ .join(', ')
26
+
27
+ params = minimal_call_parameters.length.zero? ? '' : "(#{minimal_call_parameters})"
28
+
29
+ "#{@instance_name}.#{name}#{params}"
30
+ end
31
+
32
+ def debug
33
+ puts render
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Peeky
4
+ module Renderer
5
+ # Render: Method Signature in compact format
6
+ #
7
+ # Example output:
8
+ # def simple(first_param); end
9
+ # def complex(aaa, bbb = nil, *ccc, ddd:, eee: nil, **fff, &ggg); end
10
+ class MethodSignatureRender
11
+ attr_reader :method_signature
12
+
13
+ def initialize(method_signature)
14
+ @method_signature = method_signature
15
+ end
16
+
17
+ def render_signature
18
+ name = method_signature.name
19
+
20
+ formatted_parameters = method_signature.parameters.map(&:signature_format).join(', ')
21
+ params = formatted_parameters.length.zero? ? '' : "(#{formatted_parameters})"
22
+ "def #{name}#{params}"
23
+ end
24
+
25
+ def render_end
26
+ 'end'
27
+ end
28
+
29
+ def render
30
+ signature = "#{render_signature};"
31
+ "#{signature.ljust(80)}#{render_end}"
32
+ end
33
+
34
+ def debug
35
+ puts render
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Peeky
4
+ module Renderer
5
+ # Render: Method signature with debug code
6
+ # Stubbed Method Render
7
+ #
8
+ # Example output:
9
+ # def simple(first_param)
10
+ # puts 'method name: simple'
11
+ # puts first_param # first_param is a required positional paramater
12
+ # end
13
+ #
14
+ # def complex(aaa, bbb = nil, *ccc, ddd:, eee: nil, **fff, &ggg)
15
+ # puts 'method name: complex'
16
+ # puts aaa # aaa is a required positional paramater
17
+ # puts bbb # bbb is an optional positional paramater
18
+ # puts ccc # *ccc takes a list of positional params
19
+ # puts ddd # ddd: is a required named parameter
20
+ # puts eee # eee: is an optional named parameter
21
+ # puts fff # **fff takes a list of optional named parameters
22
+ # puts ggg # &ggg is block with many calling options, example - instance_eval(&block) if block_given?
23
+ # end
24
+ class MethodSignatureWithDebugRender
25
+ attr_reader :method_signature
26
+
27
+ def initialize(method_signature)
28
+ @method_signature = method_signature
29
+
30
+ @render_signature = Peeky::Renderer::MethodSignatureRender.new(method_signature)
31
+ end
32
+
33
+ def render_method
34
+ name = method_signature.name
35
+
36
+ indent = ''
37
+ output = "#{indent}#{@render_signature.render_signature}\n"
38
+ indent = ' '
39
+ output += "#{indent}puts 'method name: #{name}'\n"
40
+
41
+ output += render_logic(indent, 30)
42
+
43
+ indent = ''
44
+ output += "#{indent}#{@render_signature.render_end}\n"
45
+
46
+ output
47
+ end
48
+
49
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
50
+ def render_logic(indent, size)
51
+ output = ''
52
+ method_signature.parameters.each do |parameter|
53
+ line = ''
54
+ case parameter.type
55
+ when :param_required
56
+ line = "puts #{parameter.name.ljust(size)} # #{parameter.name} is a required positional paramater"
57
+ when :param_optional
58
+ line = "puts #{parameter.name.ljust(size)} # #{parameter.name} is an optional positional paramater"
59
+ when :splat
60
+ line = "puts #{parameter.name.ljust(size)} # *#{parameter.name} takes a list of positional params"
61
+ when :key_required
62
+ line = "puts #{parameter.name.ljust(size)} # #{parameter.name}: is a required named parameter"
63
+ when :key_optional
64
+ line = "puts #{parameter.name.ljust(size)} # #{parameter.name}: is an optional named parameter"
65
+ when :double_splat
66
+ line = "puts #{parameter.name.ljust(size)} # **#{parameter.name} takes a list of optional named parameters"
67
+ when :block
68
+ line = "puts #{parameter.name.ljust(size)} # &#{parameter.name} is block with many calling options, example - instance_eval(&block) if block_given?"
69
+ end
70
+
71
+ output += "#{indent}#{line}\n"
72
+ end
73
+ output
74
+ end
75
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
76
+
77
+ def render
78
+ render_method
79
+ end
80
+
81
+ def debug
82
+ puts render
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Peeky
4
+ VERSION = '0.0.14'
5
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/peeky/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.required_ruby_version = '>= 2.5'
7
+ spec.name = 'peeky'
8
+ spec.version = Peeky::VERSION
9
+ spec.authors = ['David']
10
+ spec.email = ['david@ideasmen.com.au']
11
+
12
+ spec.summary = 'Extracting meta data from ruby classes'
13
+ spec.description = 'Peeky is a Ruby GEM for peaking into ruby classes and extracting meta'
14
+ spec.homepage = 'http://appydave.com/gems/peeky'
15
+ spec.license = 'MIT'
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.' unless spec.respond_to?(:metadata)
20
+
21
+ # spec.metadata['allowed_push_host'] = "Set to 'http://mygemserver.com'"
22
+
23
+ spec.metadata['homepage_uri'] = spec.homepage
24
+ spec.metadata['source_code_uri'] = 'https://github.com/klueless-io/peeky'
25
+ spec.metadata['changelog_uri'] = 'https://github.com/klueless-io/peeky/commits/master'
26
+
27
+ # Specify which files should be added to the gem when it is released.
28
+ # The `git ls-files -z` loads the RubyGem files that have been added into git.
29
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
30
+ `git ls-files -z`.split("\x0").reject do |f|
31
+ f.match(%r{^(test|spec|features)/})
32
+ end
33
+ end
34
+ spec.bindir = 'exe'
35
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
36
+ spec.require_paths = ['lib']
37
+ # spec.extensions = ['ext/peeky/extconf.rb']
38
+
39
+ # spec.add_dependency 'tty-box', '~> 0.5.0'
40
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: peeky
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.14
5
+ platform: ruby
6
+ authors:
7
+ - David
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Peeky is a Ruby GEM for peaking into ruby classes and extracting meta
14
+ email:
15
+ - david@ideasmen.com.au
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".gitignore"
21
+ - ".rspec"
22
+ - ".rubocop.yml"
23
+ - ".rubocop_todo.yml"
24
+ - CODE_OF_CONDUCT.md
25
+ - Gemfile
26
+ - Guardfile
27
+ - LICENSE.txt
28
+ - README.md
29
+ - Rakefile
30
+ - bin/console
31
+ - bin/k
32
+ - bin/kgitsync
33
+ - bin/khotfix
34
+ - bin/setup
35
+ - hooks/pre-commit
36
+ - hooks/update-version
37
+ - lib/peeky.rb
38
+ - lib/peeky/attr_info.rb
39
+ - lib/peeky/class_info.rb
40
+ - lib/peeky/method_info.rb
41
+ - lib/peeky/parameter_info.rb
42
+ - lib/peeky/predicates/attr_reader_predicate.rb
43
+ - lib/peeky/predicates/attr_writer_predicate.rb
44
+ - lib/peeky/renderer/class_interface_render.rb
45
+ - lib/peeky/renderer/method_call_minimum_params_render.rb
46
+ - lib/peeky/renderer/method_signature_render.rb
47
+ - lib/peeky/renderer/method_signature_with_debug_render.rb
48
+ - lib/peeky/version.rb
49
+ - peeky.gemspec
50
+ homepage: http://appydave.com/gems/peeky
51
+ licenses:
52
+ - MIT
53
+ metadata:
54
+ homepage_uri: http://appydave.com/gems/peeky
55
+ source_code_uri: https://github.com/klueless-io/peeky
56
+ changelog_uri: https://github.com/klueless-io/peeky/commits/master
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '2.5'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ requirements: []
72
+ rubygems_version: 3.1.4
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Extracting meta data from ruby classes
76
+ test_files: []