zemax 0.1.0 → 0.2.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/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