zemax 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY ADDED
@@ -0,0 +1,4 @@
1
+ == 1.0.0 / 2010-04-10
2
+
3
+ * 1 major enhancement
4
+ * Birthday!
data/LICENSE CHANGED
@@ -1,20 +1,20 @@
1
- Copyright (c) 2009 arvicco
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) 2010 Arvicco
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,17 +1,26 @@
1
- = zemax
2
-
3
- Description goes here.
4
-
5
- == Note on Patches/Pull Requests
6
-
7
- * Fork the project.
8
- * Make your feature addition or bug fix.
9
- * Add tests for it. This is important so I don't break it in a
10
- future version unintentionally.
11
- * Commit, do not mess with rakefile, version, or history.
12
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
- * Send me a pull request. Bonus points for topic branches.
14
-
15
- == Copyright
16
-
17
- Copyright (c) 2010 arvicco. See LICENSE for details.
1
+ ==zemax
2
+ by: Arvicco
3
+ url: http://github.com/arvicco/zemax
4
+
5
+ == DESCRIPTION:
6
+
7
+ FIXME (describe your package)
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * FIXME (list of features or problems)
12
+
13
+ == SYNOPSIS:
14
+
15
+ FIXME (code sample of usage)
16
+
17
+ == REQUIREMENTS:
18
+
19
+ * FIXME (list of requirements)
20
+
21
+ == INSTALL:
22
+
23
+ * FIXME (sudo gem install, anything else)
24
+
25
+ == LICENSE:
26
+ Copyright (c) 2010 Arvicco. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,57 +1,16 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "zemax"
8
- gem.summary = %Q{Zemax test gem}
9
- gem.description = %Q{Zemax - does nothing, for testing purposes only}
10
- gem.email = "arvitallian@gmail.com"
11
- gem.homepage = "http://github.com/arvicco/zemax"
12
- gem.authors = ["arvicco"]
13
- gem.add_development_dependency "rspec", ">= 1.2.9"
14
- gem.add_development_dependency "cucumber", ">= 0"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
- end
21
-
22
- require 'spec/rake/spectask'
23
- Spec::Rake::SpecTask.new(:spec) do |spec|
24
- spec.libs << 'lib' << 'spec'
25
- spec.spec_files = FileList['spec/**/*_spec.rb']
26
- end
27
-
28
- Spec::Rake::SpecTask.new(:rcov) do |spec|
29
- spec.libs << 'lib' << 'spec'
30
- spec.pattern = 'spec/**/*_spec.rb'
31
- spec.rcov = true
32
- end
33
-
34
- task :spec => :check_dependencies
35
-
36
- begin
37
- require 'cucumber/rake/task'
38
- Cucumber::Rake::Task.new(:features)
39
-
40
- task :features => :check_dependencies
41
- rescue LoadError
42
- task :features do
43
- abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
44
- end
45
- end
46
-
47
- task :default => :spec
48
-
49
- require 'rake/rdoctask'
50
- Rake::RDocTask.new do |rdoc|
51
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
52
-
53
- rdoc.rdoc_dir = 'rdoc'
54
- rdoc.title = "zemax #{version}"
55
- rdoc.rdoc_files.include('README*')
56
- rdoc.rdoc_files.include('lib/**/*.rb')
57
- end
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+ require "zemax"
3
+
4
+ begin
5
+ require 'rake'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ gem 'rake', '~> 0.8.3.1'
9
+ require 'rake'
10
+ end
11
+
12
+ # Load rakefile tasks
13
+ Dir['tasks/*.rake'].sort.each { |file| load file }
14
+
15
+ #task :default => 'test:run'
16
+ #task 'gem:release' => 'test:run'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require Pathname.new(__FILE__).dirname + '/../lib/zemax'
5
+
6
+ # Put your code here
7
+
@@ -1 +1,32 @@
1
- p 'boo'
1
+ module Zemax
2
+ require 'pathname'
3
+
4
+ VERSION_FILE = Pathname.new(__FILE__).dirname + '../VERSION' # :nodoc:
5
+ VERSION = VERSION_FILE.exist? ? VERSION_FILE.read.strip : nil
6
+
7
+ # Require ruby source file(s). Lib should be either file name or glob
8
+ # Accepts following options:
9
+ # :file:: Libs are required relative to this file - defaults to __FILE__
10
+ # :dir:: Required libs are located under this dir name - defaults to gem name
11
+ #
12
+ def self.require_lib( lib, opts={} )
13
+ file = Pathname.new(opts[:file] || __FILE__)
14
+ name = file.dirname + (opts[:dir] || file.basename('.*')) + lib.gsub(/(?<!.rb)$/, '.rb')
15
+ Pathname.glob(name.to_s).sort.each {|rb| require rb}
16
+ end
17
+
18
+ # Requires ruby source file(s). Accepts either single name or Array of filenames/globs
19
+ # Accepts following options:
20
+ # :file:: Libs are required relative to this file - defaults to __FILE__
21
+ # :dir:: Required libs are located under this dir name - defaults to gem name
22
+ #
23
+ def self.require_libs( libs, opts={} )
24
+ [libs].flatten.each {|lib| require_lib lib, opts }
25
+ end
26
+
27
+ end # module Zemax
28
+
29
+ # Require all ruby source files located under directory lib/zemax
30
+ # If you need files in specific order, you should specify it here before the glob
31
+ Zemax.require_libs %W[**/*]
32
+
@@ -1,2 +1,2 @@
1
- --color
1
+ --color
2
2
  --format nested
@@ -1,190 +1,18 @@
1
- require 'spec'
2
- require 'cgi'
3
- require 'fakeweb'
4
- require 'fakeweb_matcher'
5
- require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib git_hub]))
6
-
7
- # Module that extends RSpec with my own extensions/macros
8
- module SpecMacros
9
-
10
- # Wrapper for *it* method that extracts description from example source code, such as:
11
- # spec{ use{ result = function(arg1 = 4, arg2 = 'string') }}
12
- def spec &block
13
- it description_from(*block.source_location), &block
14
- end
15
-
16
- # reads description line from source file and drops external brackets (like *spec*{}, *use*{})
17
- def description_from(file, line)
18
- File.open(file) do |f|
19
- f.lines.to_a[line-1].gsub( Regexp.new('(spec.*?{)|(use.*?{)|}'), '' ).lstrip.rstrip
20
- end
21
- end
22
- end
23
-
24
- Spec::Runner.configure do |config|
25
- # Add my macros
26
- config.extend(SpecMacros)
27
- end
28
-
29
- module GitHubTest
30
-
31
- # Test related Constants:
32
- TEST_PROJECT = 'GitHub'
33
- TEST_STRING = 'This is test string'
34
-
35
- # Checks that given block does not raise any errors
36
- def use
37
- lambda {yield}.should_not raise_error
38
- end
39
-
40
- # Returns empty block (for use in spec descriptions)
41
- def any_block
42
- lambda {|*args| args}
43
- end
44
-
45
- # Extract response from file
46
- def response_from_file(path)
47
- filename = File.join(File.dirname(__FILE__), 'stubs', path + '.res')
48
- unless File.exists?(filename) && !File.directory?(filename)
49
- raise "No stub file #{filename}. To obtain it use:\n#{curl_string(path, filename)}"
50
- end
51
- filename
52
- end
53
-
54
- # Extract response body from file
55
- def body_from_file(path)
56
- File.read(response_from_file(path)).gsub(/.*\n\n/m, '')
57
- end
58
-
59
- def curl_string(path, filename)
60
- auth_string = api.authenticated? ? "?login=#{api.auth['login']}&token=#{api.auth['token']}" : ""
61
- "curl -i #{github_yaml}#{path}#{auth_string} > #{filename}"
62
- end
63
-
64
- # Stubs github server, with options:
65
- # :host:: Host name - default 'github.com'
66
- # :port:: Port - default 80
67
- def stub_server(options={})
68
- server = Net::HTTP.new(options[:host] ||'github.com', options[:port] || 80)
69
- Net::HTTP.stub!(:new).and_return(server)
70
- server
71
- end
72
-
73
- # Stubs http request, with options:
74
- # :path:: Request path - default '/api/v2/yaml/repos/create'
75
- # :get:: Indicates that request is get, otherwise post
76
- def stub_req(options={})
77
- path = options[:path] || '/api/v2/yaml/repos/create'
78
- options[:get] ? Net::HTTP::Get.new(path) : Net::HTTP::Post.new(path)
79
- end
80
-
81
- def stub_server_and_req(options = {})
82
- [stub_server(options), stub_req(options)]
83
- end
84
-
85
- # Turns string into appropriate class constant, returns nil if class not found
86
- def classify name
87
- klass = name.split("::").inject(Kernel) {|klass, const_name| klass.const_get const_name }
88
- klass.is_a?(Class) ? klass : nil
89
- rescue NameError
90
- nil
91
- end
92
-
93
- # Builds fake HTTP response from a given options Hash. Accepts options:
94
- # :klass:: Response class, default - Net::HTTPOK
95
- # :http_version:: HTTP version - default 1.1
96
- # :code:: Response return code - default 200
97
- # :message:: Response message - default 'OK'
98
- # :status:: [code, message] pair as one option
99
- # :body:: Response body - default ''
100
- # TODO: make it more lifelike using StringIO, instead of just stubbing :body
101
- def build_response(options={})
102
- code = options[:status] ? options[:status].first : options[:code] || 200
103
- message = options[:status] ? options[:status].last : options[:message] || 'OK'
104
- version = options[:http_version] || 1.1
105
- resp = (options[:klass] || Net::HTTPOK).new(code, version, message)
106
- resp.stub!(:body).and_return(options[:body] || '')
107
- resp
108
- end
109
-
110
- # Expects request of certain method(:get, :post, ... :any) to specific uri (given as a String, URI or Regexp),
111
- # (optionally) matches expected query keys with actuals and handles request and response according to options.
112
- # In addition to build_response options (:klass, :http_version, :code, :message, :status, :body), it supports:
113
- # :expected_keys:: Hash of expected query keys(if value is not important, :key => :any)
114
- # :response:: Use this ready-made response object instead of building response
115
- # :exception:: Raise this Exception object instead of response
116
- # If you expect multiple requests to the same uri, options may also be an Array containing a list of the
117
- # above-described Hashes - requests will be expected in the same order they appear in the Array
118
- def expects(method, uri, options={})
119
- @github ||= stub_server
120
- opts = options.is_a?(Array) ? options.shift : options # may be a single options Hash or Array of Hashes
121
- @github.should_receive(:request) do |req|
122
- case method # match expected request method to actual
123
- when :any
124
- Net::HTTPRequest
125
- when Class
126
- method
127
- when Symbol, String
128
- classify('Net::HTTP::' + method.to_s.capitalize)
129
- end.should === req
130
- case uri # match expected uri to actual
131
- when URI::HTTP, URI::HTTPS
132
- uri.path
133
- when String
134
- URI.parse(uri).path
135
- when Regexp
136
- uri
137
- end.should === req.path
138
- if opts[:expected_keys] # match expected request query keys to actual keys
139
- actuals = CGI::parse(req.body)
140
- opts[:expected_keys].each do |key, val|
141
- actuals.should have_key key.to_s
142
- actual = actuals[key.to_s]
143
- actual = actual.first if actual.size == 1 # if only one array element, extract it
144
- case val # match expected key value to actual
145
- when :any
146
- when Class, Regexp, String
147
- val.should === actual
148
- else
149
- val.to_s.should === actual
150
- end
151
- end
152
- end
153
- expects(method, uri, options) if options.is_a?(Array) && !options.empty? # expect next request in Array
154
- raise opts[:exception] if opts[:exception] && opts[:exception].kind_of?(Exception)
155
- opts[:response] || build_response(opts)
156
- end
157
- end
158
-
159
- # Extends path to uri, registers it with FakeWeb with stub file at stubs/path as a response
160
- # If block is given, yields to block and checks that registered uri was hit during block execution
161
- def expect(method, path)
162
- case path
163
- when Regexp.new(github_yaml)
164
- uri = path
165
- file = path.sub(github_yaml, '')
166
- else
167
- uri = github_yaml + path
168
- file = path
169
- end
170
- FakeWeb.register_uri(method, uri, :response=>response_from_file(file))
171
- if block_given?
172
- yield
173
- FakeWeb.should have_requested(method, uri)
174
- end
175
- end
176
-
177
- # Auth for joe
178
- def joe_auth
179
- {'login' => 'joe007', 'token' => 'b937c8e7ea5a5b47f94eafa39b1e0462'}
180
- end
181
-
182
- def github_yaml
183
- 'http://github.com/api/v2/yaml'
184
- end
185
-
186
- def api
187
- GitHub::Api.instance
188
- end
189
-
190
- end # module GithubTest
1
+ require 'zemax'
2
+ require 'spec'
3
+ require 'spec/autorun'
4
+
5
+ Spec::Runner.configure do |config|
6
+ # == Mock Framework
7
+ #
8
+ # RSpec uses it's own mocking framework by default. If you prefer to
9
+ # use mocha, flexmock or RR, uncomment the appropriate line:
10
+ #
11
+ # config.mock_with :mocha
12
+ # config.mock_with :flexmock
13
+ # config.mock_with :rr
14
+ end
15
+
16
+ module ZemaxTest
17
+
18
+ end # module ZemaxTest
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ module ZemaxTest
4
+ describe Zemax do
5
+ end
6
+ end # module ZemaxTest
7
+
@@ -0,0 +1,11 @@
1
+ #task :build do
2
+ # system "gem build zemax.gemspec"
3
+ #end
4
+ #
5
+ #task :install => :build do
6
+ # system "gem install zemax-#{Zemax::VERSION}"
7
+ #end
8
+ #
9
+ #task :release => :build do
10
+ # system "gem push zemax-#{Zemax::VERSION}"
11
+ #end
@@ -0,0 +1,11 @@
1
+ task :build do
2
+ system "gem build zemax.gemspec"
3
+ end
4
+
5
+ task :install => :build do
6
+ system "gem install zemax-#{Zemax::VERSION}"
7
+ end
8
+
9
+ task :release => :build do
10
+ system "gem push zemax-#{Zemax::VERSION}.gem"
11
+ end