imw 0.2.18 → 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.
Files changed (172) hide show
  1. data/Gemfile +7 -26
  2. data/Gemfile.lock +13 -38
  3. data/{LICENSE → LICENSE.txt} +1 -1
  4. data/README.textile +35 -0
  5. data/Rakefile +45 -22
  6. data/VERSION +1 -1
  7. data/examples/foo.rb +19 -0
  8. data/examples/html_selector.rb +22 -0
  9. data/examples/nes_game_list.csv +625 -0
  10. data/examples/nes_gamespot.csv +1371 -0
  11. data/examples/nes_nintendo.csv +624 -0
  12. data/examples/nes_unlicensed.csv +89 -0
  13. data/examples/nes_wikipedia.csv +710 -0
  14. data/examples/nibbler_test.rb +24 -0
  15. data/examples/script.rb +19 -0
  16. data/lib/imw.rb +28 -140
  17. data/lib/imw/error.rb +9 -0
  18. data/lib/imw/recordizer.rb +8 -0
  19. data/lib/imw/recordizer/html_selector_recordizer.rb +86 -0
  20. data/lib/imw/recordizer/string_slice_recordizer.rb +39 -0
  21. data/lib/imw/resource.rb +3 -119
  22. data/lib/imw/serializer.rb +7 -0
  23. data/lib/imw/serializer/json_serializer.rb +17 -0
  24. data/lib/imw/uri.rb +41 -0
  25. data/spec/resource_spec.rb +78 -0
  26. data/spec/uri_spec.rb +55 -0
  27. metadata +81 -232
  28. data/README.rdoc +0 -371
  29. data/bin/imw +0 -5
  30. data/bin/tsv_to_json.rb +0 -29
  31. data/etc/imwrc.rb +0 -26
  32. data/examples/dataset.rb +0 -12
  33. data/examples/metadata.yml +0 -10
  34. data/lib/imw/archives.rb +0 -120
  35. data/lib/imw/archives/rar.rb +0 -19
  36. data/lib/imw/archives/tar.rb +0 -19
  37. data/lib/imw/archives/tarbz2.rb +0 -73
  38. data/lib/imw/archives/targz.rb +0 -73
  39. data/lib/imw/archives/zip.rb +0 -51
  40. data/lib/imw/boot.rb +0 -87
  41. data/lib/imw/compressed_files.rb +0 -94
  42. data/lib/imw/compressed_files/bz2.rb +0 -16
  43. data/lib/imw/compressed_files/compressible.rb +0 -75
  44. data/lib/imw/compressed_files/gz.rb +0 -16
  45. data/lib/imw/dataset.rb +0 -125
  46. data/lib/imw/dataset/paths.rb +0 -29
  47. data/lib/imw/dataset/workflow.rb +0 -195
  48. data/lib/imw/formats.rb +0 -33
  49. data/lib/imw/formats/delimited.rb +0 -170
  50. data/lib/imw/formats/excel.rb +0 -100
  51. data/lib/imw/formats/json.rb +0 -41
  52. data/lib/imw/formats/pdf.rb +0 -71
  53. data/lib/imw/formats/sgml.rb +0 -69
  54. data/lib/imw/formats/yaml.rb +0 -41
  55. data/lib/imw/metadata.rb +0 -83
  56. data/lib/imw/metadata/contains_metadata.rb +0 -54
  57. data/lib/imw/metadata/dsl.rb +0 -111
  58. data/lib/imw/metadata/field.rb +0 -37
  59. data/lib/imw/metadata/has_metadata.rb +0 -98
  60. data/lib/imw/metadata/has_summary.rb +0 -57
  61. data/lib/imw/metadata/schema.rb +0 -17
  62. data/lib/imw/parsers.rb +0 -8
  63. data/lib/imw/parsers/flat.rb +0 -44
  64. data/lib/imw/parsers/html_parser.rb +0 -387
  65. data/lib/imw/parsers/html_parser/matchers.rb +0 -289
  66. data/lib/imw/parsers/line_parser.rb +0 -87
  67. data/lib/imw/parsers/regexp_parser.rb +0 -72
  68. data/lib/imw/repository.rb +0 -12
  69. data/lib/imw/runner.rb +0 -118
  70. data/lib/imw/schemes.rb +0 -23
  71. data/lib/imw/schemes/ftp.rb +0 -142
  72. data/lib/imw/schemes/hdfs.rb +0 -251
  73. data/lib/imw/schemes/http.rb +0 -165
  74. data/lib/imw/schemes/local.rb +0 -409
  75. data/lib/imw/schemes/remote.rb +0 -119
  76. data/lib/imw/schemes/s3.rb +0 -143
  77. data/lib/imw/schemes/sql.rb +0 -129
  78. data/lib/imw/tools.rb +0 -12
  79. data/lib/imw/tools/aggregator.rb +0 -148
  80. data/lib/imw/tools/archiver.rb +0 -220
  81. data/lib/imw/tools/downloader.rb +0 -63
  82. data/lib/imw/tools/extension_analyzer.rb +0 -114
  83. data/lib/imw/tools/summarizer.rb +0 -83
  84. data/lib/imw/tools/transferer.rb +0 -167
  85. data/lib/imw/utils.rb +0 -74
  86. data/lib/imw/utils/dynamically_extendable.rb +0 -137
  87. data/lib/imw/utils/error.rb +0 -59
  88. data/lib/imw/utils/extensions/hpricot.rb +0 -34
  89. data/lib/imw/utils/has_uri.rb +0 -131
  90. data/lib/imw/utils/log.rb +0 -92
  91. data/lib/imw/utils/misc.rb +0 -57
  92. data/lib/imw/utils/paths.rb +0 -146
  93. data/lib/imw/utils/uri.rb +0 -59
  94. data/lib/imw/utils/uuid.rb +0 -33
  95. data/lib/imw/utils/validate.rb +0 -38
  96. data/lib/imw/utils/version.rb +0 -11
  97. data/spec/data/formats/delimited/sample.csv +0 -131
  98. data/spec/data/formats/delimited/sample.tsv +0 -131
  99. data/spec/data/formats/delimited/with_schema/ace-hardware-locations.tsv +0 -11
  100. data/spec/data/formats/delimited/with_schema/all-countries-ip-address-to-geolocation-data.tsv +0 -16
  101. data/spec/data/formats/delimited/with_schema/complete-list-of-starbucks-locations.tsv +0 -11
  102. data/spec/data/formats/delimited/with_schema/myspace-user-activity-stream-cumulative-word-count-from-from-dec.tsv +0 -22
  103. data/spec/data/formats/delimited/with_schema/myspace-user-activity-stream-myspace-application-adds-by-zip-cod.tsv +0 -22
  104. data/spec/data/formats/delimited/with_schema/myspace-user-activity-stream-myspace-application-counts.tsv +0 -12
  105. data/spec/data/formats/delimited/with_schema/myspace-user-activity-stream-user-count-by-latlong.tsv +0 -13
  106. data/spec/data/formats/delimited/with_schema/myspace-user-activity-stream-user-count-by-zip-code.tsv +0 -22
  107. data/spec/data/formats/delimited/with_schema/myspace-user-activity-stream-word-count-by-day-from-december-200.tsv +0 -22
  108. data/spec/data/formats/delimited/without_schema/ace-hardware-locations.tsv +0 -10
  109. data/spec/data/formats/delimited/without_schema/all-countries-ip-address-to-geolocation-data.tsv +0 -15
  110. data/spec/data/formats/delimited/without_schema/complete-list-of-starbucks-locations.tsv +0 -10
  111. data/spec/data/formats/delimited/without_schema/myspace-user-activity-stream-cumulative-word-count-from-from-dec.tsv +0 -21
  112. data/spec/data/formats/delimited/without_schema/myspace-user-activity-stream-myspace-application-adds-by-zip-cod.tsv +0 -21
  113. data/spec/data/formats/delimited/without_schema/myspace-user-activity-stream-myspace-application-counts.tsv +0 -11
  114. data/spec/data/formats/delimited/without_schema/myspace-user-activity-stream-user-count-by-latlong.tsv +0 -12
  115. data/spec/data/formats/delimited/without_schema/myspace-user-activity-stream-user-count-by-zip-code.tsv +0 -21
  116. data/spec/data/formats/delimited/without_schema/myspace-user-activity-stream-word-count-by-day-from-december-200.tsv +0 -21
  117. data/spec/data/formats/excel/sample.xls +0 -0
  118. data/spec/data/formats/json/sample.json +0 -1
  119. data/spec/data/formats/none/sample +0 -650
  120. data/spec/data/formats/sgml/sample.xml +0 -617
  121. data/spec/data/formats/text/sample.txt +0 -650
  122. data/spec/data/formats/yaml/sample.yaml +0 -410
  123. data/spec/data/schema-tabular.yaml +0 -11
  124. data/spec/imw/archives/rar_spec.rb +0 -16
  125. data/spec/imw/archives/tar_spec.rb +0 -16
  126. data/spec/imw/archives/tarbz2_spec.rb +0 -24
  127. data/spec/imw/archives/targz_spec.rb +0 -21
  128. data/spec/imw/archives/zip_spec.rb +0 -16
  129. data/spec/imw/archives_spec.rb +0 -77
  130. data/spec/imw/compressed_files/bz2_spec.rb +0 -15
  131. data/spec/imw/compressed_files/compressible_spec.rb +0 -36
  132. data/spec/imw/compressed_files/gz_spec.rb +0 -15
  133. data/spec/imw/compressed_files_spec.rb +0 -47
  134. data/spec/imw/dataset/paths_spec.rb +0 -32
  135. data/spec/imw/dataset/workflow_spec.rb +0 -41
  136. data/spec/imw/formats/delimited_spec.rb +0 -44
  137. data/spec/imw/formats/excel_spec.rb +0 -55
  138. data/spec/imw/formats/json_spec.rb +0 -18
  139. data/spec/imw/formats/sgml_spec.rb +0 -24
  140. data/spec/imw/formats/yaml_spec.rb +0 -19
  141. data/spec/imw/metadata/contains_metadata_spec.rb +0 -56
  142. data/spec/imw/metadata/field_spec.rb +0 -25
  143. data/spec/imw/metadata/has_metadata_spec.rb +0 -58
  144. data/spec/imw/metadata/has_summary_spec.rb +0 -32
  145. data/spec/imw/metadata/schema_spec.rb +0 -24
  146. data/spec/imw/metadata_spec.rb +0 -86
  147. data/spec/imw/parsers/line_parser_spec.rb +0 -96
  148. data/spec/imw/parsers/regexp_parser_spec.rb +0 -42
  149. data/spec/imw/resource_spec.rb +0 -32
  150. data/spec/imw/schemes/hdfs_spec.rb +0 -67
  151. data/spec/imw/schemes/http_spec.rb +0 -19
  152. data/spec/imw/schemes/local_spec.rb +0 -165
  153. data/spec/imw/schemes/remote_spec.rb +0 -38
  154. data/spec/imw/schemes/s3_spec.rb +0 -31
  155. data/spec/imw/schemes/sql_spec.rb +0 -3
  156. data/spec/imw/tools/aggregator_spec.rb +0 -71
  157. data/spec/imw/tools/archiver_spec.rb +0 -120
  158. data/spec/imw/tools/extension_analyzer_spec.rb +0 -153
  159. data/spec/imw/tools/summarizer_spec.rb +0 -8
  160. data/spec/imw/tools/transferer_spec.rb +0 -195
  161. data/spec/imw/utils/dynamically_extendable_spec.rb +0 -69
  162. data/spec/imw/utils/has_uri_spec.rb +0 -61
  163. data/spec/imw/utils/paths_spec.rb +0 -10
  164. data/spec/imw/utils/shared_paths_spec.rb +0 -29
  165. data/spec/imw_spec.rb +0 -14
  166. data/spec/rcov.opts +0 -1
  167. data/spec/spec_helper.rb +0 -31
  168. data/spec/support/custom_matchers.rb +0 -28
  169. data/spec/support/file_contents_matcher.rb +0 -30
  170. data/spec/support/paths_matcher.rb +0 -66
  171. data/spec/support/random.rb +0 -213
  172. data/spec/support/without_regard_to_order_matcher.rb +0 -41
