ruth 0.0.4 → 0.0.6
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 +4 -4
- data/lib/ruth.rb +3 -1
- data/lib/ruth/hash.rb +152 -0
- data/lib/ruth/json.rb +26 -0
- data/lib/ruth/version.rb +2 -1
- data/lib/ruth/yaml.rb +30 -0
- data/ruth.gemspec +10 -9
- metadata +10 -8
- data/lib/ruth/gemfile.rb +0 -137
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc13b5765de8fa7d982a0aaa2bdf0c2e5331f958
|
4
|
+
data.tar.gz: 301982ea1407940d4e5df2dec39a6e243568bc4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afe8a5539d5bc25a9fbbbe571efbf06cfa0f5e20c9791afa2b58a48df53fb918bd42aac1fd88f361c9289e315664a8683f31179d4cf1207f133ac13e15acf48b
|
7
|
+
data.tar.gz: f494c9c310bd71c57ce345111c509f357461254386f1079aa74cbe7a0cdde22aebe97a5a3f6a1b660e90f3fd1ff907afa140e11aeb6db32cfaccbea82e419549
|
data/lib/ruth.rb
CHANGED
data/lib/ruth/hash.rb
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
# Ruth Gemfile what
|
2
|
+
module Ruth
|
3
|
+
# Gemfile generator
|
4
|
+
class Gemfile
|
5
|
+
# Hash parser
|
6
|
+
class Hash
|
7
|
+
attr_accessor :file, :gem, :gemfile
|
8
|
+
attr_writer :data
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@gem = []
|
12
|
+
end
|
13
|
+
|
14
|
+
# Public - Generate Gemfile contents
|
15
|
+
#
|
16
|
+
# Returns Array
|
17
|
+
def output
|
18
|
+
parse_gemfile_item
|
19
|
+
@gem.join("\n")
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# Private - Go trough provided keys and generate output
|
25
|
+
#
|
26
|
+
# Returns nil
|
27
|
+
def parse_gemfile_item
|
28
|
+
@data.keys.map do |key|
|
29
|
+
case key
|
30
|
+
when :source then sources
|
31
|
+
when :general then general_list
|
32
|
+
when :group then group_list
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Private - Fill in source list
|
38
|
+
#
|
39
|
+
# Returns nil
|
40
|
+
def sources
|
41
|
+
case @data[:source]
|
42
|
+
when String then gem << "source '#{@data[:source]}"
|
43
|
+
when Array then @data[:source].each { |h| @gem << "source '#{h}'" }
|
44
|
+
end
|
45
|
+
@gem << ''
|
46
|
+
end
|
47
|
+
|
48
|
+
# Private - Generate gem list depending on type
|
49
|
+
#
|
50
|
+
# Returns nil
|
51
|
+
def general_list
|
52
|
+
@data[:general].each { |g| gem_list(g) }
|
53
|
+
end
|
54
|
+
|
55
|
+
# Private - Generate gem group
|
56
|
+
#
|
57
|
+
# Returns nil
|
58
|
+
def group_list
|
59
|
+
@data[:group].each do |group|
|
60
|
+
@gem << gem_group(group[:group_name])
|
61
|
+
group[:gems].each { |item| gem_list(item, true) }
|
62
|
+
@gem << "end\n"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Private - Create gem listing from a provided Array or Hash
|
67
|
+
#
|
68
|
+
# item - Array or Hash gem list
|
69
|
+
# tab - nil/true add tab indentation
|
70
|
+
#
|
71
|
+
# Returns nil
|
72
|
+
def gem_list(item, tab = nil)
|
73
|
+
item.key?(:name)
|
74
|
+
rescue NoMethodError
|
75
|
+
@gem << format_gem_item(item, tab)
|
76
|
+
else
|
77
|
+
@gem << detailed_gem_list(item, tab)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Private - Generate "gem" line depending onthe provided options
|
81
|
+
#
|
82
|
+
# hash - Hash Gem definition
|
83
|
+
# format - true/false states if tabbed formatting should be added
|
84
|
+
#
|
85
|
+
# Returns Array
|
86
|
+
def detailed_gem_list(hash, format)
|
87
|
+
items = []
|
88
|
+
hash.keys.map do |key|
|
89
|
+
case key
|
90
|
+
when :name then items << format_gem_item(hash[key], format)
|
91
|
+
when :version then items << verify_version(hash[key])
|
92
|
+
when :group then items << gem_group
|
93
|
+
else items << gem_inline_item(key, hash[key])
|
94
|
+
end
|
95
|
+
end
|
96
|
+
items.join(', ')
|
97
|
+
end
|
98
|
+
|
99
|
+
# Private - Outputs gem line formatted or not
|
100
|
+
#
|
101
|
+
# gem - String gem line
|
102
|
+
# formatting - true/false
|
103
|
+
#
|
104
|
+
# Returns String
|
105
|
+
def format_gem_item(gem, format)
|
106
|
+
if format
|
107
|
+
" gem '#{gem}'"
|
108
|
+
else
|
109
|
+
"gem '#{gem}'"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Private - Return String for Gem line of additional options
|
114
|
+
#
|
115
|
+
# item - String name of the definition
|
116
|
+
# value - String value to assing
|
117
|
+
#
|
118
|
+
# Return String
|
119
|
+
def gem_inline_item(item, value)
|
120
|
+
":#{item} => '#{value}'"
|
121
|
+
end
|
122
|
+
|
123
|
+
# Private - Check kind of group we hav
|
124
|
+
#
|
125
|
+
# group - Array or String of groups where gem belongs
|
126
|
+
#
|
127
|
+
# Returns String
|
128
|
+
def gem_group(group)
|
129
|
+
if group.kind_of?(String)
|
130
|
+
"group :#{group} do"
|
131
|
+
elsif group.kind_of?(Array)
|
132
|
+
":group [#{group.join(', ')}]"
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# Private - Check if version key data syntax is correct
|
137
|
+
#
|
138
|
+
# version - String
|
139
|
+
#
|
140
|
+
# Returns String
|
141
|
+
def verify_version(version)
|
142
|
+
ver = [/>=/, /~>/, /</].any? { |w| w =~ version }
|
143
|
+
if ver
|
144
|
+
"'#{version}'"
|
145
|
+
else
|
146
|
+
fail "Please provide correct version: ~> #{hash[:version]} / >= \
|
147
|
+
#{hash[:version]}"
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
data/lib/ruth/json.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ruth
|
2
|
+
class Gemfile
|
3
|
+
# JSON suppoer for Ruth
|
4
|
+
class JSON
|
5
|
+
attr_accessor :json
|
6
|
+
|
7
|
+
def initialize(json)
|
8
|
+
@json = json
|
9
|
+
@data = parse_json_file
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
# Private - Read JSON file
|
15
|
+
#
|
16
|
+
# Return Hash
|
17
|
+
def parse_json_file
|
18
|
+
if File.exist?(@file)
|
19
|
+
JSON.parse(IO.readlines(@file))
|
20
|
+
else
|
21
|
+
JSON.parse(@file)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/ruth/version.rb
CHANGED
data/lib/ruth/yaml.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Ruth Gemfile what
|
2
|
+
module Ruth
|
3
|
+
# Gemfile generator
|
4
|
+
class Gemfile
|
5
|
+
# YAML suppoer for Ruth
|
6
|
+
class Yaml < Ruth::Gemfile::Hash
|
7
|
+
attr_accessor :yaml
|
8
|
+
|
9
|
+
def initialize(yaml)
|
10
|
+
super()
|
11
|
+
|
12
|
+
@yaml = yaml
|
13
|
+
@data = parse_yaml
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
# Private - Read YAML file
|
19
|
+
#
|
20
|
+
# Return Hash
|
21
|
+
def parse_yaml
|
22
|
+
if File.exist?(@yaml)
|
23
|
+
@data = YAML.load_file(@yaml)
|
24
|
+
else
|
25
|
+
@data = YAML.load(@yaml)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/ruth.gemspec
CHANGED
@@ -4,19 +4,20 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'ruth/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'ruth'
|
8
8
|
spec.version = Ruth::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
11
|
-
spec.summary = %q
|
12
|
-
spec.
|
13
|
-
spec.
|
9
|
+
spec.authors = ['Antun Krasic']
|
10
|
+
spec.email = ['antun@martuna.co']
|
11
|
+
spec.summary = %q(Generate Gemfile from a YAML list)
|
12
|
+
spec.description = %q(Gemfile generator from YAML/JSON/Hash types)
|
13
|
+
spec.homepage = 'https://github.com/akrasic/ruth'
|
14
|
+
spec.license = 'MIT'
|
14
15
|
|
15
16
|
spec.files = `git ls-files -z`.split("\x0")
|
16
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
19
20
|
|
20
|
-
spec.add_development_dependency
|
21
|
-
spec.add_development_dependency
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
22
|
+
spec.add_development_dependency 'rake', '~> 10.3'
|
22
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Antun Krasic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,17 +28,17 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '10.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
-
description:
|
40
|
+
version: '10.3'
|
41
|
+
description: Gemfile generator from YAML/JSON/Hash types
|
42
42
|
email:
|
43
43
|
- antun@martuna.co
|
44
44
|
executables: []
|
@@ -51,8 +51,10 @@ files:
|
|
51
51
|
- README.md
|
52
52
|
- Rakefile
|
53
53
|
- lib/ruth.rb
|
54
|
-
- lib/ruth/
|
54
|
+
- lib/ruth/hash.rb
|
55
|
+
- lib/ruth/json.rb
|
55
56
|
- lib/ruth/version.rb
|
57
|
+
- lib/ruth/yaml.rb
|
56
58
|
- ruth.gemspec
|
57
59
|
homepage: https://github.com/akrasic/ruth
|
58
60
|
licenses:
|
data/lib/ruth/gemfile.rb
DELETED
@@ -1,137 +0,0 @@
|
|
1
|
-
# Ruth Gemfile what
|
2
|
-
module Ruth
|
3
|
-
# Gemfile generator
|
4
|
-
class Gemfile
|
5
|
-
attr_accessor :file, :data, :gem, :gemfile
|
6
|
-
|
7
|
-
def initialize(yaml_file)
|
8
|
-
@gem = []
|
9
|
-
@file = yaml_file
|
10
|
-
@data = parse_yaml_file
|
11
|
-
|
12
|
-
parse_gemfile_items
|
13
|
-
end
|
14
|
-
|
15
|
-
# Public - Generate Gemfile
|
16
|
-
#
|
17
|
-
# Returns Array
|
18
|
-
def final_gemfile
|
19
|
-
@gem.join("\n")
|
20
|
-
end
|
21
|
-
|
22
|
-
# Public - Write parsed data into a Gemfile
|
23
|
-
#
|
24
|
-
# file - String location fo the file
|
25
|
-
#
|
26
|
-
# Returns nil
|
27
|
-
def write_gemfile
|
28
|
-
begin
|
29
|
-
fd = File.open(@gemfile, 'w')
|
30
|
-
fd.write(final_gemfile)
|
31
|
-
ensure
|
32
|
-
fd.close unless fd.nil?
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
private
|
37
|
-
|
38
|
-
# Private - Go trough provided keys and generate output
|
39
|
-
#
|
40
|
-
# Returns nil
|
41
|
-
def parse_gemfile_items
|
42
|
-
@data.keys.map do |key|
|
43
|
-
case key
|
44
|
-
when :source
|
45
|
-
sources
|
46
|
-
when :general
|
47
|
-
general_list
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Private - Fill in source list
|
53
|
-
#
|
54
|
-
# Returns nil
|
55
|
-
def sources
|
56
|
-
if @data[:source].kind_of?(String)
|
57
|
-
@gem << "source '#{@data[:source]}"
|
58
|
-
elsif @data[:source].kind_of?(Array)
|
59
|
-
@data[:source].each do |h|
|
60
|
-
@gem<< "source '#{h}'"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# Private - Generate gem list depending on type
|
66
|
-
#
|
67
|
-
# Returns nil
|
68
|
-
def general_list
|
69
|
-
@data[:general].each do |g|
|
70
|
-
if g.kind_of?(String)
|
71
|
-
@gem<< "gem '#{g}'"
|
72
|
-
elsif g.kind_of?(Hash)
|
73
|
-
detailed_gem_list(g)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# Private - Generate "gem" line depending onthe provided options
|
79
|
-
#
|
80
|
-
# Returns nil
|
81
|
-
def detailed_gem_list(hash)
|
82
|
-
items = []
|
83
|
-
hash.keys.map do |key|
|
84
|
-
case key
|
85
|
-
when :name
|
86
|
-
items << "gem '#{hash[key]}'"
|
87
|
-
when :git
|
88
|
-
items << ":git => '#{hash[key]}'"
|
89
|
-
when :branch
|
90
|
-
items << ":branch => '#{hash[key]}'"
|
91
|
-
when :version
|
92
|
-
items << verify_version
|
93
|
-
when :require
|
94
|
-
items << ":require => #{hash[key]}"
|
95
|
-
when :group
|
96
|
-
items << gem_group
|
97
|
-
end
|
98
|
-
end
|
99
|
-
@gem << items.join(', ')
|
100
|
-
end
|
101
|
-
|
102
|
-
# Private - Check kind of group we hav
|
103
|
-
#
|
104
|
-
# group - Array or String of groups where gem belongs
|
105
|
-
#
|
106
|
-
# Returns String
|
107
|
-
def gem_group(group)
|
108
|
-
if group.kind_of?(String)
|
109
|
-
":group => #{group}"
|
110
|
-
elsif group.kind_of?(Array)
|
111
|
-
":group => [#{group.join(', ')}]"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
# Private - Check if version key data syntax is correct
|
116
|
-
#
|
117
|
-
# version - String
|
118
|
-
#
|
119
|
-
# Returns String
|
120
|
-
def verify_version(version)
|
121
|
-
ver = [/>=/, /~>/, /</].any? { |w| w =~ version }
|
122
|
-
if ver
|
123
|
-
version
|
124
|
-
else
|
125
|
-
fail "Please provide correct version: ~> #{hash[:version]} / >= \
|
126
|
-
#{hash[:version]}"
|
127
|
-
end
|
128
|
-
end
|
129
|
-
# Private - Read YAML file
|
130
|
-
#
|
131
|
-
# Return Hash
|
132
|
-
def parse_yaml_file
|
133
|
-
YAML.load_file(@file)
|
134
|
-
end
|
135
|
-
|
136
|
-
end
|
137
|
-
end
|