rego-ruby-ext 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTJlODQwNmY3MDBkYjA2M2YwN2VlMjZjMjJlOTQ5NzliOTQ4NTgxYw==
5
+ data.tar.gz: !binary |-
6
+ ODcyMGE1MWY0ZWI1YmVjMGYyMWQ0YzBmZGExODcxNGRmNzgwYjY5OA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NTJiMjg5NDAwYTRlNzZmOTA5NTAxODI4OWIwNDQxMzZjOGQwM2MzZDcwMDEw
10
+ NWI0NzMzZjkyNzU5NTgxYmRhNWI3OGJmYTZlZWQ0YjNiZWNkNWU3YzNiZTRh
11
+ NTA5Y2JkMzM2YWY2OWU4Y2Q2N2UxZDNmY2MwMGVmYTk1YTQ3Nzk=
12
+ data.tar.gz: !binary |-
13
+ YmFmYmY1ZjEzMjgzNDhjNTE0ZGUxZDgxMjAzOTUyZTgyM2MyOTJkMjcxZTM3
14
+ MmEwNDA1ZDMwNTEyYTE5NjBjMGIzMTg0ODNjMGNkNjQyY2FiMWNlNmQzOTFl
15
+ Y2YwYzQzY2I5ODU2NTYyZTIwM2RkNmZjZGRkMmRhZDM2OTRlZTY=
data/.document CHANGED
File without changes
data/.rspec CHANGED
File without changes
data/Gemfile CHANGED
@@ -1,14 +1,14 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
-
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
- group :development do
9
- gem "rdoc"
10
- gem "rspec", "~> 2.3.0"
11
- gem "bundler", "~> 1.0.0"
12
- gem "jeweler", "~> 1.6.4"
13
- gem "rcov", ">= 0"
14
- end
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rdoc"
10
+ gem "rspec"
11
+ gem "bundler"
12
+ gem "jeweler", "~> 1.8.8"
13
+ gem "rcov", ">= 0"
14
+ end
@@ -1,20 +1,20 @@
1
- Copyright (c) 2011 Alex Tkachev
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.
1
+ Copyright (c) 2011 Alex Tkachev
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.
data/README.md CHANGED
File without changes
data/Rakefile CHANGED
@@ -1,49 +1,49 @@
1
- # encoding: utf-8
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "rego-ruby-ext"
18
- gem.homepage = "http://github.com/alextk/rego-ruby-ext"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Some basic ruby core classes extensions with tests}
21
- gem.description = %Q{Ruby core extensions that are common for all ReGO projects}
22
- gem.email = "tkachev.alex@gmail.com"
23
- gem.authors = ["Alex Tkachev"]
24
- # dependencies defined in Gemfile
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
27
-
28
- require 'rspec/core'
29
- require 'rspec/core/rake_task'
30
- RSpec::Core::RakeTask.new(:spec) do |spec|
31
- spec.pattern = FileList['spec/**/*_spec.rb']
32
- end
33
-
34
- RSpec::Core::RakeTask.new(:rcov) do |spec|
35
- spec.pattern = 'spec/**/*_spec.rb'
36
- spec.rcov = true
37
- end
38
-
39
- task :default => :spec
40
-
41
- require 'rdoc/task'
42
- RDoc::Task.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
-
45
- rdoc.rdoc_dir = 'rdoc'
46
- rdoc.title = "rego-ruby-ext #{version}"
47
- rdoc.rdoc_files.include('README*')
48
- rdoc.rdoc_files.include('lib/**/*.rb')
49
- end
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "rego-ruby-ext"
18
+ gem.homepage = "http://github.com/alextk/rego-ruby-ext"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Some basic ruby core classes extensions with tests}
21
+ gem.description = %Q{Ruby core extensions that are common for all ReGO projects}
22
+ gem.email = "tkachev.alex@gmail.com"
23
+ gem.authors = ["Alex Tkachev"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rdoc/task'
42
+ RDoc::Task.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "rego-ruby-ext #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.7
data/init.rb CHANGED
@@ -1,2 +1,2 @@
1
- require File.join(File.dirname(__FILE__), "lib", "rego-ruby-ext")
2
-
1
+ require File.join(File.dirname(__FILE__), "lib", "rego-ruby-ext")
2
+
@@ -1,11 +1,11 @@
1
- #hash that true.is_a?(Boolean) and false.is_a?(Boolean) would work
2
- module Boolean
3
- end
4
-
5
- class TrueClass
6
- include Boolean
7
- end
8
-
9
- class FalseClass
10
- include Boolean
11
- end
1
+ #hash that true.is_a?(Boolean) and false.is_a?(Boolean) would work
2
+ module Boolean
3
+ end
4
+
5
+ class TrueClass
6
+ include Boolean
7
+ end
8
+
9
+ class FalseClass
10
+ include Boolean
11
+ end
@@ -1,4 +1,4 @@
1
- class Date
2
- # Adds empty? as instance methods to Date.
3
- def empty?; false; end
4
- end
1
+ class Date
2
+ # Adds empty? as instance methods to Date.
3
+ def empty?; false; end
4
+ end
@@ -1,31 +1,31 @@
1
- module Enumerable
2
-
3
- # Add dynamic attribute-based selectors.
4
- # Ex:
5
- # [{:name=>'Guy',:last_name=>'Shmuely'},
6
- # {:name=>'Jack',:last_name=>'Sperow'}].find_by_name_and_last_name('Guy','Shmuely')
7
- # => [{:name=>'Guy',:last_name=>'Shmuely'}]
8
- # [{:name=>'Guy',:last_name=>'Shmuely',:age=>25},
9
- # {:name=>'Jack',:last_name=>'Sperow'},
10
- # {:name=>'Roobin'}].collect_name_and_last_name
11
- # => [['Guy','Shmuely'],['Jack','Sperow'],['Roobin',nil]]
12
- def method_missing(method_id, *arguments)
13
- if match = /collect_([_a-zA-Z]\w*)/.match(method_id.to_s)
14
- attributes = match.captures.last.split('_and_')
15
- collection = self.collect{|array| attributes.collect{|attr| (array.is_a?(Array) || array.is_a?(Hash)) ? array[attr.to_sym] : array.send(attr.to_sym)}}
16
- collection.flatten! if attributes.size == 1
17
- collection
18
- elsif match = /select_by_([_a-zA-Z]\w*)/.match(method_id.to_s)
19
- attribute_names = match.captures.last.split('_and_')
20
- select do |element|
21
- flag=true
22
- attribute_names.each_with_index { |name, idx| value=(element.is_a?(Array) || element.is_a?(Hash)) ? element[name.to_sym] : element.send(name)
23
- flag=false unless value==arguments[idx] }
24
- flag
25
- end
26
- else
27
- super
28
- end
29
- end
30
-
31
- end
1
+ module Enumerable
2
+
3
+ # Add dynamic attribute-based selectors.
4
+ # Ex:
5
+ # [{:name=>'Guy',:last_name=>'Shmuely'},
6
+ # {:name=>'Jack',:last_name=>'Sperow'}].find_by_name_and_last_name('Guy','Shmuely')
7
+ # => [{:name=>'Guy',:last_name=>'Shmuely'}]
8
+ # [{:name=>'Guy',:last_name=>'Shmuely',:age=>25},
9
+ # {:name=>'Jack',:last_name=>'Sperow'},
10
+ # {:name=>'Roobin'}].collect_name_and_last_name
11
+ # => [['Guy','Shmuely'],['Jack','Sperow'],['Roobin',nil]]
12
+ def method_missing(method_id, *arguments)
13
+ if match = /collect_([_a-zA-Z]\w*)/.match(method_id.to_s)
14
+ attributes = match.captures.last.split('_and_')
15
+ collection = self.collect{|array| attributes.collect{|attr| (array.is_a?(Array) || array.is_a?(Hash)) ? array[attr.to_sym] : array.send(attr.to_sym)}}
16
+ collection.flatten! if attributes.size == 1
17
+ collection
18
+ elsif match = /select_by_([_a-zA-Z]\w*)/.match(method_id.to_s)
19
+ attribute_names = match.captures.last.split('_and_')
20
+ select do |element|
21
+ flag=true
22
+ attribute_names.each_with_index { |name, idx| value=(element.is_a?(Array) || element.is_a?(Hash)) ? element[name.to_sym] : element.send(name)
23
+ flag=false unless value==arguments[idx] }
24
+ flag
25
+ end
26
+ else
27
+ super
28
+ end
29
+ end
30
+
31
+ end
@@ -1,15 +1,15 @@
1
- # Adds several instance methods to NilClass.
2
- class NilClass
3
- # Ex: nil.empty? => true
4
- def empty?; true; end
5
- def blank?; true; end
6
-
7
- def any?; false; end
8
- def include?(*args); false; end
9
-
10
- def strip; nil; end
11
- def truncate; nil; end
12
-
13
- #DO NOT override to_sym this since it breaks globalize
14
- #def to_sym; ""; end
15
- end
1
+ # Adds several instance methods to NilClass.
2
+ class NilClass
3
+ # Ex: nil.empty? => true
4
+ def empty?; true; end
5
+ def blank?; true; end
6
+
7
+ def any?; false; end
8
+ def include?(*args); false; end
9
+
10
+ def strip; nil; end
11
+ def truncate; nil; end
12
+
13
+ #DO NOT override to_sym this since it breaks globalize
14
+ #def to_sym; ""; end
15
+ end
@@ -1,5 +1,5 @@
1
- class Numeric
2
- # Adds empty? as instance methods to Numric.
3
- # Ex: 5.empty? => false
4
- def empty?; false; end
5
- end
1
+ class Numeric
2
+ # Adds empty? as instance methods to Numric.
3
+ # Ex: 5.empty? => false
4
+ def empty?; false; end
5
+ end
@@ -1,4 +1,4 @@
1
- ['nil-ext', 'boolean-ext', 'date-ext', 'time-ext', 'enumerable-ext', 'hash-ext', 'numeric-ext', 'symbol-ext', 'string-interpolation', 'string-ext'].each do |file_name|
2
- require File.join(File.dirname(__FILE__), file_name)
3
- end
4
-
1
+ ['nil-ext', 'boolean-ext', 'date-ext', 'time-ext', 'enumerable-ext', 'numeric-ext', 'symbol-ext', 'string-interpolation', 'string-ext'].each do |file_name|
2
+ require File.join(File.dirname(__FILE__), file_name)
3
+ end
4
+
@@ -1,37 +1,37 @@
1
- class String
2
-
3
- # returns a hash like params containing all the "get" params from a given url
4
- # Ex:
5
- # 'http://wiki.rego.co.il/doku.php?id=development:horizon3:plugins:core_extensions:start&do=edit&rev='.to_params
6
- # => {:id=>'development:horizon3:plugins:core_extensions:start', :do=>'edit', :rev=>nil}
7
- def to_params
8
- hash = {}
9
- params=self.split("?")
10
- if params.size > 1
11
- params=params[1].split("&")
12
- params=params.collect{|param| param.split("=")}
13
- params.each do |param|
14
- hash[param[0].to_sym]=param[1]
15
- end
16
- end
17
- hash
18
- end
19
-
20
- # converts string to either TrueClass or FalseClass. If converion can't be made, returns nil
21
- def to_boolean
22
- s = self.downcase.strip
23
- if s == 'true'
24
- true
25
- elsif s == 'false'
26
- false
27
- else
28
- nil
29
- end
30
- end
31
-
32
- # matches and replaces placeholders in form of %{foo} or %<foo>
33
- def interpolate(values_hash = {}, options = {})
34
- StringInterpolation.interpolate(self, values_hash, options)
35
- end
36
-
37
- end
1
+ class String
2
+
3
+ # returns a hash like params containing all the "get" params from a given url
4
+ # Ex:
5
+ # 'http://wiki.rego.co.il/doku.php?id=development:horizon3:plugins:core_extensions:start&do=edit&rev='.to_params
6
+ # => {:id=>'development:horizon3:plugins:core_extensions:start', :do=>'edit', :rev=>nil}
7
+ def to_params
8
+ hash = {}
9
+ params=self.split("?")
10
+ if params.size > 1
11
+ params=params[1].split("&")
12
+ params=params.collect{|param| param.split("=")}
13
+ params.each do |param|
14
+ hash[param[0].to_sym]=param[1]
15
+ end
16
+ end
17
+ hash
18
+ end
19
+
20
+ # converts string to either TrueClass or FalseClass. If converion can't be made, returns nil
21
+ def to_boolean
22
+ s = self.downcase.strip
23
+ if s == 'true'
24
+ true
25
+ elsif s == 'false'
26
+ false
27
+ else
28
+ nil
29
+ end
30
+ end
31
+
32
+ # matches and replaces placeholders in form of %{foo} or %<foo>
33
+ def interpolate(values_hash = {}, options = {})
34
+ StringInterpolation.interpolate(self, values_hash, options)
35
+ end
36
+
37
+ end
@@ -1,50 +1,50 @@
1
- # heavily based on Masao Mutoh's gettext String interpolation extension
2
- # http://github.com/mutoh/gettext/blob/f6566738b981fe0952548c421042ad1e0cdfb31e/lib/gettext/core_ext/string.rb
3
-
4
- module StringInterpolation
5
- INTERPOLATION_PATTERN = Regexp.union(
6
- /%%/,
7
- /%\{(\w+)\}/, # matches placeholders like "%{foo}"
8
- /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ # matches placeholders like "%<foo>.d"
9
- )
10
-
11
- # define module methods (static methods, equivalent of writing def self.interpolate ... end)
12
- class << self
13
-
14
- # Replace variables (defined in sprintf syntax) in given <i>string</i> with values from <i>variables</i> hash.
15
- #
16
- # If variable value is not found there are 3 possible strategies (configurable via <i>:value_not_found</i> in third <i>options</i> argument):
17
- # * :raise - raise argument error
18
- # * :ignore - ignore the variable in string (leave as is, do not replace) (DEFAULT)
19
- # * :hide - replace the variable in string with empty string
20
- def interpolate(string, values, options = {})
21
- options[:not_found_strategy] ||= :ignore
22
- raise ArgumentError.new('Interpolation values must be a Hash.') unless values.kind_of?(Hash)
23
- interpolate_hash(string, values, options)
24
- end
25
-
26
- def interpolate_hash(string, values, options)
27
- string.gsub(INTERPOLATION_PATTERN) do |match|
28
- if match == '%%'
29
- '%'
30
- else
31
- key = ($1 || $2).to_sym
32
- if values.key?(key)
33
- value = values[key]
34
- value = value.call(values) if value.respond_to?(:call)
35
- $3 ? sprintf("%#{$3}", value) : value
36
- else
37
- if options[:not_found_strategy] == :raise
38
- raise ArgumentError.new("missing interpolation argument #{key} in #{string.inspect}. Given values are: (#{values.inspect})")
39
- elsif options[:not_found_strategy] == :hide
40
- value = ''
41
- else
42
- value = $&
43
- end
44
- end
45
- end
46
- end
47
- end
48
-
49
- end
50
- end
1
+ # heavily based on Masao Mutoh's gettext String interpolation extension
2
+ # http://github.com/mutoh/gettext/blob/f6566738b981fe0952548c421042ad1e0cdfb31e/lib/gettext/core_ext/string.rb
3
+
4
+ module StringInterpolation
5
+ INTERPOLATION_PATTERN = Regexp.union(
6
+ /%%/,
7
+ /%\{(\w+)\}/, # matches placeholders like "%{foo}"
8
+ /%<(\w+)>(.*?\d*\.?\d*[bBdiouxXeEfgGcps])/ # matches placeholders like "%<foo>.d"
9
+ )
10
+
11
+ # define module methods (static methods, equivalent of writing def self.interpolate ... end)
12
+ class << self
13
+
14
+ # Replace variables (defined in sprintf syntax) in given <i>string</i> with values from <i>variables</i> hash.
15
+ #
16
+ # If variable value is not found there are 3 possible strategies (configurable via <i>:value_not_found</i> in third <i>options</i> argument):
17
+ # * :raise - raise argument error
18
+ # * :ignore - ignore the variable in string (leave as is, do not replace) (DEFAULT)
19
+ # * :hide - replace the variable in string with empty string
20
+ def interpolate(string, values, options = {})
21
+ options[:not_found_strategy] ||= :ignore
22
+ raise ArgumentError.new('Interpolation values must be a Hash.') unless values.kind_of?(Hash)
23
+ interpolate_hash(string, values, options)
24
+ end
25
+
26
+ def interpolate_hash(string, values, options)
27
+ string.gsub(INTERPOLATION_PATTERN) do |match|
28
+ if match == '%%'
29
+ '%'
30
+ else
31
+ key = ($1 || $2).to_sym
32
+ if values.key?(key)
33
+ value = values[key]
34
+ value = value.call(values) if value.respond_to?(:call)
35
+ $3 ? sprintf("%#{$3}", value) : value
36
+ else
37
+ if options[:not_found_strategy] == :raise
38
+ raise ArgumentError.new("missing interpolation argument #{key} in #{string.inspect}. Given values are: (#{values.inspect})")
39
+ elsif options[:not_found_strategy] == :hide
40
+ value = ''
41
+ else
42
+ value = $&
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ end
50
+ end