@@ -1,167 +0,0 @@
1
- module IMW
2
- module Tools
3
-
4
- # A class to encapsulate transferring a resource from one URI to
5
- # another.
6
- class Transferer
7
-
8
- # The action this Transferer is to take.
9
- #
10
- # @return [:cp, :mv]
11
- attr_reader :action
12
-
13
- # Set the action of this Transferer.
14
- #
15
- # Will raise an error unless +the_action+ is <tt>:cp</tt> or
16
- # <tt>:mv</tt>.
17
- #
18
- # @param [:cp, :mv] the_action
19
- def action= the_action
20
- @action = case the_action.to_sym
21
- when :cp, :copy then :cp
22
- when :mv, :move, :mv! then :mv
23
- else raise IMW::ArgumentError.new("action (#{the_action}) must be one of `cp' (or `copy') or `mv' (or `move' or `mv!'")
24
- end
25
- end
26
-
27
- # The source resource.
28
- #
29
- # @return [IMW::Resource]
30
- attr_reader :source
31
-
32
- # Set the source for this transferer.
33
- #
34
- # If +the_source+ is local, will check that it exists and raise
35
- # an error if not.
36
- #
37
- # @param [String, IMW::Resource] the_source
38
- def source= the_source
39
- s = IMW.open(the_source)
40
- s.should_exist!("Cannot #{action_verb}") if s.is_local?
41
- @source = s
42
- end
43
-
44
- # The destination resource.
45
- #
46
- # @return [IMW::Resource]
47
- attr_reader :destination
48
-
49
- # Set the destination for this transferer.
50
- #
51
- # If +the_destination+ is local, will check that its parent
52
- # directory exists and raise an error if not.
53
- def destination= the_destination
54
- d = IMW.open(the_destination)
55
- d.dir.should_exist!("Cannot #{action_verb}") if d.is_local?
56
- @destination = d
57
- end
58
-
59
- # Instantiate a new transferer to take the given +action+ on
60
- # +source+ and +destination+.
61
- #
62
- # @param [:cp, :mv] action the action to take
63
- # @param [String, IMW::Resource] source
64
- # @param [String, IMW::Resource] destination
65
- def initialize action, source, destination
66
- self.action = action
67
- self.source = source
68
- self.destination = destination
69
- raise IMW::PathError.new("Source and destination have the same URI: #{source}") if self.source.uri.to_s == self.destination.uri.to_s
70
- end
71
-
72
- # Transfer source to destination.
73
- #
74
- # For local transfer, will raise errors unless the necessary
75
- # paths exist.
76
- def transfer!
77
- IMW.announce_if_verbose("#{action_gerund.capitalize} #{source} to #{destination}")
78
- send(transfer_method)
79
- destination.reopen
80
- end
81
-
82
- protected
83
-
84
- # Return the name of the method that should be used to transfer
85
- # +source+ to +destination+.
86
- #
87
- # @return [String]
88
- def transfer_method
89
- source_scheme = source.is_local? ? 'file' : source.scheme
90
- destination_scheme = destination.is_local? ? 'file' : destination.scheme
91
- method = "#{source_scheme}_to_#{destination_scheme}"
92
- raise IMW::NoMethodError.new("Do not know how to #{action_verb} #{source} to #{destination}") unless respond_to?(method)
93
- method
94
- end
95
-
96
- def action_verb # :nodoc
97
- action == :cp ? "copy" : "move"
98
- end
99
-
100
- def action_gerund # :nodoc
101
- action == :cp ? "copying" : "moving"
102
- end
103
-
104
- #
105
- # Purely local file
106
- #
107
-
108
- def file_to_file
109
- fu_action = (action == :cp && source.is_directory?) ? :cp_r : action
110
- FileUtils.send(fu_action, source.path, destination.path)
111
- end
112
-
113
- #
114
- # HTTP
115
- #
116
-
117
- def http_to_file
118
- File.open(destination.path, 'w') { |f| f.write(source.read) }
119
- end
120
-
121
- #
122
- # S3
123
- #
124
-
125
- def file_to_s3
126
- IMW::Schemes::S3.put(source, destination)
127
- end
128
-
129
- def http_to_s3
130
- IMW::Schemes::S3.put(source, destination)
131
- end
132
-
133
- def s3_to_file
134
- IMW::Schemes::S3.get(source, destination)
135
- end
136
-
137
- def s3_to_s3
138
- IMW::Schemes::S3.copy(source, destination)
139
- end
140
-
141
- #
142
- # HDFS
143
- #
144
-
145
- def hdfs_to_hdfs
146
- IMW::Schemes::HDFS.fs(action, source.path, destination.path)
147
- end
148
-
149
- def file_to_hdfs
150
- IMW::Schemes::HDFS.fs(:put, source.path, destination.path)
151
- end
152
-
153
- def hdfs_to_file
154
- IMW::Schemes::HDFS.fs(:get, source.path, destination.path)
155
- end
156
-
157
- def s3_to_hdfs
158
- IMW::Schemes::HDFS.fs(action, source.s3n_url, destination.path)
159
- end
160
-
161
- def hdfs_to_s3
162
- IMW::Schemes::HDFS.fs(action, source.path, destination.s3n_url)
163
- end
164
-
165
- end
166
- end
167
- end
@@ -1,74 +0,0 @@
1
- require 'rubygems'
2
- require 'fileutils'
3
- require 'active_support/core_ext/object/blank'
4
- require 'active_support/core_ext/hash/reverse_merge'
5
- require 'active_support/core_ext/string/starts_ends_with'
6
- require 'imw/utils/error'
7
- require 'imw/utils/log'
8
- require 'imw/utils/paths'
9
- require 'imw/utils/misc'
10
-
11
- module IMW
12
-
13
- # Utility modules.
14
- module Utils
15
- autoload :DynamicallyExtendable, 'imw/utils/dynamically_extendable'
16
- autoload :HasURI, 'imw/utils/has_uri'
17
- end
18
-
19
- # A replacement for the standard system call which raises an
20
- # IMW::SystemCallError if the command fails which prints better
21
- # debugging info.
22
- #
23
- # This function relies upon Kernel.system and obeys the same rules:
24
- #
25
- # - if +commands+ has only only a single element then no shell
26
- # characters or spaces are escaped -- you have to do it yourself
27
- # or you get to use shell characters, depending on your
28
- # perspective.
29
- #
30
- # - if +commands+ is a list of elements then the second and further
31
- # elements in the list have their shell characters and spaces
32
- # escaped
33
- #
34
- # But it also has its own rules:
35
- #
36
- # - When one of the +commands+ is an empty or blank string,
37
- # Kernel.system honors it and escapes it properly and sends it
38
- # along for evaluation. This can be a problem for some programs
39
- # and so IMW.system excludes blank (as in <tt>blank?</tt>)
40
- # elements of +commands+.
41
- #
42
- # - +commands+ will be flattened (see the gotcha below)
43
- #
44
- # Calling out to the shell like this is often brittle. Imagine
45
- # defining
46
- #
47
- # prog = 'some_prog'
48
- # flags = '-v -f'
49
- # args = 'file.txt'
50
- #
51
- # and later calling
52
- #
53
- # IMW.system prog, flags, args
54
- #
55
- # The space in the second argument ('-v -f') will be escaped and
56
- # will therefore not be properly parsed by +some_prog+. Instead try
57
- #
58
- # prog = 'some_prog'
59
- # flags = ['-v', '-f']
60
- # args = ['file.txt']
61
- #
62
- # IMW.system prog, flags, *args
63
- #
64
- # which will work fine since +flags+ will automatically be flattend.
65
- def self.system *commands
66
- stripped_commands = commands.flatten.map { |command| command.to_s unless command.blank? }.compact
67
- IMW.announce_if_verbose(stripped_commands.join(" "))
68
- exit_code = Kernel.system(*stripped_commands)
69
- raise IMW::SystemCallError.new($?.dup, commands.join(' ')) unless $?.success?
70
- exit_code
71
- end
72
-
73
- end
74
-
@@ -1,137 +0,0 @@
1
- module IMW
2
- module Utils
3
-
4
- # Provides an including class with a class-level array of
5
- # "handlers" that it can use to dynamically extend its instances
6
- # with specific modules only if certain conditions are met.
7
- #
8
- # This allows different instances of a class to implement very
9
- # different behavior at runtime.
10
- #
11
- # An example use case might be a Database class which dynamically
12
- # extends its instances with an adaptor module appropriate to the
13
- # particular database the object refers to.
14
- module DynamicallyExtendable
15
-
16
- def self.included obj
17
- obj.extend(ClassMethods)
18
- end
19
-
20
- # Return the modules this object has been extended by.
21
- #
22
- # @return [Array]
23
- def modules
24
- @modules ||= []
25
- end
26
-
27
- # Works just like Object#extend except it keeps track of the
28
- # modules it has extended.
29
- #
30
- # @see IMW::Utils::DynamicallyExtendable#modules
31
- def extend mod
32
- modules << mod
33
- super mod
34
- end
35
-
36
- # Iterate through this object's class's handlers and extend this
37
- # object with the module referred to by any matching handlers.
38
- def extend_appropriately! options={}
39
- self.class.extend_instance! self, options
40
- end
41
-
42
- # A collection of methods which provide a class including
43
- # IMW::Utils::DynamicallyExtendable with a class-level Array of
44
- # handlers that can be applied to instances by calling the
45
- # instance's +extend_appropriately!+ method.
46
- module ClassMethods
47
-
48
- # The handlers an including class has defined.
49
- #
50
- # @return [Array<Array>]
51
- def handlers
52
- @handlers ||= []
53
- end
54
-
55
- # Register a new handler for an including class.
56
- #
57
- # +handler+ must be one of
58
- #
59
- # 1. Regexp
60
- # 2. Proc
61
- # 3. +true+
62
- #
63
- # In case (1), if the regular expression matches the
64
- # instance's +to_s+ method then the module (+mod+) will be
65
- # used..
66
- #
67
- # In case (2), if the Proc returns a value other than +false+
68
- # or +nil+ after being passed an instance then the module will
69
- # be used.
70
- #
71
- # In case (3), the module will be used.
72
- #
73
- # @param [String, Module] mod
74
- # @param [Regexp, Proc, true] handler
75
- def register_handler mod, handler
76
- raise IMW::ArgumentError.new("Module must be either a Module or String") unless mod.is_a?(Module) || mod.is_a?(String)
77
- raise IMW::ArgumentError.new("Handler must be either a Regexp, Proc, or true") unless handler.is_a?(Regexp) || handler.is_a?(Proc) || handler == true
78
- handlers << [mod, handler]
79
- end
80
-
81
- # Register a collection of handlers.
82
- #
83
- # @see IMW::Utils::DynamicallyExtendable::ClassMethods#register_handler
84
- def register_handlers *pairs
85
- pairs.each { |pair| register_handler *pair }
86
- end
87
-
88
- # Iterate through this class's handlers and extend the given
89
- # object with modules whose handler conditions match the
90
- # instance.
91
- #
92
- # Passing in <tt>:use_modules</tt> or <tt>:skip_modules</tt>
93
- # allows overriding the default behavior of handlers.
94
- #
95
- # @param [Object] instance
96
- # @param [Hash] options
97
- # @option options [Array<String,Module>] use_modules a list of modules used regardless of handlers
98
- # @option options [Array<String,Module>] skip_modules a list of modules not to be used regardless of handlers
99
- # @return [Object] the newly extended object
100
- def extend_instance! instance, options={}
101
- return if options[:no_modules]
102
- options.reverse_merge!(:use_modules => [], :skip_modules => [])
103
- handlers.each do |mod_name, handler|
104
- case handler
105
- when Regexp then extend_instance_with_mod_or_string!(instance, mod_name, options[:skip_modules]) if handler =~ instance.to_s
106
- when Proc then extend_instance_with_mod_or_string!(instance, mod_name, options[:skip_modules]) if handler.call(instance)
107
- when TrueClass then extend_instance_with_mod_or_string!(instance, mod_name, options[:skip_modules])
108
- else raise IMW::TypeError("A handler must be Regexp, Proc, or true")
109
- end
110
- end
111
- options[:use_modules].each { |mod_name| extend_instance_with_mod_or_string!(instance, mod_name, options[:skip_modules]) }
112
- instance
113
- end
114
-
115
- # Extend +instance+ with +mod_or_string+. Will work hard to
116
- # try and interpret +mod_or_string+ as a module if it's a
117
- # string.
118
- #
119
- # @param [Object] instance
120
- #
121
- # @param [Module, String] mod_or_string the module or string
122
- # representing a module to extend the instance with
123
- #
124
- # @param [Array<Module,String>] skip_modules modules to exclude
125
- def extend_instance_with_mod_or_string! instance, mod_or_string, skip_modules
126
- return if skip_modules.include?(mod_or_string)
127
- if mod_or_string.is_a?(Module)
128
- instance.extend(mod_or_string)
129
- else
130
- m = IMW.class_eval(mod_or_string)
131
- instance.extend(m) unless skip_modules.include?(m)
132
- end
133
- end
134
- end
135
- end
136
- end
137
- end
@@ -1,59 +0,0 @@
1
- module IMW
2
-
3
- # Base error class which all IMW errors subclass.
4
- Error = Class.new(StandardError)
5
-
6
- # Method undefined.
7
- NoMethodError = Class.new(Error)
8
-
9
- # Type error.
10
- TypeError = Class.new(Error)
11
-
12
- # Not implemented (typically because user needs to define a method
13
- # when subclassing a base class).
14
- NotImplementedError = Class.new(Error)
15
-
16
- # Error during parsing.
17
- ParseError = Class.new(Error)
18
-
19
- # Error with a non-existing, invalid, or inaccessible path.
20
- PathError = Class.new(Error)
21
-
22
- # Error communicating with a remote entity.
23
- NetworkError = Class.new(Error)
24
-
25
- # Raised when a resource is of the wrong scheme.
26
- SchemeError = Class.new(Error)
27
-
28
- # Raised when a resource is of the wrong (or malformed) format.
29
- FormatError = Class.new(Error)
30
-
31
- # Bad argument.
32
- ArgumentError = Class.new(Error)
33
-
34
- # Error in defining or matching a schema.
35
- SchemaError = Class.new(Error)
36
-
37
- # An error meant to be used when a system call goes awry. It will
38
- # report exit status and the process id of the offending call.
39
- class SystemCallError < IMW::Error
40
-
41
- attr_reader :status, :message
42
-
43
- def initialize(status, message)
44
- @status = status
45
- @message = message
46
- end
47
-
48
- def display
49
- "(error code: #{status.exitstatus}, pid: #{status.pid}) #{message}"
50
- end
51
-
52
- def to_s
53
- "(error code: #{status.exitstatus}, pid: #{status.pid}) #{message}"
54
- end
55
-
56
- end
57
-
58
-
59
- end
@@ -1,34 +0,0 @@
1
- require 'hpricot'
2
-
3
- module Hpricot::IMWExtensions
4
-
5
- # Return the contents of the first element to match +path+.
6
- def contents_of path
7
- cnts = self.at path
8
- cnts.inner_html if cnts
9
- end
10
-
11
- # Return the value of +attr+ for the first element to match +path+.
12
- def path_attr path, attr
13
- cnts = self.at path
14
- cnts.attributes[attr] if cnts
15
- end
16
-
17
- # Return the value of the +class+ attribute of the first element to
18
- # match +path+.
19
- def class_of path
20
- self.path_attr(path, 'class')
21
- end
22
- end
23
-
24
- class Hpricot::Elem
25
- include Hpricot::IMWExtensions
26
- end
27
-
28
- class Hpricot::Elements
29
- include Hpricot::IMWExtensions
30
- end
31
-
32
- class Hpricot::Doc
33
- include Hpricot::IMWExtensions
34
- end