namaste 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/lib/namaste.rb +7 -98
- data/lib/namaste/dir.rb +8 -0
- data/lib/namaste/dir/extend.rb +5 -0
- data/lib/namaste/mixin.rb +31 -0
- data/lib/namaste/set.rb +38 -0
- data/lib/namaste/tag.rb +123 -0
- data/lib/namaste/version.rb +2 -2
- data/spec/lib/namaste_dir_spec.rb +97 -0
- data/spec/lib/namaste_tag_spec.rb +84 -0
- metadata +42 -35
- data/spec/lib/namaste_spec.rb +0 -125
data/.gitignore
CHANGED
data/lib/namaste.rb
CHANGED
@@ -1,112 +1,21 @@
|
|
1
1
|
require 'i18n'
|
2
|
-
# The Namaste module conains a Mixin module to include into a class.
|
3
|
-
|
4
|
-
# class MyNamaste
|
5
|
-
# include Namaste::Mixin
|
6
|
-
# end
|
7
|
-
# MyNamaste.new
|
8
|
-
# MyNamaste.who = "John Doe"
|
9
|
-
# MyNamaste.what = "John's Manifesto"
|
10
2
|
|
11
3
|
module Namaste
|
12
4
|
# @return [Hash] of Namaste mappings for integer and type value
|
13
5
|
DUBLIN_KERNEL = { :type => 0, :who => 1, :what => 2, :when => 3, :where => 4 }
|
14
6
|
|
15
7
|
# @return [Hash] of regular expressions matching the Namaste::DUBLIN_KERNAL Hash
|
16
|
-
PATTERN = Hash[*Namaste::DUBLIN_KERNEL.map { |k, v| [k, Regexp.new("^#{v}
|
8
|
+
PATTERN = Hash[*Namaste::DUBLIN_KERNEL.map { |k, v| [k, Regexp.new("^#{v}=")]}.flatten]
|
17
9
|
|
18
10
|
# @return [Regexp] of standard Namaste file name pattern
|
19
|
-
PATTERN_CORE = /^\d
|
11
|
+
PATTERN_CORE = /^\d=/
|
20
12
|
|
21
13
|
# @return [Regexp] of the possible exteneded Namaste file name pattern
|
22
|
-
PATTERN_EXTENDED =
|
23
|
-
|
24
|
-
module Mixin
|
25
|
-
# When this Mixin module is included this will define getters and setters on your class for each of the keys in Namaste::DUBLIN_KERNAL.
|
26
|
-
def self.included base
|
27
|
-
Namaste::DUBLIN_KERNEL.each do |k,v|
|
28
|
-
base.class_eval do
|
29
|
-
define_method(k.to_s) do |*args|
|
30
|
-
namaste(:filter => k)
|
31
|
-
end
|
32
|
-
|
33
|
-
define_method(k.to_s+'=') do |*args|
|
34
|
-
set_namaste v, *args
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Return the file contents of a Namaste given a filter and regexp
|
41
|
-
# @param [Hash] an arguments hash that accepts filter, extended, and regex arguments
|
42
|
-
# @return [String] the contents of the Namaste
|
43
|
-
def namaste args = {}
|
44
|
-
namaste_tags(args).map { |x| get_namaste x }
|
45
|
-
end
|
46
|
-
|
47
|
-
# @return [Hash] with the Dflat info broken out into its individual components of type, name, major, and minor.
|
48
|
-
def dirtype
|
49
|
-
namaste(:filter => :type).map do |nam|
|
50
|
-
matches = /([^_]+)[|\/](\d+)\.(\d+)/.match(nam[:value])
|
51
|
-
{ :type => nam[:value], :name => matches[1], :major => matches[2], :minor => matches[3] } if matches
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
# Get an array of namaste tags that match the filter and regex provided.
|
58
|
-
# @param [Hash] an arguments hash that accepts filter, extended, and regex arguments
|
59
|
-
# @return [Array] an array of Namaste tags
|
60
|
-
def namaste_tags args = {}
|
61
|
-
rgx = nil
|
62
|
-
|
63
|
-
if args[:filter]
|
64
|
-
if Namaste::PATTERN.key? args[:filter].to_sym
|
65
|
-
rgx = Namaste::PATTERN[args[:filter].to_sym]
|
66
|
-
else
|
67
|
-
rgx = Regexp.new("^#{args[:filter]}=.*")
|
68
|
-
end
|
69
|
-
else
|
70
|
-
rgx = Namaste::PATTERN_CORE
|
71
|
-
rgx = Regexp(rgx, Namaste::PATTERN_EXTENDED) if args[:extended]
|
72
|
-
end
|
73
|
-
|
74
|
-
rgx = args[:regex] if args[:regex]
|
75
|
-
|
76
|
-
self.select { |x| x =~ rgx }
|
77
|
-
end
|
78
|
-
|
79
|
-
def set_namaste tag, value
|
80
|
-
File.open(File.join(self.path, make_namaste(tag, value)), 'w') do |f|
|
81
|
-
f.write(value)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def get_namaste namaste_tag
|
86
|
-
n = {}
|
87
|
-
name, tvalue = namaste_tag.split '='
|
88
|
-
n[:file] = namaste_tag
|
89
|
-
n[:name] = name
|
90
|
-
n[:value] = open(File.join(self.path, namaste_tag)).read.strip
|
91
|
-
n
|
92
|
-
end
|
93
|
-
|
94
|
-
def make_namaste tag, value
|
95
|
-
value = I18n.transliterate value
|
96
|
-
value.gsub!(/[^A-Za-z0-9\-\._]+/, '_')
|
97
|
-
value.gsub!(/_{2,}/, '_')
|
98
|
-
value.gsub!(/^_|_$/, '_')
|
99
|
-
encoded_value = value.downcase
|
100
|
-
|
101
|
-
n = "%s=%s" % [tag, encoded_value]
|
102
|
-
n = n.slice(0...252) + "..." if n.length > 255
|
103
|
-
n
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
14
|
+
PATTERN_EXTENDED = /=/
|
107
15
|
|
108
|
-
|
109
|
-
|
110
|
-
|
16
|
+
autoload :Mixin, 'namaste/mixin'
|
17
|
+
autoload :Dir, 'namaste/dir'
|
18
|
+
autoload :Set, 'namaste/set'
|
19
|
+
autoload :Tag, 'namaste/tag'
|
111
20
|
|
112
21
|
end
|
data/lib/namaste/dir.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module Namaste
|
2
|
+
module Mixin
|
3
|
+
# define shortcut methods for dublin kernel values
|
4
|
+
def self.included(base)
|
5
|
+
Namaste::DUBLIN_KERNEL.each do |k,v|
|
6
|
+
base.class_eval do
|
7
|
+
define_method(k.to_s) do |*args|
|
8
|
+
namaste[k]
|
9
|
+
end
|
10
|
+
|
11
|
+
define_method(k.to_s+'=') do |v|
|
12
|
+
namaste[k] = v
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Get the set of namaste tags for this directory
|
19
|
+
# @return [Namaste::Set]
|
20
|
+
def namaste
|
21
|
+
@namaste ||= Namaste::Set.new(self)
|
22
|
+
end
|
23
|
+
|
24
|
+
# If a Namaste 'type' tag is defined, provide structured data
|
25
|
+
# @return [Struct::Dirtype]
|
26
|
+
def dirtype
|
27
|
+
type = namaste[:type]
|
28
|
+
type.first.dirtype unless type.empty?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/namaste/set.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Namaste
|
2
|
+
class Set
|
3
|
+
# @param [Dir] dir
|
4
|
+
def initialize(dir)
|
5
|
+
@dir = dir
|
6
|
+
end
|
7
|
+
|
8
|
+
# Get all the namaste tags for the directory
|
9
|
+
# @return [Array<Namaste::Tag>]
|
10
|
+
def all
|
11
|
+
select
|
12
|
+
end
|
13
|
+
|
14
|
+
# Get only select namaste tags for the directory
|
15
|
+
# @return [Array<Namaste::Tag>]
|
16
|
+
def [] key = nil
|
17
|
+
select(key)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Set a namaste tag
|
21
|
+
# @param [String] key
|
22
|
+
# @param [String] value
|
23
|
+
def []= key, value
|
24
|
+
Namaste::Tag.new(@dir.path, key, value)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
private
|
29
|
+
def select key = nil
|
30
|
+
rgx = Namaste::PATTERN[key] if key.is_a? Symbol and Namaste::PATTERN.key?(key)
|
31
|
+
rgx ||= Regexp.new("^#{Regexp.escape(key)}=") if key.is_a? String
|
32
|
+
rgx ||= Regexp.new("^#{key}=") if key.is_a? Integer
|
33
|
+
rgx ||= Namaste::PATTERN_EXTENDED if key == :extended
|
34
|
+
rgx ||= Namaste::PATTERN_CORE if key == nil
|
35
|
+
@dir.select { |x| x =~ rgx }.map { |x| Tag.new(File.join(@dir.path, x)) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/namaste/tag.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
module Namaste
|
2
|
+
class Tag
|
3
|
+
# Create a filename for a namaste key/value pair
|
4
|
+
# @return [String]
|
5
|
+
def self.filename tag, value
|
6
|
+
n = "%s=%s" % [tag, self.elide(value)]
|
7
|
+
n = n.slice(0...252) + "..." if n.length > 255
|
8
|
+
n
|
9
|
+
end
|
10
|
+
|
11
|
+
# @param [Directory, File] directory_or_file
|
12
|
+
# @param [String] tag
|
13
|
+
# @param [String] value
|
14
|
+
def initialize(directory_or_file, tag = nil, value = nil)
|
15
|
+
directory_or_file = File.expand_path(directory_or_file)
|
16
|
+
|
17
|
+
tag = Namaste::DUBLIN_KERNEL[tag] if tag.is_a? Symbol
|
18
|
+
|
19
|
+
if File.directory?(directory_or_file)
|
20
|
+
@dir = directory_or_file
|
21
|
+
@tag = tag.to_s
|
22
|
+
@value = value.to_s
|
23
|
+
write!
|
24
|
+
elsif File.file?(directory_or_file)
|
25
|
+
@file = File.new(directory_or_file, "a+")
|
26
|
+
@dir = File.dirname(@file.path)
|
27
|
+
else
|
28
|
+
raise "Unknown directory or file (#{directory_or_file.to_s})"
|
29
|
+
end
|
30
|
+
|
31
|
+
load_tag_extensions
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [String] namaste value
|
35
|
+
def value
|
36
|
+
file.rewind
|
37
|
+
@value ||= file.read
|
38
|
+
end
|
39
|
+
|
40
|
+
# @param [String] value
|
41
|
+
def value=(value)
|
42
|
+
delete
|
43
|
+
@value = value.to_s
|
44
|
+
write!
|
45
|
+
end
|
46
|
+
|
47
|
+
# @return [String] namaste tag
|
48
|
+
def tag
|
49
|
+
@tag ||= File.basename(file.path).split("=").first
|
50
|
+
end
|
51
|
+
|
52
|
+
# @param [String] namaste tag
|
53
|
+
def tag=(tag)
|
54
|
+
delete
|
55
|
+
@tag = tag.to_s
|
56
|
+
write!
|
57
|
+
end
|
58
|
+
|
59
|
+
# Delete this tag
|
60
|
+
def delete
|
61
|
+
@value = value # make sure to preserve the value after the tag is deleted
|
62
|
+
File.delete(file.path)
|
63
|
+
@file = nil
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
def file
|
68
|
+
@file ||= File.new(File.join(@dir, filename), "a+")
|
69
|
+
end
|
70
|
+
|
71
|
+
def filename
|
72
|
+
self.class.filename(@tag, @value)
|
73
|
+
end
|
74
|
+
|
75
|
+
# write the namaste tag to the filesystem
|
76
|
+
def write!
|
77
|
+
file.rewind
|
78
|
+
file.write(value)
|
79
|
+
file.flush
|
80
|
+
file.truncate(file.pos)
|
81
|
+
file.rewind
|
82
|
+
end
|
83
|
+
|
84
|
+
# transliterate and truncate the namaste value
|
85
|
+
def elide
|
86
|
+
self.class.elide(@value)
|
87
|
+
end
|
88
|
+
|
89
|
+
protected
|
90
|
+
# transliterate and truncate the value
|
91
|
+
# @param [String] value
|
92
|
+
# @return [String] ASCII string
|
93
|
+
def self.elide value
|
94
|
+
value = I18n.transliterate value
|
95
|
+
value.gsub!(/[^A-Za-z0-9\-\._]+/, '_')
|
96
|
+
value.gsub!(/_{2,}/, '_')
|
97
|
+
value.gsub!(/^_|_$/, '_')
|
98
|
+
encoded_value = value.downcase
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
def load_tag_extensions
|
103
|
+
case tag
|
104
|
+
when "0"
|
105
|
+
self.extend(Dirtype)
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
module Dirtype
|
111
|
+
# @return [Struct::Dirtype] Parses the namaste 'type' tag to provide structured data (#full, #name, #major, #minor)
|
112
|
+
def dirtype
|
113
|
+
v = value
|
114
|
+
matches = /([^_\/]+)[_\/](\d+)\.(\d+)/.match(v)
|
115
|
+
|
116
|
+
if matches
|
117
|
+
Struct.new("Dirtype", :full, :name, :major, :minor)
|
118
|
+
Struct::Dirtype.new(*matches)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/lib/namaste/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Namaste
|
2
|
-
VERSION = "0.
|
3
|
-
end
|
2
|
+
VERSION = "0.3.0"
|
3
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe Namaste do
|
4
|
+
describe "namaste dublin kernel shortcuts" do
|
5
|
+
it "should define the appropriate setters and getters" do
|
6
|
+
Dir.mktmpdir do |d|
|
7
|
+
dir = Namaste::Dir.new(d)
|
8
|
+
dir.respond_to?(:type).should be_true
|
9
|
+
dir.respond_to?(:type=).should be_true
|
10
|
+
dir.respond_to?(:who).should be_true
|
11
|
+
dir.respond_to?(:who=).should be_true
|
12
|
+
dir.respond_to?(:what).should be_true
|
13
|
+
dir.respond_to?(:what=).should be_true
|
14
|
+
dir.respond_to?(:when).should be_true
|
15
|
+
dir.respond_to?(:when=).should be_true
|
16
|
+
dir.respond_to?(:where).should be_true
|
17
|
+
dir.respond_to?(:where=).should be_true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "namaste_tags" do
|
23
|
+
before(:each) do
|
24
|
+
@tmpdir = Dir.mktmpdir
|
25
|
+
@dir = Namaste::Dir.new(@tmpdir)
|
26
|
+
end
|
27
|
+
|
28
|
+
after(:each) do
|
29
|
+
FileUtils.rm_rf(@tmpdir)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should handle dublin kernel filters correctly" do
|
33
|
+
File.open(File.join(@dir.path, "1=last,first"), "w") do |f|
|
34
|
+
f.write("Last, First")
|
35
|
+
end
|
36
|
+
|
37
|
+
@dir.namaste[:who].should have(1).entries
|
38
|
+
tag = @dir.namaste[:who].first
|
39
|
+
tag.tag.should == "1"
|
40
|
+
tag.value.should == "Last, First"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should handle numeric filters correctly" do
|
44
|
+
File.open(File.join(@dir.path, "1=last,first"), "w") do |f|
|
45
|
+
f.write("Last, First")
|
46
|
+
end
|
47
|
+
|
48
|
+
@dir.namaste[1].should have(1).entries
|
49
|
+
tag = @dir.namaste[1].first
|
50
|
+
tag.tag.should == "1"
|
51
|
+
tag.value.should == "Last, First"
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should add new tags" do
|
55
|
+
@dir.namaste[1] = "Mahler, Gustav"
|
56
|
+
|
57
|
+
@dir.namaste[1].should have(1).entries
|
58
|
+
tag = @dir.namaste[1].first
|
59
|
+
tag.tag.should == "1"
|
60
|
+
tag.value.should == "Mahler, Gustav"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should append tags" do
|
64
|
+
@dir.namaste[1] = "Mahler, Gustav"
|
65
|
+
@dir.namaste[1] = "Helsinki Radio Symphony Orchestra"
|
66
|
+
|
67
|
+
@dir.namaste[1].should have(2).entries
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should delete tags" do
|
71
|
+
@dir.namaste[1] = "Schmidt, Andreas"
|
72
|
+
@dir.namaste[1].should have(1).entries
|
73
|
+
@dir.namaste[1].first.delete
|
74
|
+
@dir.namaste[1].should be_empty
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
describe "dirtype" do
|
79
|
+
it "should understand the dirtype property" do
|
80
|
+
Dir.mktmpdir do |tmpdir|
|
81
|
+
|
82
|
+
File.open(File.join(tmpdir,"0=dflat_0.19"),"w") do |f|
|
83
|
+
f.write("Dflat/0.19")
|
84
|
+
end
|
85
|
+
|
86
|
+
@dir = Namaste::Dir.new(tmpdir)
|
87
|
+
dt = @dir.dirtype
|
88
|
+
|
89
|
+
dt.full.should == "Dflat/0.19"
|
90
|
+
dt.name.should == "Dflat"
|
91
|
+
dt.major.should == "0"
|
92
|
+
dt.minor.should == "19"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "Namaste::Tag" do
|
4
|
+
describe "filename" do
|
5
|
+
it "should handle a simple value" do
|
6
|
+
Namaste::Tag.filename(0, 'abcdef').should == "0=abcdef"
|
7
|
+
end
|
8
|
+
it "should properly handle dflat" do
|
9
|
+
Namaste::Tag.filename(0, 'Dflat/0.19').should == "0=dflat_0.19"
|
10
|
+
end
|
11
|
+
it "should handle compled values correctly" do
|
12
|
+
Namaste::Tag.filename(0, 'rQ@f2!éüAsd!').should == "0=rq_f2_euasd_"
|
13
|
+
end
|
14
|
+
it "should handle extended integers correctly" do
|
15
|
+
Namaste::Tag.filename('x_123', 'extended').should == "x_123=extended"
|
16
|
+
end
|
17
|
+
it "should truncate file name at 255 characters" do
|
18
|
+
namaste = Namaste::Tag.filename(0, 'lfvtshfasfogfzjgqokuwicivlnyluqlgfcsfmhtdbmrizvzqkiyaxqtlclkgxpgkmxtwwylepsorbdnddgrdgzpcyojqbwuxkqkfzmfbkxrfpaaymgygbpjgqxyklkfblqekgtrpdxvjsmodvkrlwcfrqswdknngervsjivehotqeiowigfpwymunrccgjhakdwpugwwtpqcpkwqvwlhcqccwqovlwaldwfuoalscdvzccgnpooedbrnttzmno')
|
19
|
+
namaste.length.should == 255
|
20
|
+
namaste.should == '0=lfvtshfasfogfzjgqokuwicivlnyluqlgfcsfmhtdbmrizvzqkiyaxqtlclkgxpgkmxtwwylepsorbdnddgrdgzpcyojqbwuxkqkfzmfbkxrfpaaymgygbpjgqxyklkfblqekgtrpdxvjsmodvkrlwcfrqswdknngervsjivehotqeiowigfpwymunrccgjhakdwpugwwtpqcpkwqvwlhcqccwqovlwaldwfuoalscdvzccgnpooedbrnt...'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "new tag file" do
|
25
|
+
it "should create a new file" do
|
26
|
+
Dir.mktmpdir do |dir|
|
27
|
+
file = File.join(dir, "1=value")
|
28
|
+
tag = Namaste::Tag.new(dir, 1, 'value')
|
29
|
+
tag.send(:filename).should == "1=value"
|
30
|
+
tag.send(:file).path.should == file
|
31
|
+
File.should exist(file)
|
32
|
+
File.new(file).read.should == "value"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "opening an existing tag file" do
|
38
|
+
it "should load tag and value" do
|
39
|
+
Dir.mktmpdir do |dir|
|
40
|
+
file = File.join(dir, "2=asdfg")
|
41
|
+
File.open(file, "w+") { |f| f.write("asdfg"); f.flush }
|
42
|
+
|
43
|
+
tag = Namaste::Tag.new(file)
|
44
|
+
tag.send(:file).path.should == file
|
45
|
+
tag.tag.should == "2"
|
46
|
+
tag.value.should == "asdfg"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "writing a new value" do
|
53
|
+
it "should delete and re-add a tag when the tag is changed" do
|
54
|
+
Dir.mktmpdir do |dir|
|
55
|
+
file = File.join(dir, "2=asdfg")
|
56
|
+
File.open(file, "w+") { |f| f.write("asdfg"); f.flush }
|
57
|
+
|
58
|
+
tag = Namaste::Tag.new(file)
|
59
|
+
tag.tag = 1
|
60
|
+
|
61
|
+
File.should_not exist(file)
|
62
|
+
File.should exist(File.join(dir, "1=asdfg"))
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
it "should delete and re-add a tag when the value is changed" do
|
67
|
+
Dir.mktmpdir do |dir|
|
68
|
+
file = File.join(dir, "2=asdfg")
|
69
|
+
File.open(file, "w+") { |f| f.write("asdfg"); f.flush }
|
70
|
+
|
71
|
+
tag = Namaste::Tag.new(file)
|
72
|
+
tag.value = 'qwerty'
|
73
|
+
|
74
|
+
File.should_not exist(file)
|
75
|
+
File.should exist(File.join(dir, "2=qwerty"))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "deleting a tag" do
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: namaste
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Chris Beer
|
@@ -15,13 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-06-
|
18
|
+
date: 2011-06-29 00:00:00 -04:00
|
19
19
|
default_executable: namaste
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
23
|
none: false
|
26
24
|
requirements:
|
27
25
|
- - ">="
|
@@ -30,12 +28,12 @@ dependencies:
|
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
31
|
+
prerelease: false
|
33
32
|
type: :runtime
|
34
|
-
|
33
|
+
requirement: *id001
|
34
|
+
name: i18n
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
|
37
|
-
prerelease: false
|
38
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
37
|
none: false
|
40
38
|
requirements:
|
41
39
|
- - ">="
|
@@ -44,12 +42,12 @@ dependencies:
|
|
44
42
|
segments:
|
45
43
|
- 0
|
46
44
|
version: "0"
|
45
|
+
prerelease: false
|
47
46
|
type: :development
|
48
|
-
|
47
|
+
requirement: *id002
|
48
|
+
name: rake
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
|
51
|
-
prerelease: false
|
52
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
53
51
|
none: false
|
54
52
|
requirements:
|
55
53
|
- - ">="
|
@@ -58,12 +56,12 @@ dependencies:
|
|
58
56
|
segments:
|
59
57
|
- 0
|
60
58
|
version: "0"
|
59
|
+
prerelease: false
|
61
60
|
type: :development
|
62
|
-
|
61
|
+
requirement: *id003
|
62
|
+
name: rcov
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
|
-
|
65
|
-
prerelease: false
|
66
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
64
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
67
65
|
none: false
|
68
66
|
requirements:
|
69
67
|
- - ~>
|
@@ -74,12 +72,12 @@ dependencies:
|
|
74
72
|
- 0
|
75
73
|
- 0
|
76
74
|
version: 1.0.0
|
75
|
+
prerelease: false
|
77
76
|
type: :development
|
78
|
-
|
77
|
+
requirement: *id004
|
78
|
+
name: bundler
|
79
79
|
- !ruby/object:Gem::Dependency
|
80
|
-
|
81
|
-
prerelease: false
|
82
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
83
81
|
none: false
|
84
82
|
requirements:
|
85
83
|
- - ">"
|
@@ -90,12 +88,12 @@ dependencies:
|
|
90
88
|
- 0
|
91
89
|
- 0
|
92
90
|
version: 2.0.0
|
91
|
+
prerelease: false
|
93
92
|
type: :development
|
94
|
-
|
93
|
+
requirement: *id005
|
94
|
+
name: rspec
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
|
-
|
97
|
-
prerelease: false
|
98
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
96
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
99
97
|
none: false
|
100
98
|
requirements:
|
101
99
|
- - ">="
|
@@ -104,12 +102,12 @@ dependencies:
|
|
104
102
|
segments:
|
105
103
|
- 0
|
106
104
|
version: "0"
|
105
|
+
prerelease: false
|
107
106
|
type: :development
|
108
|
-
|
107
|
+
requirement: *id006
|
108
|
+
name: yard
|
109
109
|
- !ruby/object:Gem::Dependency
|
110
|
-
|
111
|
-
prerelease: false
|
112
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
110
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
113
111
|
none: false
|
114
112
|
requirements:
|
115
113
|
- - ">="
|
@@ -118,8 +116,10 @@ dependencies:
|
|
118
116
|
segments:
|
119
117
|
- 0
|
120
118
|
version: "0"
|
119
|
+
prerelease: false
|
121
120
|
type: :development
|
122
|
-
|
121
|
+
requirement: *id007
|
122
|
+
name: RedCloth
|
123
123
|
description: A ruby client implementation of the Namaste specification for directory description with filename-based tags. [https://wiki.ucop.edu/display/Curation/Namaste]
|
124
124
|
email: chris@cbeer.info
|
125
125
|
executables:
|
@@ -137,9 +137,15 @@ files:
|
|
137
137
|
- Rakefile
|
138
138
|
- bin/namaste
|
139
139
|
- lib/namaste.rb
|
140
|
+
- lib/namaste/dir.rb
|
141
|
+
- lib/namaste/dir/extend.rb
|
142
|
+
- lib/namaste/mixin.rb
|
143
|
+
- lib/namaste/set.rb
|
144
|
+
- lib/namaste/tag.rb
|
140
145
|
- lib/namaste/version.rb
|
141
146
|
- namaste.gemspec
|
142
|
-
- spec/lib/
|
147
|
+
- spec/lib/namaste_dir_spec.rb
|
148
|
+
- spec/lib/namaste_tag_spec.rb
|
143
149
|
- spec/spec_helper.rb
|
144
150
|
has_rdoc: true
|
145
151
|
homepage: http://github.com/microservices/namaste
|
@@ -171,10 +177,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
177
|
requirements: []
|
172
178
|
|
173
179
|
rubyforge_project:
|
174
|
-
rubygems_version: 1.
|
180
|
+
rubygems_version: 1.5.3
|
175
181
|
signing_key:
|
176
182
|
specification_version: 3
|
177
183
|
summary: A ruby client implementation of the Namaste specification for directory description with filename-based tags.
|
178
184
|
test_files:
|
179
|
-
- spec/lib/
|
185
|
+
- spec/lib/namaste_dir_spec.rb
|
186
|
+
- spec/lib/namaste_tag_spec.rb
|
180
187
|
- spec/spec_helper.rb
|
data/spec/lib/namaste_spec.rb
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
class TestNamasteSurrogate
|
4
|
-
include Namaste::Mixin
|
5
|
-
|
6
|
-
def test_make_namaste tag, value
|
7
|
-
make_namaste tag, value
|
8
|
-
end
|
9
|
-
|
10
|
-
end
|
11
|
-
describe Namaste do
|
12
|
-
before(:all) do
|
13
|
-
@namaste = TestNamasteSurrogate.new
|
14
|
-
end
|
15
|
-
describe "make_namaste" do
|
16
|
-
it "should handle a simple value" do
|
17
|
-
@namaste.test_make_namaste(0, 'abcdef').should == "0=abcdef"
|
18
|
-
end
|
19
|
-
it "should properly handle dflat" do
|
20
|
-
@namaste.test_make_namaste(0, 'Dflat/0.19').should == "0=dflat_0.19"
|
21
|
-
end
|
22
|
-
it "should handle compled values correctly" do
|
23
|
-
@namaste.test_make_namaste(0, 'rQ@f2!éüAsd!').should == "0=rq_f2_euasd_"
|
24
|
-
end
|
25
|
-
it "should handle extended integers correctly" do
|
26
|
-
@namaste.test_make_namaste('x_123', 'extended').should == "x_123=extended"
|
27
|
-
end
|
28
|
-
it "should truncate file name at 255 characters" do
|
29
|
-
namaste = @namaste.test_make_namaste(0, 'lfvtshfasfogfzjgqokuwicivlnyluqlgfcsfmhtdbmrizvzqkiyaxqtlclkgxpgkmxtwwylepsorbdnddgrdgzpcyojqbwuxkqkfzmfbkxrfpaaymgygbpjgqxyklkfblqekgtrpdxvjsmodvkrlwcfrqswdknngervsjivehotqeiowigfpwymunrccgjhakdwpugwwtpqcpkwqvwlhcqccwqovlwaldwfuoalscdvzccgnpooedbrnttzmno')
|
30
|
-
namaste.length.should == 255
|
31
|
-
namaste.should == '0=lfvtshfasfogfzjgqokuwicivlnyluqlgfcsfmhtdbmrizvzqkiyaxqtlclkgxpgkmxtwwylepsorbdnddgrdgzpcyojqbwuxkqkfzmfbkxrfpaaymgygbpjgqxyklkfblqekgtrpdxvjsmodvkrlwcfrqswdknngervsjivehotqeiowigfpwymunrccgjhakdwpugwwtpqcpkwqvwlhcqccwqovlwaldwfuoalscdvzccgnpooedbrnt...'
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "object instantiation" do
|
36
|
-
it "should define the appropriate setters and getters" do
|
37
|
-
d = Dir.mktmpdir
|
38
|
-
dir = Namaste::Dir.new(d)
|
39
|
-
dir.respond_to?(:type).should be_true
|
40
|
-
dir.respond_to?(:type=).should be_true
|
41
|
-
dir.respond_to?(:who).should be_true
|
42
|
-
dir.respond_to?(:who=).should be_true
|
43
|
-
dir.respond_to?(:what).should be_true
|
44
|
-
dir.respond_to?(:what=).should be_true
|
45
|
-
dir.respond_to?(:when).should be_true
|
46
|
-
dir.respond_to?(:when=).should be_true
|
47
|
-
dir.respond_to?(:where).should be_true
|
48
|
-
dir.respond_to?(:where=).should be_true
|
49
|
-
end
|
50
|
-
end
|
51
|
-
describe "namaste_tags" do
|
52
|
-
it "should handle normal filters correclty" do
|
53
|
-
Dir.mktmpdir do |d|
|
54
|
-
dir = Namaste::Dir.new(d)
|
55
|
-
File.open(File.join(dir.path,"1=last,first"),"w") do |f|
|
56
|
-
f.write("Last,First")
|
57
|
-
end
|
58
|
-
dir.send(:namaste_tags,{:filter=>"1"}).include?("1=last,first").should be_true
|
59
|
-
end
|
60
|
-
end
|
61
|
-
it "should take regular expressions correctly" do
|
62
|
-
Dir.mktmpdir do |d|
|
63
|
-
dir = Namaste::Dir.new(d)
|
64
|
-
File.open(File.join(dir.path,"1=last,first"),"w") do |f|
|
65
|
-
f.write("Last,First")
|
66
|
-
end
|
67
|
-
dir.send(:namaste_tags,{:regex=>/last,first/}).include?("1=last,first").should be_true
|
68
|
-
end
|
69
|
-
end
|
70
|
-
it "should take a number as a regexp and handle it correclty" do
|
71
|
-
Dir.mktmpdir do |d|
|
72
|
-
dir = Namaste::Dir.new(d)
|
73
|
-
File.open(File.join(dir.path,"1=last,first"),"w") do |f|
|
74
|
-
f.write("Last,First")
|
75
|
-
end
|
76
|
-
dir.send(:namaste_tags,{:filter=>:who}).include?("1=last,first").should be_true
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
describe "get_namaste" do
|
82
|
-
it "should reterive the appriprate tag" do
|
83
|
-
Dir.mktmpdir do |d|
|
84
|
-
dir = Namaste::Dir.new(d)
|
85
|
-
File.open(File.join(dir.path,"1=last,first"),"w") do |f|
|
86
|
-
f.write("Last,First")
|
87
|
-
end
|
88
|
-
data = dir.send(:get_namaste,"1=last,first")
|
89
|
-
data.has_key?(:value).should be_true and
|
90
|
-
data[:value].should == "Last,First"
|
91
|
-
|
92
|
-
data.has_key?(:file).should be_true and
|
93
|
-
data[:file].should == "1=last,first"
|
94
|
-
|
95
|
-
data.has_key?(:name).should be_true and
|
96
|
-
data[:name].should == "1"
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
describe "dirtype" do
|
102
|
-
it "should parse out the Dflat type properly" do
|
103
|
-
Dir.mktmpdir do |d|
|
104
|
-
dir = Namaste::Dir.new(d)
|
105
|
-
File.open(File.join(dir.path,"0=dflat_0.19"),"w") do |f|
|
106
|
-
f.write("Dflat/0.19")
|
107
|
-
end
|
108
|
-
dir.dirtype.length == 1
|
109
|
-
|
110
|
-
dir.dirtype.first.has_key?(:name).should be_true and
|
111
|
-
dir.dirtype.first[:name].should == "Dflat"
|
112
|
-
|
113
|
-
dir.dirtype.first.has_key?(:minor).should be_true and
|
114
|
-
dir.dirtype.first[:minor].should == "19"
|
115
|
-
|
116
|
-
dir.dirtype.first.has_key?(:type).should be_true and
|
117
|
-
dir.dirtype.first[:type].should == "Dflat/0.19"
|
118
|
-
|
119
|
-
dir.dirtype.first.has_key?(:major).should be_true and
|
120
|
-
dir.dirtype.first[:major].should == "0"
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|