namaste 0.2.0 → 0.3.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/.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
|