glue 0.0.1 → 0.13.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.
- data/CHANGELOG +19 -0
- data/INSTALL +56 -0
- data/README +3 -0
- data/Rakefile +73 -10
- data/doc/AUTHORS +16 -0
- data/doc/LICENSE +33 -0
- data/doc/RELEASES +5 -0
- data/install.rb +47 -0
- data/lib/glue.rb +57 -59
- data/lib/glue/array.rb +61 -0
- data/lib/glue/attribute.rb +83 -0
- data/lib/glue/cache.rb +138 -0
- data/lib/glue/flexob.rb +12 -0
- data/lib/glue/hash.rb +122 -0
- data/lib/glue/inflector.rb +91 -0
- data/lib/glue/logger.rb +147 -0
- data/lib/glue/misc.rb +14 -0
- data/lib/glue/mixins.rb +36 -0
- data/lib/glue/number.rb +24 -0
- data/lib/glue/object.rb +32 -0
- data/lib/glue/pool.rb +60 -0
- data/lib/glue/property.rb +408 -0
- data/lib/glue/string.rb +162 -0
- data/lib/glue/time.rb +85 -0
- data/lib/glue/validation.rb +461 -0
- data/test/glue/tc_attribute.rb +22 -0
- data/test/glue/tc_cache.rb +45 -0
- data/test/glue/tc_hash.rb +38 -0
- data/test/glue/tc_logger.rb +39 -0
- data/test/glue/tc_numbers.rb +20 -0
- data/test/glue/tc_property.rb +91 -0
- data/test/glue/tc_property_mixins.rb +93 -0
- data/test/glue/tc_property_type_checking.rb +35 -0
- data/test/glue/tc_strings.rb +103 -0
- data/test/glue/tc_validation.rb +214 -0
- metadata +95 -89
- data/History.txt +0 -6
- data/Manifest.txt +0 -7
- data/README.txt +0 -127
- data/bin/glue +0 -1
- data/test/test_glue.rb +0 -218
data/CHANGELOG
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
17-03-2005 George Moschovitis <gm@navel.gr>
|
2
|
+
|
3
|
+
* Rakefile: updated and fixed bugs.
|
4
|
+
|
5
|
+
* test/*: changes to make the tests pass again.
|
6
|
+
|
7
|
+
12-03-2005 George Moschovitis <gm@navel.gr>
|
8
|
+
|
9
|
+
* test/glue/tc_validation.rb: added more tests.
|
10
|
+
|
11
|
+
* lib/glue/validation.rb (#validate_numeric): implemented,
|
12
|
+
|
13
|
+
10-03-2005 George Moschovitis <gm@navel.gr>
|
14
|
+
|
15
|
+
* lib/glue.rb: added Version.
|
16
|
+
|
17
|
+
* Rakefile: implemented.
|
18
|
+
|
19
|
+
* split from nitro CHANGELOG.
|
data/INSTALL
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
= Instalation with RubyGems
|
2
|
+
|
3
|
+
1. Download and install RubyGems:
|
4
|
+
|
5
|
+
http://rubygems.rubyforge.org
|
6
|
+
|
7
|
+
2. Install the distribution:
|
8
|
+
|
9
|
+
gem install glue
|
10
|
+
|
11
|
+
When asked about the dependencies to include, only accept
|
12
|
+
the dependencies for the RDBMS backends you are planning
|
13
|
+
to use.
|
14
|
+
|
15
|
+
3. Set environment variable (required to load RubyGems):
|
16
|
+
|
17
|
+
export RUBYOPT=-rubygems
|
18
|
+
|
19
|
+
You can add this in you .bashrc in Unix.
|
20
|
+
|
21
|
+
Alternatively you can run your applications with the -rubygem
|
22
|
+
option:
|
23
|
+
|
24
|
+
ruby -rubygem xxx.rb
|
25
|
+
|
26
|
+
= Installation without RubyGems using script.
|
27
|
+
|
28
|
+
Installation without RubyGems is *strongly* discouraged.
|
29
|
+
However, as Glue is all about freedom and possibilities,
|
30
|
+
a standard installation script is provided.
|
31
|
+
|
32
|
+
1. Switch to an administrator account
|
33
|
+
|
34
|
+
For example in Unix:
|
35
|
+
|
36
|
+
$ su -
|
37
|
+
|
38
|
+
2. Run the installation script.
|
39
|
+
|
40
|
+
$ ruby install.rb
|
41
|
+
|
42
|
+
This installation script also installs some vendor libraries
|
43
|
+
that you possibly have allready installed. Use with caution.
|
44
|
+
|
45
|
+
= Manual installation.
|
46
|
+
|
47
|
+
Uncompress your distribution (Unix example):
|
48
|
+
|
49
|
+
$ cd my_dir
|
50
|
+
$ tar xvfz glue-x.x.x.tar.gz
|
51
|
+
|
52
|
+
Put the libray dir in the Ruby path (Unix example):
|
53
|
+
|
54
|
+
$ export RUBYOPT='-I path/to/glue/lib'
|
55
|
+
|
56
|
+
|
data/README
ADDED
data/Rakefile
CHANGED
@@ -1,14 +1,77 @@
|
|
1
|
-
#
|
1
|
+
# * George Moschovitis <gm@navel.gr>
|
2
|
+
# (c) 2004-2005 Navel, all rights reserved.
|
3
|
+
# $Id$
|
2
4
|
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require '
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
require 'rake/testtask'
|
7
|
+
require 'rake/gempackagetask'
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
task :default => :package
|
10
|
+
|
11
|
+
# Run all tests.
|
12
|
+
|
13
|
+
Rake::TestTask.new(:test_all) do |t|
|
14
|
+
t.libs << 'test'
|
15
|
+
t.test_files = FileList['test/**/tc*.rb']
|
16
|
+
t.verbose = true
|
17
|
+
end
|
18
|
+
|
19
|
+
# Generate RDoc documentation.
|
20
|
+
|
21
|
+
Rake::RDocTask.new do |rd|
|
22
|
+
rd.main = 'README'
|
23
|
+
rd.rdoc_dir = 'doc/rdoc'
|
24
|
+
rd.rdoc_files.include('README', 'INSTALL', 'lib/**/*.rb')
|
25
|
+
rd.options << '--all --inline-source'
|
26
|
+
end
|
27
|
+
|
28
|
+
# Build gem.
|
29
|
+
|
30
|
+
spec = Gem::Specification.new do |s|
|
31
|
+
s.name = 'glue'
|
32
|
+
if File.read('lib/glue.rb') =~ /Version\s+=\s+'(\d+\.\d+\.\d+)'/
|
33
|
+
s.version = $1
|
34
|
+
else
|
35
|
+
raise 'No version found'
|
36
|
+
end
|
37
|
+
s.summary = 'Glue utilities'
|
38
|
+
s.description = 'A collection of utilities and useful classes'
|
39
|
+
s.add_dependency 'extensions', '>= 0.5'
|
40
|
+
s.add_dependency 'flexmock', '>= 0.0.3'
|
41
|
+
|
42
|
+
s.required_ruby_version = '>= 1.8.1'
|
43
|
+
|
44
|
+
s.files = FileList[
|
45
|
+
'[A-Z]*', 'install.rb', '{doc,lib,test,vendor}/**/*'
|
46
|
+
].exclude('.svn/**/*').exclude('**/*.log').to_a
|
47
|
+
|
48
|
+
s.require_path = 'lib'
|
49
|
+
s.autorequire = 'glue'
|
50
|
+
|
51
|
+
s.has_rdoc = true
|
52
|
+
s.extra_rdoc_files = FileList['[A-Z]*'].exclude('*.og').to_a
|
53
|
+
s.rdoc_options << '--main' << 'README' << '--title' << 'Glue Documentation'
|
54
|
+
s.rdoc_options << '--all' << '--inline-source'
|
55
|
+
|
56
|
+
s.test_files = []
|
57
|
+
|
58
|
+
s.bindir = 'bin'
|
59
|
+
|
60
|
+
s.author = 'George Moschovitis'
|
61
|
+
s.email = 'gm@navel.gr'
|
62
|
+
s.homepage = 'http://nitro.rubyforge.org'
|
63
|
+
s.rubyforge_project = 'nitro'
|
64
|
+
end
|
65
|
+
|
66
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
67
|
+
pkg.package_dir = 'dist'
|
68
|
+
pkg.need_zip = true
|
69
|
+
pkg.need_tar = true
|
70
|
+
end
|
71
|
+
|
72
|
+
# Manual install (not recommended).
|
73
|
+
|
74
|
+
task :install do
|
75
|
+
ruby 'install.rb'
|
12
76
|
end
|
13
77
|
|
14
|
-
# vim: syntax=Ruby
|
data/doc/AUTHORS
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
MAIN DEVELOPER:
|
2
|
+
|
3
|
+
* George Moschovitis <gm@navel.gr>
|
4
|
+
Project leader, architecture and design, code,
|
5
|
+
documentation, maintainer.
|
6
|
+
|
7
|
+
IDEAS, ADDITIONAL CODING, SUPPORT:
|
8
|
+
|
9
|
+
* Michael Neumann <mneumann@ntecs.de>
|
10
|
+
Design, additional coding and bug reports.
|
11
|
+
|
12
|
+
* Gavin Sinclair <gsinclair@soyabean.com.au>
|
13
|
+
Logger#trace method.
|
14
|
+
|
15
|
+
* Thomas Quas <tquas@yahoo.com>
|
16
|
+
Ideas, bug reports, unit tests.
|
data/doc/LICENSE
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
The BSD License
|
2
|
+
|
3
|
+
Copyright (c) 2004-2005, George 'tml' Moschovitis.
|
4
|
+
Copyright (c) 2004-2005, Navel Ltd. (http://www.navel.gr)
|
5
|
+
All rights reserved.
|
6
|
+
|
7
|
+
Redistribution and use in source and binary forms, with or without
|
8
|
+
modification, are permitted provided that the following conditions are
|
9
|
+
met:
|
10
|
+
|
11
|
+
* Redistributions of source code must retain the above copyright
|
12
|
+
notice, this list of conditions and the following disclaimer.
|
13
|
+
|
14
|
+
* Redistributions in binary form must reproduce the above copyright
|
15
|
+
notice, this list of conditions and the following disclaimer in the
|
16
|
+
documentation and/or other materials provided with the distribution.
|
17
|
+
|
18
|
+
* Neither the name of Navel nor the names of its contributors may be
|
19
|
+
used to endorse or promote products derived from this software
|
20
|
+
without specific prior written permission.
|
21
|
+
|
22
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
23
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
24
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
25
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
26
|
+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
27
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
28
|
+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
29
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
30
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
31
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
32
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
33
|
+
|
data/doc/RELEASES
ADDED
data/install.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# * George Moschovitis <gm@navel.gr>
|
4
|
+
# (c) 2004-2005 Navel, all rights reserved.
|
5
|
+
# $Id$
|
6
|
+
|
7
|
+
require 'rbconfig'
|
8
|
+
require 'ftools'
|
9
|
+
|
10
|
+
dst_dir = Config::CONFIG['sitelibdir']
|
11
|
+
|
12
|
+
Dir.chdir('lib') do
|
13
|
+
Dir['**/*.rb'].each do |file|
|
14
|
+
File.mkpath File.join(dst_dir, File.dirname(file)), true
|
15
|
+
File.install file, File.join(dst_dir, file), 0644, true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# gmosx: this is potentially dangerous, rethink.
|
20
|
+
|
21
|
+
Dir.chdir('vendor') do
|
22
|
+
Dir['**/*.rb'].each do |file|
|
23
|
+
File.mkpath File.join(dst_dir, File.dirname(file)), true
|
24
|
+
File.install file, File.join(dst_dir, file), 0644, true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
puts %{
|
29
|
+
|
30
|
+
|
31
|
+
---
|
32
|
+
Congratulations, you have successfully installed Og!
|
33
|
+
The libraries where installed in '#{dst_dir}'.
|
34
|
+
|
35
|
+
You probably need to install the Glue library
|
36
|
+
as well. (http://nitro.rubyforge.org)
|
37
|
+
|
38
|
+
To verify that everything works correctly, try to run an
|
39
|
+
example by issuing:
|
40
|
+
|
41
|
+
$ cd examples
|
42
|
+
$ ruby run.rb
|
43
|
+
|
44
|
+
at the command line.
|
45
|
+
|
46
|
+
Enjoy the magic of Og!
|
47
|
+
}
|
data/lib/glue.rb
CHANGED
@@ -1,64 +1,62 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
# = Glue
|
2
|
+
#
|
3
|
+
# General libraries used by various projects.
|
4
|
+
#
|
5
|
+
# George Moschovitis <gm@navel.gr>
|
6
|
+
# (c) 2004-2005 Navel, all rights reserved.
|
7
|
+
# $Id: glue.rb 300 2005-03-16 13:23:10Z gmosx $
|
8
|
+
|
9
|
+
require 'English'
|
10
|
+
require 'pp'
|
11
|
+
|
12
|
+
require 'glue/property'
|
13
|
+
require 'glue/attribute'
|
14
|
+
|
15
|
+
# The standard namespace module.
|
16
|
+
|
17
|
+
module N; end
|
18
|
+
|
19
|
+
class NilClass
|
20
|
+
|
21
|
+
# quite usefull for error tolerant apps.
|
22
|
+
# a bit dangerous? Will have to rethink this.
|
23
|
+
|
24
|
+
def empty?
|
25
|
+
return true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Class
|
30
|
+
#--
|
31
|
+
# gmosx: is this really needed?
|
32
|
+
#++
|
33
|
+
|
34
|
+
def to_i
|
35
|
+
return self.hash
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
module Kernel
|
40
|
+
|
41
|
+
# Pretty prints an exception/error object
|
42
|
+
# usefull for helpfull debug messages
|
43
|
+
#
|
44
|
+
# Input:
|
45
|
+
# The Exception/StandardError object
|
46
|
+
#
|
47
|
+
# Output:
|
48
|
+
# the pretty printed string
|
49
|
+
|
50
|
+
def pp_exception(ex)
|
51
|
+
return %{#{ex.message}\n\tBACKTRACE:\n\t#{ex.backtrace.join("\n\t")}\n\tLOGGED FROM:\n\t#{caller[0]}}
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
5
55
|
|
6
56
|
module Glue
|
7
57
|
|
8
|
-
|
9
|
-
DOMAIN = 'gluenow.com'
|
58
|
+
# The version.
|
10
59
|
|
11
|
-
|
12
|
-
class FormatHelper; include HTTParty; format :xml; end
|
60
|
+
Version = '0.13.0'
|
13
61
|
|
14
|
-
|
15
|
-
|
16
|
-
POST = '/api/post'
|
17
|
-
USER = '/api/user'
|
18
|
-
|
19
|
-
def initialize subdomain, user, pass
|
20
|
-
raise AuthError, 'Username, Password or Account subdomain is blank.' \
|
21
|
-
if subdomain.empty? || user.empty? || pass.empty?
|
22
|
-
@auth = { :username => user, :password => pass }
|
23
|
-
@site = "#{subdomain}.#{DOMAIN}"
|
24
|
-
self.class.base_uri @site
|
25
|
-
end
|
26
|
-
|
27
|
-
def valid_site?
|
28
|
-
Nokogiri::HTML(open("http://#{@site}")).at('body#login') ? true : false
|
29
|
-
end
|
30
|
-
|
31
|
-
def user_info
|
32
|
-
self.class.post(USER, :query => {}, :basic_auth => @auth)
|
33
|
-
end
|
34
|
-
|
35
|
-
def post title, body, *opts
|
36
|
-
self.class.post(
|
37
|
-
POST,
|
38
|
-
:query => {
|
39
|
-
:title => title,
|
40
|
-
:body => body,
|
41
|
-
:draft => opts.include?( :draft ) ,
|
42
|
-
:author => opts.include?( :author ) },
|
43
|
-
:basic_auth => @auth
|
44
|
-
)
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
class RSS < Glue::FormatHelper
|
50
|
-
|
51
|
-
NEWS = '/news/rss'
|
52
|
-
|
53
|
-
def initialize subdomain
|
54
|
-
raise AuthError, 'Account Subdomain is missing or blank' if subdomain.empty?
|
55
|
-
self.class.base_uri "#{subdomain}.#{DOMAIN}"
|
56
|
-
end
|
57
|
-
|
58
|
-
def feed limit=999, page=1
|
59
|
-
self.class.get("#{NEWS}?limit=#{limit}&page=#{page}")
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
62
|
+
end
|
data/lib/glue/array.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# * George Moschovitis <gm@navel.gr>
|
2
|
+
# (c) 2002-2005 Navel, all rights reserved.
|
3
|
+
# $Id: array.rb 282 2005-03-10 12:24:53Z gmosx $
|
4
|
+
|
5
|
+
require 'sync'
|
6
|
+
|
7
|
+
module N
|
8
|
+
|
9
|
+
# A thread-safe array. We use a sync object instead of a
|
10
|
+
# mutex, because it is re-entrant. An exclusive lock is
|
11
|
+
# needed when writing, a shared lock IS NEEDED when reading.
|
12
|
+
|
13
|
+
class SafeArray < Array
|
14
|
+
|
15
|
+
attr :sync
|
16
|
+
|
17
|
+
# gmosx: delegator is not used.
|
18
|
+
|
19
|
+
def initialize(delegator = nil)
|
20
|
+
@sync = Sync.new()
|
21
|
+
end
|
22
|
+
|
23
|
+
def << (value)
|
24
|
+
return @sync.synchronize(Sync::SH) { super }
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete_if(&block)
|
28
|
+
return @sync.synchronize(Sync::SH) { super }
|
29
|
+
end
|
30
|
+
|
31
|
+
def [](key)
|
32
|
+
return @sync.synchronize(Sync::SH) { super }
|
33
|
+
end
|
34
|
+
|
35
|
+
def []=(key, value)
|
36
|
+
return @sync.synchronize(Sync::EX) { super }
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete(key)
|
40
|
+
return @sync.synchronize(Sync::EX) { super }
|
41
|
+
end
|
42
|
+
|
43
|
+
def clear
|
44
|
+
@sync.synchronize(Sync::EX) { super }
|
45
|
+
end
|
46
|
+
|
47
|
+
def size
|
48
|
+
return @sync.synchronize(Sync::SH) { super }
|
49
|
+
end
|
50
|
+
|
51
|
+
def shift
|
52
|
+
return @sync.synchronize(::Sync::EX) { super }
|
53
|
+
end
|
54
|
+
|
55
|
+
def unshift(el)
|
56
|
+
return @sync.synchronize(::Sync::EX) { super }
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|