bgem 0.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 63d339840b4211fef494fa54cae3a688c67271ba
4
+ data.tar.gz: a7521c7db2767fd2cc67384cd3dc9a0f0b92a662
5
+ SHA512:
6
+ metadata.gz: 81c88e6476c909372d33ec2ace1d18c5337ce3f55b77cfb28a914f9c750efde7b94271ca60554273e6850ca6e4b2ec026add36cd1083136dda74ca6f03ad80da
7
+ data.tar.gz: c7493723761256b417c11027b70b23c55bc45241e44393139b80b303815b7f740a292322123f4c771d3cdd351ff4c95b053a77d4ec04d3f260a15872b6ec4ef6
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'hobby-devtools'
4
+
5
+ gemspec
data/bgem.gemspec ADDED
@@ -0,0 +1,9 @@
1
+ Gem::Specification.new do |g|
2
+ g.name = 'bgem'
3
+ g.files = `git ls-files`.split($/)
4
+ g.version = '0.0.0'
5
+ g.summary = 'Build gems without too much hassle.'
6
+ g.authors = ['Anatoly Chernow']
7
+
8
+ g.executables << 'bgem'
9
+ end
data/bin/bgem ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bgem'
4
+ Bgem::CLI.run
data/lib/bgem.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'pathname'
2
+
3
+ class String
4
+ def indent number
5
+ lines.map { |line| "#{' '*number}#{line}" }.join
6
+ end
7
+ end
8
+
9
+ require 'bgem/cli'
10
+ require 'bgem/target_file'
11
+ require 'bgem/source_file'
data/lib/bgem/cli.rb ADDED
@@ -0,0 +1,18 @@
1
+ module Bgem
2
+ module CLI
3
+ MAIN_FILE = Dir['src/*.rb'][0]
4
+
5
+ def self.run
6
+ options = parse_argv
7
+ target = TargetFile.new (options[:output] || 'output.rb')
8
+ target.write SourceFile.new(options[:input] || MAIN_FILE).to_s
9
+ end
10
+
11
+ def self.parse_argv
12
+ ARGV.map do |string|
13
+ key, _colon, value = string.partition ':'
14
+ [key.to_sym, value]
15
+ end.to_h
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ module Bgem
2
+ class SourceFile
3
+ INDENT = 2
4
+
5
+ def initialize file, indent: 0
6
+ @file, @indent = (Pathname file), indent
7
+ @source = @file.read
8
+ @constant, @type, _rb = @file.basename.to_s.split '.'
9
+ end
10
+
11
+ def to_s
12
+ "#{@type} #{@constant}\n#{source}end".indent @indent
13
+ end
14
+
15
+ private
16
+ def source
17
+ source = @source.indent INDENT
18
+ source.prepend "#{before}\n\n" unless before.empty?
19
+ source.concat "\n#{after}\n" unless after.empty?
20
+ source
21
+ end
22
+
23
+ def self.concatenate_source_files *symbols
24
+ symbols.each do |symbol|
25
+ define_method symbol do
26
+ pattern = @file.dirname.join "#{__method__}.#{@constant}/*.rb"
27
+ Pathname.glob(pattern).map do |file|
28
+ self.class.new(file, indent: INDENT).to_s
29
+ end.join "\n\n"
30
+ end
31
+ end
32
+ end
33
+
34
+ concatenate_source_files :before, :after
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ module Bgem
2
+ class TargetFile
3
+ def initialize path
4
+ @path = Pathname path
5
+ end
6
+
7
+ def write string
8
+ @path.dirname.mkpath
9
+ @path.write string
10
+ end
11
+ end
12
+ end
data/spec/bgem_spec.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ describe do
4
+ it do
5
+ output = OUTPUT.read.lines
6
+
7
+ assert { output[0] == "module Main\n" }
8
+ assert { output[1] == " module Before\n" }
9
+ assert { output[2] == " class Inside\n" }
10
+ assert { output[3] == " in inside\n" }
11
+ assert { output[6] == " in before\n" }
12
+
13
+ assert { output[11] == " class After\n" }
14
+ end
15
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,15 @@
1
+ require 'hobby/devtools/rspec_helper'
2
+ require 'bgem'
3
+
4
+ INPUT = Pathname "spec/test_src/Main.module.rb"
5
+ OUTPUT = Pathname "/tmp/rspec.bgem.#{$$}/output.rb"
6
+
7
+ module Bgem
8
+ module CLI
9
+ def self.parse_argv
10
+ { input: INPUT, output: OUTPUT }
11
+ end
12
+ end
13
+ end
14
+
15
+ Bgem::CLI.run
@@ -0,0 +1 @@
1
+ class_method_inside_Main_module
@@ -0,0 +1 @@
1
+ in_after_class
@@ -0,0 +1 @@
1
+ in after module
@@ -0,0 +1 @@
1
+ in before
metadata ADDED
@@ -0,0 +1,58 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bgem
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Anatoly Chernow
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables:
16
+ - bgem
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".gitignore"
21
+ - Gemfile
22
+ - bgem.gemspec
23
+ - bin/bgem
24
+ - lib/bgem.rb
25
+ - lib/bgem/cli.rb
26
+ - lib/bgem/source_file.rb
27
+ - lib/bgem/target_file.rb
28
+ - spec/bgem_spec.rb
29
+ - spec/helper.rb
30
+ - spec/test_src/Main.module.rb
31
+ - spec/test_src/after.Main/After.class.rb
32
+ - spec/test_src/after.Main/AfterModule.module.rb
33
+ - spec/test_src/before.Main/Before.module.rb
34
+ - spec/test_src/before.Main/before.Before/Inside.class.rb
35
+ homepage:
36
+ licenses: []
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubyforge_project:
54
+ rubygems_version: 2.5.2
55
+ signing_key:
56
+ specification_version: 4
57
+ summary: Build gems without too much hassle.
58
+ test_files: []