filegen 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -26,7 +26,7 @@ Or install it yourself as:
26
26
  This gem ships with an executable called `filegen`. It makes the power of ERB
27
27
  available on the commandline.
28
28
 
29
- ## Usage
29
+ ## Usage on Commandline
30
30
 
31
31
  ### General advice
32
32
 
@@ -127,6 +127,48 @@ And get the following result.
127
127
  Hello my name is: Karl
128
128
  ```
129
129
 
130
+ ## Usage within ruby
131
+
132
+ ### Hash with Symbol-Keys
133
+
134
+ ```ruby
135
+ require 'filegen'
136
+ require 'stringio'
137
+
138
+ template = <<-EOS
139
+ Hi <%= lookup('name') %>
140
+ EOS
141
+
142
+ data = {
143
+ name: 'Karl'
144
+ }
145
+
146
+ generator = Filegen::Rubygen.new
147
+ puts generator.run(template, data)
148
+
149
+ # => Hi Karl
150
+ ```
151
+
152
+ ### Hash with String-Keys
153
+
154
+ ```ruby
155
+ require 'filegen'
156
+ require 'stringio'
157
+
158
+ template = <<-EOS
159
+ Hi <%= lookup('name') %>
160
+ EOS
161
+
162
+ data = {
163
+ 'name' => 'Karl'
164
+ }
165
+
166
+ generator = Filegen::Rubygen.new
167
+ puts generator.run(template, data)
168
+
169
+ # => Hi Karl
170
+ ```
171
+
130
172
  ## Use Cases
131
173
 
132
174
  ### RPM packaging
@@ -162,8 +204,7 @@ chmod +x <wrapper>
162
204
 
163
205
  ## Future
164
206
 
165
- * Maybe I will add additional data sources. Please see the
166
- [Moneta](https://github.com/minad/moneta)-gem for possible candidates.
207
+ * Maybe I will add additional data sources.
167
208
 
168
209
  ## Contributing
169
210
 
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env rake
2
2
 
3
- require 'fedux_org/stdlib/rake'
3
+ require 'bundler'
4
+ Bundler.require :default, :test, :development
4
5
 
6
+ require 'fedux_org/stdlib/rake'
5
7
  require 'filegen/version'
6
8
 
7
9
  def software
@@ -100,8 +100,8 @@ SpaceAfterControlKeyword:
100
100
  SpaceAfterNot:
101
101
  Enabled: true
102
102
 
103
- SpaceAroundBlockBraces:
104
- Enabled: true
103
+ #SpaceAroundBlockBraces:
104
+ # Enabled: true
105
105
 
106
106
  SpaceAroundEqualsInParameterDefault:
107
107
  Enabled: true
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- Then /then environment contains the following variables/ do
2
+ Then(/then environment contains the following variables/) do
3
3
  $stderr.printf("%20s | %-20s\n", 'key', 'value')
4
4
  $stderr.printf("%20s+%-20s\n", '-' * 21 , '-' * 21)
5
5
 
@@ -17,6 +17,4 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
-
21
- spec.add_runtime_dependency 'moneta'
22
20
  end
@@ -1,10 +1,11 @@
1
1
  # encoding: utf-8
2
2
  require 'erb'
3
- require 'moneta'
4
3
  require 'optparse'
5
4
  require 'forwardable'
6
5
  require 'ostruct'
7
6
  require 'logger'
7
+ require 'active_support/hash_with_indifferent_access'
8
+ require 'stringio'
8
9
 
9
10
  require 'filegen/version'
10
11
  require 'filegen/ui'
@@ -15,6 +16,7 @@ require 'filegen/erb_generator'
15
16
  require 'filegen/data_source_builder'
16
17
  require 'filegen/data_sources/environment'
17
18
  require 'filegen/data_sources/yaml'
19
+ require 'filegen/rubygen'
18
20
  require 'filegen/exceptions'
19
21
 
20
22
  # Main class
@@ -1,20 +1,22 @@
1
1
  # encoding: utf-8
2
2
  module Filegen
3
+ # Data Sources
3
4
  module DataSources
4
5
  # Data source which makes environment variables available
5
6
  class Environment
6
- extend Forwardable
7
+ private
7
8
 
8
- # @!method fetch(key, default_value=nil)
9
- # Fetch value for key from data source
10
- def_delegator :@source, :fetch, :fetch
9
+ attr_reader :source
10
+
11
+ public
11
12
 
12
13
  # Create data source
13
14
  def initialize
14
- @source = Moneta.build do
15
- use :Transformer, key: :to_s, value: []
16
- adapter :Memory, backend: ENV
17
- end
15
+ @source = HashWithIndifferentAccess.new(ENV.to_hash)
16
+ end
17
+
18
+ def fetch(key, default_value = nil)
19
+ source[key.to_sym] || source[key.to_s] || default_value
18
20
  end
19
21
  end
20
22
  end
@@ -1,17 +1,24 @@
1
1
  # encoding: utf-8
2
2
  module Filegen
3
+ # Data Sources
3
4
  module DataSources
4
5
  # Data source which makes yaml files available
5
6
  class Yaml
6
- extend Forwardable
7
+ private
7
8
 
8
- # @!method fetch(key, default_value=nil)
9
- # Fetch value for key from data source.
10
- def_delegator :@source, :fetch, :fetch
9
+ attr_reader :source
10
+
11
+ public
11
12
 
12
13
  # Create data source
13
14
  def initialize(file)
14
- @source = Moneta.new(:YAML, file: file)
15
+ @source = HashWithIndifferentAccess.new(Psych.load_file(file))
16
+ rescue
17
+ @source = HashWithIndifferentAccess.new
18
+ end
19
+
20
+ def fetch(key, default_value = nil)
21
+ source[key.to_sym] || source[key.to_s] || default_value
15
22
  end
16
23
  end
17
24
  end
@@ -102,7 +102,7 @@ module Filegen
102
102
  end
103
103
 
104
104
  def exists?
105
- File.exists?(params.template)
105
+ File.exist?(params.template)
106
106
  end
107
107
 
108
108
  def erb_template?
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ module Filegen
3
+ # Generator for ruby code
4
+ class Rubygen
5
+ # Generate text
6
+ #
7
+ # @param [String] source
8
+ # The template used
9
+ # @param [Hash] data
10
+ # The data used within template evaluation
11
+ # @return [String]
12
+ # The evaluated template
13
+ def run(source, data)
14
+ result = StringIO.new
15
+ source = StringIO.new(source)
16
+
17
+ begin
18
+ generator = ErbGenerator.new(Data.new([HashWithIndifferentAccess.new(data)]))
19
+ generator.compile(source, result)
20
+ rescue RuntimeError => e
21
+ Filegen::Ui.error e.message
22
+ rescue Exceptions::ErbTemplateHasSyntaxErrors => e
23
+ Filegen::Ui.error "Syntax error in ERB-Template: \n" + e.message
24
+ end
25
+
26
+ result.string
27
+ end
28
+ end
29
+ end
@@ -9,7 +9,7 @@ module Filegen
9
9
 
10
10
  def formated_logger
11
11
  logger.formatter = proc { |severity, datetime, _, msg|
12
- sprintf("%s %s: %s\n", datetime, severity, msg)
12
+ format("%s %s: %s\n", datetime, severity, msg)
13
13
  }
14
14
 
15
15
  logger
@@ -1,4 +1,4 @@
1
1
  #main Filegen
2
2
  module Filegen
3
- VERSION = '0.3.1'
3
+ VERSION = '0.4.0'
4
4
  end
@@ -3,13 +3,20 @@ require 'spec_helper'
3
3
 
4
4
  describe DataSources::Environment do
5
5
  context '#fetch' do
6
- it 'retrieves environment variables' do
6
+ it 'retrieves environment variables as string' do
7
7
  in_environment 'MY_NAME' => 'Karl' do
8
8
  source = DataSources::Environment.new
9
9
  expect(source.fetch('MY_NAME')).to eq('Karl')
10
10
  end
11
11
  end
12
12
 
13
+ it 'retrieves environment variables as symbol' do
14
+ in_environment 'MY_NAME' => 'Karl' do
15
+ source = DataSources::Environment.new
16
+ expect(source.fetch(:MY_NAME)).to eq('Karl')
17
+ end
18
+ end
19
+
13
20
  it 'returns nil if variable cannot be found' do
14
21
  in_environment 'MY_NAME' => 'Karl' do
15
22
  source = DataSources::Environment.new
@@ -13,6 +13,16 @@ describe DataSources::Yaml do
13
13
  expect(source.fetch('MY_NAME')).to eq('Karl')
14
14
  end
15
15
 
16
+ it 'retrieves symbol variables from yaml file' do
17
+ file = create_file('blub.yaml', <<-EOF.strip_heredoc
18
+ ---
19
+ :MY_NAME: Karl
20
+ EOF
21
+ )
22
+ source = DataSources::Yaml.new(file)
23
+ expect(source.fetch('MY_NAME')).to eq('Karl')
24
+ end
25
+
16
26
  it 'returns nil if variable cannot be found' do
17
27
  file = create_file('blub.yaml', <<-EOF.strip_heredoc
18
28
  ---
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Rubygen do
5
+ context '#execute' do
6
+ it 'generates output based on hash with symbol keys' do
7
+ template = <<-EOS.strip_heredoc
8
+ <%= lookup('name') %>
9
+ EOS
10
+
11
+ data = {
12
+ name: 'karl'
13
+ }
14
+
15
+ generator = Rubygen.new
16
+ result = generator.run(template, data)
17
+
18
+ expect(result).to include('karl')
19
+ end
20
+
21
+ it 'generates output based on hash with string keys' do
22
+ template = <<-EOS.strip_heredoc
23
+ <%= lookup('name') %>
24
+ EOS
25
+
26
+ data = {
27
+ 'name' => 'karl'
28
+ }
29
+
30
+ generator = Rubygen.new
31
+ result = generator.run(template, data)
32
+
33
+ expect(result).to include('karl')
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe Rubygen do
5
+ context '#execute' do
6
+ it 'generates output' do
7
+ template = <<-EOS.strip_heredoc
8
+ <%= lookup('name') %>
9
+ EOS
10
+
11
+ data = {
12
+ name: 'karl'
13
+ }
14
+
15
+ generator = Rubygen.new
16
+ result = generator.run(template, data)
17
+
18
+ expect(result).to include('karl')
19
+ end
20
+ end
21
+ end
@@ -3,6 +3,11 @@ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
3
3
 
4
4
  require 'simplecov'
5
5
  SimpleCov.command_name 'rspec'
6
+ SimpleCov.start
7
+
8
+ # Pull in all of the gems including those in the `test` group
9
+ require 'bundler'
10
+ Bundler.require :default, :test, :development
6
11
 
7
12
  require 'filegen'
8
13
  include Filegen
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filegen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-14 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: moneta
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
12
+ date: 2014-03-26 00:00:00.000000000 Z
13
+ dependencies: []
30
14
  description: Evaluate erb templates
31
15
  email:
32
16
  - dg1@vrnetze.de
@@ -67,6 +51,7 @@ files:
67
51
  - lib/filegen/erb_generator.rb
68
52
  - lib/filegen/exceptions.rb
69
53
  - lib/filegen/options.rb
54
+ - lib/filegen/rubygen.rb
70
55
  - lib/filegen/runner.rb
71
56
  - lib/filegen/ui.rb
72
57
  - lib/filegen/version.rb
@@ -78,6 +63,8 @@ files:
78
63
  - spec/data_spec.rb
79
64
  - spec/erb_generator_spec.rb
80
65
  - spec/options_spec.rb
66
+ - spec/ruby_gen_spec.rb
67
+ - spec/rubygen_spec.rb
81
68
  - spec/spec_helper.rb
82
69
  - spec/support/config.rb
83
70
  - spec/support/debugging.rb
@@ -97,12 +84,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
84
  - - ! '>='
98
85
  - !ruby/object:Gem::Version
99
86
  version: '0'
87
+ segments:
88
+ - 0
89
+ hash: 1267357899602957187
100
90
  required_rubygems_version: !ruby/object:Gem::Requirement
101
91
  none: false
102
92
  requirements:
103
93
  - - ! '>='
104
94
  - !ruby/object:Gem::Version
105
95
  version: '0'
96
+ segments:
97
+ - 0
98
+ hash: 1267357899602957187
106
99
  requirements: []
107
100
  rubyforge_project:
108
101
  rubygems_version: 1.8.23
@@ -122,6 +115,8 @@ test_files:
122
115
  - spec/data_spec.rb
123
116
  - spec/erb_generator_spec.rb
124
117
  - spec/options_spec.rb
118
+ - spec/ruby_gen_spec.rb
119
+ - spec/rubygen_spec.rb
125
120
  - spec/spec_helper.rb
126
121
  - spec/support/config.rb
127
122
  - spec/support/debugging.rb