annal 0.0.2 → 0.0.3

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.
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_runtime_dependency "activesupport"
21
+ gem.add_runtime_dependency "rest-client"
21
22
 
22
23
  gem.add_development_dependency "minitest"
23
24
  gem.add_development_dependency "rake"
@@ -1,20 +1,17 @@
1
+ require 'annal/fetch/local_file'
2
+ require 'annal/fetch/net_file'
3
+
1
4
  module Annal
2
- class Fetch
3
- attr_accessor :path, :file
4
- def initialize(file_identifier)
5
- self.file = if file_identifier.respond_to?(:read)
6
- file_identifier
5
+ module Fetch
6
+ def self.new(file_identifier)
7
+ case file_identifier
8
+ when File
9
+ LocalFile.new(file_identifier)
10
+ when %r(https?://)
11
+ NetFile.new(file_identifier)
7
12
  else
8
- File.open(file_identifier)
13
+ LocalFile.new(file_identifier)
9
14
  end
10
15
  end
11
-
12
- def local?
13
- true
14
- end
15
-
16
- def read
17
- @read ||= file.read
18
- end
19
16
  end
20
17
  end
@@ -0,0 +1,22 @@
1
+ module Annal
2
+ module Fetch
3
+ class LocalFile
4
+ attr_accessor :path, :file
5
+ def initialize(file_identifier)
6
+ self.file = if file_identifier.respond_to?(:read)
7
+ file_identifier
8
+ else
9
+ File.open(file_identifier)
10
+ end
11
+ end
12
+
13
+ def local?
14
+ true
15
+ end
16
+
17
+ def read
18
+ @read ||= file.read
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ require 'rest_client'
2
+
3
+ module Annal
4
+ module Fetch
5
+ class NetFile
6
+ attr_accessor :path, :file
7
+ def initialize(file_identifier)
8
+ self.file = if file_identifier.respond_to?(:read)
9
+ file_identifier
10
+ else
11
+ self.file = RestClient.get(file_identifier)
12
+ end
13
+ end
14
+
15
+ def local?
16
+ false
17
+ end
18
+
19
+ def read
20
+ @read ||= file.to_str
21
+ end
22
+ end
23
+ end
24
+ end
@@ -8,7 +8,11 @@ module Annal
8
8
  end
9
9
 
10
10
  def data
11
- parse_yaml
11
+ @data ||= parse_yaml
12
+ end
13
+
14
+ def parseable?
15
+ not data.kind_of?(String)
12
16
  end
13
17
 
14
18
  # Also parses JSON
@@ -1,3 +1,3 @@
1
1
  module Annal
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -12,10 +12,16 @@ class TestAnnalIntegration < MiniTest::Unit::TestCase
12
12
  assert_kind_of Hash, doc.data
13
13
  end
14
14
 
15
- def test_find
15
+ def test_find_local
16
16
  doc = Annal::Document.find("#{Annal.project_root}/test/test.json")
17
17
  assert_kind_of Hash, doc.data
18
18
  assert_kind_of Hash, doc.data
19
19
  end
20
20
 
21
+ def test_find_net
22
+ doc = Annal::Document.find(json_url)
23
+ assert_kind_of Hash, doc.data
24
+ assert_kind_of Hash, doc.data
25
+ end
26
+
21
27
  end
@@ -8,5 +8,4 @@ class TestAnnal < MiniTest::Unit::TestCase
8
8
  def test_that_kitty_can_eat
9
9
  assert_kind_of Module, Annal
10
10
  end
11
-
12
11
  end
@@ -0,0 +1,19 @@
1
+ require_relative 'minitest_helper'
2
+
3
+ class TestFetchLocalFileIntegration < MiniTest::Unit::TestCase
4
+ def subject
5
+ Annal::Fetch::LocalFile
6
+ end
7
+
8
+ def test_fetch
9
+ read = subject.new("#{Annal.project_root}/test/test.json").read
10
+ assert_match 'development_environment', read
11
+ end
12
+
13
+ def test_double_read
14
+ fetch = subject.new("#{Annal.project_root}/test/test.json")
15
+ assert_match 'development_environment', fetch.read
16
+ assert_match 'development_environment', fetch.read
17
+ end
18
+
19
+ end
@@ -13,3 +13,29 @@ end
13
13
  def yaml_text
14
14
  IO.read("#{Annal.project_root}/test/test.yml")
15
15
  end
16
+
17
+ def json_url
18
+ "https://gist.github.com/raw/07fc05e2d2ba3097e7d7/
19
+ 2ef8ae00465c93b81f179d90e3b92a41eed73a81/
20
+ example.json".gsub(/\s+/,'')
21
+ end
22
+
23
+ def yaml_url
24
+ "https://gist.github.com/raw/d320232a2b2e97dd1bd6/
25
+ 51a4dd459dc12673ad440debb28f499c89550022/
26
+ test.yml".gsub(/\s/,'')
27
+ end
28
+
29
+ def stub_rest_client!
30
+ require 'rest-client'
31
+ def RestClient.get(url)
32
+ case url
33
+ when json_url then json_text
34
+ when yaml_url then yaml_url
35
+ else
36
+ puts 'Unstubbed call to "RestClient.get"!'
37
+ super(url)
38
+ end
39
+ end
40
+ end
41
+ stub_rest_client! # Go ahead and call it! Homecooked before(:all)
@@ -1,16 +1,23 @@
1
1
  require_relative 'minitest_helper'
2
2
 
3
- class TestFetchIntegration < MiniTest::Unit::TestCase
3
+ class TestFetchNetFileIntegration < MiniTest::Unit::TestCase
4
+ def subject
5
+ Annal::Fetch::NetFile
6
+ end
4
7
 
5
8
  def test_fetch
6
- read = Annal::Fetch.new("#{Annal.project_root}/test/test.json").read
9
+ read = subject.new(json_url).read
7
10
  assert_match 'development_environment', read
8
11
  end
9
12
 
10
13
  def test_double_read
11
- fetch = Annal::Fetch.new("#{Annal.project_root}/test/test.json")
14
+ fetch = subject.new(json_url)
12
15
  assert_match 'development_environment', fetch.read
13
16
  assert_match 'development_environment', fetch.read
14
17
  end
15
18
 
19
+ # def test_crazy_pants
20
+ # stub_rest_client!
21
+ # end
22
+
16
23
  end
@@ -2,6 +2,10 @@ require_relative 'minitest_helper'
2
2
 
3
3
  class TestParseIntegration < MiniTest::Unit::TestCase
4
4
 
5
+ def plain_text
6
+ 'Hi there. No format here.'
7
+ end
8
+
5
9
  def test_parsing_json
6
10
  data = Annal::Parse.new(json_text).data
7
11
  assert_kind_of Hash, data
@@ -13,7 +17,7 @@ class TestParseIntegration < MiniTest::Unit::TestCase
13
17
  end
14
18
 
15
19
  def test_parsing_text
16
- data = Annal::Parse.new('Hi there. No format here.').data
20
+ data = Annal::Parse.new(plain_text).data
17
21
  assert_kind_of String, data
18
22
  end
19
23
 
@@ -23,4 +27,12 @@ class TestParseIntegration < MiniTest::Unit::TestCase
23
27
  assert_kind_of Hash, parse.data
24
28
  end
25
29
 
30
+ def test_detect_parsing_success
31
+ assert Annal::Parse.new(json_text).parseable?
32
+ end
33
+
34
+ def test_detect_parsing_failure
35
+ refute Annal::Parse.new(plain_text).parseable?
36
+ end
37
+
26
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: annal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-22 00:00:00.000000000 Z
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70321319294640 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,31 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70321319294640
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rest-client
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
25
46
  - !ruby/object:Gem::Dependency
26
47
  name: minitest
27
- requirement: &70321319293840 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
28
49
  none: false
29
50
  requirements:
30
51
  - - ! '>='
@@ -32,10 +53,15 @@ dependencies:
32
53
  version: '0'
33
54
  type: :development
34
55
  prerelease: false
35
- version_requirements: *70321319293840
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
36
62
  - !ruby/object:Gem::Dependency
37
63
  name: rake
38
- requirement: &70321319292820 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
39
65
  none: false
40
66
  requirements:
41
67
  - - ! '>='
@@ -43,7 +69,12 @@ dependencies:
43
69
  version: '0'
44
70
  type: :development
45
71
  prerelease: false
46
- version_requirements: *70321319292820
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
47
78
  description: Loads up files. Parses YAML/JSON and other stuff maybe.
48
79
  email:
49
80
  - samsm@samsm.com
@@ -62,13 +93,16 @@ files:
62
93
  - lib/annal/collection.rb
63
94
  - lib/annal/document.rb
64
95
  - lib/annal/fetch.rb
96
+ - lib/annal/fetch/local_file.rb
97
+ - lib/annal/fetch/net_file.rb
65
98
  - lib/annal/parse.rb
66
99
  - lib/annal/version.rb
67
100
  - test/annal_integration_test.rb
68
101
  - test/annal_test.rb
69
102
  - test/collection_integration_test.rb
70
- - test/fetch_integration_spec.rb
103
+ - test/fetch_file_integration_spec.rb
71
104
  - test/minitest_helper.rb
105
+ - test/net_file_integration_test.rb
72
106
  - test/parse_integration_test.rb
73
107
  - test/test-dir/.gitkeep
74
108
  - test/test.json
@@ -87,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
87
121
  version: '0'
88
122
  segments:
89
123
  - 0
90
- hash: -263292446635961119
124
+ hash: 3090640064352595291
91
125
  required_rubygems_version: !ruby/object:Gem::Requirement
92
126
  none: false
93
127
  requirements:
@@ -96,10 +130,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
130
  version: '0'
97
131
  segments:
98
132
  - 0
99
- hash: -263292446635961119
133
+ hash: 3090640064352595291
100
134
  requirements: []
101
135
  rubyforge_project:
102
- rubygems_version: 1.8.10
136
+ rubygems_version: 1.8.23
103
137
  signing_key:
104
138
  specification_version: 3
105
139
  summary: A wrapper for text files.
@@ -107,8 +141,9 @@ test_files:
107
141
  - test/annal_integration_test.rb
108
142
  - test/annal_test.rb
109
143
  - test/collection_integration_test.rb
110
- - test/fetch_integration_spec.rb
144
+ - test/fetch_file_integration_spec.rb
111
145
  - test/minitest_helper.rb
146
+ - test/net_file_integration_test.rb
112
147
  - test/parse_integration_test.rb
113
148
  - test/test-dir/.gitkeep
114
149
  - test/test.json