├── .gitignore ├── Gemfile ├── README.md ├── Rakefile ├── bin ├── console └── setup ├── lib ├── linq.rb └── linq │ └── version.rb ├── linq.gemspec └── vendor └── assets └── javascripts ├── libs ├── jquery.js ├── lib.js ├── lib.rx.js └── rx.js └── linq.js /.gitignore: -------------------------------------------------------------------------------- 1 | /.bundle/ 2 | /.yardoc 3 | /Gemfile.lock 4 | /_yardoc/ 5 | /coverage/ 6 | /doc/ 7 | /pkg/ 8 | /spec/reports/ 9 | /tmp/ 10 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Specify your gem's dependencies in linq.gemspec 4 | gemspec 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Linq 2 | 3 | This gem is wrapper for linq.js JavaScript plugin. Language-Integrated Query (LINQ) is a set of features introduced in Visual Studio 2008 (That moment for #C, VisualBasic) that extends powerful query capabilities to the language syntax. LINQ introduces standard, easily-learned patterns for querying and updating data, and the technology can be extended to support potentially any kind of data store. 4 | 5 | ## Features 6 | 7 | - Implement all .NET 4.0 methods and many extra methods (inspiration from Rx, Achiral, Haskell, Ruby, etc...) 8 | - Complete lazy evaluation 9 | - Two versions - linq.js and jquery.linq.js (jQuery plugin) 10 | - Binding for Reactive Extensions for JavaScript(RxJS) 11 | 12 | ## Installation 13 | 14 | Add this line to your application's Gemfile: 15 | 16 | ```ruby 17 | gem 'linq' 18 | ``` 19 | 20 | And then execute: 21 | 22 | $ bundle 23 | 24 | Or install it yourself as: 25 | 26 | $ gem install linq 27 | 28 | Add to javascript manifest `application.js` 29 | 30 | //= require linq 31 | 32 | ## Examples of usage 33 | ```javascript 34 | var jsonArray = [ 35 | { "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" }, 36 | { "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" }, 37 | { "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" }, 38 | { "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" } 39 | ] 40 | 41 | var queryResult = Enumerable.From(jsonArray) 42 | .Where(function (x) { return x.user.id < 200 }) 43 | .OrderBy(function (x) { return x.user.screen_name }) 44 | .Select(function (x) { return x.user.screen_name + ':' + x.text }) 45 | .ToArray(); 46 | 47 | // shortcut! string lambda selector 48 | var queryResult2 = Enumerable.From(jsonArray) 49 | .Where("$.user.id < 200") 50 | .OrderBy("$.user.screen_name") 51 | .Select("$.user.screen_name + ':' + $.text") 52 | .ToArray(); 53 | ``` 54 | 55 | More tricky: 56 | 57 | ```javascript 58 | // anonymous function 59 | Enumerable.Range(1, 10) 60 | .Where(function(i) { return i % 3 == 0; }) 61 | .Select(function(i) { return i * 10; }); 62 | 63 | // lambda expression 64 | Enumerable.Range(1, 10).Where("i => i % 3 == 0").Select("i => i * 10"); 65 | 66 | // $ is default iterator variable like Scala's "_" or Groovy's "it" 67 | Enumerable.Range(1, 10).Where("$ % 3 == 0").Select("$ * 10"); 68 | 69 | // "" is shorthand of "x => x" (identity function) 70 | Enumerable.Range(4, 7).Join(Enumerable.Range(8, 5), "", "", "outer,inner=>outer*inner"); 71 | 72 | // Enumerable.From is wrap from primitive array, string(to charArray), object(to KeyValuePair[]) etc.. 73 | var array = [100, 200, 30, 40, 500, 40, 200]; 74 | var ex1 = Enumerable.From(array).Distinct().ToArray(); // [100, 200, 30, 40, 500] 75 | var ex2 = Enumerable.From("foobar").ToArray(); // ["f", "o", "o", "b", "a", "r"]; 76 | var ex3 = Enumerable.From({foo:10, bar:20}).ToArray(); // [{Key:"foo",Value:10}, {Key:"bar",Value:20}] 77 | 78 | // object literal 79 | Enumerable.From(array).Select("val,i=>{Value:val, Index:i}") 80 | ``` 81 | And Jquery: 82 | 83 | ```javascript 84 | // $.Enumerable 85 | $.Enumerable.Range(1, 10).Where("$ % 2 == 0").ForEach("alert($)"); 86 | 87 | // TojQuery - Enumerable to jQuery 88 | $.Enumerable.Range(1, 10) 89 | .Select(function (i) { return $("