ruth 0.0.4 → 0.0.6

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: 2822401d523c65d950d73e29dad04628439ebab3
4
- data.tar.gz: 233cb38bef1b11d857d1b86f9456f2540400a3ac
3
+ metadata.gz: fc13b5765de8fa7d982a0aaa2bdf0c2e5331f958
4
+ data.tar.gz: 301982ea1407940d4e5df2dec39a6e243568bc4d
5
5
  SHA512:
6
- metadata.gz: b0481a973ef95d5d299ce295bca6e7006fe1cb30e6187efb5e43fa887e1171fb525f782dc26bfe2fdc60a18093cdebfc5d623dc15d94250e6515e95fab032ea2
7
- data.tar.gz: fa86a11655a82cb0e449128d13594cb12f89aa006b68b27e88f0d5df0bcba1025f072ee17c7b1a2db4e6a0f7723a236c62c4b69492a8e7b7310cf9eb5adbe815
6
+ metadata.gz: afe8a5539d5bc25a9fbbbe571efbf06cfa0f5e20c9791afa2b58a48df53fb918bd42aac1fd88f361c9289e315664a8683f31179d4cf1207f133ac13e15acf48b
7
+ data.tar.gz: f494c9c310bd71c57ce345111c509f357461254386f1079aa74cbe7a0cdde22aebe97a5a3f6a1b660e90f3fd1ff907afa140e11aeb6db32cfaccbea82e419549
data/lib/ruth.rb CHANGED
@@ -1,3 +1,5 @@
1
1
  require 'yaml'
2
- require 'ruth/gemfile'
2
+ require 'ruth/hash'
3
+ require 'ruth/yaml'
4
+ require 'ruth/json'
3
5
  require 'ruth/version'
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
@@ -1,3 +1,4 @@
1
+ # Ruth version
1
2
  module Ruth
2
- VERSION = "0.0.4"
3
+ VERSION = '0.0.6'
3
4
  end
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 = "ruth"
7
+ spec.name = 'ruth'
8
8
  spec.version = Ruth::VERSION
9
- spec.authors = ["Antun Krasic"]
10
- spec.email = ["antun@martuna.co"]
11
- spec.summary = %q{Generate Gemfile from a YAML list}
12
- spec.homepage = "https://github.com/akrasic/ruth"
13
- spec.license = "MIT"
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 = ["lib"]
19
+ spec.require_paths = ['lib']
19
20
 
20
- spec.add_development_dependency "bundler", "~> 1.6"
21
- spec.add_development_dependency "rake"
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
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-02 00:00:00.000000000 Z
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: '0'
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: '0'
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/gemfile.rb
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