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 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