ditto_code 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 94116e826c5c80e1677bb93fa0995931aa91a846
4
+ data.tar.gz: a7bb58d325d8ba77a5397e9bf46939ed8d6c73e8
5
+ SHA512:
6
+ metadata.gz: ffc4edeb0b21be03a544bde6efb05653554cc510f719b52506f7b39b1af62f0e02ca88cc9758cffc9ffc9f91a8ffdb6e4803ce5d7f8706079a045e8ac46839bb
7
+ data.tar.gz: e3d830ff566898824715a0728e61ec574a19c883f873c054ccdb19d0e29baa3f4a1c34071dbf07470766cba2edd547bcaf01f4729b500272c4523eaee43613de
data/bin/dittoc ADDED
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env ruby
2
+ require 'ditto_code'
3
+
4
+ # ===============================================================
5
+ # FUNCTIONS
6
+ # ===============================================================
7
+
8
+ def usage(s)
9
+ $stderr.puts("Ditto say -> [Err] " + s)
10
+ $stderr.puts("Ditto say -> [Usage] #{File.basename($0)}: [-v <verbose>] [-f <folder>] [-r <recursive>] [-o <override files>] ENVIRONMENT file|folder")
11
+ exit(1)
12
+ end
13
+
14
+ # Check if the filepath is a file or a directory
15
+ def isFile?(filepath)
16
+ if File.file?(filepath)
17
+ true
18
+ else
19
+ false
20
+ end
21
+ end
22
+
23
+ # Check if the filepath is a directory
24
+ def isDirectory?(filepath)
25
+ if File.directory?(filepath)
26
+ true
27
+ else
28
+ false
29
+ end
30
+ end
31
+
32
+ def iterateFolder(folder)
33
+ # Is folder?
34
+ Dir.foreach("#{folder}") do |rb_file|
35
+ # Jump on . and ..
36
+ next if rb_file == '.' or rb_file == '..' or rb_file == './'
37
+
38
+ filepath = "#{folder}#{rb_file}"
39
+
40
+ if isFile?(filepath) && rb_file.end_with?('.rb')
41
+ @ditto.transformation(filepath)
42
+ elsif isDirectory?(filepath) && @recursive
43
+ # Recursive
44
+ iterateFolder("#{filepath}/")
45
+ end
46
+
47
+ end
48
+ end
49
+
50
+ # ===============================================================
51
+ # VARIAVLEs
52
+ # ===============================================================
53
+
54
+ $isFolder = false;
55
+ $folder = "";
56
+ $environment = "";
57
+ $verbose = false;
58
+ $override = false;
59
+ @recursive = false
60
+
61
+ # ===============================================================
62
+ # INITIATION
63
+ # ===============================================================
64
+
65
+ while ARGV[0]
66
+ case ARGV[0]
67
+ when '-f'
68
+ ARGV.shift
69
+ $isFolder = true
70
+ when '-v'
71
+ ARGV.shift
72
+ $verbose = ARGV.shift
73
+ when '-o'
74
+ ARGV.shift
75
+ $override = true
76
+ when '-r'
77
+ ARGV.shift
78
+ @recursive = true
79
+ when /^-/
80
+ usage("Unknown option: #{ARGV[0].inspect}");
81
+ else
82
+
83
+ if $environment.empty?
84
+ $environment = ARGV.shift;
85
+ else
86
+ $folder = ARGV.shift;
87
+ end
88
+
89
+ end
90
+ end
91
+
92
+ # ===============================================================
93
+ # EXECUTION
94
+ # ===============================================================
95
+
96
+ # Initiate ditto
97
+ @ditto = DittoCode::Parse.new($environment, $override)
98
+
99
+ # Check if the user has introduce a folder/file
100
+ if $folder.empty?
101
+
102
+ usage("There aren't any folder/file")
103
+
104
+ else
105
+
106
+ # Check if is a folder
107
+ if $isFolder
108
+ # Check /
109
+ unless $folder.end_with?("/") then $folder = $folder + "/" end
110
+ # Iterate inside the folder
111
+ iterateFolder($folder)
112
+ else
113
+ # Only a file
114
+ ditto.transformation($folder)
115
+ end
116
+
117
+ end
data/lib/ditto_code.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'dittocode/parse'
2
+ require 'dittocode/exec'
3
+ require 'dittocode/talk'
4
+ include DittoCode::Exec
5
+ include DittoCode::Talk
6
+
7
+ module DittoCode
8
+ def self.symbolize_keys h
9
+ h.inject({}) { |opts,(k,v)| opts[(k.to_sym rescue k) || k] = v; opts }
10
+ end
11
+ end
@@ -0,0 +1,29 @@
1
+ module DittoCode
2
+
3
+ @initialize = false
4
+
5
+ module Exec
6
+ def self.if (environment)
7
+
8
+ # check the env code
9
+ unless @initialize
10
+ check_env
11
+ end
12
+
13
+ if ENV["DITTOCODE_ENV"] == environment
14
+ yield
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ # Check the presence of the environment constant
21
+ def check_env
22
+ if ENV["DITTOCODE_ENV"].nil? || ENV["DITTOCODE_ENV"].empty?
23
+ puts 'Ditto say -> Environment isn\'t declared'
24
+ end
25
+ @initialize = true
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,155 @@
1
+ module DittoCode
2
+ class Parse
3
+
4
+ # Require
5
+ require 'indentation'
6
+
7
+ # Say hello ditto
8
+ def self.hi
9
+ say "Hi man! What's up?"
10
+ end
11
+
12
+ # Initialize the environment
13
+ def initialize(environment, override)
14
+ @env = environment;
15
+ @override = override;
16
+ end
17
+
18
+ # Transform the file based in the environment
19
+ def transformation(file_path)
20
+
21
+ # Start to read the file
22
+ file = File.open(file_path)
23
+ @file_name = File.basename(file_path, ".rb")
24
+ @dir_name = File.dirname(file_path) + "/"
25
+
26
+ # Generate the new archive
27
+ out_file = initiateFile(file_path)
28
+
29
+ dittos = 0;
30
+ actions = { atack: false }
31
+
32
+ # Get the text
33
+ # Protect against nil or directory when it's a file
34
+ begin
35
+ text = file.read
36
+
37
+ # Each line........
38
+ text.each_line do | line |
39
+
40
+ m = /[\s]*DittoCode::Exec.if[\s]+['|"](?<environment>[a-zA-Z]+)['|"] do/.match(line)
41
+
42
+ if m
43
+ actions[:env] = m[:environment]
44
+ actions[:atack] = true;
45
+ actions[:ends] = 1;
46
+ else
47
+
48
+ if !actions[:atack]
49
+ out_file.puts(line)
50
+ else
51
+ # He is transforming
52
+ dittos += 1
53
+
54
+ # Check if the line is end
55
+ if isEnd? line
56
+
57
+ # If is the last end, it's coincide with the end of the block
58
+ if actions[:ends] == 1
59
+ actions[:atack] = false
60
+ elsif actions[:env] == @env
61
+ # Only how if we must mantain it
62
+ out_file.puts(line.indent(-1))
63
+ end
64
+
65
+ actions[:ends] -= 1
66
+
67
+ else
68
+
69
+ # prints of coincide with the environment
70
+ if actions[:env] == @env
71
+ out_file.puts(line.indent(-1))
72
+ end
73
+
74
+ # Check if we need to add a new end
75
+ new_ends = moreEnds? line
76
+ actions[:ends] += new_ends
77
+ dittos += new_ends
78
+ end
79
+
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ say "[Ok] #{dittos} lines ditted on #{@dir_name}#{@file_name}!"
87
+ closeFile(out_file)
88
+
89
+ rescue => e
90
+
91
+ if e.class == Errno::EISDIR
92
+ say "[Err] If you wants to use a directory use the option -f"
93
+ else
94
+ say "[Err] Oh no! I have an error :("
95
+ end
96
+
97
+ end
98
+ end
99
+
100
+ private
101
+
102
+ # Detect an end line
103
+ def isEnd?(line)
104
+
105
+ # Coincide with an end!
106
+ if /^[\s]*end/.match(line)
107
+ return true
108
+ end
109
+
110
+ return false
111
+ end
112
+
113
+ # Detect if we need to add a new end
114
+ def moreEnds?(line)
115
+
116
+ # Get the initializers of blocks
117
+ initializers = line.scan(/^(if|do|def)[\s]+/).size + line.scan(/[\s]+(if|do|def)[\s]+/).size + line.scan(/[\s]+(if|do|def)$/).size
118
+ # Get the ends blocks
119
+ finals = line.scan(/[\s]+(end)[\s]+/).size + line.scan(/^(end)[\s]+/).size + line.scan(/[\s]+(end)$/).size
120
+
121
+ # Return the difference
122
+ initializers - finals
123
+
124
+ end
125
+
126
+ # Open the file
127
+ def initiateFile(file_path)
128
+
129
+ if(@override)
130
+ File.new("#{@dir_name}#{@file_name}_tmp.rb", "w")
131
+ else
132
+ File.new("#{@dir_name}#{@file_name}_#{@env}.rb", "w")
133
+ end
134
+
135
+ end
136
+
137
+ # Close the file
138
+ #
139
+ # file => file to close
140
+ # file_name => name of the file
141
+ # file_path => path of the original file
142
+ def closeFile(file)
143
+
144
+ # Close the file
145
+ file.close;
146
+
147
+ if(@override)
148
+ File.delete(file)
149
+ File.rename(file, "#{@dir_name}#{@file_name}.rb")
150
+ end
151
+
152
+ end
153
+ end
154
+
155
+ end
@@ -0,0 +1,12 @@
1
+ module DittoCode
2
+
3
+ module Talk
4
+
5
+ # Ditto wants to say something!
6
+ def say(string)
7
+ puts "Ditto say -> #{string}"
8
+ end
9
+
10
+ end
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ditto_code
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Angel M Miguel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: indentation
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.1
27
+ description: Transform your ruby code based on a custom variable.
28
+ email: angel@laux.es
29
+ executables:
30
+ - dittoc
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - bin/dittoc
35
+ - lib/ditto_code.rb
36
+ - lib/dittocode/exec.rb
37
+ - lib/dittocode/parse.rb
38
+ - lib/dittocode/talk.rb
39
+ homepage: https://github.com/Angelmmiguel/ditto_code
40
+ licenses:
41
+ - MIT
42
+ metadata: {}
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 2.2.2
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: ditto
63
+ test_files: []