tokenr 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Robert Beal
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ require 'logger'
2
+
3
+ module Logging
4
+ def logger
5
+ @logger ||= Logging.logger_for(self.class.name)
6
+ end
7
+
8
+ # Use a hash class-ivar to cache a unique Logger per class:
9
+ @loggers = {}
10
+
11
+ class << self
12
+ def logger_for(classname)
13
+ @loggers[classname] ||= configure_logger_for(classname)
14
+ end
15
+
16
+ def configure_logger_for(classname)
17
+ level = Logger::ERROR
18
+
19
+ if(defined?(LOGGING_LEVEL))
20
+ level = LOGGING_LEVEL
21
+ end
22
+
23
+ logger = Logger.new(STDOUT)
24
+ logger.level = level
25
+ logger.progname = classname
26
+ logger
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'term/ansicolor'
3
+ require 'win32console' unless !(RUBY_PLATFORM =~ /mswin32/)
4
+
5
+ class String
6
+ include Term::ANSIColor
7
+ end
8
+
9
+
@@ -0,0 +1,69 @@
1
+ require 'terminal'
2
+ require 'tokens_helpers'
3
+
4
+ class Tokens
5
+
6
+ def initialize(tokens_pattern='*.master.{config,tt}', globals_file='./globals.config', writer=TokensWriter.new)
7
+ @globals_file = globals_file
8
+ @tokens_pattern = tokens_pattern
9
+ @writer = writer
10
+ @globals = {}
11
+ end
12
+
13
+ def replace(path, default_environment='local')
14
+ puts 'Tokenising'.cyan
15
+ puts '############'.cyan
16
+
17
+ read_tokens_file(@globals_file)
18
+
19
+ @files = find_tokens_files_in(path)
20
+
21
+ @files.each do |file|
22
+ @environments = {}
23
+ read_tokens_for_file(file)
24
+
25
+ if !@environments.has_key?(default_environment)
26
+ raise InvalidEnvironment, "Environment #{default_environment} is not recognised. Possible environments are #{@environments.keys.join(', ')}".red
27
+ end
28
+
29
+ @environments.each_pair do |environment, values|
30
+ @writer.write_for(environment, file, values, @globals, true)
31
+ end
32
+
33
+ @writer.write_for('', file, @environments[default_environment], @globals, false)
34
+ puts ''
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def find_tokens_files_in(path)
41
+ files = Dir.glob("#{path}/**/#{@tokens_pattern}", File::FNM_CASEFOLD)
42
+ puts "#{files.length} config(s) found for tokenising"
43
+ puts ''
44
+
45
+ files
46
+ end
47
+
48
+ def read_tokens_for_file(file)
49
+ read_tokens_file(file.gsub('.master.', '.tokens.'))
50
+ puts "Tokensing - #{file}"
51
+ puts "Environments - #{@environments.keys.join(', ')}"
52
+ end
53
+
54
+ def read_tokens_file(path)
55
+ if(File.exist?(path))
56
+ begin
57
+ eval(File.read(path))
58
+ rescue SyntaxError => exception
59
+ raise exception, "Syntax error in the tokens file #{path} - #{exception.message}".red
60
+ end
61
+ else
62
+ puts "No tokens file found at #{path}".yellow
63
+ end
64
+ end
65
+
66
+ end
67
+
68
+ class InvalidEnvironment < StandardError
69
+ end
@@ -0,0 +1,14 @@
1
+
2
+ def keys_for(environment, values)
3
+ environment = environment.to_s.downcase
4
+
5
+ if @environments.has_key?(environment)
6
+ @environments[environment].merge!(values)
7
+ else
8
+ @environments[environment] = values
9
+ end
10
+ end
11
+
12
+ def share_with(environments, values)
13
+ environments.each { |environment| keys_for(environment, values) }
14
+ end
@@ -0,0 +1,50 @@
1
+
2
+ class TokensWriter
3
+
4
+ def write_for(environment, master_file, tokens, globals, check_usage)
5
+ @master_file = master_file
6
+ @environment = environment
7
+
8
+ output_file = @master_file.gsub('.master', environment.empty? ? '' : ".#{environment}")
9
+ text = File.read(@master_file)
10
+
11
+ check_if_tokens_are_used(text, tokens) if check_usage
12
+ text = replace_tokens(text, tokens)
13
+ text = replace_tokens(text, globals)
14
+
15
+ write_to_file(output_file, text)
16
+
17
+ matches = text.scan(/(\$[\w\d\-_\.]+\$)/)
18
+
19
+ if (matches.any?)
20
+ raise UnReplacedTokenException, "There are untokenised value(s): #{matches.join(', ').strip} still in #{@output_file}!".red
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def replace_tokens(text, tokens)
27
+ tokens.each_pair do |key, value|
28
+ text.gsub!(/\$#{key}\$/, value.to_s)
29
+ end
30
+
31
+ text
32
+ end
33
+
34
+ def check_if_tokens_are_used(text, tokens)
35
+ tokens.each { |key, value| print_unused_token_warning(key) if !text.include?("$#{key}$") }
36
+ end
37
+
38
+ def print_unused_token_warning(key)
39
+ puts "$#{key}$ token is not used for '#{@environment}'".yellow
40
+ end
41
+
42
+ def write_to_file(file, text)
43
+ File.open(file, 'w') { |f| f.write(text) }
44
+ end
45
+
46
+ end
47
+
48
+ class UnReplacedTokenException < StandardError
49
+ end
50
+
data/lib/tokenr.rb ADDED
@@ -0,0 +1,6 @@
1
+ root_dir = File.expand_path(File.dirname(__FILE__))
2
+ $: << root_dir
3
+ $: << File.join(root_dir, 'tokenr')
4
+ $: << File.join(root_dir, 'tokenr', 'support')
5
+
6
+ Dir.glob(File.join(root_dir, '**/*.rb')).each {|file| require file }
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tokenr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Robert Beal
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-14 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &13835080 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.9.2.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *13835080
25
+ - !ruby/object:Gem::Dependency
26
+ name: term-ansicolor
27
+ requirement: &13834560 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.7
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *13834560
36
+ - !ruby/object:Gem::Dependency
37
+ name: logger
38
+ requirement: &13832260 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 1.2.8
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *13832260
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec
49
+ requirement: &13831600 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - =
53
+ - !ruby/object:Gem::Version
54
+ version: 2.9.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *13831600
58
+ - !ruby/object:Gem::Dependency
59
+ name: mocha
60
+ requirement: &13831100 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - =
64
+ - !ruby/object:Gem::Version
65
+ version: 0.10.5
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *13831100
69
+ - !ruby/object:Gem::Dependency
70
+ name: rdoc
71
+ requirement: &13830540 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - =
75
+ - !ruby/object:Gem::Version
76
+ version: '3.12'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *13830540
80
+ - !ruby/object:Gem::Dependency
81
+ name: bundler
82
+ requirement: &13830000 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - =
86
+ - !ruby/object:Gem::Version
87
+ version: 1.1.3
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *13830000
91
+ - !ruby/object:Gem::Dependency
92
+ name: jeweler
93
+ requirement: &13829440 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - =
97
+ - !ruby/object:Gem::Version
98
+ version: 1.8.3
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *13829440
102
+ - !ruby/object:Gem::Dependency
103
+ name: simplecov
104
+ requirement: &13828880 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *13828880
113
+ description: Find and tokenise files!
114
+ email: robertbeal@gmail.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files:
118
+ - LICENSE.txt
119
+ files:
120
+ - lib/tokenr.rb
121
+ - lib/tokenr/support/logging.rb
122
+ - lib/tokenr/support/terminal.rb
123
+ - lib/tokenr/tokens.rb
124
+ - lib/tokenr/tokens_helpers.rb
125
+ - lib/tokenr/tokens_writer.rb
126
+ - LICENSE.txt
127
+ homepage: http://bitbucket.org/robertbeal/tokenr
128
+ licenses:
129
+ - MIT
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ segments:
141
+ - 0
142
+ hash: -307851476781773166
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubyforge_project:
151
+ rubygems_version: 1.8.17
152
+ signing_key:
153
+ specification_version: 3
154
+ summary: Build tasks for .Net projects
155
+ test_files: []